xref: /linux/drivers/gpu/drm/xe/xe_guc_klv_thresholds_set_types.h (revision a1ff5a7d78a036d6c2178ee5acd6ba4946243800)
1 /* SPDX-License-Identifier: MIT */
2 /*
3  * Copyright © 2024 Intel Corporation
4  */
5 
6 #ifndef _XE_GUC_KLV_THRESHOLDS_SET_TYPES_H_
7 #define _XE_GUC_KLV_THRESHOLDS_SET_TYPES_H_
8 
9 #include "xe_args.h"
10 
11 /**
12  * MAKE_XE_GUC_KLV_THRESHOLDS_SET - Generate various GuC thresholds definitions.
13  * @define: name of the inner macro to expand.
14  *
15  * The GuC firmware is able to monitor VF's adverse activity and will notify the
16  * PF driver once any threshold is exceeded.
17  *
18  * This super macro allows various conversions between the GuC adverse event
19  * threshold KLV definitions and the driver code without repeating similar code
20  * or risking missing some cases.
21  *
22  * For each GuC threshold definition, the inner macro &define will be provided
23  * with the &TAG, that corresponds to the GuC threshold KLV key name defined by
24  * ABI and the associated &NAME, that may be used in code or debugfs/sysfs::
25  *
26  *	define(TAG, NAME)
27  */
28 #define MAKE_XE_GUC_KLV_THRESHOLDS_SET(define)		\
29 	define(CAT_ERR, cat_error_count)		\
30 	define(ENGINE_RESET, engine_reset_count)	\
31 	define(PAGE_FAULT, page_fault_count)		\
32 	define(H2G_STORM, guc_time_us)			\
33 	define(IRQ_STORM, irq_time_us)			\
34 	define(DOORBELL_STORM, doorbell_time_us)	\
35 	/* end */
36 
37 /**
38  * XE_GUC_KLV_NUM_THRESHOLDS - Number of GuC thresholds KLVs.
39  *
40  * Calculated automatically using &MAKE_XE_GUC_KLV_THRESHOLDS_SET.
41  */
42 #define XE_GUC_KLV_NUM_THRESHOLDS \
43 	(CALL_ARGS(COUNT_ARGS, MAKE_XE_GUC_KLV_THRESHOLDS_SET(ARGS_SEP_COMMA)) - 1)
44 
45 /**
46  * MAKE_XE_GUC_KLV_THRESHOLD_INDEX - Create enumerator name.
47  * @TAG: unique TAG of the enum xe_guc_klv_threshold_index.
48  */
49 #define MAKE_XE_GUC_KLV_THRESHOLD_INDEX(TAG) \
50 	CONCATENATE(XE_GUC_KLV_THRESHOLD_INDEX_, TAG)
51 
52 /**
53  * enum xe_guc_klv_threshold_index - Index of the tracked GuC threshold.
54  *
55  * This enum is automatically generated using &MAKE_XE_GUC_KLV_THRESHOLDS_SET.
56  * All these generated enumerators will only be used by the also generated code.
57  */
58 enum xe_guc_klv_threshold_index {
59 #define define_xe_guc_klv_threshold_index_enum(TAG, ...)	\
60 								\
61 	MAKE_XE_GUC_KLV_THRESHOLD_INDEX(TAG),
62 
63 	/* private: auto-generated enum definitions */
64 	MAKE_XE_GUC_KLV_THRESHOLDS_SET(define_xe_guc_klv_threshold_index_enum)
65 #undef define_xe_guc_klv_threshold_index_enum
66 };
67 
68 #endif
69