1 /*
   2  * CDDL HEADER START
   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 
  22 /*
  23  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  24  * Use is subject to license terms.
  25  */
  26 
  27 #ifndef _DRM_IO32_H_
  28 #define _DRM_IO32_H_
  29 
  30 #ifdef _MULTI_DATAMODEL
  31 
  32 typedef struct drm_version_32 {
  33         int version_major;              /* Major version */
  34         int version_minor;              /* Minor version */
  35         int version_patchlevel; /* Patch level */
  36         uint32_t name_len;              /* Length of name buffer */
  37         caddr32_t name;                 /* Name of driver */
  38         uint32_t date_len;              /* Length of date buffer */
  39         caddr32_t date;                 /* User-space buffer to hold date */
  40         uint32_t desc_len;              /* Length of desc buffer */
  41         caddr32_t desc;                 /* User-space buffer to hold desc */
  42 } drm_version_32_t;
  43 
  44 typedef struct drm_unique_32 {
  45         uint32_t unique_len;    /* Length of unique */
  46         caddr32_t unique;   /* Unique name for driver instantiation */
  47 } drm_unique_32_t;
  48 
  49 typedef struct drm_ctx_priv_map_32 {
  50         unsigned int ctx_id;    /* Context requesting private mapping */
  51         caddr32_t handle;               /* Handle of map */
  52 } drm_ctx_priv_map_32_t;
  53 
  54 typedef struct drm_map_32 {
  55         unsigned long long offset;
  56         unsigned long long handle;
  57         uint32_t size;
  58         drm_map_type_t type;
  59         drm_map_flags_t flags;
  60         int mtrr;
  61 } drm_map_32_t;
  62 
  63 
  64 typedef struct drm_client_32 {
  65         int idx;                /* Which client desired? */
  66         int auth;               /* Is client authenticated? */
  67         uint32_t pid;   /* Process ID */
  68         uint32_t uid;   /* User ID */
  69         uint32_t magic; /* Magic */
  70         uint32_t iocs;  /* Ioctl count */
  71 } drm_client_32_t;
  72 
  73 
  74 typedef struct drm_stats_32 {
  75         uint32_t count;
  76         struct {
  77                 uint32_t value;
  78                 drm_stat_type_t type;
  79         } data[15];
  80 } drm_stats_32_t;
  81 
  82 
  83 typedef struct drm_buf_desc_32 {
  84         int             count;          /* Number of buffers of this size */
  85         int             size;           /* Size in bytes */
  86         int             low_mark;       /* Low water mark */
  87         int             high_mark;      /* High water mark */
  88         drm_buf_flag flags;
  89 
  90         /*
  91          * Start address of where the AGP buffers are
  92          * in the AGP aperture
  93          */
  94         uint32_t agp_start;
  95 
  96 }drm_buf_desc_32_t;
  97 
  98 typedef struct drm_buf_free_32 {
  99         int count;
 100         uint32_t list;
 101 } drm_buf_free_32_t;
 102 
 103 /*
 104  * Used by DRM_IOCTL_MAP_BUFS_32
 105  */
 106 typedef struct drm_buf_pub_32 {
 107         int idx;                /* Index into the master buffer list */
 108         int total;              /* Buffer size */
 109         int used;               /* Amount of buffer in use (for DMA) */
 110         uint32_t address;       /* Address of buffer */
 111 } drm_buf_pub_32_t;
 112 
 113 typedef struct drm_buf_map_32 {
 114         int             count;  /* Length of the buffer list */
 115 #if defined(__cplusplus)
 116         uint32_t c_virtual;
 117 #else
 118         uint32_t virtual;       /* Mmap'd area in user-virtual */
 119 #endif
 120         uint32_t        list; /* Buffer information */
 121         int    fd;
 122 } drm_buf_map_32_t;
 123 
 124 typedef struct drm_agp_mode_32 {
 125     uint32_t mode;  /* AGP mode */
 126 } drm_agp_mode_32_t;
 127 
 128 typedef struct drm_agp_buffer32 {
 129         uint32_t size;          /* In bytes -- will round to page boundary */
 130         uint32_t handle;        /* Used for binding / unbinding */
 131         uint32_t type;          /* Type of memory to allocate */
 132         uint32_t physical;      /* Physical used by i810 */
 133 } drm_agp_buffer_32_t;
 134 
 135 typedef struct drm_agp_binding_32 {
 136         uint32_t handle;        /* From drm_agp_buffer */
 137         uint32_t offset;        /* In bytes -- will round to page boundary */
 138 } drm_agp_binding_32_t;
 139 
 140 typedef struct drm_agp_info_32 {
 141         int agp_version_major;
 142         int agp_version_minor;
 143         uint32_t mode;
 144         uint32_t aperture_base;
 145         uint32_t aperture_size;
 146         uint32_t memory_allowed;
 147         uint32_t memory_used;
 148         unsigned short id_vendor;
 149         unsigned short id_device;
 150 } drm_agp_info_32_t;
 151 
 152 typedef struct drm_scatter_gather_32 {
 153         uint32_t        size;   /* In bytes -- will round to page boundary */
 154         uint32_t        handle; /* Used for mapping/unmapping */
 155 } drm_scatter_gather_32_t;
 156 
 157 typedef struct drm_ctx_res_32 {
 158         int count;
 159         caddr32_t contexts;
 160 } drm_ctx_res_32_t;
 161 
 162 struct drm_wait_vblank_request_32 {
 163         drm_vblank_seq_type_t type;
 164         uint32_t sequence;
 165         uint32_t signal;
 166 };
 167 struct drm_wait_vblank_reply_32 {
 168         drm_vblank_seq_type_t type;
 169         uint32_t sequence;
 170         int32_t tval_sec;
 171         int32_t tval_usec;
 172 };
 173 
 174 /*
 175  * DRM_IOCTL_WAIT_VBLANK ioctl argument type.
 176  *
 177  * \sa drmWaitVBlank().
 178  */
 179 typedef union drm_wait_vblank_32 {
 180         struct drm_wait_vblank_request_32 request;
 181         struct drm_wait_vblank_reply_32 reply;
 182 } drm_wait_vblank_32_t;
 183 
 184 
 185 #endif  /* _MULTI_DATAMODEL */
 186 
 187 #endif  /* _DRM_IO32_H_ */