xref: /aosp_15_r20/external/intel-media-driver/media_common/agnostic/common/os/mos_utilities_common.h (revision ba62d9d3abf0e404f2022b4cd7a85e107f48596f)
1 /*
2 * Copyright (c) 2020-2022, Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included
12 * in all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 * OTHER DEALINGS IN THE SOFTWARE.
21 */
22 //!
23 //! \file     mos_utilities_common.h
24 //! \brief    Common OS service across different platform
25 //! \details  Common OS service across different platform
26 //!
27 #ifndef __MOS_UTILITIES_COMMON_H__
28 #define __MOS_UTILITIES_COMMON_H__
29 
30 #include <string>
31 #include "mos_defs.h"
32 
33 #ifndef __MOS_USER_FEATURE_WA_
34 #define __MOS_USER_FEATURE_WA_
35 #endif
36 //------------------------------------------------------------------------------
37 // SECTION: Media User Feature Control
38 //
39 // ABSTRACT: Is an abstraction to read and write system level settings relating
40 //      to GEN media driver.
41 //------------------------------------------------------------------------------
42 
43 //!
44 //! \brief ASSERT when failing to read user feature key or default user feature key value,
45 //!        according to MOS_UserFeature_ReadValue_ID.
46 //!
47 #define MOS_USER_FEATURE_INVALID_KEY_ASSERT(_expr) \
48     if ((_expr) == MOS_STATUS_NULL_POINTER)        \
49     {                                              \
50         MOS_OS_ASSERT(false);                      \
51     }
52 
53 //!
54 //! \brief User Feature Type maximum and minimum data size
55 //!
56 #define MOS_USER_CONTROL_MIN_DATA_SIZE 128
57 #define MOS_USER_CONTROL_MAX_DATA_SIZE 2048
58 #define MOS_USER_MAX_STRING_COUNT 128
59 
60 #define MOS_USER_FEATURE_MAX_UINT32_STR_VALUE "4294967295"
61 
62 //! MOS User Feature
63 #define __NULL_USER_FEATURE_VALUE_WRITE_DATA__        \
64     {                                                 \
65         __MOS_USER_FEATURE_KEY_INVALID_ID, { {0}, 0 } \
66     }
67 #ifdef __MOS_USER_FEATURE_WA_
68 #define __NULL_USER_FEATURE_VALUE__                                                                                                                                                                                                              \
69     {                                                                                                                                                                                                                                            \
70         __MOS_USER_FEATURE_KEY_INVALID_ID, nullptr, nullptr, nullptr, nullptr, MOS_USER_FEATURE_TYPE_INVALID, MOS_USER_FEATURE_VALUE_TYPE_INVALID, nullptr, nullptr, false, 0, nullptr, MOS_USER_FEATURE_EFFECT_ALWAYS, {0}, { {0}, 0 }          \
71     }
72 #define MOS_DECLARE_UF_KEY(Id, ValueName, Readpath, Writepath, Group, Type, ValueType, DefaultValue, Description)                                                          \
73     {                                                                                                                                                                      \
74         Id, ValueName, Group, Readpath, Writepath, Type, ValueType, DefaultValue, Description, false, 1, nullptr, MOS_USER_FEATURE_EFFECT_ALWAYS, {0}, { {0}, 0 }          \
75     }
76 // The MOS_DECLARE_UF_KEY_DBGONLY macro will make the user feature key read only return default value in release build without accessing user setting
77 // it is an alternative way for removing the key defintion entirely in release driver, and still provide an unified place for default values of the
78 // user feature key read request that is needed for release driver
79 #define MOS_DECLARE_UF_KEY_DBGONLY(Id, ValueName, Readpath, Writepath, Group, Type, ValueType, DefaultValue, Description)                                                     \
80     {                                                                                                                                                                         \
81         Id, ValueName, Group, Readpath, Writepath, Type, ValueType, DefaultValue, Description, false, 1, nullptr, MOS_USER_FEATURE_EFFECT_DEBUGONLY, {0}, { {0}, 0 }          \
82     }
83 #else
84 #define __NULL_USER_FEATURE_VALUE__                                                                                                                                                                                                        \
85     {                                                                                                                                                                                                                                      \
86         __MOS_USER_FEATURE_KEY_INVALID_ID, nullptr, nullptr, nullptr, nullptr, MOS_USER_FEATURE_TYPE_INVALID, MOS_USER_FEATURE_VALUE_TYPE_INVALID, nullptr, nullptr, false, 0, nullptr, MOS_USER_FEATURE_EFFECT_ALWAYS, { {0}, 0 }         \
87     }
88 #define MOS_DECLARE_UF_KEY(Id, ValueName, Readpath, Writepath, Group, Type, ValueType, DefaultValue, Description)                                                     \
89     {                                                                                                                                                                 \
90         Id, ValueName, Group, Readpath, Writepath, Type, ValueType, DefaultValue, Description, false, 1, nullptr, MOS_USER_FEATURE_EFFECT_ALWAYS, { {0}, 0 }          \
91     }
92 #define MOS_DECLARE_UF_KEY_DBGONLY(Id, ValueName, Readpath, Writepath, Group, Type, ValueType, DefaultValue, Description)                                                \
93     {                                                                                                                                                                    \
94         Id, ValueName, Group, Readpath, Writepath, Type, ValueType, DefaultValue, Description, false, 1, nullptr, MOS_USER_FEATURE_EFFECT_DEBUGONLY, { {0}, 0 }          \
95     }
96 #endif
97 #ifndef MAX_USER_FEATURE_FIELD_LENGTH
98 #define MAX_USER_FEATURE_FIELD_LENGTH 256
99 #endif
100 
101 //!
102 //! \brief User Feature Value IDs
103 //!
104 typedef enum _MOS_USER_FEATURE_VALUE_ID
105 {
106     __MOS_USER_FEATURE_KEY_INVALID_ID = 0,
107     __MEDIA_USER_FEATURE_VALUE_MEDIA_RESET_TH_ID,
108     __MEDIA_USER_FEATURE_VALUE_MEDIA_RESET_COUNT_ID,
109     __MEDIA_USER_FEATURE_VALUE_PERF_PROFILER_ENABLE_ID,
110     __MEDIA_USER_FEATURE_VALUE_PERF_PROFILER_FE_BE_TIMING,
111     __MEDIA_USER_FEATURE_VALUE_PERF_PROFILER_OUTPUT_FILE,
112     __MEDIA_USER_FEATURE_VALUE_PERF_PROFILER_BUFFER_SIZE,
113     __MEDIA_USER_FEATURE_VALUE_PERF_PROFILER_ENABLE_MULTI_PROCESS,
114     __MEDIA_USER_FEATURE_VALUE_PERF_PROFILER_REGISTER_1,
115     __MEDIA_USER_FEATURE_VALUE_PERF_PROFILER_REGISTER_2,
116     __MEDIA_USER_FEATURE_VALUE_PERF_PROFILER_REGISTER_3,
117     __MEDIA_USER_FEATURE_VALUE_PERF_PROFILER_REGISTER_4,
118     __MEDIA_USER_FEATURE_VALUE_PERF_PROFILER_REGISTER_5,
119     __MEDIA_USER_FEATURE_VALUE_PERF_PROFILER_REGISTER_6,
120     __MEDIA_USER_FEATURE_VALUE_PERF_PROFILER_REGISTER_7,
121     __MEDIA_USER_FEATURE_VALUE_PERF_PROFILER_REGISTER_8,
122     __MEDIA_USER_FEATURE_VALUE_SINGLE_TASK_PHASE_ENABLE_ID,
123     __MEDIA_USER_FEATURE_VALUE_DECODE_SINGLE_TASK_PHASE_ENABLE_ID,
124     __MEDIA_USER_FEATURE_VALUE_AUX_TABLE_16K_GRANULAR_ID,
125     __MEDIA_USER_FEATURE_VALUE_ENABLE_SOFTPIN_ID,
126     __MEDIA_USER_FEATURE_VALUE_MFE_MBENC_ENABLE_ID,
127     __MEDIA_USER_FEATURE_VALUE_MFE_FIRST_BUFFER_SUBMIT_ID,
128     __MEDIA_USER_FEATURE_VALUE_RC_PANIC_ENABLE_ID,
129     __MEDIA_USER_FEATURE_VALUE_SLICE_SHUTDOWN_ENABLE_ID,
130     __MEDIA_USER_FEATURE_VALUE_DECODE_LOCK_DISABLE_ID,
131     __MEDIA_USER_FEATURE_VALUE_ENCODE_HW_WALKER_ID,
132     __MEDIA_USER_FEATURE_VALUE_ENCODE_HUC_FIRMWARE_LOAD_FAILED_ID,
133     __MEDIA_USER_FEATURE_VALUE_ENCODE_HUC_IMEM_LOAD_FALIED_ID,
134     __MEDIA_USER_FEATURE_VALUE_ENCODE_SUPPRESS_RECON_PIC_ENABLE_ID,
135     __MEDIA_USER_FEATURE_VALUE_ENCODE_ME_IN_USE_ID,
136     __MEDIA_USER_FEATURE_VALUE_ENCODE_16xME_IN_USE_ID,
137     __MEDIA_USER_FEATURE_VALUE_ENCODE_32xME_IN_USE_ID,
138     __MEDIA_USER_FEATURE_VALUE_ENCODE_BRC_IN_USE_ID,
139     __MEDIA_USER_FEATURE_VALUE_ENCODE_RATECONTROL_METHOD_ID,
140     __MEDIA_USER_FEATURE_VALUE_ENCODE_TARGET_USAGE_OVERRIDE_ID,
141     __MEDIA_USER_FEATURE_VALUE_ENCODE_ENABLE_FRAME_TRACKING_ID,
142     __MEDIA_USER_FEATURE_VALUE_ENCODE_USED_VDBOX_NUM_ID,
143     __MEDIA_USER_FEATURE_VALUE_ENCODE_ENABLE_COMPUTE_CONTEXT_ID,
144     __MEDIA_USER_FEATURE_VALUE_DECODE_ENABLE_COMPUTE_CONTEXT_ID,
145     __MEDIA_USER_FEATURE_VALUE_AVC_ENCODE_ME_ENABLE_ID,
146     __MEDIA_USER_FEATURE_VALUE_AVC_ENCODE_16xME_ENABLE_ID,
147     __MEDIA_USER_FEATURE_VALUE_AVC_ENCODE_32xME_ENABLE_ID,
148     __MEDIA_USER_FEATURE_VALUE_AVC_ENCODE_MULTIPRED_ENABLE_ID,
149     __MEDIA_USER_FEATURE_VALUE_AVC_ENCODE_INTRA_REFRESH_QP_THRESHOLD_ID,
150     __MEDIA_USER_FEATURE_VALUE_AVC_FTQ_ENABLE_ID,
151     __MEDIA_USER_FEATURE_VALUE_AVC_CAF_ENABLE_ID,
152     __MEDIA_USER_FEATURE_VALUE_AVC_CAF_DISABLE_HD_ID,
153     __MEDIA_USER_FEATURE_VALUE_AVC_MB_BRC_ENABLE_ID,
154     __MEDIA_USER_FEATURE_VALUE_AVC_ROUNDING_INTER_ENABLE_ID,
155     __MEDIA_USER_FEATURE_VALUE_AVC_ROUNDING_INTER_P_ID,
156     __MEDIA_USER_FEATURE_VALUE_AVC_ROUNDING_INTER_B_ID,
157     __MEDIA_USER_FEATURE_VALUE_AVC_ROUNDING_INTER_BREF_ID,
158     __MEDIA_USER_FEATURE_VALUE_AVC_ADAPTIVE_ROUNDING_INTER_ENABLE_ID,
159     __MEDIA_USER_FEATURE_VALUE_AVC_SKIP_BIAS_ADJUSTMENT_ENABLE_ID,
160     __MEDIA_USER_FEATURE_VALUE_AVC_ADAPTIVE_INTRA_SCALING_ENABLE_ID,
161     __MEDIA_USER_FEATURE_VALUE_AVC_OLD_MODE_COST_ENABLE_ID,
162     __MEDIA_USER_FEATURE_VALUE_AVC_FORCE_TO_SKIP_ENABLE_ID,
163     __MEDIA_USER_FEATURE_VALUE_AVC_SLIDING_WINDOW_SIZE_ID,
164     __MEDIA_USER_FEATURE_VALUE_VDENC_TAIL_INSERTION_DELAY_COUNT_ID,
165     __MEDIA_USER_FEATURE_VALUE_VDENC_CRE_PREFETCH_ENABLE_ID,
166     __MEDIA_USER_FEATURE_VALUE_VDENC_TLB_PREFETCH_ENABLE_ID,
167     __MEDIA_USER_FEATURE_VALUE_VDENC_TLB_ALLOCATION_WA_ENABLE_ID,
168     __MEDIA_USER_FEATURE_VALUE_VDENC_PERMB_STREAMOUT_ENABLE_ID,
169     __MEDIA_USER_FEATURE_VALUE_VDENC_SINGLE_PASS_ENABLE_ID,
170     __MEDIA_USER_FEATURE_VALUE_VDENC_BRC_MOTION_ADAPTIVE_ENABLE_ID,
171     __MEDIA_USER_FEATURE_VALUE_MMIO_MFX_LRA_0_OVERRIDE_ID,
172     __MEDIA_USER_FEATURE_VALUE_MMIO_MFX_LRA_1_OVERRIDE_ID,
173     __MEDIA_USER_FEATURE_VALUE_MMIO_MFX_LRA_2_OVERRIDE_ID,
174     __MEDIA_USER_FEATURE_VALUE_FLATNESS_CHECK_ENABLE_ID,
175     __MEDIA_USER_FEATURE_VALUE_AVC_ADAPTIVE_SEARCH_WINDOW_ENABLE_ID,
176     __MEDIA_USER_FEATURE_VALUE_ADAPTIVE_TRANSFORM_DECISION_ENABLE_ID,
177     __MEDIA_USER_FEATURE_VALUE_WEIGHTED_PREDICTION_L0_IN_USE_ID,
178     __MEDIA_USER_FEATURE_VALUE_WEIGHTED_PREDICTION_L1_IN_USE_ID,
179     __MEDIA_USER_FEATURE_VALUE_FBR_BYPASS_ENABLE_ID,
180     __MEDIA_USER_FEATURE_VALUE_STATIC_FRAME_DETECTION_ENABLE_ID,
181     __MEDIA_USER_FEATURE_VALUE_COLOR_BIT_SUPPORT_ENABLE_ID,
182     __MEDIA_USER_FEATURE_VALUE_GROUP_ID_SELECT_ENABLE_ID,
183     __MEDIA_USER_FEATURE_VALUE_AVC_BRC_ENABLE_ID,
184     __MEDIA_USER_FEATURE_VALUE_AVC_MULTIREF_QP_ID,
185     __MEDIA_USER_FEATURE_VALUE_AVC_BRC_SOFTWARE_ID,
186     __MEDIA_USER_FEATURE_VALUE_AVC_BRC_VAR_COMPU_BYPASS_ID,
187     __MEDIA_USER_FEATURE_VALUE_AVC_BRC_SOFTWARE_IN_USE_ID,
188     __MEDIA_USER_FEATURE_VALUE_ENABLE_CNL_AVC_ENCODE_ARB_WA_ID,
189     __MEDIA_USER_FEATURE_VALUE_HUC_DEMO_KERNEL_ID,
190     __MEDIA_USER_FEATURE_VALUE_VP9_ENCODE_ME_ENABLE_ID,
191     __MEDIA_USER_FEATURE_VALUE_VP9_ENCODE_16xME_ENABLE_ID,
192     __MEDIA_USER_FEATURE_VALUE_VP9_ENCODE_HUC_ENABLE_ID,
193     __MEDIA_USER_FEATURE_VALUE_VP9_ENCODE_MULTIPASS_BRC_ENABLE_ID,
194     __MEDIA_USER_FEATURE_VALUE_VP9_ENCODE_MULTIPASS_BRC_IN_USE_ID,
195     __MEDIA_USER_FEATURE_VALUE_VP9_ENCODE_ADAPTIVE_REPAK_ENABLE_ID,
196     __MEDIA_USER_FEATURE_VALUE_VP9_ENCODE_ADAPTIVE_REPAK_IN_USE_ID,
197     __MEDIA_USER_FEATURE_VALUE_VP9_ENCODE_SINGLE_PASS_DYS_ENABLE_ID,
198     __MEDIA_USER_FEATURE_VALUE_VP9_ENCODE_PAK_TEST_ENABLE_ID,
199     __MEDIA_USER_FEATURE_VALUE_VP9_ENCODE_MULTIREF_QP_ENABLE_ID,
200     __MEDIA_USER_FEATURE_VALUE_VP9_ENCODE_ENABLE_VE_ID,
201     __MEDIA_USER_FEATURE_VALUE_VP9_ENCODE_ENABLE_HW_STITCH,
202     __MEDIA_USER_FEATURE_VALUE_VP9_ENCODE_ENABLE_BRC_DLL,
203     __MEDIA_USER_FEATURE_VALUE_VP9_ENCODE_BRC_DLL_PATH,
204     __MEDIA_USER_FEATURE_VALUE_VP9_ENCODE_ENABLE_BRC_DLL_CUSTOMPATH,
205     __MEDIA_USER_FEATURE_VALUE_ENCODE_ENABLE_CMD_INIT_HUC_ID,
206     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_ENABLE_ID,
207     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_SECURE_INPUT_ID,
208     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_MODE_ID,
209     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_ME_ENABLE_ID,
210     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_16xME_ENABLE_ID,
211     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_32xME_ENABLE_ID,
212     __MEDIA_USER_FEATURE_VALUE_HEVC_VDENC_16xME_ENABLE_ID,
213     __MEDIA_USER_FEATURE_VALUE_HEVC_VDENC_32xME_ENABLE_ID,
214     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_26Z_ENABLE_ID,
215     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_REGION_NUMBER_ID,
216     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_NUM_B_KERNEL_SPLIT,
217     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_POWER_SAVING,
218     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_NUM_8x8_INTRA_KERNEL_SPLIT,
219     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_ENABLE_WP_SUPPORT_ID,
220     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_ENABLE_MEDIARESET_TEST_ID,
221     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_RDOQ_ENABLE_ID,
222     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_IFRAME_RDOQ_ENABLE_ID,
223     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_MULTIPASS_BRC_ENABLE_ID,
224     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_MULTIPASS_BRC_IN_USE_ID,
225     __MEDIA_USER_FEATURE_VALUE_ENCODE_BRC_SOFTWARE_ID,
226     __MEDIA_USER_FEATURE_VALUE_ENCODE_BRC_SOFTWARE_PATH_ID,
227     __MEDIA_USER_FEATURE_VALUE_ENCODE_BRC_SOFTWARE_IN_USE_ID,
228     __MEDIA_USER_FEATURE_VALUE_ENCODE_LA_SOFTWARE_ID,
229     __MEDIA_USER_FEATURE_VALUE_ENCODE_LA_SOFTWARE_PATH_ID,
230     __MEDIA_USER_FEATURE_VALUE_ENCODE_LA_SOFTWARE_IN_USE_ID,
231     __MEDIA_USER_FEATURE_VALUE_HEVC_VDENC_ACQP_ENABLE_ID,
232     __MEDIA_USER_FEATURE_VALUE_HEVC_VDENC_VQI_ENABLE_ID,
233     __MEDIA_USER_FEATURE_VALUE_FORCE_PAK_PASS_NUM_ID,
234     __MEDIA_USER_FEATURE_VALUE_HEVC_VDENC_ROUNDING_ENABLE_ID,
235     __MEDIA_USER_FEATURE_VALUE_HEVC_VDENC_PAKOBJCMD_STREAMOUT_ENABLE_ID,
236     __MEDIA_USER_FEATURE_VALUE_HEVC_VDENC_LBCONLY_ENABLE_ID,
237     __MEDIA_USER_FEATURE_VALUE_HEVC_VDENC_PARTIAL_FRAME_UPDATE_ENABLE_ID,
238     __MEDIA_USER_FEATURE_VALUE_HEVC_NUM_THREADS_PER_LCU_ID,
239     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_MDF_DISABLE_ID,
240     __MEDIA_USER_FEATURE_VALUE_CODEC_MMC_ENABLE_ID,
241     __MEDIA_USER_FEATURE_VALUE_DECODE_MMC_ENABLE_ID,
242     __MEDIA_USER_FEATURE_VALUE_ENCODE_MMC_ENABLE_ID,
243     __MEDIA_USER_FEATURE_VALUE_CODEC_MMC_IN_USE_ID,
244     __MEDIA_USER_FEATURE_VALUE_DECODE_MMC_IN_USE_ID,
245     __MEDIA_USER_FEATURE_VALUE_DECODE_MPEG2_MODE_ID,
246     __MEDIA_USER_FEATURE_VALUE_DECODE_VC1_MODE_ID,
247     __MEDIA_USER_FEATURE_VALUE_DECODE_AVC_MODE_ID,
248     __MEDIA_USER_FEATURE_VALUE_DECODE_JPEG_MODE_ID,
249     __MEDIA_USER_FEATURE_VALUE_DECODE_VP8_MODE_ID,
250     __MEDIA_USER_FEATURE_VALUE_DECODE_HEVC_MODE_ID,
251     __MEDIA_USER_FEATURE_VALUE_DECODE_VP9_MODE_ID,
252     __MEDIA_USER_FEATURE_VALUE_DECODE_AV1_MODE_ID,
253     __MEDIA_USER_FEATURE_VALUE_DECODE_HISTOGRAM_FROM_VEBOX_ID,
254     __MEDIA_USER_FEATURE_VALUE_DECODE_EXTENDED_MMC_IN_USE_ID,
255     __MEDIA_USER_FEATURE_VALUE_ENCODE_MMC_IN_USE_ID,
256     __MEDIA_USER_FEATURE_VALUE_ENCODE_EXTENDED_MMC_IN_USE_ID,
257     __MEDIA_USER_FEATURE_VALUE_MMC_DEC_RT_COMPRESSIBLE_ID,
258     __MEDIA_USER_FEATURE_VALUE_MMC_DEC_RT_COMPRESSMODE_ID,
259     __MEDIA_USER_FEATURE_VALUE_MMC_ENC_RECON_COMPRESSIBLE_ID,
260     __MEDIA_USER_FEATURE_VALUE_MMC_ENC_RECON_COMPRESSMODE_ID,
261     __MEDIA_USER_FEATURE_VALUE_SLICE_SHUTDOWN_DEFAULT_STATE_ID,
262     __MEDIA_USER_FEATURE_VALUE_SLICE_SHUTDOWN_REQUEST_STATE_ID,
263     __MEDIA_USER_FEATURE_VALUE_SLICE_SHUTDOWN_RESOLUTION_THRESHOLD_ID,
264     __MEDIA_USER_FEATURE_VALUE_SLICE_SHUTDOWN_TARGET_USAGE_THRESHOLD_ID,
265     __MEDIA_USER_FEATURE_VALUE_MPEG2_SLICE_STATE_ENABLE_ID,
266     __MEDIA_USER_FEATURE_VALUE_MPEG2_ENCODE_BRC_DISTORTION_BUFFER_ENABLE_ID,
267     __MEDIA_USER_FEATURE_VALUE_NUMBER_OF_CODEC_DEVICES_ON_VDBOX1_ID,
268     __MEDIA_USER_FEATURE_VALUE_NUMBER_OF_CODEC_DEVICES_ON_VDBOX2_ID,
269     __MEDIA_USER_FEATURE_VALUE_VDI_MODE_ID,
270     __MEDIA_USER_FEATURE_VALUE_MEDIA_WALKER_MODE_ID,
271     __MEDIA_USER_FEATURE_VALUE_VP8_HW_SCOREBOARD_ENABLE_ID,
272     __MEDIA_USER_FEATURE_VALUE_VP8_ENCODE_ME_ENABLE_ID,
273     __MEDIA_USER_FEATURE_VALUE_VP8_ENCODE_16xME_ENABLE_ID,
274     __MEDIA_USER_FEATURE_VALUE_VP8_ENCODE_REPAK_ENABLE_ID,
275     __MEDIA_USER_FEATURE_VALUE_VP8_ENCODE_MULTIPASS_BRC_ENABLE_ID,
276     __MEDIA_USER_FEATURE_VALUE_VP8_ENCODE_ADAPTIVE_REPAK_ENABLE_ID,
277     __MEDIA_USER_FEATURE_VALUE_DISABLE_HEVC_REALTILE_DECODE_ID,
278     __MEDIA_USER_FEATURE_VALUE_ENABLE_HEVC_REALTILE_MULTI_PHASE_DECODE_ID,
279     __MEDIA_USER_FEATURE_VALUE_HCP_DECODE_USER_PIPE_NUM_ID,
280     __MEDIA_USER_FEATURE_VALUE_APOGEIOS_AV1D_ENABLE_ID,
281     __MEDIA_USER_FEATURE_VALUE_ENABLE_HEVC_DECODE_RT_FRAME_COUNT_ID,
282     __MEDIA_USER_FEATURE_VALUE_ENABLE_HEVC_DECODE_VT_FRAME_COUNT_ID,
283     __MEDIA_USER_FEATURE_VALUE_ENABLE_HEVC_DECODE_SP_FRAME_COUNT_ID,
284     __MEDIA_USER_FEATURE_VALUE_AV1BTDLROWSTORECACHE_DISABLE_ID,
285     __MEDIA_USER_FEATURE_VALUE_AV1SMVLROWSTORECACHE_DISABLE_ID,
286     __MEDIA_USER_FEATURE_VALUE_AV1IPDLROWSTORECACHE_DISABLE_ID,
287     __MEDIA_USER_FEATURE_VALUE_AV1DFLYROWSTORECACHE_DISABLE_ID,
288     __MEDIA_USER_FEATURE_VALUE_AV1DFLUROWSTORECACHE_DISABLE_ID,
289     __MEDIA_USER_FEATURE_VALUE_AV1DFLVROWSTORECACHE_DISABLE_ID,
290     __MEDIA_USER_FEATURE_VALUE_AV1CDEFROWSTORECACHE_DISABLE_ID,
291     __MEDIA_USER_FEATURE_VALUE_ENABLE_AVP_SCALABILITY_DECODE_ID,
292     __MEDIA_USER_FEATURE_VALUE_AV1_DECODE_ON_SIMULATION_ID,
293 
294 #if (_DEBUG || _RELEASE_INTERNAL)
295     __MEDIA_USER_FEATURE_VALUE_ENCODE_HUC_STATUS2_VALUE,
296     __MEDIA_USER_FEATURE_VALUE_GROUP_ID_ID,
297     __MEDIA_USER_FEATURE_VALUE_MEDIA_PREEMPTION_ENABLE_ID,
298     __MEDIA_USER_FEATURE_VALUE_MDF_OVERRIDE_L3TCCNTRL_REG,
299     __MEDIA_USER_FEATURE_VALUE_MDF_OVERRIDE_MOCS_INDEX,
300     __MEDIA_USER_FEATURE_VALUE_MDF_OVERRIDE_L3ALLOC_REG,
301     __MEDIA_USER_FEATURE_VALUE_MDF_FORCE_RAMODE,
302     __MEDIA_USER_FEATURE_VALUE_ENCODE_VFE_MAX_THREADS_ID,
303     __MEDIA_USER_FEATURE_VALUE_ENCODE_VFE_MAX_THREADS_SCALING_ID,
304     __MEDIA_USER_FEATURE_VALUE_AVC_FTQ_IN_USE_ID,
305     __MEDIA_USER_FEATURE_VALUE_AVC_CAF_IN_USE_ID,
306     __MEDIA_USER_FEATURE_VALUE_ENCODE_HW_WALKER_MODE_ID,
307     __MEDIA_USER_FEATURE_VALUE_ENCODE_L3_CACHE_CNTLREG_OVERRIDE_ID,
308     __MEDIA_USER_FEATURE_VALUE_ENCODE_L3_CACHE_CNTLREG2_OVERRIDE_ID,
309     __MEDIA_USER_FEATURE_VALUE_ENCODE_L3_CACHE_CNTLREG3_OVERRIDE_ID,
310     __MEDIA_USER_FEATURE_VALUE_ENCODE_L3_CACHE_SQCREG1_OVERRIDE_ID,
311     __MEDIA_USER_FEATURE_VALUE_ENCODE_L3_CACHE_SQCREG4_OVERRIDE_ID,
312     __MEDIA_USER_FEATURE_VALUE_ENCODE_L3_LRA_1_REG1_OVERRIDE_ID,
313     __MEDIA_USER_FEATURE_VALUE_VDBOX_ID_USED,
314     __MEDIA_USER_FEATURE_VALUE_VDENC_IN_USE_ID,
315     __MEDIA_USER_FEATURE_VALUE_ENCODE_CSC_METHOD_ID,
316     __MEDIA_USER_FEATURE_VALUE_ENCODE_RAW_TILE_ID,
317     __MEDIA_USER_FEATURE_VALUE_ENCODE_RAW_FORMAT_ID,
318     __MEDIA_USER_FEATURE_VALUE_ENCODE_CQM_QP_THRESHOLD_ID,
319     __MEDIA_USER_FEATURE_VALUE_ISA_ASM_DEBUG_ENABLE_ID,
320     __MEDIA_USER_FEATURE_VALUE_ISA_ASM_DEBUG_SURF_BTI_ID,
321     __MEDIA_USER_FEATURE_VALUE_ROWSTORE_CACHE_DISABLE_ID,
322     __MEDIA_USER_FEATURE_VALUE_INTRAROWSTORECACHE_DISABLE_ID,
323     __MEDIA_USER_FEATURE_VALUE_DEBLOCKINGFILTERROWSTORECACHE_DISABLE_ID,
324     __MEDIA_USER_FEATURE_VALUE_BSDMPCROWSTORECACHE_DISABLE_ID,
325     __MEDIA_USER_FEATURE_VALUE_MPRROWSTORECACHE_DISABLE_ID,
326     __MEDIA_USER_FEATURE_VALUE_VDENCROWSTORECACHE_DISABLE_ID,
327     __MEDIA_USER_FEATURE_VALUE_IS_CODEC_ROW_STORE_CACHE_ENABLED_ID,
328     __MEDIA_USER_FEATURE_VALUE_BREAK_IN_CODECHAL_CREATE_ID,
329     __MEDIA_USER_FEATURE_VALUE_MEDIASOLO_ENABLE_ID,
330     __MEDIA_USER_FEATURE_VALUE_STREAM_OUT_ENABLE_ID,
331     __MEDIA_USER_FEATURE_VALUE_DECOMPRESS_DECODE_OUTPUT_ID,
332     __MEDIA_USER_FEATURE_VALUE_DECOMPRESS_DECODE_SFC_OUTPUT_ID,
333     __MEDIA_USER_FEATURE_VALUE_CODECHAL_DEBUG_OUTPUT_DIRECTORY_ID,
334     __MEDIA_USER_FEATURE_VALUE_CODECHAL_DUMP_OUTPUT_DIRECTORY_ID,
335     __MEDIA_USER_FEATURE_VALUE_MEDIA_DEBUG_CFG_GENERATION_ID,
336     __MEDIA_USER_FEATURE_VALUE_CODECHAL_RDOQ_INTRA_TU_OVERRIDE_ID,
337     __MEDIA_USER_FEATURE_VALUE_CODECHAL_RDOQ_INTRA_TU_DISABLE_ID,
338     __MEDIA_USER_FEATURE_VALUE_CODECHAL_RDOQ_INTRA_TU_THRESHOLD_ID,
339     __MEDIA_USER_FEATURE_VALUE_CODECHAL_ENABLE_FAKE_HEADER_SIZE_ID,
340     __MEDIA_USER_FEATURE_VALUE_CODECHAL_FAKE_IFRAME_HEADER_SIZE_ID,
341     __MEDIA_USER_FEATURE_VALUE_CODECHAL_FAKE_PBFRAME_HEADER_SIZE_ID,
342     __MEDIA_USER_FEATURE_VALUE_COMMAND_PARSER_INPUT_FILE_PATH_ID,
343     __MEDIA_USER_FEATURE_VALUE_MHW_BASE_VDENC_INTERFACE_ID,
344     __MEDIA_USER_FEATURE_VALUE_FORCE_AV1_TILE_BASED_DECODE_ID,
345     __MEDIA_USER_FEATURE_VALUE_AV1_ERROR_STATUS_ADDR_VALUE_ID,
346     __MEDIA_USER_FEATURE_VALUE_DECODE_HISTOGRAM_DEBUG_ID,
347     __MEDIA_USER_FEATURE_VALUE_DECODE_SFC_RGBFORMAT_OUTPUT_DEBUG_ID,
348     __MEDIA_USER_FEATURE_VALUE_DECODE_SFC_LINEAR_OUTPUT_DEBUG_ID,
349     __MEDIA_USER_FEATURE_VALUE_HEVC_VDENC_TCBRC_ARB_DISABLE_ID,
350     __MEDIA_USER_FEATURE_VALUE_LPLA_DS_DATA_ID,
351 #endif  // (_DEBUG || _RELEASE_INTERNAL)
352     __MEDIA_USER_FEATURE_VALUE_STATUS_REPORTING_ENABLE_ID,
353     __MEDIA_USER_FEATURE_VALUE_SPLIT_SCREEN_DEMO_POSITION_ID,
354     __MEDIA_USER_FEATURE_VALUE_SPLIT_SCREEN_DEMO_PARAMETERS_ID,
355     __MEDIA_USER_FEATURE_VALUE_HEVC_SF_2_DMA_SUBMITS_ENABLE_ID,
356     __MEDIA_USER_FEATURE_VALUE_HEVCDATROWSTORECACHE_DISABLE_ID,
357     __MEDIA_USER_FEATURE_VALUE_HEVCDFROWSTORECACHE_DISABLE_ID,
358     __MEDIA_USER_FEATURE_VALUE_HEVCSAOROWSTORECACHE_DISABLE_ID,
359     __MEDIA_USER_FEATURE_VALUE_VP9_HVDROWSTORECACHE_DISABLE_ID,
360     __MEDIA_USER_FEATURE_VALUE_VP9_DATROWSTORECACHE_DISABLE_ID,
361     __MEDIA_USER_FEATURE_VALUE_VP9_DFROWSTORECACHE_DISABLE_ID,
362     __MEDIA_USER_FEATURE_VALUE_MDF_CMD_DUMP_ENABLE_ID,
363     __MEDIA_USER_FEATURE_VALUE_MDF_ETW_ENABLE_ID,
364     __MEDIA_USER_FEATURE_VALUE_MDF_LOG_LEVEL_ID,
365     __MEDIA_USER_FEATURE_VALUE_MDF_UMD_ULT_ENABLE_ID,
366     __MEDIA_USER_FEATURE_VALUE_MDF_CURBE_DUMP_ENABLE_ID,
367     __MEDIA_USER_FEATURE_VALUE_MDF_SURFACE_DUMP_ENABLE_ID,
368     __MEDIA_USER_FEATURE_VALUE_MDF_SURFACE_STATE_DUMP_ENABLE_ID,
369     __MEDIA_USER_FEATURE_VALUE_MDF_CMD_DUMP_COUNTER_ID,
370     __MEDIA_USER_FEATURE_VALUE_MDF_SURFACE_STATE_DUMP_COUNTER_ID,
371     __MEDIA_USER_FEATURE_VALUE_MDF_INTERFACE_DESCRIPTOR_DATA_DUMP_ID,
372     __MEDIA_USER_FEATURE_VALUE_MDF_INTERFACE_DESCRIPTOR_DATA_COUNTER_ID,
373     __MEDIA_USER_FEATURE_VALUE_MDF_DUMPPATH_USER_ID,
374     __MEDIA_USER_FEATURE_VALUE_MDF_EMU_MODE_ENABLE_ID,
375     __MEDIA_USER_FEATURE_VALUE_MDF_DEFAULT_CM_QUEUE_TYPE_ID,
376     __MEDIA_USER_FEATURE_VALUE_MDF_CCS_USE_VE_INTERFACE,
377     __MEDIA_USER_FEATURE_VALUE_MDF_CCS_USE_VE_DEBUG_OVERRIDE,
378     __MEDIA_USER_FEATURE_VALUE_MDF_FORCE_EXECUTION_PATH_ID,
379     __MEDIA_USER_FEATURE_VALUE_MDF_MAX_THREAD_NUM_ID,
380     __MEDIA_USER_FEATURE_VALUE_MDF_FORCE_COHERENT_STATELESSBTI_ID,
381     __MEDIA_USER_FEATURE_ENABLE_RENDER_ENGINE_MMC_ID,
382     __MEDIA_USER_FEATURE_VALUE_DISABLE_MMC_ID,
383     __MEDIA_USER_FEATURE_VALUE_FORCE_MMC_ON_ID,
384     __MEDIA_USER_FEATURE_MCPY_MODE_ID,
385     __MEDIA_USER_FEATURE_ENABLE_HW_DEBUG_HOOKS_ID,
386     __MEDIA_USER_FEATURE_VALUE_CODECHAL_FRAME_NUMBER_TO_STOP_ID,
387     __MEDIA_USER_FEATURE_VALUE_CODECHAL_ENABLE_SW_CRC_ID,
388 #if (_DEBUG || _RELEASE_INTERNAL)
389     __VPHAL_DBG_SURF_DUMP_OUTFILE_KEY_NAME_ID,
390 #endif
391     __VPHAL_ENABLE_MMC_ID,
392     __VPHAL_ENABLE_MMC_IN_USE_ID,
393     __VPHAL_PRIMARY_SURFACE_COMPRESS_MODE_ID,
394     __VPHAL_PRIMARY_SURFACE_COMPRESSIBLE_ID,
395     __VPHAL_RT_COMPRESS_MODE_ID,
396     __VPHAL_RT_COMPRESSIBLE_ID,
397 #if (_DEBUG || _RELEASE_INTERNAL)
398     __VPHAL_ENABLE_1K_1DLUT_ID,
399     __VPHAL_ENABLE_CPU_GENERATE_3DLUT_ID,
400 #endif
401 #if (_DEBUG || _RELEASE_INTERNAL)
402     __VPHAL_ENABLE_COMPUTE_CONTEXT_ID,
403 #endif
404     __MOS_USER_FEATURE_KEY_XML_AUTOGEN_ID,
405     __MOS_USER_FEATURE_KEY_XML_FILEPATH_ID,
406     __MOS_USER_FEATURE_KEY_XML_DUMP_GROUPS_ID,
407     __MEDIA_USER_FEATURE_VALUE_VEBOX_SPLIT_RATIO_ID,
408     __MEDIA_USER_FEATURE_VALUE_HCP_DECODE_MODE_SWITCH_THRESHOLD1_ID,
409     __MEDIA_USER_FEATURE_VALUE_HCP_DECODE_MODE_SWITCH_THRESHOLD2_ID,
410     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_ENABLE_VE_DEBUG_OVERRIDE,
411     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_ENABLE_HW_SEMAPHORE,
412     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_ENABLE_VDBOX_HW_SEMAPHORE,
413     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_ENABLE_HW_STITCH,
414     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_SUBTHREAD_NUM_ID,
415     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_PAK_ONLY_ID,
416     __MEDIA_USER_FEATURE_VALUE_HEVC_VME_ENCODE_SSE_ENABLE_ID,
417     __MEDIA_USER_FEATURE_VALUE_ENCODE_DISABLE_SCALABILITY,
418     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_RDOQ_PERF_DISABLE_ID,
419     __MEDIA_USER_FEATURE_VALUE_HEVC_TCBRC_QUALITY_BOOST_ENABLE_ID,
420     __MEDIA_USER_FEATURE_VALUE_WATCHDOG_TIMER_THRESHOLD,
421     __MEDIA_USER_FEATURE_VALUE_ENABLE_ENCODE_VE_CTXSCHEDULING_ID,
422     __MEDIA_USER_FEATURE_VALUE_HCP_DECODE_ALWAYS_FRAME_SPLIT_ID,
423     __MEDIA_USER_FEATURE_VALUE_SCALABILITY_OVERRIDE_SPLIT_WIDTH_IN_MINCB,
424     __MEDIA_USER_FEATURE_VALUE_SCALABILITY_FE_SEPARATE_SUBMISSION_IN_USE_ID,
425     __MEDIA_USER_FEATURE_VALUE_HEVC_VME_BRC_LTR_DISABLE_ID,
426     __MEDIA_USER_FEATURE_VALUE_HEVC_VME_BRC_LTR_INTERVAL_ID,
427     __MEDIA_USER_FEATURE_VALUE_HEVC_VME_FORCE_SCALABILITY_ID,
428     __MEDIA_USER_FEATURE_VALUE_HEVC_VDENC_SEMA_RESET_DELAY_ID,
429     __MEDIA_USER_FEATURE_VALUE_SET_CMD_DEFAULT_PARS_FROM_FILES_ID,
430     __MEDIA_USER_FEATURE_VALUE_CMD_PARS_FILES_DIRECORY_ID,
431     __MEDIA_USER_FEATURE_VALUE_APOGEIOS_ENABLE_ID,
432     __MEDIA_USER_FEATURE_VALUE_VPP_APOGEIOS_ENABLE_ID,
433     __MEDIA_USER_FEATURE_VALUE_EXTERNAL_COPY_SYNC_ID,
434     __MEDIA_USER_FEATURE_VALUE_INTER_FRAME_MEMORY_NINJA_START_COUNTER_ID,
435     __MEDIA_USER_FEATURE_VALUE_INTER_FRAME_MEMORY_NINJA_END_COUNTER_ID,
436     __MEDIA_USER_FEATURE_VALUE_APOGEIOS_HEVCD_ENABLE_ID,
437     __MEDIA_USER_FEATURE_VALUE_APOGEIOS_AVCD_ENABLE_ID,
438     __MEDIA_USER_FEATURE_VALUE_APOGEIOS_VP8D_ENABLE_ID,
439     __MEDIA_USER_FEATURE_VALUE_APOGEIOS_VP9D_ENABLE_ID,
440     __MEDIA_USER_FEATURE_VALUE_APOGEIOS_MPEG2D_ENABLE_ID,
441     __MEDIA_USER_FEATURE_VALUE_APOGEIOS_JPEGD_ENABLE_ID,
442     __MEDIA_USER_FEATURE_VALUE_RA_MODE_ENABLE_ID,
443     __MEDIA_USER_FEATURE_VALUE_LOCAL_MEMORY_LEVEL_SWITCH_ID,
444     __MEDIA_USER_FEATURE_VALUE_DISABLE_TLB_PREFETCH_ID,
445 #if (_DEBUG || _RELEASE_INTERNAL)
446     __MEDIA_USER_FEATURE_VALUE_FORCE_DECODE_RESOURCE_LOCKABLE_ID,
447     __MEDIA_USER_FEATURE_VALUE_SFC_LINEAR_OUTPUT_USED_ID,
448 #endif
449     __MEDIA_USER_FEATURE_VALUE_PROTECT_MODE_ENABLE_ID,
450     __MEDIA_USER_FEATURE_VALUE_OLP_IN_USE_ID,
451     __MEDIA_USER_FEATURE_VALUE_SKIP_FRAME_IN_USE_ID,
452     __MEDIA_USER_FEATURE_VALUE_HUC_LOAD_STATUS_ID,
453     __MEDIA_USER_FEATURE_VALUE_HUC_REPORT_CRITICAL_ERROR_ID,
454     __MEDIA_USER_FEATURE_VALUE_AV1_DECODE_DRIVER_S2L_ENABLE_ID,
455     __MEDIA_USER_FEATURE_VALUE_HEVC_VDENC_TILEREPLAY_ENABLE_ID,
456     __MEDIA_USER_FEATURE_VALUE_HEVC_VDENC_RGB_ENCODING_ENABLE_ID,
457     __MEDIA_USER_FEATURE_VALUE_HEVC_VDENC_CAPTURE_MODE_ENABLE_ID,
458     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_LOAD_KERNEL_INPUT_ID,
459     __MEDIA_USER_FEATURE_VALUE_VDENC_ULTRA_MODE_ENABLE_ID,
460     __MEDIA_USER_FEATURE_VALUE_HEVC_VME_BREAK12_ID,
461     __MEDIA_USER_FEATURE_VALUE_HEVC_VDENC_FORCE_DELTA_QP_ENABLE_ID,
462     __MEDIA_USER_FEATURE_VALUE_HEVC_VME_BRC_LTR_ENABLE_ID,
463     __MEDIA_USER_FEATURE_VALUE_HEVC_VDENC_FORCE_SCALABILITY_ID,
464     __MEDIA_USER_FEATURE_VALUE_HEVC_VME_DISABLE_PANIC_MODE_ID,
465     __MEDIA_USER_FEATURE_VALUE_HEVC_VME_NUM_MEDIA_HWWALKER_INUSE_ID,
466     __MEDIA_USER_FEATURE_VALUE_HEVC_VME_ENABLE_RENDER_CONTEXT_ID,
467     __MEDIA_USER_FEATURE_VALUE_MFE_FAST_SUBMIT_ID,
468     __MEDIA_USER_FEATURE_VALUE_MFE_MULTISTREAM_SCHEDULER_ID,
469     __MEDIA_USER_FEATURE_VALUE_LOCKABLE_RESOURCE_ID,
470     __MEDIA_USER_FEATURE_VALUE_MMC_ENC_POST_CDEF_RECON_COMPRESSIBLE_ID,
471     __MEDIA_USER_FEATURE_VALUE_MMC_ENC_POST_CDEF_RECON_COMPRESSMODE_ID,
472 
473     __MOS_USER_FEATURE_KEY_MAX_ID,
474 } MOS_USER_FEATURE_VALUE_ID;
475 
476 //!
477 //! \brief User Feature Type
478 //!
479 typedef enum
480 {
481     MOS_USER_FEATURE_TYPE_INVALID,
482     MOS_USER_FEATURE_TYPE_USER,
483     MOS_USER_FEATURE_TYPE_SYSTEM,
484 } MOS_USER_FEATURE_TYPE,
485     *PMOS_USER_FEATURE_TYPE;
486 
487 //!
488 //! \brief User Feature Value type
489 //!
490 typedef enum
491 {
492     MOS_USER_FEATURE_VALUE_TYPE_INVALID,
493     MOS_USER_FEATURE_VALUE_TYPE_BINARY,
494     MOS_USER_FEATURE_VALUE_TYPE_BOOL,
495     MOS_USER_FEATURE_VALUE_TYPE_INT32,
496     MOS_USER_FEATURE_VALUE_TYPE_INT64,
497     MOS_USER_FEATURE_VALUE_TYPE_UINT32,
498     MOS_USER_FEATURE_VALUE_TYPE_UINT64,
499     MOS_USER_FEATURE_VALUE_TYPE_FLOAT,
500     MOS_USER_FEATURE_VALUE_TYPE_STRING,
501     MOS_USER_FEATURE_VALUE_TYPE_MULTI_STRING,
502 } MOS_USER_FEATURE_VALUE_TYPE,
503     *PMOS_USER_FEATURE_VALUE_TYPE;
504 
505 //!
506 //! \brief User Feature Notification type
507 //!
508 typedef enum
509 {
510     MOS_USER_FEATURE_NOTIFY_TYPE_INVALID,
511     MOS_USER_FEATURE_NOTIFY_TYPE_VALUE_CHANGE,
512 } MOS_USER_FEATURE_NOTIFY_TYPE,
513     *PMOS_USER_FEATURE_NOTIFY_TYPE;
514 
515 //!
516 //! \brief User Feature Data Operation type
517 //!         NONE_CUSTOM_DEFAULT_VALUE :     None Custom Default Value for Input Data
518 //!         CUSTOM_DEFAULT_VALUE_TYPE :     With Custom Default Value for Input Data
519 //!
520 typedef enum
521 {
522     MOS_USER_FEATURE_VALUE_DATA_FLAG_NONE_CUSTOM_DEFAULT_VALUE_TYPE = 0,
523     MOS_USER_FEATURE_VALUE_DATA_FLAG_CUSTOM_DEFAULT_VALUE_TYPE,
524 } MOS_USER_FEATURE_VALUE_DATA_FLAG_TYPE,
525     *PMOS_USER_FEATURE_VALUE_DATA_FLAG_TYPE;
526 
527 //!
528 //! \brief User Feature Key Effective Range type
529 //!         EFFECT_ALWALYS   :   Effective on all driver builds
530 //!         EFFECT_DEBUGONLY :   Effective on release-internal and debug driver only
531 //!
532 typedef enum
533 {
534     MOS_USER_FEATURE_EFFECT_ALWAYS = 0,
535     MOS_USER_FEATURE_EFFECT_DEBUGONLY,
536 } MOS_USER_FEATURE_EFFECTIVE_TYPE,
537     *PMOS_USER_FEATURE_EFFECTIVE_TYPE;
538 
539 //!
540 //! \brief User Feature String Data
541 //!
542 typedef struct
543 {
544     char *   pStringData;
545     uint32_t uMaxSize;
546     uint32_t uSize;
547 } MOS_USER_FEATURE_VALUE_STRING, *PMOS_USER_FEATURE_VALUE_STRING;
548 
549 //!
550 //! \brief User Feature Multi String Data
551 //!
552 typedef struct
553 {
554     char *                         pMultStringData;
555     uint32_t                       uMaxSize;
556     uint32_t                       uSize;
557     PMOS_USER_FEATURE_VALUE_STRING pStrings;
558     uint32_t                       uCount;
559 } MOS_USER_FEATURE_VALUE_MULTI_STRING, *PMOS_USER_FEATURE_VALUE_MULTI_STRING;
560 
561 //!
562 //! \brief User Feature Binary Data
563 //!
564 typedef struct
565 {
566     uint8_t *pBinaryData;
567     uint32_t uMaxSize;
568     uint32_t uSize;
569 } MOS_USER_FEATURE_VALUE_BINARY, *PMOS_USER_FEATURE_VALUE_BINARY;
570 
571 //!
572 //! \brief      User Feature Value Data
573 //! \details    union :         to store the user feature value
574 //!             i32DataFlag :   the input data valye type
575 //!                             refer to MOS_USER_FEATURE_VALUE_DATA_FLAG_TYPE
576 //!
577 //!
578 typedef struct _MOS_USER_FEATURE_VALUE_DATA
579 {
580     union
581     {
582         int32_t                             bData;
583         uint32_t                            u32Data;
584         uint64_t                            u64Data;
585         int32_t                             i32Data;
586         int64_t                             i64Data;
587         float                               fData;
588         MOS_USER_FEATURE_VALUE_STRING       StringData;
589         MOS_USER_FEATURE_VALUE_MULTI_STRING MultiStringData;
590         MOS_USER_FEATURE_VALUE_BINARY       BinaryData;
591     };
592     int32_t i32DataFlag;
593 } MOS_USER_FEATURE_VALUE_DATA, *PMOS_USER_FEATURE_VALUE_DATA;
594 
595 //!
596 //! \brief User Feature Value Information
597 //!
598 typedef struct _MOS_USER_FEATURE_VALUE_WRITE_DATA
599 {
600     uint32_t                    ValueID;
601     MOS_USER_FEATURE_VALUE_DATA Value;
602 } MOS_USER_FEATURE_VALUE_WRITE_DATA, *PMOS_USER_FEATURE_VALUE_WRITE_DATA;
603 
604 //!
605 //! \brief User Feature Value Information
606 //!
607 typedef struct _MOS_USER_FEATURE_VALUE_INFO
608 {
609     char *   pcName;  //store name for the bitmask/enum values
610     uint32_t Value;
611 } MOS_USER_FEATURE_VALUE_INFO, *PMOS_USER_FEATURE_VALUE_INFO;
612 
613 //!
614 //! \brief User Feature Data
615 //!
616 typedef struct
617 {
618     uint32_t                     ValueID;
619     const char *                 pValueName;
620     const char *                 pcGroup;        //!< User feature key group - eg: MediaSolo, MOS, Codec
621     const char *                 pcPath;         //!< User feature Key Read Path
622     const char *                 pcWritePath;    //!< User feature Key Write Path
623     MOS_USER_FEATURE_TYPE        Type;           //!< User feature Key User Feature type - eg: System, User
624     MOS_USER_FEATURE_VALUE_TYPE  ValueType;      //!< User feature key type - eg: bool,dword
625     const char *                 DefaultValue;   //!< User feature key value
626     const char *                 pcDescription;  //!< User feature key description
627     int32_t                      bExists;        //<! Set if the user feature key is defined in the user feature key manager
628     uint32_t                     uiNumOfValues;  //<! Number of valid user feature key values. Useful for user feature keys of type bitmask and enum
629     PMOS_USER_FEATURE_VALUE_INFO pValueInfo;     //<! Store information of all valid enum/bit mask values and names
630     MOS_USER_FEATURE_EFFECTIVE_TYPE EffctiveRange;  //<! User feature key effect range, eg: Always effective / debug driver only
631     // Temp WA for old user feature read/write
632 #ifdef __MOS_USER_FEATURE_WA_
633     union
634     {
635         int32_t                             bData;
636         uint32_t                            u32Data;
637         uint64_t                            u64Data;
638         int32_t                             i32Data;
639         int64_t                             i64Data;
640         float                               fData;
641         MOS_USER_FEATURE_VALUE_STRING       StringData;
642         MOS_USER_FEATURE_VALUE_MULTI_STRING MultiStringData;
643         MOS_USER_FEATURE_VALUE_BINARY       BinaryData;
644     };
645 #endif
646     MOS_USER_FEATURE_VALUE_DATA Value;  //!< User feature key value
647 } MOS_USER_FEATURE_VALUE, *PMOS_USER_FEATURE_VALUE;
648 
649 //!
650 //! \brief User Feature Value Information
651 //!
652 typedef struct
653 {
654     PMOS_USER_FEATURE_VALUE pUserFeatureValue;
655 } MOS_USER_FEATURE_VALUE_MAP, *PMOS_USER_FEATURE_VALUE_MAP;
656 
657 //!
658 //! \brief User Feature Notification Data
659 //!
660 typedef struct
661 {
662     MOS_USER_FEATURE_TYPE        Type;        //!< User Feature Type
663     char *                       pPath;       //!< User Feature Path
664     MOS_USER_FEATURE_NOTIFY_TYPE NotifyType;  //!< Notification Type
665     int32_t                      bTriggered;  //!< Notification is triggered or not
666     void *                       pHandle;     //!< OS Specific Handle
667 } MOS_USER_FEATURE_NOTIFY_DATA, *PMOS_USER_FEATURE_NOTIFY_DATA;
668 
669 //!
670 //! \brief User Feature Interface
671 //!
672 typedef struct
673 {
674     MOS_USER_FEATURE_TYPE   Type;         //!< User Feature Type
675     const char *            pPath;        //!< User Feature Path
676     PMOS_USER_FEATURE_VALUE pValues;      //!< Array of User Feature Values
677     uint32_t                uiNumValues;  //!< Number of User Feature Values
678 } MOS_USER_FEATURE, *PMOS_USER_FEATURE;
679 
680 //!
681 //! \brief OS User Feature Interface
682 //!
683 typedef struct _MOS_USER_FEATURE_INTERFACE *PMOS_USER_FEATURE_INTERFACE;
684 typedef struct _MOS_USER_FEATURE_INTERFACE
685 {
686     void *                  pOsInterface;              //!< Pointer to OS Interface
687     int32_t                 bIsNotificationSupported;  //!< Whether Notification feature is supported
688 
689     MOS_STATUS (*pfnEnableNotification)
690     (
691         PMOS_USER_FEATURE_INTERFACE   pOsUserFeatureInterface,
692         PMOS_USER_FEATURE_NOTIFY_DATA pNotification,
693         MOS_CONTEXT_HANDLE            mosCtx);
694 
695     MOS_STATUS (*pfnDisableNotification)
696     (
697         PMOS_USER_FEATURE_INTERFACE   pOsUserFeatureInterface,
698         PMOS_USER_FEATURE_NOTIFY_DATA pNotification);
699 
700     MOS_STATUS (*pfnParsePath)
701     (
702         PMOS_USER_FEATURE_INTERFACE pOsUserFeatureInterface,
703         char *const                 pInputPath,
704         PMOS_USER_FEATURE_TYPE      pUserFeatureType,
705         char **                     ppSubPath);
706 
707 } MOS_USER_FEATURE_INTERFACE;
708 
709 //!
710 //! \brief User Feature Notification Data Common
711 //!
712 typedef struct
713 {
714     void *   UFKey;       //!< Handle to User Feature Key
715     HANDLE   hEvent;      //!< Handle to User Feature Key Event
716     PTP_WAIT hWaitEvent;  //!< Handle to User Feature Key Wait Event
717 } MOS_USER_FEATURE_NOTIFY_DATA_COMMON, *PMOS_USER_FEATURE_NOTIFY_DATA_COMMON;
718 
719 //!
720 //! \brief User Feature Key Path Info
721 //!
722 typedef struct
723 {
724     char *   Path;
725     uint32_t Length;
726 } MOS_USER_FEATURE_KEY_PATH_INFO, *PMOS_USER_FEATURE_KEY_PATH_INFO;
727 
728 #include "mos_util_user_feature_keys.h"
729 
730 #ifdef __cplusplus
731 //Memory alloc fail simulatiion related defination
732 #if (_DEBUG || _RELEASE_INTERNAL)
733 #define NO_ALLOC_ALIGNMENT (1)
734 #endif  //(_DEBUG || _RELEASE_INTERNAL)
735 #endif
736 #endif  // __MOS_UTILITIES_COMMON_H__
737