blob: b45c1dccf70730e3977b4f98a23c11df48a7abd6 [file] [log] [blame]
Christopher Ferris7ac54f52024-08-07 21:07:12 +00001/*
2 * This file is auto-generated. Modifications will be lost.
3 *
4 * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/
5 * for more information.
6 */
7#ifndef _PANTHOR_DRM_H_
8#define _PANTHOR_DRM_H_
9#include "drm.h"
10#ifdef __cplusplus
11extern "C" {
12#endif
13#define DRM_PANTHOR_USER_MMIO_OFFSET_32BIT (1ull << 43)
14#define DRM_PANTHOR_USER_MMIO_OFFSET_64BIT (1ull << 56)
15#define DRM_PANTHOR_USER_MMIO_OFFSET (sizeof(unsigned long) < 8 ? DRM_PANTHOR_USER_MMIO_OFFSET_32BIT : DRM_PANTHOR_USER_MMIO_OFFSET_64BIT)
16#define DRM_PANTHOR_USER_FLUSH_ID_MMIO_OFFSET (DRM_PANTHOR_USER_MMIO_OFFSET | 0)
17enum drm_panthor_ioctl_id {
18 DRM_PANTHOR_DEV_QUERY = 0,
19 DRM_PANTHOR_VM_CREATE,
20 DRM_PANTHOR_VM_DESTROY,
21 DRM_PANTHOR_VM_BIND,
22 DRM_PANTHOR_VM_GET_STATE,
23 DRM_PANTHOR_BO_CREATE,
24 DRM_PANTHOR_BO_MMAP_OFFSET,
25 DRM_PANTHOR_GROUP_CREATE,
26 DRM_PANTHOR_GROUP_DESTROY,
27 DRM_PANTHOR_GROUP_SUBMIT,
28 DRM_PANTHOR_GROUP_GET_STATE,
29 DRM_PANTHOR_TILER_HEAP_CREATE,
30 DRM_PANTHOR_TILER_HEAP_DESTROY,
31};
32#define DRM_IOCTL_PANTHOR(__access,__id,__type) DRM_IO ##__access(DRM_COMMAND_BASE + DRM_PANTHOR_ ##__id, struct drm_panthor_ ##__type)
33#define DRM_IOCTL_PANTHOR_DEV_QUERY DRM_IOCTL_PANTHOR(WR, DEV_QUERY, dev_query)
34#define DRM_IOCTL_PANTHOR_VM_CREATE DRM_IOCTL_PANTHOR(WR, VM_CREATE, vm_create)
35#define DRM_IOCTL_PANTHOR_VM_DESTROY DRM_IOCTL_PANTHOR(WR, VM_DESTROY, vm_destroy)
36#define DRM_IOCTL_PANTHOR_VM_BIND DRM_IOCTL_PANTHOR(WR, VM_BIND, vm_bind)
37#define DRM_IOCTL_PANTHOR_VM_GET_STATE DRM_IOCTL_PANTHOR(WR, VM_GET_STATE, vm_get_state)
38#define DRM_IOCTL_PANTHOR_BO_CREATE DRM_IOCTL_PANTHOR(WR, BO_CREATE, bo_create)
39#define DRM_IOCTL_PANTHOR_BO_MMAP_OFFSET DRM_IOCTL_PANTHOR(WR, BO_MMAP_OFFSET, bo_mmap_offset)
40#define DRM_IOCTL_PANTHOR_GROUP_CREATE DRM_IOCTL_PANTHOR(WR, GROUP_CREATE, group_create)
41#define DRM_IOCTL_PANTHOR_GROUP_DESTROY DRM_IOCTL_PANTHOR(WR, GROUP_DESTROY, group_destroy)
42#define DRM_IOCTL_PANTHOR_GROUP_SUBMIT DRM_IOCTL_PANTHOR(WR, GROUP_SUBMIT, group_submit)
43#define DRM_IOCTL_PANTHOR_GROUP_GET_STATE DRM_IOCTL_PANTHOR(WR, GROUP_GET_STATE, group_get_state)
44#define DRM_IOCTL_PANTHOR_TILER_HEAP_CREATE DRM_IOCTL_PANTHOR(WR, TILER_HEAP_CREATE, tiler_heap_create)
45#define DRM_IOCTL_PANTHOR_TILER_HEAP_DESTROY DRM_IOCTL_PANTHOR(WR, TILER_HEAP_DESTROY, tiler_heap_destroy)
46struct drm_panthor_obj_array {
47 __u32 stride;
48 __u32 count;
49 __u64 array;
50};
51#define DRM_PANTHOR_OBJ_ARRAY(cnt,ptr) {.stride = sizeof((ptr)[0]),.count = (cnt),.array = (__u64) (uintptr_t) (ptr) }
52enum drm_panthor_sync_op_flags {
53 DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_MASK = 0xff,
54 DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_SYNCOBJ = 0,
55 DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_TIMELINE_SYNCOBJ = 1,
56 DRM_PANTHOR_SYNC_OP_WAIT = 0 << 31,
57 DRM_PANTHOR_SYNC_OP_SIGNAL = (int) (1u << 31),
58};
59struct drm_panthor_sync_op {
60 __u32 flags;
61 __u32 handle;
62 __u64 timeline_value;
63};
64enum drm_panthor_dev_query_type {
65 DRM_PANTHOR_DEV_QUERY_GPU_INFO = 0,
66 DRM_PANTHOR_DEV_QUERY_CSIF_INFO,
67};
68struct drm_panthor_gpu_info {
69 __u32 gpu_id;
70#define DRM_PANTHOR_ARCH_MAJOR(x) ((x) >> 28)
71#define DRM_PANTHOR_ARCH_MINOR(x) (((x) >> 24) & 0xf)
72#define DRM_PANTHOR_ARCH_REV(x) (((x) >> 20) & 0xf)
73#define DRM_PANTHOR_PRODUCT_MAJOR(x) (((x) >> 16) & 0xf)
74#define DRM_PANTHOR_VERSION_MAJOR(x) (((x) >> 12) & 0xf)
75#define DRM_PANTHOR_VERSION_MINOR(x) (((x) >> 4) & 0xff)
76#define DRM_PANTHOR_VERSION_STATUS(x) ((x) & 0xf)
77 __u32 gpu_rev;
78 __u32 csf_id;
79#define DRM_PANTHOR_CSHW_MAJOR(x) (((x) >> 26) & 0x3f)
80#define DRM_PANTHOR_CSHW_MINOR(x) (((x) >> 20) & 0x3f)
81#define DRM_PANTHOR_CSHW_REV(x) (((x) >> 16) & 0xf)
82#define DRM_PANTHOR_MCU_MAJOR(x) (((x) >> 10) & 0x3f)
83#define DRM_PANTHOR_MCU_MINOR(x) (((x) >> 4) & 0x3f)
84#define DRM_PANTHOR_MCU_REV(x) ((x) & 0xf)
85 __u32 l2_features;
86 __u32 tiler_features;
87 __u32 mem_features;
88 __u32 mmu_features;
89#define DRM_PANTHOR_MMU_VA_BITS(x) ((x) & 0xff)
90 __u32 thread_features;
91 __u32 max_threads;
92 __u32 thread_max_workgroup_size;
93 __u32 thread_max_barrier_size;
94 __u32 coherency_features;
95 __u32 texture_features[4];
96 __u32 as_present;
97 __u64 shader_present;
98 __u64 l2_present;
99 __u64 tiler_present;
100 __u32 core_features;
101 __u32 pad;
102};
103struct drm_panthor_csif_info {
104 __u32 csg_slot_count;
105 __u32 cs_slot_count;
106 __u32 cs_reg_count;
107 __u32 scoreboard_slot_count;
108 __u32 unpreserved_cs_reg_count;
109 __u32 pad;
110};
111struct drm_panthor_dev_query {
112 __u32 type;
113 __u32 size;
114 __u64 pointer;
115};
116struct drm_panthor_vm_create {
117 __u32 flags;
118 __u32 id;
119 __u64 user_va_range;
120};
121struct drm_panthor_vm_destroy {
122 __u32 id;
123 __u32 pad;
124};
125enum drm_panthor_vm_bind_op_flags {
126 DRM_PANTHOR_VM_BIND_OP_MAP_READONLY = 1 << 0,
127 DRM_PANTHOR_VM_BIND_OP_MAP_NOEXEC = 1 << 1,
128 DRM_PANTHOR_VM_BIND_OP_MAP_UNCACHED = 1 << 2,
129 DRM_PANTHOR_VM_BIND_OP_TYPE_MASK = (int) (0xfu << 28),
130 DRM_PANTHOR_VM_BIND_OP_TYPE_MAP = 0 << 28,
131 DRM_PANTHOR_VM_BIND_OP_TYPE_UNMAP = 1 << 28,
132 DRM_PANTHOR_VM_BIND_OP_TYPE_SYNC_ONLY = 2 << 28,
133};
134struct drm_panthor_vm_bind_op {
135 __u32 flags;
136 __u32 bo_handle;
137 __u64 bo_offset;
138 __u64 va;
139 __u64 size;
140 struct drm_panthor_obj_array syncs;
141};
142enum drm_panthor_vm_bind_flags {
143 DRM_PANTHOR_VM_BIND_ASYNC = 1 << 0,
144};
145struct drm_panthor_vm_bind {
146 __u32 vm_id;
147 __u32 flags;
148 struct drm_panthor_obj_array ops;
149};
150enum drm_panthor_vm_state {
151 DRM_PANTHOR_VM_STATE_USABLE,
152 DRM_PANTHOR_VM_STATE_UNUSABLE,
153};
154struct drm_panthor_vm_get_state {
155 __u32 vm_id;
156 __u32 state;
157};
158enum drm_panthor_bo_flags {
159 DRM_PANTHOR_BO_NO_MMAP = (1 << 0),
160};
161struct drm_panthor_bo_create {
162 __u64 size;
163 __u32 flags;
164 __u32 exclusive_vm_id;
165 __u32 handle;
166 __u32 pad;
167};
168struct drm_panthor_bo_mmap_offset {
169 __u32 handle;
170 __u32 pad;
171 __u64 offset;
172};
173struct drm_panthor_queue_create {
174 __u8 priority;
175 __u8 pad[3];
176 __u32 ringbuf_size;
177};
178enum drm_panthor_group_priority {
179 PANTHOR_GROUP_PRIORITY_LOW = 0,
180 PANTHOR_GROUP_PRIORITY_MEDIUM,
181 PANTHOR_GROUP_PRIORITY_HIGH,
182};
183struct drm_panthor_group_create {
184 struct drm_panthor_obj_array queues;
185 __u8 max_compute_cores;
186 __u8 max_fragment_cores;
187 __u8 max_tiler_cores;
188 __u8 priority;
189 __u32 pad;
190 __u64 compute_core_mask;
191 __u64 fragment_core_mask;
192 __u64 tiler_core_mask;
193 __u32 vm_id;
194 __u32 group_handle;
195};
196struct drm_panthor_group_destroy {
197 __u32 group_handle;
198 __u32 pad;
199};
200struct drm_panthor_queue_submit {
201 __u32 queue_index;
202 __u32 stream_size;
203 __u64 stream_addr;
204 __u32 latest_flush;
205 __u32 pad;
206 struct drm_panthor_obj_array syncs;
207};
208struct drm_panthor_group_submit {
209 __u32 group_handle;
210 __u32 pad;
211 struct drm_panthor_obj_array queue_submits;
212};
213enum drm_panthor_group_state_flags {
214 DRM_PANTHOR_GROUP_STATE_TIMEDOUT = 1 << 0,
215 DRM_PANTHOR_GROUP_STATE_FATAL_FAULT = 1 << 1,
216};
217struct drm_panthor_group_get_state {
218 __u32 group_handle;
219 __u32 state;
220 __u32 fatal_queues;
221 __u32 pad;
222};
223struct drm_panthor_tiler_heap_create {
224 __u32 vm_id;
225 __u32 initial_chunk_count;
226 __u32 chunk_size;
227 __u32 max_chunks;
228 __u32 target_in_flight;
229 __u32 handle;
230 __u64 tiler_heap_ctx_gpu_va;
231 __u64 first_heap_chunk_gpu_va;
232};
233struct drm_panthor_tiler_heap_destroy {
234 __u32 handle;
235 __u32 pad;
236};
237#ifdef __cplusplus
238}
239#endif
240#endif