Re-import from DRI tree.
authorIan Romanick <idr@us.ibm.com>
Wed, 2 Jun 2004 17:48:43 +0000 (17:48 +0000)
committerIan Romanick <idr@us.ibm.com>
Wed, 2 Jun 2004 17:48:43 +0000 (17:48 +0000)
src/mesa/drivers/dri/dri_client/imports/sarea.h
src/mesa/drivers/dri/dri_client/imports/xf86drm.h
src/mesa/drivers/dri/dri_client/xf86drm.c

index d4d83df..77c16e0 100644 (file)
@@ -88,7 +88,7 @@ typedef struct _XF86DRISAREA {
     drmLock                    drawable_lock;
     XF86DRISAREADrawableRec    drawableTable[SAREA_MAX_DRAWABLES];
     XF86DRISAREAFrameRec        frame;
-    drmContext                 dummy_context;
+    drm_context_t                      dummy_context;
 } XF86DRISAREARec, *XF86DRISAREAPtr;
 
 #endif
index c9f1007..0b6e93f 100644 (file)
@@ -36,6 +36,8 @@
 #ifndef _XF86DRM_H_
 #define _XF86DRM_H_
 
+#include <drm.h>
+
                                /* Defaults, if nothing set in xf86config */
 #define DRM_DEV_UID     0
 #define DRM_DEV_GID     0
 
 #define DRM_AGP_NO_HANDLE 0
 
-typedef unsigned long drmHandle,   *drmHandlePtr;   /**< To mapped regions */
 typedef unsigned int  drmSize,     *drmSizePtr;            /**< For mapped regions */
 typedef void          *drmAddress, **drmAddressPtr; /**< For mapped regions */
-typedef unsigned int  drmContext,  *drmContextPtr;  /**< GLXContext handle */
-typedef unsigned int  drmDrawable, *drmDrawablePtr; /**< Unused */
-typedef unsigned int  drmMagic,    *drmMagicPtr;    /**< Magic for authentication */
 
 /**
  * Driver version information.
@@ -168,7 +166,7 @@ typedef enum {
     DRM_CONTEXT_PRESERVED = 0x01, /**< This context is preserved and
                                     never swapped. */
     DRM_CONTEXT_2DONLY    = 0x02  /**< This context is for 2D rendering only. */
-} drmContextFlags, *drmContextFlagsPtr;
+} drm_context_tFlags, *drm_context_tFlagsPtr;
 
 typedef struct _drmBufDesc {
     int              count;      /**< Number of buffers of this size */
@@ -221,7 +219,7 @@ typedef struct _drmLock {
  * list in drmBufInfo
  */
 typedef struct _drmDMAReq {
-    drmContext    context;       /**< Context handle */
+    drm_context_t    context;            /**< Context handle */
     int           send_count;     /**< Number of buffers to send */
     int           *send_list;     /**< List of handles to buffers */
     int           *send_sizes;    /**< Lengths of data to send, in bytes */
@@ -234,7 +232,7 @@ typedef struct _drmDMAReq {
 } drmDMAReq, *drmDMAReqPtr;
 
 typedef struct _drmRegion {
-    drmHandle     handle;
+    drm_handle_t     handle;
     unsigned int  offset;
     drmSize       size;
     drmAddress    map;
@@ -249,14 +247,6 @@ typedef struct _drmTextureRegion {
 } drmTextureRegion, *drmTextureRegionPtr;
 
 
-typedef struct _drmClipRect {
-    unsigned short     x1; /* Upper left: inclusive */
-    unsigned short     y1;
-    unsigned short     x2; /* Lower right: exclusive */
-    unsigned short     y2;
-} drmClipRect, *drmClipRectPtr;
-
-
 typedef enum {
     DRM_VBLANK_ABSOLUTE = 0x0, /**< Wait for specific vblank sequence number */
     DRM_VBLANK_RELATIVE = 0x1, /**< Wait for given number of vblanks */
@@ -499,13 +489,13 @@ extern int           drmClose(int fd);
 extern drmVersionPtr drmGetVersion(int fd);
 extern drmVersionPtr drmGetLibVersion(int fd);
 extern void          drmFreeVersion(drmVersionPtr);
-extern int           drmGetMagic(int fd, drmMagicPtr magic);
+extern int           drmGetMagic(int fd, drm_magic_t * magic);
 extern char          *drmGetBusid(int fd);
 extern int           drmGetInterruptFromBusID(int fd, int busnum, int devnum,
                                              int funcnum);
-extern int           drmGetMap(int fd, int idx, drmHandle *offset,
+extern int           drmGetMap(int fd, int idx, drm_handle_t *offset,
                               drmSize *size, drmMapType *type,
-                              drmMapFlags *flags, drmHandle *handle,
+                              drmMapFlags *flags, drm_handle_t *handle,
                               int *mtrr);
 extern int           drmGetClient(int fd, int idx, int *auth, int *pid,
                                  int *uid, unsigned long *magic,
@@ -523,35 +513,35 @@ extern int           drmCommandWriteRead(int fd, unsigned long drmCommandIndex,
 /* General user-level programmer's API: X server (root) only  */
 extern void          drmFreeBusid(const char *busid);
 extern int           drmSetBusid(int fd, const char *busid);
-extern int           drmAuthMagic(int fd, drmMagic magic);
+extern int           drmAuthMagic(int fd, drm_magic_t magic);
 extern int           drmAddMap(int fd,
-                              drmHandle offset,
+                              drm_handle_t offset,
                               drmSize size,
                               drmMapType type,
                               drmMapFlags flags,
-                              drmHandlePtr handle);
-extern int          drmRmMap(int fd, drmHandle handle);
-extern int          drmAddContextPrivateMapping(int fd, drmContext ctx_id,
-                                                drmHandle handle);
+                              drm_handle_t * handle);
+extern int          drmRmMap(int fd, drm_handle_t handle);
+extern int          drmAddContextPrivateMapping(int fd, drm_context_t ctx_id,
+                                                drm_handle_t handle);
 
 extern int           drmAddBufs(int fd, int count, int size,
                                drmBufDescFlags flags,
                                int agp_offset);
 extern int           drmMarkBufs(int fd, double low, double high);
-extern int           drmCreateContext(int fd, drmContextPtr handle);
-extern int           drmSetContextFlags(int fd, drmContext context,
-                                       drmContextFlags flags);
-extern int           drmGetContextFlags(int fd, drmContext context,
-                                       drmContextFlagsPtr flags);
-extern int           drmAddContextTag(int fd, drmContext context, void *tag);
-extern int           drmDelContextTag(int fd, drmContext context);
-extern void          *drmGetContextTag(int fd, drmContext context);
-extern drmContextPtr drmGetReservedContextList(int fd, int *count);
-extern void          drmFreeReservedContextList(drmContextPtr);
-extern int           drmSwitchToContext(int fd, drmContext context);
-extern int           drmDestroyContext(int fd, drmContext handle);
-extern int           drmCreateDrawable(int fd, drmDrawablePtr handle);
-extern int           drmDestroyDrawable(int fd, drmDrawable handle);
+extern int           drmCreateContext(int fd, drm_context_t * handle);
+extern int           drmSetContextFlags(int fd, drm_context_t context,
+                                       drm_context_tFlags flags);
+extern int           drmGetContextFlags(int fd, drm_context_t context,
+                                       drm_context_tFlagsPtr flags);
+extern int           drmAddContextTag(int fd, drm_context_t context, void *tag);
+extern int           drmDelContextTag(int fd, drm_context_t context);
+extern void          *drmGetContextTag(int fd, drm_context_t context);
+extern drm_context_t * drmGetReservedContextList(int fd, int *count);
+extern void          drmFreeReservedContextList(drm_context_t *);
+extern int           drmSwitchToContext(int fd, drm_context_t context);
+extern int           drmDestroyContext(int fd, drm_context_t handle);
+extern int           drmCreateDrawable(int fd, drm_drawable_t * handle);
+extern int           drmDestroyDrawable(int fd, drm_drawable_t handle);
 extern int           drmCtlInstHandler(int fd, int irq);
 extern int           drmCtlUninstHandler(int fd);
 extern int           drmInstallSIGIOHandler(int fd,
@@ -562,7 +552,7 @@ extern int           drmRemoveSIGIOHandler(int fd);
 
 /* General user-level programmer's API: authenticated client and/or X */
 extern int           drmMap(int fd,
-                           drmHandle handle,
+                           drm_handle_t handle,
                            drmSize size,
                            drmAddressPtr address);
 extern int           drmUnmap(drmAddress address, drmSize size);
@@ -572,12 +562,12 @@ extern int           drmUnmapBufs(drmBufMapPtr bufs);
 extern int           drmDMA(int fd, drmDMAReqPtr request);
 extern int           drmFreeBufs(int fd, int count, int *list);
 extern int           drmGetLock(int fd,
-                               drmContext context,
+                               drm_context_t context,
                                drmLockFlags flags);
-extern int           drmUnlock(int fd, drmContext context);
+extern int           drmUnlock(int fd, drm_context_t context);
 extern int           drmFinish(int fd, int context, drmLockFlags flags);
-extern int          drmGetContextPrivateMapping(int fd, drmContext ctx_id, 
-                                                drmHandlePtr handle);
+extern int          drmGetContextPrivateMapping(int fd, drm_context_t ctx_id, 
+                                                drm_handle_t * handle);
 
 /* AGP/GART support: X server (root) only */
 extern int           drmAgpAcquire(int fd);
index 23750b9..2b0b1b9 100644 (file)
@@ -804,7 +804,7 @@ int drmSetBusid(int fd, const char *busid)
     return 0;
 }
 
-int drmGetMagic(int fd, drmMagicPtr magic)
+int drmGetMagic(int fd, drm_magic_t * magic)
 {
     drm_auth_t auth;
 
@@ -814,7 +814,7 @@ int drmGetMagic(int fd, drmMagicPtr magic)
     return 0;
 }
 
-int drmAuthMagic(int fd, drmMagic magic)
+int drmAuthMagic(int fd, drm_magic_t magic)
 {
     drm_auth_t auth;
 
@@ -874,11 +874,11 @@ int drmAuthMagic(int fd, drmMagic magic)
  * the arguments in a drm_map structure.
  */
 int drmAddMap(int fd,
-             drmHandle offset,
+             drm_handle_t offset,
              drmSize size,
              drmMapType type,
              drmMapFlags flags,
-             drmHandlePtr handle)
+             drm_handle_t * handle)
 {
     drm_map_t map;
 
@@ -894,11 +894,11 @@ int drmAddMap(int fd,
     map.type    = type;
     map.flags   = flags;
     if (ioctl(fd, DRM_IOCTL_ADD_MAP, &map)) return -errno;
-    if (handle) *handle = (drmHandle)map.handle;
+    if (handle) *handle = (drm_handle_t)map.handle;
     return 0;
 }
 
-int drmRmMap(int fd, drmHandle handle)
+int drmRmMap(int fd, drm_handle_t handle)
 {
     drm_map_t map;
 
@@ -1041,7 +1041,7 @@ int drmClose(int fd)
  * This function is a wrapper for mmap().
  */
 int drmMap(int fd,
-          drmHandle handle,
+          drm_handle_t handle,
           drmSize size,
           drmAddressPtr address)
 {
@@ -1135,9 +1135,11 @@ drmBufMapPtr drmMapBufs(int fd)
 
     bufs.count = 0;
     bufs.list  = NULL;
+    bufs.virtual = NULL;
     if (ioctl(fd, DRM_IOCTL_MAP_BUFS, &bufs)) return NULL;
 
-    if (bufs.count) {
+    if (!bufs.count) return NULL;
+
        if (!(bufs.list = drmMalloc(bufs.count * sizeof(*bufs.list))))
            return NULL;
 
@@ -1156,9 +1158,10 @@ drmBufMapPtr drmMapBufs(int fd)
            retval->list[i].used    = 0;
            retval->list[i].address = bufs.list[i].address;
        }
+
+       drmFree(bufs.list);
+       
        return retval;
-    }
-    return NULL;
 }
 
 
@@ -1168,7 +1171,8 @@ drmBufMapPtr drmMapBufs(int fd)
  * \return zero on success, or negative value on failure.
  *
  * \internal
- * Calls munmap() for every buffer stored in \p bufs.
+ * Calls munmap() for every buffer stored in \p bufs and frees the
+ * memory allocated by drmMapBufs().
  */
 int drmUnmapBufs(drmBufMapPtr bufs)
 {
@@ -1177,6 +1181,10 @@ int drmUnmapBufs(drmBufMapPtr bufs)
     for (i = 0; i < bufs->count; i++) {
        munmap(bufs->list[i].address, bufs->list[i].total);
     }
+
+    drmFree(bufs->list);
+    drmFree(bufs);
+       
     return 0;
 }
 
@@ -1210,6 +1218,7 @@ int drmDMA(int fd, drmDMAReqPtr request)
     dma.request_size    = request->request_size;
     dma.request_indices = request->request_list;
     dma.request_sizes   = request->request_sizes;
+    dma.granted_count   = 0;
 
     do {
        ret = ioctl( fd, DRM_IOCTL_DMA, &dma );
@@ -1238,7 +1247,7 @@ int drmDMA(int fd, drmDMAReqPtr request)
  * This function translates the arguments into a drm_lock structure and issue
  * the DRM_IOCTL_LOCK ioctl until the lock is successfully acquired.
  */
-int drmGetLock(int fd, drmContext context, drmLockFlags flags)
+int drmGetLock(int fd, drm_context_t context, drmLockFlags flags)
 {
     drm_lock_t lock;
 
@@ -1268,7 +1277,7 @@ int drmGetLock(int fd, drmContext context, drmLockFlags flags)
  * This function is a wrapper around the DRM_IOCTL_UNLOCK ioctl, passing the
  * argument in a drm_lock structure.
  */
-int drmUnlock(int fd, drmContext context)
+int drmUnlock(int fd, drm_context_t context)
 {
     drm_lock_t lock;
 
@@ -1277,11 +1286,11 @@ int drmUnlock(int fd, drmContext context)
     return ioctl(fd, DRM_IOCTL_UNLOCK, &lock);
 }
 
-drmContextPtr drmGetReservedContextList(int fd, int *count)
+drm_context_t * drmGetReservedContextList(int fd, int *count)
 {
     drm_ctx_res_t res;
     drm_ctx_t     *list;
-    drmContextPtr retval;
+    drm_context_t * retval;
     int           i;
 
     res.count    = 0;
@@ -1306,7 +1315,7 @@ drmContextPtr drmGetReservedContextList(int fd, int *count)
     return retval;
 }
 
-void drmFreeReservedContextList(drmContextPtr pt)
+void drmFreeReservedContextList(drm_context_t * pt)
 {
     drmFree(pt);
 }
@@ -1329,7 +1338,7 @@ void drmFreeReservedContextList(drmContextPtr pt)
  * This function is a wrapper around the DRM_IOCTL_ADD_CTX ioctl, passing the
  * argument in a drm_ctx structure.
  */
-int drmCreateContext(int fd, drmContextPtr handle)
+int drmCreateContext(int fd, drm_context_t * handle)
 {
     drm_ctx_t ctx;
 
@@ -1339,7 +1348,7 @@ int drmCreateContext(int fd, drmContextPtr handle)
     return 0;
 }
 
-int drmSwitchToContext(int fd, drmContext context)
+int drmSwitchToContext(int fd, drm_context_t context)
 {
     drm_ctx_t ctx;
 
@@ -1348,7 +1357,7 @@ int drmSwitchToContext(int fd, drmContext context)
     return 0;
 }
 
-int drmSetContextFlags(int fd, drmContext context, drmContextFlags flags)
+int drmSetContextFlags(int fd, drm_context_t context, drm_context_tFlags flags)
 {
     drm_ctx_t ctx;
 
@@ -1368,7 +1377,7 @@ int drmSetContextFlags(int fd, drmContext context, drmContextFlags flags)
     return 0;
 }
 
-int drmGetContextFlags(int fd, drmContext context, drmContextFlagsPtr flags)
+int drmGetContextFlags(int fd, drm_context_t context, drm_context_tFlagsPtr flags)
 {
     drm_ctx_t ctx;
 
@@ -1397,7 +1406,7 @@ int drmGetContextFlags(int fd, drmContext context, drmContextFlagsPtr flags)
  * This function is a wrapper around the DRM_IOCTL_RM_CTX ioctl, passing the
  * argument in a drm_ctx structure.
  */
-int drmDestroyContext(int fd, drmContext handle)
+int drmDestroyContext(int fd, drm_context_t handle)
 {
     drm_ctx_t ctx;
     ctx.handle = handle;
@@ -1405,7 +1414,7 @@ int drmDestroyContext(int fd, drmContext handle)
     return 0;
 }
 
-int drmCreateDrawable(int fd, drmDrawablePtr handle)
+int drmCreateDrawable(int fd, drm_drawable_t * handle)
 {
     drm_draw_t draw;
     if (ioctl(fd, DRM_IOCTL_ADD_DRAW, &draw)) return -errno;
@@ -1413,7 +1422,7 @@ int drmCreateDrawable(int fd, drmDrawablePtr handle)
     return 0;
 }
 
-int drmDestroyDrawable(int fd, drmDrawable handle)
+int drmDestroyDrawable(int fd, drm_drawable_t handle)
 {
     drm_draw_t draw;
     draw.handle = handle;
@@ -1906,7 +1915,7 @@ int drmGetInterruptFromBusID(int fd, int busnum, int devnum, int funcnum)
     return p.irq;
 }
 
-int drmAddContextTag(int fd, drmContext context, void *tag)
+int drmAddContextTag(int fd, drm_context_t context, void *tag)
 {
     drmHashEntry  *entry = drmGetEntry(fd);
 
@@ -1917,14 +1926,14 @@ int drmAddContextTag(int fd, drmContext context, void *tag)
     return 0;
 }
 
-int drmDelContextTag(int fd, drmContext context)
+int drmDelContextTag(int fd, drm_context_t context)
 {
     drmHashEntry  *entry = drmGetEntry(fd);
 
     return drmHashDelete(entry->tagTable, context);
 }
 
-void *drmGetContextTag(int fd, drmContext context)
+void *drmGetContextTag(int fd, drm_context_t context)
 {
     drmHashEntry  *entry = drmGetEntry(fd);
     void          *value;
@@ -1934,7 +1943,7 @@ void *drmGetContextTag(int fd, drmContext context)
     return value;
 }
 
-int drmAddContextPrivateMapping(int fd, drmContext ctx_id, drmHandle handle)
+int drmAddContextPrivateMapping(int fd, drm_context_t ctx_id, drm_handle_t handle)
 {
     drm_ctx_priv_map_t map;
 
@@ -1945,20 +1954,20 @@ int drmAddContextPrivateMapping(int fd, drmContext ctx_id, drmHandle handle)
     return 0;
 }
 
-int drmGetContextPrivateMapping(int fd, drmContext ctx_id, drmHandlePtr handle)
+int drmGetContextPrivateMapping(int fd, drm_context_t ctx_id, drm_handle_t * handle)
 {
     drm_ctx_priv_map_t map;
 
     map.ctx_id = ctx_id;
 
     if (ioctl(fd, DRM_IOCTL_GET_SAREA_CTX, &map)) return -errno;
-    if (handle) *handle = (drmHandle)map.handle;
+    if (handle) *handle = (drm_handle_t)map.handle;
 
     return 0;
 }
 
-int drmGetMap(int fd, int idx, drmHandle *offset, drmSize *size,
-             drmMapType *type, drmMapFlags *flags, drmHandle *handle,
+int drmGetMap(int fd, int idx, drm_handle_t *offset, drmSize *size,
+             drmMapType *type, drmMapFlags *flags, drm_handle_t *handle,
              int *mtrr)
 {
     drm_map_t map;
@@ -2268,8 +2277,8 @@ static void drmSIGIOHandler(int interrupt, void *closure)
     drm_ctx_t     ctx;
     typedef void  (*_drmCallback)(int, void *, void *);
     char          buf[256];
-    drmContext    old;
-    drmContext    new;
+    drm_context_t    old;
+    drm_context_t    new;
     void          *oldctx;
     void          *newctx;
     char          *pt;