OSDN Git Service

via changes:
authorThomas Hellstrom <unichrome@shipmail.org>
Mon, 14 Mar 2005 22:50:21 +0000 (22:50 +0000)
committerThomas Hellstrom <unichrome@shipmail.org>
Mon, 14 Mar 2005 22:50:21 +0000 (22:50 +0000)
1. Initialize futex locks to zero on device init.
2. Remove some stray defines from via_drm.h
3. Prepare via_drm.h for drm client inclusion. The goal is to share a
    common file with common definitions.
4. Sync shared / shared-core via_drm.h
5. Bump minor, because of the futex lock initialization.

shared-core/via_drm.h
shared-core/via_drv.h
shared-core/via_map.c
shared-core/via_mm.c
shared/via.h
shared/via_drm.h
shared/via_map.c
shared/via_mm.c

index b4c11da..f3b4a28 100644 (file)
 #ifndef _VIA_DEFINES_
 #define _VIA_DEFINES_
 
-#define VIA_DMA_BUF_ORDER              12
-#define VIA_DMA_BUF_SZ                         (1 << VIA_DMA_BUF_ORDER)
-#define VIA_DMA_BUF_NR                         256
+#ifndef __KERNEL__
+#include "via_drmclient.h"
+#endif
+
 #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)))
+       ((volatile drm_hw_lock_t *)(((((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.
  */
index 399474b..00382e5 100644 (file)
 
 #define DRIVER_NAME            "via"
 #define DRIVER_DESC            "VIA Unichrome"
-#define DRIVER_DATE            "20050214"
+#define DRIVER_DATE            "20050314"
 
 #define DRIVER_MAJOR           2
-#define DRIVER_MINOR           4
-#define DRIVER_PATCHLEVEL      6
+#define DRIVER_MINOR           5
+#define DRIVER_PATCHLEVEL      0
 
 #include "via_verifier.h"
 
index 51868db..50ca96c 100644 (file)
@@ -67,8 +67,10 @@ static int via_do_init_map(drm_device_t * dev, drm_via_init_t * init)
 
        dev_priv->agpAddr = init->agpAddr;
 
-       for (i = 0; i < VIA_NR_XVMC_LOCKS; ++i)
+       for (i = 0; i < VIA_NR_XVMC_LOCKS; ++i) {
                DRM_INIT_WAITQUEUE(&(dev_priv->decoder_queue[i]));
+               XVMCLOCKPTR(dev_priv->sarea_priv, i)->lock = 0;
+       }
 
        dev->dev_private = (void *)dev_priv;
 
@@ -109,6 +111,7 @@ int via_map_init(DRM_IOCTL_ARGS)
        return -EINVAL;
 }
 
+
 int via_decoder_futex(DRM_IOCTL_ARGS)
 {
        DRM_DEVICE;
@@ -123,7 +126,7 @@ int via_decoder_futex(DRM_IOCTL_ARGS)
        if (fx.lock > VIA_NR_XVMC_LOCKS)
                return -EFAULT;
 
-       lock = XVMCLOCKPTR(sAPriv, fx.lock);
+       lock = (int *)XVMCLOCKPTR(sAPriv, fx.lock);
 
        switch (fx.func) {
        case VIA_FUTEX_WAIT:
index 7477db1..5cead8c 100644 (file)
@@ -179,10 +179,9 @@ int via_final_context(struct drm_device *dev, int context)
         */ 
 
        for (i=0; i < VIA_NR_XVMC_LOCKS; ++i) {
-               lock = XVMCLOCKPTR(sAPriv, i);
-               if ( (_DRM_LOCKING_CONTEXT( *lock ) == context) && 
-                    (_DRM_LOCK_IS_HELD( *lock ))) {
-                       if ( *lock & _DRM_LOCK_CONT) {
+               lock = (int *) XVMCLOCKPTR(sAPriv, i);
+               if ( (_DRM_LOCKING_CONTEXT( *lock ) == context)) {
+                       if (_DRM_LOCK_IS_HELD( *lock ) && (*lock & _DRM_LOCK_CONT)) {
                                DRM_WAKEUP( &(dev_priv->decoder_queue[i]));
                        }
                        *lock = 0;
index 05ed9df..b35164e 100644 (file)
 
 #define DRIVER_NAME            "via"
 #define DRIVER_DESC            "VIA Unichrome"
-#define DRIVER_DATE            "20050214"
+#define DRIVER_DATE            "20050314"
 
 #define DRIVER_MAJOR           2
-#define DRIVER_MINOR           4
-#define DRIVER_PATCHLEVEL      6
+#define DRIVER_MINOR           5
+#define DRIVER_PATCHLEVEL      0
 
 #define DRIVER_IOCTLS                                                  \
         [DRM_IOCTL_NR(DRM_IOCTL_VIA_ALLOCMEM)]  = { via_mem_alloc,  1, 0 }, \
index 2327bec..f3b4a28 100644 (file)
 #ifndef _VIA_DEFINES_
 #define _VIA_DEFINES_
 
-#define VIA_DMA_BUF_ORDER              12
-#define VIA_DMA_BUF_SZ                         (1 << VIA_DMA_BUF_ORDER)
-#define VIA_DMA_BUF_NR                         256
+#ifndef __KERNEL__
+#include "via_drmclient.h"
+#endif
+
 #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)))
+       ((volatile drm_hw_lock_t *)(((((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_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_DEC_FUTEX DRM_IOW(0x45, drm_via_futex_t)
-#define DRM_IOCTL_VIA_DMA_INIT DRM_IOWR(0x47, drm_via_dma_init_t)
-#define DRM_IOCTL_VIA_CMDBUFFER        DRM_IOW(0x48, drm_via_cmdbuffer_t)
-#define DRM_IOCTL_VIA_FLUSH    DRM_IO(0x49)
-#define DRM_IOCTL_VIA_PCICMD   DRM_IOW(0x4A, drm_via_cmdbuffer_t)
-#define DRM_IOCTL_VIA_CMDBUF_SIZE DRM_IOWR(0x4B, drm_via_cmdbuf_size_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,
 #define VIDEO 0
 #define AGP 1
 typedef struct {
-       unsigned long offset;
-       unsigned long size;
+       uint32_t offset;
+       uint32_t size;
 } drm_via_agp_t;
 
 typedef struct {
-       unsigned long offset;
-       unsigned long size;
+       uint32_t offset;
+       uint32_t size;
 } drm_via_fb_t;
 
 typedef struct {
        uint32_t context;
        uint32_t type;
-       unsigned long size;
+       uint32_t size;
        unsigned long index;
        unsigned long offset;
 } drm_via_mem_t;
@@ -177,20 +191,6 @@ typedef struct _drm_via_sarea {
 
 } drm_via_sarea_t;
 
-typedef struct _drm_via_flush_agp {
-       unsigned int offset;
-       unsigned int size;
-       unsigned int index;
-       int discard;            /* client is finished with the buffer? */
-} drm_via_flush_agp_t;
-
-typedef struct _drm_via_flush_sys {
-       unsigned int offset;
-       unsigned int size;
-       unsigned long index;
-       int discard;            /* client is finished with the buffer? */
-} drm_via_flush_sys_t;
-
 typedef struct _drm_via_cmdbuf_size {
        enum {
                VIA_CMDBUF_SPACE = 0x01,
@@ -200,6 +200,7 @@ typedef struct _drm_via_cmdbuf_size {
        uint32_t size;
 } drm_via_cmdbuf_size_t;
 
+
 #ifdef __KERNEL__
 
 int via_fb_init(DRM_IOCTL_ARGS);
index ac8f105..178284c 100644 (file)
@@ -69,8 +69,10 @@ int via_do_init_map(drm_device_t * dev, drm_via_init_t * init)
 
        dev_priv->agpAddr = init->agpAddr;
 
-       for (i = 0; i < VIA_NR_XVMC_LOCKS; ++i)
+       for (i = 0; i < VIA_NR_XVMC_LOCKS; ++i) {
                DRM_INIT_WAITQUEUE(&(dev_priv->decoder_queue[i]));
+               XVMCLOCKPTR(dev_priv->sarea_priv, i)->lock = 0;
+       }
 
        dev->dev_private = (void *)dev_priv;
 
@@ -111,6 +113,7 @@ int via_map_init(DRM_IOCTL_ARGS)
        return -EINVAL;
 }
 
+
 int via_decoder_futex(DRM_IOCTL_ARGS)
 {
        DRM_DEVICE;
@@ -125,7 +128,7 @@ int via_decoder_futex(DRM_IOCTL_ARGS)
        if (fx.lock > VIA_NR_XVMC_LOCKS)
                return -EFAULT;
 
-       lock = XVMCLOCKPTR(sAPriv, fx.lock);
+       lock = (int *)XVMCLOCKPTR(sAPriv, fx.lock);
 
        switch (fx.func) {
        case VIA_FUTEX_WAIT:
index 96f3335..fadfbfb 100644 (file)
@@ -177,10 +177,9 @@ int via_final_context(struct drm_device *dev, int context)
         */ 
 
        for (i=0; i < VIA_NR_XVMC_LOCKS; ++i) {
-               lock = XVMCLOCKPTR(sAPriv, i);
-               if ( (_DRM_LOCKING_CONTEXT( *lock ) == context) && 
-                    (_DRM_LOCK_IS_HELD( *lock ))) {
-                       if ( *lock & _DRM_LOCK_CONT) {
+               lock = (int *) XVMCLOCKPTR(sAPriv, i);
+               if ( (_DRM_LOCKING_CONTEXT( *lock ) == context)) {
+                       if (_DRM_LOCK_IS_HELD( *lock ) && (*lock & _DRM_LOCK_CONT)) {
                                DRM_WAKEUP( &(dev_priv->decoder_queue[i]));
                        }
                        *lock = 0;