FreeBSD/Linux Kernel Cross Reference
sys/dev/drm/i915_drm.h
1 /*-
2 * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
3 * All Rights Reserved.
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the
7 * "Software"), to deal in the Software without restriction, including
8 * without limitation the rights to use, copy, modify, merge, publish,
9 * distribute, sub license, and/or sell copies of the Software, and to
10 * permit persons to whom the Software is furnished to do so, subject to
11 * the following conditions:
12 *
13 * The above copyright notice and this permission notice (including the
14 * next paragraph) shall be included in all copies or substantial portions
15 * of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
20 * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
21 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 *
25 */
26
27 #include <sys/cdefs.h>
28 __FBSDID("$FreeBSD: releng/6.4/sys/dev/drm/i915_drm.h 166475 2007-02-03 20:01:54Z flz $");
29
30 #ifndef _I915_DRM_H_
31 #define _I915_DRM_H_
32
33 /* Please note that modifications to all structs defined here are
34 * subject to backwards-compatibility constraints.
35 */
36
37 #include "dev/drm/drm.h"
38
39 /* Each region is a minimum of 16k, and there are at most 255 of them.
40 */
41 #define I915_NR_TEX_REGIONS 255 /* table size 2k - maximum due to use
42 * of chars for next/prev indices */
43 #define I915_LOG_MIN_TEX_REGION_SIZE 14
44
45 typedef struct _drm_i915_init {
46 enum {
47 I915_INIT_DMA = 0x01,
48 I915_CLEANUP_DMA = 0x02,
49 I915_RESUME_DMA = 0x03
50 } func;
51 unsigned int mmio_offset;
52 int sarea_priv_offset;
53 unsigned int ring_start;
54 unsigned int ring_end;
55 unsigned int ring_size;
56 unsigned int front_offset;
57 unsigned int back_offset;
58 unsigned int depth_offset;
59 unsigned int w;
60 unsigned int h;
61 unsigned int pitch;
62 unsigned int pitch_bits;
63 unsigned int back_pitch;
64 unsigned int depth_pitch;
65 unsigned int cpp;
66 unsigned int chipset;
67 } drm_i915_init_t;
68
69 typedef struct _drm_i915_sarea {
70 drm_tex_region_t texList[I915_NR_TEX_REGIONS + 1];
71 int last_upload; /* last time texture was uploaded */
72 int last_enqueue; /* last time a buffer was enqueued */
73 int last_dispatch; /* age of the most recently dispatched buffer */
74 int ctxOwner; /* last context to upload state */
75 int texAge;
76 int pf_enabled; /* is pageflipping allowed? */
77 int pf_active;
78 int pf_current_page; /* which buffer is being displayed? */
79 int perf_boxes; /* performance boxes to be displayed */
80 int width, height; /* screen size in pixels */
81
82 drm_handle_t front_handle;
83 int front_offset;
84 int front_size;
85
86 drm_handle_t back_handle;
87 int back_offset;
88 int back_size;
89
90 drm_handle_t depth_handle;
91 int depth_offset;
92 int depth_size;
93
94 drm_handle_t tex_handle;
95 int tex_offset;
96 int tex_size;
97 int log_tex_granularity;
98 int pitch;
99 int rotation; /* 0, 90, 180 or 270 */
100 int rotated_offset;
101 int rotated_size;
102 int rotated_pitch;
103 int virtualX, virtualY;
104
105 unsigned int front_tiled;
106 unsigned int back_tiled;
107 unsigned int depth_tiled;
108 unsigned int rotated_tiled;
109 unsigned int rotated2_tiled;
110 } drm_i915_sarea_t;
111
112 /* Flags for perf_boxes
113 */
114 #define I915_BOX_RING_EMPTY 0x1
115 #define I915_BOX_FLIP 0x2
116 #define I915_BOX_WAIT 0x4
117 #define I915_BOX_TEXTURE_LOAD 0x8
118 #define I915_BOX_LOST_CONTEXT 0x10
119
120 /* I915 specific ioctls
121 * The device specific ioctl range is 0x40 to 0x79.
122 */
123 #define DRM_I915_INIT 0x00
124 #define DRM_I915_FLUSH 0x01
125 #define DRM_I915_FLIP 0x02
126 #define DRM_I915_BATCHBUFFER 0x03
127 #define DRM_I915_IRQ_EMIT 0x04
128 #define DRM_I915_IRQ_WAIT 0x05
129 #define DRM_I915_GETPARAM 0x06
130 #define DRM_I915_SETPARAM 0x07
131 #define DRM_I915_ALLOC 0x08
132 #define DRM_I915_FREE 0x09
133 #define DRM_I915_INIT_HEAP 0x0a
134 #define DRM_I915_CMDBUFFER 0x0b
135 #define DRM_I915_DESTROY_HEAP 0x0c
136 #define DRM_I915_SET_VBLANK_PIPE 0x0d
137 #define DRM_I915_GET_VBLANK_PIPE 0x0e
138
139 #define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)
140 #define DRM_IOCTL_I915_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH)
141 #define DRM_IOCTL_I915_FLIP DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLIP)
142 #define DRM_IOCTL_I915_BATCHBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_I915_BATCHBUFFER, drm_i915_batchbuffer_t)
143 #define DRM_IOCTL_I915_IRQ_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_IRQ_EMIT, drm_i915_irq_emit_t)
144 #define DRM_IOCTL_I915_IRQ_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_IRQ_WAIT, drm_i915_irq_wait_t)
145 #define DRM_IOCTL_I915_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GETPARAM, drm_i915_getparam_t)
146 #define DRM_IOCTL_I915_SETPARAM DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SETPARAM, drm_i915_setparam_t)
147 #define DRM_IOCTL_I915_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_ALLOC, drm_i915_mem_alloc_t)
148 #define DRM_IOCTL_I915_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_I915_FREE, drm_i915_mem_free_t)
149 #define DRM_IOCTL_I915_INIT_HEAP DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT_HEAP, drm_i915_mem_init_heap_t)
150 #define DRM_IOCTL_I915_CMDBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_I915_CMDBUFFER, drm_i915_cmdbuffer_t)
151 #define DRM_IOCTL_I915_DESTROY_HEAP DRM_IOW( DRM_COMMAND_BASE + DRM_I915_DESTROY_HEAP, drm_i915_mem_destroy_heap_t)
152 #define DRM_IOCTL_I915_SET_VBLANK_PIPE DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SET_VBLANK_PIPE, drm_i915_vblank_pipe_t)
153 #define DRM_IOCTL_I915_GET_VBLANK_PIPE DRM_IOR( DRM_COMMAND_BASE + DRM_I915_GET_VBLANK_PIPE, drm_i915_vblank_pipe_t)
154
155
156 /* Allow drivers to submit batchbuffers directly to hardware, relying
157 * on the security mechanisms provided by hardware.
158 */
159 typedef struct _drm_i915_batchbuffer {
160 int start; /* agp offset */
161 int used; /* nr bytes in use */
162 int DR1; /* hw flags for GFX_OP_DRAWRECT_INFO */
163 int DR4; /* window origin for GFX_OP_DRAWRECT_INFO */
164 int num_cliprects; /* mulitpass with multiple cliprects? */
165 drm_clip_rect_t __user *cliprects; /* pointer to userspace cliprects */
166 } drm_i915_batchbuffer_t;
167
168 /* As above, but pass a pointer to userspace buffer which can be
169 * validated by the kernel prior to sending to hardware.
170 */
171 typedef struct _drm_i915_cmdbuffer {
172 char __user *buf; /* pointer to userspace command buffer */
173 int sz; /* nr bytes in buf */
174 int DR1; /* hw flags for GFX_OP_DRAWRECT_INFO */
175 int DR4; /* window origin for GFX_OP_DRAWRECT_INFO */
176 int num_cliprects; /* mulitpass with multiple cliprects? */
177 drm_clip_rect_t __user *cliprects; /* pointer to userspace cliprects */
178 } drm_i915_cmdbuffer_t;
179
180 /* Userspace can request & wait on irq's:
181 */
182 typedef struct drm_i915_irq_emit {
183 int __user *irq_seq;
184 } drm_i915_irq_emit_t;
185
186 typedef struct drm_i915_irq_wait {
187 int irq_seq;
188 } drm_i915_irq_wait_t;
189
190 /* Ioctl to query kernel params:
191 */
192 #define I915_PARAM_IRQ_ACTIVE 1
193 #define I915_PARAM_ALLOW_BATCHBUFFER 2
194 #define I915_PARAM_LAST_DISPATCH 3
195
196 typedef struct drm_i915_getparam {
197 int param;
198 int __user *value;
199 } drm_i915_getparam_t;
200
201 /* Ioctl to set kernel params:
202 */
203 #define I915_SETPARAM_USE_MI_BATCHBUFFER_START 1
204 #define I915_SETPARAM_TEX_LRU_LOG_GRANULARITY 2
205 #define I915_SETPARAM_ALLOW_BATCHBUFFER 3
206
207 typedef struct drm_i915_setparam {
208 int param;
209 int value;
210 } drm_i915_setparam_t;
211
212 /* A memory manager for regions of shared memory:
213 */
214 #define I915_MEM_REGION_AGP 1
215
216 typedef struct drm_i915_mem_alloc {
217 int region;
218 int alignment;
219 int size;
220 int __user *region_offset; /* offset from start of fb or agp */
221 } drm_i915_mem_alloc_t;
222
223 typedef struct drm_i915_mem_free {
224 int region;
225 int region_offset;
226 } drm_i915_mem_free_t;
227
228 typedef struct drm_i915_mem_init_heap {
229 int region;
230 int size;
231 int start;
232 } drm_i915_mem_init_heap_t;
233
234 /* Allow memory manager to be torn down and re-initialized (eg on
235 * rotate):
236 */
237 typedef struct drm_i915_mem_destroy_heap {
238 int region;
239 } drm_i915_mem_destroy_heap_t;
240
241 /* Allow X server to configure which pipes to monitor for vblank signals
242 */
243 #define DRM_I915_VBLANK_PIPE_A 1
244 #define DRM_I915_VBLANK_PIPE_B 2
245
246 typedef struct drm_i915_vblank_pipe {
247 int pipe;
248 } drm_i915_vblank_pipe_t;
249
250 #endif /* _I915_DRM_H_ */
Cache object: d9ef3fbad9ff4121214193e552e6c10c
|