6 /* Please note that modifications to all structs defined here are
7 * subject to backwards-compatibility constraints.
12 /* Each region is a minimum of 16k, and there are at most 255 of them.
14 #define I915_NR_TEX_REGIONS 255 /* table size 2k - maximum due to use
15 * of chars for next/prev indices */
16 #define I915_LOG_MIN_TEX_REGION_SIZE 14
18 typedef struct _drm_i915_init {
21 I915_CLEANUP_DMA = 0x02,
22 I915_RESUME_DMA = 0x03
24 unsigned int mmio_offset;
25 int sarea_priv_offset;
26 unsigned int ring_start;
27 unsigned int ring_end;
28 unsigned int ring_size;
29 unsigned int front_offset;
30 unsigned int back_offset;
31 unsigned int depth_offset;
35 unsigned int pitch_bits;
36 unsigned int back_pitch;
37 unsigned int depth_pitch;
42 typedef struct _drm_i915_sarea {
43 drm_tex_region_t texList[I915_NR_TEX_REGIONS + 1];
44 int last_upload; /* last time texture was uploaded */
45 int last_enqueue; /* last time a buffer was enqueued */
46 int last_dispatch; /* age of the most recently dispatched buffer */
47 int ctxOwner; /* last context to upload state */
49 int pf_enabled; /* is pageflipping allowed? */
51 int pf_current_page; /* which buffer is being displayed? */
52 int perf_boxes; /* performance boxes to be displayed */
55 /* Flags for perf_boxes
57 #define I915_BOX_RING_EMPTY 0x1
58 #define I915_BOX_FLIP 0x2
59 #define I915_BOX_WAIT 0x4
60 #define I915_BOX_TEXTURE_LOAD 0x8
61 #define I915_BOX_LOST_CONTEXT 0x10
63 /* I915 specific ioctls
64 * The device specific ioctl range is 0x40 to 0x79.
66 #define DRM_I915_INIT 0x00
67 #define DRM_I915_FLUSH 0x01
68 #define DRM_I915_FLIP 0x02
69 #define DRM_I915_BATCHBUFFER 0x03
70 #define DRM_I915_IRQ_EMIT 0x04
71 #define DRM_I915_IRQ_WAIT 0x05
72 #define DRM_I915_GETPARAM 0x06
73 #define DRM_I915_SETPARAM 0x07
74 #define DRM_I915_ALLOC 0x08
75 #define DRM_I915_FREE 0x09
76 #define DRM_I915_INIT_HEAP 0x0a
77 #define DRM_I915_CMDBUFFER 0x0b
79 #define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)
80 #define DRM_IOCTL_I915_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH)
81 #define DRM_IOCTL_I915_FLIP DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLIP)
82 #define DRM_IOCTL_I915_BATCHBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_I915_BATCHBUFFER, drm_i915_batchbuffer_t)
83 #define DRM_IOCTL_I915_IRQ_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_IRQ_EMIT, drm_i915_irq_emit_t)
84 #define DRM_IOCTL_I915_IRQ_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_IRQ_WAIT, drm_i915_irq_wait_t)
85 #define DRM_IOCTL_I915_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GETPARAM, drm_i915_getparam_t)
86 #define DRM_IOCTL_I915_SETPARAM DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SETPARAM, drm_i915_setparam_t)
87 #define DRM_IOCTL_I915_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_ALLOC, drm_i915_mem_alloc_t)
88 #define DRM_IOCTL_I915_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_I915_FREE, drm_i915_mem_free_t)
89 #define DRM_IOCTL_I915_INIT_HEAP DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT_HEAP, drm_i915_mem_init_heap_t)
90 #define DRM_IOCTL_I915_CMDBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_I915_CMDBUFFER, drm_i915_cmdbuffer_t)
92 /* Allow drivers to submit batchbuffers directly to hardware, relying
93 * on the security mechanisms provided by hardware.
95 typedef struct _drm_i915_batchbuffer {
96 int start; /* agp offset */
97 int used; /* nr bytes in use */
98 int DR1; /* hw flags for GFX_OP_DRAWRECT_INFO */
99 int DR4; /* window origin for GFX_OP_DRAWRECT_INFO */
100 int num_cliprects; /* mulitpass with multiple cliprects? */
101 drm_clip_rect_t __user *cliprects; /* pointer to userspace cliprects */
102 } drm_i915_batchbuffer_t;
104 /* As above, but pass a pointer to userspace buffer which can be
105 * validated by the kernel prior to sending to hardware.
107 typedef struct _drm_i915_cmdbuffer {
108 char __user *buf; /* pointer to userspace command buffer */
109 int sz; /* nr bytes in buf */
110 int DR1; /* hw flags for GFX_OP_DRAWRECT_INFO */
111 int DR4; /* window origin for GFX_OP_DRAWRECT_INFO */
112 int num_cliprects; /* mulitpass with multiple cliprects? */
113 drm_clip_rect_t __user *cliprects; /* pointer to userspace cliprects */
114 } drm_i915_cmdbuffer_t;
116 /* Userspace can request & wait on irq's:
118 typedef struct drm_i915_irq_emit {
120 } drm_i915_irq_emit_t;
122 typedef struct drm_i915_irq_wait {
124 } drm_i915_irq_wait_t;
126 /* Ioctl to query kernel params:
128 #define I915_PARAM_IRQ_ACTIVE 1
129 #define I915_PARAM_ALLOW_BATCHBUFFER 2
131 typedef struct drm_i915_getparam {
134 } drm_i915_getparam_t;
136 /* Ioctl to set kernel params:
138 #define I915_SETPARAM_USE_MI_BATCHBUFFER_START 1
139 #define I915_SETPARAM_TEX_LRU_LOG_GRANULARITY 2
140 #define I915_SETPARAM_ALLOW_BATCHBUFFER 3
142 typedef struct drm_i915_setparam {
145 } drm_i915_setparam_t;
147 /* A memory manager for regions of shared memory:
149 #define I915_MEM_REGION_AGP 1
151 typedef struct drm_i915_mem_alloc {
155 int __user *region_offset; /* offset from start of fb or agp */
156 } drm_i915_mem_alloc_t;
158 typedef struct drm_i915_mem_free {
161 } drm_i915_mem_free_t;
163 typedef struct drm_i915_mem_init_heap {
167 } drm_i915_mem_init_heap_t;
169 #endif /* _I915_DRM_H_ */