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 */
58enum 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

source code of linux/drivers/gpu/drm/xe/xe_guc_klv_thresholds_set_types.h