blob: 78c0ef48f66ddd85fcdf77dca1b26e62ac08fbeb [file] [log] [blame]
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001#ifndef _MSM_KGSL_H
2#define _MSM_KGSL_H
3
4#define KGSL_VERSION_MAJOR 3
Vijay Krishnamoorthye80c3462012-08-27 14:07:32 -07005#define KGSL_VERSION_MINOR 14
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07006
7/*context flags */
Carter Cooper7e7f02e2012-02-15 09:36:31 -07008#define KGSL_CONTEXT_SAVE_GMEM 0x00000001
9#define KGSL_CONTEXT_NO_GMEM_ALLOC 0x00000002
10#define KGSL_CONTEXT_SUBMIT_IB_LIST 0x00000004
11#define KGSL_CONTEXT_CTX_SWITCH 0x00000008
12#define KGSL_CONTEXT_PREAMBLE 0x00000010
13#define KGSL_CONTEXT_TRASH_STATE 0x00000020
14#define KGSL_CONTEXT_PER_CONTEXT_TS 0x00000040
Vijay Krishnamoorthye80c3462012-08-27 14:07:32 -070015#define KGSL_CONTEXT_USER_GENERATED_TS 0x00000080
Tarun Karra83297222013-02-05 19:45:49 -080016#define KGSL_CONTEXT_NO_FAULT_TOLERANCE 0x00000200
17
Carter Cooper7e7f02e2012-02-15 09:36:31 -070018
19#define KGSL_CONTEXT_INVALID 0xffffffff
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070020
21/* Memory allocayion flags */
22#define KGSL_MEMFLAGS_GPUREADONLY 0x01000000
23
Jeremy Gebben3e626ff2012-09-24 13:05:39 -060024#define KGSL_MEMTYPE_MASK 0x0000FF00
25#define KGSL_MEMTYPE_SHIFT 8
26
27/* Memory types for which allocations are made */
28#define KGSL_MEMTYPE_OBJECTANY 0
29#define KGSL_MEMTYPE_FRAMEBUFFER 1
30#define KGSL_MEMTYPE_RENDERBUFFER 2
31#define KGSL_MEMTYPE_ARRAYBUFFER 3
32#define KGSL_MEMTYPE_ELEMENTARRAYBUFFER 4
33#define KGSL_MEMTYPE_VERTEXARRAYBUFFER 5
34#define KGSL_MEMTYPE_TEXTURE 6
35#define KGSL_MEMTYPE_SURFACE 7
36#define KGSL_MEMTYPE_EGL_SURFACE 8
37#define KGSL_MEMTYPE_GL 9
38#define KGSL_MEMTYPE_CL 10
39#define KGSL_MEMTYPE_CL_BUFFER_MAP 11
40#define KGSL_MEMTYPE_CL_BUFFER_NOMAP 12
41#define KGSL_MEMTYPE_CL_IMAGE_MAP 13
42#define KGSL_MEMTYPE_CL_IMAGE_NOMAP 14
43#define KGSL_MEMTYPE_CL_KERNEL_STACK 15
44#define KGSL_MEMTYPE_COMMAND 16
45#define KGSL_MEMTYPE_2D 17
46#define KGSL_MEMTYPE_EGL_IMAGE 18
47#define KGSL_MEMTYPE_EGL_SHADOW 19
48#define KGSL_MEMTYPE_MULTISAMPLE 20
49#define KGSL_MEMTYPE_KERNEL 255
50
Rajeev Kulkarni8dfdc3362012-11-22 00:22:32 -080051/*
52 * Alignment hint, passed as the power of 2 exponent.
53 * i.e 4k (2^12) would be 12, 64k (2^16)would be 16.
54 */
55#define KGSL_MEMALIGN_MASK 0x00FF0000
56#define KGSL_MEMALIGN_SHIFT 16
57
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070058/* generic flag values */
59#define KGSL_FLAGS_NORMALMODE 0x00000000
60#define KGSL_FLAGS_SAFEMODE 0x00000001
61#define KGSL_FLAGS_INITIALIZED0 0x00000002
62#define KGSL_FLAGS_INITIALIZED 0x00000004
63#define KGSL_FLAGS_STARTED 0x00000008
64#define KGSL_FLAGS_ACTIVE 0x00000010
65#define KGSL_FLAGS_RESERVED0 0x00000020
66#define KGSL_FLAGS_RESERVED1 0x00000040
67#define KGSL_FLAGS_RESERVED2 0x00000080
68#define KGSL_FLAGS_SOFT_RESET 0x00000100
Carter Cooper7e7f02e2012-02-15 09:36:31 -070069#define KGSL_FLAGS_PER_CONTEXT_TIMESTAMPS 0x00000200
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070070
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -060071/* Clock flags to show which clocks should be controled by a given platform */
72#define KGSL_CLK_SRC 0x00000001
73#define KGSL_CLK_CORE 0x00000002
74#define KGSL_CLK_IFACE 0x00000004
75#define KGSL_CLK_MEM 0x00000008
76#define KGSL_CLK_MEM_IFACE 0x00000010
77#define KGSL_CLK_AXI 0x00000020
78
Vijay Krishnamoorthye80c3462012-08-27 14:07:32 -070079/* Server Side Sync Timeout in milliseconds */
80#define KGSL_SYNCOBJ_SERVER_TIMEOUT 2000
81
Shubhraprakash Das2dfe5dd2012-02-10 13:49:53 -070082/*
83 * Reset status values for context
84 */
85enum kgsl_ctx_reset_stat {
86 KGSL_CTX_STAT_NO_ERROR = 0x00000000,
87 KGSL_CTX_STAT_GUILTY_CONTEXT_RESET_EXT = 0x00000001,
88 KGSL_CTX_STAT_INNOCENT_CONTEXT_RESET_EXT = 0x00000002,
89 KGSL_CTX_STAT_UNKNOWN_CONTEXT_RESET_EXT = 0x00000003
90};
91
Suman Tatiraju0123d182011-09-30 14:59:06 -070092#define KGSL_CONVERT_TO_MBPS(val) \
93 (val*1000*1000U)
94
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070095/* device id */
96enum kgsl_deviceid {
97 KGSL_DEVICE_3D0 = 0x00000000,
98 KGSL_DEVICE_2D0 = 0x00000001,
99 KGSL_DEVICE_2D1 = 0x00000002,
100 KGSL_DEVICE_MAX = 0x00000003
101};
102
103enum kgsl_user_mem_type {
104 KGSL_USER_MEM_TYPE_PMEM = 0x00000000,
105 KGSL_USER_MEM_TYPE_ASHMEM = 0x00000001,
Jordan Crouse8eab35a2011-10-12 16:57:48 -0600106 KGSL_USER_MEM_TYPE_ADDR = 0x00000002,
107 KGSL_USER_MEM_TYPE_ION = 0x00000003,
Lynus Vaz31b5290e2012-01-18 19:20:24 +0530108 KGSL_USER_MEM_TYPE_MAX = 0x00000004,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700109};
110
111struct kgsl_devinfo {
112
113 unsigned int device_id;
114 /* chip revision id
115 * coreid:8 majorrev:8 minorrev:8 patch:8
116 */
117 unsigned int chip_id;
118 unsigned int mmu_enabled;
119 unsigned int gmem_gpubaseaddr;
120 /*
121 * This field contains the adreno revision
122 * number 200, 205, 220, etc...
123 */
124 unsigned int gpu_id;
125 unsigned int gmem_sizebytes;
126};
127
128/* this structure defines the region of memory that can be mmap()ed from this
129 driver. The timestamp fields are volatile because they are written by the
130 GPU
131*/
132struct kgsl_devmemstore {
133 volatile unsigned int soptimestamp;
134 unsigned int sbz;
135 volatile unsigned int eoptimestamp;
136 unsigned int sbz2;
137 volatile unsigned int ts_cmp_enable;
138 unsigned int sbz3;
139 volatile unsigned int ref_wait_ts;
140 unsigned int sbz4;
141 unsigned int current_context;
142 unsigned int sbz5;
143};
144
Carter Cooper7e7f02e2012-02-15 09:36:31 -0700145#define KGSL_MEMSTORE_OFFSET(ctxt_id, field) \
146 ((ctxt_id)*sizeof(struct kgsl_devmemstore) + \
147 offsetof(struct kgsl_devmemstore, field))
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700148
149/* timestamp id*/
150enum kgsl_timestamp_type {
151 KGSL_TIMESTAMP_CONSUMED = 0x00000001, /* start-of-pipeline timestamp */
152 KGSL_TIMESTAMP_RETIRED = 0x00000002, /* end-of-pipeline timestamp*/
Jordan Crousec659f382012-04-16 11:10:41 -0600153 KGSL_TIMESTAMP_QUEUED = 0x00000003,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700154};
155
156/* property types - used with kgsl_device_getproperty */
157enum kgsl_property_type {
158 KGSL_PROP_DEVICE_INFO = 0x00000001,
159 KGSL_PROP_DEVICE_SHADOW = 0x00000002,
160 KGSL_PROP_DEVICE_POWER = 0x00000003,
161 KGSL_PROP_SHMEM = 0x00000004,
162 KGSL_PROP_SHMEM_APERTURES = 0x00000005,
163 KGSL_PROP_MMU_ENABLE = 0x00000006,
164 KGSL_PROP_INTERRUPT_WAITS = 0x00000007,
165 KGSL_PROP_VERSION = 0x00000008,
Jordan Crousef7370f82012-04-18 09:31:07 -0600166 KGSL_PROP_GPU_RESET_STAT = 0x00000009,
167 KGSL_PROP_PWRCTRL = 0x0000000E,
Tarun Karra3164fb02013-02-05 15:38:51 -0800168 KGSL_PROP_FAULT_TOLERANCE = 0x00000011,
169};
170
171/* Fault Tolerance policy flags */
172#define KGSL_FT_DISABLE 0x00000001
173#define KGSL_FT_REPLAY 0x00000002
174#define KGSL_FT_SKIPIB 0x00000004
175#define KGSL_FT_SKIPFRAME 0x00000008
176#define KGSL_FT_DEFAULT_POLICY (KGSL_FT_REPLAY + KGSL_FT_SKIPIB)
177
Tarun Karra99678f82013-02-13 13:57:25 -0800178/* Pagefault policy flags */
179#define KGSL_FT_PAGEFAULT_INT_ENABLE 0x00000001
180#define KGSL_FT_PAGEFAULT_GPUHALT_ENABLE 0x00000002
181#define KGSL_FT_PAGEFAULT_LOG_ONE_PER_PAGE 0x00000004
182#define KGSL_FT_PAGEFAULT_LOG_ONE_PER_INT 0x00000008
183#define KGSL_FT_PAGEFAULT_DEFAULT_POLICY (KGSL_FT_PAGEFAULT_INT_ENABLE + \
184 KGSL_FT_PAGEFAULT_LOG_ONE_PER_PAGE)
185
Tarun Karra3164fb02013-02-05 15:38:51 -0800186/* Fault tolerance config */
187struct kgsl_ft_config {
Tarun Karra99678f82013-02-13 13:57:25 -0800188 unsigned int ft_policy; /* Fault Tolerance policy flags */
189 unsigned int ft_pf_policy; /* Pagefault policy flags */
Tarun Karra3164fb02013-02-05 15:38:51 -0800190 unsigned int ft_pm_dump; /* KGSL enable postmortem dump */
191 unsigned int ft_detect_ms;
192 unsigned int ft_dos_timeout_ms;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700193};
194
195struct kgsl_shadowprop {
196 unsigned int gpuaddr;
197 unsigned int size;
198 unsigned int flags; /* contains KGSL_FLAGS_ values */
199};
200
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700201struct kgsl_version {
202 unsigned int drv_major;
203 unsigned int drv_minor;
204 unsigned int dev_major;
205 unsigned int dev_minor;
206};
207
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700208/* structure holds list of ibs */
209struct kgsl_ibdesc {
210 unsigned int gpuaddr;
211 void *hostptr;
212 unsigned int sizedwords;
213 unsigned int ctrl;
214};
215
216/* ioctls */
217#define KGSL_IOC_TYPE 0x09
218
219/* get misc info about the GPU
220 type should be a value from enum kgsl_property_type
221 value points to a structure that varies based on type
222 sizebytes is sizeof() that structure
223 for KGSL_PROP_DEVICE_INFO, use struct kgsl_devinfo
224 this structure contaings hardware versioning info.
225 for KGSL_PROP_DEVICE_SHADOW, use struct kgsl_shadowprop
226 this is used to find mmap() offset and sizes for mapping
227 struct kgsl_memstore into userspace.
228*/
229struct kgsl_device_getproperty {
230 unsigned int type;
231 void *value;
232 unsigned int sizebytes;
233};
234
235#define IOCTL_KGSL_DEVICE_GETPROPERTY \
236 _IOWR(KGSL_IOC_TYPE, 0x2, struct kgsl_device_getproperty)
237
Harsh Vardhan Dwivedib6cebfe2012-03-15 18:20:59 -0600238/* IOCTL_KGSL_DEVICE_READ (0x3) - removed 03/2012
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700239 */
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700240
241/* block until the GPU has executed past a given timestamp
242 * timeout is in milliseconds.
243 */
244struct kgsl_device_waittimestamp {
245 unsigned int timestamp;
246 unsigned int timeout;
247};
248
249#define IOCTL_KGSL_DEVICE_WAITTIMESTAMP \
250 _IOW(KGSL_IOC_TYPE, 0x6, struct kgsl_device_waittimestamp)
251
Carter Cooper7e7f02e2012-02-15 09:36:31 -0700252struct kgsl_device_waittimestamp_ctxtid {
253 unsigned int context_id;
254 unsigned int timestamp;
255 unsigned int timeout;
256};
257
258#define IOCTL_KGSL_DEVICE_WAITTIMESTAMP_CTXTID \
259 _IOW(KGSL_IOC_TYPE, 0x7, struct kgsl_device_waittimestamp_ctxtid)
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700260
261/* issue indirect commands to the GPU.
262 * drawctxt_id must have been created with IOCTL_KGSL_DRAWCTXT_CREATE
263 * ibaddr and sizedwords must specify a subset of a buffer created
264 * with IOCTL_KGSL_SHAREDMEM_FROM_PMEM
265 * flags may be a mask of KGSL_CONTEXT_ values
266 * timestamp is a returned counter value which can be passed to
267 * other ioctls to determine when the commands have been executed by
268 * the GPU.
269 */
270struct kgsl_ringbuffer_issueibcmds {
271 unsigned int drawctxt_id;
272 unsigned int ibdesc_addr;
273 unsigned int numibs;
274 unsigned int timestamp; /*output param */
275 unsigned int flags;
276};
277
278#define IOCTL_KGSL_RINGBUFFER_ISSUEIBCMDS \
279 _IOWR(KGSL_IOC_TYPE, 0x10, struct kgsl_ringbuffer_issueibcmds)
280
281/* read the most recently executed timestamp value
282 * type should be a value from enum kgsl_timestamp_type
283 */
284struct kgsl_cmdstream_readtimestamp {
285 unsigned int type;
286 unsigned int timestamp; /*output param */
287};
288
Jason Varbedian80ba33d2011-07-11 17:29:05 -0700289#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP_OLD \
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700290 _IOR(KGSL_IOC_TYPE, 0x11, struct kgsl_cmdstream_readtimestamp)
291
Jason Varbedian80ba33d2011-07-11 17:29:05 -0700292#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP \
293 _IOWR(KGSL_IOC_TYPE, 0x11, struct kgsl_cmdstream_readtimestamp)
294
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700295/* free memory when the GPU reaches a given timestamp.
296 * gpuaddr specify a memory region created by a
297 * IOCTL_KGSL_SHAREDMEM_FROM_PMEM call
298 * type should be a value from enum kgsl_timestamp_type
299 */
300struct kgsl_cmdstream_freememontimestamp {
301 unsigned int gpuaddr;
302 unsigned int type;
303 unsigned int timestamp;
304};
305
306#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP \
307 _IOW(KGSL_IOC_TYPE, 0x12, struct kgsl_cmdstream_freememontimestamp)
308
309/* Previous versions of this header had incorrectly defined
310 IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP as a read-only ioctl instead
311 of a write only ioctl. To ensure binary compatability, the following
312 #define will be used to intercept the incorrect ioctl
313*/
314
315#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP_OLD \
316 _IOR(KGSL_IOC_TYPE, 0x12, struct kgsl_cmdstream_freememontimestamp)
317
318/* create a draw context, which is used to preserve GPU state.
319 * The flags field may contain a mask KGSL_CONTEXT_* values
320 */
321struct kgsl_drawctxt_create {
322 unsigned int flags;
323 unsigned int drawctxt_id; /*output param */
324};
325
326#define IOCTL_KGSL_DRAWCTXT_CREATE \
327 _IOWR(KGSL_IOC_TYPE, 0x13, struct kgsl_drawctxt_create)
328
329/* destroy a draw context */
330struct kgsl_drawctxt_destroy {
331 unsigned int drawctxt_id;
332};
333
334#define IOCTL_KGSL_DRAWCTXT_DESTROY \
335 _IOW(KGSL_IOC_TYPE, 0x14, struct kgsl_drawctxt_destroy)
336
337/* add a block of pmem, fb, ashmem or user allocated address
338 * into the GPU address space */
339struct kgsl_map_user_mem {
340 int fd;
341 unsigned int gpuaddr; /*output param */
342 unsigned int len;
343 unsigned int offset;
344 unsigned int hostptr; /*input param */
345 enum kgsl_user_mem_type memtype;
Jeremy Gebben3e626ff2012-09-24 13:05:39 -0600346 unsigned int flags;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700347};
348
349#define IOCTL_KGSL_MAP_USER_MEM \
350 _IOWR(KGSL_IOC_TYPE, 0x15, struct kgsl_map_user_mem)
351
Carter Cooper7e7f02e2012-02-15 09:36:31 -0700352struct kgsl_cmdstream_readtimestamp_ctxtid {
353 unsigned int context_id;
354 unsigned int type;
355 unsigned int timestamp; /*output param */
356};
357
358#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP_CTXTID \
359 _IOWR(KGSL_IOC_TYPE, 0x16, struct kgsl_cmdstream_readtimestamp_ctxtid)
360
361struct kgsl_cmdstream_freememontimestamp_ctxtid {
362 unsigned int context_id;
363 unsigned int gpuaddr;
364 unsigned int type;
365 unsigned int timestamp;
366};
367
368#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP_CTXTID \
369 _IOW(KGSL_IOC_TYPE, 0x17, \
370 struct kgsl_cmdstream_freememontimestamp_ctxtid)
371
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700372/* add a block of pmem or fb into the GPU address space */
373struct kgsl_sharedmem_from_pmem {
374 int pmem_fd;
375 unsigned int gpuaddr; /*output param */
376 unsigned int len;
377 unsigned int offset;
378};
379
380#define IOCTL_KGSL_SHAREDMEM_FROM_PMEM \
381 _IOWR(KGSL_IOC_TYPE, 0x20, struct kgsl_sharedmem_from_pmem)
382
383/* remove memory from the GPU's address space */
384struct kgsl_sharedmem_free {
385 unsigned int gpuaddr;
386};
387
388#define IOCTL_KGSL_SHAREDMEM_FREE \
389 _IOW(KGSL_IOC_TYPE, 0x21, struct kgsl_sharedmem_free)
390
Sushmita Susheelendra41f8fa32011-05-11 17:15:58 -0600391struct kgsl_cff_user_event {
392 unsigned char cff_opcode;
393 unsigned int op1;
394 unsigned int op2;
395 unsigned int op3;
396 unsigned int op4;
397 unsigned int op5;
398 unsigned int __pad[2];
399};
400
401#define IOCTL_KGSL_CFF_USER_EVENT \
402 _IOW(KGSL_IOC_TYPE, 0x31, struct kgsl_cff_user_event)
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700403
404struct kgsl_gmem_desc {
405 unsigned int x;
406 unsigned int y;
407 unsigned int width;
408 unsigned int height;
409 unsigned int pitch;
410};
411
412struct kgsl_buffer_desc {
413 void *hostptr;
414 unsigned int gpuaddr;
415 int size;
416 unsigned int format;
417 unsigned int pitch;
418 unsigned int enabled;
419};
420
421struct kgsl_bind_gmem_shadow {
422 unsigned int drawctxt_id;
423 struct kgsl_gmem_desc gmem_desc;
424 unsigned int shadow_x;
425 unsigned int shadow_y;
426 struct kgsl_buffer_desc shadow_buffer;
427 unsigned int buffer_id;
428};
429
430#define IOCTL_KGSL_DRAWCTXT_BIND_GMEM_SHADOW \
431 _IOW(KGSL_IOC_TYPE, 0x22, struct kgsl_bind_gmem_shadow)
432
433/* add a block of memory into the GPU address space */
Jordan Crousedb8cf392012-09-11 16:38:14 -0600434
435/*
436 * IOCTL_KGSL_SHAREDMEM_FROM_VMALLOC deprecated 09/2012
437 * use IOCTL_KGSL_GPUMEM_ALLOC instead
438 */
439
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700440struct kgsl_sharedmem_from_vmalloc {
441 unsigned int gpuaddr; /*output param */
442 unsigned int hostptr;
443 unsigned int flags;
444};
445
446#define IOCTL_KGSL_SHAREDMEM_FROM_VMALLOC \
447 _IOWR(KGSL_IOC_TYPE, 0x23, struct kgsl_sharedmem_from_vmalloc)
448
449#define IOCTL_KGSL_SHAREDMEM_FLUSH_CACHE \
450 _IOW(KGSL_IOC_TYPE, 0x24, struct kgsl_sharedmem_free)
451
452struct kgsl_drawctxt_set_bin_base_offset {
453 unsigned int drawctxt_id;
454 unsigned int offset;
455};
456
457#define IOCTL_KGSL_DRAWCTXT_SET_BIN_BASE_OFFSET \
458 _IOW(KGSL_IOC_TYPE, 0x25, struct kgsl_drawctxt_set_bin_base_offset)
459
460enum kgsl_cmdwindow_type {
461 KGSL_CMDWINDOW_MIN = 0x00000000,
462 KGSL_CMDWINDOW_2D = 0x00000000,
463 KGSL_CMDWINDOW_3D = 0x00000001, /* legacy */
464 KGSL_CMDWINDOW_MMU = 0x00000002,
465 KGSL_CMDWINDOW_ARBITER = 0x000000FF,
466 KGSL_CMDWINDOW_MAX = 0x000000FF,
467};
468
469/* write to the command window */
470struct kgsl_cmdwindow_write {
471 enum kgsl_cmdwindow_type target;
472 unsigned int addr;
473 unsigned int data;
474};
475
476#define IOCTL_KGSL_CMDWINDOW_WRITE \
477 _IOW(KGSL_IOC_TYPE, 0x2e, struct kgsl_cmdwindow_write)
478
479struct kgsl_gpumem_alloc {
480 unsigned long gpuaddr;
481 size_t size;
482 unsigned int flags;
483};
484
485#define IOCTL_KGSL_GPUMEM_ALLOC \
486 _IOWR(KGSL_IOC_TYPE, 0x2f, struct kgsl_gpumem_alloc)
487
Jeremy Gebbena7423e42011-04-18 15:11:21 -0600488struct kgsl_cff_syncmem {
489 unsigned int gpuaddr;
490 unsigned int len;
491 unsigned int __pad[2]; /* For future binary compatibility */
492};
493
494#define IOCTL_KGSL_CFF_SYNCMEM \
495 _IOW(KGSL_IOC_TYPE, 0x30, struct kgsl_cff_syncmem)
496
Jordan Croused4bc9d22011-11-17 13:39:21 -0700497/*
498 * A timestamp event allows the user space to register an action following an
Jeff Boodyfe6c39c2012-08-09 13:54:50 -0600499 * expired timestamp. Note IOCTL_KGSL_TIMESTAMP_EVENT has been redefined to
500 * _IOWR to support fences which need to return a fd for the priv parameter.
Jordan Croused4bc9d22011-11-17 13:39:21 -0700501 */
502
503struct kgsl_timestamp_event {
504 int type; /* Type of event (see list below) */
505 unsigned int timestamp; /* Timestamp to trigger event on */
506 unsigned int context_id; /* Context for the timestamp */
507 void *priv; /* Pointer to the event specific blob */
508 size_t len; /* Size of the event specific blob */
509};
510
Jeff Boodyfe6c39c2012-08-09 13:54:50 -0600511#define IOCTL_KGSL_TIMESTAMP_EVENT_OLD \
Jordan Croused4bc9d22011-11-17 13:39:21 -0700512 _IOW(KGSL_IOC_TYPE, 0x31, struct kgsl_timestamp_event)
513
514/* A genlock timestamp event releases an existing lock on timestamp expire */
515
516#define KGSL_TIMESTAMP_EVENT_GENLOCK 1
517
518struct kgsl_timestamp_event_genlock {
519 int handle; /* Handle of the genlock lock to release */
520};
521
Jeff Boodyfe6c39c2012-08-09 13:54:50 -0600522/* A fence timestamp event releases an existing lock on timestamp expire */
523
524#define KGSL_TIMESTAMP_EVENT_FENCE 2
525
526struct kgsl_timestamp_event_fence {
527 int fence_fd; /* Fence to signal */
528};
529
Jordan Crouseed7dd7f2012-03-29 13:16:02 -0600530/*
531 * Set a property within the kernel. Uses the same structure as
532 * IOCTL_KGSL_GETPROPERTY
533 */
534
535#define IOCTL_KGSL_SETPROPERTY \
536 _IOW(KGSL_IOC_TYPE, 0x32, struct kgsl_device_getproperty)
537
Jeff Boodyfe6c39c2012-08-09 13:54:50 -0600538#define IOCTL_KGSL_TIMESTAMP_EVENT \
539 _IOWR(KGSL_IOC_TYPE, 0x33, struct kgsl_timestamp_event)
540
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700541#ifdef __KERNEL__
542#ifdef CONFIG_MSM_KGSL_DRM
543int kgsl_gem_obj_addr(int drm_fd, int handle, unsigned long *start,
544 unsigned long *len);
545#else
546#define kgsl_gem_obj_addr(...) 0
547#endif
548#endif
549#endif /* _MSM_KGSL_H */