1e88f27b3Smrg#ifndef _KGSL_DRM_H_
2e88f27b3Smrg#define _KGSL_DRM_H_
3e88f27b3Smrg
4e88f27b3Smrg#include "drm.h"
5e88f27b3Smrg
6e88f27b3Smrg#define DRM_KGSL_GEM_CREATE 0x00
7e88f27b3Smrg#define DRM_KGSL_GEM_PREP   0x01
8e88f27b3Smrg#define DRM_KGSL_GEM_SETMEMTYPE 0x02
9e88f27b3Smrg#define DRM_KGSL_GEM_GETMEMTYPE 0x03
10e88f27b3Smrg#define DRM_KGSL_GEM_MMAP 0x04
11e88f27b3Smrg#define DRM_KGSL_GEM_ALLOC 0x05
12e88f27b3Smrg#define DRM_KGSL_GEM_BIND_GPU 0x06
13e88f27b3Smrg#define DRM_KGSL_GEM_UNBIND_GPU 0x07
14e88f27b3Smrg
15e88f27b3Smrg#define DRM_KGSL_GEM_GET_BUFINFO 0x08
16e88f27b3Smrg#define DRM_KGSL_GEM_SET_BUFCOUNT 0x09
17e88f27b3Smrg#define DRM_KGSL_GEM_SET_ACTIVE 0x0A
18e88f27b3Smrg#define DRM_KGSL_GEM_LOCK_HANDLE 0x0B
19e88f27b3Smrg#define DRM_KGSL_GEM_UNLOCK_HANDLE 0x0C
20e88f27b3Smrg#define DRM_KGSL_GEM_UNLOCK_ON_TS 0x0D
21e88f27b3Smrg#define DRM_KGSL_GEM_CREATE_FD 0x0E
22e88f27b3Smrg
23e88f27b3Smrg#define DRM_IOCTL_KGSL_GEM_CREATE \
24e88f27b3SmrgDRM_IOWR(DRM_COMMAND_BASE + DRM_KGSL_GEM_CREATE, struct drm_kgsl_gem_create)
25e88f27b3Smrg
26e88f27b3Smrg#define DRM_IOCTL_KGSL_GEM_PREP \
27e88f27b3SmrgDRM_IOWR(DRM_COMMAND_BASE + DRM_KGSL_GEM_PREP, struct drm_kgsl_gem_prep)
28e88f27b3Smrg
29e88f27b3Smrg#define DRM_IOCTL_KGSL_GEM_SETMEMTYPE \
30e88f27b3SmrgDRM_IOWR(DRM_COMMAND_BASE + DRM_KGSL_GEM_SETMEMTYPE, \
31e88f27b3Smrgstruct drm_kgsl_gem_memtype)
32e88f27b3Smrg
33e88f27b3Smrg#define DRM_IOCTL_KGSL_GEM_GETMEMTYPE \
34e88f27b3SmrgDRM_IOWR(DRM_COMMAND_BASE + DRM_KGSL_GEM_GETMEMTYPE, \
35e88f27b3Smrgstruct drm_kgsl_gem_memtype)
36e88f27b3Smrg
37e88f27b3Smrg#define DRM_IOCTL_KGSL_GEM_MMAP \
38e88f27b3SmrgDRM_IOWR(DRM_COMMAND_BASE + DRM_KGSL_GEM_MMAP, struct drm_kgsl_gem_mmap)
39e88f27b3Smrg
40e88f27b3Smrg#define DRM_IOCTL_KGSL_GEM_ALLOC \
41e88f27b3SmrgDRM_IOWR(DRM_COMMAND_BASE + DRM_KGSL_GEM_ALLOC, struct drm_kgsl_gem_alloc)
42e88f27b3Smrg
43e88f27b3Smrg#define DRM_IOCTL_KGSL_GEM_BIND_GPU \
44e88f27b3SmrgDRM_IOWR(DRM_COMMAND_BASE + DRM_KGSL_GEM_BIND_GPU, struct drm_kgsl_gem_bind_gpu)
45e88f27b3Smrg
46e88f27b3Smrg#define DRM_IOCTL_KGSL_GEM_UNBIND_GPU \
47e88f27b3SmrgDRM_IOWR(DRM_COMMAND_BASE + DRM_KGSL_GEM_UNBIND_GPU, \
48e88f27b3Smrgstruct drm_kgsl_gem_bind_gpu)
49e88f27b3Smrg
50e88f27b3Smrg#define DRM_IOCTL_KGSL_GEM_GET_BUFINFO \
51e88f27b3SmrgDRM_IOWR(DRM_COMMAND_BASE + DRM_KGSL_GEM_GET_BUFINFO, \
52e88f27b3Smrg	 struct drm_kgsl_gem_bufinfo)
53e88f27b3Smrg
54e88f27b3Smrg#define DRM_IOCTL_KGSL_GEM_SET_BUFCOUNT \
55e88f27b3SmrgDRM_IOWR(DRM_COMMAND_BASE + DRM_KGSL_GEM_SET_BUFCOUNT, \
56e88f27b3Smrg	 struct drm_kgsl_gem_bufcount)
57e88f27b3Smrg
58e88f27b3Smrg#define DRM_IOCTL_KGSL_GEM_SET_ACTIVE \
59e88f27b3SmrgDRM_IOWR(DRM_COMMAND_BASE + DRM_KGSL_GEM_SET_ACTIVE, \
60e88f27b3Smrg	 struct drm_kgsl_gem_active)
61e88f27b3Smrg
62e88f27b3Smrg#define DRM_IOCTL_KGSL_GEM_LOCK_HANDLE \
63e88f27b3SmrgDRM_IOWR(DRM_COMMAND_BASE + DRM_KGSL_GEM_LOCK_HANDLE, \
64e88f27b3Smrgstruct drm_kgsl_gem_lock_handles)
65e88f27b3Smrg
66e88f27b3Smrg#define DRM_IOCTL_KGSL_GEM_UNLOCK_HANDLE \
67e88f27b3SmrgDRM_IOWR(DRM_COMMAND_BASE + DRM_KGSL_GEM_UNLOCK_HANDLE, \
68e88f27b3Smrgstruct drm_kgsl_gem_unlock_handles)
69e88f27b3Smrg
70e88f27b3Smrg#define DRM_IOCTL_KGSL_GEM_UNLOCK_ON_TS \
71e88f27b3SmrgDRM_IOWR(DRM_COMMAND_BASE + DRM_KGSL_GEM_UNLOCK_ON_TS, \
72e88f27b3Smrgstruct drm_kgsl_gem_unlock_on_ts)
73e88f27b3Smrg
74e88f27b3Smrg#define DRM_IOCTL_KGSL_GEM_CREATE_FD \
75e88f27b3SmrgDRM_IOWR(DRM_COMMAND_BASE + DRM_KGSL_GEM_CREATE_FD, \
76e88f27b3Smrgstruct drm_kgsl_gem_create_fd)
77e88f27b3Smrg
78e88f27b3Smrg/* Maximum number of sub buffers per GEM object */
79e88f27b3Smrg#define DRM_KGSL_GEM_MAX_BUFFERS 2
80e88f27b3Smrg
81e88f27b3Smrg/* Memory types - these define the source and caching policies
82e88f27b3Smrg   of the GEM memory chunk */
83e88f27b3Smrg
843f012e29Smrg/* Legacy definitions left for compatibility */
85e88f27b3Smrg
86e88f27b3Smrg#define DRM_KGSL_GEM_TYPE_EBI          0
87e88f27b3Smrg#define DRM_KGSL_GEM_TYPE_SMI          1
88e88f27b3Smrg#define DRM_KGSL_GEM_TYPE_KMEM         2
89e88f27b3Smrg#define DRM_KGSL_GEM_TYPE_KMEM_NOCACHE 3
90e88f27b3Smrg#define DRM_KGSL_GEM_TYPE_MEM_MASK     0xF
91e88f27b3Smrg
92e88f27b3Smrg/* Contiguous memory (PMEM) */
93e88f27b3Smrg#define DRM_KGSL_GEM_TYPE_PMEM       0x000100
94e88f27b3Smrg
95e88f27b3Smrg/* PMEM memory types */
96e88f27b3Smrg#define DRM_KGSL_GEM_PMEM_EBI        0x001000
97e88f27b3Smrg#define DRM_KGSL_GEM_PMEM_SMI        0x002000
98e88f27b3Smrg
99e88f27b3Smrg/* Standard paged memory */
100e88f27b3Smrg#define DRM_KGSL_GEM_TYPE_MEM        0x010000
101e88f27b3Smrg
102e88f27b3Smrg/* Caching controls */
103e88f27b3Smrg#define DRM_KGSL_GEM_CACHE_NONE      0x000000
104e88f27b3Smrg#define DRM_KGSL_GEM_CACHE_WCOMBINE  0x100000
105e88f27b3Smrg#define DRM_KGSL_GEM_CACHE_WTHROUGH  0x200000
106e88f27b3Smrg#define DRM_KGSL_GEM_CACHE_WBACK     0x400000
107e88f27b3Smrg#define DRM_KGSL_GEM_CACHE_WBACKWA   0x800000
108e88f27b3Smrg#define DRM_KGSL_GEM_CACHE_MASK      0xF00000
109e88f27b3Smrg
110e88f27b3Smrg/* FD based objects */
111e88f27b3Smrg#define DRM_KGSL_GEM_TYPE_FD_FBMEM   0x1000000
112e88f27b3Smrg#define DRM_KGSL_GEM_TYPE_FD_MASK    0xF000000
113e88f27b3Smrg
114e88f27b3Smrg/* Timestamp types */
115e88f27b3Smrg#define DRM_KGSL_GEM_TS_3D         0x00000430
116e88f27b3Smrg#define DRM_KGSL_GEM_TS_2D         0x00000180
117e88f27b3Smrg
118e88f27b3Smrg
119e88f27b3Smrgstruct drm_kgsl_gem_create {
120e88f27b3Smrg	uint32_t size;
121e88f27b3Smrg	uint32_t handle;
122e88f27b3Smrg};
123e88f27b3Smrg
124e88f27b3Smrgstruct drm_kgsl_gem_prep {
125e88f27b3Smrg	uint32_t handle;
126e88f27b3Smrg	uint32_t phys;
127e88f27b3Smrg	uint64_t offset;
128e88f27b3Smrg};
129e88f27b3Smrg
130e88f27b3Smrgstruct drm_kgsl_gem_memtype {
131e88f27b3Smrg	uint32_t handle;
132e88f27b3Smrg	uint32_t type;
133e88f27b3Smrg};
134e88f27b3Smrg
135e88f27b3Smrgstruct drm_kgsl_gem_mmap {
136e88f27b3Smrg	uint32_t handle;
137e88f27b3Smrg	uint32_t size;
138e88f27b3Smrg	uint32_t hostptr;
139e88f27b3Smrg	uint64_t offset;
140e88f27b3Smrg};
141e88f27b3Smrg
142e88f27b3Smrgstruct drm_kgsl_gem_alloc {
143e88f27b3Smrg	uint32_t handle;
144e88f27b3Smrg	uint64_t offset;
145e88f27b3Smrg};
146e88f27b3Smrg
147e88f27b3Smrgstruct drm_kgsl_gem_bind_gpu {
148e88f27b3Smrg	uint32_t handle;
149e88f27b3Smrg	uint32_t gpuptr;
150e88f27b3Smrg};
151e88f27b3Smrg
152e88f27b3Smrgstruct drm_kgsl_gem_bufinfo {
153e88f27b3Smrg	uint32_t handle;
154e88f27b3Smrg	uint32_t count;
155e88f27b3Smrg	uint32_t active;
156e88f27b3Smrg	uint32_t offset[DRM_KGSL_GEM_MAX_BUFFERS];
157e88f27b3Smrg	uint32_t gpuaddr[DRM_KGSL_GEM_MAX_BUFFERS];
158e88f27b3Smrg};
159e88f27b3Smrg
160e88f27b3Smrgstruct drm_kgsl_gem_bufcount {
161e88f27b3Smrg	uint32_t handle;
162e88f27b3Smrg	uint32_t bufcount;
163e88f27b3Smrg};
164e88f27b3Smrg
165e88f27b3Smrgstruct drm_kgsl_gem_active {
166e88f27b3Smrg	uint32_t handle;
167e88f27b3Smrg	uint32_t active;
168e88f27b3Smrg};
169e88f27b3Smrg
170e88f27b3Smrgstruct drm_kgsl_gem_lock_handles {
171e88f27b3Smrg	uint32_t num_handles;
172e88f27b3Smrg	uint32_t *handle_list;
173e88f27b3Smrg	uint32_t pid;
174e88f27b3Smrg	uint32_t lock_id;	  /* Returned lock id used for unlocking */
175e88f27b3Smrg};
176e88f27b3Smrg
177e88f27b3Smrgstruct drm_kgsl_gem_unlock_handles {
178e88f27b3Smrg	uint32_t lock_id;
179e88f27b3Smrg};
180e88f27b3Smrg
181e88f27b3Smrgstruct drm_kgsl_gem_unlock_on_ts {
182e88f27b3Smrg	uint32_t lock_id;
183e88f27b3Smrg	uint32_t timestamp;	 /* This field is a hw generated ts */
184e88f27b3Smrg	uint32_t type;		 /* Which pipe to check for ts generation */
185e88f27b3Smrg};
186e88f27b3Smrg
187e88f27b3Smrgstruct drm_kgsl_gem_create_fd {
188e88f27b3Smrg	uint32_t fd;
189e88f27b3Smrg	uint32_t handle;
190e88f27b3Smrg};
191e88f27b3Smrg
192e88f27b3Smrg#endif
193