freedreno: add shifted reloc
[platform/upstream/libdrm.git] / freedreno / kgsl_drm.h
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