/****************************************************************************
 ****************************************************************************
 ***
 ***   This header was automatically generated from a Linux kernel header
 ***   of the same name, to make information necessary for userspace to
 ***   call into the kernel available to libc.  It contains only constants,
 ***   structures, and macros generated from the original header, and thus,
 ***   contains no copyrightable information.
 ***
 ***   To edit the content of this header, modify the corresponding
 ***   source file (e.g. under external/kernel-headers/original/) then
 ***   run bionic/libc/kernel/tools/update_all.py
 ***
 ***   Any manual change here will be lost the next time this script will
 ***   be run. You've been warned!
 ***
 ****************************************************************************
 ****************************************************************************/
#ifndef _VIA_DRM_H_
#define _VIA_DRM_H_
#include "drm.h"
#ifdef __cplusplus
#endif
#ifndef _VIA_DEFINES_
#define _VIA_DEFINES_
#define VIA_NR_SAREA_CLIPRECTS 8
#define VIA_NR_XVMC_PORTS 10
#define VIA_NR_XVMC_LOCKS 5
#define VIA_MAX_CACHELINE_SIZE 64
#define XVMCLOCKPTR(saPriv,lockNo) ((volatile struct drm_hw_lock *) (((((unsigned long) (saPriv)->XvMCLockArea) + (VIA_MAX_CACHELINE_SIZE - 1)) & ~(VIA_MAX_CACHELINE_SIZE - 1)) + VIA_MAX_CACHELINE_SIZE * (lockNo)))
#define VIA_NR_TEX_REGIONS 64
#define VIA_LOG_MIN_TEX_REGION_SIZE 16
#endif
#define VIA_UPLOAD_TEX0IMAGE 0x1
#define VIA_UPLOAD_TEX1IMAGE 0x2
#define VIA_UPLOAD_CTX 0x4
#define VIA_UPLOAD_BUFFERS 0x8
#define VIA_UPLOAD_TEX0 0x10
#define VIA_UPLOAD_TEX1 0x20
#define VIA_UPLOAD_CLIPRECTS 0x40
#define VIA_UPLOAD_ALL 0xff
#define DRM_VIA_ALLOCMEM 0x00
#define DRM_VIA_FREEMEM 0x01
#define DRM_VIA_AGP_INIT 0x02
#define DRM_VIA_FB_INIT 0x03
#define DRM_VIA_MAP_INIT 0x04
#define DRM_VIA_DEC_FUTEX 0x05
#define NOT_USED
#define DRM_VIA_DMA_INIT 0x07
#define DRM_VIA_CMDBUFFER 0x08
#define DRM_VIA_FLUSH 0x09
#define DRM_VIA_PCICMD 0x0a
#define DRM_VIA_CMDBUF_SIZE 0x0b
#define NOT_USED
#define DRM_VIA_WAIT_IRQ 0x0d
#define DRM_VIA_DMA_BLIT 0x0e
#define DRM_VIA_BLIT_SYNC 0x0f
#define DRM_IOCTL_VIA_ALLOCMEM DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_ALLOCMEM, drm_via_mem_t)
#define DRM_IOCTL_VIA_FREEMEM DRM_IOW(DRM_COMMAND_BASE + DRM_VIA_FREEMEM, drm_via_mem_t)
#define DRM_IOCTL_VIA_AGP_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_AGP_INIT, drm_via_agp_t)
#define DRM_IOCTL_VIA_FB_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_FB_INIT, drm_via_fb_t)
#define DRM_IOCTL_VIA_MAP_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_MAP_INIT, drm_via_init_t)
#define DRM_IOCTL_VIA_DEC_FUTEX DRM_IOW(DRM_COMMAND_BASE + DRM_VIA_DEC_FUTEX, drm_via_futex_t)
#define DRM_IOCTL_VIA_DMA_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_DMA_INIT, drm_via_dma_init_t)
#define DRM_IOCTL_VIA_CMDBUFFER DRM_IOW(DRM_COMMAND_BASE + DRM_VIA_CMDBUFFER, drm_via_cmdbuffer_t)
#define DRM_IOCTL_VIA_FLUSH DRM_IO(DRM_COMMAND_BASE + DRM_VIA_FLUSH)
#define DRM_IOCTL_VIA_PCICMD DRM_IOW(DRM_COMMAND_BASE + DRM_VIA_PCICMD, drm_via_cmdbuffer_t)
#define DRM_IOCTL_VIA_CMDBUF_SIZE DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_CMDBUF_SIZE, drm_via_cmdbuf_size_t)
#define DRM_IOCTL_VIA_WAIT_IRQ DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_WAIT_IRQ, drm_via_irqwait_t)
#define DRM_IOCTL_VIA_DMA_BLIT DRM_IOW(DRM_COMMAND_BASE + DRM_VIA_DMA_BLIT, drm_via_dmablit_t)
#define DRM_IOCTL_VIA_BLIT_SYNC DRM_IOW(DRM_COMMAND_BASE + DRM_VIA_BLIT_SYNC, drm_via_blitsync_t)
#define VIA_TEX_SETUP_SIZE 8
#define VIA_FRONT 0x1
#define VIA_BACK 0x2
#define VIA_DEPTH 0x4
#define VIA_STENCIL 0x8
#define VIA_MEM_VIDEO 0
#define VIA_MEM_AGP 1
#define VIA_MEM_SYSTEM 2
#define VIA_MEM_MIXED 3
#define VIA_MEM_UNKNOWN 4
typedef struct {
  __u32 offset;
  __u32 size;
} drm_via_agp_t;
typedef struct {
  __u32 offset;
  __u32 size;
} drm_via_fb_t;
typedef struct {
  __u32 context;
  __u32 type;
  __u32 size;
  unsigned long index;
  unsigned long offset;
} drm_via_mem_t;
typedef struct _drm_via_init {
  enum {
    VIA_INIT_MAP = 0x01,
    VIA_CLEANUP_MAP = 0x02
  } func;
  unsigned long sarea_priv_offset;
  unsigned long fb_offset;
  unsigned long mmio_offset;
  unsigned long agpAddr;
} drm_via_init_t;
typedef struct _drm_via_futex {
  enum {
    VIA_FUTEX_WAIT = 0x00,
    VIA_FUTEX_WAKE = 0X01
  } func;
  __u32 ms;
  __u32 lock;
  __u32 val;
} drm_via_futex_t;
typedef struct _drm_via_dma_init {
  enum {
    VIA_INIT_DMA = 0x01,
    VIA_CLEANUP_DMA = 0x02,
    VIA_DMA_INITIALIZED = 0x03
  } func;
  unsigned long offset;
  unsigned long size;
  unsigned long reg_pause_addr;
} drm_via_dma_init_t;
typedef struct _drm_via_cmdbuffer {
  char __user * buf;
  unsigned long size;
} drm_via_cmdbuffer_t;
typedef struct _drm_via_tex_region {
  unsigned char next, prev;
  unsigned char inUse;
  int age;
} drm_via_tex_region_t;
typedef struct _drm_via_sarea {
  unsigned int dirty;
  unsigned int nbox;
  struct drm_clip_rect boxes[VIA_NR_SAREA_CLIPRECTS];
  drm_via_tex_region_t texList[VIA_NR_TEX_REGIONS + 1];
  int texAge;
  int ctxOwner;
  int vertexPrim;
  char XvMCLockArea[VIA_MAX_CACHELINE_SIZE * (VIA_NR_XVMC_LOCKS + 1)];
  unsigned int XvMCDisplaying[VIA_NR_XVMC_PORTS];
  unsigned int XvMCSubPicOn[VIA_NR_XVMC_PORTS];
  unsigned int XvMCCtxNoGrabbed;
  unsigned int pfCurrentOffset;
} drm_via_sarea_t;
typedef struct _drm_via_cmdbuf_size {
  enum {
    VIA_CMDBUF_SPACE = 0x01,
    VIA_CMDBUF_LAG = 0x02
  } func;
  int wait;
  __u32 size;
} drm_via_cmdbuf_size_t;
typedef enum {
  VIA_IRQ_ABSOLUTE = 0x0,
  VIA_IRQ_RELATIVE = 0x1,
  VIA_IRQ_SIGNAL = 0x10000000,
  VIA_IRQ_FORCE_SEQUENCE = 0x20000000
} via_irq_seq_type_t;
#define VIA_IRQ_FLAGS_MASK 0xF0000000
enum drm_via_irqs {
  drm_via_irq_hqv0 = 0,
  drm_via_irq_hqv1,
  drm_via_irq_dma0_dd,
  drm_via_irq_dma0_td,
  drm_via_irq_dma1_dd,
  drm_via_irq_dma1_td,
  drm_via_irq_num
};
struct drm_via_wait_irq_request {
  unsigned irq;
  via_irq_seq_type_t type;
  __u32 sequence;
  __u32 signal;
};
typedef union drm_via_irqwait {
  struct drm_via_wait_irq_request request;
  struct drm_wait_vblank_reply reply;
} drm_via_irqwait_t;
typedef struct drm_via_blitsync {
  __u32 sync_handle;
  unsigned engine;
} drm_via_blitsync_t;
typedef struct drm_via_dmablit {
  __u32 num_lines;
  __u32 line_length;
  __u32 fb_addr;
  __u32 fb_stride;
  unsigned char * mem_addr;
  __u32 mem_stride;
  __u32 flags;
  int to_fb;
  drm_via_blitsync_t sync;
} drm_via_dmablit_t;
#ifdef __cplusplus
#endif
#endif
