The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/drm/i915_drm.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    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$");
   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 
   51                 /* Since this struct isn't versioned, just used a new
   52                  * 'func' code to indicate the presence of dri2 sarea
   53                  * info. */
   54                 I915_INIT_DMA2 = 0x04
   55         } func;
   56         unsigned int mmio_offset;
   57         int sarea_priv_offset;
   58         unsigned int ring_start;
   59         unsigned int ring_end;
   60         unsigned int ring_size;
   61         unsigned int front_offset;
   62         unsigned int back_offset;
   63         unsigned int depth_offset;
   64         unsigned int w;
   65         unsigned int h;
   66         unsigned int pitch;
   67         unsigned int pitch_bits;
   68         unsigned int back_pitch;
   69         unsigned int depth_pitch;
   70         unsigned int cpp;
   71         unsigned int chipset;
   72         unsigned int sarea_handle;
   73 } drm_i915_init_t;
   74 
   75 typedef struct drm_i915_sarea {
   76         struct drm_tex_region texList[I915_NR_TEX_REGIONS + 1];
   77         int last_upload;        /* last time texture was uploaded */
   78         int last_enqueue;       /* last time a buffer was enqueued */
   79         int last_dispatch;      /* age of the most recently dispatched buffer */
   80         int ctxOwner;           /* last context to upload state */
   81         int texAge;
   82         int pf_enabled;         /* is pageflipping allowed? */
   83         int pf_active;
   84         int pf_current_page;    /* which buffer is being displayed? */
   85         int perf_boxes;         /* performance boxes to be displayed */
   86         int width, height;      /* screen size in pixels */
   87 
   88         drm_handle_t front_handle;
   89         int front_offset;
   90         int front_size;
   91 
   92         drm_handle_t back_handle;
   93         int back_offset;
   94         int back_size;
   95 
   96         drm_handle_t depth_handle;
   97         int depth_offset;
   98         int depth_size;
   99 
  100         drm_handle_t tex_handle;
  101         int tex_offset;
  102         int tex_size;
  103         int log_tex_granularity;
  104         int pitch;
  105         int rotation;           /* 0, 90, 180 or 270 */
  106         int rotated_offset;
  107         int rotated_size;
  108         int rotated_pitch;
  109         int virtualX, virtualY;
  110 
  111         unsigned int front_tiled;
  112         unsigned int back_tiled;
  113         unsigned int depth_tiled;
  114         unsigned int rotated_tiled;
  115         unsigned int rotated2_tiled;
  116 
  117         int planeA_x;
  118         int planeA_y;
  119         int planeA_w;
  120         int planeA_h;
  121         int planeB_x;
  122         int planeB_y;
  123         int planeB_w;
  124         int planeB_h;
  125 
  126         /* Triple buffering */
  127         drm_handle_t third_handle;
  128         int third_offset;
  129         int third_size;
  130         unsigned int third_tiled;
  131 
  132         /* buffer object handles for the static buffers.  May change
  133          * over the lifetime of the client, though it doesn't in our current
  134          * implementation.
  135          */
  136         unsigned int front_bo_handle;
  137         unsigned int back_bo_handle;
  138         unsigned int third_bo_handle;
  139         unsigned int depth_bo_handle;
  140 } drm_i915_sarea_t;
  141 
  142 /* Driver specific fence types and classes.
  143  */
  144 
  145 /* The only fence class we support */
  146 #define DRM_I915_FENCE_CLASS_ACCEL 0
  147 /* Fence type that guarantees read-write flush */
  148 #define DRM_I915_FENCE_TYPE_RW 2
  149 /* MI_FLUSH programmed just before the fence */
  150 #define DRM_I915_FENCE_FLAG_FLUSHED 0x01000000
  151 
  152 /* Flags for perf_boxes
  153  */
  154 #define I915_BOX_RING_EMPTY    0x1
  155 #define I915_BOX_FLIP          0x2
  156 #define I915_BOX_WAIT          0x4
  157 #define I915_BOX_TEXTURE_LOAD  0x8
  158 #define I915_BOX_LOST_CONTEXT  0x10
  159 
  160 /* I915 specific ioctls
  161  * The device specific ioctl range is 0x40 to 0x79.
  162  */
  163 #define DRM_I915_INIT           0x00
  164 #define DRM_I915_FLUSH          0x01
  165 #define DRM_I915_FLIP           0x02
  166 #define DRM_I915_BATCHBUFFER    0x03
  167 #define DRM_I915_IRQ_EMIT       0x04
  168 #define DRM_I915_IRQ_WAIT       0x05
  169 #define DRM_I915_GETPARAM       0x06
  170 #define DRM_I915_SETPARAM       0x07
  171 #define DRM_I915_ALLOC          0x08
  172 #define DRM_I915_FREE           0x09
  173 #define DRM_I915_INIT_HEAP      0x0a
  174 #define DRM_I915_CMDBUFFER      0x0b
  175 #define DRM_I915_DESTROY_HEAP   0x0c
  176 #define DRM_I915_SET_VBLANK_PIPE        0x0d
  177 #define DRM_I915_GET_VBLANK_PIPE        0x0e
  178 #define DRM_I915_VBLANK_SWAP    0x0f
  179 #define DRM_I915_MMIO           0x10
  180 #define DRM_I915_HWS_ADDR       0x11
  181 #define DRM_I915_EXECBUFFER     0x12
  182 #define DRM_I915_GEM_INIT       0x13
  183 #define DRM_I915_GEM_EXECBUFFER 0x14
  184 #define DRM_I915_GEM_PIN        0x15
  185 #define DRM_I915_GEM_UNPIN      0x16
  186 #define DRM_I915_GEM_BUSY       0x17
  187 #define DRM_I915_GEM_THROTTLE   0x18
  188 #define DRM_I915_GEM_ENTERVT    0x19
  189 #define DRM_I915_GEM_LEAVEVT    0x1a
  190 #define DRM_I915_GEM_CREATE     0x1b
  191 #define DRM_I915_GEM_PREAD      0x1c
  192 #define DRM_I915_GEM_PWRITE     0x1d
  193 #define DRM_I915_GEM_MMAP       0x1e
  194 #define DRM_I915_GEM_SET_DOMAIN 0x1f
  195 #define DRM_I915_GEM_SW_FINISH  0x20
  196 #define DRM_I915_GEM_SET_TILING 0x21
  197 #define DRM_I915_GEM_GET_TILING 0x22
  198 
  199 #define DRM_IOCTL_I915_INIT             DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)
  200 #define DRM_IOCTL_I915_FLUSH            DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH)
  201 #define DRM_IOCTL_I915_FLIP             DRM_IOW( DRM_COMMAND_BASE + DRM_I915_FLIP, drm_i915_flip_t)
  202 #define DRM_IOCTL_I915_BATCHBUFFER      DRM_IOW( DRM_COMMAND_BASE + DRM_I915_BATCHBUFFER, drm_i915_batchbuffer_t)
  203 #define DRM_IOCTL_I915_IRQ_EMIT         DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_IRQ_EMIT, drm_i915_irq_emit_t)
  204 #define DRM_IOCTL_I915_IRQ_WAIT         DRM_IOW( DRM_COMMAND_BASE + DRM_I915_IRQ_WAIT, drm_i915_irq_wait_t)
  205 #define DRM_IOCTL_I915_GETPARAM         DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GETPARAM, drm_i915_getparam_t)
  206 #define DRM_IOCTL_I915_SETPARAM         DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SETPARAM, drm_i915_setparam_t)
  207 #define DRM_IOCTL_I915_ALLOC            DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_ALLOC, drm_i915_mem_alloc_t)
  208 #define DRM_IOCTL_I915_FREE             DRM_IOW( DRM_COMMAND_BASE + DRM_I915_FREE, drm_i915_mem_free_t)
  209 #define DRM_IOCTL_I915_INIT_HEAP        DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT_HEAP, drm_i915_mem_init_heap_t)
  210 #define DRM_IOCTL_I915_CMDBUFFER        DRM_IOW( DRM_COMMAND_BASE + DRM_I915_CMDBUFFER, drm_i915_cmdbuffer_t)
  211 #define DRM_IOCTL_I915_DESTROY_HEAP     DRM_IOW( DRM_COMMAND_BASE + DRM_I915_DESTROY_HEAP, drm_i915_mem_destroy_heap_t)
  212 #define DRM_IOCTL_I915_SET_VBLANK_PIPE  DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SET_VBLANK_PIPE, drm_i915_vblank_pipe_t)
  213 #define DRM_IOCTL_I915_GET_VBLANK_PIPE  DRM_IOR( DRM_COMMAND_BASE + DRM_I915_GET_VBLANK_PIPE, drm_i915_vblank_pipe_t)
  214 #define DRM_IOCTL_I915_VBLANK_SWAP      DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_VBLANK_SWAP, drm_i915_vblank_swap_t)
  215 #define DRM_IOCTL_I915_MMIO             DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_MMIO, drm_i915_mmio)
  216 #define DRM_IOCTL_I915_EXECBUFFER       DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_EXECBUFFER, struct drm_i915_execbuffer)
  217 #define DRM_IOCTL_I915_GEM_INIT         DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_INIT, struct drm_i915_gem_init)
  218 #define DRM_IOCTL_I915_GEM_EXECBUFFER   DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER, struct drm_i915_gem_execbuffer)
  219 #define DRM_IOCTL_I915_GEM_PIN          DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_PIN, struct drm_i915_gem_pin)
  220 #define DRM_IOCTL_I915_GEM_UNPIN        DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_UNPIN, struct drm_i915_gem_unpin)
  221 #define DRM_IOCTL_I915_GEM_BUSY         DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_BUSY, struct drm_i915_gem_busy)
  222 #define DRM_IOCTL_I915_GEM_THROTTLE     DRM_IO ( DRM_COMMAND_BASE + DRM_I915_GEM_THROTTLE)
  223 #define DRM_IOCTL_I915_GEM_ENTERVT      DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_ENTERVT)
  224 #define DRM_IOCTL_I915_GEM_LEAVEVT      DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_LEAVEVT)
  225 #define DRM_IOCTL_I915_GEM_CREATE       DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_CREATE, struct drm_i915_gem_create)
  226 #define DRM_IOCTL_I915_GEM_PREAD        DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_PREAD, struct drm_i915_gem_pread)
  227 #define DRM_IOCTL_I915_GEM_PWRITE       DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_PWRITE, struct drm_i915_gem_pwrite)
  228 #define DRM_IOCTL_I915_GEM_MMAP         DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MMAP, struct drm_i915_gem_mmap)
  229 #define DRM_IOCTL_I915_GEM_SET_DOMAIN   DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_SET_DOMAIN, struct drm_i915_gem_set_domain)
  230 #define DRM_IOCTL_I915_GEM_SW_FINISH    DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_SW_FINISH, struct drm_i915_gem_sw_finish)
  231 #define DRM_IOCTL_I915_GEM_SET_TILING   DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_SET_TILING, struct drm_i915_gem_set_tiling)
  232 #define DRM_IOCTL_I915_GEM_GET_TILING   DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_TILING, struct drm_i915_gem_get_tiling)
  233 
  234 /* Asynchronous page flipping:
  235  */
  236 typedef struct drm_i915_flip {
  237         /*
  238          * This is really talking about planes, and we could rename it
  239          * except for the fact that some of the duplicated i915_drm.h files
  240          * out there check for HAVE_I915_FLIP and so might pick up this
  241          * version.
  242          */
  243         int pipes;
  244 } drm_i915_flip_t;
  245 
  246 /* Allow drivers to submit batchbuffers directly to hardware, relying
  247  * on the security mechanisms provided by hardware.
  248  */
  249 typedef struct drm_i915_batchbuffer {
  250         int start;              /* agp offset */
  251         int used;               /* nr bytes in use */
  252         int DR1;                /* hw flags for GFX_OP_DRAWRECT_INFO */
  253         int DR4;                /* window origin for GFX_OP_DRAWRECT_INFO */
  254         int num_cliprects;      /* mulitpass with multiple cliprects? */
  255         struct drm_clip_rect __user *cliprects; /* pointer to userspace cliprects */
  256 } drm_i915_batchbuffer_t;
  257 
  258 /* As above, but pass a pointer to userspace buffer which can be
  259  * validated by the kernel prior to sending to hardware.
  260  */
  261 typedef struct _drm_i915_cmdbuffer {
  262         char __user *buf;       /* pointer to userspace command buffer */
  263         int sz;                 /* nr bytes in buf */
  264         int DR1;                /* hw flags for GFX_OP_DRAWRECT_INFO */
  265         int DR4;                /* window origin for GFX_OP_DRAWRECT_INFO */
  266         int num_cliprects;      /* mulitpass with multiple cliprects? */
  267         struct drm_clip_rect __user *cliprects; /* pointer to userspace cliprects */
  268 } drm_i915_cmdbuffer_t;
  269 
  270 /* Userspace can request & wait on irq's:
  271  */
  272 typedef struct drm_i915_irq_emit {
  273         int __user *irq_seq;
  274 } drm_i915_irq_emit_t;
  275 
  276 typedef struct drm_i915_irq_wait {
  277         int irq_seq;
  278 } drm_i915_irq_wait_t;
  279 
  280 /* Ioctl to query kernel params:
  281  */
  282 #define I915_PARAM_IRQ_ACTIVE            1
  283 #define I915_PARAM_ALLOW_BATCHBUFFER     2
  284 #define I915_PARAM_LAST_DISPATCH         3
  285 #define I915_PARAM_CHIPSET_ID            4
  286 #define I915_PARAM_HAS_GEM               5
  287 
  288 typedef struct drm_i915_getparam {
  289         int param;
  290         int __user *value;
  291 } drm_i915_getparam_t;
  292 
  293 /* Ioctl to set kernel params:
  294  */
  295 #define I915_SETPARAM_USE_MI_BATCHBUFFER_START            1
  296 #define I915_SETPARAM_TEX_LRU_LOG_GRANULARITY             2
  297 #define I915_SETPARAM_ALLOW_BATCHBUFFER                   3
  298 
  299 typedef struct drm_i915_setparam {
  300         int param;
  301         int value;
  302 } drm_i915_setparam_t;
  303 
  304 /* A memory manager for regions of shared memory:
  305  */
  306 #define I915_MEM_REGION_AGP 1
  307 
  308 typedef struct drm_i915_mem_alloc {
  309         int region;
  310         int alignment;
  311         int size;
  312         int __user *region_offset;      /* offset from start of fb or agp */
  313 } drm_i915_mem_alloc_t;
  314 
  315 typedef struct drm_i915_mem_free {
  316         int region;
  317         int region_offset;
  318 } drm_i915_mem_free_t;
  319 
  320 typedef struct drm_i915_mem_init_heap {
  321         int region;
  322         int size;
  323         int start;
  324 } drm_i915_mem_init_heap_t;
  325 
  326 /* Allow memory manager to be torn down and re-initialized (eg on
  327  * rotate):
  328  */
  329 typedef struct drm_i915_mem_destroy_heap {
  330         int region;
  331 } drm_i915_mem_destroy_heap_t;
  332 
  333 /* Allow X server to configure which pipes to monitor for vblank signals
  334  */
  335 #define DRM_I915_VBLANK_PIPE_A  1
  336 #define DRM_I915_VBLANK_PIPE_B  2
  337 
  338 typedef struct drm_i915_vblank_pipe {
  339         int pipe;
  340 } drm_i915_vblank_pipe_t;
  341 
  342 /* Schedule buffer swap at given vertical blank:
  343  */
  344 typedef struct drm_i915_vblank_swap {
  345         drm_drawable_t drawable;
  346         enum drm_vblank_seq_type seqtype;
  347         unsigned int sequence;
  348 } drm_i915_vblank_swap_t;
  349 
  350 #define I915_MMIO_READ  0
  351 #define I915_MMIO_WRITE 1
  352 
  353 #define I915_MMIO_MAY_READ      0x1
  354 #define I915_MMIO_MAY_WRITE     0x2
  355 
  356 #define MMIO_REGS_IA_PRIMATIVES_COUNT           0
  357 #define MMIO_REGS_IA_VERTICES_COUNT             1
  358 #define MMIO_REGS_VS_INVOCATION_COUNT           2
  359 #define MMIO_REGS_GS_PRIMITIVES_COUNT           3
  360 #define MMIO_REGS_GS_INVOCATION_COUNT           4
  361 #define MMIO_REGS_CL_PRIMITIVES_COUNT           5
  362 #define MMIO_REGS_CL_INVOCATION_COUNT           6
  363 #define MMIO_REGS_PS_INVOCATION_COUNT           7
  364 #define MMIO_REGS_PS_DEPTH_COUNT                8
  365 
  366 typedef struct drm_i915_mmio_entry {
  367         unsigned int flag;
  368         unsigned int offset;
  369         unsigned int size;
  370 } drm_i915_mmio_entry_t;
  371 
  372 typedef struct drm_i915_mmio {
  373         unsigned int read_write:1;
  374         unsigned int reg:31;
  375         void __user *data;
  376 } drm_i915_mmio_t;
  377 
  378 typedef struct drm_i915_hws_addr {
  379         uint64_t addr;
  380 } drm_i915_hws_addr_t;
  381 
  382 /*
  383  * Relocation header is 4 uint32_ts
  384  * 0 - 32 bit reloc count
  385  * 1 - 32-bit relocation type
  386  * 2-3 - 64-bit user buffer handle ptr for another list of relocs.
  387  */
  388 #define I915_RELOC_HEADER 4
  389 
  390 /*
  391  * type 0 relocation has 4-uint32_t stride
  392  * 0 - offset into buffer
  393  * 1 - delta to add in
  394  * 2 - buffer handle
  395  * 3 - reserved (for optimisations later).
  396  */
  397 /*
  398  * type 1 relocation has 4-uint32_t stride.
  399  * Hangs off the first item in the op list.
  400  * Performed after all valiations are done.
  401  * Try to group relocs into the same relocatee together for
  402  * performance reasons.
  403  * 0 - offset into buffer
  404  * 1 - delta to add in
  405  * 2 - buffer index in op list.
  406  * 3 - relocatee index in op list.
  407  */
  408 #define I915_RELOC_TYPE_0 0
  409 #define I915_RELOC0_STRIDE 4
  410 #define I915_RELOC_TYPE_1 1
  411 #define I915_RELOC1_STRIDE 4
  412 
  413 
  414 struct drm_i915_op_arg {
  415         uint64_t next;
  416         uint64_t reloc_ptr;
  417         int handled;
  418         unsigned int pad64;
  419         union {
  420                 struct drm_bo_op_req req;
  421                 struct drm_bo_arg_rep rep;
  422         } d;
  423 
  424 };
  425 
  426 struct drm_i915_execbuffer {
  427         uint64_t ops_list;
  428         uint32_t num_buffers;
  429         struct drm_i915_batchbuffer batch;
  430         drm_context_t context; /* for lockless use in the future */
  431         struct drm_fence_arg fence_arg;
  432 };
  433 
  434 struct drm_i915_gem_init {
  435         /**
  436          * Beginning offset in the GTT to be managed by the DRM memory
  437          * manager.
  438          */
  439         uint64_t gtt_start;
  440         /**
  441          * Ending offset in the GTT to be managed by the DRM memory
  442          * manager.
  443          */
  444         uint64_t gtt_end;
  445 };
  446 
  447 struct drm_i915_gem_create {
  448         /**
  449          * Requested size for the object.
  450          *
  451          * The (page-aligned) allocated size for the object will be returned.
  452          */
  453         uint64_t size;
  454         /**
  455          * Returned handle for the object.
  456          *
  457          * Object handles are nonzero.
  458          */
  459         uint32_t handle;
  460         uint32_t pad;
  461 };
  462 
  463 struct drm_i915_gem_pread {
  464         /** Handle for the object being read. */
  465         uint32_t handle;
  466         uint32_t pad;
  467         /** Offset into the object to read from */
  468         uint64_t offset;
  469         /** Length of data to read */
  470         uint64_t size;
  471         /** Pointer to write the data into. */
  472         uint64_t data_ptr;      /* void *, but pointers are not 32/64 compatible */
  473 };
  474 
  475 struct drm_i915_gem_pwrite {
  476         /** Handle for the object being written to. */
  477         uint32_t handle;
  478         uint32_t pad;
  479         /** Offset into the object to write to */
  480         uint64_t offset;
  481         /** Length of data to write */
  482         uint64_t size;
  483         /** Pointer to read the data from. */
  484         uint64_t data_ptr;      /* void *, but pointers are not 32/64 compatible */
  485 };
  486 
  487 struct drm_i915_gem_mmap {
  488         /** Handle for the object being mapped. */
  489         uint32_t handle;
  490         uint32_t pad;
  491         /** Offset in the object to map. */
  492         uint64_t offset;
  493         /**
  494          * Length of data to map.
  495          *
  496          * The value will be page-aligned.
  497          */
  498         uint64_t size;
  499         /** Returned pointer the data was mapped at */
  500         uint64_t addr_ptr;      /* void *, but pointers are not 32/64 compatible */
  501 };
  502 
  503 struct drm_i915_gem_set_domain {
  504         /** Handle for the object */
  505         uint32_t handle;
  506 
  507         /** New read domains */
  508         uint32_t read_domains;
  509 
  510         /** New write domain */
  511         uint32_t write_domain;
  512 };
  513 
  514 struct drm_i915_gem_sw_finish {
  515         /** Handle for the object */
  516         uint32_t handle;
  517 };
  518 
  519 struct drm_i915_gem_relocation_entry {
  520         /**
  521          * Handle of the buffer being pointed to by this relocation entry.
  522          *
  523          * It's appealing to make this be an index into the mm_validate_entry
  524          * list to refer to the buffer, but this allows the driver to create
  525          * a relocation list for state buffers and not re-write it per
  526          * exec using the buffer.
  527          */
  528         uint32_t target_handle;
  529 
  530         /**
  531          * Value to be added to the offset of the target buffer to make up
  532          * the relocation entry.
  533          */
  534         uint32_t delta;
  535 
  536         /** Offset in the buffer the relocation entry will be written into */
  537         uint64_t offset;
  538 
  539         /**
  540          * Offset value of the target buffer that the relocation entry was last
  541          * written as.
  542          *
  543          * If the buffer has the same offset as last time, we can skip syncing
  544          * and writing the relocation.  This value is written back out by
  545          * the execbuffer ioctl when the relocation is written.
  546          */
  547         uint64_t presumed_offset;
  548 
  549         /**
  550          * Target memory domains read by this operation.
  551          */
  552         uint32_t read_domains;
  553 
  554         /**
  555          * Target memory domains written by this operation.
  556          *
  557          * Note that only one domain may be written by the whole
  558          * execbuffer operation, so that where there are conflicts,
  559          * the application will get -EINVAL back.
  560          */
  561         uint32_t write_domain;
  562 };
  563 
  564 /** @{
  565  * Intel memory domains
  566  *
  567  * Most of these just align with the various caches in
  568  * the system and are used to flush and invalidate as
  569  * objects end up cached in different domains.
  570  */
  571 /** CPU cache */
  572 #define I915_GEM_DOMAIN_CPU             0x00000001
  573 /** Render cache, used by 2D and 3D drawing */
  574 #define I915_GEM_DOMAIN_RENDER          0x00000002
  575 /** Sampler cache, used by texture engine */
  576 #define I915_GEM_DOMAIN_SAMPLER         0x00000004
  577 /** Command queue, used to load batch buffers */
  578 #define I915_GEM_DOMAIN_COMMAND         0x00000008
  579 /** Instruction cache, used by shader programs */
  580 #define I915_GEM_DOMAIN_INSTRUCTION     0x00000010
  581 /** Vertex address cache */
  582 #define I915_GEM_DOMAIN_VERTEX          0x00000020
  583 /** GTT domain - aperture and scanout */
  584 #define I915_GEM_DOMAIN_GTT             0x00000040
  585 /** @} */
  586 
  587 struct drm_i915_gem_exec_object {
  588         /**
  589          * User's handle for a buffer to be bound into the GTT for this
  590          * operation.
  591          */
  592         uint32_t handle;
  593 
  594         /** Number of relocations to be performed on this buffer */
  595         uint32_t relocation_count;
  596         /**
  597          * Pointer to array of struct drm_i915_gem_relocation_entry containing
  598          * the relocations to be performed in this buffer.
  599          */
  600         uint64_t relocs_ptr;
  601 
  602         /** Required alignment in graphics aperture */
  603         uint64_t alignment;
  604 
  605         /**
  606          * Returned value of the updated offset of the object, for future
  607          * presumed_offset writes.
  608          */
  609         uint64_t offset;
  610 };
  611 
  612 struct drm_i915_gem_execbuffer {
  613         /**
  614          * List of buffers to be validated with their relocations to be
  615          * performend on them.
  616          *
  617          * This is a pointer to an array of struct drm_i915_gem_validate_entry.
  618          *
  619          * These buffers must be listed in an order such that all relocations
  620          * a buffer is performing refer to buffers that have already appeared
  621          * in the validate list.
  622          */
  623         uint64_t buffers_ptr;
  624         uint32_t buffer_count;
  625 
  626         /** Offset in the batchbuffer to start execution from. */
  627         uint32_t batch_start_offset;
  628         /** Bytes used in batchbuffer from batch_start_offset */
  629         uint32_t batch_len;
  630         uint32_t DR1;
  631         uint32_t DR4;
  632         uint32_t num_cliprects;
  633         uint64_t cliprects_ptr; /* struct drm_clip_rect *cliprects */
  634 };
  635 
  636 struct drm_i915_gem_pin {
  637         /** Handle of the buffer to be pinned. */
  638         uint32_t handle;
  639         uint32_t pad;
  640 
  641         /** alignment required within the aperture */
  642         uint64_t alignment;
  643 
  644         /** Returned GTT offset of the buffer. */
  645         uint64_t offset;
  646 };
  647 
  648 struct drm_i915_gem_unpin {
  649         /** Handle of the buffer to be unpinned. */
  650         uint32_t handle;
  651         uint32_t pad;
  652 };
  653 
  654 struct drm_i915_gem_busy {
  655         /** Handle of the buffer to check for busy */
  656         uint32_t handle;
  657 
  658         /** Return busy status (1 if busy, 0 if idle) */
  659         uint32_t busy;
  660 };
  661 
  662 #define I915_TILING_NONE        0
  663 #define I915_TILING_X           1
  664 #define I915_TILING_Y           2
  665 
  666 #define I915_BIT_6_SWIZZLE_NONE         0
  667 #define I915_BIT_6_SWIZZLE_9            1
  668 #define I915_BIT_6_SWIZZLE_9_10         2
  669 #define I915_BIT_6_SWIZZLE_9_11         3
  670 #define I915_BIT_6_SWIZZLE_9_10_11      4
  671 /* Not seen by userland */
  672 #define I915_BIT_6_SWIZZLE_UNKNOWN      5
  673 
  674 struct drm_i915_gem_set_tiling {
  675         /** Handle of the buffer to have its tiling state updated */
  676         uint32_t handle;
  677 
  678         /**
  679          * Tiling mode for the object (I915_TILING_NONE, I915_TILING_X,
  680          * I915_TILING_Y).
  681          *
  682          * This value is to be set on request, and will be updated by the
  683          * kernel on successful return with the actual chosen tiling layout.
  684          *
  685          * The tiling mode may be demoted to I915_TILING_NONE when the system
  686          * has bit 6 swizzling that can't be managed correctly by GEM.
  687          *
  688          * Buffer contents become undefined when changing tiling_mode.
  689          */
  690         uint32_t tiling_mode;
  691 
  692         /**
  693          * Stride in bytes for the object when in I915_TILING_X or
  694          * I915_TILING_Y.
  695          */
  696         uint32_t stride;
  697 
  698         /**
  699          * Returned address bit 6 swizzling required for CPU access through
  700          * mmap mapping.
  701          */
  702         uint32_t swizzle_mode;
  703 };
  704 
  705 struct drm_i915_gem_get_tiling {
  706         /** Handle of the buffer to get tiling state for. */
  707         uint32_t handle;
  708 
  709         /**
  710          * Current tiling mode for the object (I915_TILING_NONE, I915_TILING_X,
  711          * I915_TILING_Y).
  712          */
  713         uint32_t tiling_mode;
  714 
  715         /**
  716          * Returned address bit 6 swizzling required for CPU access through
  717          * mmap mapping.
  718          */
  719         uint32_t swizzle_mode;
  720 };
  721 
  722 #endif                          /* _I915_DRM_H_ */

Cache object: 2c4597b3a1d277fea42d950447b64b04


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.