162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 or BSD-3-Clause */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright(c) 2015-2017 Intel Corporation.
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#ifndef _ASPM_H
762306a36Sopenharmony_ci#define _ASPM_H
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include "hfi.h"
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ciextern uint aspm_mode;
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cienum aspm_mode {
1462306a36Sopenharmony_ci	ASPM_MODE_DISABLED = 0,	/* ASPM always disabled, performance mode */
1562306a36Sopenharmony_ci	ASPM_MODE_ENABLED = 1,	/* ASPM always enabled, power saving mode */
1662306a36Sopenharmony_ci	ASPM_MODE_DYNAMIC = 2,	/* ASPM enabled/disabled dynamically */
1762306a36Sopenharmony_ci};
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_civoid aspm_init(struct hfi1_devdata *dd);
2062306a36Sopenharmony_civoid aspm_exit(struct hfi1_devdata *dd);
2162306a36Sopenharmony_civoid aspm_hw_disable_l1(struct hfi1_devdata *dd);
2262306a36Sopenharmony_civoid __aspm_ctx_disable(struct hfi1_ctxtdata *rcd);
2362306a36Sopenharmony_civoid aspm_disable_all(struct hfi1_devdata *dd);
2462306a36Sopenharmony_civoid aspm_enable_all(struct hfi1_devdata *dd);
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_cistatic inline void aspm_ctx_disable(struct hfi1_ctxtdata *rcd)
2762306a36Sopenharmony_ci{
2862306a36Sopenharmony_ci	/* Quickest exit for minimum impact */
2962306a36Sopenharmony_ci	if (likely(!rcd->aspm_intr_supported))
3062306a36Sopenharmony_ci		return;
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci	__aspm_ctx_disable(rcd);
3362306a36Sopenharmony_ci}
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci#endif /* _ASPM_H */
36