Blame view

include/drm/i915_drm.h 26.4 KB
0d6aa60b4   Dave Airlie   drm: update to i9...
1
  /*
bc54fd1ad   Dave Airlie   Add missing licen...
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
   * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
   * All Rights Reserved.
   *
   * Permission is hereby granted, free of charge, to any person obtaining a
   * copy of this software and associated documentation files (the
   * "Software"), to deal in the Software without restriction, including
   * without limitation the rights to use, copy, modify, merge, publish,
   * distribute, sub license, and/or sell copies of the Software, and to
   * permit persons to whom the Software is furnished to do so, subject to
   * the following conditions:
   *
   * The above copyright notice and this permission notice (including the
   * next paragraph) shall be included in all copies or substantial portions
   * of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
   * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
   * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
   * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
   * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
   * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   *
0d6aa60b4   Dave Airlie   drm: update to i9...
25
   */
bc54fd1ad   Dave Airlie   Add missing licen...
26

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
27
28
  #ifndef _I915_DRM_H_
  #define _I915_DRM_H_
1a95916f5   Kristian Høgsberg   drm: Add compatib...
29
  #include "drm.h"
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
30
31
32
  /* Please note that modifications to all structs defined here are
   * subject to backwards-compatibility constraints.
   */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
33

aa7ffc01d   Jesse Barnes   x86 platform driv...
34
35
36
37
38
39
40
41
  #ifdef __KERNEL__
  /* For use by IPS driver */
  extern unsigned long i915_read_mch_val(void);
  extern bool i915_gpu_raise(void);
  extern bool i915_gpu_lower(void);
  extern bool i915_gpu_busy(void);
  extern bool i915_gpu_turbo_disable(void);
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
  /* Each region is a minimum of 16k, and there are at most 255 of them.
   */
  #define I915_NR_TEX_REGIONS 255	/* table size 2k - maximum due to use
  				 * of chars for next/prev indices */
  #define I915_LOG_MIN_TEX_REGION_SIZE 14
  
  typedef struct _drm_i915_init {
  	enum {
  		I915_INIT_DMA = 0x01,
  		I915_CLEANUP_DMA = 0x02,
  		I915_RESUME_DMA = 0x03
  	} func;
  	unsigned int mmio_offset;
  	int sarea_priv_offset;
  	unsigned int ring_start;
  	unsigned int ring_end;
  	unsigned int ring_size;
  	unsigned int front_offset;
  	unsigned int back_offset;
  	unsigned int depth_offset;
  	unsigned int w;
  	unsigned int h;
  	unsigned int pitch;
  	unsigned int pitch_bits;
  	unsigned int back_pitch;
  	unsigned int depth_pitch;
  	unsigned int cpp;
  	unsigned int chipset;
  } drm_i915_init_t;
  
  typedef struct _drm_i915_sarea {
c60ce623b   Dave Airlie   drm: remove a bun...
73
  	struct drm_tex_region texList[I915_NR_TEX_REGIONS + 1];
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
74
75
76
77
78
79
80
81
82
  	int last_upload;	/* last time texture was uploaded */
  	int last_enqueue;	/* last time a buffer was enqueued */
  	int last_dispatch;	/* age of the most recently dispatched buffer */
  	int ctxOwner;		/* last context to upload state */
  	int texAge;
  	int pf_enabled;		/* is pageflipping allowed? */
  	int pf_active;
  	int pf_current_page;	/* which buffer is being displayed? */
  	int perf_boxes;		/* performance boxes to be displayed */
de227f5f3   Dave Airlie   drm: i915 patches...
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
  	int width, height;      /* screen size in pixels */
  
  	drm_handle_t front_handle;
  	int front_offset;
  	int front_size;
  
  	drm_handle_t back_handle;
  	int back_offset;
  	int back_size;
  
  	drm_handle_t depth_handle;
  	int depth_offset;
  	int depth_size;
  
  	drm_handle_t tex_handle;
  	int tex_offset;
  	int tex_size;
  	int log_tex_granularity;
  	int pitch;
  	int rotation;           /* 0, 90, 180 or 270 */
  	int rotated_offset;
  	int rotated_size;
  	int rotated_pitch;
  	int virtualX, virtualY;
c29b669ca   Alan Hourihane   drm: Add support ...
107
108
109
110
111
112
  
  	unsigned int front_tiled;
  	unsigned int back_tiled;
  	unsigned int depth_tiled;
  	unsigned int rotated_tiled;
  	unsigned int rotated2_tiled;
376642cf2   Michel Dänzer   drm: i915: Add SA...
113

af6061af0   Dave Airlie   Revert "drm/vbl r...
114
115
116
117
118
119
120
121
  	int pipeA_x;
  	int pipeA_y;
  	int pipeA_w;
  	int pipeA_h;
  	int pipeB_x;
  	int pipeB_y;
  	int pipeB_w;
  	int pipeB_h;
dfef24592   Dave Airlie   i915/drm: provide...
122
123
124
  
  	/* fill out some space for old userspace triple buffer */
  	drm_handle_t unused_handle;
1d7f83d5a   Arnd Bergmann   make drm headers ...
125
  	__u32 unused1, unused2, unused3;
dfef24592   Dave Airlie   i915/drm: provide...
126
127
128
129
  
  	/* buffer object handles for static buffers. May change
  	 * over the lifetime of the client.
  	 */
1d7f83d5a   Arnd Bergmann   make drm headers ...
130
131
132
133
  	__u32 front_bo_handle;
  	__u32 back_bo_handle;
  	__u32 unused_bo_handle;
  	__u32 depth_bo_handle;
dfef24592   Dave Airlie   i915/drm: provide...
134

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
135
  } drm_i915_sarea_t;
dfef24592   Dave Airlie   i915/drm: provide...
136
137
138
139
140
141
142
143
144
  /* due to userspace building against these headers we need some compat here */
  #define planeA_x pipeA_x
  #define planeA_y pipeA_y
  #define planeA_w pipeA_w
  #define planeA_h pipeA_h
  #define planeB_x pipeB_x
  #define planeB_y pipeB_y
  #define planeB_w pipeB_w
  #define planeB_h pipeB_h
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
  /* Flags for perf_boxes
   */
  #define I915_BOX_RING_EMPTY    0x1
  #define I915_BOX_FLIP          0x2
  #define I915_BOX_WAIT          0x4
  #define I915_BOX_TEXTURE_LOAD  0x8
  #define I915_BOX_LOST_CONTEXT  0x10
  
  /* I915 specific ioctls
   * The device specific ioctl range is 0x40 to 0x79.
   */
  #define DRM_I915_INIT		0x00
  #define DRM_I915_FLUSH		0x01
  #define DRM_I915_FLIP		0x02
  #define DRM_I915_BATCHBUFFER	0x03
  #define DRM_I915_IRQ_EMIT	0x04
  #define DRM_I915_IRQ_WAIT	0x05
  #define DRM_I915_GETPARAM	0x06
  #define DRM_I915_SETPARAM	0x07
  #define DRM_I915_ALLOC		0x08
  #define DRM_I915_FREE		0x09
  #define DRM_I915_INIT_HEAP	0x0a
  #define DRM_I915_CMDBUFFER	0x0b
de227f5f3   Dave Airlie   drm: i915 patches...
168
  #define DRM_I915_DESTROY_HEAP	0x0c
702880f24   Dave Airlie   Add i915 ioctls t...
169
170
  #define DRM_I915_SET_VBLANK_PIPE	0x0d
  #define DRM_I915_GET_VBLANK_PIPE	0x0e
a6b54f3f5   Michel Dänzer   drm: i915: Add io...
171
  #define DRM_I915_VBLANK_SWAP	0x0f
dc7a93190   Wang Zhenyu   drm/i915: Add su...
172
  #define DRM_I915_HWS_ADDR	0x11
673a394b1   Eric Anholt   drm: Add GEM ("gr...
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
  #define DRM_I915_GEM_INIT	0x13
  #define DRM_I915_GEM_EXECBUFFER	0x14
  #define DRM_I915_GEM_PIN	0x15
  #define DRM_I915_GEM_UNPIN	0x16
  #define DRM_I915_GEM_BUSY	0x17
  #define DRM_I915_GEM_THROTTLE	0x18
  #define DRM_I915_GEM_ENTERVT	0x19
  #define DRM_I915_GEM_LEAVEVT	0x1a
  #define DRM_I915_GEM_CREATE	0x1b
  #define DRM_I915_GEM_PREAD	0x1c
  #define DRM_I915_GEM_PWRITE	0x1d
  #define DRM_I915_GEM_MMAP	0x1e
  #define DRM_I915_GEM_SET_DOMAIN	0x1f
  #define DRM_I915_GEM_SW_FINISH	0x20
  #define DRM_I915_GEM_SET_TILING	0x21
  #define DRM_I915_GEM_GET_TILING	0x22
5a125c3c7   Eric Anholt   i915: Add GEM ioc...
189
  #define DRM_I915_GEM_GET_APERTURE 0x23
de151cf67   Jesse Barnes   drm/i915: add GEM...
190
  #define DRM_I915_GEM_MMAP_GTT	0x24
08d7b3d1e   Carl Worth   drm/i915: Add new...
191
  #define DRM_I915_GET_PIPE_FROM_CRTC_ID	0x25
3ef94daae   Chris Wilson   drm/i915: Add ioc...
192
  #define DRM_I915_GEM_MADVISE	0x26
02e792fba   Daniel Vetter   drm/i915: impleme...
193
194
  #define DRM_I915_OVERLAY_PUT_IMAGE	0x27
  #define DRM_I915_OVERLAY_ATTRS	0x28
76446cac6   Jesse Barnes   drm/i915: execbuf...
195
  #define DRM_I915_GEM_EXECBUFFER2	0x29
8ea308642   Jesse Barnes   drm/i915: add col...
196
197
  #define DRM_I915_GET_SPRITE_COLORKEY	0x2a
  #define DRM_I915_SET_SPRITE_COLORKEY	0x2b
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
198
199
200
  
  #define DRM_IOCTL_I915_INIT		DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)
  #define DRM_IOCTL_I915_FLUSH		DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH)
af6061af0   Dave Airlie   Revert "drm/vbl r...
201
  #define DRM_IOCTL_I915_FLIP		DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLIP)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
202
203
204
205
206
207
208
209
210
  #define DRM_IOCTL_I915_BATCHBUFFER	DRM_IOW( DRM_COMMAND_BASE + DRM_I915_BATCHBUFFER, drm_i915_batchbuffer_t)
  #define DRM_IOCTL_I915_IRQ_EMIT         DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_IRQ_EMIT, drm_i915_irq_emit_t)
  #define DRM_IOCTL_I915_IRQ_WAIT         DRM_IOW( DRM_COMMAND_BASE + DRM_I915_IRQ_WAIT, drm_i915_irq_wait_t)
  #define DRM_IOCTL_I915_GETPARAM         DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GETPARAM, drm_i915_getparam_t)
  #define DRM_IOCTL_I915_SETPARAM         DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SETPARAM, drm_i915_setparam_t)
  #define DRM_IOCTL_I915_ALLOC            DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_ALLOC, drm_i915_mem_alloc_t)
  #define DRM_IOCTL_I915_FREE             DRM_IOW( DRM_COMMAND_BASE + DRM_I915_FREE, drm_i915_mem_free_t)
  #define DRM_IOCTL_I915_INIT_HEAP        DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT_HEAP, drm_i915_mem_init_heap_t)
  #define DRM_IOCTL_I915_CMDBUFFER	DRM_IOW( DRM_COMMAND_BASE + DRM_I915_CMDBUFFER, drm_i915_cmdbuffer_t)
de227f5f3   Dave Airlie   drm: i915 patches...
211
  #define DRM_IOCTL_I915_DESTROY_HEAP	DRM_IOW( DRM_COMMAND_BASE + DRM_I915_DESTROY_HEAP, drm_i915_mem_destroy_heap_t)
702880f24   Dave Airlie   Add i915 ioctls t...
212
213
  #define DRM_IOCTL_I915_SET_VBLANK_PIPE	DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SET_VBLANK_PIPE, drm_i915_vblank_pipe_t)
  #define DRM_IOCTL_I915_GET_VBLANK_PIPE	DRM_IOR( DRM_COMMAND_BASE + DRM_I915_GET_VBLANK_PIPE, drm_i915_vblank_pipe_t)
541f29aad   Michel Dänzer   drm: DRM_I915_VBL...
214
  #define DRM_IOCTL_I915_VBLANK_SWAP	DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_VBLANK_SWAP, drm_i915_vblank_swap_t)
1b2f14896   Dave Airlie   drm: block usersp...
215
  #define DRM_IOCTL_I915_HWS_ADDR		DRM_IOW(DRM_COMMAND_BASE + DRM_I915_HWS_ADDR, struct drm_i915_gem_init)
8d391aa41   Eric Anholt   drm/i915: Add mis...
216
217
  #define DRM_IOCTL_I915_GEM_INIT		DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_INIT, struct drm_i915_gem_init)
  #define DRM_IOCTL_I915_GEM_EXECBUFFER	DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER, struct drm_i915_gem_execbuffer)
76446cac6   Jesse Barnes   drm/i915: execbuf...
218
  #define DRM_IOCTL_I915_GEM_EXECBUFFER2	DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER2, struct drm_i915_gem_execbuffer2)
673a394b1   Eric Anholt   drm: Add GEM ("gr...
219
220
221
222
223
224
225
226
227
228
  #define DRM_IOCTL_I915_GEM_PIN		DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_PIN, struct drm_i915_gem_pin)
  #define DRM_IOCTL_I915_GEM_UNPIN	DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_UNPIN, struct drm_i915_gem_unpin)
  #define DRM_IOCTL_I915_GEM_BUSY		DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_BUSY, struct drm_i915_gem_busy)
  #define DRM_IOCTL_I915_GEM_THROTTLE	DRM_IO ( DRM_COMMAND_BASE + DRM_I915_GEM_THROTTLE)
  #define DRM_IOCTL_I915_GEM_ENTERVT	DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_ENTERVT)
  #define DRM_IOCTL_I915_GEM_LEAVEVT	DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_LEAVEVT)
  #define DRM_IOCTL_I915_GEM_CREATE	DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_CREATE, struct drm_i915_gem_create)
  #define DRM_IOCTL_I915_GEM_PREAD	DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_PREAD, struct drm_i915_gem_pread)
  #define DRM_IOCTL_I915_GEM_PWRITE	DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_PWRITE, struct drm_i915_gem_pwrite)
  #define DRM_IOCTL_I915_GEM_MMAP		DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MMAP, struct drm_i915_gem_mmap)
de151cf67   Jesse Barnes   drm/i915: add GEM...
229
  #define DRM_IOCTL_I915_GEM_MMAP_GTT	DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MMAP_GTT, struct drm_i915_gem_mmap_gtt)
673a394b1   Eric Anholt   drm: Add GEM ("gr...
230
231
232
233
  #define DRM_IOCTL_I915_GEM_SET_DOMAIN	DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_SET_DOMAIN, struct drm_i915_gem_set_domain)
  #define DRM_IOCTL_I915_GEM_SW_FINISH	DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_SW_FINISH, struct drm_i915_gem_sw_finish)
  #define DRM_IOCTL_I915_GEM_SET_TILING	DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_SET_TILING, struct drm_i915_gem_set_tiling)
  #define DRM_IOCTL_I915_GEM_GET_TILING	DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_TILING, struct drm_i915_gem_get_tiling)
5a125c3c7   Eric Anholt   i915: Add GEM ioc...
234
  #define DRM_IOCTL_I915_GEM_GET_APERTURE	DRM_IOR  (DRM_COMMAND_BASE + DRM_I915_GEM_GET_APERTURE, struct drm_i915_gem_get_aperture)
04b2d2180   Kristian Høgsberg   drm/i915: Fix typ...
235
  #define DRM_IOCTL_I915_GET_PIPE_FROM_CRTC_ID DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GET_PIPE_FROM_CRTC_ID, struct drm_i915_get_pipe_from_crtc_id)
3ef94daae   Chris Wilson   drm/i915: Add ioc...
236
  #define DRM_IOCTL_I915_GEM_MADVISE	DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MADVISE, struct drm_i915_gem_madvise)
842d45298   Ole Henrik Jahren   drm/i915: Fix typ...
237
  #define DRM_IOCTL_I915_OVERLAY_PUT_IMAGE	DRM_IOW(DRM_COMMAND_BASE + DRM_I915_OVERLAY_PUT_IMAGE, struct drm_intel_overlay_put_image)
02e792fba   Daniel Vetter   drm/i915: impleme...
238
  #define DRM_IOCTL_I915_OVERLAY_ATTRS	DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_OVERLAY_ATTRS, struct drm_intel_overlay_attrs)
8ea308642   Jesse Barnes   drm/i915: add col...
239
240
  #define DRM_IOCTL_I915_SET_SPRITE_COLORKEY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_SET_SPRITE_COLORKEY, struct drm_intel_sprite_colorkey)
  #define DRM_IOCTL_I915_GET_SPRITE_COLORKEY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_SET_SPRITE_COLORKEY, struct drm_intel_sprite_colorkey)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
241
242
243
244
  
  /* Allow drivers to submit batchbuffers directly to hardware, relying
   * on the security mechanisms provided by hardware.
   */
79e539453   Jesse Barnes   DRM: i915: add mo...
245
  typedef struct drm_i915_batchbuffer {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
246
247
248
249
250
  	int start;		/* agp offset */
  	int used;		/* nr bytes in use */
  	int DR1;		/* hw flags for GFX_OP_DRAWRECT_INFO */
  	int DR4;		/* window origin for GFX_OP_DRAWRECT_INFO */
  	int num_cliprects;	/* mulitpass with multiple cliprects? */
c60ce623b   Dave Airlie   drm: remove a bun...
251
  	struct drm_clip_rect __user *cliprects;	/* pointer to userspace cliprects */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
252
253
254
255
256
257
258
259
260
261
262
  } drm_i915_batchbuffer_t;
  
  /* As above, but pass a pointer to userspace buffer which can be
   * validated by the kernel prior to sending to hardware.
   */
  typedef struct _drm_i915_cmdbuffer {
  	char __user *buf;	/* pointer to userspace command buffer */
  	int sz;			/* nr bytes in buf */
  	int DR1;		/* hw flags for GFX_OP_DRAWRECT_INFO */
  	int DR4;		/* window origin for GFX_OP_DRAWRECT_INFO */
  	int num_cliprects;	/* mulitpass with multiple cliprects? */
c60ce623b   Dave Airlie   drm: remove a bun...
263
  	struct drm_clip_rect __user *cliprects;	/* pointer to userspace cliprects */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
  } drm_i915_cmdbuffer_t;
  
  /* Userspace can request & wait on irq's:
   */
  typedef struct drm_i915_irq_emit {
  	int __user *irq_seq;
  } drm_i915_irq_emit_t;
  
  typedef struct drm_i915_irq_wait {
  	int irq_seq;
  } drm_i915_irq_wait_t;
  
  /* Ioctl to query kernel params:
   */
  #define I915_PARAM_IRQ_ACTIVE            1
  #define I915_PARAM_ALLOW_BATCHBUFFER     2
0d6aa60b4   Dave Airlie   drm: update to i9...
280
  #define I915_PARAM_LAST_DISPATCH         3
ed4c9c4ac   Kristian Høgsberg   i915: Add chip se...
281
  #define I915_PARAM_CHIPSET_ID            4
673a394b1   Eric Anholt   drm: Add GEM ("gr...
282
  #define I915_PARAM_HAS_GEM               5
0f973f278   Jesse Barnes   drm/i915: add fen...
283
  #define I915_PARAM_NUM_FENCES_AVAIL      6
02e792fba   Daniel Vetter   drm/i915: impleme...
284
  #define I915_PARAM_HAS_OVERLAY           7
e9560f7cb   Jesse Barnes   drm/i915: add GET...
285
  #define I915_PARAM_HAS_PAGEFLIPPING	 8
76446cac6   Jesse Barnes   drm/i915: execbuf...
286
  #define I915_PARAM_HAS_EXECBUF2          9
e3a815fcd   Zou Nan hai   drm/i915: add HAS...
287
  #define I915_PARAM_HAS_BSD		 10
549f73658   Chris Wilson   drm/i915: Enable ...
288
  #define I915_PARAM_HAS_BLT		 11
bbf0c6b36   Daniel Vetter   drm/i915: announc...
289
290
  #define I915_PARAM_HAS_RELAXED_FENCING	 12
  #define I915_PARAM_HAS_COHERENT_RINGS	 13
72bfa19c8   Chris Wilson   drm/i915: Allow t...
291
  #define I915_PARAM_HAS_EXEC_CONSTANTS	 14
271d81b84   Chris Wilson   drm/i915: Allow r...
292
  #define I915_PARAM_HAS_RELAXED_DELTA	 15
ae662d312   Eric Anholt   drm/i915: Add sup...
293
  #define I915_PARAM_HAS_GEN7_SOL_RESET	 16
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
294
295
296
297
298
299
300
301
302
303
304
  
  typedef struct drm_i915_getparam {
  	int param;
  	int __user *value;
  } drm_i915_getparam_t;
  
  /* Ioctl to set kernel params:
   */
  #define I915_SETPARAM_USE_MI_BATCHBUFFER_START            1
  #define I915_SETPARAM_TEX_LRU_LOG_GRANULARITY             2
  #define I915_SETPARAM_ALLOW_BATCHBUFFER                   3
0f973f278   Jesse Barnes   drm/i915: add fen...
305
  #define I915_SETPARAM_NUM_USED_FENCES                     4
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
  
  typedef struct drm_i915_setparam {
  	int param;
  	int value;
  } drm_i915_setparam_t;
  
  /* A memory manager for regions of shared memory:
   */
  #define I915_MEM_REGION_AGP 1
  
  typedef struct drm_i915_mem_alloc {
  	int region;
  	int alignment;
  	int size;
  	int __user *region_offset;	/* offset from start of fb or agp */
  } drm_i915_mem_alloc_t;
  
  typedef struct drm_i915_mem_free {
  	int region;
  	int region_offset;
  } drm_i915_mem_free_t;
  
  typedef struct drm_i915_mem_init_heap {
  	int region;
  	int size;
  	int start;
  } drm_i915_mem_init_heap_t;
de227f5f3   Dave Airlie   drm: i915 patches...
333
334
335
336
337
338
  /* Allow memory manager to be torn down and re-initialized (eg on
   * rotate):
   */
  typedef struct drm_i915_mem_destroy_heap {
  	int region;
  } drm_i915_mem_destroy_heap_t;
702880f24   Dave Airlie   Add i915 ioctls t...
339
340
341
342
343
344
345
346
  /* Allow X server to configure which pipes to monitor for vblank signals
   */
  #define	DRM_I915_VBLANK_PIPE_A	1
  #define	DRM_I915_VBLANK_PIPE_B	2
  
  typedef struct drm_i915_vblank_pipe {
  	int pipe;
  } drm_i915_vblank_pipe_t;
a6b54f3f5   Michel Dänzer   drm: i915: Add io...
347
348
349
350
  /* Schedule buffer swap at given vertical blank:
   */
  typedef struct drm_i915_vblank_swap {
  	drm_drawable_t drawable;
c60ce623b   Dave Airlie   drm: remove a bun...
351
  	enum drm_vblank_seq_type seqtype;
a6b54f3f5   Michel Dänzer   drm: i915: Add io...
352
353
  	unsigned int sequence;
  } drm_i915_vblank_swap_t;
dc7a93190   Wang Zhenyu   drm/i915: Add su...
354
  typedef struct drm_i915_hws_addr {
1d7f83d5a   Arnd Bergmann   make drm headers ...
355
  	__u64 addr;
dc7a93190   Wang Zhenyu   drm/i915: Add su...
356
  } drm_i915_hws_addr_t;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
357
358
359
360
361
  struct drm_i915_gem_init {
  	/**
  	 * Beginning offset in the GTT to be managed by the DRM memory
  	 * manager.
  	 */
1d7f83d5a   Arnd Bergmann   make drm headers ...
362
  	__u64 gtt_start;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
363
364
365
366
  	/**
  	 * Ending offset in the GTT to be managed by the DRM memory
  	 * manager.
  	 */
1d7f83d5a   Arnd Bergmann   make drm headers ...
367
  	__u64 gtt_end;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
368
369
370
371
372
373
374
375
  };
  
  struct drm_i915_gem_create {
  	/**
  	 * Requested size for the object.
  	 *
  	 * The (page-aligned) allocated size for the object will be returned.
  	 */
1d7f83d5a   Arnd Bergmann   make drm headers ...
376
  	__u64 size;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
377
378
379
380
381
  	/**
  	 * Returned handle for the object.
  	 *
  	 * Object handles are nonzero.
  	 */
1d7f83d5a   Arnd Bergmann   make drm headers ...
382
383
  	__u32 handle;
  	__u32 pad;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
384
385
386
387
  };
  
  struct drm_i915_gem_pread {
  	/** Handle for the object being read. */
1d7f83d5a   Arnd Bergmann   make drm headers ...
388
389
  	__u32 handle;
  	__u32 pad;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
390
  	/** Offset into the object to read from */
1d7f83d5a   Arnd Bergmann   make drm headers ...
391
  	__u64 offset;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
392
  	/** Length of data to read */
1d7f83d5a   Arnd Bergmann   make drm headers ...
393
  	__u64 size;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
394
395
396
397
398
  	/**
  	 * Pointer to write the data into.
  	 *
  	 * This is a fixed-size type for 32/64 compatibility.
  	 */
1d7f83d5a   Arnd Bergmann   make drm headers ...
399
  	__u64 data_ptr;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
400
401
402
403
  };
  
  struct drm_i915_gem_pwrite {
  	/** Handle for the object being written to. */
1d7f83d5a   Arnd Bergmann   make drm headers ...
404
405
  	__u32 handle;
  	__u32 pad;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
406
  	/** Offset into the object to write to */
1d7f83d5a   Arnd Bergmann   make drm headers ...
407
  	__u64 offset;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
408
  	/** Length of data to write */
1d7f83d5a   Arnd Bergmann   make drm headers ...
409
  	__u64 size;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
410
411
412
413
414
  	/**
  	 * Pointer to read the data from.
  	 *
  	 * This is a fixed-size type for 32/64 compatibility.
  	 */
1d7f83d5a   Arnd Bergmann   make drm headers ...
415
  	__u64 data_ptr;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
416
417
418
419
  };
  
  struct drm_i915_gem_mmap {
  	/** Handle for the object being mapped. */
1d7f83d5a   Arnd Bergmann   make drm headers ...
420
421
  	__u32 handle;
  	__u32 pad;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
422
  	/** Offset in the object to map. */
1d7f83d5a   Arnd Bergmann   make drm headers ...
423
  	__u64 offset;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
424
425
426
427
428
  	/**
  	 * Length of data to map.
  	 *
  	 * The value will be page-aligned.
  	 */
1d7f83d5a   Arnd Bergmann   make drm headers ...
429
  	__u64 size;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
430
431
432
433
434
  	/**
  	 * Returned pointer the data was mapped at.
  	 *
  	 * This is a fixed-size type for 32/64 compatibility.
  	 */
1d7f83d5a   Arnd Bergmann   make drm headers ...
435
  	__u64 addr_ptr;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
436
  };
de151cf67   Jesse Barnes   drm/i915: add GEM...
437
438
  struct drm_i915_gem_mmap_gtt {
  	/** Handle for the object being mapped. */
1d7f83d5a   Arnd Bergmann   make drm headers ...
439
440
  	__u32 handle;
  	__u32 pad;
de151cf67   Jesse Barnes   drm/i915: add GEM...
441
442
443
444
445
  	/**
  	 * Fake offset to use for subsequent mmap call
  	 *
  	 * This is a fixed-size type for 32/64 compatibility.
  	 */
1d7f83d5a   Arnd Bergmann   make drm headers ...
446
  	__u64 offset;
de151cf67   Jesse Barnes   drm/i915: add GEM...
447
  };
673a394b1   Eric Anholt   drm: Add GEM ("gr...
448
449
  struct drm_i915_gem_set_domain {
  	/** Handle for the object */
1d7f83d5a   Arnd Bergmann   make drm headers ...
450
  	__u32 handle;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
451
452
  
  	/** New read domains */
1d7f83d5a   Arnd Bergmann   make drm headers ...
453
  	__u32 read_domains;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
454
455
  
  	/** New write domain */
1d7f83d5a   Arnd Bergmann   make drm headers ...
456
  	__u32 write_domain;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
457
458
459
460
  };
  
  struct drm_i915_gem_sw_finish {
  	/** Handle for the object */
1d7f83d5a   Arnd Bergmann   make drm headers ...
461
  	__u32 handle;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
462
463
464
465
466
467
468
469
470
471
472
  };
  
  struct drm_i915_gem_relocation_entry {
  	/**
  	 * Handle of the buffer being pointed to by this relocation entry.
  	 *
  	 * It's appealing to make this be an index into the mm_validate_entry
  	 * list to refer to the buffer, but this allows the driver to create
  	 * a relocation list for state buffers and not re-write it per
  	 * exec using the buffer.
  	 */
1d7f83d5a   Arnd Bergmann   make drm headers ...
473
  	__u32 target_handle;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
474
475
476
477
478
  
  	/**
  	 * Value to be added to the offset of the target buffer to make up
  	 * the relocation entry.
  	 */
1d7f83d5a   Arnd Bergmann   make drm headers ...
479
  	__u32 delta;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
480
481
  
  	/** Offset in the buffer the relocation entry will be written into */
1d7f83d5a   Arnd Bergmann   make drm headers ...
482
  	__u64 offset;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
483
484
485
486
487
488
489
490
491
  
  	/**
  	 * Offset value of the target buffer that the relocation entry was last
  	 * written as.
  	 *
  	 * If the buffer has the same offset as last time, we can skip syncing
  	 * and writing the relocation.  This value is written back out by
  	 * the execbuffer ioctl when the relocation is written.
  	 */
1d7f83d5a   Arnd Bergmann   make drm headers ...
492
  	__u64 presumed_offset;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
493
494
495
496
  
  	/**
  	 * Target memory domains read by this operation.
  	 */
1d7f83d5a   Arnd Bergmann   make drm headers ...
497
  	__u32 read_domains;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
498
499
500
501
502
503
504
505
  
  	/**
  	 * Target memory domains written by this operation.
  	 *
  	 * Note that only one domain may be written by the whole
  	 * execbuffer operation, so that where there are conflicts,
  	 * the application will get -EINVAL back.
  	 */
1d7f83d5a   Arnd Bergmann   make drm headers ...
506
  	__u32 write_domain;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
  };
  
  /** @{
   * Intel memory domains
   *
   * Most of these just align with the various caches in
   * the system and are used to flush and invalidate as
   * objects end up cached in different domains.
   */
  /** CPU cache */
  #define I915_GEM_DOMAIN_CPU		0x00000001
  /** Render cache, used by 2D and 3D drawing */
  #define I915_GEM_DOMAIN_RENDER		0x00000002
  /** Sampler cache, used by texture engine */
  #define I915_GEM_DOMAIN_SAMPLER		0x00000004
  /** Command queue, used to load batch buffers */
  #define I915_GEM_DOMAIN_COMMAND		0x00000008
  /** Instruction cache, used by shader programs */
  #define I915_GEM_DOMAIN_INSTRUCTION	0x00000010
  /** Vertex address cache */
  #define I915_GEM_DOMAIN_VERTEX		0x00000020
  /** GTT domain - aperture and scanout */
  #define I915_GEM_DOMAIN_GTT		0x00000040
  /** @} */
  
  struct drm_i915_gem_exec_object {
  	/**
  	 * User's handle for a buffer to be bound into the GTT for this
  	 * operation.
  	 */
1d7f83d5a   Arnd Bergmann   make drm headers ...
537
  	__u32 handle;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
538
539
  
  	/** Number of relocations to be performed on this buffer */
1d7f83d5a   Arnd Bergmann   make drm headers ...
540
  	__u32 relocation_count;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
541
542
543
544
  	/**
  	 * Pointer to array of struct drm_i915_gem_relocation_entry containing
  	 * the relocations to be performed in this buffer.
  	 */
1d7f83d5a   Arnd Bergmann   make drm headers ...
545
  	__u64 relocs_ptr;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
546
547
  
  	/** Required alignment in graphics aperture */
1d7f83d5a   Arnd Bergmann   make drm headers ...
548
  	__u64 alignment;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
549
550
551
552
553
  
  	/**
  	 * Returned value of the updated offset of the object, for future
  	 * presumed_offset writes.
  	 */
1d7f83d5a   Arnd Bergmann   make drm headers ...
554
  	__u64 offset;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
555
556
557
558
559
560
561
562
563
564
565
566
567
  };
  
  struct drm_i915_gem_execbuffer {
  	/**
  	 * List of buffers to be validated with their relocations to be
  	 * performend on them.
  	 *
  	 * This is a pointer to an array of struct drm_i915_gem_validate_entry.
  	 *
  	 * These buffers must be listed in an order such that all relocations
  	 * a buffer is performing refer to buffers that have already appeared
  	 * in the validate list.
  	 */
1d7f83d5a   Arnd Bergmann   make drm headers ...
568
569
  	__u64 buffers_ptr;
  	__u32 buffer_count;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
570
571
  
  	/** Offset in the batchbuffer to start execution from. */
1d7f83d5a   Arnd Bergmann   make drm headers ...
572
  	__u32 batch_start_offset;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
573
  	/** Bytes used in batchbuffer from batch_start_offset */
1d7f83d5a   Arnd Bergmann   make drm headers ...
574
575
576
577
  	__u32 batch_len;
  	__u32 DR1;
  	__u32 DR4;
  	__u32 num_cliprects;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
578
  	/** This is a struct drm_clip_rect *cliprects */
1d7f83d5a   Arnd Bergmann   make drm headers ...
579
  	__u64 cliprects_ptr;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
580
  };
76446cac6   Jesse Barnes   drm/i915: execbuf...
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
  struct drm_i915_gem_exec_object2 {
  	/**
  	 * User's handle for a buffer to be bound into the GTT for this
  	 * operation.
  	 */
  	__u32 handle;
  
  	/** Number of relocations to be performed on this buffer */
  	__u32 relocation_count;
  	/**
  	 * Pointer to array of struct drm_i915_gem_relocation_entry containing
  	 * the relocations to be performed in this buffer.
  	 */
  	__u64 relocs_ptr;
  
  	/** Required alignment in graphics aperture */
  	__u64 alignment;
  
  	/**
  	 * Returned value of the updated offset of the object, for future
  	 * presumed_offset writes.
  	 */
  	__u64 offset;
  
  #define EXEC_OBJECT_NEEDS_FENCE (1<<0)
  	__u64 flags;
  	__u64 rsvd1;
  	__u64 rsvd2;
  };
  
  struct drm_i915_gem_execbuffer2 {
  	/**
  	 * List of gem_exec_object2 structs
  	 */
  	__u64 buffers_ptr;
  	__u32 buffer_count;
  
  	/** Offset in the batchbuffer to start execution from. */
  	__u32 batch_start_offset;
  	/** Bytes used in batchbuffer from batch_start_offset */
  	__u32 batch_len;
  	__u32 DR1;
  	__u32 DR4;
  	__u32 num_cliprects;
  	/** This is a struct drm_clip_rect *cliprects */
  	__u64 cliprects_ptr;
549f73658   Chris Wilson   drm/i915: Enable ...
627
628
  #define I915_EXEC_RING_MASK              (7<<0)
  #define I915_EXEC_DEFAULT                (0<<0)
8187a2b70   Zou Nan hai   drm/i915: introdu...
629
  #define I915_EXEC_RENDER                 (1<<0)
549f73658   Chris Wilson   drm/i915: Enable ...
630
631
  #define I915_EXEC_BSD                    (2<<0)
  #define I915_EXEC_BLT                    (3<<0)
72bfa19c8   Chris Wilson   drm/i915: Allow t...
632
633
634
635
636
637
638
639
640
641
642
  
  /* Used for switching the constants addressing mode on gen4+ RENDER ring.
   * Gen6+ only supports relative addressing to dynamic state (default) and
   * absolute addressing.
   *
   * These flags are ignored for the BSD and BLT rings.
   */
  #define I915_EXEC_CONSTANTS_MASK 	(3<<6)
  #define I915_EXEC_CONSTANTS_REL_GENERAL (0<<6) /* default */
  #define I915_EXEC_CONSTANTS_ABSOLUTE 	(1<<6)
  #define I915_EXEC_CONSTANTS_REL_SURFACE (2<<6) /* gen4/5 only */
8187a2b70   Zou Nan hai   drm/i915: introdu...
643
  	__u64 flags;
76446cac6   Jesse Barnes   drm/i915: execbuf...
644
645
646
  	__u64 rsvd1;
  	__u64 rsvd2;
  };
ae662d312   Eric Anholt   drm/i915: Add sup...
647
648
  /** Resets the SO write offset registers for transform feedback on gen7. */
  #define I915_EXEC_GEN7_SOL_RESET	(1<<8)
673a394b1   Eric Anholt   drm: Add GEM ("gr...
649
650
  struct drm_i915_gem_pin {
  	/** Handle of the buffer to be pinned. */
1d7f83d5a   Arnd Bergmann   make drm headers ...
651
652
  	__u32 handle;
  	__u32 pad;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
653
654
  
  	/** alignment required within the aperture */
1d7f83d5a   Arnd Bergmann   make drm headers ...
655
  	__u64 alignment;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
656
657
  
  	/** Returned GTT offset of the buffer. */
1d7f83d5a   Arnd Bergmann   make drm headers ...
658
  	__u64 offset;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
659
660
661
662
  };
  
  struct drm_i915_gem_unpin {
  	/** Handle of the buffer to be unpinned. */
1d7f83d5a   Arnd Bergmann   make drm headers ...
663
664
  	__u32 handle;
  	__u32 pad;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
665
666
667
668
  };
  
  struct drm_i915_gem_busy {
  	/** Handle of the buffer to check for busy */
1d7f83d5a   Arnd Bergmann   make drm headers ...
669
  	__u32 handle;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
670
671
  
  	/** Return busy status (1 if busy, 0 if idle) */
1d7f83d5a   Arnd Bergmann   make drm headers ...
672
  	__u32 busy;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
673
674
675
676
677
678
679
680
681
682
683
684
685
  };
  
  #define I915_TILING_NONE	0
  #define I915_TILING_X		1
  #define I915_TILING_Y		2
  
  #define I915_BIT_6_SWIZZLE_NONE		0
  #define I915_BIT_6_SWIZZLE_9		1
  #define I915_BIT_6_SWIZZLE_9_10		2
  #define I915_BIT_6_SWIZZLE_9_11		3
  #define I915_BIT_6_SWIZZLE_9_10_11	4
  /* Not seen by userland */
  #define I915_BIT_6_SWIZZLE_UNKNOWN	5
280b713b5   Eric Anholt   drm/i915: Allow t...
686
687
688
  /* Seen by userland. */
  #define I915_BIT_6_SWIZZLE_9_17		6
  #define I915_BIT_6_SWIZZLE_9_10_17	7
673a394b1   Eric Anholt   drm: Add GEM ("gr...
689
690
691
  
  struct drm_i915_gem_set_tiling {
  	/** Handle of the buffer to have its tiling state updated */
1d7f83d5a   Arnd Bergmann   make drm headers ...
692
  	__u32 handle;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
693
694
695
696
697
698
699
700
701
702
703
704
705
  
  	/**
  	 * Tiling mode for the object (I915_TILING_NONE, I915_TILING_X,
  	 * I915_TILING_Y).
  	 *
  	 * This value is to be set on request, and will be updated by the
  	 * kernel on successful return with the actual chosen tiling layout.
  	 *
  	 * The tiling mode may be demoted to I915_TILING_NONE when the system
  	 * has bit 6 swizzling that can't be managed correctly by GEM.
  	 *
  	 * Buffer contents become undefined when changing tiling_mode.
  	 */
1d7f83d5a   Arnd Bergmann   make drm headers ...
706
  	__u32 tiling_mode;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
707
708
709
710
711
  
  	/**
  	 * Stride in bytes for the object when in I915_TILING_X or
  	 * I915_TILING_Y.
  	 */
1d7f83d5a   Arnd Bergmann   make drm headers ...
712
  	__u32 stride;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
713
714
715
716
717
  
  	/**
  	 * Returned address bit 6 swizzling required for CPU access through
  	 * mmap mapping.
  	 */
1d7f83d5a   Arnd Bergmann   make drm headers ...
718
  	__u32 swizzle_mode;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
719
720
721
722
  };
  
  struct drm_i915_gem_get_tiling {
  	/** Handle of the buffer to get tiling state for. */
1d7f83d5a   Arnd Bergmann   make drm headers ...
723
  	__u32 handle;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
724
725
726
727
728
  
  	/**
  	 * Current tiling mode for the object (I915_TILING_NONE, I915_TILING_X,
  	 * I915_TILING_Y).
  	 */
1d7f83d5a   Arnd Bergmann   make drm headers ...
729
  	__u32 tiling_mode;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
730
731
732
733
734
  
  	/**
  	 * Returned address bit 6 swizzling required for CPU access through
  	 * mmap mapping.
  	 */
1d7f83d5a   Arnd Bergmann   make drm headers ...
735
  	__u32 swizzle_mode;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
736
  };
5a125c3c7   Eric Anholt   i915: Add GEM ioc...
737
738
  struct drm_i915_gem_get_aperture {
  	/** Total size of the aperture used by i915_gem_execbuffer, in bytes */
1d7f83d5a   Arnd Bergmann   make drm headers ...
739
  	__u64 aper_size;
5a125c3c7   Eric Anholt   i915: Add GEM ioc...
740
741
742
743
744
  
  	/**
  	 * Available space in the aperture used by i915_gem_execbuffer, in
  	 * bytes
  	 */
1d7f83d5a   Arnd Bergmann   make drm headers ...
745
  	__u64 aper_available_size;
5a125c3c7   Eric Anholt   i915: Add GEM ioc...
746
  };
08d7b3d1e   Carl Worth   drm/i915: Add new...
747
748
749
750
751
752
753
  struct drm_i915_get_pipe_from_crtc_id {
  	/** ID of CRTC being requested **/
  	__u32 crtc_id;
  
  	/** pipe of requested CRTC **/
  	__u32 pipe;
  };
3ef94daae   Chris Wilson   drm/i915: Add ioc...
754
755
  #define I915_MADV_WILLNEED 0
  #define I915_MADV_DONTNEED 1
bb6baf76f   Chris Wilson   drm/i915: Track p...
756
  #define __I915_MADV_PURGED 2 /* internal state */
3ef94daae   Chris Wilson   drm/i915: Add ioc...
757
758
759
760
761
762
763
764
765
766
767
768
769
  
  struct drm_i915_gem_madvise {
  	/** Handle of the buffer to change the backing store advice */
  	__u32 handle;
  
  	/* Advice: either the buffer will be needed again in the near future,
  	 *         or wont be and could be discarded under memory pressure.
  	 */
  	__u32 madv;
  
  	/** Whether the backing store still exists. */
  	__u32 retained;
  };
02e792fba   Daniel Vetter   drm/i915: impleme...
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
  /* flags */
  #define I915_OVERLAY_TYPE_MASK 		0xff
  #define I915_OVERLAY_YUV_PLANAR 	0x01
  #define I915_OVERLAY_YUV_PACKED 	0x02
  #define I915_OVERLAY_RGB		0x03
  
  #define I915_OVERLAY_DEPTH_MASK		0xff00
  #define I915_OVERLAY_RGB24		0x1000
  #define I915_OVERLAY_RGB16		0x2000
  #define I915_OVERLAY_RGB15		0x3000
  #define I915_OVERLAY_YUV422		0x0100
  #define I915_OVERLAY_YUV411		0x0200
  #define I915_OVERLAY_YUV420		0x0300
  #define I915_OVERLAY_YUV410		0x0400
  
  #define I915_OVERLAY_SWAP_MASK		0xff0000
  #define I915_OVERLAY_NO_SWAP		0x000000
  #define I915_OVERLAY_UV_SWAP		0x010000
  #define I915_OVERLAY_Y_SWAP		0x020000
  #define I915_OVERLAY_Y_AND_UV_SWAP	0x030000
  
  #define I915_OVERLAY_FLAGS_MASK		0xff000000
  #define I915_OVERLAY_ENABLE		0x01000000
  
  struct drm_intel_overlay_put_image {
  	/* various flags and src format description */
  	__u32 flags;
  	/* source picture description */
  	__u32 bo_handle;
  	/* stride values and offsets are in bytes, buffer relative */
  	__u16 stride_Y; /* stride for packed formats */
  	__u16 stride_UV;
  	__u32 offset_Y; /* offset for packet formats */
  	__u32 offset_U;
  	__u32 offset_V;
  	/* in pixels */
  	__u16 src_width;
  	__u16 src_height;
  	/* to compensate the scaling factors for partially covered surfaces */
  	__u16 src_scan_width;
  	__u16 src_scan_height;
  	/* output crtc description */
  	__u32 crtc_id;
  	__u16 dst_x;
  	__u16 dst_y;
  	__u16 dst_width;
  	__u16 dst_height;
  };
  
  /* flags */
  #define I915_OVERLAY_UPDATE_ATTRS	(1<<0)
  #define I915_OVERLAY_UPDATE_GAMMA	(1<<1)
  struct drm_intel_overlay_attrs {
  	__u32 flags;
  	__u32 color_key;
  	__s32 brightness;
  	__u32 contrast;
  	__u32 saturation;
  	__u32 gamma0;
  	__u32 gamma1;
  	__u32 gamma2;
  	__u32 gamma3;
  	__u32 gamma4;
  	__u32 gamma5;
  };
8ea308642   Jesse Barnes   drm/i915: add col...
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
  /*
   * Intel sprite handling
   *
   * Color keying works with a min/mask/max tuple.  Both source and destination
   * color keying is allowed.
   *
   * Source keying:
   * Sprite pixels within the min & max values, masked against the color channels
   * specified in the mask field, will be transparent.  All other pixels will
   * be displayed on top of the primary plane.  For RGB surfaces, only the min
   * and mask fields will be used; ranged compares are not allowed.
   *
   * Destination keying:
   * Primary plane pixels that match the min value, masked against the color
   * channels specified in the mask field, will be replaced by corresponding
   * pixels from the sprite plane.
   *
   * Note that source & destination keying are exclusive; only one can be
   * active on a given plane.
   */
  
  #define I915_SET_COLORKEY_NONE		(1<<0) /* disable color key matching */
  #define I915_SET_COLORKEY_DESTINATION	(1<<1)
  #define I915_SET_COLORKEY_SOURCE	(1<<2)
  struct drm_intel_sprite_colorkey {
  	__u32 plane_id;
  	__u32 min_value;
  	__u32 channel_mask;
  	__u32 max_value;
  	__u32 flags;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
866
  #endif				/* _I915_DRM_H_ */