mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-08-21 16:31:14 +02:00

The GuC firmware monitors VF's activity and notifies the PF driver once any configured threshold related to such activity is exceeded. The available thresholds are defined in the GuC ABI as part of the GuC VF Configuration KLVs. Threshold configurations performed by the PF driver and notifications sent by the GuC rely on the KLV keys, which are not zero-based and might not guarantee continuity. To simplify the driver code and eliminate the need to repeat very similar code for each threshold, introduce the threshold set macro that allows to generate required code based on unique threshold tag. Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com> Acked-by: Lucas De Marchi <lucas.demarchi@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20240514190015.2172-3-michal.wajdeczko@intel.com
65 lines
2.0 KiB
C
65 lines
2.0 KiB
C
/* SPDX-License-Identifier: MIT */
|
|
/*
|
|
* Copyright © 2024 Intel Corporation
|
|
*/
|
|
|
|
#ifndef _XE_GUC_KLV_THRESHOLDS_SET_H_
|
|
#define _XE_GUC_KLV_THRESHOLDS_SET_H_
|
|
|
|
#include "abi/guc_klvs_abi.h"
|
|
#include "xe_guc_klv_helpers.h"
|
|
#include "xe_guc_klv_thresholds_set_types.h"
|
|
|
|
/**
|
|
* MAKE_GUC_KLV_VF_CFG_THRESHOLD_KEY - Prepare the name of the KLV key constant.
|
|
* @TAG: unique tag of the GuC threshold KLV key.
|
|
*/
|
|
#define MAKE_GUC_KLV_VF_CFG_THRESHOLD_KEY(TAG) \
|
|
MAKE_GUC_KLV_KEY(CONCATENATE(VF_CFG_THRESHOLD_, TAG))
|
|
|
|
/**
|
|
* xe_guc_klv_threshold_key_to_index - Find index of the tracked GuC threshold.
|
|
* @key: GuC threshold KLV key.
|
|
*
|
|
* This translation is automatically generated using &MAKE_XE_GUC_KLV_THRESHOLDS_SET.
|
|
* Return: index of the GuC threshold KLV or -1 if not found.
|
|
*/
|
|
static inline int xe_guc_klv_threshold_key_to_index(u32 key)
|
|
{
|
|
switch (key) {
|
|
#define define_xe_guc_klv_threshold_key_to_index_case(TAG, ...) \
|
|
\
|
|
case MAKE_GUC_KLV_VF_CFG_THRESHOLD_KEY(TAG): \
|
|
return MAKE_XE_GUC_KLV_THRESHOLD_INDEX(TAG);
|
|
|
|
/* private: auto-generated case statements */
|
|
MAKE_XE_GUC_KLV_THRESHOLDS_SET(define_xe_guc_klv_threshold_key_to_index_case)
|
|
}
|
|
return -1;
|
|
#undef define_xe_guc_klv_threshold_key_to_index_case
|
|
}
|
|
|
|
/**
|
|
* xe_guc_klv_threshold_index_to_key - Get tracked GuC threshold KLV key.
|
|
* @index: GuC threshold KLV index.
|
|
*
|
|
* This translation is automatically generated using &MAKE_XE_GUC_KLV_THRESHOLDS_SET.
|
|
* Return: key of the GuC threshold KLV or 0 on malformed index.
|
|
*/
|
|
static inline u32 xe_guc_klv_threshold_index_to_key(enum xe_guc_klv_threshold_index index)
|
|
{
|
|
switch (index) {
|
|
#define define_xe_guc_klv_threshold_index_to_key_case(TAG, ...) \
|
|
\
|
|
case MAKE_XE_GUC_KLV_THRESHOLD_INDEX(TAG): \
|
|
return MAKE_GUC_KLV_VF_CFG_THRESHOLD_KEY(TAG);
|
|
|
|
/* private: auto-generated case statements */
|
|
MAKE_XE_GUC_KLV_THRESHOLDS_SET(define_xe_guc_klv_threshold_index_to_key_case)
|
|
}
|
|
return 0; /* unreachable */
|
|
#undef define_xe_guc_klv_threshold_index_to_key_case
|
|
}
|
|
|
|
#endif
|