i915_drm.h revision 22944501
122944501Smrg/* 222944501Smrg * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas. 322944501Smrg * All Rights Reserved. 422944501Smrg * 522944501Smrg * Permission is hereby granted, free of charge, to any person obtaining a 622944501Smrg * copy of this software and associated documentation files (the 722944501Smrg * "Software"), to deal in the Software without restriction, including 822944501Smrg * without limitation the rights to use, copy, modify, merge, publish, 922944501Smrg * distribute, sub license, and/or sell copies of the Software, and to 1022944501Smrg * permit persons to whom the Software is furnished to do so, subject to 1122944501Smrg * the following conditions: 1222944501Smrg * 1322944501Smrg * The above copyright notice and this permission notice (including the 1422944501Smrg * next paragraph) shall be included in all copies or substantial portions 1522944501Smrg * of the Software. 1622944501Smrg * 1722944501Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 1822944501Smrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 1922944501Smrg * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 2022944501Smrg * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 2122944501Smrg * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 2222944501Smrg * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 2322944501Smrg * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 2422944501Smrg * 2522944501Smrg */ 2622944501Smrg 2722944501Smrg#ifndef _I915_DRM_H_ 2822944501Smrg#define _I915_DRM_H_ 2922944501Smrg 3022944501Smrg#include "drm.h" 3122944501Smrg 3222944501Smrg/* Please note that modifications to all structs defined here are 3322944501Smrg * subject to backwards-compatibility constraints. 3422944501Smrg */ 3522944501Smrg 3622944501Smrg/* Each region is a minimum of 16k, and there are at most 255 of them. 3722944501Smrg */ 3822944501Smrg#define I915_NR_TEX_REGIONS 255 /* table size 2k - maximum due to use 3922944501Smrg * of chars for next/prev indices */ 4022944501Smrg#define I915_LOG_MIN_TEX_REGION_SIZE 14 4122944501Smrg 4222944501Smrgtypedef struct _drm_i915_init { 4322944501Smrg enum { 4422944501Smrg I915_INIT_DMA = 0x01, 4522944501Smrg I915_CLEANUP_DMA = 0x02, 4622944501Smrg I915_RESUME_DMA = 0x03 4722944501Smrg } func; 4822944501Smrg unsigned int mmio_offset; 4922944501Smrg int sarea_priv_offset; 5022944501Smrg unsigned int ring_start; 5122944501Smrg unsigned int ring_end; 5222944501Smrg unsigned int ring_size; 5322944501Smrg unsigned int front_offset; 5422944501Smrg unsigned int back_offset; 5522944501Smrg unsigned int depth_offset; 5622944501Smrg unsigned int w; 5722944501Smrg unsigned int h; 5822944501Smrg unsigned int pitch; 5922944501Smrg unsigned int pitch_bits; 6022944501Smrg unsigned int back_pitch; 6122944501Smrg unsigned int depth_pitch; 6222944501Smrg unsigned int cpp; 6322944501Smrg unsigned int chipset; 6422944501Smrg} drm_i915_init_t; 6522944501Smrg 6622944501Smrgtypedef struct _drm_i915_sarea { 6722944501Smrg struct drm_tex_region texList[I915_NR_TEX_REGIONS + 1]; 6822944501Smrg int last_upload; /* last time texture was uploaded */ 6922944501Smrg int last_enqueue; /* last time a buffer was enqueued */ 7022944501Smrg int last_dispatch; /* age of the most recently dispatched buffer */ 7122944501Smrg int ctxOwner; /* last context to upload state */ 7222944501Smrg int texAge; 7322944501Smrg int pf_enabled; /* is pageflipping allowed? */ 7422944501Smrg int pf_active; 7522944501Smrg int pf_current_page; /* which buffer is being displayed? */ 7622944501Smrg int perf_boxes; /* performance boxes to be displayed */ 7722944501Smrg int width, height; /* screen size in pixels */ 7822944501Smrg 7922944501Smrg drm_handle_t front_handle; 8022944501Smrg int front_offset; 8122944501Smrg int front_size; 8222944501Smrg 8322944501Smrg drm_handle_t back_handle; 8422944501Smrg int back_offset; 8522944501Smrg int back_size; 8622944501Smrg 8722944501Smrg drm_handle_t depth_handle; 8822944501Smrg int depth_offset; 8922944501Smrg int depth_size; 9022944501Smrg 9122944501Smrg drm_handle_t tex_handle; 9222944501Smrg int tex_offset; 9322944501Smrg int tex_size; 9422944501Smrg int log_tex_granularity; 9522944501Smrg int pitch; 9622944501Smrg int rotation; /* 0, 90, 180 or 270 */ 9722944501Smrg int rotated_offset; 9822944501Smrg int rotated_size; 9922944501Smrg int rotated_pitch; 10022944501Smrg int virtualX, virtualY; 10122944501Smrg 10222944501Smrg unsigned int front_tiled; 10322944501Smrg unsigned int back_tiled; 10422944501Smrg unsigned int depth_tiled; 10522944501Smrg unsigned int rotated_tiled; 10622944501Smrg unsigned int rotated2_tiled; 10722944501Smrg 10822944501Smrg int pipeA_x; 10922944501Smrg int pipeA_y; 11022944501Smrg int pipeA_w; 11122944501Smrg int pipeA_h; 11222944501Smrg int pipeB_x; 11322944501Smrg int pipeB_y; 11422944501Smrg int pipeB_w; 11522944501Smrg int pipeB_h; 11622944501Smrg 11722944501Smrg /* fill out some space for old userspace triple buffer */ 11822944501Smrg drm_handle_t unused_handle; 11922944501Smrg __u32 unused1, unused2, unused3; 12022944501Smrg 12122944501Smrg /* buffer object handles for static buffers. May change 12222944501Smrg * over the lifetime of the client. 12322944501Smrg */ 12422944501Smrg __u32 front_bo_handle; 12522944501Smrg __u32 back_bo_handle; 12622944501Smrg __u32 unused_bo_handle; 12722944501Smrg __u32 depth_bo_handle; 12822944501Smrg 12922944501Smrg} drm_i915_sarea_t; 13022944501Smrg 13122944501Smrg/* due to userspace building against these headers we need some compat here */ 13222944501Smrg#define planeA_x pipeA_x 13322944501Smrg#define planeA_y pipeA_y 13422944501Smrg#define planeA_w pipeA_w 13522944501Smrg#define planeA_h pipeA_h 13622944501Smrg#define planeB_x pipeB_x 13722944501Smrg#define planeB_y pipeB_y 13822944501Smrg#define planeB_w pipeB_w 13922944501Smrg#define planeB_h pipeB_h 14022944501Smrg 14122944501Smrg/* Flags for perf_boxes 14222944501Smrg */ 14322944501Smrg#define I915_BOX_RING_EMPTY 0x1 14422944501Smrg#define I915_BOX_FLIP 0x2 14522944501Smrg#define I915_BOX_WAIT 0x4 14622944501Smrg#define I915_BOX_TEXTURE_LOAD 0x8 14722944501Smrg#define I915_BOX_LOST_CONTEXT 0x10 14822944501Smrg 14922944501Smrg/* I915 specific ioctls 15022944501Smrg * The device specific ioctl range is 0x40 to 0x79. 15122944501Smrg */ 15222944501Smrg#define DRM_I915_INIT 0x00 15322944501Smrg#define DRM_I915_FLUSH 0x01 15422944501Smrg#define DRM_I915_FLIP 0x02 15522944501Smrg#define DRM_I915_BATCHBUFFER 0x03 15622944501Smrg#define DRM_I915_IRQ_EMIT 0x04 15722944501Smrg#define DRM_I915_IRQ_WAIT 0x05 15822944501Smrg#define DRM_I915_GETPARAM 0x06 15922944501Smrg#define DRM_I915_SETPARAM 0x07 16022944501Smrg#define DRM_I915_ALLOC 0x08 16122944501Smrg#define DRM_I915_FREE 0x09 16222944501Smrg#define DRM_I915_INIT_HEAP 0x0a 16322944501Smrg#define DRM_I915_CMDBUFFER 0x0b 16422944501Smrg#define DRM_I915_DESTROY_HEAP 0x0c 16522944501Smrg#define DRM_I915_SET_VBLANK_PIPE 0x0d 16622944501Smrg#define DRM_I915_GET_VBLANK_PIPE 0x0e 16722944501Smrg#define DRM_I915_VBLANK_SWAP 0x0f 16822944501Smrg#define DRM_I915_HWS_ADDR 0x11 16922944501Smrg#define DRM_I915_GEM_INIT 0x13 17022944501Smrg#define DRM_I915_GEM_EXECBUFFER 0x14 17122944501Smrg#define DRM_I915_GEM_PIN 0x15 17222944501Smrg#define DRM_I915_GEM_UNPIN 0x16 17322944501Smrg#define DRM_I915_GEM_BUSY 0x17 17422944501Smrg#define DRM_I915_GEM_THROTTLE 0x18 17522944501Smrg#define DRM_I915_GEM_ENTERVT 0x19 17622944501Smrg#define DRM_I915_GEM_LEAVEVT 0x1a 17722944501Smrg#define DRM_I915_GEM_CREATE 0x1b 17822944501Smrg#define DRM_I915_GEM_PREAD 0x1c 17922944501Smrg#define DRM_I915_GEM_PWRITE 0x1d 18022944501Smrg#define DRM_I915_GEM_MMAP 0x1e 18122944501Smrg#define DRM_I915_GEM_SET_DOMAIN 0x1f 18222944501Smrg#define DRM_I915_GEM_SW_FINISH 0x20 18322944501Smrg#define DRM_I915_GEM_SET_TILING 0x21 18422944501Smrg#define DRM_I915_GEM_GET_TILING 0x22 18522944501Smrg#define DRM_I915_GEM_GET_APERTURE 0x23 18622944501Smrg#define DRM_I915_GEM_MMAP_GTT 0x24 18722944501Smrg#define DRM_I915_GET_PIPE_FROM_CRTC_ID 0x25 18822944501Smrg#define DRM_I915_GEM_MADVISE 0x26 18922944501Smrg#define DRM_I915_OVERLAY_PUT_IMAGE 0x27 19022944501Smrg#define DRM_I915_OVERLAY_ATTRS 0x28 19122944501Smrg#define DRM_I915_GEM_EXECBUFFER2 0x29 19222944501Smrg 19322944501Smrg#define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t) 19422944501Smrg#define DRM_IOCTL_I915_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH) 19522944501Smrg#define DRM_IOCTL_I915_FLIP DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLIP) 19622944501Smrg#define DRM_IOCTL_I915_BATCHBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_I915_BATCHBUFFER, drm_i915_batchbuffer_t) 19722944501Smrg#define DRM_IOCTL_I915_IRQ_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_IRQ_EMIT, drm_i915_irq_emit_t) 19822944501Smrg#define DRM_IOCTL_I915_IRQ_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_IRQ_WAIT, drm_i915_irq_wait_t) 19922944501Smrg#define DRM_IOCTL_I915_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GETPARAM, drm_i915_getparam_t) 20022944501Smrg#define DRM_IOCTL_I915_SETPARAM DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SETPARAM, drm_i915_setparam_t) 20122944501Smrg#define DRM_IOCTL_I915_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_ALLOC, drm_i915_mem_alloc_t) 20222944501Smrg#define DRM_IOCTL_I915_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_I915_FREE, drm_i915_mem_free_t) 20322944501Smrg#define DRM_IOCTL_I915_INIT_HEAP DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT_HEAP, drm_i915_mem_init_heap_t) 20422944501Smrg#define DRM_IOCTL_I915_CMDBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_I915_CMDBUFFER, drm_i915_cmdbuffer_t) 20522944501Smrg#define DRM_IOCTL_I915_DESTROY_HEAP DRM_IOW( DRM_COMMAND_BASE + DRM_I915_DESTROY_HEAP, drm_i915_mem_destroy_heap_t) 20622944501Smrg#define DRM_IOCTL_I915_SET_VBLANK_PIPE DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SET_VBLANK_PIPE, drm_i915_vblank_pipe_t) 20722944501Smrg#define DRM_IOCTL_I915_GET_VBLANK_PIPE DRM_IOR( DRM_COMMAND_BASE + DRM_I915_GET_VBLANK_PIPE, drm_i915_vblank_pipe_t) 20822944501Smrg#define DRM_IOCTL_I915_VBLANK_SWAP DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_VBLANK_SWAP, drm_i915_vblank_swap_t) 20922944501Smrg#define DRM_IOCTL_I915_GEM_INIT DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_INIT, struct drm_i915_gem_init) 21022944501Smrg#define DRM_IOCTL_I915_GEM_EXECBUFFER DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER, struct drm_i915_gem_execbuffer) 21122944501Smrg#define DRM_IOCTL_I915_GEM_EXECBUFFER2 DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER2, struct drm_i915_gem_execbuffer2) 21222944501Smrg#define DRM_IOCTL_I915_GEM_PIN DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_PIN, struct drm_i915_gem_pin) 21322944501Smrg#define DRM_IOCTL_I915_GEM_UNPIN DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_UNPIN, struct drm_i915_gem_unpin) 21422944501Smrg#define DRM_IOCTL_I915_GEM_BUSY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_BUSY, struct drm_i915_gem_busy) 21522944501Smrg#define DRM_IOCTL_I915_GEM_THROTTLE DRM_IO ( DRM_COMMAND_BASE + DRM_I915_GEM_THROTTLE) 21622944501Smrg#define DRM_IOCTL_I915_GEM_ENTERVT DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_ENTERVT) 21722944501Smrg#define DRM_IOCTL_I915_GEM_LEAVEVT DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_LEAVEVT) 21822944501Smrg#define DRM_IOCTL_I915_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_CREATE, struct drm_i915_gem_create) 21922944501Smrg#define DRM_IOCTL_I915_GEM_PREAD DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_PREAD, struct drm_i915_gem_pread) 22022944501Smrg#define DRM_IOCTL_I915_GEM_PWRITE DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_PWRITE, struct drm_i915_gem_pwrite) 22122944501Smrg#define DRM_IOCTL_I915_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MMAP, struct drm_i915_gem_mmap) 22222944501Smrg#define DRM_IOCTL_I915_GEM_MMAP_GTT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MMAP_GTT, struct drm_i915_gem_mmap_gtt) 22322944501Smrg#define DRM_IOCTL_I915_GEM_SET_DOMAIN DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_SET_DOMAIN, struct drm_i915_gem_set_domain) 22422944501Smrg#define DRM_IOCTL_I915_GEM_SW_FINISH DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_SW_FINISH, struct drm_i915_gem_sw_finish) 22522944501Smrg#define DRM_IOCTL_I915_GEM_SET_TILING DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_SET_TILING, struct drm_i915_gem_set_tiling) 22622944501Smrg#define DRM_IOCTL_I915_GEM_GET_TILING DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_TILING, struct drm_i915_gem_get_tiling) 22722944501Smrg#define DRM_IOCTL_I915_GEM_GET_APERTURE DRM_IOR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_APERTURE, struct drm_i915_gem_get_aperture) 22822944501Smrg#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) 22922944501Smrg#define DRM_IOCTL_I915_GEM_MADVISE DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MADVISE, struct drm_i915_gem_madvise) 23022944501Smrg#define DRM_IOCTL_I915_OVERLAY_PUT_IMAGE DRM_IOW(DRM_COMMAND_BASE + DRM_IOCTL_I915_OVERLAY_ATTRS, struct drm_intel_overlay_put_image) 23122944501Smrg#define DRM_IOCTL_I915_OVERLAY_ATTRS DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_OVERLAY_ATTRS, struct drm_intel_overlay_attrs) 23222944501Smrg 23322944501Smrg/* Allow drivers to submit batchbuffers directly to hardware, relying 23422944501Smrg * on the security mechanisms provided by hardware. 23522944501Smrg */ 23622944501Smrgtypedef struct drm_i915_batchbuffer { 23722944501Smrg int start; /* agp offset */ 23822944501Smrg int used; /* nr bytes in use */ 23922944501Smrg int DR1; /* hw flags for GFX_OP_DRAWRECT_INFO */ 24022944501Smrg int DR4; /* window origin for GFX_OP_DRAWRECT_INFO */ 24122944501Smrg int num_cliprects; /* mulitpass with multiple cliprects? */ 24222944501Smrg struct drm_clip_rect *cliprects; /* pointer to userspace cliprects */ 24322944501Smrg} drm_i915_batchbuffer_t; 24422944501Smrg 24522944501Smrg/* As above, but pass a pointer to userspace buffer which can be 24622944501Smrg * validated by the kernel prior to sending to hardware. 24722944501Smrg */ 24822944501Smrgtypedef struct _drm_i915_cmdbuffer { 24922944501Smrg char *buf; /* pointer to userspace command buffer */ 25022944501Smrg int sz; /* nr bytes in buf */ 25122944501Smrg int DR1; /* hw flags for GFX_OP_DRAWRECT_INFO */ 25222944501Smrg int DR4; /* window origin for GFX_OP_DRAWRECT_INFO */ 25322944501Smrg int num_cliprects; /* mulitpass with multiple cliprects? */ 25422944501Smrg struct drm_clip_rect *cliprects; /* pointer to userspace cliprects */ 25522944501Smrg} drm_i915_cmdbuffer_t; 25622944501Smrg 25722944501Smrg/* Userspace can request & wait on irq's: 25822944501Smrg */ 25922944501Smrgtypedef struct drm_i915_irq_emit { 26022944501Smrg int *irq_seq; 26122944501Smrg} drm_i915_irq_emit_t; 26222944501Smrg 26322944501Smrgtypedef struct drm_i915_irq_wait { 26422944501Smrg int irq_seq; 26522944501Smrg} drm_i915_irq_wait_t; 26622944501Smrg 26722944501Smrg/* Ioctl to query kernel params: 26822944501Smrg */ 26922944501Smrg#define I915_PARAM_IRQ_ACTIVE 1 27022944501Smrg#define I915_PARAM_ALLOW_BATCHBUFFER 2 27122944501Smrg#define I915_PARAM_LAST_DISPATCH 3 27222944501Smrg#define I915_PARAM_CHIPSET_ID 4 27322944501Smrg#define I915_PARAM_HAS_GEM 5 27422944501Smrg#define I915_PARAM_NUM_FENCES_AVAIL 6 27522944501Smrg#define I915_PARAM_HAS_OVERLAY 7 27622944501Smrg#define I915_PARAM_HAS_PAGEFLIPPING 8 27722944501Smrg#define I915_PARAM_HAS_EXECBUF2 9 27822944501Smrg 27922944501Smrgtypedef struct drm_i915_getparam { 28022944501Smrg int param; 28122944501Smrg int *value; 28222944501Smrg} drm_i915_getparam_t; 28322944501Smrg 28422944501Smrg/* Ioctl to set kernel params: 28522944501Smrg */ 28622944501Smrg#define I915_SETPARAM_USE_MI_BATCHBUFFER_START 1 28722944501Smrg#define I915_SETPARAM_TEX_LRU_LOG_GRANULARITY 2 28822944501Smrg#define I915_SETPARAM_ALLOW_BATCHBUFFER 3 28922944501Smrg#define I915_SETPARAM_NUM_USED_FENCES 4 29022944501Smrg 29122944501Smrgtypedef struct drm_i915_setparam { 29222944501Smrg int param; 29322944501Smrg int value; 29422944501Smrg} drm_i915_setparam_t; 29522944501Smrg 29622944501Smrg/* A memory manager for regions of shared memory: 29722944501Smrg */ 29822944501Smrg#define I915_MEM_REGION_AGP 1 29922944501Smrg 30022944501Smrgtypedef struct drm_i915_mem_alloc { 30122944501Smrg int region; 30222944501Smrg int alignment; 30322944501Smrg int size; 30422944501Smrg int *region_offset; /* offset from start of fb or agp */ 30522944501Smrg} drm_i915_mem_alloc_t; 30622944501Smrg 30722944501Smrgtypedef struct drm_i915_mem_free { 30822944501Smrg int region; 30922944501Smrg int region_offset; 31022944501Smrg} drm_i915_mem_free_t; 31122944501Smrg 31222944501Smrgtypedef struct drm_i915_mem_init_heap { 31322944501Smrg int region; 31422944501Smrg int size; 31522944501Smrg int start; 31622944501Smrg} drm_i915_mem_init_heap_t; 31722944501Smrg 31822944501Smrg/* Allow memory manager to be torn down and re-initialized (eg on 31922944501Smrg * rotate): 32022944501Smrg */ 32122944501Smrgtypedef struct drm_i915_mem_destroy_heap { 32222944501Smrg int region; 32322944501Smrg} drm_i915_mem_destroy_heap_t; 32422944501Smrg 32522944501Smrg/* Allow X server to configure which pipes to monitor for vblank signals 32622944501Smrg */ 32722944501Smrg#define DRM_I915_VBLANK_PIPE_A 1 32822944501Smrg#define DRM_I915_VBLANK_PIPE_B 2 32922944501Smrg 33022944501Smrgtypedef struct drm_i915_vblank_pipe { 33122944501Smrg int pipe; 33222944501Smrg} drm_i915_vblank_pipe_t; 33322944501Smrg 33422944501Smrg/* Schedule buffer swap at given vertical blank: 33522944501Smrg */ 33622944501Smrgtypedef struct drm_i915_vblank_swap { 33722944501Smrg drm_drawable_t drawable; 33822944501Smrg enum drm_vblank_seq_type seqtype; 33922944501Smrg unsigned int sequence; 34022944501Smrg} drm_i915_vblank_swap_t; 34122944501Smrg 34222944501Smrgtypedef struct drm_i915_hws_addr { 34322944501Smrg __u64 addr; 34422944501Smrg} drm_i915_hws_addr_t; 34522944501Smrg 34622944501Smrgstruct drm_i915_gem_init { 34722944501Smrg /** 34822944501Smrg * Beginning offset in the GTT to be managed by the DRM memory 34922944501Smrg * manager. 35022944501Smrg */ 35122944501Smrg __u64 gtt_start; 35222944501Smrg /** 35322944501Smrg * Ending offset in the GTT to be managed by the DRM memory 35422944501Smrg * manager. 35522944501Smrg */ 35622944501Smrg __u64 gtt_end; 35722944501Smrg}; 35822944501Smrg 35922944501Smrgstruct drm_i915_gem_create { 36022944501Smrg /** 36122944501Smrg * Requested size for the object. 36222944501Smrg * 36322944501Smrg * The (page-aligned) allocated size for the object will be returned. 36422944501Smrg */ 36522944501Smrg __u64 size; 36622944501Smrg /** 36722944501Smrg * Returned handle for the object. 36822944501Smrg * 36922944501Smrg * Object handles are nonzero. 37022944501Smrg */ 37122944501Smrg __u32 handle; 37222944501Smrg __u32 pad; 37322944501Smrg}; 37422944501Smrg 37522944501Smrgstruct drm_i915_gem_pread { 37622944501Smrg /** Handle for the object being read. */ 37722944501Smrg __u32 handle; 37822944501Smrg __u32 pad; 37922944501Smrg /** Offset into the object to read from */ 38022944501Smrg __u64 offset; 38122944501Smrg /** Length of data to read */ 38222944501Smrg __u64 size; 38322944501Smrg /** 38422944501Smrg * Pointer to write the data into. 38522944501Smrg * 38622944501Smrg * This is a fixed-size type for 32/64 compatibility. 38722944501Smrg */ 38822944501Smrg __u64 data_ptr; 38922944501Smrg}; 39022944501Smrg 39122944501Smrgstruct drm_i915_gem_pwrite { 39222944501Smrg /** Handle for the object being written to. */ 39322944501Smrg __u32 handle; 39422944501Smrg __u32 pad; 39522944501Smrg /** Offset into the object to write to */ 39622944501Smrg __u64 offset; 39722944501Smrg /** Length of data to write */ 39822944501Smrg __u64 size; 39922944501Smrg /** 40022944501Smrg * Pointer to read the data from. 40122944501Smrg * 40222944501Smrg * This is a fixed-size type for 32/64 compatibility. 40322944501Smrg */ 40422944501Smrg __u64 data_ptr; 40522944501Smrg}; 40622944501Smrg 40722944501Smrgstruct drm_i915_gem_mmap { 40822944501Smrg /** Handle for the object being mapped. */ 40922944501Smrg __u32 handle; 41022944501Smrg __u32 pad; 41122944501Smrg /** Offset in the object to map. */ 41222944501Smrg __u64 offset; 41322944501Smrg /** 41422944501Smrg * Length of data to map. 41522944501Smrg * 41622944501Smrg * The value will be page-aligned. 41722944501Smrg */ 41822944501Smrg __u64 size; 41922944501Smrg /** 42022944501Smrg * Returned pointer the data was mapped at. 42122944501Smrg * 42222944501Smrg * This is a fixed-size type for 32/64 compatibility. 42322944501Smrg */ 42422944501Smrg __u64 addr_ptr; 42522944501Smrg}; 42622944501Smrg 42722944501Smrgstruct drm_i915_gem_mmap_gtt { 42822944501Smrg /** Handle for the object being mapped. */ 42922944501Smrg __u32 handle; 43022944501Smrg __u32 pad; 43122944501Smrg /** 43222944501Smrg * Fake offset to use for subsequent mmap call 43322944501Smrg * 43422944501Smrg * This is a fixed-size type for 32/64 compatibility. 43522944501Smrg */ 43622944501Smrg __u64 offset; 43722944501Smrg}; 43822944501Smrg 43922944501Smrgstruct drm_i915_gem_set_domain { 44022944501Smrg /** Handle for the object */ 44122944501Smrg __u32 handle; 44222944501Smrg 44322944501Smrg /** New read domains */ 44422944501Smrg __u32 read_domains; 44522944501Smrg 44622944501Smrg /** New write domain */ 44722944501Smrg __u32 write_domain; 44822944501Smrg}; 44922944501Smrg 45022944501Smrgstruct drm_i915_gem_sw_finish { 45122944501Smrg /** Handle for the object */ 45222944501Smrg __u32 handle; 45322944501Smrg}; 45422944501Smrg 45522944501Smrgstruct drm_i915_gem_relocation_entry { 45622944501Smrg /** 45722944501Smrg * Handle of the buffer being pointed to by this relocation entry. 45822944501Smrg * 45922944501Smrg * It's appealing to make this be an index into the mm_validate_entry 46022944501Smrg * list to refer to the buffer, but this allows the driver to create 46122944501Smrg * a relocation list for state buffers and not re-write it per 46222944501Smrg * exec using the buffer. 46322944501Smrg */ 46422944501Smrg __u32 target_handle; 46522944501Smrg 46622944501Smrg /** 46722944501Smrg * Value to be added to the offset of the target buffer to make up 46822944501Smrg * the relocation entry. 46922944501Smrg */ 47022944501Smrg __u32 delta; 47122944501Smrg 47222944501Smrg /** Offset in the buffer the relocation entry will be written into */ 47322944501Smrg __u64 offset; 47422944501Smrg 47522944501Smrg /** 47622944501Smrg * Offset value of the target buffer that the relocation entry was last 47722944501Smrg * written as. 47822944501Smrg * 47922944501Smrg * If the buffer has the same offset as last time, we can skip syncing 48022944501Smrg * and writing the relocation. This value is written back out by 48122944501Smrg * the execbuffer ioctl when the relocation is written. 48222944501Smrg */ 48322944501Smrg __u64 presumed_offset; 48422944501Smrg 48522944501Smrg /** 48622944501Smrg * Target memory domains read by this operation. 48722944501Smrg */ 48822944501Smrg __u32 read_domains; 48922944501Smrg 49022944501Smrg /** 49122944501Smrg * Target memory domains written by this operation. 49222944501Smrg * 49322944501Smrg * Note that only one domain may be written by the whole 49422944501Smrg * execbuffer operation, so that where there are conflicts, 49522944501Smrg * the application will get -EINVAL back. 49622944501Smrg */ 49722944501Smrg __u32 write_domain; 49822944501Smrg}; 49922944501Smrg 50022944501Smrg/** @{ 50122944501Smrg * Intel memory domains 50222944501Smrg * 50322944501Smrg * Most of these just align with the various caches in 50422944501Smrg * the system and are used to flush and invalidate as 50522944501Smrg * objects end up cached in different domains. 50622944501Smrg */ 50722944501Smrg/** CPU cache */ 50822944501Smrg#define I915_GEM_DOMAIN_CPU 0x00000001 50922944501Smrg/** Render cache, used by 2D and 3D drawing */ 51022944501Smrg#define I915_GEM_DOMAIN_RENDER 0x00000002 51122944501Smrg/** Sampler cache, used by texture engine */ 51222944501Smrg#define I915_GEM_DOMAIN_SAMPLER 0x00000004 51322944501Smrg/** Command queue, used to load batch buffers */ 51422944501Smrg#define I915_GEM_DOMAIN_COMMAND 0x00000008 51522944501Smrg/** Instruction cache, used by shader programs */ 51622944501Smrg#define I915_GEM_DOMAIN_INSTRUCTION 0x00000010 51722944501Smrg/** Vertex address cache */ 51822944501Smrg#define I915_GEM_DOMAIN_VERTEX 0x00000020 51922944501Smrg/** GTT domain - aperture and scanout */ 52022944501Smrg#define I915_GEM_DOMAIN_GTT 0x00000040 52122944501Smrg/** @} */ 52222944501Smrg 52322944501Smrgstruct drm_i915_gem_exec_object { 52422944501Smrg /** 52522944501Smrg * User's handle for a buffer to be bound into the GTT for this 52622944501Smrg * operation. 52722944501Smrg */ 52822944501Smrg __u32 handle; 52922944501Smrg 53022944501Smrg /** Number of relocations to be performed on this buffer */ 53122944501Smrg __u32 relocation_count; 53222944501Smrg /** 53322944501Smrg * Pointer to array of struct drm_i915_gem_relocation_entry containing 53422944501Smrg * the relocations to be performed in this buffer. 53522944501Smrg */ 53622944501Smrg __u64 relocs_ptr; 53722944501Smrg 53822944501Smrg /** Required alignment in graphics aperture */ 53922944501Smrg __u64 alignment; 54022944501Smrg 54122944501Smrg /** 54222944501Smrg * Returned value of the updated offset of the object, for future 54322944501Smrg * presumed_offset writes. 54422944501Smrg */ 54522944501Smrg __u64 offset; 54622944501Smrg}; 54722944501Smrg 54822944501Smrgstruct drm_i915_gem_execbuffer { 54922944501Smrg /** 55022944501Smrg * List of buffers to be validated with their relocations to be 55122944501Smrg * performend on them. 55222944501Smrg * 55322944501Smrg * This is a pointer to an array of struct drm_i915_gem_validate_entry. 55422944501Smrg * 55522944501Smrg * These buffers must be listed in an order such that all relocations 55622944501Smrg * a buffer is performing refer to buffers that have already appeared 55722944501Smrg * in the validate list. 55822944501Smrg */ 55922944501Smrg __u64 buffers_ptr; 56022944501Smrg __u32 buffer_count; 56122944501Smrg 56222944501Smrg /** Offset in the batchbuffer to start execution from. */ 56322944501Smrg __u32 batch_start_offset; 56422944501Smrg /** Bytes used in batchbuffer from batch_start_offset */ 56522944501Smrg __u32 batch_len; 56622944501Smrg __u32 DR1; 56722944501Smrg __u32 DR4; 56822944501Smrg __u32 num_cliprects; 56922944501Smrg /** This is a struct drm_clip_rect *cliprects */ 57022944501Smrg __u64 cliprects_ptr; 57122944501Smrg}; 57222944501Smrg 57322944501Smrgstruct drm_i915_gem_exec_object2 { 57422944501Smrg /** 57522944501Smrg * User's handle for a buffer to be bound into the GTT for this 57622944501Smrg * operation. 57722944501Smrg */ 57822944501Smrg __u32 handle; 57922944501Smrg 58022944501Smrg /** Number of relocations to be performed on this buffer */ 58122944501Smrg __u32 relocation_count; 58222944501Smrg /** 58322944501Smrg * Pointer to array of struct drm_i915_gem_relocation_entry containing 58422944501Smrg * the relocations to be performed in this buffer. 58522944501Smrg */ 58622944501Smrg __u64 relocs_ptr; 58722944501Smrg 58822944501Smrg /** Required alignment in graphics aperture */ 58922944501Smrg __u64 alignment; 59022944501Smrg 59122944501Smrg /** 59222944501Smrg * Returned value of the updated offset of the object, for future 59322944501Smrg * presumed_offset writes. 59422944501Smrg */ 59522944501Smrg __u64 offset; 59622944501Smrg 59722944501Smrg#define EXEC_OBJECT_NEEDS_FENCE (1<<0) 59822944501Smrg __u64 flags; 59922944501Smrg __u64 rsvd1; 60022944501Smrg __u64 rsvd2; 60122944501Smrg}; 60222944501Smrg 60322944501Smrgstruct drm_i915_gem_execbuffer2 { 60422944501Smrg /** 60522944501Smrg * List of gem_exec_object2 structs 60622944501Smrg */ 60722944501Smrg __u64 buffers_ptr; 60822944501Smrg __u32 buffer_count; 60922944501Smrg 61022944501Smrg /** Offset in the batchbuffer to start execution from. */ 61122944501Smrg __u32 batch_start_offset; 61222944501Smrg /** Bytes used in batchbuffer from batch_start_offset */ 61322944501Smrg __u32 batch_len; 61422944501Smrg __u32 DR1; 61522944501Smrg __u32 DR4; 61622944501Smrg __u32 num_cliprects; 61722944501Smrg /** This is a struct drm_clip_rect *cliprects */ 61822944501Smrg __u64 cliprects_ptr; 61922944501Smrg __u64 flags; /* currently unused */ 62022944501Smrg __u64 rsvd1; 62122944501Smrg __u64 rsvd2; 62222944501Smrg}; 62322944501Smrg 62422944501Smrgstruct drm_i915_gem_pin { 62522944501Smrg /** Handle of the buffer to be pinned. */ 62622944501Smrg __u32 handle; 62722944501Smrg __u32 pad; 62822944501Smrg 62922944501Smrg /** alignment required within the aperture */ 63022944501Smrg __u64 alignment; 63122944501Smrg 63222944501Smrg /** Returned GTT offset of the buffer. */ 63322944501Smrg __u64 offset; 63422944501Smrg}; 63522944501Smrg 63622944501Smrgstruct drm_i915_gem_unpin { 63722944501Smrg /** Handle of the buffer to be unpinned. */ 63822944501Smrg __u32 handle; 63922944501Smrg __u32 pad; 64022944501Smrg}; 64122944501Smrg 64222944501Smrgstruct drm_i915_gem_busy { 64322944501Smrg /** Handle of the buffer to check for busy */ 64422944501Smrg __u32 handle; 64522944501Smrg 64622944501Smrg /** Return busy status (1 if busy, 0 if idle) */ 64722944501Smrg __u32 busy; 64822944501Smrg}; 64922944501Smrg 65022944501Smrg#define I915_TILING_NONE 0 65122944501Smrg#define I915_TILING_X 1 65222944501Smrg#define I915_TILING_Y 2 65322944501Smrg 65422944501Smrg#define I915_BIT_6_SWIZZLE_NONE 0 65522944501Smrg#define I915_BIT_6_SWIZZLE_9 1 65622944501Smrg#define I915_BIT_6_SWIZZLE_9_10 2 65722944501Smrg#define I915_BIT_6_SWIZZLE_9_11 3 65822944501Smrg#define I915_BIT_6_SWIZZLE_9_10_11 4 65922944501Smrg/* Not seen by userland */ 66022944501Smrg#define I915_BIT_6_SWIZZLE_UNKNOWN 5 66122944501Smrg/* Seen by userland. */ 66222944501Smrg#define I915_BIT_6_SWIZZLE_9_17 6 66322944501Smrg#define I915_BIT_6_SWIZZLE_9_10_17 7 66422944501Smrg 66522944501Smrgstruct drm_i915_gem_set_tiling { 66622944501Smrg /** Handle of the buffer to have its tiling state updated */ 66722944501Smrg __u32 handle; 66822944501Smrg 66922944501Smrg /** 67022944501Smrg * Tiling mode for the object (I915_TILING_NONE, I915_TILING_X, 67122944501Smrg * I915_TILING_Y). 67222944501Smrg * 67322944501Smrg * This value is to be set on request, and will be updated by the 67422944501Smrg * kernel on successful return with the actual chosen tiling layout. 67522944501Smrg * 67622944501Smrg * The tiling mode may be demoted to I915_TILING_NONE when the system 67722944501Smrg * has bit 6 swizzling that can't be managed correctly by GEM. 67822944501Smrg * 67922944501Smrg * Buffer contents become undefined when changing tiling_mode. 68022944501Smrg */ 68122944501Smrg __u32 tiling_mode; 68222944501Smrg 68322944501Smrg /** 68422944501Smrg * Stride in bytes for the object when in I915_TILING_X or 68522944501Smrg * I915_TILING_Y. 68622944501Smrg */ 68722944501Smrg __u32 stride; 68822944501Smrg 68922944501Smrg /** 69022944501Smrg * Returned address bit 6 swizzling required for CPU access through 69122944501Smrg * mmap mapping. 69222944501Smrg */ 69322944501Smrg __u32 swizzle_mode; 69422944501Smrg}; 69522944501Smrg 69622944501Smrgstruct drm_i915_gem_get_tiling { 69722944501Smrg /** Handle of the buffer to get tiling state for. */ 69822944501Smrg __u32 handle; 69922944501Smrg 70022944501Smrg /** 70122944501Smrg * Current tiling mode for the object (I915_TILING_NONE, I915_TILING_X, 70222944501Smrg * I915_TILING_Y). 70322944501Smrg */ 70422944501Smrg __u32 tiling_mode; 70522944501Smrg 70622944501Smrg /** 70722944501Smrg * Returned address bit 6 swizzling required for CPU access through 70822944501Smrg * mmap mapping. 70922944501Smrg */ 71022944501Smrg __u32 swizzle_mode; 71122944501Smrg}; 71222944501Smrg 71322944501Smrgstruct drm_i915_gem_get_aperture { 71422944501Smrg /** Total size of the aperture used by i915_gem_execbuffer, in bytes */ 71522944501Smrg __u64 aper_size; 71622944501Smrg 71722944501Smrg /** 71822944501Smrg * Available space in the aperture used by i915_gem_execbuffer, in 71922944501Smrg * bytes 72022944501Smrg */ 72122944501Smrg __u64 aper_available_size; 72222944501Smrg}; 72322944501Smrg 72422944501Smrgstruct drm_i915_get_pipe_from_crtc_id { 72522944501Smrg /** ID of CRTC being requested **/ 72622944501Smrg __u32 crtc_id; 72722944501Smrg 72822944501Smrg /** pipe of requested CRTC **/ 72922944501Smrg __u32 pipe; 73022944501Smrg}; 73122944501Smrg 73222944501Smrg#define I915_MADV_WILLNEED 0 73322944501Smrg#define I915_MADV_DONTNEED 1 73422944501Smrg#define __I915_MADV_PURGED 2 /* internal state */ 73522944501Smrg 73622944501Smrgstruct drm_i915_gem_madvise { 73722944501Smrg /** Handle of the buffer to change the backing store advice */ 73822944501Smrg __u32 handle; 73922944501Smrg 74022944501Smrg /* Advice: either the buffer will be needed again in the near future, 74122944501Smrg * or wont be and could be discarded under memory pressure. 74222944501Smrg */ 74322944501Smrg __u32 madv; 74422944501Smrg 74522944501Smrg /** Whether the backing store still exists. */ 74622944501Smrg __u32 retained; 74722944501Smrg}; 74822944501Smrg 74922944501Smrg/* flags */ 75022944501Smrg#define I915_OVERLAY_TYPE_MASK 0xff 75122944501Smrg#define I915_OVERLAY_YUV_PLANAR 0x01 75222944501Smrg#define I915_OVERLAY_YUV_PACKED 0x02 75322944501Smrg#define I915_OVERLAY_RGB 0x03 75422944501Smrg 75522944501Smrg#define I915_OVERLAY_DEPTH_MASK 0xff00 75622944501Smrg#define I915_OVERLAY_RGB24 0x1000 75722944501Smrg#define I915_OVERLAY_RGB16 0x2000 75822944501Smrg#define I915_OVERLAY_RGB15 0x3000 75922944501Smrg#define I915_OVERLAY_YUV422 0x0100 76022944501Smrg#define I915_OVERLAY_YUV411 0x0200 76122944501Smrg#define I915_OVERLAY_YUV420 0x0300 76222944501Smrg#define I915_OVERLAY_YUV410 0x0400 76322944501Smrg 76422944501Smrg#define I915_OVERLAY_SWAP_MASK 0xff0000 76522944501Smrg#define I915_OVERLAY_NO_SWAP 0x000000 76622944501Smrg#define I915_OVERLAY_UV_SWAP 0x010000 76722944501Smrg#define I915_OVERLAY_Y_SWAP 0x020000 76822944501Smrg#define I915_OVERLAY_Y_AND_UV_SWAP 0x030000 76922944501Smrg 77022944501Smrg#define I915_OVERLAY_FLAGS_MASK 0xff000000 77122944501Smrg#define I915_OVERLAY_ENABLE 0x01000000 77222944501Smrg 77322944501Smrgstruct drm_intel_overlay_put_image { 77422944501Smrg /* various flags and src format description */ 77522944501Smrg __u32 flags; 77622944501Smrg /* source picture description */ 77722944501Smrg __u32 bo_handle; 77822944501Smrg /* stride values and offsets are in bytes, buffer relative */ 77922944501Smrg __u16 stride_Y; /* stride for packed formats */ 78022944501Smrg __u16 stride_UV; 78122944501Smrg __u32 offset_Y; /* offset for packet formats */ 78222944501Smrg __u32 offset_U; 78322944501Smrg __u32 offset_V; 78422944501Smrg /* in pixels */ 78522944501Smrg __u16 src_width; 78622944501Smrg __u16 src_height; 78722944501Smrg /* to compensate the scaling factors for partially covered surfaces */ 78822944501Smrg __u16 src_scan_width; 78922944501Smrg __u16 src_scan_height; 79022944501Smrg /* output crtc description */ 79122944501Smrg __u32 crtc_id; 79222944501Smrg __u16 dst_x; 79322944501Smrg __u16 dst_y; 79422944501Smrg __u16 dst_width; 79522944501Smrg __u16 dst_height; 79622944501Smrg}; 79722944501Smrg 79822944501Smrg/* flags */ 79922944501Smrg#define I915_OVERLAY_UPDATE_ATTRS (1<<0) 80022944501Smrg#define I915_OVERLAY_UPDATE_GAMMA (1<<1) 80122944501Smrgstruct drm_intel_overlay_attrs { 80222944501Smrg __u32 flags; 80322944501Smrg __u32 color_key; 80422944501Smrg __s32 brightness; 80522944501Smrg __u32 contrast; 80622944501Smrg __u32 saturation; 80722944501Smrg __u32 gamma0; 80822944501Smrg __u32 gamma1; 80922944501Smrg __u32 gamma2; 81022944501Smrg __u32 gamma3; 81122944501Smrg __u32 gamma4; 81222944501Smrg __u32 gamma5; 81322944501Smrg}; 81422944501Smrg 81522944501Smrg#endif /* _I915_DRM_H_ */ 816