i915_drm.h 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. /**************************************************************************
  2. *
  3. * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
  4. * All Rights Reserved.
  5. *
  6. * Permission is hereby granted, free of charge, to any person obtaining a
  7. * copy of this software and associated documentation files (the
  8. * "Software"), to deal in the Software without restriction, including
  9. * without limitation the rights to use, copy, modify, merge, publish,
  10. * distribute, sub license, and/or sell copies of the Software, and to
  11. * permit persons to whom the Software is furnished to do so, subject to
  12. * the following conditions:
  13. *
  14. * The above copyright notice and this permission notice (including the
  15. * next paragraph) shall be included in all copies or substantial portions
  16. * of the Software.
  17. *
  18. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  19. * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  20. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
  21. * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
  22. * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  23. * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  24. * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  25. *
  26. **************************************************************************/
  27. #ifndef _I915_DRM_H_
  28. #define _I915_DRM_H_
  29. /* Please note that modifications to all structs defined here are
  30. * subject to backwards-compatibility constraints.
  31. */
  32. #include "drm.h"
  33. /* Each region is a minimum of 16k, and there are at most 255 of them.
  34. */
  35. #define I915_NR_TEX_REGIONS 255 /* table size 2k - maximum due to use
  36. * of chars for next/prev indices */
  37. #define I915_LOG_MIN_TEX_REGION_SIZE 14
  38. typedef struct _drm_i915_init {
  39. enum {
  40. I915_INIT_DMA = 0x01,
  41. I915_CLEANUP_DMA = 0x02,
  42. I915_RESUME_DMA = 0x03
  43. } func;
  44. unsigned int mmio_offset;
  45. int sarea_priv_offset;
  46. unsigned int ring_start;
  47. unsigned int ring_end;
  48. unsigned int ring_size;
  49. unsigned int front_offset;
  50. unsigned int back_offset;
  51. unsigned int depth_offset;
  52. unsigned int w;
  53. unsigned int h;
  54. unsigned int pitch;
  55. unsigned int pitch_bits;
  56. unsigned int back_pitch;
  57. unsigned int depth_pitch;
  58. unsigned int cpp;
  59. unsigned int chipset;
  60. } drm_i915_init_t;
  61. typedef struct _drm_i915_sarea {
  62. drm_tex_region_t texList[I915_NR_TEX_REGIONS + 1];
  63. int last_upload; /* last time texture was uploaded */
  64. int last_enqueue; /* last time a buffer was enqueued */
  65. int last_dispatch; /* age of the most recently dispatched buffer */
  66. int ctxOwner; /* last context to upload state */
  67. int texAge;
  68. int pf_enabled; /* is pageflipping allowed? */
  69. int pf_active;
  70. int pf_current_page; /* which buffer is being displayed? */
  71. int perf_boxes; /* performance boxes to be displayed */
  72. } drm_i915_sarea_t;
  73. /* Flags for perf_boxes
  74. */
  75. #define I915_BOX_RING_EMPTY 0x1
  76. #define I915_BOX_FLIP 0x2
  77. #define I915_BOX_WAIT 0x4
  78. #define I915_BOX_TEXTURE_LOAD 0x8
  79. #define I915_BOX_LOST_CONTEXT 0x10
  80. /* I915 specific ioctls
  81. * The device specific ioctl range is 0x40 to 0x79.
  82. */
  83. #define DRM_I915_INIT 0x00
  84. #define DRM_I915_FLUSH 0x01
  85. #define DRM_I915_FLIP 0x02
  86. #define DRM_I915_BATCHBUFFER 0x03
  87. #define DRM_I915_IRQ_EMIT 0x04
  88. #define DRM_I915_IRQ_WAIT 0x05
  89. #define DRM_I915_GETPARAM 0x06
  90. #define DRM_I915_SETPARAM 0x07
  91. #define DRM_I915_ALLOC 0x08
  92. #define DRM_I915_FREE 0x09
  93. #define DRM_I915_INIT_HEAP 0x0a
  94. #define DRM_I915_CMDBUFFER 0x0b
  95. #define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)
  96. #define DRM_IOCTL_I915_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH)
  97. #define DRM_IOCTL_I915_FLIP DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLIP)
  98. #define DRM_IOCTL_I915_BATCHBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_I915_BATCHBUFFER, drm_i915_batchbuffer_t)
  99. #define DRM_IOCTL_I915_IRQ_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_IRQ_EMIT, drm_i915_irq_emit_t)
  100. #define DRM_IOCTL_I915_IRQ_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_IRQ_WAIT, drm_i915_irq_wait_t)
  101. #define DRM_IOCTL_I915_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GETPARAM, drm_i915_getparam_t)
  102. #define DRM_IOCTL_I915_SETPARAM DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SETPARAM, drm_i915_setparam_t)
  103. #define DRM_IOCTL_I915_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_ALLOC, drm_i915_mem_alloc_t)
  104. #define DRM_IOCTL_I915_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_I915_FREE, drm_i915_mem_free_t)
  105. #define DRM_IOCTL_I915_INIT_HEAP DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT_HEAP, drm_i915_mem_init_heap_t)
  106. #define DRM_IOCTL_I915_CMDBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_I915_CMDBUFFER, drm_i915_cmdbuffer_t)
  107. /* Allow drivers to submit batchbuffers directly to hardware, relying
  108. * on the security mechanisms provided by hardware.
  109. */
  110. typedef struct _drm_i915_batchbuffer {
  111. int start; /* agp offset */
  112. int used; /* nr bytes in use */
  113. int DR1; /* hw flags for GFX_OP_DRAWRECT_INFO */
  114. int DR4; /* window origin for GFX_OP_DRAWRECT_INFO */
  115. int num_cliprects; /* mulitpass with multiple cliprects? */
  116. drm_clip_rect_t __user *cliprects; /* pointer to userspace cliprects */
  117. } drm_i915_batchbuffer_t;
  118. /* As above, but pass a pointer to userspace buffer which can be
  119. * validated by the kernel prior to sending to hardware.
  120. */
  121. typedef struct _drm_i915_cmdbuffer {
  122. char __user *buf; /* pointer to userspace command buffer */
  123. int sz; /* nr bytes in buf */
  124. int DR1; /* hw flags for GFX_OP_DRAWRECT_INFO */
  125. int DR4; /* window origin for GFX_OP_DRAWRECT_INFO */
  126. int num_cliprects; /* mulitpass with multiple cliprects? */
  127. drm_clip_rect_t __user *cliprects; /* pointer to userspace cliprects */
  128. } drm_i915_cmdbuffer_t;
  129. /* Userspace can request & wait on irq's:
  130. */
  131. typedef struct drm_i915_irq_emit {
  132. int __user *irq_seq;
  133. } drm_i915_irq_emit_t;
  134. typedef struct drm_i915_irq_wait {
  135. int irq_seq;
  136. } drm_i915_irq_wait_t;
  137. /* Ioctl to query kernel params:
  138. */
  139. #define I915_PARAM_IRQ_ACTIVE 1
  140. #define I915_PARAM_ALLOW_BATCHBUFFER 2
  141. typedef struct drm_i915_getparam {
  142. int param;
  143. int __user *value;
  144. } drm_i915_getparam_t;
  145. /* Ioctl to set kernel params:
  146. */
  147. #define I915_SETPARAM_USE_MI_BATCHBUFFER_START 1
  148. #define I915_SETPARAM_TEX_LRU_LOG_GRANULARITY 2
  149. #define I915_SETPARAM_ALLOW_BATCHBUFFER 3
  150. typedef struct drm_i915_setparam {
  151. int param;
  152. int value;
  153. } drm_i915_setparam_t;
  154. /* A memory manager for regions of shared memory:
  155. */
  156. #define I915_MEM_REGION_AGP 1
  157. typedef struct drm_i915_mem_alloc {
  158. int region;
  159. int alignment;
  160. int size;
  161. int __user *region_offset; /* offset from start of fb or agp */
  162. } drm_i915_mem_alloc_t;
  163. typedef struct drm_i915_mem_free {
  164. int region;
  165. int region_offset;
  166. } drm_i915_mem_free_t;
  167. typedef struct drm_i915_mem_init_heap {
  168. int region;
  169. int size;
  170. int start;
  171. } drm_i915_mem_init_heap_t;
  172. #endif /* _I915_DRM_H_ */