1 /* SPDX-License-Identifier: MIT */ 2 /* 3 * Copyright © 2022 Intel Corporation 4 */ 5 6 #ifndef _XE_RTP_TYPES_ 7 #define _XE_RTP_TYPES_ 8 9 #include <linux/types.h> 10 11 #include "regs/xe_reg_defs.h" 12 13 struct xe_hw_engine; 14 struct xe_gt; 15 16 /** 17 * struct xe_rtp_action - action to take for any matching rule 18 * 19 * This struct records what action should be taken in a register that has a 20 * matching rule. Example of actions: set/clear bits. 21 */ 22 struct xe_rtp_action { 23 /** @reg: Register */ 24 struct xe_reg reg; 25 /** 26 * @clr_bits: bits to clear when updating register. It's always a 27 * superset of bits being modified 28 */ 29 u32 clr_bits; 30 /** @set_bits: bits to set when updating register */ 31 u32 set_bits; 32 #define XE_RTP_NOCHECK .read_mask = 0 33 /** @read_mask: mask for bits to consider when reading value back */ 34 u32 read_mask; 35 #define XE_RTP_ACTION_FLAG_ENGINE_BASE BIT(0) 36 /** @flags: flags to apply on rule evaluation or action */ 37 u8 flags; 38 }; 39 40 enum { 41 XE_RTP_MATCH_PLATFORM, 42 XE_RTP_MATCH_SUBPLATFORM, 43 XE_RTP_MATCH_GRAPHICS_VERSION, 44 XE_RTP_MATCH_GRAPHICS_VERSION_RANGE, 45 XE_RTP_MATCH_GRAPHICS_VERSION_ANY_GT, 46 XE_RTP_MATCH_GRAPHICS_STEP, 47 XE_RTP_MATCH_MEDIA_VERSION, 48 XE_RTP_MATCH_MEDIA_VERSION_RANGE, 49 XE_RTP_MATCH_MEDIA_VERSION_ANY_GT, 50 XE_RTP_MATCH_MEDIA_STEP, 51 XE_RTP_MATCH_INTEGRATED, 52 XE_RTP_MATCH_DISCRETE, 53 XE_RTP_MATCH_ENGINE_CLASS, 54 XE_RTP_MATCH_NOT_ENGINE_CLASS, 55 XE_RTP_MATCH_FUNC, 56 XE_RTP_MATCH_OR, 57 }; 58 59 /** struct xe_rtp_rule - match rule for processing entry */ 60 struct xe_rtp_rule { 61 u8 match_type; 62 63 /* match filters */ 64 union { 65 /* MATCH_PLATFORM / MATCH_SUBPLATFORM */ 66 struct { 67 u8 platform; 68 u8 subplatform; 69 }; 70 /* 71 * MATCH_GRAPHICS_VERSION / XE_RTP_MATCH_GRAPHICS_VERSION_RANGE / 72 * MATCH_MEDIA_VERSION / XE_RTP_MATCH_MEDIA_VERSION_RANGE 73 */ 74 struct { 75 u32 ver_start; 76 #define XE_RTP_END_VERSION_UNDEFINED U32_MAX 77 u32 ver_end; 78 }; 79 /* MATCH_STEP */ 80 struct { 81 u8 step_start; 82 u8 step_end; 83 }; 84 /* MATCH_ENGINE_CLASS / MATCH_NOT_ENGINE_CLASS */ 85 struct { 86 u8 engine_class; 87 }; 88 /* MATCH_FUNC */ 89 bool (*match_func)(const struct xe_gt *gt, 90 const struct xe_hw_engine *hwe); 91 }; 92 }; 93 94 /** struct xe_rtp_entry_sr - Entry in an rtp table */ 95 struct xe_rtp_entry_sr { 96 const char *name; 97 const struct xe_rtp_action *actions; 98 const struct xe_rtp_rule *rules; 99 u8 n_rules; 100 u8 n_actions; 101 #define XE_RTP_ENTRY_FLAG_FOREACH_ENGINE BIT(0) 102 u8 flags; 103 }; 104 105 /** struct xe_rtp_entry - Entry in an rtp table, with no action associated */ 106 struct xe_rtp_entry { 107 const char *name; 108 const struct xe_rtp_rule *rules; 109 u8 n_rules; 110 }; 111 112 enum xe_rtp_process_type { 113 XE_RTP_PROCESS_TYPE_GT, 114 XE_RTP_PROCESS_TYPE_ENGINE, 115 }; 116 117 struct xe_rtp_process_ctx { 118 union { 119 struct xe_gt *gt; 120 struct xe_hw_engine *hwe; 121 }; 122 enum xe_rtp_process_type type; 123 unsigned long *active_entries; 124 size_t n_entries; 125 }; 126 127 #endif 128