1 /*
2 * Copyright (c) 2009-2021, 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_os_hw.h
24 //! \brief
25 //!
26 //!
27 //! \file     mos_os_hw.h
28 //! \brief    Common interface and structure used in MOS OS HW
29 //! \details  Common interface and structure used in MOS OS HW
30 //!
31 
32 #ifndef __MOS_OS_HW_H__
33 #define __MOS_OS_HW_H__
34 
35 //!
36 //! \brief OS HW resource definitions
37 //!
38 typedef enum _MOS_HW_RESOURCE_DEF
39 {
40     // CODEC USAGES
41     MOS_CODEC_RESOURCE_USAGE_BEGIN_CODEC,
42     MOS_CODEC_RESOURCE_USAGE_PRE_DEBLOCKING_CODEC,
43     MOS_CODEC_RESOURCE_USAGE_PRE_DEBLOCKING_CODEC_PARTIALENCSURFACE,              //!< Pre-Deblocking codec surface for partial secure surfaces,
44     MOS_CODEC_RESOURCE_USAGE_POST_DEBLOCKING_CODEC,
45     MOS_CODEC_RESOURCE_USAGE_ORIGINAL_UNCOMPRESSED_PICTURE_ENCODE,
46     MOS_CODEC_RESOURCE_USAGE_ORIGINAL_UNCOMPRESSED_PICTURE_DECODE,
47     MOS_CODEC_RESOURCE_USAGE_STREAMOUT_DATA_CODEC,
48     MOS_CODEC_RESOURCE_USAGE_INTRA_ROWSTORE_SCRATCH_BUFFER_CODEC,
49     MOS_CODEC_RESOURCE_USAGE_DEBLOCKINGFILTER_ROWSTORE_SCRATCH_BUFFER_CODEC,
50     MOS_CODEC_RESOURCE_USAGE_REFERENCE_PICTURE_CODEC,
51     MOS_CODEC_RESOURCE_USAGE_MACROBLOCK_STATUS_BUFFER_CODEC,
52     MOS_CODEC_RESOURCE_USAGE_MFX_INDIRECT_BITSTREAM_OBJECT_DECODE,
53     MOS_CODEC_RESOURCE_USAGE_MFX_INDIRECT_MV_OBJECT_CODEC,
54     MOS_CODEC_RESOURCE_USAGE_MFD_INDIRECT_IT_COEF_OBJECT_DECODE,
55     MOS_CODEC_RESOURCE_USAGE_MFC_INDIRECT_PAKBASE_OBJECT_CODEC,
56     MOS_CODEC_RESOURCE_USAGE_BSDMPC_ROWSTORE_SCRATCH_BUFFER_CODEC,
57     MOS_CODEC_RESOURCE_USAGE_MPR_ROWSTORE_SCRATCH_BUFFER_CODEC,
58     MOS_CODEC_RESOURCE_USAGE_BITPLANE_READ_CODEC,
59     MOS_CODEC_RESOURCE_USAGE_DIRECTMV_BUFFER_CODEC,
60     MOS_CODEC_RESOURCE_USAGE_SURFACE_CURR_ENCODE,
61     MOS_CODEC_RESOURCE_USAGE_SURFACE_REF_ENCODE,
62     MOS_CODEC_RESOURCE_USAGE_SURFACE_MV_DATA_ENCODE,
63     MOS_CODEC_RESOURCE_USAGE_SURFACE_HME_DOWNSAMPLED_ENCODE,
64     MOS_CODEC_RESOURCE_USAGE_SURFACE_HME_DOWNSAMPLED_ENCODE_FF,
65     MOS_CODEC_RESOURCE_USAGE_SURFACE_HME_DOWNSAMPLED_ENCODE_DST,
66     MOS_CODEC_RESOURCE_USAGE_SURFACE_ME_DISTORTION_ENCODE,
67     MOS_CODEC_RESOURCE_USAGE_SURFACE_BRC_ME_DISTORTION_ENCODE,
68     MOS_CODEC_RESOURCE_USAGE_PAK_OBJECT_ENCODE,
69     MOS_CODEC_RESOURCE_USAGE_SURFACE_FLATNESS_CHECK_ENCODE,
70     MOS_CODEC_RESOURCE_USAGE_SURFACE_MBENC_CURBE_ENCODE,
71     MOS_CODEC_RESOURCE_USAGE_SURFACE_MAD_ENCODE,
72     MOS_CODEC_RESOURCE_USAGE_VP8_BLOCK_MODE_COST_ENCODE,
73     MOS_CODEC_RESOURCE_USAGE_VP8_MB_MODE_COST_ENCODE,
74     MOS_CODEC_RESOURCE_USAGE_VP8_MBENC_OUTPUT_ENCODE,
75     MOS_CODEC_RESOURCE_USAGE_VP8_HISTOGRAM_ENCODE,
76     MOS_CODEC_RESOURCE_USAGE_VP8_L3_LLC_ENCODE,
77     MOS_CODEC_RESOURCE_USAGE_MFX_STANDALONE_DEBLOCKING_CODEC,
78     MOS_CODEC_RESOURCE_USAGE_HCP_MD_CODEC,
79     MOS_CODEC_RESOURCE_USAGE_HCP_SAO_CODEC,
80     MOS_CODEC_RESOURCE_USAGE_HCP_MV_CODEC,
81     MOS_CODEC_RESOURCE_USAGE_HCP_STATUS_ERROR_CODEC,
82     MOS_CODEC_RESOURCE_USAGE_HCP_LCU_ILDB_STREAMOUT_CODEC,
83     MOS_CODEC_RESOURCE_USAGE_VP9_PROBABILITY_BUFFER_CODEC,
84     MOS_CODEC_RESOURCE_USAGE_VP9_SEGMENT_ID_BUFFER_CODEC,
85     MOS_CODEC_RESOURCE_USAGE_VP9_HVD_ROWSTORE_BUFFER_CODEC,
86     MOS_CODEC_RESOURCE_USAGE_MBDISABLE_SKIPMAP_CODEC,
87     MOS_CODEC_RESOURCE_USAGE_VDENC_ROW_STORE_BUFFER_CODEC,
88     MOS_CODEC_RESOURCE_USAGE_VDENC_STREAMIN_CODEC,
89     MOS_CODEC_RESOURCE_USAGE_SURFACE_MB_QP_CODEC,
90     MOS_CODEC_RESOURCE_USAGE_MACROBLOCK_ILDB_STREAM_OUT_BUFFER_CODEC,
91     MOS_CODEC_RESOURCE_USAGE_SSE_SRC_PIXEL_ROW_STORE_BUFFER_CODEC,
92     MOS_CODEC_RESOURCE_USAGE_SLICE_STATE_STREAM_OUT_BUFFER_CODEC,
93     MOS_CODEC_RESOURCE_USAGE_CABAC_SYNTAX_STREAM_OUT_BUFFER_CODEC,
94     MOS_CODEC_RESOURCE_USAGE_PRED_COL_STORE_BUFFER_CODEC,
95     MOS_CODEC_RESOURCE_USAGE_SURFACE_PAK_IMAGESTATE_ENCODE,
96     MOS_CODEC_RESOURCE_USAGE_SURFACE_MBENC_BRC_ENCODE,
97     MOS_CODEC_RESOURCE_USAGE_SURFACE_MB_BRC_CONST_ENCODE,
98     MOS_CODEC_RESOURCE_USAGE_SURFACE_BRC_MB_QP_ENCODE,
99     MOS_CODEC_RESOURCE_USAGE_SURFACE_BRC_ROI_ENCODE,
100     MOS_CODEC_RESOURCE_USAGE_SURFACE_SLICE_MAP_ENCODE,
101     MOS_CODEC_RESOURCE_USAGE_SURFACE_WP_DOWNSAMPLED_ENCODE,
102     MOS_CODEC_RESOURCE_USAGE_SURFACE_VDENC_IMAGESTATE_ENCODE,
103     MOS_CODEC_RESOURCE_USAGE_SURFACE_UNCACHED,
104     MOS_CODEC_RESOURCE_USAGE_SURFACE_ELLC_ONLY,
105     MOS_CODEC_RESOURCE_USAGE_SURFACE_ELLC_LLC_ONLY,
106     MOS_CODEC_RESOURCE_USAGE_SURFACE_ELLC_LLC_L3,
107     MOS_CODEC_RESOURCE_USAGE_SURFACE_BRC_HISTORY_ENCODE,
108     MOS_CODEC_RESOURCE_USAGE_SURFACE_SOFTWARE_SCOREBOARD_ENCODE,
109     MOS_CODEC_RESOURCE_USAGE_SURFACE_ME_MV_DATA_ENCODE,
110     MOS_CODEC_RESOURCE_USAGE_SURFACE_MV_DISTORTION_ENCODE,
111     MOS_CODEC_RESOURCE_USAGE_SURFACE_4XME_DISTORTION_ENCODE,
112     MOS_CODEC_RESOURCE_USAGE_SURFACE_INTRA_DISTORTION_ENCODE,
113     MOS_CODEC_RESOURCE_USAGE_MB_STATS_ENCODE,
114     MOS_CODEC_RESOURCE_USAGE_SURFACE_PAK_STATS_ENCODE,
115     MOS_CODEC_RESOURCE_USAGE_SURFACE_PIC_STATE_READ_ENCODE,
116     MOS_CODEC_RESOURCE_USAGE_SURFACE_PIC_STATE_WRITE_ENCODE,
117     MOS_CODEC_RESOURCE_USAGE_SURFACE_COMBINED_ENC_ENCODE,
118     MOS_CODEC_RESOURCE_USAGE_SURFACE_BRC_CONSTANT_DATA_ENCODE,
119     MOS_CODEC_RESOURCE_USAGE_SURFACE_INTERMEDIATE_CU_RECORD_SURFACE_ENCODE,
120     MOS_CODEC_RESOURCE_USAGE_SURFACE_SCRATCH_ENCODE,
121     MOS_CODEC_RESOURCE_USAGE_SURFACE_LCU_LEVEL_DATA_ENCODE,
122     MOS_CODEC_RESOURCE_USAGE_SURFACE_ENC_HISTORY_INPUT_ENCODE,
123     MOS_CODEC_RESOURCE_USAGE_SURFACE_ENC_HISTORY_OUTPUT_ENCODE,
124     MOS_CODEC_RESOURCE_USAGE_SURFACE_DEBUG_ENCODE,
125     MOS_CODEC_RESOURCE_USAGE_SURFACE_ENC_CONSTANT_TABLE_ENCODE,
126     MOS_CODEC_RESOURCE_USAGE_SURFACE_ENC_CU_RECORD_ENCODE,
127     MOS_CODEC_RESOURCE_USAGE_SURFACE_ENC_MV_TEMPORAL_BUFFER_ENCODE,
128     MOS_CODEC_RESOURCE_USAGE_SURFACE_ENC_CU_PACKET_FOR_PAK_ENCODE,
129     MOS_CODEC_RESOURCE_USAGE_SURFACE_ENC_BCOMBINED1_ENCODE,
130     MOS_CODEC_RESOURCE_USAGE_SURFACE_ENC_BCOMBINED2_ENCODE,
131     MOS_CODEC_RESOURCE_USAGE_FRAME_STATS_STREAMOUT_DATA_CODEC,
132     MOS_CODEC_RESOURCE_USAGE_DEBLOCKINGFILTER_ROWSTORE_TILE_LINE_BUFFER_CODEC,
133     MOS_CODEC_RESOURCE_USAGE_DEBLOCKINGFILTER_ROWSTORE_TILE_COLUMN_BUFFER_CODEC,
134     MOS_CODEC_RESOURCE_USAGE_HCP_MD_TILE_LINE_CODEC,
135     MOS_CODEC_RESOURCE_USAGE_HCP_MD_TILE_COLUMN_CODEC,
136     MOS_CODEC_RESOURCE_USAGE_HCP_SAO_TILE_LINE_CODEC,
137     MOS_CODEC_RESOURCE_USAGE_HCP_SAO_TILE_COLUMN_CODEC,
138     MOS_CODEC_RESOURCE_USAGE_VP9_PROBABILITY_COUNTER_BUFFER_CODEC,
139     MOS_CODEC_RESOURCE_USAGE_HUC_VIRTUAL_ADDR_REGION_BUFFER_CODEC,
140     MOS_CODEC_RESOURCE_USAGE_SIZE_STREAMOUT_CODEC,
141     MOS_CODEC_RESOURCE_USAGE_COMPRESSED_HEADER_BUFFER_CODEC,
142     MOS_CODEC_RESOURCE_USAGE_PROBABILITY_DELTA_BUFFER_CODEC,
143     MOS_CODEC_RESOURCE_USAGE_TILE_RECORD_BUFFER_CODEC,
144     MOS_CODEC_RESOURCE_USAGE_TILE_SIZE_STAS_BUFFER_CODEC,
145     MOS_CODEC_RESOURCE_USAGE_END_CODEC,
146 
147     // CM USAGES
148     MOS_CM_RESOURCE_USAGE_SurfaceState,
149     MOS_CM_RESOURCE_USAGE_StateHeap,
150     MOS_CM_RESOURCE_USAGE_NO_L3_SurfaceState,
151     MOS_CM_RESOURCE_USAGE_NO_LLC_ELLC_SurfaceState,
152     MOS_CM_RESOURCE_USAGE_NO_LLC_SurfaceState,
153     MOS_CM_RESOURCE_USAGE_NO_ELLC_SurfaceState,
154     MOS_CM_RESOURCE_USAGE_NO_LLC_L3_SurfaceState,
155     MOS_CM_RESOURCE_USAGE_NO_ELLC_L3_SurfaceState,
156     MOS_CM_RESOURCE_USAGE_NO_CACHE_SurfaceState,
157     MOS_CM_RESOURCE_USAGE_L1_Enabled_SurfaceState,
158 
159     // MP USAGES
160     MOS_MP_RESOURCE_USAGE_BEGIN,
161     MOS_MP_RESOURCE_USAGE_DEFAULT,
162     MOS_MP_RESOURCE_USAGE_DEFAULT_FF,
163     MOS_MP_RESOURCE_USAGE_DEFAULT_RCS,
164     MOS_MP_RESOURCE_USAGE_SurfaceState,
165     MOS_MP_RESOURCE_USAGE_SurfaceState_FF,
166     MOS_MP_RESOURCE_USAGE_SurfaceState_RCS,
167     MOS_MP_RESOURCE_USAGE_AGE3_SurfaceState,
168     MOS_MP_RESOURCE_USAGE_EDRAM_SurfaceState,
169     MOS_MP_RESOURCE_USAGE_EDRAM_AGE3_SurfaceState,
170     MOS_MP_RESOURCE_USAGE_No_L3_SurfaceState,
171     MOS_MP_RESOURCE_USAGE_No_LLC_L3_SurfaceState,
172     MOS_MP_RESOURCE_USAGE_No_LLC_L3_AGE_SurfaceState,
173     MOS_MP_RESOURCE_USAGE_No_LLC_eLLC_L3_AGE_SurfaceState,
174     MOS_MP_RESOURCE_USAGE_PartialEnc_No_LLC_L3_AGE_SurfaceState,
175     MOS_MP_RESOURCE_USAGE_END,
176 
177     // MHW - SFC
178     MOS_MHW_RESOURCE_USAGE_Sfc_CurrentOutputSurface,                                //!< SFC Output Surface
179     MOS_MHW_RESOURCE_USAGE_Sfc_CurrentOutputSurface_PartialEncSurface,              //!< SFC Output Surface for partial secure surfaces
180     MOS_MHW_RESOURCE_USAGE_Sfc_AvsLineBufferSurface,                                //!< SFC AVS Line buffer Surface
181     MOS_MHW_RESOURCE_USAGE_Sfc_IefLineBufferSurface,                                //!< SFC IEF Line buffer Surface
182 
183     // Camera  caputure.
184     MOS_MHW_GMM_RESOURCE_USAGE_CAMERA_CAPTURE,
185 
186     // PAT Media Usages
187     MOS_HW_RESOURCE_USAGE_MEDIA_BATCH_BUFFERS,
188     // DECODE
189     MOS_HW_RESOURCE_USAGE_DECODE_INPUT_BITSTREAM,
190     MOS_HW_RESOURCE_USAGE_DECODE_INPUT_REFERENCE,
191     MOS_HW_RESOURCE_USAGE_DECODE_INTERNAL_READ,
192     MOS_HW_RESOURCE_USAGE_DECODE_INTERNAL_WRITE,
193     MOS_HW_RESOURCE_USAGE_DECODE_INTERNAL_READ_WRITE_CACHE,
194     MOS_HW_RESOURCE_USAGE_DECODE_INTERNAL_READ_WRITE_NOCACHE,
195     MOS_HW_RESOURCE_USAGE_DECODE_OUTPUT_PICTURE,
196     MOS_HW_RESOURCE_USAGE_DECODE_OUTPUT_STATISTICS_WRITE,
197     MOS_HW_RESOURCE_USAGE_DECODE_OUTPUT_STATISTICS_READ_WRITE,
198     // ENCODE
199     MOS_HW_RESOURCE_USAGE_ENCODE_INPUT_RAW,
200     MOS_HW_RESOURCE_USAGE_ENCODE_INPUT_RECON,
201     MOS_HW_RESOURCE_USAGE_ENCODE_INTERNAL_READ,
202     MOS_HW_RESOURCE_USAGE_ENCODE_INTERNAL_WRITE,
203     MOS_HW_RESOURCE_USAGE_ENCODE_INTERNAL_READ_WRITE_CACHE,
204     MOS_HW_RESOURCE_USAGE_ENCODE_INTERNAL_READ_WRITE_NOCACHE,
205     MOS_HW_RESOURCE_USAGE_ENCODE_EXTERNAL_READ,
206     MOS_HW_RESOURCE_USAGE_ENCODE_OUTPUT_PICTURE,
207     MOS_HW_RESOURCE_USAGE_ENCODE_OUTPUT_BITSTREAM,
208     MOS_HW_RESOURCE_USAGE_ENCODE_OUTPUT_STATISTICS_WRITE,
209     MOS_HW_RESOURCE_USAGE_ENCODE_OUTPUT_STATISTICS_READ_WRITE,
210     // VP
211     MOS_HW_RESOURCE_USAGE_VP_INPUT_PICTURE_FF,
212     MOS_HW_RESOURCE_USAGE_VP_INPUT_REFERENCE_FF,
213     MOS_HW_RESOURCE_USAGE_VP_INTERNAL_READ_FF,
214     MOS_HW_RESOURCE_USAGE_VP_INTERNAL_WRITE_FF,
215     MOS_HW_RESOURCE_USAGE_VP_INTERNAL_READ_WRITE_FF,
216     MOS_HW_RESOURCE_USAGE_VP_OUTPUT_PICTURE_FF,
217     MOS_HW_RESOURCE_USAGE_VP_INPUT_PICTURE_RENDER,
218     MOS_HW_RESOURCE_USAGE_VP_INPUT_REFERENCE_RENDER,
219     MOS_HW_RESOURCE_USAGE_VP_INTERNAL_READ_RENDER,
220     MOS_HW_RESOURCE_USAGE_VP_INTERNAL_WRITE_RENDER,
221     MOS_HW_RESOURCE_USAGE_VP_INTERNAL_READ_WRITE_RENDER,
222     MOS_HW_RESOURCE_USAGE_VP_OUTPUT_PICTURE_RENDER,
223     // CP
224     MOS_HW_RESOURCE_USAGE_CP_EXTERNAL_READ,
225     MOS_HW_RESOURCE_USAGE_CP_INTERNAL_WRITE,
226     // PAT Media Usages END
227 
228     // always last one
229     MOS_HW_RESOURCE_DEF_MAX
230 } MOS_HW_RESOURCE_DEF;
231 C_ASSERT(MOS_HW_RESOURCE_DEF_MAX == 171); //!< update this and Mos_CachePolicyGetMemoryObject_XXX()
232 
233 //!
234 //! \brief Enum allow callers to specify a command streamer.
235 //!
236 typedef enum MOS_HW_COMMAND_STREAMER_ENUM
237 {
238     MOS_HW_COMMAND_STREAMER_NULL = 0,   //!< This stays zero.
239     MOS_CS,                             //!< Render Command Streamer
240     MOS_BCS,                            //!< Blitter (BLT) Command Streamer
241     MOS_VCS,                            //!< Video Codec (MFX) Command Streamer
242     MOS_VECS,                           //!< Video Enhancement (VEBOX) Command Streamer
243     MOS_HW_COMMAND_STREAMERS            //!< This stays last.
244 } MOS_HW_COMMAND_STREAMER;
245 C_ASSERT(MOS_HW_COMMAND_STREAMERS == 5);//!< update this and Mos_GetUseGlobalGtt_XXX()
246 
247 //!
248 //! \brief Enum to allow callers to specify a HW command.
249 //!        Currently only used with GmmGetUseGlobalGtt--with the
250 //!        commands that have a PPGTT/GTT space select field.
251 //!
252 typedef enum MOS_HW_COMMAND_ENUM
253 {
254     MOS_HW_COMMAND_NULL = 0, //!<-- This stays zero.
255     MOS_MI_BATCH_BUFFER_START,
256     MOS_MI_CLFLUSH,
257     MOS_MI_CONDITIONAL_BATCH_BUFFER_END,
258     MOS_MI_COPY_MEM_MEM,
259     MOS_MI_FLUSH_DW,
260     MOS_MI_LOAD_REGISTER_MEM,
261     MOS_MI_REPORT_PERF_COUNT,
262     MOS_MI_SEMAPHORE_MBOX,
263     MOS_MI_SEMAPHORE_SIGNAL,
264     MOS_MI_SEMAPHORE_WAIT,
265     MOS_MI_STORE_DATA_IMM,
266     MOS_MI_STORE_DATA_INDEX,
267     MOS_MI_STORE_REGISTER_MEM,
268     MOS_MI_UPDATE_GTT,
269     MOS_PIPE_CONTROL,
270     MOS_HW_COMMANDS, //!<-- This stays last.
271 
272     // Those commands below are not included in GMM
273     MOS_MI_BATCH_BUFFER_START_RCS,
274     MOS_MFX_PIPE_BUF_ADDR,
275     MOS_MFX_INDIRECT_OBJ_BASE_ADDR,
276     MOS_MFX_BSP_BUF_BASE_ADDR,
277     MOS_MFX_AVC_DIRECT_MODE,
278     MOS_MFX_VC1_DIRECT_MODE,
279     MOS_MFX_VP8_PIC,
280     MOS_MFX_DBK_OBJECT,
281     MOS_HUC_DMEM,
282     MOS_HUC_VIRTUAL_ADDR,
283     MOS_HUC_IND_OBJ_BASE_ADDR,
284     MOS_VDENC_PIPE_BUF_ADDR,
285     MOS_SURFACE_STATE,
286     MOS_SURFACE_STATE_ADV,
287     MOS_STATE_BASE_ADDR,
288     MOS_VEBOX_STATE,
289     MOS_VEBOX_DI_IECP,
290     MOS_VEBOX_TILING_CONVERT,
291     MOS_SFC_STATE,
292     MOS_MI_ATOMIC,
293     MOS_MFX_CC_BASE_ADDR_STATE,
294     MOS_VEBOX_SURFACE_STATE,
295     MOS_HW_COMMAND_MAX
296 } MOS_HW_COMMAND;
297 C_ASSERT(MOS_HW_COMMANDS == 16); //!< update this and Mos_GetUseGlobalGtt_XXX()
298 
299 #endif // __MOS_OS_HW_H__
300