/* SPDX-License-Identifier: MIT */ /* * Copyright © 2022 Intel Corporation */ #ifndef _XE_RTP_TYPES_ #define _XE_RTP_TYPES_ #include #include "regs/xe_reg_defs.h" struct xe_hw_engine; struct xe_gt; /** * struct xe_rtp_action - action to take for any matching rule * * This struct records what action should be taken in a register that has a * matching rule. Example of actions: set/clear bits. */ struct xe_rtp_action { /** @reg: Register */ struct xe_reg reg; /** * @clr_bits: bits to clear when updating register. It's always a * superset of bits being modified */ u32 clr_bits; /** @set_bits: bits to set when updating register */ u32 set_bits; #define XE_RTP_NOCHECK .read_mask = 0 /** @read_mask: mask for bits to consider when reading value back */ u32 read_mask; #define XE_RTP_ACTION_FLAG_ENGINE_BASE BIT(0) /** @flags: flags to apply on rule evaluation or action */ u8 flags; }; enum { XE_RTP_MATCH_PLATFORM, XE_RTP_MATCH_SUBPLATFORM, XE_RTP_MATCH_GRAPHICS_VERSION, XE_RTP_MATCH_GRAPHICS_VERSION_RANGE, XE_RTP_MATCH_GRAPHICS_STEP, XE_RTP_MATCH_MEDIA_VERSION, XE_RTP_MATCH_MEDIA_VERSION_RANGE, XE_RTP_MATCH_MEDIA_STEP, XE_RTP_MATCH_INTEGRATED, XE_RTP_MATCH_DISCRETE, XE_RTP_MATCH_ENGINE_CLASS, XE_RTP_MATCH_NOT_ENGINE_CLASS, XE_RTP_MATCH_FUNC, }; /** struct xe_rtp_rule - match rule for processing entry */ struct xe_rtp_rule { u8 match_type; /* match filters */ union { /* MATCH_PLATFORM / MATCH_SUBPLATFORM */ struct { u8 platform; u8 subplatform; }; /* * MATCH_GRAPHICS_VERSION / XE_RTP_MATCH_GRAPHICS_VERSION_RANGE / * MATCH_MEDIA_VERSION / XE_RTP_MATCH_MEDIA_VERSION_RANGE */ struct { u32 ver_start; #define XE_RTP_END_VERSION_UNDEFINED U32_MAX u32 ver_end; }; /* MATCH_STEP */ struct { u8 step_start; u8 step_end; }; /* MATCH_ENGINE_CLASS / MATCH_NOT_ENGINE_CLASS */ struct { u8 engine_class; }; /* MATCH_FUNC */ bool (*match_func)(const struct xe_gt *gt, const struct xe_hw_engine *hwe); }; }; /** struct xe_rtp_entry_sr - Entry in an rtp table */ struct xe_rtp_entry_sr { const char *name; const struct xe_rtp_action *actions; const struct xe_rtp_rule *rules; u8 n_rules; u8 n_actions; #define XE_RTP_ENTRY_FLAG_FOREACH_ENGINE BIT(0) u8 flags; }; /** struct xe_rtp_entry - Entry in an rtp table, with no action associated */ struct xe_rtp_entry { const char *name; const struct xe_rtp_rule *rules; u8 n_rules; }; enum xe_rtp_process_type { XE_RTP_PROCESS_TYPE_GT, XE_RTP_PROCESS_TYPE_ENGINE, }; struct xe_rtp_process_ctx { union { struct xe_gt *gt; struct xe_hw_engine *hwe; }; enum xe_rtp_process_type type; unsigned long *active_entries; size_t n_entries; }; #endif