Bring VIA driver up-to-date with regard to drm_*_t changes and remove
authorAlan Hourihane <alanh@tungstengraphics.com>
Wed, 5 Jan 2005 13:45:09 +0000 (13:45 +0000)
committerAlan Hourihane <alanh@tungstengraphics.com>
Wed, 5 Jan 2005 13:45:09 +0000 (13:45 +0000)
the xf86drmVIA.[ch] files.

Bring in the IRQ handler and Ring buffer code, but ring buffer is disabled
as it is with the Xserver. It certainly locks up the CLE266.

src/mesa/drivers/dri/unichrome/Makefile
src/mesa/drivers/dri/unichrome/server/via_dri.c
src/mesa/drivers/dri/unichrome/via_common.h
src/mesa/drivers/dri/unichrome/via_context.h
src/mesa/drivers/dri/unichrome/via_dri.h
src/mesa/drivers/dri/unichrome/via_fb.c
src/mesa/drivers/dri/unichrome/via_ioctl.c
src/mesa/drivers/dri/unichrome/xf86drmVIA.c [deleted file]
src/mesa/drivers/dri/unichrome/xf86drmVIA.h [deleted file]

index b08a239e083d42241925acb45f04a0f86f458076..3e2f813f9570f836dd4fdd95ceec6094e8a2c78b 100644 (file)
@@ -29,8 +29,7 @@ DRIVER_SOURCES = \
        via_texmem.c \
        via_texstate.c \
        via_tris.c \
-       via_texcombine.c \
-       xf86drmVIA.c
+       via_texcombine.c
 
 C_SOURCES = \
        $(COMMON_SOURCES) \
index ea53c6adf86220e2d41f236a387530c7ac161d95..2d69c4d7a4cf45b232f158971ca83301cf683cc4 100644 (file)
@@ -77,7 +77,7 @@ static int VIADRIFinishScreenInit(DRIDriverContext * ctx);
 #define AGP_PAGE_SIZE 4096
 #define AGP_PAGES 8192
 #define AGP_SIZE (AGP_PAGE_SIZE * AGP_PAGES)
-#define AGP_CMDBUF_PAGES 256
+#define AGP_CMDBUF_PAGES 512
 #define AGP_CMDBUF_SIZE (AGP_PAGE_SIZE * AGP_CMDBUF_PAGES)
 
 static char VIAKernelDriverName[] = "via";
@@ -89,6 +89,119 @@ static int VIADRIFBInit(DRIDriverContext * ctx, VIAPtr pVia);
 static int VIADRIKernelInit(DRIDriverContext * ctx, VIAPtr pVia);
 static int VIADRIMapInit(DRIDriverContext * ctx, VIAPtr pVia);
 
+static void VIADRIIrqInit( DRIDriverContext *ctx )
+{
+    VIAPtr pVia = VIAPTR(ctx);
+    VIADRIPtr pVIADRI = pVia->devPrivate;
+
+    pVIADRI->irqEnabled = drmGetInterruptFromBusID(pVia->drmFD,
+                                          ctx->pciBus,
+                                          ctx->pciDevice,
+                                          ctx->pciFunc);
+
+    if ((drmCtlInstHandler(pVia->drmFD, pVIADRI->irqEnabled))) {
+       xf86DrvMsg(pScreen->myNum, X_WARNING,
+                  "[drm] Failure adding irq handler. "
+                  "Falling back to irq-free operation.\n");
+       pVIADRI->irqEnabled = 0;
+    }
+
+    if (pVIADRI->irqEnabled)
+       xf86DrvMsg(pScreen->myNum, X_INFO,
+                  "[drm] Irq handler installed, using IRQ %d.\n",
+                  pVIADRI->irqEnabled);
+}
+
+static void VIADRIIrqExit( DRIDriverContext *ctx ) {
+    VIAPtr pVia = VIAPTR(ctx);
+    VIADRIPtr pVIADRI = pVia->devPrivate;
+
+    if (pVIADRI->irqEnabled) {
+       if (drmCtlUninstHandler(pVia->drmFD)) {
+           xf86DrvMsg(pScreen-myNum, X_INFO,"[drm] Irq handler uninstalled.\n");
+       } else {
+           xf86DrvMsg(pScreen->myNum, X_ERROR,
+                      "[drm] Could not uninstall irq handler.\n");
+       }
+    }
+}
+           
+
+/* Locks up engine - FIXME 
+#define ENABLE_AGP_RINGBUF
+*/
+
+#ifdef ENABLE_AGP_RINGBUF
+
+static void VIADRIRingBufferCleanup(DRIDriverContext *ctx)
+{
+    VIAPtr pVia = VIAPTR(ctx);
+    VIADRIPtr pVIADRI = pVia->devPrivate;
+    drmVIADMAInit ringBufInit;
+
+    if (pVIADRI->ringBufActive) {
+       xf86DrvMsg(pScreen->myNum, X_INFO, 
+                  "[drm] Cleaning up DMA ring-buffer.\n");
+       ringBufInit.func = VIA_CLEANUP_DMA;
+       if (drmCommandWrite(pVia->drmFD, DRM_VIA_DMA_INIT, &ringBufInit,
+                           sizeof(ringBufInit))) {
+           xf86DrvMsg(pScreen->myNum, X_WARNING, 
+                      "[drm] Failed to clean up DMA ring-buffer: %d\n", errno);
+       }
+       pVIADRI->ringBufActive = 0;
+    }
+}
+
+static int VIADRIRingBufferInit(DRIDriverContext *ctx)
+{
+    VIAPtr pVia = VIAPTR(ctx);
+    VIADRIPtr pVIADRI = pVia->devPrivate;
+    drmVIADMAInit ringBufInit;
+    drmVersionPtr drmVer;
+
+    pVIADRI->ringBufActive = 0;
+
+    if (NULL == (drmVer = drmGetVersion(pVia->drmFD))) {
+       return GL_FALSE;
+    }
+
+    if (((drmVer->version_major <= 1) && (drmVer->version_minor <= 3))) {
+       return GL_FALSE;
+    } 
+
+    /*
+     * Info frome code-snippet on DRI-DEVEL list; Erdi Chen.
+     */
+
+    switch (pVia->ChipId) {
+    case PCI_CHIP_VT3259:
+       ringBufInit.reg_pause_addr = 0x40c;
+       break;
+    default:
+       ringBufInit.reg_pause_addr = 0x418;
+       break;
+    }
+   
+    ringBufInit.offset = pVia->agpSize;
+    ringBufInit.size = AGP_CMDBUF_SIZE;
+    ringBufInit.func = VIA_INIT_DMA;
+    if (drmCommandWrite(pVia->drmFD, DRM_VIA_DMA_INIT, &ringBufInit,
+                       sizeof(ringBufInit))) {
+       xf86DrvMsg(pScreen->myNum, X_ERROR, 
+                  "[drm] Failed to initialize DMA ring-buffer: %d\n", errno);
+       return GL_FALSE;
+    }
+    xf86DrvMsg(pScreen->myNum, X_INFO, 
+              "[drm] Initialized AGP ring-buffer, size 0x%lx at AGP offset 0x%lx.\n",
+              ringBufInit.size, ringBufInit.offset);
+   
+    pVIADRI->ringBufActive = 1;
+    return GL_TRUE;
+}          
+
+#endif
+       
+
 static int VIADRIAgpInit(const DRIDriverContext *ctx, VIAPtr pVia)
 {
     unsigned long  agp_phys;
@@ -125,7 +238,12 @@ static int VIADRIAgpInit(const DRIDriverContext *ctx, VIAPtr pVia)
         return GL_FALSE;
     }
 
-    pVia->agpSize = AGP_SIZE;
+    /*
+     * Place the ring-buffer last in the AGP region, and restrict the
+     * public map not to include the buffer for security reasons.
+     */
+
+    pVia->agpSize = AGP_SIZE - AGP_CMDBUF_SIZE;
     pVia->agpAddr = drmAgpBase(pVia->drmFD);
     xf86DrvMsg(pScreen->myNum, X_INFO,
                  "[drm] agpAddr = 0x%08lx\n",pVia->agpAddr);
@@ -154,9 +272,22 @@ static int VIADRIAgpInit(const DRIDriverContext *ctx, VIAPtr pVia)
     xf86DrvMsg(pScreen->myNum, X_INFO, 
                 "[drm] agp physical addr = 0x%08lx\n", agp_phys);
 
-    drmVIAAgpInit(pVia->drmFD, 0, AGP_SIZE);
-    return GL_TRUE;
+    {
+       drm_via_agp_t agp;
+       agp.offset = 0;
+       agp.size = AGP_SIZE-AGP_CMDBUF_SIZE;
+       if (drmCommandWrite(pVia->drmFD, DRM_VIA_AGP_INIT, &agp,
+                           sizeof(drm_via_agp_t)) < 0) {
+           drmUnmap(&agpaddr,pVia->agpSize);
+           drmRmMap(pVia->drmFD,pVIADRI->agp.handle);
+           drmAgpUnbind(pVia->drmFD, pVia->agpHandle);
+           drmAgpFree(pVia->drmFD, pVia->agpHandle);
+           drmAgpRelease(pVia->drmFD);
+           return GL_FALSE;
+       }
+    }
 
+    return GL_TRUE;
 }
 
 static int VIADRIFBInit(DRIDriverContext * ctx, VIAPtr pVia)
@@ -167,13 +298,23 @@ static int VIADRIFBInit(DRIDriverContext * ctx, VIAPtr pVia)
     pVIADRI->fbOffset = FBOffset;
     pVIADRI->fbSize = pVia->videoRambytes;
 
-    if (drmVIAFBInit(pVia->drmFD, FBOffset, FBSize) < 0) {
-       xf86DrvMsg(pScreen->myNum, X_ERROR,"[drm] failed to init frame buffer area\n");
-       return GL_FALSE;
-    }
-    else {
-       xf86DrvMsg(pScreen->myNum, X_INFO,"[drm] FBFreeStart= 0x%08lx FBFreeEnd= 0x%08lx FBSize= 0x%08lx\n", pVia->FBFreeStart, pVia->FBFreeEnd, FBSize);
-       return GL_TRUE;
+    {
+       drm_via_fb_t fb;
+       fb.offset = FBOffset;
+       fb.size = FBSize;
+       
+       if (drmCommandWrite(pVia->drmFD, DRM_VIA_FB_INIT, &fb,
+                           sizeof(drm_via_fb_t)) < 0) {
+           xf86DrvMsg(pScreen->myNum, X_ERROR,
+                      "[drm] failed to init frame buffer area\n");
+           return GL_FALSE;
+       } else {
+           xf86DrvMsg(pScreen->myNum, X_INFO,
+                      "[drm] FBFreeStart= 0x%08x FBFreeEnd= 0x%08x "
+                      "FBSize= 0x%08x\n",
+                      pVia->FBFreeStart, pVia->FBFreeEnd, FBSize);
+           return GL_TRUE;     
+       }   
     }
 }
 
@@ -274,7 +415,7 @@ static int VIADRIScreenInit(DRIDriverContext * ctx)
 
     if (!(VIADRIFBInit(ctx, pVia))) {
        VIADRICloseScreen(ctx);
-        xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[dri] frame buffer initialize fial .\n" );
+        xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[dri] frame buffer initialize fail .\n" );
         return GL_FALSE;
     }
     
@@ -315,6 +456,10 @@ VIADRICloseScreen(DRIDriverContext * ctx)
     VIAPtr pVia = VIAPTR(ctx);
     VIADRIPtr pVIADRI=(VIADRIPtr)pVia->devPrivate;
 
+#ifdef ENABLE_AGP_RINGBUF
+    VIADRIRingBufferCleanup(ctx);
+#endif
+
     if (pVia->MapBase) {
        xf86DrvMsg(pScreen->myNum, X_INFO, "[drm] Unmapping MMIO registers\n");
         drmUnmap(pVia->MapBase, pVIADRI->regs.size);
@@ -326,6 +471,11 @@ VIADRICloseScreen(DRIDriverContext * ctx)
        xf86DrvMsg(pScreen->myNum, X_INFO, "[drm] Releasing agp module\n");
        drmAgpRelease(pVia->drmFD);
     }
+
+#if 0
+    if (pVia->DRIIrqEnable) 
+#endif
+        VIADRIIrqExit(ctx);
 }
 
 static int
@@ -371,15 +521,27 @@ VIADRIFinishScreenInit(DRIDriverContext * ctx)
     pVIADRI->scrnX=pVIADRI->width;
     pVIADRI->scrnY=pVIADRI->height;
 
+    /* Initialize IRQ */
+#if 0
+    if (pVia->DRIIrqEnable) 
+#endif
+       VIADRIIrqInit(ctx);
+    
+#ifdef ENABLE_AGP_RINGBUF
+    pVIADRI->ringBufActive = 0;
+    VIADRIRingBufferInit(ctx);
+#endif     
+
     return GL_TRUE;
 }
 
 /* Initialize the kernel data structures. */
 static int VIADRIKernelInit(DRIDriverContext * ctx, VIAPtr pVia)
 {
-    drmVIAInit drmInfo;
-    memset(&drmInfo, 0, sizeof(drmVIAInit));
+    drm_via_init_t drmInfo;
+    memset(&drmInfo, 0, sizeof(drm_via_init_t));
     drmInfo.sarea_priv_offset   = sizeof(drm_sarea_t);
+    drmInfo.func = VIA_INIT_MAP;
     drmInfo.fb_offset           = pVia->FrameBufferBase;
     drmInfo.mmio_offset         = pVia->registerHandle;
     if (pVia->IsPCI)
@@ -387,7 +549,9 @@ static int VIADRIKernelInit(DRIDriverContext * ctx, VIAPtr pVia)
     else
        drmInfo.agpAddr = (u_int32_t)pVia->agpAddr;
 
-    if (drmVIAInitMAP(pVia->drmFD, &drmInfo) < 0) return GL_FALSE;
+    if ((drmCommandWrite(pVia->drmFD, DRM_VIA_MAP_INIT,&drmInfo,
+                            sizeof(drm_via_init_t))) < 0)
+           return GL_FALSE;
 
     return GL_TRUE;
 }
index 52d25c786e8fcc58360eab4b5e53cbb7caad129a..bf2fd6455d50634d1383b707f0a3a3f1ddd54449 100644 (file)
 #define VIA_DMA_BUF_SZ                         (1 << VIA_DMA_BUF_ORDER)
 #define VIA_DMA_BUF_NR                         256
 #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 int *)(((((unsigned long) (saPriv)->XvMCLockArea) + \
+                            (VIA_MAX_CACHELINE_SIZE - 1)) &             \
+                           ~(VIA_MAX_CACHELINE_SIZE - 1)) +             \
+                          VIA_MAX_CACHELINE_SIZE*(lockNo)))
+
+/* Each region is a minimum of 64k, and there are at most 64 of them.
+ */
 #define VIA_NR_TEX_REGIONS 64
 #define VIA_LOG_MIN_TEX_REGION_SIZE 16
 #endif
 
+#define VIA_UPLOAD_TEX0IMAGE  0x1      /* handled clientside */
+#define VIA_UPLOAD_TEX1IMAGE  0x2      /* handled clientside */
+#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
 
 /* VIA specific ioctls */
-#define DRM_IOCTL_VIA_ALLOCMEM DRM_IOWR(0x40, drm_via_mem_t)
-#define DRM_IOCTL_VIA_FREEMEM  DRM_IOW(0x41, drm_via_mem_t)
-#define DRM_IOCTL_VIA_AGP_INIT DRM_IOWR(0x42, drm_via_agp_t)
-#define DRM_IOCTL_VIA_FB_INIT  DRM_IOWR(0x43, drm_via_fb_t)
-#define DRM_IOCTL_VIA_MAP_INIT DRM_IOWR(0x44, drm_via_init_t)
-#define DRM_IOCTL_VIA_FLUSH_AGP        DRM_IOW(0x45, drm_via_flush_agp_t)
-#define DRM_IOCTL_VIA_FLUSH_SYS        DRM_IOW(0x46, drm_via_flush_sys_t)
+#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 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)
+
+/* Indices into buf.Setup where various bits of state are mirrored per
+ * context and per buffer.  These can be fired at the card as a unit,
+ * or in a piecewise fashion as required.
+ */
 
 #define VIA_TEX_SETUP_SIZE 8
 
+/* Flags for clear ioctl
+ */
 #define VIA_FRONT   0x1
 #define VIA_BACK    0x2
 #define VIA_DEPTH   0x4
 #define VIDEO 0
 #define AGP 1
 typedef struct {
-    unsigned int offset;
-    unsigned int size;
-} drm_via_agp_t;    
+       u_int32_t offset;
+       u_int32_t size;
+} drm_via_agp_t;
 
 typedef struct {
-    unsigned int offset;
-    unsigned int size;
-} drm_via_fb_t;    
+       u_int32_t offset;
+       u_int32_t size;
+} drm_via_fb_t;
 
 typedef struct {
-    unsigned int context;
-    unsigned int type;
-    unsigned int size;
-    unsigned long index;
-    unsigned long offset;
-} drm_via_mem_t;    
+       u_int32_t context;
+       u_int32_t type;
+       u_int32_t 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;
+       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;
+       u_int32_t ms;
+       u_int32_t lock;
+       u_int32_t 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 *buf;
+       unsigned long size;
+} drm_via_cmdbuffer_t;
+
+/* Warning: If you change the SAREA structure you must change the Xserver
+ * structure as well */
 
 typedef struct _drm_via_tex_region {
-    unsigned char next, prev;
-    unsigned char inUse;
-    int age;
+       unsigned char next, prev;       /* indices to form a circular LRU  */
+       unsigned char inUse;    /* owned by a client, or free? */
+       int age;                /* tracked by clients to update local LRU's */
 } drm_via_tex_region_t;
 
 typedef struct _drm_via_sarea {
-    unsigned int dirty;
-    unsigned int nbox;
-    drm_clip_rect_t boxes[VIA_NR_SAREA_CLIPRECTS];   
-    drm_via_tex_region_t texList[VIA_NR_TEX_REGIONS + 1]; 
-    int texAge;
-    int ctxOwner;
-    int vertexPrim;
+       unsigned int dirty;
+       unsigned int nbox;
+       drm_clip_rect_t boxes[VIA_NR_SAREA_CLIPRECTS];
+       drm_via_tex_region_t texList[VIA_NR_TEX_REGIONS + 1];
+       int texAge;             /* last time texture was uploaded */
+       int ctxOwner;           /* last context to upload state */
+       int vertexPrim;
+
+       /*
+        * Below is for XvMC.
+        * We want the lock integers alone on, and aligned to, a cache line.
+        * Therefore this somewhat strange construct.
+        */
+
+       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;  /* Last context to hold decoder */
+
 } drm_via_sarea_t;
 
-typedef struct _drm_via_flush_agp {
-    unsigned int offset;
-    unsigned int size;
-    unsigned int index;                
-    int discard;
-} drm_via_flush_agp_t;
+typedef struct _drm_via_cmdbuf_size {
+       enum {
+               VIA_CMDBUF_SPACE = 0x01,
+               VIA_CMDBUF_LAG = 0x02
+       } func;
+       int wait;
+       u_int32_t size;
+} drm_via_cmdbuf_size_t;
 
-typedef struct _drm_via_flush_sys {
-    unsigned int offset;
-    unsigned int size;
-    unsigned long index;               
-    int discard;
-} drm_via_flush_sys_t;
 
 #ifdef __KERNEL__
-int via_fb_init(struct inode *inode, struct file *filp, unsigned int cmd,
-               unsigned long arg);             
-int via_mem_alloc(struct inode *inode, struct file *filp, unsigned int cmd,
-               unsigned long arg);                             
-int via_mem_free(struct inode *inode, struct file *filp, unsigned int cmd,
-               unsigned long arg);             
-int via_agp_init(struct inode *inode, struct file *filp, unsigned int cmd,
-               unsigned long arg);                             
-int via_dma_alloc(struct inode *inode, struct file *filp, unsigned int cmd,
-               unsigned long arg);                             
-int via_dma_free(struct inode *inode, struct file *filp, unsigned int cmd,
-               unsigned long arg);                             
-int via_map_init(struct inode *inode, struct file *filp, unsigned int cmd,
-               unsigned long arg);                             
-int via_flush_agp(struct inode *inode, struct file *filp, unsigned int cmd,
-               unsigned long arg);                             
-int via_flush_sys(struct inode *inode, struct file *filp, unsigned int cmd,
-               unsigned long arg);                             
+
+int via_fb_init(DRM_IOCTL_ARGS);
+int via_mem_alloc(DRM_IOCTL_ARGS);
+int via_mem_free(DRM_IOCTL_ARGS);
+int via_agp_init(DRM_IOCTL_ARGS);
+int via_map_init(DRM_IOCTL_ARGS);
+int via_decoder_futex(DRM_IOCTL_ARGS);
+int via_dma_init(DRM_IOCTL_ARGS);
+int via_cmdbuffer(DRM_IOCTL_ARGS);
+int via_flush_ioctl(DRM_IOCTL_ARGS);
+int via_pci_cmdbuffer(DRM_IOCTL_ARGS);
+int via_cmdbuf_size(DRM_IOCTL_ARGS);
+
 #endif
-#endif /* _VIA_DRM_H_ */
+#endif                         /* _VIA_DRM_H_ */
index 84367847eaab82f4d8a557381998861183f68d82..c6b3265b10529c311843b8966786e338a300a6f0 100644 (file)
@@ -40,7 +40,6 @@ typedef struct via_texture_object_t *viaTextureObjectPtr;
 #include "via_screen.h"
 #include "via_tex.h"
 #include "via_common.h"
-#include "xf86drmVIA.h"
 
 #define VIA_FALLBACK_TEXTURE                   0x1
 #define VIA_FALLBACK_DRAW_BUFFER               0x2
index 01ca0ea55bbf719fdc936e221e436d5930f60f34..a624398f1aab48c7809bdef2d343d7159b9fa9b5 100644 (file)
@@ -38,6 +38,8 @@ typedef struct {
     int sarea_priv_offset;
     /*=* John Sheng [2003.12.9] Tuxracer & VQ *=*/
     int VQEnable;
+    int DRIIrqEnable;
+    int ringBufActive;
 } VIADRIRec, *VIADRIPtr;
 
 typedef struct {
index 39d43e7278497274179f955fa12910e51cbff6e1..122d3b17cc7643761520b9af1fce3820a2be037c 100644 (file)
@@ -66,7 +66,7 @@ via_free_draw_buffer(viaContextPtr vmesa, viaBuffer *buf)
 GLboolean
 via_alloc_dma_buffer(viaContextPtr vmesa)
 {
-   drmVIADMAInit init;
+   drm_via_dma_init_t init;
 
    if (VIA_DEBUG) fprintf(stderr, "%s - in\n", __FUNCTION__);
    vmesa->dma = (GLubyte *) malloc(VIA_DMA_BUFSIZ);
@@ -76,7 +76,7 @@ via_alloc_dma_buffer(viaContextPtr vmesa)
     */
    init.func = VIA_DMA_INITIALIZED;
    vmesa->useAgp = 
-      ( 0 == drmCommandWrite(vmesa->driFd, DRM_VIA_DMA_INIT
+      ( 0 == drmCommandWrite(vmesa->driFd, VIA_INIT_DMA
                             &init, sizeof(init)));
    if (vmesa->useAgp) 
       printf("unichrome_dri.so: Using AGP.\n");
index 15f3991caeaba6201edb6b03e1a8c2716727d2de..579e3004b0e7219bdff25648b0d92cdf66bb2752 100644 (file)
@@ -424,14 +424,14 @@ void viaPageFlip(const __DRIdrawablePrivate *dPriv)
 
 static int fire_buffer(viaContextPtr vmesa)
 {
-   drmVIACommandBuffer bufI;
+   drm_via_cmdbuffer_t bufI;
    int ret;
 
    bufI.buf = (char *)vmesa->dma;
    bufI.size = vmesa->dmaLow;
 
    if (vmesa->useAgp) {
-      drmVIACmdBufSize bSiz;
+      drm_via_cmdbuf_size_t bSiz;
 
       /* Do the CMDBUF_SIZE ioctl:
        */
@@ -448,7 +448,7 @@ static int fire_buffer(viaContextPtr vmesa)
         return ret;
       }
 
-      /* Acutally fire the buffer:
+      /* Actually fire the buffer:
        */
       do {
         ret = drmCommandWrite(vmesa->driFd, DRM_VIA_CMDBUFFER, 
diff --git a/src/mesa/drivers/dri/unichrome/xf86drmVIA.c b/src/mesa/drivers/dri/unichrome/xf86drmVIA.c
deleted file mode 100644 (file)
index ebe368b..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sub license,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
- * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-#ifdef XFree86Server
-# include "xf86.h"
-# include "xf86_OSproc.h"
-# include "xf86_ansic.h"
-# define _DRM_MALLOC xalloc
-# define _DRM_FREE   xfree
-# ifndef XFree86LOADER
-#  include <sys/mman.h>
-# endif
-#else
-# include <stdio.h>
-# include <stdlib.h>
-# include <unistd.h>
-# include <string.h>
-# include <ctype.h>
-# include <fcntl.h>
-# include <errno.h>
-# include <signal.h>
-# include <sys/types.h>
-# include <sys/ioctl.h>
-# include <sys/mman.h>
-# include <sys/time.h>
-#include "imports.h"
-#define _DRM_MALLOC MALLOC
-#define _DRM_FREE   FREE
-#endif
-
-/* Not all systems have MAP_FAILED defined */
-#ifndef MAP_FAILED
-#define MAP_FAILED ((void *)-1)
-#endif
-
-#ifdef __linux__
-#include <sys/sysmacros.h>     /* for makedev() */
-#endif
-#include "xf86drm.h"
-#include "xf86drmVIA.h"
-#include "drm.h"
-#include "via_common.h"
-int drmVIAAgpInit(int fd, int offset, int size)
-{
-    drm_via_agp_t agp;
-    agp.offset = offset;
-    agp.size = size;
-
-    if (ioctl(fd, DRM_IOCTL_VIA_AGP_INIT, &agp) < 0) {
-         return -errno;
-    }
-    else {
-        return 0;
-    }
-}
-
-int drmVIAFBInit(int fd, int offset, int size)
-{
-    drm_via_fb_t fb;
-    fb.offset = offset;
-    fb.size = size;
-
-    if (ioctl(fd, DRM_IOCTL_VIA_FB_INIT, &fb) < 0) {
-       return -errno;
-    }
-    else
-       return 0;
-}
-
-int drmVIAInitMAP(int fd, drmVIAInit *info)
-{
-    drm_via_init_t init;
-
-    memset(&init, 0, sizeof(drm_via_init_t));
-    init.func = VIA_INIT_MAP;  
-    init.sarea_priv_offset = info->sarea_priv_offset;  
-    init.fb_offset = info->fb_offset;
-    init.mmio_offset = info->mmio_offset;
-    init.agpAddr = info->agpAddr;
-   
-    if (ioctl(fd, DRM_IOCTL_VIA_MAP_INIT, &init ) < 0) {
-        return -errno;
-    }
-    else
-        return 0;
-}
-
-int drmVIAAllocateDMA(int fd, drmVIADMABuf *buf)
-{
-    if (drmAddMap(fd, 0, buf->size,
-                  DRM_SHM, 0,
-                  &buf->index) < 0) {
-               return -errno;
-    }
-    
-    if (drmMap(fd,(drm_handle_t)buf->index,
-               buf->size,(drmAddressPtr)(&buf->address)) < 0) {
-       return -errno;
-    }
-    
-    memset(buf->address, 0, buf->size);
-       
-    return 0;
-}
-
-int drmVIAReleaseDMA(int fd, drmVIADMABuf *buf)
-{      
-    if (drmUnmap((drmAddress)(buf->address), buf->size) < 0)
-       return -errno;
-    
-    return 0;
-}
-
-int drmVIACmdBuffer(int fd, drmVIACommandBuffer *buf)
-{
-    if (ioctl(fd, 0x48, buf ) < 0) {
-        return -errno;
-    }
-    else
-        return 0;
-}
-  
diff --git a/src/mesa/drivers/dri/unichrome/xf86drmVIA.h b/src/mesa/drivers/dri/unichrome/xf86drmVIA.h
deleted file mode 100644 (file)
index e8c62bf..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sub license,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
- * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-#ifndef __XF86DRI_VIA_H__
-#define __XF86DRI_VIA_H__
-
-#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
-
-typedef struct {
-    unsigned long sarea_priv_offset;
-    unsigned long fb_offset;
-    unsigned long mmio_offset;
-    unsigned long agpAddr;
-} drmVIAInit;
-
-typedef struct {
-    unsigned int offset;
-    unsigned int size;
-       unsigned int index;
-} drmVIAAGPBuf;
-
-typedef struct {
-    unsigned int offset;
-    unsigned int size;
-    unsigned long index;
-    unsigned long *address;
-} drmVIADMABuf;
-
-typedef struct {
-  char *buf;
-  unsigned long size;
-} drmVIACommandBuffer;
-
-typedef struct {
-       enum {
-               VIA_CMDBUF_SPACE = 0x01,
-               VIA_CMDBUF_LAG = 0x02
-       } func;
-       int wait;
-       unsigned size;
-} drmVIACmdBufSize;
-
-typedef struct {
-       unsigned int offset;
-       unsigned int size;
-       unsigned long index;
-       int discard;            /* client is finished with the buffer? */
-} drmVIAFlush;
-
-typedef struct{
-       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;
-} drmVIADMAInit;
-
-extern int drmVIAAgpInit(int fd, int offset, int size);
-extern int drmVIAFBInit(int fd, int offset, int size);
-extern int drmVIAInitMAP(int fd, drmVIAInit *info);
-extern int drmVIAAllocateDMA(int fd, drmVIADMABuf *buf);
-extern int drmVIAReleaseDMA(int fd, drmVIADMABuf *buf);
-
-
-#endif