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