xref: /aosp_15_r20/external/intel-media-driver/media_driver/agnostic/gen12/hw/mhw_mi_hwcmd_g12_X.cpp (revision ba62d9d3abf0e404f2022b4cd7a85e107f48596f)
1 /*
2 * Copyright (c) 2015-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 #include "mhw_mi_hwcmd_g12_X.h"
24 #include "mos_utilities.h"
25 
MI_BATCH_BUFFER_END_CMD()26 mhw_mi_g12_X::MI_BATCH_BUFFER_END_CMD::MI_BATCH_BUFFER_END_CMD()
27 {
28     DW0.Value                                        = 0;
29     DW0.MiCommandOpcode                              = MI_COMMAND_OPCODE_MIBATCHBUFFEREND;
30     DW0.CommandType                                  = COMMAND_TYPE_MICOMMAND;
31 
32 }
33 
MI_NOOP_CMD()34 mhw_mi_g12_X::MI_NOOP_CMD::MI_NOOP_CMD()
35 {
36     DW0.Value                                        = 0;
37     DW0.IdentificationNumberRegisterWriteEnable      = 0;
38     DW0.MiCommandOpcode                              = MI_COMMAND_OPCODE_MINOOP;
39     DW0.CommandType                                  = COMMAND_TYPE_MICOMMAND;
40 
41 }
42 
MI_ARB_CHECK_CMD()43 mhw_mi_g12_X::MI_ARB_CHECK_CMD::MI_ARB_CHECK_CMD()
44 {
45     DW0.Value                                        = 0;
46     DW0.PreFetchDisable                              = PRE_FETCH_DISABLE_UNNAMED0;
47     DW0.MiCommandOpcode                              = MI_COMMAND_OPCODE_MIARBCHECK;
48     DW0.CommandType                                  = COMMAND_TYPE_MICOMMAND;
49 
50 }
51 
MI_LOAD_REGISTER_IMM_CMD()52 mhw_mi_g12_X::MI_LOAD_REGISTER_IMM_CMD::MI_LOAD_REGISTER_IMM_CMD()
53 {
54     DW0.Value                                        = 0;
55     DW0.DwordLength                                  = GetOpLength(dwSize);
56     DW0.MmioRemapEnable                              = MMIO_REMAP_ENABLE_UNNAMED0;
57     DW0.AddCsMmioStartOffset                         = ADD_CS_MMIO_START_OFFSET_UNNAMED0;
58     DW0.MiCommandOpcode                              = MI_COMMAND_OPCODE_MILOADREGISTERIMM;
59     DW0.CommandType                                  = COMMAND_TYPE_MICOMMAND;
60 
61     DW1.Value                                        = 0;
62 
63     DW2.Value                                        = 0;
64 
65 }
66 
MI_LOAD_REGISTER_MEM_CMD()67 mhw_mi_g12_X::MI_LOAD_REGISTER_MEM_CMD::MI_LOAD_REGISTER_MEM_CMD()
68 {
69     DW0.Value                                        = 0;
70     DW0.DwordLength                                  = GetOpLength(dwSize);
71     DW0.MemoryObjectControlStateEnable               = MEMORY_OBJECT_CONTROL_STATE_ENABLE_USEDEFAULT;
72     DW0.MmioRemapEnable                              = MMIO_REMAP_ENABLE_UNNAMED0;
73     DW0.AddCsMmioStartOffset                         = ADD_CS_MMIO_START_OFFSET_UNNAMED0;
74     DW0.MiCommandOpcode                              = MI_COMMAND_OPCODE_MILOADREGISTERMEM;
75     DW0.CommandType                                  = COMMAND_TYPE_MICOMMAND;
76 
77     DW1.Value                                        = 0;
78 
79     DW2_3.Value[0] = DW2_3.Value[1]                  = 0;
80 
81 }
82 
MI_LOAD_REGISTER_REG_CMD()83 mhw_mi_g12_X::MI_LOAD_REGISTER_REG_CMD::MI_LOAD_REGISTER_REG_CMD()
84 {
85     DW0.Value                                        = 0;
86     DW0.DwordLength                                  = GetOpLength(dwSize);
87     DW0.MmioRemapEnableSource                        = MMIO_REMAP_ENABLE_SOURCE_UNNAMED0;
88     DW0.MmioRemapEnableDestination                   = MMIO_REMAP_ENABLE_DESTINATION_UNNAMED0;
89     DW0.AddCsMmioStartOffsetSource                   = ADD_CS_MMIO_START_OFFSET_SOURCE_UNNAMED0;
90     DW0.AddCsMmioStartOffsetDestination              = ADD_CS_MMIO_START_OFFSET_DESTINATION_UNNAMED0;
91     DW0.MiCommandOpcode                              = MI_COMMAND_OPCODE_MILOADREGISTERREG;
92     DW0.CommandType                                  = COMMAND_TYPE_MICOMMAND;
93 
94     DW1.Value                                        = 0;
95 
96     DW2.Value                                        = 0;
97 
98 }
99 
MI_STORE_REGISTER_MEM_CMD()100 mhw_mi_g12_X::MI_STORE_REGISTER_MEM_CMD::MI_STORE_REGISTER_MEM_CMD()
101 {
102     DW0.Value                                        = 0;
103     DW0.DwordLength                                  = GetOpLength(dwSize);
104     DW0.MiCommandOpcode                              = MI_COMMAND_OPCODE_MISTOREREGISTERMEM;
105     DW0.CommandType                                  = COMMAND_TYPE_MICOMMAND;
106 
107     DW1.Value                                        = 0;
108 
109     DW2_3.Value[0] = DW2_3.Value[1]                  = 0;
110 
111 
112 }
113 
MI_BATCH_BUFFER_START_CMD()114 mhw_mi_g12_X::MI_BATCH_BUFFER_START_CMD::MI_BATCH_BUFFER_START_CMD()
115 {
116     DW0.Value                                        = 0;
117     DW0.Obj0.DwordLength                             = GetOpLength(dwSize);
118     DW0.Obj0.AddressSpaceIndicator                   = ADDRESS_SPACE_INDICATOR_GGTT;
119     DW0.Obj1.EnableCommandCache                      = ENABLE_COMMAND_CACHE_UNNAMED0;
120     DW0.Obj1.PoshEnable                              = POSH_ENABLE_UNNAMED0;
121     DW0.Obj1.PoshStart                               = POSH_START_UNNAMED0;
122     DW0.Obj1.MiCommandOpcode                         = MI_COMMAND_OPCODE_MIBATCHBUFFERSTART;
123     DW0.Obj1.CommandType                             = COMMAND_TYPE_MICOMMAND;
124     DW0.Obj2.NestedLevelBatchBuffer                  = NESTED_LEVEL_BATCH_BUFFER_CHAIN;
125     DW0.Obj3.SecondLevelBatchBuffer                  = SECOND_LEVEL_BATCH_BUFFER_FIRSTLEVELBATCH;
126 
127     DW1_2.Value[0] = DW1_2.Value[1]                  = 0;
128 
129 }
130 
MI_SET_PREDICATE_CMD()131 mhw_mi_g12_X::MI_SET_PREDICATE_CMD::MI_SET_PREDICATE_CMD()
132 {
133     DW0.Value                                        = 0;
134     DW0.PredicateEnable                              = PREDICATE_ENABLE_PREDICATEDISABLE;
135     DW0.MiCommandOpcode                              = MI_COMMAND_OPCODE_MISETPREDICATE;
136     DW0.CommandType                                  = COMMAND_TYPE_MICOMMAND;
137 
138 }
139 
MI_COPY_MEM_MEM_CMD()140 mhw_mi_g12_X::MI_COPY_MEM_MEM_CMD::MI_COPY_MEM_MEM_CMD()
141 {
142     DW0.Value                                        = 0;
143     DW0.DwordLength                                  = GetOpLength(dwSize);
144     DW0.MemoryObjectControlStateEnable               = MEMORY_OBJECT_CONTROL_STATE_ENABLE_USEDEFAULT;
145     DW0.UseGlobalGttDestination                      = USE_GLOBAL_GTT_DESTINATION_PERPROCESSGRAPHICSADDRESS;
146     DW0.UseGlobalGttSource                           = USE_GLOBAL_GTT_SOURCE_PERPROCESSGRAPHICSADDRESS;
147     DW0.MiCommandOpcode                              = MI_COMMAND_OPCODE_MICOPYMEMTOMEM;
148     DW0.CommandType                                  = COMMAND_TYPE_MICOMMAND;
149 
150     DW1_2.Value[0] = DW1_2.Value[1]                  = 0;
151 
152     DW3_4.Value[0] = DW3_4.Value[1]                  = 0;
153 
154 }
155 
MI_STORE_DATA_IMM_CMD()156 mhw_mi_g12_X::MI_STORE_DATA_IMM_CMD::MI_STORE_DATA_IMM_CMD()
157 {
158     DW0.Value                                        = 0;
159     DW0.DwordLength                                  = GetOpLength(dwSize);
160     DW0.MemoryObjectControlStateEnable               = MEMORY_OBJECT_CONTROL_STATE_ENABLE_USEDEFAULT;
161     DW0.MiCommandOpcode                              = MI_COMMAND_OPCODE_MISTOREDATAIMM;
162     DW0.CommandType                                  = COMMAND_TYPE_MICOMMAND;
163 
164     DW1_2.Value[0] = DW1_2.Value[1]                  = 0;
165 
166     DW3.Value                                        = 0;
167 
168     DW4.Value                                        = 0;
169 
170 }
171 
MI_SEMAPHORE_SIGNAL_CMD()172 mhw_mi_g12_X::MI_SEMAPHORE_SIGNAL_CMD::MI_SEMAPHORE_SIGNAL_CMD()
173 {
174     DW0.Value                                        = 0;
175     DW0.DwordLength                                  = GetOpLength(dwSize);
176     DW0.PostSyncOperation                            = POST_SYNC_OPERATION_NOPOSTSYNCOPERATION;
177     DW0.MiCommandOpcode                              = MI_COMMAND_OPCODE_MISEMAPHORESIGNAL;
178     DW0.CommandType                                  = COMMAND_TYPE_MICOMMAND;
179 
180     DW1.Value                                        = 0;
181 
182 }
183 
MI_SEMAPHORE_WAIT_CMD()184 mhw_mi_g12_X::MI_SEMAPHORE_WAIT_CMD::MI_SEMAPHORE_WAIT_CMD()
185 {
186     DW0.Value                                        = 0;
187     DW0.DwordLength                                  = GetOpLength(dwSize);
188     DW0.CompareOperation                             = COMPARE_OPERATION_SADGREATERTHANSDD;
189     DW0.WaitMode                                     = WAIT_MODE_SIGNALMODE;
190     DW0.RegisterPollMode                             = REGISTER_POLL_MODE_REGISTERPOLL;
191     DW0.MemoryType                                   = MEMORY_TYPE_PERPROCESSGRAPHICSADDRESS;
192     DW0.MiCommandOpcode                              = MI_COMMAND_OPCODE_MISEMAPHOREWAIT;
193     DW0.CommandType                                  = COMMAND_TYPE_MICOMMAND;
194 
195     DW1.Value                                        = 0;
196 
197     DW2_3.Value[0] = DW2_3.Value[1]                  = 0;
198 
199     DW4.Value                                        = 0;
200 
201 }
202 
MI_CONDITIONAL_BATCH_BUFFER_END_CMD()203 mhw_mi_g12_X::MI_CONDITIONAL_BATCH_BUFFER_END_CMD::MI_CONDITIONAL_BATCH_BUFFER_END_CMD()
204 {
205     DW0.Value                                        = 0;
206     DW0.DwordLength                                  = GetOpLength(dwSize);
207     DW0.CompareOperation                             = COMPARE_OPERATION_MADGREATERTHANIDD;
208     DW0.EndCurrentBatchBufferLevel                   = END_CURRENT_BATCH_BUFFER_LEVEL_UNNAMED0;
209     DW0.CompareMaskMode                              = COMPARE_MASK_MODE_COMPAREMASKMODEDISABLED;
210     DW0.CompareSemaphore                             = COMPARE_SEMAPHORE_UNNAMED0;
211     DW0.UseGlobalGtt                                 = USE_GLOBAL_GTT_UNNAMED0;
212     DW0.MiCommandOpcode                              = MI_COMMAND_OPCODE_MICONDITIONALBATCHBUFFEREND;
213     DW0.CommandType                                  = COMMAND_TYPE_MICOMMAND;
214 
215     DW1.Value                                        = 0;
216 
217     DW2_3.Value[0] = DW2_3.Value[1]                  = 0;
218 
219 }
220 
MI_ATOMIC_CMD()221 mhw_mi_g12_X::MI_ATOMIC_CMD::MI_ATOMIC_CMD()
222 {
223     DW0.Value                                        = 0;
224     DW0.DwordLength                                  = GetOpLength(dwSize);
225     DW0.DataSize                                     = DATA_SIZE_DWORD;
226     DW0.PostSyncOperation                            = POST_SYNC_OPERATION_NOPOSTSYNCOPERATION;
227     DW0.MemoryType                                   = MEMORY_TYPE_PERPROCESSGRAPHICSADDRESS;
228     DW0.MiCommandOpcode                              = MI_COMMAND_OPCODE_MIATOMIC;
229     DW0.CommandType                                  = COMMAND_TYPE_MICOMMAND;
230 
231     DW1.Value                                        = 0;
232 
233     DW2.Value                                        = 0;
234 
235     DW3.Value                                        = 0;
236 
237     DW4.Value                                        = 0;
238 
239     DW5.Value                                        = 0;
240 
241     DW6.Value                                        = 0;
242 
243     DW7.Value                                        = 0;
244 
245     DW8.Value                                        = 0;
246 
247     DW9.Value                                        = 0;
248 
249     DW10.Value                                       = 0;
250 
251 }
252 
MI_MATH_CMD()253 mhw_mi_g12_X::MI_MATH_CMD::MI_MATH_CMD()
254 {
255     DW0.Value                                        = 0;
256     DW0.DwordLength                                  = GetOpLength(dwSize);
257     DW0.MiCommandOpcode                              = MI_COMMAND_OPCODE_MIMATH;
258     DW0.CommandType                                  = COMMAND_TYPE_MICOMMAND;
259 
260 }
261 
MI_FLUSH_DW_CMD()262 mhw_mi_g12_X::MI_FLUSH_DW_CMD::MI_FLUSH_DW_CMD()
263 {
264     DW0.Value                                        = 0;
265     DW0.DwordLength                                  = GetOpLength(dwSize);
266     DW0.PostSyncOperation                            = POST_SYNC_OPERATION_NOWRITE;
267     DW0.MiCommandOpcode                              = MI_COMMAND_OPCODE_MIFLUSHDW;
268     DW0.CommandType                                  = COMMAND_TYPE_MICOMMAND;
269 
270     DW1_2.Value[0] = DW1_2.Value[1]                  = 0;
271     DW1_2.DestinationAddressType                     = DESTINATION_ADDRESS_TYPE_PPGTT;
272 
273     DW3_4.Value[0] = DW3_4.Value[1]                  = 0;
274 
275 }
276 
MI_FORCE_WAKEUP_CMD()277 mhw_mi_g12_X::MI_FORCE_WAKEUP_CMD::MI_FORCE_WAKEUP_CMD()
278 {
279     DW0.Value                                        = 0;
280     DW0.DwordLength                                  = GetOpLength(dwSize);
281     DW0.MiCommandOpcode                              = MI_COMMAND_OPCODE_MIFORCEWAKEUP;
282     DW0.CommandType                                  = COMMAND_TYPE_MICOMMAND;
283 
284     DW1.Value                                        = 0;
285     DW1.HevcPowerWellControl                         = HEVC_POWER_WELL_CONTROL_DISABLEPOWERWELL;
286     DW1.MfxPowerWellControl                          = MFX_POWER_WELL_CONTROL_DISABLEPOWERWELL;
287 
288 }
289 
PIPE_CONTROL_CMD()290 mhw_mi_g12_X::PIPE_CONTROL_CMD::PIPE_CONTROL_CMD()
291 {
292     DW0.Value                                        = 0;
293     DW0.DwordLength                                  = GetOpLength(dwSize);
294     DW0.PostSyncOperationL3CacheabilityControl       = POST_SYNC_OPERATION_L3_CACHEABILITY_CONTROL_DEFAULTMOCS;
295     DW0.Command3DSubOpcode                           = _3D_COMMAND_SUB_OPCODE_PIPECONTROL;
296     DW0.Command3DOpcode                              = _3D_COMMAND_OPCODE_PIPECONTROL;
297     DW0.CommandSubtype                               = COMMAND_SUBTYPE_GFXPIPE3D;
298     DW0.CommandType                                  = COMMAND_TYPE_GFXPIPE;
299 
300     DW1.Value                                        = 0;
301     DW1.DepthCacheFlushEnable                        = DEPTH_CACHE_FLUSH_ENABLE_FLUSHDISABLED;
302     DW1.StallAtPixelScoreboard                       = STALL_AT_PIXEL_SCOREBOARD_DISABLE;
303     DW1.RenderTargetCacheFlushEnable                 = RENDER_TARGET_CACHE_FLUSH_ENABLE_DISABLEFLUSH;
304     DW1.DepthStallEnable                             = DEPTH_STALL_ENABLE_DISABLE;
305     DW1.PostSyncOperation                            = POST_SYNC_OPERATION_NOWRITE;
306     DW1.GlobalSnapshotCountReset                     = GLOBAL_SNAPSHOT_COUNT_RESET_DONTRESET;
307     DW1.LriPostSyncOperation                         = LRI_POST_SYNC_OPERATION_NOLRIOPERATION;
308     DW1.DestinationAddressType                       = DESTINATION_ADDRESS_TYPE_PPGTT;
309     DW1.TileCacheFlushEnable                         = TILE_CACHE_FLUSH_ENABLE_UNNAMED0;
310 
311     DW2.Value                                        = 0;
312 
313     DW3.Value                                        = 0;
314 
315     DW4_5.Value[0] = DW4_5.Value[1]                  = 0;
316 
317 }
318 
MFX_WAIT_CMD()319 mhw_mi_g12_X::MFX_WAIT_CMD::MFX_WAIT_CMD()
320 {
321     DW0.Value                                        = 0;
322     DW0.DwordLength                                  = GetOpLength(dwSize);
323     DW0.SubOpcode                                    = SUB_OPCODE_MFXWAIT;
324     DW0.CommandSubtype                               = COMMAND_SUBTYPE_MFXSINGLEDW;
325     DW0.CommandType                                  = COMMAND_TYPE_PARALLELVIDEOPIPE;
326 
327 }
328 
MEDIA_STATE_FLUSH_CMD()329 mhw_mi_g12_X::MEDIA_STATE_FLUSH_CMD::MEDIA_STATE_FLUSH_CMD()
330 {
331     DW0.Value                                        = 0;
332     DW0.DwordLength                                  = GetOpLength(dwSize);
333     DW0.Subopcode                                    = SUBOPCODE_MEDIASTATEFLUSHSUBOP;
334     DW0.MediaCommandOpcode                           = MEDIA_COMMAND_OPCODE_MEDIASTATEFLUSH;
335     DW0.Pipeline                                     = PIPELINE_MEDIA;
336     DW0.CommandType                                  = COMMAND_TYPE_GFXPIPE;
337 
338     DW1.Value                                        = 0;
339 
340 }
341 
VD_CONTROL_STATE_CMD()342 mhw_mi_g12_X::VD_CONTROL_STATE_CMD::VD_CONTROL_STATE_CMD()
343 {
344     DW0.Value                                        = 0;
345     DW0.DwordLength                                  = GetOpLength(dwSize);
346     DW0.MediaInstructionCommand                      = 0;
347     DW0.MediaInstructionOpcode                       = 0;
348     DW0.PipelineType                                 = PIPELINE_TYPE_UNNAMED2;
349     DW0.CommandType                                  = COMMAND_TYPE_PARALLELVIDEOPIPE;
350 
351     DW1.Value                                        = 0;
352 
353     DW2.Value                                        = 0;
354 
355 }
356