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