1 /*
2 * Copyright (c) 2019, 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 "mos_defs.h"
31 
32 #ifndef __MOS_USER_FEATURE_WA_
33 #define __MOS_USER_FEATURE_WA_
34 #endif
35 //------------------------------------------------------------------------------
36 // SECTION: Media User Feature Control
37 //
38 // ABSTRACT: Is an abstraction to read and write system level settings relating
39 //      to GEN media driver.
40 //------------------------------------------------------------------------------
41 
42 //!
43 //! \brief ASSERT when failing to read user feature key or default user feature key value,
44 //!        according to MOS_UserFeature_ReadValue_ID.
45 //!
46 #define MOS_USER_FEATURE_INVALID_KEY_ASSERT(_expr) \
47     if ((_expr) == MOS_STATUS_NULL_POINTER)        \
48     {                                              \
49         MOS_OS_ASSERT(false);                      \
50     }
51 
52 //!
53 //! \brief User Feature Type maximum and minimum data size
54 //!
55 #define MOS_USER_CONTROL_MIN_DATA_SIZE 128
56 #define MOS_USER_CONTROL_MAX_DATA_SIZE 2048
57 #define MOS_USER_MAX_STRING_COUNT 128
58 
59 #define MOS_USER_FEATURE_MAX_UINT32_STR_VALUE "4294967295"
60 
61 //! MOS User Feature
62 #define __NULL_USER_FEATURE_VALUE_WRITE_DATA__        \
63     {                                                 \
64         __MOS_USER_FEATURE_KEY_INVALID_ID, { {0}, 0 } \
65     }
66 #ifdef __MOS_USER_FEATURE_WA_
67 #define __NULL_USER_FEATURE_VALUE__                                                                                                                                                                                                              \
68     {                                                                                                                                                                                                                                            \
69         __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 }          \
70     }
71 #define MOS_DECLARE_UF_KEY(Id, ValueName, Readpath, Writepath, Group, Type, ValueType, DefaultValue, Description)                                                          \
72     {                                                                                                                                                                      \
73         Id, ValueName, Group, Readpath, Writepath, Type, ValueType, DefaultValue, Description, false, 1, nullptr, MOS_USER_FEATURE_EFFECT_ALWAYS, {0}, { {0}, 0 }          \
74     }
75 // 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
76 // 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
77 // user feature key read request that is needed for release driver
78 #define MOS_DECLARE_UF_KEY_DBGONLY(Id, ValueName, Readpath, Writepath, Group, Type, ValueType, DefaultValue, Description)                                                     \
79     {                                                                                                                                                                         \
80         Id, ValueName, Group, Readpath, Writepath, Type, ValueType, DefaultValue, Description, false, 1, nullptr, MOS_USER_FEATURE_EFFECT_DEBUGONLY, {0}, { {0}, 0 }          \
81     }
82 #else
83 #define __NULL_USER_FEATURE_VALUE__                                                                                                                                                                                                        \
84     {                                                                                                                                                                                                                                      \
85         __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 }         \
86     }
87 #define MOS_DECLARE_UF_KEY(Id, ValueName, Readpath, Writepath, Group, Type, ValueType, DefaultValue, Description)                                                     \
88     {                                                                                                                                                                 \
89         Id, ValueName, Group, Readpath, Writepath, Type, ValueType, DefaultValue, Description, false, 1, nullptr, MOS_USER_FEATURE_EFFECT_ALWAYS, { {0}, 0 }          \
90     }
91 #define MOS_DECLARE_UF_KEY_DBGONLY(Id, ValueName, Readpath, Writepath, Group, Type, ValueType, DefaultValue, Description)                                                \
92     {                                                                                                                                                                    \
93         Id, ValueName, Group, Readpath, Writepath, Type, ValueType, DefaultValue, Description, false, 1, nullptr, MOS_USER_FEATURE_EFFECT_DEBUGONLY, { {0}, 0 }          \
94     }
95 #endif
96 #ifndef MAX_USER_FEATURE_FIELD_LENGTH
97 #define MAX_USER_FEATURE_FIELD_LENGTH 256
98 #endif
99 
100 //!
101 //! \brief User Feature Value IDs
102 //!
103 typedef enum _MOS_USER_FEATURE_VALUE_ID
104 {
105     __MOS_USER_FEATURE_KEY_INVALID_ID = 0,
106     __MEDIA_USER_FEATURE_VALUE_MEDIA_RESET_ENABLE_ID,
107     __MEDIA_USER_FEATURE_VALUE_MEDIA_RESET_TH_ID,
108     __MEDIA_USER_FEATURE_VALUE_SOFT_RESET_ENABLE_ID,
109     __MEDIA_USER_FEATURE_VALUE_SIM_IN_USE_ID,
110     __MEDIA_USER_FEATURE_VALUE_FORCE_VDBOX_ID,
111     __MEDIA_USER_FEATURE_VALUE_LINUX_PERFORMANCETAG_ENABLE_ID,
112     __MEDIA_USER_FEATURE_VALUE_PERF_PROFILER_ENABLE_ID,
113     __MEDIA_USER_FEATURE_VALUE_PERF_PROFILER_FE_BE_TIMING,
114     __MEDIA_USER_FEATURE_VALUE_PERF_PROFILER_OUTPUT_FILE,
115     __MEDIA_USER_FEATURE_VALUE_PERF_PROFILER_BUFFER_SIZE,
116     __MEDIA_USER_FEATURE_VALUE_PERF_PROFILER_TIMER_REG,
117     __MEDIA_USER_FEATURE_VALUE_PERF_PROFILER_ENABLE_MULTI_PROCESS,
118     __MEDIA_USER_FEATURE_VALUE_PERF_PROFILER_REGISTER_1,
119     __MEDIA_USER_FEATURE_VALUE_PERF_PROFILER_REGISTER_2,
120     __MEDIA_USER_FEATURE_VALUE_PERF_PROFILER_REGISTER_3,
121     __MEDIA_USER_FEATURE_VALUE_PERF_PROFILER_REGISTER_4,
122     __MEDIA_USER_FEATURE_VALUE_PERF_PROFILER_REGISTER_5,
123     __MEDIA_USER_FEATURE_VALUE_PERF_PROFILER_REGISTER_6,
124     __MEDIA_USER_FEATURE_VALUE_PERF_PROFILER_REGISTER_7,
125     __MEDIA_USER_FEATURE_VALUE_PERF_PROFILER_REGISTER_8,
126     __MEDIA_USER_FEATURE_VALUE_DISABLE_KMD_WATCHDOG_ID,
127     __MEDIA_USER_FEATURE_VALUE_SINGLE_TASK_PHASE_ENABLE_ID,
128     __MEDIA_USER_FEATURE_VALUE_AUX_TABLE_16K_GRANULAR_ID,
129     __MEDIA_USER_FEATURE_VALUE_MFE_MBENC_ENABLE_ID,
130     __MEDIA_USER_FEATURE_VALUE_MFE_FIRST_BUFFER_SUBMIT_ID,
131     __MEDIA_USER_FEATURE_VALUE_RC_PANIC_ENABLE_ID,
132     __MEDIA_USER_FEATURE_VALUE_SLICE_SHUTDOWN_ENABLE_ID,
133     __MEDIA_USER_FEATURE_VALUE_FORCE_YFYS_ID,
134     __MEDIA_USER_FEATURE_VALUE_DECODE_LOCK_DISABLE_ID,
135     __MEDIA_USER_FEATURE_VALUE_ENCODE_HW_WALKER_ID,
136     __MEDIA_USER_FEATURE_VALUE_ENCODE_SUPPRESS_RECON_PIC_ENABLE_ID,
137     __MEDIA_USER_FEATURE_VALUE_ENCODE_ME_IN_USE_ID,
138     __MEDIA_USER_FEATURE_VALUE_ENCODE_16xME_IN_USE_ID,
139     __MEDIA_USER_FEATURE_VALUE_ENCODE_32xME_IN_USE_ID,
140     __MEDIA_USER_FEATURE_VALUE_ENCODE_BRC_IN_USE_ID,
141     __MEDIA_USER_FEATURE_VALUE_ENCODE_RATECONTROL_METHOD_ID,
142     __MEDIA_USER_FEATURE_VALUE_ENCODE_TARGET_USAGE_OVERRIDE_ID,
143     __MEDIA_USER_FEATURE_VALUE_ENCODE_ENABLE_FRAME_TRACKING_ID,
144     __MEDIA_USER_FEATURE_VALUE_ENCODE_USED_VDBOX_NUM_ID,
145     __MEDIA_USER_FEATURE_VALUE_ENCODE_ENABLE_COMPUTE_CONTEXT_ID,
146     __MEDIA_USER_FEATURE_VALUE_DECODE_ENABLE_COMPUTE_CONTEXT_ID,
147     __MEDIA_USER_FEATURE_VALUE_AVC_ENCODE_ME_ENABLE_ID,
148     __MEDIA_USER_FEATURE_VALUE_AVC_ENCODE_16xME_ENABLE_ID,
149     __MEDIA_USER_FEATURE_VALUE_AVC_ENCODE_32xME_ENABLE_ID,
150     __MEDIA_USER_FEATURE_VALUE_AVC_ENCODE_MULTIPRED_ENABLE_ID,
151     __MEDIA_USER_FEATURE_VALUE_AVC_ENCODE_INTRA_REFRESH_QP_THRESHOLD_ID,
152     __MEDIA_USER_FEATURE_VALUE_AVC_FTQ_ENABLE_ID,
153     __MEDIA_USER_FEATURE_VALUE_AVC_CAF_ENABLE_ID,
154     __MEDIA_USER_FEATURE_VALUE_AVC_CAF_DISABLE_HD_ID,
155     __MEDIA_USER_FEATURE_VALUE_AVC_MB_BRC_ENABLE_ID,
156     __MEDIA_USER_FEATURE_VALUE_AVC_ROUNDING_INTER_ENABLE_ID,
157     __MEDIA_USER_FEATURE_VALUE_AVC_ROUNDING_INTER_P_ID,
158     __MEDIA_USER_FEATURE_VALUE_AVC_ROUNDING_INTER_B_ID,
159     __MEDIA_USER_FEATURE_VALUE_AVC_ROUNDING_INTER_BREF_ID,
160     __MEDIA_USER_FEATURE_VALUE_AVC_ADAPTIVE_ROUNDING_INTER_ENABLE_ID,
161     __MEDIA_USER_FEATURE_VALUE_AVC_SKIP_BIAS_ADJUSTMENT_ENABLE_ID,
162     __MEDIA_USER_FEATURE_VALUE_AVC_ADAPTIVE_INTRA_SCALING_ENABLE_ID,
163     __MEDIA_USER_FEATURE_VALUE_AVC_OLD_MODE_COST_ENABLE_ID,
164     __MEDIA_USER_FEATURE_VALUE_AVC_FORCE_TO_SKIP_ENABLE_ID,
165     __MEDIA_USER_FEATURE_VALUE_AVC_SLIDING_WINDOW_SIZE_ID,
166     __MEDIA_USER_FEATURE_VALUE_VDENC_MB_SLICE_THRESHOLD_ID,
167     __MEDIA_USER_FEATURE_VALUE_VDENC_SLICE_THRESHOLD_TABLE_ID,
168     __MEDIA_USER_FEATURE_VALUE_VDENC_TAIL_INSERTION_DELAY_COUNT_ID,
169     __MEDIA_USER_FEATURE_VALUE_VDENC_THRESHOLD_I_SLICE_SIZE_MINUS_ID,
170     __MEDIA_USER_FEATURE_VALUE_VDENC_THRESHOLD_P_SLICE_SIZE_MINUS_ID,
171     __MEDIA_USER_FEATURE_VALUE_VDENC_CRE_PREFETCH_ENABLE_ID,
172     __MEDIA_USER_FEATURE_VALUE_VDENC_TLB_PREFETCH_ENABLE_ID,
173     __MEDIA_USER_FEATURE_VALUE_VDENC_TLB_ALLOCATION_WA_ENABLE_ID,
174     __MEDIA_USER_FEATURE_VALUE_VDENC_PERMB_STREAMOUT_ENABLE_ID,
175     __MEDIA_USER_FEATURE_VALUE_VDENC_SINGLE_PASS_ENABLE_ID,
176     __MEDIA_USER_FEATURE_VALUE_VDENC_BRC_MOTION_ADAPTIVE_ENABLE_ID,
177     __MEDIA_USER_FEATURE_VALUE_MMIO_MFX_LRA_0_OVERRIDE_ID,
178     __MEDIA_USER_FEATURE_VALUE_MMIO_MFX_LRA_1_OVERRIDE_ID,
179     __MEDIA_USER_FEATURE_VALUE_MMIO_MFX_LRA_2_OVERRIDE_ID,
180     __MEDIA_USER_FEATURE_VALUE_FLATNESS_CHECK_ENABLE_ID,
181     __MEDIA_USER_FEATURE_VALUE_AVC_ADAPTIVE_SEARCH_WINDOW_ENABLE_ID,
182     __MEDIA_USER_FEATURE_VALUE_ADAPTIVE_TRANSFORM_DECISION_ENABLE_ID,
183     __MEDIA_USER_FEATURE_VALUE_WEIGHTED_PREDICTION_L0_IN_USE_ID,
184     __MEDIA_USER_FEATURE_VALUE_WEIGHTED_PREDICTION_L1_IN_USE_ID,
185     __MEDIA_USER_FEATURE_VALUE_FBR_BYPASS_ENABLE_ID,
186     __MEDIA_USER_FEATURE_VALUE_STATIC_FRAME_DETECTION_ENABLE_ID,
187     __MEDIA_USER_FEATURE_VALUE_COLOR_BIT_SUPPORT_ENABLE_ID,
188     __MEDIA_USER_FEATURE_VALUE_GROUP_ID_SELECT_ENABLE_ID,
189     __MEDIA_USER_FEATURE_VALUE_AVC_BRC_ENABLE_ID,
190     __MEDIA_USER_FEATURE_VALUE_AVC_MULTIREF_QP_ID,
191     __MEDIA_USER_FEATURE_VALUE_AVC_BRC_SOFTWARE_ID,
192     __MEDIA_USER_FEATURE_VALUE_AVC_BRC_VAR_COMPU_BYPASS_ID,
193     __MEDIA_USER_FEATURE_VALUE_AVC_BRC_SOFTWARE_IN_USE_ID,
194     __MEDIA_USER_FEATURE_VALUE_ENABLE_CNL_AVC_ENCODE_ARB_WA_ID,
195     __MEDIA_USER_FEATURE_VALUE_HUC_DEMO_KERNEL_ID,
196     __MEDIA_USER_FEATURE_VALUE_VP9_ENCODE_ME_ENABLE_ID,
197     __MEDIA_USER_FEATURE_VALUE_VP9_ENCODE_16xME_ENABLE_ID,
198     __MEDIA_USER_FEATURE_VALUE_VP9_ENCODE_HUC_ENABLE_ID,
199     __MEDIA_USER_FEATURE_VALUE_VP9_ENCODE_MULTIPASS_BRC_ENABLE_ID,
200     __MEDIA_USER_FEATURE_VALUE_VP9_ENCODE_MULTIPASS_BRC_IN_USE_ID,
201     __MEDIA_USER_FEATURE_VALUE_VP9_ENCODE_ADAPTIVE_REPAK_ENABLE_ID,
202     __MEDIA_USER_FEATURE_VALUE_VP9_ENCODE_ADAPTIVE_REPAK_IN_USE_ID,
203     __MEDIA_USER_FEATURE_VALUE_VP9_ENCODE_SINGLE_PASS_DYS_ENABLE_ID,
204     __MEDIA_USER_FEATURE_VALUE_MEMNINJA_COUNTER_ID,
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_HEVC_VDENC_ACQP_ENABLE_ID,
229     __MEDIA_USER_FEATURE_VALUE_HEVC_VDENC_VQI_ENABLE_ID,
230     __MEDIA_USER_FEATURE_VALUE_FORCE_PAK_PASS_NUM_ID,
231     __MEDIA_USER_FEATURE_VALUE_HEVC_VDENC_ROUNDING_ENABLE_ID,
232     __MEDIA_USER_FEATURE_VALUE_HEVC_VDENC_PAKOBJCMD_STREAMOUT_ENABLE_ID,
233     __MEDIA_USER_FEATURE_VALUE_HEVC_VDENC_LBCONLY_ENABLE_ID,
234     __MEDIA_USER_FEATURE_VALUE_HEVC_VDENC_PARTIAL_FRAME_UPDATE_ENABLE_ID,
235     __MEDIA_USER_FEATURE_VALUE_HEVC_NUM_THREADS_PER_LCU_ID,
236     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_MDF_DISABLE_ID,
237     __MEDIA_USER_FEATURE_VALUE_CODEC_MMC_ENABLE_ID,
238     __MEDIA_USER_FEATURE_VALUE_DECODE_MMC_ENABLE_ID,
239     __MEDIA_USER_FEATURE_VALUE_ENCODE_MMC_ENABLE_ID,
240     __MEDIA_USER_FEATURE_VALUE_CODEC_MMC_IN_USE_ID,
241     __MEDIA_USER_FEATURE_VALUE_DECODE_MMC_IN_USE_ID,
242     __MEDIA_USER_FEATURE_VALUE_DECODE_MPEG2_MODE_ID,
243     __MEDIA_USER_FEATURE_VALUE_DECODE_VC1_MODE_ID,
244     __MEDIA_USER_FEATURE_VALUE_DECODE_AVC_MODE_ID,
245     __MEDIA_USER_FEATURE_VALUE_DECODE_JPEG_MODE_ID,
246     __MEDIA_USER_FEATURE_VALUE_DECODE_VP8_MODE_ID,
247     __MEDIA_USER_FEATURE_VALUE_DECODE_HEVC_MODE_ID,
248     __MEDIA_USER_FEATURE_VALUE_DECODE_VP9_MODE_ID,
249     __MEDIA_USER_FEATURE_VALUE_DECODE_HISTOGRAM_FROM_VEBOX_ID,
250     __MEDIA_USER_FEATURE_VALUE_DECODE_EXTENDED_MMC_IN_USE_ID,
251     __MEDIA_USER_FEATURE_VALUE_ENCODE_MMC_IN_USE_ID,
252     __MEDIA_USER_FEATURE_VALUE_ENCODE_EXTENDED_MMC_IN_USE_ID,
253     __MEDIA_USER_FEATURE_VALUE_MMC_DEC_RT_COMPRESSIBLE_ID,
254     __MEDIA_USER_FEATURE_VALUE_MMC_DEC_RT_COMPRESSMODE_ID,
255     __MEDIA_USER_FEATURE_VALUE_MMC_ENC_RECON_COMPRESSIBLE_ID,
256     __MEDIA_USER_FEATURE_VALUE_MMC_ENC_RECON_COMPRESSMODE_ID,
257     __MEDIA_USER_FEATURE_VALUE_SSEU_SETTING_OVERRIDE_ID,
258     __MEDIA_USER_FEATURE_VALUE_SLICE_SHUTDOWN_DEFAULT_STATE_ID,
259     __MEDIA_USER_FEATURE_VALUE_SLICE_SHUTDOWN_REQUEST_STATE_ID,
260     __MEDIA_USER_FEATURE_VALUE_SLICE_SHUTDOWN_RESOLUTION_THRESHOLD_ID,
261     __MEDIA_USER_FEATURE_VALUE_SLICE_SHUTDOWN_TARGET_USAGE_THRESHOLD_ID,
262     __MEDIA_USER_FEATURE_VALUE_SLICE_COUNT_SET_SUPPORT_ID,
263     __MEDIA_USER_FEATURE_VALUE_DYNAMIC_SLICE_SHUTDOWN_ID,
264     __MEDIA_USER_FEATURE_VALUE_ENABLE_VDBOX_BALANCING_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_CSC_COEFF_PATCH_MODE_DISABLE_ID,
272     __MEDIA_USER_FEATURE_VALUE_VP8_HW_SCOREBOARD_ENABLE_ID,
273     __MEDIA_USER_FEATURE_VALUE_VP8_ENCODE_ME_ENABLE_ID,
274     __MEDIA_USER_FEATURE_VALUE_VP8_ENCODE_16xME_ENABLE_ID,
275     __MEDIA_USER_FEATURE_VALUE_VP8_ENCODE_REPAK_ENABLE_ID,
276     __MEDIA_USER_FEATURE_VALUE_VP8_ENCODE_MULTIPASS_BRC_ENABLE_ID,
277     __MEDIA_USER_FEATURE_VALUE_VP8_ENCODE_ADAPTIVE_REPAK_ENABLE_ID,
278 #if MOS_COMMAND_BUFFER_DUMP_SUPPORTED
279     __MEDIA_USER_FEATURE_VALUE_DUMP_COMMAND_BUFFER_ENABLE_ID,
280 #endif  // MOS_COMMAND_BUFFER_DUMP_SUPPORTED
281 #if MOS_COMMAND_RESINFO_DUMP_SUPPORTED
282     __MEDIA_USER_FEATURE_VALUE_DUMP_COMMAND_INFO_ENABLE_ID,
283     __MEDIA_USER_FEATURE_VALUE_DUMP_COMMAND_INFO_PATH_ID,
284 #endif  // MOS_COMMAND_RESINFO_DUMP_SUPPORTED
285 #if (_DEBUG || _RELEASE_INTERNAL)
286     __MEDIA_USER_FEATURE_VALUE_GROUP_ID_ID,
287     __MEDIA_USER_FEATURE_VALUE_MEDIA_PREEMPTION_ENABLE_ID,
288     __MEDIA_USER_FEATURE_VALUE_MDF_OVERRIDE_L3TCCNTRL_REG,
289     __MEDIA_USER_FEATURE_VALUE_MDF_OVERRIDE_MOCS_INDEX,
290     __MEDIA_USER_FEATURE_VALUE_MDF_OVERRIDE_L3ALLOC_REG,
291     __MEDIA_USER_FEATURE_VALUE_MDF_FORCE_RAMODE,
292     __MEDIA_USER_FEATURE_VALUE_ENCODE_VFE_MAX_THREADS_ID,
293     __MEDIA_USER_FEATURE_VALUE_ENCODE_VFE_MAX_THREADS_SCALING_ID,
294     __MEDIA_USER_FEATURE_VALUE_AVC_FTQ_IN_USE_ID,
295     __MEDIA_USER_FEATURE_VALUE_AVC_CAF_IN_USE_ID,
296     __MEDIA_USER_FEATURE_VALUE_ENCODE_HW_WALKER_MODE_ID,
297     __MEDIA_USER_FEATURE_VALUE_ENCODE_L3_CACHE_CNTLREG_OVERRIDE_ID,
298     __MEDIA_USER_FEATURE_VALUE_ENCODE_L3_CACHE_CNTLREG2_OVERRIDE_ID,
299     __MEDIA_USER_FEATURE_VALUE_ENCODE_L3_CACHE_CNTLREG3_OVERRIDE_ID,
300     __MEDIA_USER_FEATURE_VALUE_ENCODE_L3_CACHE_SQCREG1_OVERRIDE_ID,
301     __MEDIA_USER_FEATURE_VALUE_ENCODE_L3_CACHE_SQCREG4_OVERRIDE_ID,
302     __MEDIA_USER_FEATURE_VALUE_ENCODE_L3_LRA_1_REG1_OVERRIDE_ID,
303     __MEDIA_USER_FEATURE_VALUE_NULL_HW_ACCELERATION_ENABLE_ID,
304     __MEDIA_USER_FEATURE_VALUE_VDBOX_ID_USED,
305     __MEDIA_USER_FEATURE_VALUE_VDENC_IN_USE_ID,
306     __MEDIA_USER_FEATURE_VALUE_ENCODE_CSC_METHOD_ID,
307     __MEDIA_USER_FEATURE_VALUE_ENCODE_RAW_TILE_ID,
308     __MEDIA_USER_FEATURE_VALUE_ENCODE_RAW_FORMAT_ID,
309     __MEDIA_USER_FEATURE_VALUE_ENCODE_CQM_QP_THRESHOLD_ID,
310     __MEDIA_USER_FEATURE_VALUE_ISA_ASM_DEBUG_ENABLE_ID,
311     __MEDIA_USER_FEATURE_VALUE_ISA_ASM_DEBUG_SURF_BTI_ID,
312     __MEDIA_USER_FEATURE_VALUE_ROWSTORE_CACHE_DISABLE_ID,
313     __MEDIA_USER_FEATURE_VALUE_INTRAROWSTORECACHE_DISABLE_ID,
314     __MEDIA_USER_FEATURE_VALUE_DEBLOCKINGFILTERROWSTORECACHE_DISABLE_ID,
315     __MEDIA_USER_FEATURE_VALUE_BSDMPCROWSTORECACHE_DISABLE_ID,
316     __MEDIA_USER_FEATURE_VALUE_MPRROWSTORECACHE_DISABLE_ID,
317     __MEDIA_USER_FEATURE_VALUE_VDENCROWSTORECACHE_DISABLE_ID,
318     __MEDIA_USER_FEATURE_VALUE_SIM_ENABLE_ID,
319     __MEDIA_USER_FEATURE_VALUE_IS_CODEC_ROW_STORE_CACHE_ENABLED_ID,
320     __MEDIA_USER_FEATURE_VALUE_BREAK_IN_CODECHAL_CREATE_ID,
321     __MEDIA_USER_FEATURE_VALUE_MEDIASOLO_ENABLE_ID,
322     __MEDIA_USER_FEATURE_VALUE_STREAM_OUT_ENABLE_ID,
323     __MEDIA_USER_FEATURE_VALUE_DECOMPRESS_DECODE_OUTPUT_ID,
324     __MEDIA_USER_FEATURE_VALUE_DECOMPRESS_DECODE_SFC_OUTPUT_ID,
325     __MEDIA_USER_FEATURE_VALUE_CODECHAL_DEBUG_OUTPUT_DIRECTORY_ID,
326     __MEDIA_USER_FEATURE_VALUE_CODECHAL_DUMP_OUTPUT_DIRECTORY_ID,
327     __MEDIA_USER_FEATURE_VALUE_CODECHAL_DEBUG_CFG_GENERATION_ID,
328     __MEDIA_USER_FEATURE_VALUE_CODECHAL_RDOQ_INTRA_TU_OVERRIDE_ID,
329     __MEDIA_USER_FEATURE_VALUE_CODECHAL_RDOQ_INTRA_TU_DISABLE_ID,
330     __MEDIA_USER_FEATURE_VALUE_CODECHAL_RDOQ_INTRA_TU_THRESHOLD_ID,
331     __MEDIA_USER_FEATURE_VALUE_CODECHAL_ENABLE_FAKE_HEADER_SIZE_ID,
332     __MEDIA_USER_FEATURE_VALUE_CODECHAL_FAKE_IFRAME_HEADER_SIZE_ID,
333     __MEDIA_USER_FEATURE_VALUE_CODECHAL_FAKE_PBFRAME_HEADER_SIZE_ID,
334     __MEDIA_USER_FEATURE_VALUE_COMMAND_OVERRIDE_INPUT_FILE_PATH_ID,
335     __MEDIA_USER_FEATURE_VALUE_MHW_BASE_VDENC_INTERFACE_ID,
336 #endif  // (_DEBUG || _RELEASE_INTERNAL)
337     __MEDIA_USER_FEATURE_VALUE_STATUS_REPORTING_ENABLE_ID,
338     __MEDIA_USER_FEATURE_VALUE_SPLIT_SCREEN_DEMO_POSITION_ID,
339     __MEDIA_USER_FEATURE_VALUE_SPLIT_SCREEN_DEMO_PARAMETERS_ID,
340 #if MOS_MESSAGES_ENABLED
341     __MOS_USER_FEATURE_KEY_MESSAGE_HLT_ENABLED_ID,
342     __MOS_USER_FEATURE_KEY_MESSAGE_HLT_OUTPUT_DIRECTORY_ID,
343     __MOS_USER_FEATURE_KEY_MESSAGE_PRINT_ENABLED_ID,
344     __MOS_USER_FEATURE_KEY_MESSAGE_OS_TAG_ID,
345     __MOS_USER_FEATURE_KEY_BY_SUB_COMPONENT_OS_ID,
346     __MOS_USER_FEATURE_KEY_SUB_COMPONENT_OS_TAG_ID,
347     __MOS_USER_FEATURE_KEY_MESSAGE_HW_TAG_ID,
348     __MOS_USER_FEATURE_KEY_BY_SUB_COMPONENT_HW_ID,
349     //!
350     //! \brief 63____________________________________________________________________________3__________0
351     //!         |                                                                            |   All    |
352     //!         |                    Reserved                                                |Asrt|level|
353     //!         |____________________________________________________________________________|__________|
354     //!
355     __MOS_USER_FEATURE_KEY_SUB_COMPONENT_HW_TAG_ID,
356     __MOS_USER_FEATURE_KEY_MESSAGE_CODEC_TAG_ID,
357     __MOS_USER_FEATURE_KEY_BY_SUB_COMPONENT_CODEC_ID,
358     __MOS_USER_FEATURE_KEY_SUB_COMPONENT_CODEC_TAG_ID,
359     __MOS_USER_FEATURE_KEY_MESSAGE_VP_TAG_ID,
360     __MOS_USER_FEATURE_KEY_BY_SUB_COMPONENT_VP_ID,
361     __MOS_USER_FEATURE_KEY_SUB_COMPONENT_VP_TAG_ID,
362     __MOS_USER_FEATURE_KEY_MESSAGE_CP_TAG_ID,
363     __MOS_USER_FEATURE_KEY_BY_SUB_COMPONENT_CP_ID,
364     __MOS_USER_FEATURE_KEY_SUB_COMPONENT_CP_TAG_ID,
365     __MOS_USER_FEATURE_KEY_MESSAGE_DDI_TAG_ID,
366     __MOS_USER_FEATURE_KEY_BY_SUB_COMPONENT_DDI_ID,
367     __MOS_USER_FEATURE_KEY_SUB_COMPONENT_DDI_TAG_ID,
368     __MOS_USER_FEATURE_KEY_MESSAGE_CM_TAG_ID,
369     __MOS_USER_FEATURE_KEY_BY_SUB_COMPONENT_CM_ID,
370     __MOS_USER_FEATURE_KEY_SUB_COMPONENT_CM_TAG_ID,
371     __MOS_USER_FEATURE_KEY_MESSAGE_SCALABILITY_TAG_ID,
372     __MOS_USER_FEATURE_KEY_BY_SUB_COMPONENT_SCALABILITY_ID,
373     __MOS_USER_FEATURE_KEY_SUB_COMPONENT_SCALABILITY_TAG_ID,
374     __MOS_USER_FEATURE_KEY_MESSAGE_MMC_TAG_ID,
375     __MOS_USER_FEATURE_KEY_BY_SUB_COMPONENT_MMC_ID,
376     __MOS_USER_FEATURE_KEY_SUB_COMPONENT_MMC_TAG_ID,
377     __MOS_USER_FEATURE_KEY_MESSAGE_BLT_TAG_ID,
378     __MOS_USER_FEATURE_KEY_BY_SUB_COMPONENT_BLT_ID,
379     __MOS_USER_FEATURE_KEY_SUB_COMPONENT_BLT_TAG_ID,
380 #endif  // MOS_MESSAGES_ENABLED
381     __MEDIA_USER_FEATURE_VALUE_HEVC_SF_2_DMA_SUBMITS_ENABLE_ID,
382     __MEDIA_USER_FEATURE_VALUE_HEVCDATROWSTORECACHE_DISABLE_ID,
383     __MEDIA_USER_FEATURE_VALUE_HEVCDFROWSTORECACHE_DISABLE_ID,
384     __MEDIA_USER_FEATURE_VALUE_HEVCSAOROWSTORECACHE_DISABLE_ID,
385     __MEDIA_USER_FEATURE_VALUE_VP9_HVDROWSTORECACHE_DISABLE_ID,
386     __MEDIA_USER_FEATURE_VALUE_VP9_DATROWSTORECACHE_DISABLE_ID,
387     __MEDIA_USER_FEATURE_VALUE_VP9_DFROWSTORECACHE_DISABLE_ID,
388     __MEDIA_USER_FEATURE_VALUE_DDI_DUMP_DIRECTORY_ID,
389     __MEDIA_USER_FEATURE_VALUE_ENCODE_DDI_DUMP_ENABLE_ID,
390     __MEDIA_USER_FEATURE_VALUE_MDF_CMD_DUMP_ENABLE_ID,
391     __MEDIA_USER_FEATURE_VALUE_MDF_ETW_ENABLE_ID,
392     __MEDIA_USER_FEATURE_VALUE_MDF_LOG_LEVEL_ID,
393     __MEDIA_USER_FEATURE_VALUE_MDF_UMD_ULT_ENABLE_ID,
394     __MEDIA_USER_FEATURE_VALUE_MDF_CURBE_DUMP_ENABLE_ID,
395     __MEDIA_USER_FEATURE_VALUE_MDF_SURFACE_DUMP_ENABLE_ID,
396     __MEDIA_USER_FEATURE_VALUE_MDF_SURFACE_STATE_DUMP_ENABLE_ID,
397     __MEDIA_USER_FEATURE_VALUE_MDF_CMD_DUMP_COUNTER_ID,
398     __MEDIA_USER_FEATURE_VALUE_MDF_SURFACE_STATE_DUMP_COUNTER_ID,
399     __MEDIA_USER_FEATURE_VALUE_MDF_INTERFACE_DESCRIPTOR_DATA_DUMP_ID,
400     __MEDIA_USER_FEATURE_VALUE_MDF_INTERFACE_DESCRIPTOR_DATA_COUNTER_ID,
401     __MEDIA_USER_FEATURE_VALUE_MDF_DUMPPATH_USER_ID,
402     __MEDIA_USER_FEATURE_VALUE_MDF_EMU_MODE_ENABLE_ID,
403     __MEDIA_USER_FEATURE_VALUE_MDF_DEFAULT_CM_QUEUE_TYPE_ID,
404     __MEDIA_USER_FEATURE_VALUE_MDF_CCS_USE_VE_INTERFACE,
405     __MEDIA_USER_FEATURE_VALUE_MDF_CCS_USE_VE_DEBUG_OVERRIDE,
406     __MEDIA_USER_FEATURE_VALUE_MDF_FORCE_EXECUTION_PATH_ID,
407     __MEDIA_USER_FEATURE_VALUE_MDF_MAX_THREAD_NUM_ID,
408     __MEDIA_USER_FEATURE_VALUE_MDF_FORCE_COHERENT_STATELESSBTI_ID,
409     __MEDIA_USER_FEATURE_ENABLE_RENDER_ENGINE_MMC_ID,
410     __MEDIA_USER_FEATURE_VALUE_DISABLE_MMC_ID,
411     __VPHAL_VEBOX_OUTPUTPIPE_MODE_ID,
412     __VPHAL_VEBOX_FEATURE_INUSE_ID,
413     __VPHAL_RNDR_SSD_CONTROL_ID,
414     __VPHAL_RNDR_SCOREBOARD_CONTROL_ID,
415     __VPHAL_RNDR_CMFC_CONTROL_ID,
416 #if (_DEBUG || _RELEASE_INTERNAL)
417     __VPHAL_DBG_SURF_DUMP_OUTFILE_KEY_NAME_ID,
418     __VPHAL_DBG_SURF_DUMP_LOCATION_KEY_NAME_ID,
419     __VPHAL_DBG_SURF_DUMP_MANUAL_TRIGGER_KEY_NAME_ID,
420     __VPHAL_DBG_SURF_DUMP_START_FRAME_KEY_NAME_ID,
421     __VPHAL_DBG_SURF_DUMP_END_FRAME_KEY_NAME_ID,
422     __VPHAL_DBG_SURF_DUMPER_ENABLE_PLANE_DUMP,
423     __VPHAL_DBG_SURF_DUMP_ENABLE_AUX_DUMP_ID,
424     __VPHAL_DBG_SURF_DUMPER_RESOURCE_LOCK_ID,
425     __VPHAL_DBG_STATE_DUMP_OUTFILE_KEY_NAME_ID,
426     __VPHAL_DBG_STATE_DUMP_LOCATION_KEY_NAME_ID,
427     __VPHAL_DBG_STATE_DUMP_START_FRAME_KEY_NAME_ID,
428     __VPHAL_DBG_STATE_DUMP_END_FRAME_KEY_NAME_ID,
429     __VPHAL_DBG_PARAM_DUMP_OUTFILE_KEY_NAME_ID,
430     __VPHAL_DBG_PARAM_DUMP_START_FRAME_KEY_NAME_ID,
431     __VPHAL_DBG_PARAM_DUMP_END_FRAME_KEY_NAME_ID,
432     __VPHAL_DBG_DUMP_OUTPUT_DIRECTORY_ID,
433 #endif
434     __VPHAL_SET_SINGLE_SLICE_VEBOX_ID,
435     __VPHAL_BYPASS_COMPOSITION_ID,
436     __VPHAL_VEBOX_DISABLE_SFC_ID,
437     __VPHAL_ENABLE_MMC_ID,
438     __VPHAL_ENABLE_MMC_IN_USE_ID,
439     __VPHAL_PRIMARY_SURFACE_COMPRESS_MODE_ID,
440     __VPHAL_PRIMARY_SURFACE_COMPRESSIBLE_ID,
441     __VPHAL_RT_COMPRESS_MODE_ID,
442     __VPHAL_RT_COMPRESSIBLE_ID,
443     __VPHAL_ENABLE_VEBOX_MMC_DECOMPRESS_ID,
444     __VPHAL_VEBOX_DISABLE_TEMPORAL_DENOISE_FILTER_ID,
445     __VPHAL_ENABLE_SUPER_RESOLUTION_ID,
446     __VPHAL_SUPER_RESOLUTION_MODE_ID,
447     __VPHAL_ENABLE_SUPER_RESOLUTION_EDSR_ID,
448     __VPHAL_SUPER_RESOLUTION_EDSR_MODE_ID,
449 #if (_DEBUG || _RELEASE_INTERNAL)
450     __VPHAL_COMP_8TAP_ADAPTIVE_ENABLE_ID,
451     __VPHAL_RNDR_FORCE_VP_DECOMPRESSED_OUTPUT_ID,
452 #endif
453 #if ((_DEBUG || _RELEASE_INTERNAL) && !EMUL)
454     __VPHAL_RNDR_VEBOX_MODE_0_ID,
455     __VPHAL_RNDR_VEBOX_MODE_0_TO_2_ID,
456     __VPHAL_RNDR_VEBOX_MODE_2_ID,
457     __VPHAL_RNDR_VEBOX_MODE_2_TO_0_ID,
458 #endif
459 #if (_DEBUG || _RELEASE_INTERNAL)
460     __VPHAL_ENABLE_COMPUTE_CONTEXT_ID,
461 #endif
462     __MOS_USER_FEATURE_KEY_VP_CAPS_FF_OVERRIDE_ID,
463     __MOS_USER_FEATURE_KEY_XML_AUTOGEN_ID,
464     __MOS_USER_FEATURE_KEY_XML_FILEPATH_ID,
465     __MOS_USER_FEATURE_KEY_XML_DUMP_GROUPS_ID,
466     __MEDIA_USER_FEATURE_VALUE_FORCE_VEBOX_ID,
467     __MEDIA_USER_FEATURE_VALUE_ENABLE_VEBOX_SCALABILITY_MODE_ID,
468     __MEDIA_USER_FEATURE_VALUE_VEBOX_SPLIT_RATIO_ID,
469     __MEDIA_USER_FEATURE_VALUE_HCP_DECODE_MODE_SWITCH_THRESHOLD1_ID,
470     __MEDIA_USER_FEATURE_VALUE_HCP_DECODE_MODE_SWITCH_THRESHOLD2_ID,
471     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_ENABLE_VE_DEBUG_OVERRIDE,
472     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_ENABLE_HW_SEMAPHORE,
473     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_ENABLE_VDBOX_HW_SEMAPHORE,
474     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_ENABLE_HW_STITCH,
475     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_SUBTHREAD_NUM_ID,
476     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_PAK_ONLY_ID,
477     __MEDIA_USER_FEATURE_VALUE_HEVC_VME_ENCODE_SSE_ENABLE_ID,
478     __MEDIA_USER_FEATURE_VALUE_ENCODE_DISABLE_SCALABILITY,
479     __MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_RDOQ_PERF_DISABLE_ID,
480     __MEDIA_USER_FEATURE_VALUE_WATCHDOG_TIMER_THRESHOLD,
481     __MEDIA_USER_FEATURE_VALUE_ENABLE_DECODE_VIRTUAL_ENGINE_ID,
482     __MEDIA_USER_FEATURE_VALUE_ENABLE_DECODE_VE_CTXSCHEDULING_ID,
483     __MEDIA_USER_FEATURE_VALUE_ENABLE_LINUX_FRAME_SPLIT_ID,
484     __MEDIA_USER_FEATURE_VALUE_ENABLE_ENCODE_VIRTUAL_ENGINE_ID,
485     __MEDIA_USER_FEATURE_VALUE_ENABLE_ENCODE_VE_CTXSCHEDULING_ID,
486     __MEDIA_USER_FEATURE_VALUE_ENABLE_VE_DEBUG_OVERRIDE_ID,
487     __MEDIA_USER_FEATURE_VALUE_ENABLE_HCP_SCALABILITY_DECODE_ID,
488     __MEDIA_USER_FEATURE_VALUE_HCP_DECODE_ALWAYS_FRAME_SPLIT_ID,
489     __MEDIA_USER_FEATURE_VALUE_SCALABILITY_OVERRIDE_SPLIT_WIDTH_IN_MINCB,
490     __MEDIA_USER_FEATURE_VALUE_SCALABILITY_FE_SEPARATE_SUBMISSION_ENABLED_ID,
491     __MEDIA_USER_FEATURE_VALUE_SCALABILITY_FE_SEPARATE_SUBMISSION_IN_USE_ID,
492     __MEDIA_USER_FEATURE_VALUE_HEVC_VME_BRC_LTR_DISABLE_ID,
493     __MEDIA_USER_FEATURE_VALUE_HEVC_VME_BRC_LTR_INTERVAL_ID,
494     __MEDIA_USER_FEATURE_VALUE_HEVC_VME_FORCE_SCALABILITY_ID,
495     __MEDIA_USER_FEATURE_VALUE_HEVC_VDENC_SEMA_RESET_DELAY_ID,
496     __MEDIA_USER_FEATURE_VALUE_SET_CMD_DEFAULT_PARS_FROM_FILES_ID,
497     __MEDIA_USER_FEATURE_VALUE_CMD_PARS_FILES_DIRECORY_ID,
498     __MEDIA_USER_FEATURE_VALUE_APOGEIOS_ENABLE_ID,
499     __MEDIA_USER_FEATURE_VALUE_VPP_APOGEIOS_ENABLE_ID,
500     __MEDIA_USER_FEATURE_VALUE_SUPER_RESOLUTION_ENABLE_ID,
501     __MEDIA_USER_FEATURE_VALUE_SUPER_RESOLUTION_MODE_ID,
502     __MEDIA_USER_FEATURE_VALUE_EXTERNAL_COPY_SYNC_ID,
503     __MEDIA_USER_FEATURE_VALUE_ENABLE_UMD_OCA_ID,
504     __MEDIA_USER_FEATURE_VALUE_COUNT_FOR_OCA_BUFFER_LEAKED_ID,
505     __MEDIA_USER_FEATURE_VALUE_COUNT_FOR_OCA_1ST_LEVEL_BB_END_MISSED_ID,
506     __MEDIA_USER_FEATURE_VALUE_COUNT_FOR_ADDITIONAL_OCA_BUFFER_ALLOCATED_ID,
507     __MEDIA_USER_FEATURE_VALUE_OCA_STATUS_ID,
508     __MEDIA_USER_FEATURE_VALUE_OCA_ERROR_HINT_ID,
509     __MEDIA_USER_FEATURE_VALUE_IS_INDIRECT_STATE_HEAP_INVALID_ID,
510     __MEDIA_USER_FEATURE_VALUE_ENABLE_SW_BACK_ANNOTATION_ID,
511     __MEDIA_USER_FEATURE_VALUE_ENABLE_CC_STITCHING_ID,
512 #if (_DEBUG || _RELEASE_INTERNAL)
513     __MEDIA_USER_FEATURE_VALUE_ENABLE_SW_STITCHING_ID,
514     __MEDIA_USER_FEATURE_VALUE_ALLOC_MEMORY_FAIL_SIMULATE_MODE_ID,
515     __MEDIA_USER_FEATURE_VALUE_ALLOC_MEMORY_FAIL_SIMULATE_FREQ_ID,
516     __MEDIA_USER_FEATURE_VALUE_ALLOC_MEMORY_FAIL_SIMULATE_HINT_ID,
517 #endif
518     __MEDIA_USER_FEATURE_VALUE_PERF_UTILITY_TOOL_ENABLE_ID,
519     __MEDIA_USER_FEATURE_VALUE_PERF_OUTPUT_DIRECTORY_ID,
520     __MEDIA_USER_FEATURE_VALUE_APO_MOS_PATH_ENABLE_ID,
521     __MEDIA_USER_FEATURE_VALUE_APOGEIOS_HEVCD_ENABLE_ID,
522     __MEDIA_USER_FEATURE_VALUE_RESOURCE_ADDR_DUMP_ENABLE_ID,
523     __MOS_USER_FEATURE_KEY_MAX_ID,
524 } MOS_USER_FEATURE_VALUE_ID;
525 
526 //!
527 //! \brief User Feature Type
528 //!
529 typedef enum
530 {
531     MOS_USER_FEATURE_TYPE_INVALID,
532     MOS_USER_FEATURE_TYPE_USER,
533     MOS_USER_FEATURE_TYPE_SYSTEM,
534 } MOS_USER_FEATURE_TYPE,
535     *PMOS_USER_FEATURE_TYPE;
536 
537 //!
538 //! \brief User Feature Value type
539 //!
540 typedef enum
541 {
542     MOS_USER_FEATURE_VALUE_TYPE_INVALID,
543     MOS_USER_FEATURE_VALUE_TYPE_BINARY,
544     MOS_USER_FEATURE_VALUE_TYPE_BOOL,
545     MOS_USER_FEATURE_VALUE_TYPE_INT32,
546     MOS_USER_FEATURE_VALUE_TYPE_INT64,
547     MOS_USER_FEATURE_VALUE_TYPE_UINT32,
548     MOS_USER_FEATURE_VALUE_TYPE_UINT64,
549     MOS_USER_FEATURE_VALUE_TYPE_FLOAT,
550     MOS_USER_FEATURE_VALUE_TYPE_STRING,
551     MOS_USER_FEATURE_VALUE_TYPE_MULTI_STRING,
552 } MOS_USER_FEATURE_VALUE_TYPE,
553     *PMOS_USER_FEATURE_VALUE_TYPE;
554 
555 //!
556 //! \brief User Feature Notification type
557 //!
558 typedef enum
559 {
560     MOS_USER_FEATURE_NOTIFY_TYPE_INVALID,
561     MOS_USER_FEATURE_NOTIFY_TYPE_VALUE_CHANGE,
562 } MOS_USER_FEATURE_NOTIFY_TYPE,
563     *PMOS_USER_FEATURE_NOTIFY_TYPE;
564 
565 //!
566 //! \brief User Feature Data Operation type
567 //!         NONE_CUSTOM_DEFAULT_VALUE :     None Custom Default Value for Input Data
568 //!         CUSTOM_DEFAULT_VALUE_TYPE :     With Custom Default Value for Input Data
569 //!
570 typedef enum
571 {
572     MOS_USER_FEATURE_VALUE_DATA_FLAG_NONE_CUSTOM_DEFAULT_VALUE_TYPE = 0,
573     MOS_USER_FEATURE_VALUE_DATA_FLAG_CUSTOM_DEFAULT_VALUE_TYPE,
574 } MOS_USER_FEATURE_VALUE_DATA_FLAG_TYPE,
575     *PMOS_USER_FEATURE_VALUE_DATA_FLAG_TYPE;
576 
577 //!
578 //! \brief User Feature Key Effective Range type
579 //!         EFFECT_ALWALYS   :   Effective on all driver builds
580 //!         EFFECT_DEBUGONLY :   Effective on release-internal and debug driver only
581 //!
582 typedef enum
583 {
584     MOS_USER_FEATURE_EFFECT_ALWAYS = 0,
585     MOS_USER_FEATURE_EFFECT_DEBUGONLY,
586 } MOS_USER_FEATURE_EFFECTIVE_TYPE,
587     *PMOS_USER_FEATURE_EFFECTIVE_TYPE;
588 
589 //!
590 //! \brief User Feature String Data
591 //!
592 typedef struct
593 {
594     char *   pStringData;
595     uint32_t uMaxSize;
596     uint32_t uSize;
597 } MOS_USER_FEATURE_VALUE_STRING, *PMOS_USER_FEATURE_VALUE_STRING;
598 
599 //!
600 //! \brief User Feature Multi String Data
601 //!
602 typedef struct
603 {
604     char *                         pMultStringData;
605     uint32_t                       uMaxSize;
606     uint32_t                       uSize;
607     PMOS_USER_FEATURE_VALUE_STRING pStrings;
608     uint32_t                       uCount;
609 } MOS_USER_FEATURE_VALUE_MULTI_STRING, *PMOS_USER_FEATURE_VALUE_MULTI_STRING;
610 
611 //!
612 //! \brief User Feature Binary Data
613 //!
614 typedef struct
615 {
616     uint8_t *pBinaryData;
617     uint32_t uMaxSize;
618     uint32_t uSize;
619 } MOS_USER_FEATURE_VALUE_BINARY, *PMOS_USER_FEATURE_VALUE_BINARY;
620 
621 //!
622 //! \brief      User Feature Value Data
623 //! \details    union :         to store the user feature value
624 //!             i32DataFlag :   the input data valye type
625 //!                             refer to MOS_USER_FEATURE_VALUE_DATA_FLAG_TYPE
626 //!
627 //!
628 typedef struct _MOS_USER_FEATURE_VALUE_DATA
629 {
630     union
631     {
632         int32_t                             bData;
633         uint32_t                            u32Data;
634         uint64_t                            u64Data;
635         int32_t                             i32Data;
636         int64_t                             i64Data;
637         float                               fData;
638         MOS_USER_FEATURE_VALUE_STRING       StringData;
639         MOS_USER_FEATURE_VALUE_MULTI_STRING MultiStringData;
640         MOS_USER_FEATURE_VALUE_BINARY       BinaryData;
641     };
642     int32_t i32DataFlag;
643 } MOS_USER_FEATURE_VALUE_DATA, *PMOS_USER_FEATURE_VALUE_DATA;
644 
645 //!
646 //! \brief User Feature Value Information
647 //!
648 typedef struct _MOS_USER_FEATURE_VALUE_WRITE_DATA
649 {
650     uint32_t                    ValueID;
651     MOS_USER_FEATURE_VALUE_DATA Value;
652 } MOS_USER_FEATURE_VALUE_WRITE_DATA, *PMOS_USER_FEATURE_VALUE_WRITE_DATA;
653 
654 //!
655 //! \brief User Feature Value Information
656 //!
657 typedef struct _MOS_USER_FEATURE_VALUE_INFO
658 {
659     char *   pcName;  //store name for the bitmask/enum values
660     uint32_t Value;
661 } MOS_USER_FEATURE_VALUE_INFO, *PMOS_USER_FEATURE_VALUE_INFO;
662 
663 //!
664 //! \brief User Feature Data
665 //!
666 typedef struct
667 {
668     uint32_t                     ValueID;
669     const char *                 pValueName;
670     const char *                 pcGroup;        //!< User feature key group - eg: MediaSolo, MOS, Codec
671     const char *                 pcPath;         //!< User feature Key Read Path
672     const char *                 pcWritePath;    //!< User feature Key Write Path
673     MOS_USER_FEATURE_TYPE        Type;           //!< User feature Key User Feature type - eg: System, User
674     MOS_USER_FEATURE_VALUE_TYPE  ValueType;      //!< User feature key type - eg: bool,dword
675     const char *                 DefaultValue;   //!< User feature key value
676     const char *                 pcDescription;  //!< User feature key description
677     int32_t                      bExists;        //<! Set if the user feature key is defined in the user feature key manager
678     uint32_t                     uiNumOfValues;  //<! Number of valid user feature key values. Useful for user feature keys of type bitmask and enum
679     PMOS_USER_FEATURE_VALUE_INFO pValueInfo;     //<! Store information of all valid enum/bit mask values and names
680     MOS_USER_FEATURE_EFFECTIVE_TYPE EffctiveRange;  //<! User feature key effect range, eg: Always effective / debug driver only
681     // Temp WA for old user feature read/write
682 #ifdef __MOS_USER_FEATURE_WA_
683     union
684     {
685         int32_t                             bData;
686         uint32_t                            u32Data;
687         uint64_t                            u64Data;
688         int32_t                             i32Data;
689         int64_t                             i64Data;
690         float                               fData;
691         MOS_USER_FEATURE_VALUE_STRING       StringData;
692         MOS_USER_FEATURE_VALUE_MULTI_STRING MultiStringData;
693         MOS_USER_FEATURE_VALUE_BINARY       BinaryData;
694     };
695 #endif
696     MOS_USER_FEATURE_VALUE_DATA Value;  //!< User feature key value
697 } MOS_USER_FEATURE_VALUE, *PMOS_USER_FEATURE_VALUE;
698 
699 //!
700 //! \brief User Feature Value Information
701 //!
702 typedef struct
703 {
704     PMOS_USER_FEATURE_VALUE pUserFeatureValue;
705 } MOS_USER_FEATURE_VALUE_MAP, *PMOS_USER_FEATURE_VALUE_MAP;
706 
707 //!
708 //! \brief User Feature Notification Data
709 //!
710 typedef struct
711 {
712     MOS_USER_FEATURE_TYPE        Type;        //!< User Feature Type
713     char *                       pPath;       //!< User Feature Path
714     MOS_USER_FEATURE_NOTIFY_TYPE NotifyType;  //!< Notification Type
715     int32_t                      bTriggered;  //!< Notification is triggered or not
716     void *                       pHandle;     //!< OS Specific Handle
717 } MOS_USER_FEATURE_NOTIFY_DATA, *PMOS_USER_FEATURE_NOTIFY_DATA;
718 
719 //!
720 //! \brief User Feature Interface
721 //!
722 typedef struct
723 {
724     MOS_USER_FEATURE_TYPE   Type;         //!< User Feature Type
725     const char *            pPath;        //!< User Feature Path
726     PMOS_USER_FEATURE_VALUE pValues;      //!< Array of User Feature Values
727     uint32_t                uiNumValues;  //!< Number of User Feature Values
728 } MOS_USER_FEATURE, *PMOS_USER_FEATURE;
729 
730 //!
731 //! \brief OS User Feature Interface
732 //!
733 typedef struct _MOS_USER_FEATURE_INTERFACE *PMOS_USER_FEATURE_INTERFACE;
734 typedef struct _MOS_USER_FEATURE_INTERFACE
735 {
736     void *                  pOsInterface;              //!< Pointer to OS Interface
737     int32_t                 bIsNotificationSupported;  //!< Whether Notification feature is supported
738 
739     MOS_STATUS (*pfnEnableNotification)
740     (
741         PMOS_USER_FEATURE_INTERFACE   pOsUserFeatureInterface,
742         PMOS_USER_FEATURE_NOTIFY_DATA pNotification);
743 
744     MOS_STATUS (*pfnDisableNotification)
745     (
746         PMOS_USER_FEATURE_INTERFACE   pOsUserFeatureInterface,
747         PMOS_USER_FEATURE_NOTIFY_DATA pNotification);
748 
749     MOS_STATUS (*pfnParsePath)
750     (
751         PMOS_USER_FEATURE_INTERFACE pOsUserFeatureInterface,
752         char *const                 pInputPath,
753         PMOS_USER_FEATURE_TYPE      pUserFeatureType,
754         char **                     ppSubPath);
755 
756 } MOS_USER_FEATURE_INTERFACE;
757 
758 //!
759 //! \brief User Feature Notification Data Common
760 //!
761 typedef struct
762 {
763     void *   UFKey;       //!< Handle to User Feature Key
764     HANDLE   hEvent;      //!< Handle to User Feature Key Event
765     PTP_WAIT hWaitEvent;  //!< Handle to User Feature Key Wait Event
766 } MOS_USER_FEATURE_NOTIFY_DATA_COMMON, *PMOS_USER_FEATURE_NOTIFY_DATA_COMMON;
767 
768 //!
769 //! \brief User Feature Key Path Info
770 //!
771 typedef struct
772 {
773     char *   Path;
774     uint32_t Length;
775     uint32_t RefCnt;
776 } MOS_USER_FEATURE_KEY_PATH_INFO, *PMOS_USER_FEATURE_KEY_PATH_INFO;
777 
778 #ifdef __cplusplus
779 //Memory alloc fail simulatiion related defination
780 #if (_DEBUG || _RELEASE_INTERNAL)
781 #define NO_ALLOC_ALIGNMENT (1)
782 #endif  //(_DEBUG || _RELEASE_INTERNAL)
783 #endif
784 #endif  // __MOS_UTILITIES_COMMON_H__
785