This is the first draft of my devfs patch, it moves *most* of the PCI ids into the 
shared tree. 
gamma_drv.h has both a linux and bsd copy of the PCI ids.  Some cards like the 
i8{1,3}0 we don't
know the PCI ids.  I have tested that it compiles under Linux(Debian) and correctly 
makes and
removes the devfs inodes :)

I have not yet tested if it breakes dri, it shouldn't I didn't touch any of that.  It 
will be
later today when I can get to testing it totally.  I have not tested it on BSD, I 
can't.  I have
not tested it on non-devfs systems, but if your lp driver workes, so will this one :)

Mike


__________________________________________________
Do You Yahoo!?
Sign up for SBC Yahoo! Dial - First Month Free
http://sbc.yahoo.com
diff -aNur orig/bsd/drm/kernel/drmP.h myne/bsd/drm/kernel/drmP.h
--- orig/bsd/drm/kernel/drmP.h  Fri Jul  5 03:31:07 2002
+++ myne/bsd/drm/kernel/drmP.h  Wed Jul 10 00:36:55 2002
@@ -73,12 +73,16 @@
 #include "drm_os_freebsd.h"
 #elif defined __NetBSD__
 #include "drm_os_netbsd.h"
+#else
+#warning "This is not FreeBSD or NetBSD!"
 #endif
 
 #include "drm.h"
 
 /* Begin the DRM... */
 
+#define DRM_SUP_BSD 1
+
 #define DRM_HASH_SIZE        16 /* Size of key hash table                */
 #define DRM_KERNEL_CONTEXT    0         /* Change drm_resctx if changed          */
 #define DRM_RESERVED_CONTEXTS 1         /* Change drm_resctx if changed          */
@@ -145,11 +149,6 @@
        (_map) = (_dev)->context_sareas[_ctx];          \
 } while(0)
 
-
-typedef struct drm_pci_list {
-       u16 vendor;
-       u16 device;
-} drm_pci_list_t;
 
 typedef struct drm_ioctl_desc {
        d_ioctl_t            *func;
diff -aNur orig/bsd/drm/kernel/gamma_drv.c myne/bsd/drm/kernel/gamma_drv.c
--- orig/bsd/drm/kernel/gamma_drv.c     Fri Jul  5 03:31:08 2002
+++ myne/bsd/drm/kernel/gamma_drv.c     Wed Jul 10 06:04:20 2002
@@ -34,6 +34,7 @@
 #include "drmP.h"
 #include "drm.h"
 #include "gamma_drm.h"
+#define DEVICELIST
 #include "gamma_drv.h"
 
 #define DRIVER_AUTHOR          "VA Linux Systems Inc."
@@ -48,14 +49,6 @@
 
 #define DRIVER_IOCTLS                                                    \
        [DRM_IOCTL_NR(DRM_IOCTL_DMA)]        = { gamma_dma,       1, 0 }
-
-/* List acquired from http://www.yourvote.com/pci/pcihdr.h and 
xc/xc/programs/Xserver/hw/xfree86/common/xf86PciInfo.h
- * Please report to [EMAIL PROTECTED] inaccuracies or if a chip you have works that 
is marked unsupported here.
- */
-drm_chipinfo_t DRM(devicelist)[] = {
-       {0x3d3d, 0x0008, 1, "3DLabs Gamma"},
-       {0, 0, 0, NULL}
-};
 
 
 #define __HAVE_COUNTERS                5
diff -aNur orig/bsd/drm/kernel/gamma_drv.h myne/bsd/drm/kernel/gamma_drv.h
--- orig/bsd/drm/kernel/gamma_drv.h     Fri Jul  5 03:31:08 2002
+++ myne/bsd/drm/kernel/gamma_drv.h     Wed Jul 10 06:16:03 2002
@@ -32,6 +32,8 @@
 #ifndef _GAMMA_DRV_H_
 #define _GAMMA_DRV_H_
 
+#define "drmP.h"
+#define "dri_sup.h"
 
 typedef struct drm_gamma_private {
        drm_map_t *buffers;
@@ -100,5 +102,17 @@
 #define GAMMA_OUTPUTFIFO       0x2000
 #define GAMMA_SYNC            0x8c40
 #define GAMMA_SYNC_TAG        0x0188
+
+#ifdef DEVICELIST
+/* List acquired from http://www.yourvote.com/pci/pcihdr.h and 
+xc/xc/programs/Xserver/hw/xfree86/common/xf86PciInfo.h
+ * Please report to [EMAIL PROTECTED] inaccuracies or if a chip you have works that 
+is marked unsupported here.
+ */
+drm_chipinfo_t DRM(devicelist)[] = {
+       {0x3d3d, 0x0008, 1, "3DLabs Gamma"},
+       {0, 0, 0, NULL}
+};
+
+#define DRIVER_CARD_LIST DRM(devicelist)
+#endif
 
 #endif
diff -aNur orig/bsd/drm/kernel/mga_drv.c myne/bsd/drm/kernel/mga_drv.c
--- orig/bsd/drm/kernel/mga_drv.c       Fri Jul  5 03:31:08 2002
+++ myne/bsd/drm/kernel/mga_drv.c       Wed Jul 10 06:04:47 2002
@@ -35,18 +35,8 @@
 #include "drmP.h"
 #include "drm.h"
 #include "mga_drm.h"
+#define DEVICELIST
 #include "mga_drv.h"
-
-/* List acquired from http://www.yourvote.com/pci/pcihdr.h and 
xc/xc/programs/Xserver/hw/xfree86/common/xf86PciInfo.h
- * Please report to [EMAIL PROTECTED] inaccuracies or if a chip you have works that 
is marked unsupported here.
- */
-drm_chipinfo_t DRM(devicelist)[] = {
-       {0x102b, 0x0520, 0, "Matrox G200 (PCI)"},
-       {0x102b, 0x0521, 1, "Matrox G200 (AGP)"},
-       {0x102b, 0x0525, 1, "Matrox G400/G450 (AGP)"},
-       {0x102b, 0x2527, 1, "Matrox G550 (AGP)"},
-       {0, 0, 0, NULL}
-};
 
 #include "drm_agpsupport.h"
 #include "drm_auth.h"
diff -aNur orig/bsd/drm/kernel/r128_drv.c myne/bsd/drm/kernel/r128_drv.c
--- orig/bsd/drm/kernel/r128_drv.c      Fri Jul  5 03:31:08 2002
+++ myne/bsd/drm/kernel/r128_drv.c      Wed Jul 10 06:05:11 2002
@@ -36,34 +36,11 @@
 #include "drmP.h"
 #include "drm.h"
 #include "r128_drm.h"
+#define DEVICELIST
 #include "r128_drv.h"
 #if __REALLY_HAVE_SG
 #include "ati_pcigart.h"
 #endif
-
-/* List acquired from http://www.yourvote.com/pci/pcihdr.h and 
xc/xc/programs/Xserver/hw/xfree86/common/xf86PciInfo.h
- * Please report to [EMAIL PROTECTED] inaccuracies or if a chip you have works that is 
marked unsupported here.
- */
-drm_chipinfo_t DRM(devicelist)[] = {
-       {0x1002, 0x4c45, __REALLY_HAVE_SG, "ATI Rage 128 Mobility LE (PCI)"},
-       {0x1002, 0x4c46, 1, "ATI Rage 128 Mobility LF (AGP)"},
-       {0x1002, 0x4d46, 1, "ATI Rage 128 Mobility MF (AGP)"},
-       {0x1002, 0x4d4c, 1, "ATI Rage 128 Mobility ML (AGP)"},
-       {0x1002, 0x5044, __REALLY_HAVE_SG, "ATI Rage 128 Pro PD (PCI)"},
-       {0x1002, 0x5046, 1, "ATI Rage 128 Pro PF (AGP)"},
-       {0x1002, 0x5050, __REALLY_HAVE_SG, "ATI Rage 128 Pro PP (PCI)"},
-       {0x1002, 0x5052, __REALLY_HAVE_SG, "ATI Rage 128 Pro PR (PCI)"},
-       {0x1002, 0x5245, __REALLY_HAVE_SG, "ATI Rage 128 RE (PCI)"},
-       {0x1002, 0x5246, 1, "ATI Rage 128 RF (AGP)"},
-       {0x1002, 0x5247, 1, "ATI Rage 128 RG (AGP)"},
-       {0x1002, 0x524b, __REALLY_HAVE_SG, "ATI Rage 128 RK (PCI)"},
-       {0x1002, 0x524c, 1, "ATI Rage 128 RL (AGP)"},
-       {0x1002, 0x534d, 1, "ATI Rage 128 SM (AGP)"},
-       {0x1002, 0x5446, 1, "ATI Rage 128 Pro Ultra TF (AGP)"},
-       {0x1002, 0x544C, 1, "ATI Rage 128 Pro Ultra TL (AGP)"},
-       {0x1002, 0x5452, 1, "ATI Rage 128 Pro Ultra TR (AGP)"},
-       {0, 0, 0, NULL}
-};
 
 #include "drm_agpsupport.h"
 #include "drm_auth.h"
diff -aNur orig/bsd/drm/kernel/radeon_drv.c myne/bsd/drm/kernel/radeon_drv.c
--- orig/bsd/drm/kernel/radeon_drv.c    Fri Jul  5 03:31:08 2002
+++ myne/bsd/drm/kernel/radeon_drv.c    Wed Jul 10 06:05:27 2002
@@ -33,27 +33,11 @@
 #include "drmP.h"
 #include "drm.h"
 #include "radeon_drm.h"
+#define DEVICELIST
 #include "radeon_drv.h"
 #if __REALLY_HAVE_SG
 #include "ati_pcigart.h"
 #endif
-
-/* List acquired from http://www.yourvote.com/pci/pcihdr.h and 
xc/xc/programs/Xserver/hw/xfree86/common/xf86PciInfo.h
- * Please report to [EMAIL PROTECTED] inaccuracies or if a chip you have works that is 
marked unsupported here.
- */
-drm_chipinfo_t DRM(devicelist)[] = {
-       {0x1002, 0x4C57, 1, "ATI Radeon LW Mobility 7 (AGP)"},
-       {0x1002, 0x4C59, 1, "ATI Radeon LY Mobility 6 (AGP)"},
-       {0x1002, 0x4C5A, 1, "ATI Radeon LZ Mobility 6 (AGP)"},
-       {0x1002, 0x5144, 1, "ATI Radeon QD (AGP)"},
-       {0x1002, 0x5145, 1, "ATI Radeon QE (AGP)"},
-       {0x1002, 0x5146, 1, "ATI Radeon QF (AGP)"},
-       {0x1002, 0x5147, 1, "ATI Radeon QG (AGP)"},
-       {0x1002, 0x5157, 1, "ATI Radeon QW 7500 (AGP)"},
-       {0x1002, 0x5159, 1, "ATI Radeon QY VE (AGP)"},
-       {0x1002, 0x515A, 1, "ATI Radeon QZ VE (AGP)"},
-       {0, 0, 0, NULL}
-};
 
 #include "drm_agpsupport.h"
 #include "drm_auth.h"
diff -aNur orig/bsd/drm/kernel/tdfx_drv.c myne/bsd/drm/kernel/tdfx_drv.c
--- orig/bsd/drm/kernel/tdfx_drv.c      Fri Jul  5 03:31:08 2002
+++ myne/bsd/drm/kernel/tdfx_drv.c      Wed Jul 10 06:05:44 2002
@@ -35,6 +35,8 @@
 
 #include "tdfx.h"
 #include "drmP.h"
+#define DEVICELIST
+#include "tdfx_drv.h"
 
 #define DRIVER_AUTHOR          "VA Linux Systems Inc."
 
@@ -45,37 +47,6 @@
 #define DRIVER_MAJOR           1
 #define DRIVER_MINOR           0
 #define DRIVER_PATCHLEVEL      0
-
-#ifndef PCI_VENDOR_ID_3DFX
-#define PCI_VENDOR_ID_3DFX 0x121A
-#endif
-#ifndef PCI_DEVICE_ID_3DFX_VOODOO5
-#define PCI_DEVICE_ID_3DFX_VOODOO5 0x0009
-#endif
-#ifndef PCI_DEVICE_ID_3DFX_VOODOO4
-#define PCI_DEVICE_ID_3DFX_VOODOO4 0x0007
-#endif
-#ifndef PCI_DEVICE_ID_3DFX_VOODOO3_3000 /* Voodoo3 3000 */
-#define PCI_DEVICE_ID_3DFX_VOODOO3_3000 0x0005
-#endif
-#ifndef PCI_DEVICE_ID_3DFX_VOODOO3_2000 /* Voodoo3 3000 */
-#define PCI_DEVICE_ID_3DFX_VOODOO3_2000 0x0004
-#endif
-#ifndef PCI_DEVICE_ID_3DFX_BANSHEE
-#define PCI_DEVICE_ID_3DFX_BANSHEE 0x0003
-#endif
-
-/* List acquired from http://www.yourvote.com/pci/pcihdr.h and 
xc/xc/programs/Xserver/hw/xfree86/common/xf86PciInfo.h
- * Please report to [EMAIL PROTECTED] inaccuracies or if a chip you have works that 
is marked unsupported here.
- */
-drm_chipinfo_t DRM(devicelist)[] = {
-       {0x121a, 0x0003, 1, "3dfx Voodoo Banshee"},
-       {0x121a, 0x0004, 1, "3dfx Voodoo3 2000"},
-       {0x121a, 0x0005, 1, "3dfx Voodoo3 3000"},
-       {0x121a, 0x0007, 1, "3dfx Voodoo4"},
-       {0x121a, 0x0009, 1, "3dfx Voodoo5"},
-       {0, 0, 0, NULL}
-};
 
 
 #include "drm_auth.h"
diff -aNur orig/linux/drm/kernel/drm.h myne/linux/drm/kernel/drm.h
--- orig/linux/drm/kernel/drm.h Fri Jul  5 03:31:09 2002
+++ myne/linux/drm/kernel/drm.h Wed Jul 10 05:11:30 2002
@@ -80,6 +80,7 @@
 
 #if CONFIG_XFREE86_VERSION >= XFREE86_VERSION(4,1,0,0)
 #define DRM_MAJOR       226
+/* If max minor is bigger than 9999 there is a buffer overrun */
 #define DRM_MAX_MINOR   15
 #endif
 #define DRM_NAME       "drm"     /* Name in kernel, /dev, and /proc        */
@@ -439,7 +440,7 @@
 #define DRM_IOCTL_SG_ALLOC             DRM_IOW( 0x38, drm_scatter_gather_t)
 #define DRM_IOCTL_SG_FREE              DRM_IOW( 0x39, drm_scatter_gather_t)
 
-/* Device specfic ioctls should only be in their respective headers
+/* Device specific ioctls should only be in their respective headers
  * The device specific ioctl range is 0x40 to 0x79.                  */
 #define DRM_COMMAND_BASE                0x40
 
diff -aNur orig/linux/drm/kernel/drmP.h myne/linux/drm/kernel/drmP.h
--- orig/linux/drm/kernel/drmP.h        Fri Jul  5 03:31:09 2002
+++ myne/linux/drm/kernel/drmP.h        Wed Jul 10 00:35:48 2002
@@ -69,6 +69,7 @@
 #include <linux/tqueue.h>
 #include <linux/poll.h>
 #include <asm/pgalloc.h>
+#include <linux/devfs_fs_kernel.h>
 #include "drm.h"
 
 #include "drm_os_linux.h"
@@ -108,6 +109,8 @@
 /* Begin the DRM...
  */
 
+#define DRM_SUP_LINUX 1
+
 #define DRM_DEBUG_CODE 2         /* Include debugging code (if > 1, then
                                     also include looping detection. */
 
@@ -271,10 +274,13 @@
 typedef int drm_ioctl_t( struct inode *inode, struct file *filp,
                         unsigned int cmd, unsigned long arg );
 
-typedef struct drm_pci_list {
-       u16 vendor;
-       u16 device;
-} drm_pci_list_t;
+typedef struct drm_chipinfo
+{
+       int vendor;
+       int device;
+       int supported;
+       char *name;
+} drm_chipinfo_t;
 
 typedef struct drm_ioctl_desc {
        drm_ioctl_t          *func;
@@ -522,6 +528,7 @@
        char              *unique;      /* Unique identifier: e.g., busid  */
        int               unique_len;   /* Length of unique field          */
        dev_t             device;       /* Device number for mknod         */
+       devfs_handle_t    dev_handle;   /* Device handel for devfs         */
        char              *devname;     /* For /proc/interrupts            */
 
        int               blocked;      /* Blocked due to VC switch?       */
diff -aNur orig/linux/drm/kernel/drm_drv.h myne/linux/drm/kernel/drm_drv.h
--- orig/linux/drm/kernel/drm_drv.h     Fri Jul  5 03:31:09 2002
+++ myne/linux/drm/kernel/drm_drv.h     Wed Jul 10 05:53:30 2002
@@ -87,6 +87,16 @@
 #ifndef __HAVE_KERNEL_CTX_SWITCH
 #define __HAVE_KERNEL_CTX_SWITCH       0
 #endif
+#ifndef DRM_MAX_MINOR
+/*
+ * Do not try to bend the spoon, that's impossible.
+ * Instead edit drm.h
+ * 
+ * This is only hear for the case where something is wrong with your computer.
+ */
+# define DRM_MAX_MINOR 16
+#endif
+
 
 #ifndef DRIVER_PREINIT
 #define DRIVER_PREINIT()
@@ -145,7 +155,7 @@
 #endif
 
 /*
- * The default number of instances (minor numbers) to initialize.
+ * The default number of instances (minor numbers) to initialise.
  */
 #ifndef DRIVER_NUM_CARDS
 #define DRIVER_NUM_CARDS 1
@@ -338,7 +348,7 @@
         * in drm_dma_enqueue.  This is more resource-efficient for
         * hardware that does not do DMA, but may mean that
         * drm_select_queue fails between the time the interrupt is
-        * initialized and the time the queues are initialized.
+        * initialised and the time the queues are initialised.
         */
        DRIVER_POSTSETUP();
        return 0;
@@ -501,14 +511,14 @@
 }
 
 /*
- * Figure out how many instances to initialize.
+ * Figure out how many instances to initialise.
  */
 static int drm_count_cards(void)
 {
        int num = 0;
 #if defined(DRIVER_CARD_LIST)
        int i;
-       drm_pci_list_t *l;
+       drm_chipinfo_t *l;
        u16 device, vendor;
        struct pci_dev *pdev = NULL;
 #endif
@@ -519,14 +529,19 @@
        num = DRIVER_COUNT_CARDS();
 #elif defined(DRIVER_CARD_LIST)
        for (i = 0, l = DRIVER_CARD_LIST; l[i].vendor != 0; i++) {
+               if (l[i].supported) 
+            {
                pdev = NULL;
                vendor = l[i].vendor;
                device = l[i].device;
                if(device == 0xffff) device = PCI_ANY_ID;
                if(vendor == 0xffff) vendor = PCI_ANY_ID;
                while ((pdev = pci_find_device(vendor, device, pdev))) {
+                  printk("There is a %s in slot %s.\n",
+                         l[i].name, pdev->slot_name);
                        num++;
                }
+            }
        }
 #else
        num = DRIVER_NUM_CARDS;
@@ -556,6 +571,13 @@
        /* Force at least one instance. */
        if (DRM(numdevs) <= 0)
                DRM(numdevs) = 1;
+       /* Make sure not grater than 9999, or we have a buffer overrun */
+       if (DRM(numdevs) > DRM_MAX_MINOR) {
+               printk("Max number of cards is %d.\n", DRM_MAX_MINOR);
+               printk("Try increasing DRM_MAX_MINOR to %d.\n",
+                      DRM(numdevs) + 1);
+               DRM(numdevs) = DRM_MAX_MINOR;
+       }
 
        DRM(device) = kmalloc(sizeof(*DRM(device)) * DRM(numdevs), GFP_KERNEL);
        if (!DRM(device)) {
@@ -635,6 +657,7 @@
 
        for (i = DRM(numdevs) - 1; i >= 0; i--) {
                dev = &(DRM(device)[i]);
+               devfs_unregister(dev->dev_handle);
                if ( DRM(stub_unregister)(DRM(minor)[i]) ) {
                        DRM_ERROR( "Cannot unload module\n" );
                } else {
diff -aNur orig/linux/drm/kernel/drm_stub.h myne/linux/drm/kernel/drm_stub.h
--- orig/linux/drm/kernel/drm_stub.h    Thu May 16 18:47:15 2002
+++ myne/linux/drm/kernel/drm_stub.h    Wed Jul 10 05:45:55 2002
@@ -31,7 +31,10 @@
 #define __NO_VERSION__
 #include "drmP.h"
 
-#define DRM_STUB_MAXCARDS 16   /* Enough for one machine */
+#ifndef DRM_MAX_MINOR
+#define DRM_MAX_MINOR 16 /* Enough for one machine */
+#endif
+#define DRM_STUB_MAXCARDS ( DRM_MAX_MINOR + 1 )
 
 static struct drm_stub_list {
        const char             *name;
@@ -45,8 +48,11 @@
        int (*info_register)(const char *name, struct file_operations *fops,
                             drm_device_t *dev);
        int (*info_unregister)(int minor);
+       devfs_handle_t *info_handle;
 } DRM(stub_info);
 
+static devfs_handle_t DRM(devfs_dir_dri);
+
 static int DRM(stub_open)(struct inode *inode, struct file *filp)
 {
        int                    minor = minor(inode->i_rdev);
@@ -84,6 +90,7 @@
                        DRM(stub_list)[i].fops = NULL;
                }
        }
+
        for (i = 0; i < DRM_STUB_MAXCARDS; i++) {
                if (!DRM(stub_list)[i].fops) {
                        DRM(stub_list)[i].name = name;
@@ -111,7 +118,8 @@
                DRM(free)(DRM(stub_list),
                          sizeof(*DRM(stub_list)) * DRM_STUB_MAXCARDS,
                          DRM_MEM_STUB);
-               unregister_chrdev(DRM_MAJOR, "drm");
+               devfs_unregister_chrdev(DRM_MAJOR, "drm");
+               devfs_unregister(DRM(devfs_dir_dri));
        }
        return 0;
 }
@@ -121,25 +129,60 @@
                       drm_device_t *dev)
 {
        struct drm_stub_info *i = NULL;
+       int minor;
+       char buff[8];
 
        DRM_DEBUG("\n");
-       if (register_chrdev(DRM_MAJOR, "drm", &DRM(stub_fops)))
+       /* 
+        * FIX-ME
+        * 
+        * The first drm gets stuck if another drm is loaded
+        * and can not be unloaded if it needs to be.
+        * You will have to unload ALL dris.
+        * 
+        * This is because the other dri modules will increment
+        * the first dri's use count, making lsmod look funny.
+        * 
+        * inter_module_get (called if devfs_register_chrdev returns error
+        *    I.E. another drm already registered DRM_MAJOR)
+        * increments the module use count of the dri that calls
+        * inter_module_register.
+        * 
+        * The dri that calls inter_module_register may also
+        * call inter_module_put and deinc it's own use count.
+        * It may not be intended to work that way, how ever I
+        * see no problem in kernel/module.c with doing it this way.
+        * 
+        */
+       if (devfs_register_chrdev(DRM_MAJOR, "drm", &DRM(stub_fops)))
                i = (struct drm_stub_info *)inter_module_get("drm");
 
        if (i) {
                                /* Already registered */
                DRM(stub_info).info_register   = i->info_register;
                DRM(stub_info).info_unregister = i->info_unregister;
+               DRM(stub_info).info_handle     = i->info_handle;
+               DRM(devfs_dir_dri) = *DRM(stub_info).info_handle;
                DRM_DEBUG("already registered\n");
        } else if (DRM(stub_info).info_register != DRM(stub_getminor)) {
+               DRM(devfs_dir_dri) = devfs_mk_dir(NULL, "dri", NULL);
                DRM(stub_info).info_register   = DRM(stub_getminor);
                DRM(stub_info).info_unregister = DRM(stub_putminor);
+               DRM(stub_info).info_handle     = &DRM(devfs_dir_dri);
                DRM_DEBUG("calling inter_module_register\n");
                inter_module_register("drm", THIS_MODULE, &DRM(stub_info));
        }
        if (DRM(stub_info).info_register)
-               return DRM(stub_info).info_register(name, fops, dev);
-       return -1;
+               { minor = DRM(stub_info).info_register(name, fops, dev); }
+       else return -1;
+
+       sprintf(buff, "card%d", minor);
+       dev->dev_handle = devfs_register(DRM(devfs_dir_dri), buff,
+               DEVFS_FL_DEFAULT, DRM_MAJOR, minor,
+               S_IFCHR | S_IRUGO | S_IWUGO,
+               fops, NULL);
+
+       return minor;
 }
 
 int DRM(stub_unregister)(int minor)
diff -aNur orig/linux/drm/kernel/gamma_drv.c myne/linux/drm/kernel/gamma_drv.c
--- orig/linux/drm/kernel/gamma_drv.c   Fri Jul  5 03:31:09 2002
+++ myne/linux/drm/kernel/gamma_drv.c   Wed Jul 10 05:55:49 2002
@@ -34,6 +34,7 @@
 #include "drmP.h"
 #include "drm.h"
 #include "gamma_drm.h"
+#define DEVICELIST
 #include "gamma_drv.h"
 
 #include "drm_auth.h"
diff -aNur orig/linux/drm/kernel/gamma_drv.h myne/linux/drm/kernel/gamma_drv.h
--- orig/linux/drm/kernel/gamma_drv.h   Wed Feb 13 20:00:23 2002
+++ myne/linux/drm/kernel/gamma_drv.h   Wed Jul 10 06:25:24 2002
@@ -32,6 +32,9 @@
 #ifndef _GAMMA_DRV_H_
 #define _GAMMA_DRV_H_
 
+#include "drmP.h" /* drm_chipinfo */
+#include "drm_sup.h"
+
 typedef struct drm_gamma_private {
        drm_gamma_sarea_t *sarea_priv;
        drm_map_t *sarea;
@@ -116,5 +119,17 @@
 #define GAMMA_DMAADDRTAG       0x530
 #define GAMMA_DMACOUNTTAG      0x531
 #define GAMMA_COMMANDINTTAG    0x532
+
+#ifdef DEVICELIST
+/* List acquired from http://www.yourvote.com/pci/pcihdr.h and 
+xc/xc/programs/Xserver/hw/xfree86/common/xf86PciInfo.h
+ * Please report to [EMAIL PROTECTED] inaccuracies or if a chip you have works that 
+is marked unsupported here.
+ */
+drm_chipinfo_t DRM(devicelist)[] = {
+       {0x3d3d, 0x0008, 1, "3DLabs Gamma"},
+       {0, 0, 0, NULL}
+};
+
+#define DRIVER_CARD_LIST DRM(devicelist)
+#endif
 
 #endif
diff -aNur orig/linux/drm/kernel/mga_drv.c myne/linux/drm/kernel/mga_drv.c
--- orig/linux/drm/kernel/mga_drv.c     Fri Jul  5 03:31:10 2002
+++ myne/linux/drm/kernel/mga_drv.c     Wed Jul 10 06:02:35 2002
@@ -34,6 +34,7 @@
 #include "drmP.h"
 #include "drm.h"
 #include "mga_drm.h"
+#define DEVICELIST
 #include "mga_drv.h"
 #include "drm_agpsupport.h"
 #include "drm_auth.h"
diff -aNur orig/linux/drm/kernel/r128_drv.c myne/linux/drm/kernel/r128_drv.c
--- orig/linux/drm/kernel/r128_drv.c    Fri Jul  5 03:31:10 2002
+++ myne/linux/drm/kernel/r128_drv.c    Wed Jul 10 05:58:22 2002
@@ -34,6 +34,7 @@
 #include "drmP.h"
 #include "drm.h"
 #include "r128_drm.h"
+#define DEVICELIST
 #include "r128_drv.h"
 #include "ati_pcigart.h"
 
diff -aNur orig/linux/drm/kernel/radeon_drv.c myne/linux/drm/kernel/radeon_drv.c
--- orig/linux/drm/kernel/radeon_drv.c  Fri Jul  5 03:31:10 2002
+++ myne/linux/drm/kernel/radeon_drv.c  Wed Jul 10 06:01:43 2002
@@ -32,6 +32,7 @@
 #include "drmP.h"
 #include "drm.h"
 #include "radeon_drm.h"
+#define DEVICELIST
 #include "radeon_drv.h"
 #include "ati_pcigart.h"
 
diff -aNur orig/linux/drm/kernel/tdfx_drv.c myne/linux/drm/kernel/tdfx_drv.c
--- orig/linux/drm/kernel/tdfx_drv.c    Fri Jul  5 03:31:10 2002
+++ myne/linux/drm/kernel/tdfx_drv.c    Wed Jul 10 06:19:39 2002
@@ -33,6 +33,8 @@
 #include <linux/config.h>
 #include "tdfx.h"
 #include "drmP.h"
+#define DEVICELIST
+#include "tdfx_drv.h"
 
 #define DRIVER_AUTHOR          "VA Linux Systems Inc."
 
@@ -43,36 +45,6 @@
 #define DRIVER_MAJOR           1
 #define DRIVER_MINOR           0
 #define DRIVER_PATCHLEVEL      0
-
-#ifndef PCI_VENDOR_ID_3DFX
-#define PCI_VENDOR_ID_3DFX 0x121A
-#endif
-#ifndef PCI_DEVICE_ID_3DFX_VOODOO5
-#define PCI_DEVICE_ID_3DFX_VOODOO5 0x0009
-#endif
-#ifndef PCI_DEVICE_ID_3DFX_VOODOO4
-#define PCI_DEVICE_ID_3DFX_VOODOO4 0x0007
-#endif
-#ifndef PCI_DEVICE_ID_3DFX_VOODOO3_3000 /* Voodoo3 3000 */
-#define PCI_DEVICE_ID_3DFX_VOODOO3_3000 0x0005
-#endif
-#ifndef PCI_DEVICE_ID_3DFX_VOODOO3_2000 /* Voodoo3 3000 */
-#define PCI_DEVICE_ID_3DFX_VOODOO3_2000 0x0004
-#endif
-#ifndef PCI_DEVICE_ID_3DFX_BANSHEE
-#define PCI_DEVICE_ID_3DFX_BANSHEE 0x0003
-#endif
-
-static drm_pci_list_t DRM(idlist)[] = {
-       { PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_BANSHEE },
-       { PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_VOODOO3_2000 },
-       { PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_VOODOO3_3000 },
-       { PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_VOODOO4 },
-       { PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_VOODOO5 },
-       { 0, 0 }
-};
-
-#define DRIVER_CARD_LIST DRM(idlist)
 
 
 #include "drm_auth.h"
diff -aNur orig/shared/drm/kernel/drm_sup.h myne/shared/drm/kernel/drm_sup.h
--- orig/shared/drm/kernel/drm_sup.h    Wed Dec 31 18:00:00 1969
+++ myne/shared/drm/kernel/drm_sup.h    Wed Jul 10 05:57:32 2002
@@ -0,0 +1,25 @@
+/* drm_sup.h -- This is for DRM specific kernel identifiers.
+ *
+ * Add your DRM_SUP_* hear if your going to use our PCI ids.
+ *
+ * Authors:
+ *    Mike Mestnik <[EMAIL PROTECTED]>
+ */
+
+#include "drmP.h" /* so the below can't get miss defined */
+
+#ifndef DRM_SUP_LINUX
+#ifdef __linux__
+#define DRM_SUP_LINUX 1
+#else
+#define DRM_SUP_LINUX 0
+#endif
+#endif
+
+#ifndef DRM_SUP_BSD
+#if (defined __NetBSD__ | defined __FreeBSD)
+#define DRM_SUP_BSD 1
+#else
+#define DRM_SUP_BSD 0
+#endif
+#endif
diff -aNur orig/shared/drm/kernel/mga_drv.h myne/shared/drm/kernel/mga_drv.h
--- orig/shared/drm/kernel/mga_drv.h    Fri Jul  5 03:31:11 2002
+++ myne/shared/drm/kernel/mga_drv.h    Wed Jul 10 06:02:19 2002
@@ -31,6 +31,9 @@
 #ifndef __MGA_DRV_H__
 #define __MGA_DRV_H__
 
+#include "drmP.h" /* drm_chipinfo */
+#include "drm_sup.h"
+
 typedef struct drm_mga_primary_buffer {
        u8 *start;
        u8 *end;
@@ -627,5 +630,20 @@
        u32 status = MGA_READ( MGA_STATUS ) & MGA_ENGINE_IDLE_MASK;
        return ( status == MGA_ENDPRDMASTS );
 }
+
+#ifdef DEVICELIST
+/* List acquired from http://www.yourvote.com/pci/pcihdr.h and 
+xc/xc/programs/Xserver/hw/xfree86/common/xf86PciInfo.h
+ * Please report to [EMAIL PROTECTED] inaccuracies or if a chip you have works that 
+is marked unsupported here.
+ */
+drm_chipinfo_t DRM(devicelist)[] = {
+       {0x102b, 0x0520, (0 | DRM_SUP_LINUX), "Matrox G200 (PCI)"},
+       {0x102b, 0x0521, 1, "Matrox G200 (AGP)"},
+       {0x102b, 0x0525, 1, "Matrox G400/G450 (AGP)"},
+       {0x102b, 0x2527, 1, "Matrox G550 (AGP)"},
+       {0, 0, 0, NULL}
+};
+
+#define DRIVER_CARD_LIST DRM(devicelist)
+#endif
 
 #endif
diff -aNur orig/shared/drm/kernel/r128_drv.h myne/shared/drm/kernel/r128_drv.h
--- orig/shared/drm/kernel/r128_drv.h   Fri Jul  5 03:31:11 2002
+++ myne/shared/drm/kernel/r128_drv.h   Wed Jul 10 05:59:57 2002
@@ -34,6 +34,9 @@
 #ifndef __R128_DRV_H__
 #define __R128_DRV_H__
 
+#include "drmP.h" /* drm_chipinfo */
+#include "drm_sup.h"
+
 #define GET_RING_HEAD(ring)            DRM_READ32(  (volatile u32 *) (ring)->head )
 #define SET_RING_HEAD(ring,val)                DRM_WRITE32( (volatile u32 *) 
(ring)->head, (val) )
 
@@ -500,5 +503,39 @@
        ring[write++] = cpu_to_le32( x );                               \
        write &= tail_mask;                                             \
 } while (0)
+
+#ifdef DEVICELIST
+/* List acquired from http://www.yourvote.com/pci/pcihdr.h and 
+xc/xc/programs/Xserver/hw/xfree86/common/xf86PciInfo.h
+ * Please report to [EMAIL PROTECTED] inaccuracies or if a chip you have works that is 
+marked unsupported here.
+ */
+drm_chipinfo_t DRM(devicelist)[] = {
+       {0x1002, 0x4c45, (__REALLY_HAVE_SG | DRM_SUP_LINUX),
+                         "ATI Rage 128 Mobility LE (PCI)"},
+       {0x1002, 0x4c46, 1, "ATI Rage 128 Mobility LF (AGP)"},
+       {0x1002, 0x4d46, 1, "ATI Rage 128 Mobility MF (AGP)"},
+       {0x1002, 0x4d4c, 1, "ATI Rage 128 Mobility ML (AGP)"},
+       {0x1002, 0x5044, (__REALLY_HAVE_SG | DRM_SUP_LINUX),
+                         "ATI Rage 128 Pro PD (PCI)"},
+       {0x1002, 0x5046, 1, "ATI Rage 128 Pro PF (AGP)"},
+       {0x1002, 0x5050, (__REALLY_HAVE_SG | DRM_SUP_LINUX),
+                         "ATI Rage 128 Pro PP (PCI)"},
+       {0x1002, 0x5052, (__REALLY_HAVE_SG | DRM_SUP_LINUX),
+                         "ATI Rage 128 Pro PR (PCI)"},
+       {0x1002, 0x5245, (__REALLY_HAVE_SG | DRM_SUP_LINUX),
+                         "ATI Rage 128 RE (PCI)"},
+       {0x1002, 0x5246, 1, "ATI Rage 128 RF (AGP)"},
+       {0x1002, 0x5247, 1, "ATI Rage 128 RG (AGP)"},
+       {0x1002, 0x524b, (__REALLY_HAVE_SG | DRM_SUP_LINUX),
+                         "ATI Rage 128 RK (PCI)"},
+       {0x1002, 0x524c, 1, "ATI Rage 128 RL (AGP)"},
+       {0x1002, 0x534d, 1, "ATI Rage 128 SM (AGP)"},
+       {0x1002, 0x5446, 1, "ATI Rage 128 Pro Ultra TF (AGP)"},
+       {0x1002, 0x544C, 1, "ATI Rage 128 Pro Ultra TL (AGP)"},
+       {0x1002, 0x5452, 1, "ATI Rage 128 Pro Ultra TR (AGP)"},
+       {0, 0, 0, NULL}
+};
+
+#define DRIVER_CARD_LIST DRM(devicelist)
+#endif
 
 #endif /* __R128_DRV_H__ */
diff -aNur orig/shared/drm/kernel/radeon_drv.h myne/shared/drm/kernel/radeon_drv.h
--- orig/shared/drm/kernel/radeon_drv.h Fri Jul  5 03:31:11 2002
+++ myne/shared/drm/kernel/radeon_drv.h Wed Jul 10 06:01:31 2002
@@ -31,6 +31,9 @@
 #ifndef __RADEON_DRV_H__
 #define __RADEON_DRV_H__
 
+#include "drmP.h" /* drm_chipinfo */
+#include "drm_sup.h"
+
 #define GET_RING_HEAD(ring)            DRM_READ32(  (volatile u32 *) (ring)->head )
 #define SET_RING_HEAD(ring,val)                DRM_WRITE32( (volatile u32 *) 
(ring)->head , (val))
 
@@ -754,6 +757,26 @@
        write &= mask;                                          \
 } while (0)
 
+#ifdef DEVICELIST
+/* List acquired from http://www.yourvote.com/pci/pcihdr.h and 
+xc/xc/programs/Xserver/hw/xfree86/common/xf86PciInfo.h
+ * Please report to [EMAIL PROTECTED] inaccuracies or if a chip you have works that is 
+marked unsupported here.
+ */
+drm_chipinfo_t DRM(devicelist)[] = {
+       {0x1002, 0x4C57, 1, "ATI Radeon LW Mobility 7 (AGP)"},
+       {0x1002, 0x4C59, 1, "ATI Radeon LY Mobility 6 (AGP)"},
+       {0x1002, 0x4C5A, 1, "ATI Radeon LZ Mobility 6 (AGP)"},
+       {0x1002, 0x5144, 1, "ATI Radeon QD (AGP)"},
+       {0x1002, 0x5145, 1, "ATI Radeon QE (AGP)"},
+       {0x1002, 0x5146, 1, "ATI Radeon QF (AGP)"},
+       {0x1002, 0x5147, 1, "ATI Radeon QG (AGP)"},
+       {0x1002, 0x5157, 1, "ATI Radeon QW 7500 (AGP)"},
+       {0x1002, 0x5159, 1, "ATI Radeon QY VE (AGP)"},
+       {0x1002, 0x515A, 1, "ATI Radeon QZ VE (AGP)"},
+       {0, 0, 0, NULL}
+};
+
+#define DRIVER_CARD_LIST DRM(devicelist)
+#endif
 
 #define RADEON_PERFORMANCE_BOXES       0
 
diff -aNur orig/shared/drm/kernel/tdfx_drv.h myne/shared/drm/kernel/tdfx_drv.h
--- orig/shared/drm/kernel/tdfx_drv.h   Wed Dec 31 18:00:00 1969
+++ myne/shared/drm/kernel/tdfx_drv.h   Wed Jul 10 06:38:39 2002
@@ -0,0 +1,30 @@
+/* tdfx_drv.h -- Private header for tdfx driver -*- linux-c -*-
+ *
+ * Authors:
+ *    Eric Anholt <[EMAIL PROTECTED]>
+ *    Mike Mestnik <[EMAIL PROTECTED]>
+ */
+
+#ifndef __TDFX_DRV_H__
+#define __TDFX_DRV_H__
+
+#include "drmP.h" /* drm_chipinfo */
+#include "drm_sup.h"
+
+#ifdef DEVICELIST
+/* List acquired from http://www.yourvote.com/pci/pcihdr.h and 
+xc/xc/programs/Xserver/hw/xfree86/common/xf86PciInfo.h
+ * Please report to [EMAIL PROTECTED] inaccuracies or if a chip you have works that 
+is marked unsupported here.
+ */
+drm_chipinfo_t DRM(devicelist)[] = {
+       {0x121a, 0x0003, 1, "3dfx Voodoo Banshee"},
+       {0x121a, 0x0004, 1, "3dfx Voodoo3 2000"},
+       {0x121a, 0x0005, 1, "3dfx Voodoo3 3000"},
+       {0x121a, 0x0007, 1, "3dfx Voodoo4"},
+       {0x121a, 0x0009, 1, "3dfx Voodoo5"},
+       {0, 0, 0, NULL}
+};
+
+#define DRIVER_CARD_LIST DRM(devicelist)
+#endif
+
+#endif /* __TDFX_DRV_H__ */

Reply via email to