Linux Audio

Check our new training course

Loading...
v5.9
 
  1/*
  2 * Copyright 2014 Advanced Micro Devices, Inc.
  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 in
 12 * all copies or substantial portions of the Software.
 13 *
 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 17 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) 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
 24#ifndef F32_MES_PM4_PACKETS_H
 25#define F32_MES_PM4_PACKETS_H
 26
 27#ifndef PM4_MES_HEADER_DEFINED
 28#define PM4_MES_HEADER_DEFINED
 29union PM4_MES_TYPE_3_HEADER {
 30	struct {
 31		uint32_t reserved1 : 8; /* < reserved */
 32		uint32_t opcode    : 8; /* < IT opcode */
 33		uint32_t count     : 14;/* < Number of DWORDS - 1 in the
 34					 *   information body
 35					 */
 36		uint32_t type      : 2; /* < packet identifier
 37					 *   It should be 3 for type 3 packets
 38					 */
 39	};
 40	uint32_t u32All;
 41};
 42#endif /* PM4_MES_HEADER_DEFINED */
 43
 44/*--------------------MES_SET_RESOURCES--------------------*/
 45
 46#ifndef PM4_MES_SET_RESOURCES_DEFINED
 47#define PM4_MES_SET_RESOURCES_DEFINED
 48enum mes_set_resources_queue_type_enum {
 49	queue_type__mes_set_resources__kernel_interface_queue_kiq = 0,
 50	queue_type__mes_set_resources__hsa_interface_queue_hiq = 1,
 51	queue_type__mes_set_resources__hsa_debug_interface_queue = 4
 52};
 53
 54
 55struct pm4_mes_set_resources {
 56	union {
 57		union PM4_MES_TYPE_3_HEADER	header;		/* header */
 58		uint32_t			ordinal1;
 59	};
 60
 61	union {
 62		struct {
 63			uint32_t vmid_mask:16;
 64			uint32_t unmap_latency:8;
 65			uint32_t reserved1:5;
 66			enum mes_set_resources_queue_type_enum queue_type:3;
 67		} bitfields2;
 68		uint32_t ordinal2;
 69	};
 70
 71	uint32_t queue_mask_lo;
 72	uint32_t queue_mask_hi;
 73	uint32_t gws_mask_lo;
 74	uint32_t gws_mask_hi;
 75
 76	union {
 77		struct {
 78			uint32_t oac_mask:16;
 79			uint32_t reserved2:16;
 80		} bitfields7;
 81		uint32_t ordinal7;
 82	};
 83
 84	union {
 85		struct {
 86		uint32_t gds_heap_base:6;
 87		uint32_t reserved3:5;
 88		uint32_t gds_heap_size:6;
 89		uint32_t reserved4:15;
 90		} bitfields8;
 91		uint32_t ordinal8;
 92	};
 93
 94};
 95#endif
 96
 97/*--------------------MES_RUN_LIST--------------------*/
 98
 99#ifndef PM4_MES_RUN_LIST_DEFINED
100#define PM4_MES_RUN_LIST_DEFINED
101
102struct pm4_mes_runlist {
103	union {
104	    union PM4_MES_TYPE_3_HEADER   header;            /* header */
105	    uint32_t            ordinal1;
106	};
107
108	union {
109		struct {
110			uint32_t reserved1:2;
111			uint32_t ib_base_lo:30;
112		} bitfields2;
113		uint32_t ordinal2;
114	};
115
116	union {
117		struct {
118			uint32_t ib_base_hi:16;
119			uint32_t reserved2:16;
120		} bitfields3;
121		uint32_t ordinal3;
122	};
123
124	union {
125		struct {
126			uint32_t ib_size:20;
127			uint32_t chain:1;
128			uint32_t offload_polling:1;
129			uint32_t reserved2:1;
130			uint32_t valid:1;
131			uint32_t process_cnt:4;
132			uint32_t reserved3:4;
133		} bitfields4;
134		uint32_t ordinal4;
135	};
136
137};
138#endif
139
140/*--------------------MES_MAP_PROCESS--------------------*/
141
142#ifndef PM4_MES_MAP_PROCESS_DEFINED
143#define PM4_MES_MAP_PROCESS_DEFINED
144
145struct pm4_mes_map_process {
146	union {
147		union PM4_MES_TYPE_3_HEADER header;	/* header */
148		uint32_t ordinal1;
149	};
150
151	union {
152		struct {
153			uint32_t pasid:16;
154			uint32_t reserved1:8;
155			uint32_t diq_enable:1;
156			uint32_t process_quantum:7;
157		} bitfields2;
158		uint32_t ordinal2;
159	};
160
161	union {
162		struct {
163			uint32_t page_table_base:28;
164			uint32_t reserved3:4;
165		} bitfields3;
166		uint32_t ordinal3;
167	};
168
169	uint32_t reserved;
170
171	uint32_t sh_mem_bases;
172	uint32_t sh_mem_config;
173	uint32_t sh_mem_ape1_base;
174	uint32_t sh_mem_ape1_limit;
175
176	uint32_t sh_hidden_private_base_vmid;
177
178	uint32_t reserved2;
179	uint32_t reserved3;
180
181	uint32_t gds_addr_lo;
182	uint32_t gds_addr_hi;
183
184	union {
185		struct {
186			uint32_t num_gws:6;
187			uint32_t reserved4:2;
188			uint32_t num_oac:4;
189			uint32_t reserved5:4;
190			uint32_t gds_size:6;
191			uint32_t num_queues:10;
192		} bitfields10;
193		uint32_t ordinal10;
194	};
195
196	uint32_t completion_signal_lo;
197	uint32_t completion_signal_hi;
198
199};
200
201#endif
202
203/*--------------------MES_MAP_QUEUES--------------------*/
204
205#ifndef PM4_MES_MAP_QUEUES_VI_DEFINED
206#define PM4_MES_MAP_QUEUES_VI_DEFINED
207enum mes_map_queues_queue_sel_vi_enum {
208	queue_sel__mes_map_queues__map_to_specified_queue_slots_vi = 0,
209queue_sel__mes_map_queues__map_to_hws_determined_queue_slots_vi = 1
210};
211
212enum mes_map_queues_queue_type_vi_enum {
213	queue_type__mes_map_queues__normal_compute_vi = 0,
214	queue_type__mes_map_queues__debug_interface_queue_vi = 1,
215	queue_type__mes_map_queues__normal_latency_static_queue_vi = 2,
216queue_type__mes_map_queues__low_latency_static_queue_vi = 3
217};
218
219enum mes_map_queues_engine_sel_vi_enum {
220	engine_sel__mes_map_queues__compute_vi = 0,
221	engine_sel__mes_map_queues__sdma0_vi = 2,
222	engine_sel__mes_map_queues__sdma1_vi = 3
223};
224
225
226struct pm4_mes_map_queues {
227	union {
228		union PM4_MES_TYPE_3_HEADER   header;            /* header */
229		uint32_t            ordinal1;
230	};
231
232	union {
233		struct {
234			uint32_t reserved1:4;
235			enum mes_map_queues_queue_sel_vi_enum queue_sel:2;
236			uint32_t reserved2:15;
237			enum mes_map_queues_queue_type_vi_enum queue_type:3;
238			uint32_t reserved3:2;
239			enum mes_map_queues_engine_sel_vi_enum engine_sel:3;
240			uint32_t num_queues:3;
241		} bitfields2;
242		uint32_t ordinal2;
243	};
244
245	union {
246		struct {
247			uint32_t reserved3:1;
248			uint32_t check_disable:1;
249			uint32_t doorbell_offset:21;
250			uint32_t reserved4:3;
251			uint32_t queue:6;
252		} bitfields3;
253		uint32_t ordinal3;
254	};
255
256	uint32_t mqd_addr_lo;
257	uint32_t mqd_addr_hi;
258	uint32_t wptr_addr_lo;
259	uint32_t wptr_addr_hi;
260};
261#endif
262
263/*--------------------MES_QUERY_STATUS--------------------*/
264
265#ifndef PM4_MES_QUERY_STATUS_DEFINED
266#define PM4_MES_QUERY_STATUS_DEFINED
267enum mes_query_status_interrupt_sel_enum {
268	interrupt_sel__mes_query_status__completion_status = 0,
269	interrupt_sel__mes_query_status__process_status = 1,
270	interrupt_sel__mes_query_status__queue_status = 2
271};
272
273enum mes_query_status_command_enum {
274	command__mes_query_status__interrupt_only = 0,
275	command__mes_query_status__fence_only_immediate = 1,
276	command__mes_query_status__fence_only_after_write_ack = 2,
277	command__mes_query_status__fence_wait_for_write_ack_send_interrupt = 3
278};
279
280enum mes_query_status_engine_sel_enum {
281	engine_sel__mes_query_status__compute = 0,
282	engine_sel__mes_query_status__sdma0_queue = 2,
283	engine_sel__mes_query_status__sdma1_queue = 3
284};
285
286struct pm4_mes_query_status {
287	union {
288		union PM4_MES_TYPE_3_HEADER   header;            /* header */
289		uint32_t            ordinal1;
290	};
291
292	union {
293		struct {
294			uint32_t context_id:28;
295			enum mes_query_status_interrupt_sel_enum
296				interrupt_sel:2;
297			enum mes_query_status_command_enum command:2;
298		} bitfields2;
299		uint32_t ordinal2;
300	};
301
302	union {
303		struct {
304			uint32_t pasid:16;
305			uint32_t reserved1:16;
306		} bitfields3a;
307		struct {
308			uint32_t reserved2:2;
309			uint32_t doorbell_offset:21;
310			uint32_t reserved3:2;
311			enum mes_query_status_engine_sel_enum engine_sel:3;
312			uint32_t reserved4:4;
313		} bitfields3b;
314		uint32_t ordinal3;
315	};
316
317	uint32_t addr_lo;
318	uint32_t addr_hi;
319	uint32_t data_lo;
320	uint32_t data_hi;
321};
322#endif
323
324/*--------------------MES_UNMAP_QUEUES--------------------*/
325
326#ifndef PM4_MES_UNMAP_QUEUES_DEFINED
327#define PM4_MES_UNMAP_QUEUES_DEFINED
328enum mes_unmap_queues_action_enum {
329	action__mes_unmap_queues__preempt_queues = 0,
330	action__mes_unmap_queues__reset_queues = 1,
331	action__mes_unmap_queues__disable_process_queues = 2,
332	action__mes_unmap_queues__reserved = 3
333};
334
335enum mes_unmap_queues_queue_sel_enum {
336	queue_sel__mes_unmap_queues__perform_request_on_specified_queues = 0,
337	queue_sel__mes_unmap_queues__perform_request_on_pasid_queues = 1,
338	queue_sel__mes_unmap_queues__unmap_all_queues = 2,
339	queue_sel__mes_unmap_queues__unmap_all_non_static_queues = 3
340};
341
342enum mes_unmap_queues_engine_sel_enum {
343	engine_sel__mes_unmap_queues__compute = 0,
344	engine_sel__mes_unmap_queues__sdma0 = 2,
345	engine_sel__mes_unmap_queues__sdmal = 3
346};
347
348struct pm4_mes_unmap_queues {
349	union {
350		union PM4_MES_TYPE_3_HEADER   header;            /* header */
351		uint32_t            ordinal1;
352	};
353
354	union {
355		struct {
356			enum mes_unmap_queues_action_enum action:2;
357			uint32_t reserved1:2;
358			enum mes_unmap_queues_queue_sel_enum queue_sel:2;
359			uint32_t reserved2:20;
360			enum mes_unmap_queues_engine_sel_enum engine_sel:3;
361			uint32_t num_queues:3;
362		} bitfields2;
363		uint32_t ordinal2;
364	};
365
366	union {
367		struct {
368			uint32_t pasid:16;
369			uint32_t reserved3:16;
370		} bitfields3a;
371		struct {
372			uint32_t reserved4:2;
373			uint32_t doorbell_offset0:21;
374			uint32_t reserved5:9;
375		} bitfields3b;
376		uint32_t ordinal3;
377	};
378
379	union {
380	struct {
381			uint32_t reserved6:2;
382			uint32_t doorbell_offset1:21;
383			uint32_t reserved7:9;
384		} bitfields4;
385		uint32_t ordinal4;
386	};
387
388	union {
389		struct {
390			uint32_t reserved8:2;
391			uint32_t doorbell_offset2:21;
392			uint32_t reserved9:9;
393		} bitfields5;
394		uint32_t ordinal5;
395	};
396
397	union {
398		struct {
399			uint32_t reserved10:2;
400			uint32_t doorbell_offset3:21;
401			uint32_t reserved11:9;
402		} bitfields6;
403		uint32_t ordinal6;
404	};
405};
406#endif
407
408#ifndef PM4_MEC_RELEASE_MEM_DEFINED
409#define PM4_MEC_RELEASE_MEM_DEFINED
410enum RELEASE_MEM_event_index_enum {
411	event_index___release_mem__end_of_pipe = 5,
412	event_index___release_mem__shader_done = 6
413};
414
415enum RELEASE_MEM_cache_policy_enum {
416	cache_policy___release_mem__lru = 0,
417	cache_policy___release_mem__stream = 1,
418	cache_policy___release_mem__bypass = 2
419};
420
421enum RELEASE_MEM_dst_sel_enum {
422	dst_sel___release_mem__memory_controller = 0,
423	dst_sel___release_mem__tc_l2 = 1,
424	dst_sel___release_mem__queue_write_pointer_register = 2,
425	dst_sel___release_mem__queue_write_pointer_poll_mask_bit = 3
426};
427
428enum RELEASE_MEM_int_sel_enum {
429	int_sel___release_mem__none = 0,
430	int_sel___release_mem__send_interrupt_only = 1,
431	int_sel___release_mem__send_interrupt_after_write_confirm = 2,
432	int_sel___release_mem__send_data_after_write_confirm = 3
433};
434
435enum RELEASE_MEM_data_sel_enum {
436	data_sel___release_mem__none = 0,
437	data_sel___release_mem__send_32_bit_low = 1,
438	data_sel___release_mem__send_64_bit_data = 2,
439	data_sel___release_mem__send_gpu_clock_counter = 3,
440	data_sel___release_mem__send_cp_perfcounter_hi_lo = 4,
441	data_sel___release_mem__store_gds_data_to_memory = 5
442};
443
444struct pm4_mec_release_mem {
445	union {
446		union PM4_MES_TYPE_3_HEADER header;     /*header */
447		unsigned int ordinal1;
448	};
449
450	union {
451		struct {
452			unsigned int event_type:6;
453			unsigned int reserved1:2;
454			enum RELEASE_MEM_event_index_enum event_index:4;
455			unsigned int tcl1_vol_action_ena:1;
456			unsigned int tc_vol_action_ena:1;
457			unsigned int reserved2:1;
458			unsigned int tc_wb_action_ena:1;
459			unsigned int tcl1_action_ena:1;
460			unsigned int tc_action_ena:1;
461			unsigned int reserved3:6;
462			unsigned int atc:1;
463			enum RELEASE_MEM_cache_policy_enum cache_policy:2;
464			unsigned int reserved4:5;
465		} bitfields2;
466		unsigned int ordinal2;
467	};
468
469	union {
470		struct {
471			unsigned int reserved5:16;
472			enum RELEASE_MEM_dst_sel_enum dst_sel:2;
473			unsigned int reserved6:6;
474			enum RELEASE_MEM_int_sel_enum int_sel:3;
475			unsigned int reserved7:2;
476			enum RELEASE_MEM_data_sel_enum data_sel:3;
477		} bitfields3;
478		unsigned int ordinal3;
479	};
480
481	union {
482		struct {
483			unsigned int reserved8:2;
484			unsigned int address_lo_32b:30;
485		} bitfields4;
486		struct {
487			unsigned int reserved9:3;
488			unsigned int address_lo_64b:29;
489		} bitfields5;
490		unsigned int ordinal4;
491	};
492
493	unsigned int address_hi;
494
495	unsigned int data_lo;
496
497	unsigned int data_hi;
498};
499#endif
500
501enum {
502	CACHE_FLUSH_AND_INV_TS_EVENT = 0x00000014
503};
504
505#endif
v6.13.7
  1/* SPDX-License-Identifier: GPL-2.0 OR MIT */
  2/*
  3 * Copyright 2014-2022 Advanced Micro Devices, Inc.
  4 *
  5 * Permission is hereby granted, free of charge, to any person obtaining a
  6 * copy of this software and associated documentation files (the "Software"),
  7 * to deal in the Software without restriction, including without limitation
  8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  9 * and/or sell copies of the Software, and to permit persons to whom the
 10 * Software is furnished to do so, subject to the following conditions:
 11 *
 12 * The above copyright notice and this permission notice shall be included in
 13 * all copies or substantial portions of the Software.
 14 *
 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 18 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
 19 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 20 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 21 * OTHER DEALINGS IN THE SOFTWARE.
 22 *
 23 */
 24
 25#ifndef F32_MES_PM4_PACKETS_H
 26#define F32_MES_PM4_PACKETS_H
 27
 28#ifndef PM4_MES_HEADER_DEFINED
 29#define PM4_MES_HEADER_DEFINED
 30union PM4_MES_TYPE_3_HEADER {
 31	struct {
 32		uint32_t reserved1 : 8; /* < reserved */
 33		uint32_t opcode    : 8; /* < IT opcode */
 34		uint32_t count     : 14;/* < Number of DWORDS - 1 in the
 35					 *   information body
 36					 */
 37		uint32_t type      : 2; /* < packet identifier
 38					 *   It should be 3 for type 3 packets
 39					 */
 40	};
 41	uint32_t u32All;
 42};
 43#endif /* PM4_MES_HEADER_DEFINED */
 44
 45/*--------------------MES_SET_RESOURCES--------------------*/
 46
 47#ifndef PM4_MES_SET_RESOURCES_DEFINED
 48#define PM4_MES_SET_RESOURCES_DEFINED
 49enum mes_set_resources_queue_type_enum {
 50	queue_type__mes_set_resources__kernel_interface_queue_kiq = 0,
 51	queue_type__mes_set_resources__hsa_interface_queue_hiq = 1,
 52	queue_type__mes_set_resources__hsa_debug_interface_queue = 4
 53};
 54
 55
 56struct pm4_mes_set_resources {
 57	union {
 58		union PM4_MES_TYPE_3_HEADER	header;		/* header */
 59		uint32_t			ordinal1;
 60	};
 61
 62	union {
 63		struct {
 64			uint32_t vmid_mask:16;
 65			uint32_t unmap_latency:8;
 66			uint32_t reserved1:5;
 67			enum mes_set_resources_queue_type_enum queue_type:3;
 68		} bitfields2;
 69		uint32_t ordinal2;
 70	};
 71
 72	uint32_t queue_mask_lo;
 73	uint32_t queue_mask_hi;
 74	uint32_t gws_mask_lo;
 75	uint32_t gws_mask_hi;
 76
 77	union {
 78		struct {
 79			uint32_t oac_mask:16;
 80			uint32_t reserved2:16;
 81		} bitfields7;
 82		uint32_t ordinal7;
 83	};
 84
 85	union {
 86		struct {
 87		uint32_t gds_heap_base:6;
 88		uint32_t reserved3:5;
 89		uint32_t gds_heap_size:6;
 90		uint32_t reserved4:15;
 91		} bitfields8;
 92		uint32_t ordinal8;
 93	};
 94
 95};
 96#endif
 97
 98/*--------------------MES_RUN_LIST--------------------*/
 99
100#ifndef PM4_MES_RUN_LIST_DEFINED
101#define PM4_MES_RUN_LIST_DEFINED
102
103struct pm4_mes_runlist {
104	union {
105		union PM4_MES_TYPE_3_HEADER   header;            /* header */
106		uint32_t            ordinal1;
107	};
108
109	union {
110		struct {
111			uint32_t reserved1:2;
112			uint32_t ib_base_lo:30;
113		} bitfields2;
114		uint32_t ordinal2;
115	};
116
117	union {
118		struct {
119			uint32_t ib_base_hi:16;
120			uint32_t reserved2:16;
121		} bitfields3;
122		uint32_t ordinal3;
123	};
124
125	union {
126		struct {
127			uint32_t ib_size:20;
128			uint32_t chain:1;
129			uint32_t offload_polling:1;
130			uint32_t reserved2:1;
131			uint32_t valid:1;
132			uint32_t process_cnt:4;
133			uint32_t reserved3:4;
134		} bitfields4;
135		uint32_t ordinal4;
136	};
137
138};
139#endif
140
141/*--------------------MES_MAP_PROCESS--------------------*/
142
143#ifndef PM4_MES_MAP_PROCESS_DEFINED
144#define PM4_MES_MAP_PROCESS_DEFINED
145
146struct pm4_mes_map_process {
147	union {
148		union PM4_MES_TYPE_3_HEADER header;	/* header */
149		uint32_t ordinal1;
150	};
151
152	union {
153		struct {
154			uint32_t pasid:16;
155			uint32_t reserved1:8;
156			uint32_t diq_enable:1;
157			uint32_t process_quantum:7;
158		} bitfields2;
159		uint32_t ordinal2;
160	};
161
162	union {
163		struct {
164			uint32_t page_table_base:28;
165			uint32_t reserved3:4;
166		} bitfields3;
167		uint32_t ordinal3;
168	};
169
170	uint32_t reserved;
171
172	uint32_t sh_mem_bases;
173	uint32_t sh_mem_config;
174	uint32_t sh_mem_ape1_base;
175	uint32_t sh_mem_ape1_limit;
176
177	uint32_t sh_hidden_private_base_vmid;
178
179	uint32_t reserved2;
180	uint32_t reserved3;
181
182	uint32_t gds_addr_lo;
183	uint32_t gds_addr_hi;
184
185	union {
186		struct {
187			uint32_t num_gws:6;
188			uint32_t reserved4:2;
189			uint32_t num_oac:4;
190			uint32_t reserved5:4;
191			uint32_t gds_size:6;
192			uint32_t num_queues:10;
193		} bitfields10;
194		uint32_t ordinal10;
195	};
196
197	uint32_t completion_signal_lo;
198	uint32_t completion_signal_hi;
199
200};
201
202#endif
203
204/*--------------------MES_MAP_QUEUES--------------------*/
205
206#ifndef PM4_MES_MAP_QUEUES_VI_DEFINED
207#define PM4_MES_MAP_QUEUES_VI_DEFINED
208enum mes_map_queues_queue_sel_vi_enum {
209	queue_sel__mes_map_queues__map_to_specified_queue_slots_vi = 0,
210queue_sel__mes_map_queues__map_to_hws_determined_queue_slots_vi = 1
211};
212
213enum mes_map_queues_queue_type_vi_enum {
214	queue_type__mes_map_queues__normal_compute_vi = 0,
215	queue_type__mes_map_queues__debug_interface_queue_vi = 1,
216	queue_type__mes_map_queues__normal_latency_static_queue_vi = 2,
217queue_type__mes_map_queues__low_latency_static_queue_vi = 3
218};
219
220enum mes_map_queues_engine_sel_vi_enum {
221	engine_sel__mes_map_queues__compute_vi = 0,
222	engine_sel__mes_map_queues__sdma0_vi = 2,
223	engine_sel__mes_map_queues__sdma1_vi = 3
224};
225
226
227struct pm4_mes_map_queues {
228	union {
229		union PM4_MES_TYPE_3_HEADER   header;            /* header */
230		uint32_t            ordinal1;
231	};
232
233	union {
234		struct {
235			uint32_t reserved1:4;
236			enum mes_map_queues_queue_sel_vi_enum queue_sel:2;
237			uint32_t reserved2:15;
238			enum mes_map_queues_queue_type_vi_enum queue_type:3;
239			uint32_t reserved3:2;
240			enum mes_map_queues_engine_sel_vi_enum engine_sel:3;
241			uint32_t num_queues:3;
242		} bitfields2;
243		uint32_t ordinal2;
244	};
245
246	union {
247		struct {
248			uint32_t reserved3:1;
249			uint32_t check_disable:1;
250			uint32_t doorbell_offset:21;
251			uint32_t reserved4:3;
252			uint32_t queue:6;
253		} bitfields3;
254		uint32_t ordinal3;
255	};
256
257	uint32_t mqd_addr_lo;
258	uint32_t mqd_addr_hi;
259	uint32_t wptr_addr_lo;
260	uint32_t wptr_addr_hi;
261};
262#endif
263
264/*--------------------MES_QUERY_STATUS--------------------*/
265
266#ifndef PM4_MES_QUERY_STATUS_DEFINED
267#define PM4_MES_QUERY_STATUS_DEFINED
268enum mes_query_status_interrupt_sel_enum {
269	interrupt_sel__mes_query_status__completion_status = 0,
270	interrupt_sel__mes_query_status__process_status = 1,
271	interrupt_sel__mes_query_status__queue_status = 2
272};
273
274enum mes_query_status_command_enum {
275	command__mes_query_status__interrupt_only = 0,
276	command__mes_query_status__fence_only_immediate = 1,
277	command__mes_query_status__fence_only_after_write_ack = 2,
278	command__mes_query_status__fence_wait_for_write_ack_send_interrupt = 3
279};
280
281enum mes_query_status_engine_sel_enum {
282	engine_sel__mes_query_status__compute = 0,
283	engine_sel__mes_query_status__sdma0_queue = 2,
284	engine_sel__mes_query_status__sdma1_queue = 3
285};
286
287struct pm4_mes_query_status {
288	union {
289		union PM4_MES_TYPE_3_HEADER   header;            /* header */
290		uint32_t            ordinal1;
291	};
292
293	union {
294		struct {
295			uint32_t context_id:28;
296			enum mes_query_status_interrupt_sel_enum
297				interrupt_sel:2;
298			enum mes_query_status_command_enum command:2;
299		} bitfields2;
300		uint32_t ordinal2;
301	};
302
303	union {
304		struct {
305			uint32_t pasid:16;
306			uint32_t reserved1:16;
307		} bitfields3a;
308		struct {
309			uint32_t reserved2:2;
310			uint32_t doorbell_offset:21;
311			uint32_t reserved3:2;
312			enum mes_query_status_engine_sel_enum engine_sel:3;
313			uint32_t reserved4:4;
314		} bitfields3b;
315		uint32_t ordinal3;
316	};
317
318	uint32_t addr_lo;
319	uint32_t addr_hi;
320	uint32_t data_lo;
321	uint32_t data_hi;
322};
323#endif
324
325/*--------------------MES_UNMAP_QUEUES--------------------*/
326
327#ifndef PM4_MES_UNMAP_QUEUES_DEFINED
328#define PM4_MES_UNMAP_QUEUES_DEFINED
329enum mes_unmap_queues_action_enum {
330	action__mes_unmap_queues__preempt_queues = 0,
331	action__mes_unmap_queues__reset_queues = 1,
332	action__mes_unmap_queues__disable_process_queues = 2,
333	action__mes_unmap_queues__reserved = 3
334};
335
336enum mes_unmap_queues_queue_sel_enum {
337	queue_sel__mes_unmap_queues__perform_request_on_specified_queues = 0,
338	queue_sel__mes_unmap_queues__perform_request_on_pasid_queues = 1,
339	queue_sel__mes_unmap_queues__unmap_all_queues = 2,
340	queue_sel__mes_unmap_queues__unmap_all_non_static_queues = 3
341};
342
343enum mes_unmap_queues_engine_sel_enum {
344	engine_sel__mes_unmap_queues__compute = 0,
345	engine_sel__mes_unmap_queues__sdma0 = 2,
346	engine_sel__mes_unmap_queues__sdmal = 3
347};
348
349struct pm4_mes_unmap_queues {
350	union {
351		union PM4_MES_TYPE_3_HEADER   header;            /* header */
352		uint32_t            ordinal1;
353	};
354
355	union {
356		struct {
357			enum mes_unmap_queues_action_enum action:2;
358			uint32_t reserved1:2;
359			enum mes_unmap_queues_queue_sel_enum queue_sel:2;
360			uint32_t reserved2:20;
361			enum mes_unmap_queues_engine_sel_enum engine_sel:3;
362			uint32_t num_queues:3;
363		} bitfields2;
364		uint32_t ordinal2;
365	};
366
367	union {
368		struct {
369			uint32_t pasid:16;
370			uint32_t reserved3:16;
371		} bitfields3a;
372		struct {
373			uint32_t reserved4:2;
374			uint32_t doorbell_offset0:21;
375			uint32_t reserved5:9;
376		} bitfields3b;
377		uint32_t ordinal3;
378	};
379
380	union {
381	struct {
382			uint32_t reserved6:2;
383			uint32_t doorbell_offset1:21;
384			uint32_t reserved7:9;
385		} bitfields4;
386		uint32_t ordinal4;
387	};
388
389	union {
390		struct {
391			uint32_t reserved8:2;
392			uint32_t doorbell_offset2:21;
393			uint32_t reserved9:9;
394		} bitfields5;
395		uint32_t ordinal5;
396	};
397
398	union {
399		struct {
400			uint32_t reserved10:2;
401			uint32_t doorbell_offset3:21;
402			uint32_t reserved11:9;
403		} bitfields6;
404		uint32_t ordinal6;
405	};
406};
407#endif
408
409#ifndef PM4_MEC_RELEASE_MEM_DEFINED
410#define PM4_MEC_RELEASE_MEM_DEFINED
411enum RELEASE_MEM_event_index_enum {
412	event_index___release_mem__end_of_pipe = 5,
413	event_index___release_mem__shader_done = 6
414};
415
416enum RELEASE_MEM_cache_policy_enum {
417	cache_policy___release_mem__lru = 0,
418	cache_policy___release_mem__stream = 1,
419	cache_policy___release_mem__bypass = 2
420};
421
422enum RELEASE_MEM_dst_sel_enum {
423	dst_sel___release_mem__memory_controller = 0,
424	dst_sel___release_mem__tc_l2 = 1,
425	dst_sel___release_mem__queue_write_pointer_register = 2,
426	dst_sel___release_mem__queue_write_pointer_poll_mask_bit = 3
427};
428
429enum RELEASE_MEM_int_sel_enum {
430	int_sel___release_mem__none = 0,
431	int_sel___release_mem__send_interrupt_only = 1,
432	int_sel___release_mem__send_interrupt_after_write_confirm = 2,
433	int_sel___release_mem__send_data_after_write_confirm = 3
434};
435
436enum RELEASE_MEM_data_sel_enum {
437	data_sel___release_mem__none = 0,
438	data_sel___release_mem__send_32_bit_low = 1,
439	data_sel___release_mem__send_64_bit_data = 2,
440	data_sel___release_mem__send_gpu_clock_counter = 3,
441	data_sel___release_mem__send_cp_perfcounter_hi_lo = 4,
442	data_sel___release_mem__store_gds_data_to_memory = 5
443};
444
445struct pm4_mec_release_mem {
446	union {
447		union PM4_MES_TYPE_3_HEADER header;     /*header */
448		unsigned int ordinal1;
449	};
450
451	union {
452		struct {
453			unsigned int event_type:6;
454			unsigned int reserved1:2;
455			enum RELEASE_MEM_event_index_enum event_index:4;
456			unsigned int tcl1_vol_action_ena:1;
457			unsigned int tc_vol_action_ena:1;
458			unsigned int reserved2:1;
459			unsigned int tc_wb_action_ena:1;
460			unsigned int tcl1_action_ena:1;
461			unsigned int tc_action_ena:1;
462			unsigned int reserved3:6;
463			unsigned int atc:1;
464			enum RELEASE_MEM_cache_policy_enum cache_policy:2;
465			unsigned int reserved4:5;
466		} bitfields2;
467		unsigned int ordinal2;
468	};
469
470	union {
471		struct {
472			unsigned int reserved5:16;
473			enum RELEASE_MEM_dst_sel_enum dst_sel:2;
474			unsigned int reserved6:6;
475			enum RELEASE_MEM_int_sel_enum int_sel:3;
476			unsigned int reserved7:2;
477			enum RELEASE_MEM_data_sel_enum data_sel:3;
478		} bitfields3;
479		unsigned int ordinal3;
480	};
481
482	union {
483		struct {
484			unsigned int reserved8:2;
485			unsigned int address_lo_32b:30;
486		} bitfields4;
487		struct {
488			unsigned int reserved9:3;
489			unsigned int address_lo_64b:29;
490		} bitfields5;
491		unsigned int ordinal4;
492	};
493
494	unsigned int address_hi;
495
496	unsigned int data_lo;
497
498	unsigned int data_hi;
499};
500#endif
501
502enum {
503	CACHE_FLUSH_AND_INV_TS_EVENT = 0x00000014
504};
505
506#endif