]> git.neil.brown.name Git - history.git/commitdiff
Import 2.3.13pre6 2.3.13pre6
authorLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:26:44 +0000 (15:26 -0500)
committerLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:26:44 +0000 (15:26 -0500)
13 files changed:
Documentation/joystick-api.txt
arch/i386/mm/init.c
drivers/parport/parport_pc.c
drivers/pci/devlist.h [new file with mode: 0644]
drivers/pci/names.c
drivers/pci/pci.c
drivers/scsi/aic7xxx.c
fs/buffer.c
fs/proc/root.c
include/linux/init.h
include/linux/ioport.h
include/linux/pci.h
kernel/resource.c

index 6b7b34129a2ea6d7012c157e5fb3a8b6a013d8f8..fe3b6842c6fdce370f17c4a1fc11c3724e9ebd11 100644 (file)
@@ -1,7 +1,7 @@
                      Joystick API Documentation                -*-Text-*-
 
                       Ragnar Hojland Espinosa
-                    <ragnar@lightside.ddns.org>
+                    <ragnar@lightside.dhis.org>
 
                              7 Aug 1998
 
@@ -74,9 +74,10 @@ is, you have both an axis 0 and a button 0). Generally,
        2nd Axis Y      3
        ...and so on
 
-Hats vary from one joystick type to another. Some can be moved in 8
-directions, some only in 4, however, the driver always reports a hat as two
-independent axis, even if the hardware doesn't allow independent movement.
+Hats vary from one joystick type to another.  Some can be moved in 8
+directions, some only in 4.  The driver, however, always reports a hat
+as two independent axis, even if the hardware doesn't allow independent
+movement. 
 
 
 2.3 js_event.value
@@ -85,7 +86,7 @@ independent axis, even if the hardware doesn't allow independent movement.
 For an axis, ``value'' is a signed integer between -32767 and +32767
 representing the position of the joystick along that axis. If you
 don't read a 0 when the joystick is `dead', or if it doesn't span the
-full range, you should recalibrate (with, for example, jscal).
+full range, you should recalibrate it (with, for example, jscal).
 
 For a button, ``value'' for a press button event is 1 and for a release
 button event is 0.
@@ -93,16 +94,16 @@ button event is 0.
 Though this
 
        if (js_event.type == JS_EVENT_BUTTON) {
-          buttons_state ^= (1 << js_event.number);
+               buttons_state ^= (1 << js_event.number);
        }
 
 may work well if you handle JS_EVENT_INIT events separately,
 
        if ((js_event.type & ~JS_EVENT_INIT) == JS_EVENT_BUTTON) {
-          if (js_event.value)
-             buttons_state |= (1 << js_event.number);
-          else
-             buttons_state &= ~(1 << js_event.number);
+               if (js_event.value)
+                       buttons_state |= (1 << js_event.number);
+               else
+                       buttons_state &= ~(1 << js_event.number);
        }
 
 is much safer since it can't lose sync with the driver. As you would
@@ -112,6 +113,7 @@ snippet, this ends up being shorter.
 
 2.4 js_event.time
 ~~~~~~~~~~~~~~~~~
+
 The time an event was generated is stored in ``js_event.time''. It's a time
 in miliseconds since ... well, since sometime in the past.  This eases the
 task of detecting double clicks, figuring out if movement of axis and button
@@ -144,14 +146,14 @@ all events on the queue (that is, until you get a -1).
 For example,
 
        while (1) {
-          while (read (fd, &e, sizeof(struct js_event)) > 0) {
-             process_event (e);
-          }
-          /* EAGAIN is returned when the queue is empty */
-          if (errno != EAGAIN) {
-             /* error */
-          }
-          /* do something interesting with processed events */
+               while (read (fd, &e, sizeof(struct js_event)) > 0) {
+                       process_event (e);
+               }
+               /* EAGAIN is returned when the queue is empty */
+               if (errno != EAGAIN) {
+                       /* error */
+               }
+               /* do something interesting with processed events */
        }
 
 One reason for emptying the queue is that if it gets full you'll start
@@ -219,6 +221,7 @@ JS_VERSION symbol
        #ifdef JS_VERSION
        #if JS_VERSION > 0xsomething
 
+
 4.2 JSIOCGNAME
 ~~~~~~~~~~~~~~
 
@@ -232,6 +235,7 @@ possible overrun should the name be too long.
                strncpy(name, "Unknown", sizeof(name));
        printf("Name: %s\n", name);
 
+
 4.3 JSIOC[SG]CORR
 ~~~~~~~~~~~~~~~~~
 
@@ -266,10 +270,10 @@ The driver offers backward compatibility, though. Here's a quick summary:
 
        struct JS_DATA_TYPE js;
        while (1) {
-          if (read (fd, &js, JS_RETURN) != JS_RETURN) {
-             /* error */
-          }
-          usleep (1000);
+               if (read (fd, &js, JS_RETURN) != JS_RETURN) {
+                       /* error */
+               }
+               usleep (1000);
        }
 
 As you can figure out from the example, the read returns immediately,
@@ -299,6 +303,7 @@ The v0.8.0.2 driver also had an interface for 'digital joysticks', (now
 called Multisystem joystick in this driver), under /dev/djsX. This driver
 doesn't try to be compatible with that interface.
 
+
 6. Final Notes
 ~~~~~~~~~~~~~~
 
index 9758097e9b4ce7da3049c0e9d9c76bb4979e711f..f57920c55389bf484ba0c09667c754a74c19401b 100644 (file)
@@ -28,6 +28,8 @@
 #include <asm/dma.h>
 #include <asm/fixmap.h>
 
+static unsigned long totalram = 0;
+
 extern void show_net_buffers(void);
 extern unsigned long init_smp_mappings(unsigned long);
 
@@ -419,6 +421,7 @@ __initfunc(void mem_init(unsigned long start_mem, unsigned long end_mem))
                        continue;
                }
                set_page_count(mem_map+MAP_NR(tmp), 1);
+               totalram += PAGE_SIZE;
 #ifdef CONFIG_BLK_DEV_INITRD
                if (!initrd_start || (tmp < initrd_start || tmp >=
                    initrd_end))
@@ -446,28 +449,16 @@ void free_initmem(void)
                mem_map[MAP_NR(addr)].flags &= ~(1 << PG_reserved);
                set_page_count(mem_map+MAP_NR(addr), 1);
                free_page(addr);
+               totalram += PAGE_SIZE;
        }
        printk ("Freeing unused kernel memory: %dk freed\n", (&__init_end - &__init_begin) >> 10);
 }
 
 void si_meminfo(struct sysinfo *val)
 {
-       int i;
-
-       i = max_mapnr;
-       val->totalram = 0;
+       val->totalram = totalram;
        val->sharedram = 0;
        val->freeram = nr_free_pages << PAGE_SHIFT;
        val->bufferram = atomic_read(&buffermem);
-       while (i-- > 0)  {
-               if (PageReserved(mem_map+i))
-                       continue;
-               val->totalram++;
-               if (!page_count(mem_map+i))
-                       continue;
-               val->sharedram += page_count(mem_map+i) - 1;
-       }
-       val->totalram <<= PAGE_SHIFT;
-       val->sharedram <<= PAGE_SHIFT;
        return;
 }
index 14675b16d29e1f946796533e06c3a09b176dea57..83ba8d4f3d98012ac5f39a9a5124f603a703c9e0 100644 (file)
@@ -1763,11 +1763,10 @@ static int __init parport_pc_init_pci (int irq, int dma)
                        for (n = 0; n < cards[i].numports; n++) {
                                unsigned long lo = cards[i].addr[n].lo;
                                unsigned long hi = cards[i].addr[n].hi;
-                               unsigned long io_lo = pcidev->base_address[lo];
-                               unsigned long io_hi = ((hi < 0) ? 0 :
-                                               pcidev->base_address[hi]);
-                               io_lo &= PCI_BASE_ADDRESS_IO_MASK;
-                               io_hi &= PCI_BASE_ADDRESS_IO_MASK;
+                               unsigned long io_lo, io_hi;
+                               io_lo = pcidev->resource[lo].start;
+                               io_hi = ((hi < 0) ? 0 :
+                                        pcidev->resource[hi].start);
                                if (irq == PARPORT_IRQ_AUTO) {
                                        if (parport_pc_probe_port (io_lo,
                                                                   io_hi,
diff --git a/drivers/pci/devlist.h b/drivers/pci/devlist.h
new file mode 100644 (file)
index 0000000..c52c406
--- /dev/null
@@ -0,0 +1,962 @@
+VENDOR( COMPAQ, "Compaq" )
+       DEVICE( COMPAQ,         COMPAQ_1280,    "QVision 1280/p")
+       DEVICE( COMPAQ,         COMPAQ_SMART2P, "Smart-2/P RAID Controller")
+       DEVICE( COMPAQ,         COMPAQ_NETEL100,"Netelligent 10/100")
+       DEVICE( COMPAQ,         COMPAQ_NETEL10, "Netelligent 10")
+       DEVICE( COMPAQ,         COMPAQ_NETFLEX3I,"NetFlex 3")
+       DEVICE( COMPAQ,         COMPAQ_NETEL100D,"Netelligent 10/100 Dual")
+       DEVICE( COMPAQ,         COMPAQ_NETEL100PI,"Netelligent 10/100 ProLiant")
+       DEVICE( COMPAQ,         COMPAQ_NETEL100I,"Netelligent 10/100 Integrated")
+       DEVICE( COMPAQ,         COMPAQ_THUNDER, "ThunderLAN")
+       DEVICE( COMPAQ,         COMPAQ_NETFLEX3B,"NetFlex 3 BNC")
+ENDVENDOR()
+
+VENDOR( NCR, "NCR" )
+       DEVICE( NCR,            NCR_53C810,     "53c810")
+       DEVICE( NCR,            NCR_53C820,     "53c820")
+       DEVICE( NCR,            NCR_53C825,     "53c825")
+       DEVICE( NCR,            NCR_53C815,     "53c815")
+       DEVICE( NCR,            NCR_53C860,     "53c860")
+       DEVICE( NCR,            NCR_53C896,     "53c896")
+       DEVICE( NCR,            NCR_53C895,     "53c895")
+       DEVICE( NCR,            NCR_53C885,     "53c885")
+       DEVICE( NCR,            NCR_53C875,     "53c875")
+       DEVICE( NCR,            NCR_53C875J,    "53c875J")
+ENDVENDOR()
+
+VENDOR( ATI, "ATI" )
+       DEVICE( ATI,            ATI_68800,      "68800AX")
+       DEVICE( ATI,            ATI_215CT222,   "215CT222")
+       DEVICE( ATI,            ATI_210888CX,   "210888CX")
+       DEVICE( ATI,            ATI_215GB,      "Mach64 GB")
+       DEVICE( ATI,            ATI_215GD,      "Mach64 GD (Rage Pro)")
+       DEVICE( ATI,            ATI_215GI,      "Mach64 GI (Rage Pro)")
+       DEVICE( ATI,            ATI_215GP,      "Mach64 GP (Rage Pro)")
+       DEVICE( ATI,            ATI_215GQ,      "Mach64 GQ (Rage Pro)")
+       DEVICE( ATI,            ATI_215GT,      "Mach64 GT (Rage II)")
+       DEVICE( ATI,            ATI_215GTB,     "Mach64 GTB (Rage II)")
+       DEVICE( ATI,            ATI_210888GX,   "210888GX")
+       DEVICE( ATI,            ATI_215LG,      "Mach64 LG (Rage Pro)")
+       DEVICE( ATI,            ATI_264LT,      "Mach64 LT")
+       DEVICE( ATI,            ATI_264VT,      "Mach64 VT")
+ENDVENDOR()
+
+VENDOR( VLSI, "VLSI" )
+       DEVICE( VLSI,           VLSI_82C592,    "82C592-FC1")
+       DEVICE( VLSI,           VLSI_82C593,    "82C593-FC1")
+       DEVICE( VLSI,           VLSI_82C594,    "82C594-AFC2")
+       DEVICE( VLSI,           VLSI_82C597,    "82C597-AFC2")
+       DEVICE( VLSI,           VLSI_82C541,    "82C541 Lynx")
+       DEVICE( VLSI,           VLSI_82C543,    "82C543 Lynx ISA")
+       DEVICE( VLSI,           VLSI_82C532,    "82C532")
+       DEVICE( VLSI,           VLSI_82C534,    "82C534")
+       DEVICE( VLSI,           VLSI_82C535,    "82C535")
+       DEVICE( VLSI,           VLSI_82C147,    "82C147")
+       DEVICE( VLSI,           VLSI_VAS96011,  "VAS96011 (Golden Gate II)")
+ENDVENDOR()
+
+VENDOR( ADL, "Avance Logic" )
+       DEVICE( ADL,            ADL_2301,       "2301")
+ENDVENDOR()
+
+VENDOR( NS, "NS" )
+       DEVICE( NS,             NS_87415,       "87415")
+       DEVICE( NS,             NS_87410,       "87410")
+ENDVENDOR()
+
+VENDOR( TSENG, "Tseng'Lab" )
+       DEVICE( TSENG,          TSENG_W32P_2,   "ET4000W32P")
+       DEVICE( TSENG,          TSENG_W32P_b,   "ET4000W32P rev B")
+       DEVICE( TSENG,          TSENG_W32P_c,   "ET4000W32P rev C")
+       DEVICE( TSENG,          TSENG_W32P_d,   "ET4000W32P rev D")
+       DEVICE( TSENG,          TSENG_ET6000,   "ET6000")
+ENDVENDOR()
+
+VENDOR( WEITEK, "Weitek" )
+       DEVICE( WEITEK,         WEITEK_P9000,   "P9000")
+       DEVICE( WEITEK,         WEITEK_P9100,   "P9100")
+ENDVENDOR()
+
+VENDOR( DEC, "DEC" )
+       DEVICE( DEC,            DEC_BRD,        "DC21050")
+       DEVICE( DEC,            DEC_TULIP,      "DC21040")
+       DEVICE( DEC,            DEC_TGA,        "TGA")
+       DEVICE( DEC,            DEC_TULIP_FAST, "DC21140")
+       DEVICE( DEC,            DEC_TGA2,       "TGA2")
+       DEVICE( DEC,            DEC_FDDI,       "DEFPA")
+       DEVICE( DEC,            DEC_TULIP_PLUS, "DC21041")
+       DEVICE( DEC,            DEC_21142,      "DC21142")
+       DEVICE( DEC,            DEC_21052,      "DC21052")
+       DEVICE( DEC,            DEC_21150,      "DC21150")
+       DEVICE( DEC,            DEC_21152,      "DC21152")
+       DEVICE( DEC,            DEC_21153,      "DC21153")
+       DEVICE( DEC,            DEC_21154,      "DC21154")
+ENDVENDOR()
+
+VENDOR( CIRRUS, "Cirrus Logic" )
+       DEVICE( CIRRUS,         CIRRUS_7548,    "GD 7548")
+       DEVICE( CIRRUS,         CIRRUS_5430,    "GD 5430")
+       DEVICE( CIRRUS,         CIRRUS_5434_4,  "GD 5434")
+       DEVICE( CIRRUS,         CIRRUS_5434_8,  "GD 5434")
+       DEVICE( CIRRUS,         CIRRUS_5436,    "GD 5436")
+       DEVICE( CIRRUS,         CIRRUS_5446,    "GD 5446")
+       DEVICE( CIRRUS,         CIRRUS_5480,    "GD 5480")
+       DEVICE( CIRRUS,         CIRRUS_5464,    "GD 5464")
+       DEVICE( CIRRUS,         CIRRUS_5465,    "GD 5465")
+       DEVICE( CIRRUS,         CIRRUS_6729,    "CL 6729")
+       DEVICE( CIRRUS,         CIRRUS_6832,    "PD 6832")
+       DEVICE( CIRRUS,         CIRRUS_7542,    "CL 7542")
+       DEVICE( CIRRUS,         CIRRUS_7543,    "CL 7543")
+       DEVICE( CIRRUS,         CIRRUS_7541,    "CL 7541")
+ENDVENDOR()
+
+VENDOR( IBM, "IBM" )
+       DEVICE( IBM,            IBM_FIRE_CORAL, "Fire Coral")
+       DEVICE( IBM,            IBM_TR,         "Token Ring")
+       DEVICE( IBM,            IBM_82G2675,    "82G2675")
+       DEVICE( IBM,            IBM_MCA,        "MicroChannel")
+       DEVICE( IBM,            IBM_82351,      "82351")
+       DEVICE( IBM,            IBM_PYTHON,     "Python")
+       DEVICE( IBM,            IBM_SERVERAID,  "ServeRAID")
+       DEVICE( IBM,            IBM_TR_WAKE,    "Wake On LAN Token Ring")
+       DEVICE( IBM,            IBM_MPIC,       "MPIC-2 Interrupt Controller")
+       DEVICE( IBM,            IBM_3780IDSP,   "MWave DSP")
+       DEVICE( IBM,            IBM_MPIC_2,     "MPIC-2 ASIC Interrupt Controller")
+ENDVENDOR()
+
+VENDOR( WD, "Western Digital" )
+       DEVICE( WD,             WD_7197,        "WD 7197")
+ENDVENDOR()
+
+VENDOR( AMD, "AMD" )
+       DEVICE( AMD,            AMD_LANCE,      "79C970")
+       DEVICE( AMD,            AMD_SCSI,       "53C974")
+ENDVENDOR()
+
+VENDOR( TRIDENT, "Trident" )
+       DEVICE( TRIDENT,        TRIDENT_9397,   "Cyber9397")
+       DEVICE( TRIDENT,        TRIDENT_9420,   "TG 9420")
+       DEVICE( TRIDENT,        TRIDENT_9440,   "TG 9440")
+       DEVICE( TRIDENT,        TRIDENT_9660,   "TG 9660 / Cyber9385")
+       DEVICE( TRIDENT,        TRIDENT_9750,   "Image 975")
+ENDVENDOR()
+
+VENDOR( AI, "Acer Incorporated" )
+       DEVICE( AI,             AI_M1435,       "M1435")
+ENDVENDOR()
+
+VENDOR( MATROX, "Matrox" )
+       DEVICE( MATROX,         MATROX_MGA_2,   "Atlas PX2085")
+       DEVICE( MATROX,         MATROX_MIL,     "Millennium")
+       DEVICE( MATROX,         MATROX_MYS,     "Mystique")
+       DEVICE( MATROX,         MATROX_MIL_2,   "Millennium II")
+       DEVICE( MATROX,         MATROX_MIL_2_AGP,"Millennium II AGP")
+       DEVICE( MATROX,         MATROX_G200_PCI,"G200 PCI")
+       DEVICE( MATROX,         MATROX_G200_AGP,"G200 AGP")
+       DEVICE( MATROX,         MATROX_MGA_IMP, "MGA Impression")
+       DEVICE( MATROX,         MATROX_G100_MM, "G100 multi monitor")
+       DEVICE( MATROX,         MATROX_G100_AGP,"G100 AGP")
+ENDVENDOR()
+
+VENDOR( CT, "Chips & Technologies" )
+       DEVICE( CT,             CT_65545,       "65545")
+       DEVICE( CT,             CT_65548,       "65548")
+       DEVICE( CT,             CT_65550,       "65550")
+       DEVICE( CT,             CT_65554,       "65554")
+       DEVICE( CT,             CT_65555,       "65555")
+ENDVENDOR()
+
+VENDOR( MIRO, "Miro" )
+       DEVICE( MIRO,           MIRO_36050,     "ZR36050")
+ENDVENDOR()
+
+VENDOR( NEC, "NEC" )
+       DEVICE( NEC,            NEC_PCX2,       "PowerVR PCX2")
+ENDVENDOR()
+
+VENDOR( FD, "Future Domain" )
+       DEVICE( FD,             FD_36C70,       "TMC-18C30")
+ENDVENDOR()
+
+VENDOR( SI, "Silicon Integrated Systems" )
+       DEVICE( SI,             SI_5591_AGP,    "5591/5592 AGP")
+       DEVICE( SI,             SI_6202,        "6202")
+       DEVICE( SI,             SI_503,         "85C503")
+       DEVICE( SI,             SI_ACPI,        "ACPI")
+       DEVICE( SI,             SI_5597_VGA,    "5597/5598 VGA")
+       DEVICE( SI,             SI_6205,        "6205")
+       DEVICE( SI,             SI_501,         "85C501")
+       DEVICE( SI,             SI_496,         "85C496")
+       DEVICE( SI,             SI_601,         "85C601")
+       DEVICE( SI,             SI_5107,        "5107")
+       DEVICE( SI,             SI_5511,        "85C5511")
+       DEVICE( SI,             SI_5513,        "85C5513")
+       DEVICE( SI,             SI_5571,        "5571")
+       DEVICE( SI,             SI_5591,        "5591/5592 Host")
+       DEVICE( SI,             SI_5597,        "5597/5598 Host")
+       DEVICE( SI,             SI_7001,        "7001 USB")
+ENDVENDOR()
+
+VENDOR( HP, "Hewlett Packard" )
+       DEVICE( HP,             HP_J2585A,      "J2585A")
+       DEVICE( HP,             HP_J2585B,      "J2585B (Lassen)")
+ENDVENDOR()
+
+VENDOR( PCTECH, "PCTECH" )
+       DEVICE( PCTECH,         PCTECH_RZ1000,  "RZ1000 (buggy)")
+       DEVICE( PCTECH,         PCTECH_RZ1001,  "RZ1001 (buggy?)")
+       DEVICE( PCTECH,         PCTECH_SAMURAI_0,"Samurai 0")
+       DEVICE( PCTECH,         PCTECH_SAMURAI_1,"Samurai 1")
+       DEVICE( PCTECH,         PCTECH_SAMURAI_IDE,"Samurai IDE")
+ENDVENDOR()
+
+VENDOR( DPT, "DPT" )
+       DEVICE( DPT,            DPT,            "SmartCache/Raid")
+ENDVENDOR()
+
+VENDOR( OPTI, "OPTi" )
+       DEVICE( OPTI,           OPTI_92C178,    "92C178")
+       DEVICE( OPTI,           OPTI_82C557,    "82C557 Viper-M")
+       DEVICE( OPTI,           OPTI_82C558,    "82C558 Viper-M ISA+IDE")
+       DEVICE( OPTI,           OPTI_82C621,    "82C621")
+       DEVICE( OPTI,           OPTI_82C700,    "82C700")
+       DEVICE( OPTI,           OPTI_82C701,    "82C701 FireStar Plus")
+       DEVICE( OPTI,           OPTI_82C814,    "82C814 Firebridge 1")
+       DEVICE( OPTI,           OPTI_82C822,    "82C822")
+       DEVICE( OPTI,           OPTI_82C825,    "82C825 Firebridge 2")
+ENDVENDOR()
+
+VENDOR( SGS, "SGS Thomson" )
+       DEVICE( SGS,            SGS_2000,       "STG 2000X")
+       DEVICE( SGS,            SGS_1764,       "STG 1764X")
+ENDVENDOR()
+
+VENDOR( BUSLOGIC, "BusLogic" )
+       DEVICE( BUSLOGIC,       BUSLOGIC_MULTIMASTER_NC, "MultiMaster NC")
+       DEVICE( BUSLOGIC,       BUSLOGIC_MULTIMASTER,    "MultiMaster")
+       DEVICE( BUSLOGIC,       BUSLOGIC_FLASHPOINT,     "FlashPoint")
+ENDVENDOR()
+
+VENDOR( TI, "Texas Instruments" )
+       DEVICE( TI,             TI_TVP4010,     "TVP4010 Permedia")
+       DEVICE( TI,             TI_TVP4020,     "TVP4020 Permedia 2")
+       DEVICE( TI,             TI_PCI1130,     "PCI1130")
+       DEVICE( TI,             TI_PCI1131,     "PCI1131")
+       DEVICE( TI,             TI_PCI1250,     "PCI1250")
+ENDVENDOR()
+
+VENDOR( OAK, "OAK" )
+       DEVICE( OAK,            OAK_OTI107,     "OTI107")
+ENDVENDOR()
+
+VENDOR( WINBOND2, "Winbond" )
+       DEVICE( WINBOND2,       WINBOND2_89C940,"NE2000-PCI")
+ENDVENDOR()
+
+VENDOR( MOTOROLA, "Motorola" )
+       DEVICE( MOTOROLA,       MOTOROLA_MPC105,"MPC105 Eagle")
+       DEVICE( MOTOROLA,       MOTOROLA_MPC106,"MPC106 Grackle")
+       DEVICE( MOTOROLA,       MOTOROLA_RAVEN, "Raven")
+       DEVICE( MOTOROLA,       MOTOROLA_FALCON,"Falcon")
+       DEVICE( MOTOROLA,       MOTOROLA_CPX8216,"CPX8216")
+ENDVENDOR()
+
+VENDOR( PROMISE, "Promise Technology" )
+       DEVICE( PROMISE,        PROMISE_20246,  "IDE UltraDMA/33")
+       DEVICE( PROMISE,        PROMISE_20262,  "IDE UltraDMA/66")
+       DEVICE( PROMISE,        PROMISE_5300,   "DC5030")
+ENDVENDOR()
+
+VENDOR( N9, "Number Nine" )
+       DEVICE( N9,             N9_I128,        "Imagine 128")
+       DEVICE( N9,             N9_I128_2,      "Imagine 128v2")
+       DEVICE( N9,             N9_I128_T2R,    "Revolution 3D")
+ENDVENDOR()
+
+VENDOR( UMC, "UMC" )
+       DEVICE( UMC,            UMC_UM8673F,    "UM8673F")
+       DEVICE( UMC,            UMC_UM8891A,    "UM8891A")
+       DEVICE( UMC,            UMC_UM8886BF,   "UM8886BF")
+       DEVICE( UMC,            UMC_UM8886A,    "UM8886A")
+       DEVICE( UMC,            UMC_UM8881F,    "UM8881F")
+       DEVICE( UMC,            UMC_UM8886F,    "UM8886F")
+       DEVICE( UMC,            UMC_UM9017F,    "UM9017F")
+       DEVICE( UMC,            UMC_UM8886N,    "UM8886N")
+       DEVICE( UMC,            UMC_UM8891N,    "UM8891N")
+ENDVENDOR()
+
+VENDOR( X, "X Technology" )
+       DEVICE( X,              X_AGX016,       "ITT AGX016")
+ENDVENDOR()
+
+VENDOR( PICOP, "PicoPower" )
+       DEVICE( PICOP,          PICOP_PT86C52X, "PT86C52x Vesuvius")
+       DEVICE( PICOP,          PICOP_PT80C524, "PT80C524 Nile")
+ENDVENDOR()
+
+VENDOR( APPLE, "Apple" )
+       DEVICE( APPLE,          APPLE_BANDIT,   "Bandit")
+       DEVICE( APPLE,          APPLE_GC,       "Grand Central")
+       DEVICE( APPLE,          APPLE_HYDRA,    "Hydra")
+ENDVENDOR()
+
+VENDOR( NEXGEN, "Nexgen" )
+       DEVICE( NEXGEN,         NEXGEN_82C501,  "82C501")
+ENDVENDOR()
+
+VENDOR( QLOGIC, "Q Logic" )
+       DEVICE( QLOGIC,         QLOGIC_ISP1020, "ISP1020")
+       DEVICE( QLOGIC,         QLOGIC_ISP1022, "ISP1022")
+ENDVENDOR()
+
+VENDOR( CYRIX, "Cyrix" )
+       DEVICE( CYRIX,          CYRIX_5510,     "5510")
+       DEVICE( CYRIX,          CYRIX_PCI_MASTER,"PCI Master")
+       DEVICE( CYRIX,          CYRIX_5520,     "5520")
+       DEVICE( CYRIX,          CYRIX_5530_LEGACY,"5530 Kahlua Legacy")
+       DEVICE( CYRIX,          CYRIX_5530_SMI, "5530 Kahlua SMI")
+       DEVICE( CYRIX,          CYRIX_5530_IDE, "5530 Kahlua IDE")
+       DEVICE( CYRIX,          CYRIX_5530_AUDIO,"5530 Kahlua Audio")
+       DEVICE( CYRIX,          CYRIX_5530_VIDEO,"5530 Kahlua Video")
+ENDVENDOR()
+
+VENDOR( LEADTEK, "Leadtek Research" )
+       DEVICE( LEADTEK,        LEADTEK_805,    "S3 805")
+ENDVENDOR()
+
+VENDOR( CONTAQ, "Contaq" )
+       DEVICE( CONTAQ,         CONTAQ_82C599,  "82C599")
+       DEVICE( CONTAQ,         CONTAQ_82C693,  "82C693")
+ENDVENDOR()
+
+VENDOR( FOREX, "Forex" )
+ENDVENDOR()
+
+VENDOR( OLICOM, "Olicom" )
+       DEVICE( OLICOM,         OLICOM_OC3136,  "OC-3136/3137")
+       DEVICE( OLICOM,         OLICOM_OC2315,  "OC-2315")
+       DEVICE( OLICOM,         OLICOM_OC2325,  "OC-2325")
+       DEVICE( OLICOM,         OLICOM_OC2183,  "OC-2183/2185")
+       DEVICE( OLICOM,         OLICOM_OC2326,  "OC-2326")
+       DEVICE( OLICOM,         OLICOM_OC6151,  "OC-6151/6152")
+ENDVENDOR()
+
+VENDOR( SUN, "Sun Microsystems" )
+       DEVICE( SUN,            SUN_EBUS,       "PCI-EBus Bridge")
+       DEVICE( SUN,            SUN_HAPPYMEAL,  "Happy Meal Ethernet")
+       DEVICE( SUN,            SUN_SIMBA,      "Advanced PCI Bridge")
+       DEVICE( SUN,            SUN_PBM,        "PCI Bus Module")
+       DEVICE( SUN,            SUN_SABRE,      "Ultra IIi PCI")
+ENDVENDOR()
+
+VENDOR( CMD, "CMD" )
+       DEVICE( CMD,            CMD_640,        "640 (buggy)")
+       DEVICE( CMD,            CMD_643,        "643")
+       DEVICE( CMD,            CMD_646,        "646")
+       DEVICE( CMD,            CMD_670,        "670")
+ENDVENDOR()
+
+VENDOR( VISION, "Vision" )
+       DEVICE( VISION,         VISION_QD8500,  "QD-8500")
+       DEVICE( VISION,         VISION_QD8580,  "QD-8580")
+ENDVENDOR()
+
+VENDOR( BROOKTREE, "Brooktree" )
+       DEVICE( BROOKTREE,      BROOKTREE_848,  "Bt848")
+       DEVICE( BROOKTREE,      BROOKTREE_849A, "Bt849")
+       DEVICE( BROOKTREE,      BROOKTREE_878_1,"Bt878 2nd Contr. (?)")
+       DEVICE( BROOKTREE,      BROOKTREE_878,  "Bt878")
+       DEVICE( BROOKTREE,      BROOKTREE_8474, "Bt8474")
+ENDVENDOR()
+
+VENDOR( SIERRA, "Sierra" )
+       DEVICE( SIERRA,         SIERRA_STB,     "STB Horizon 64")
+ENDVENDOR()
+
+VENDOR( SGI, "Silicon Graphics Inc" )
+       DEVICE( SGI,            SGI_IOC3,       "IOC3")
+ENDVENDOR()
+
+VENDOR( ACC, "ACC MICROELECTRONICS" )
+       DEVICE( ACC,            ACC_2056,       "2056")
+ENDVENDOR()
+
+VENDOR( WINBOND, "Winbond" )
+       DEVICE( WINBOND,        WINBOND_83769,  "W83769F")
+       DEVICE( WINBOND,        WINBOND_82C105, "SL82C105")
+       DEVICE( WINBOND,        WINBOND_83C553, "W83C553")
+ENDVENDOR()
+
+VENDOR( DATABOOK, "Databook" )
+       DEVICE( DATABOOK,       DATABOOK_87144, "DB87144")
+ENDVENDOR()
+
+VENDOR( PLX, "PLX" )
+       DEVICE( PLX,            PLX_9050,       "PCI9050 I2O")
+       DEVICE( PLX,            PLX_9080,       "PCI9080 I2O")
+ENDVENDOR()
+
+VENDOR( MADGE, "Madge Networks" )
+       DEVICE( MADGE,          MADGE_MK2,      "Smart 16/4 BM Mk2 Ringnode")
+       DEVICE( MADGE,          MADGE_C155S,    "Collage 155 Server")
+ENDVENDOR()
+
+VENDOR( 3COM, "3Com" )
+       DEVICE( 3COM,           3COM_3C339,     "3C339 TokenRing")
+       DEVICE( 3COM,           3COM_3C590,     "3C590 10bT")
+       DEVICE( 3COM,           3COM_3C595TX,   "3C595 100bTX")
+       DEVICE( 3COM,           3COM_3C595T4,   "3C595 100bT4")
+       DEVICE( 3COM,           3COM_3C595MII,  "3C595 100b-MII")
+       DEVICE( 3COM,           3COM_3C900TPO,  "3C900 10bTPO")
+       DEVICE( 3COM,           3COM_3C900COMBO,"3C900 10b Combo")
+       DEVICE( 3COM,           3COM_3C905TX,   "3C905 100bTX")
+       DEVICE( 3COM,           3COM_3C905T4,   "3C905 100bT4")
+       DEVICE( 3COM,           3COM_3C905B_TX, "3C905B 100bTX")
+ENDVENDOR()
+
+VENDOR( SMC, "SMC" )
+       DEVICE( SMC,            SMC_EPIC100,    "9432 TX")
+ENDVENDOR()
+
+VENDOR( AL, "Acer Labs" )
+       DEVICE( AL,             AL_M1445,       "M1445")
+       DEVICE( AL,             AL_M1449,       "M1449")
+       DEVICE( AL,             AL_M1451,       "M1451")
+       DEVICE( AL,             AL_M1461,       "M1461")
+       DEVICE( AL,             AL_M1489,       "M1489")
+       DEVICE( AL,             AL_M1511,       "M1511")
+       DEVICE( AL,             AL_M1513,       "M1513")
+       DEVICE( AL,             AL_M1521,       "M1521")
+       DEVICE( AL,             AL_M1523,       "M1523")
+       DEVICE( AL,             AL_M1531,       "M1531 Aladdin IV")
+       DEVICE( AL,             AL_M1533,       "M1533 Aladdin IV")
+       DEVICE( AL,             AL_M1541,       "M1541 Aladdin V")
+       DEVICE( AL,             AL_M1543,       "M1543 Aladdin V")
+       DEVICE( AL,             AL_M3307,       "M3307 MPEG-1 decoder")
+       DEVICE( AL,             AL_M4803,       "M4803")
+       DEVICE( AL,             AL_M5219,       "M5219")
+       DEVICE( AL,             AL_M5229,       "M5229 TXpro")
+       DEVICE( AL,             AL_M5237,       "M5237 USB")
+       DEVICE( AL,             AL_M5243,       "M5243 AGP")
+       DEVICE( AL,             AL_M7101,       "M7101 PMU")
+ENDVENDOR()
+
+VENDOR( MITSUBISHI, "Mitsubishi" )
+ENDVENDOR()
+
+VENDOR( SURECOM, "Surecom" )
+       DEVICE( SURECOM,        SURECOM_NE34,   "NE-34PCI LAN")
+ENDVENDOR()
+
+VENDOR( NEOMAGIC, "Neomagic" )
+       DEVICE( NEOMAGIC,       NEOMAGIC_MAGICGRAPH_NM2070,     "Magicgraph NM2070")
+       DEVICE( NEOMAGIC,       NEOMAGIC_MAGICGRAPH_128V, "MagicGraph 128V")
+       DEVICE( NEOMAGIC,       NEOMAGIC_MAGICGRAPH_128ZV, "MagicGraph 128ZV")
+       DEVICE( NEOMAGIC,       NEOMAGIC_MAGICGRAPH_NM2160, "MagicGraph NM2160")
+       DEVICE( NEOMAGIC,       NEOMAGIC_MAGICGRAPH_128ZVPLUS, "MagicGraph 128ZV+")
+ENDVENDOR()
+
+VENDOR( ASP, "Advanced System Products" )
+       DEVICE( ASP,            ASP_ABP940,     "ABP940")
+       DEVICE( ASP,            ASP_ABP940U,    "ABP940U")
+       DEVICE( ASP,            ASP_ABP940UW,   "ABP940UW")
+ENDVENDOR()
+
+VENDOR( MACRONIX, "Macronix" )
+       DEVICE( MACRONIX,       MACRONIX_MX98713,"MX98713")
+       DEVICE( MACRONIX,       MACRONIX_MX987x5,"MX98715 / MX98725")
+ENDVENDOR()
+
+VENDOR( CERN, "CERN" )
+       DEVICE( CERN,           CERN_SPSB_PMC,  "STAR/RD24 SCI-PCI (PMC)")
+       DEVICE( CERN,           CERN_SPSB_PCI,  "STAR/RD24 SCI-PCI (PMC)")
+       DEVICE( CERN,           CERN_HIPPI_DST, "HIPPI destination")
+       DEVICE( CERN,           CERN_HIPPI_SRC, "HIPPI source")
+ENDVENDOR()
+
+VENDOR( NVIDIA, "NVidia" )
+ENDVENDOR()
+
+VENDOR( IMS, "IMS" )
+       DEVICE( IMS,            IMS_8849,       "8849")
+ENDVENDOR()
+
+VENDOR( TEKRAM2, "Tekram" )
+       DEVICE( TEKRAM2,        TEKRAM2_690c,   "DC690c")
+ENDVENDOR()
+
+VENDOR( TUNDRA, "Tundra" )
+       DEVICE( TUNDRA,         TUNDRA_CA91C042,"CA91C042 Universe")
+ENDVENDOR()
+
+VENDOR( AMCC, "AMCC" )
+       DEVICE( AMCC,           AMCC_MYRINET,   "Myrinet PCI (M2-PCI-32)")
+       DEVICE( AMCC,           AMCC_PARASTATION,"ParaStation Interface")
+       DEVICE( AMCC,           AMCC_S5933,     "S5933 PCI44")
+       DEVICE( AMCC,           AMCC_S5933_HEPC3,"S5933 Traquair HEPC3")
+ENDVENDOR()
+
+VENDOR( INTERG, "Intergraphics" )
+       DEVICE( INTERG,         INTERG_1680,    "IGA-1680")
+       DEVICE( INTERG,         INTERG_1682,    "IGA-1682")
+ENDVENDOR()
+
+VENDOR( REALTEK, "Realtek" )
+       DEVICE( REALTEK,        REALTEK_8029,   "8029")
+       DEVICE( REALTEK,        REALTEK_8129,   "8129")
+       DEVICE( REALTEK,        REALTEK_8139,   "8139")
+ENDVENDOR()
+
+VENDOR( TRUEVISION, "Truevision" )
+       DEVICE( TRUEVISION,     TRUEVISION_T1000,"TARGA 1000")
+ENDVENDOR()
+
+VENDOR( INIT, "Initio Corp" )
+       DEVICE( INIT,           INIT_320P,      "320 P")
+       DEVICE( INIT,           INIT_360P,      "360 P")
+ENDVENDOR()
+
+VENDOR( TTI, "Triones Technologies, Inc." )
+       DEVICE( TTI,            TTI_HPT343,     "HPT343")
+ENDVENDOR()
+
+VENDOR( VIA, "VIA Technologies" )
+       DEVICE( VIA,            VIA_82C505,     "VT 82C505")
+       DEVICE( VIA,            VIA_82C561,     "VT 82C561")
+       DEVICE( VIA,            VIA_82C586_1,   "VT 82C586 Apollo IDE")
+       DEVICE( VIA,            VIA_82C576,     "VT 82C576 3V")
+       DEVICE( VIA,            VIA_82C585,     "VT 82C585 Apollo VP1/VPX")
+       DEVICE( VIA,            VIA_82C586_0,   "VT 82C586 Apollo ISA")
+       DEVICE( VIA,            VIA_82C595,     "VT 82C595 Apollo VP2")
+       DEVICE( VIA,            VIA_82C597_0,   "VT 82C597 Apollo VP3")
+       DEVICE( VIA,            VIA_82C598_0,   "VT 82C598 Apollo MVP3")
+       DEVICE( VIA,            VIA_82C926,     "VT 82C926 Amazon")
+       DEVICE( VIA,            VIA_82C416,     "VT 82C416MV")
+       DEVICE( VIA,            VIA_82C595_97,  "VT 82C595 Apollo VP2/97")
+       DEVICE( VIA,            VIA_82C586_2,   "VT 82C586 Apollo USB")
+       DEVICE( VIA,            VIA_82C586_3,   "VT 82C586B Apollo ACPI")
+       DEVICE( VIA,            VIA_86C100A,    "VT 86C100A")
+       DEVICE( VIA,            VIA_82C597_1,   "VT 82C597 Apollo VP3 AGP")
+       DEVICE( VIA,            VIA_82C598_1,   "VT 82C598 Apollo MVP3 AGP")
+ENDVENDOR()
+
+VENDOR( SMC2, "SMC" )
+       DEVICE( SMC2,           SMC2_1211TX,    "1211 TX")
+ENDVENDOR()
+
+VENDOR( VORTEX, "VORTEX" )
+       DEVICE( VORTEX,         VORTEX_GDT60x0, "GDT 60x0")
+       DEVICE( VORTEX,         VORTEX_GDT6000B,"GDT 6000b")
+       DEVICE( VORTEX,         VORTEX_GDT6x10, "GDT 6110/6510")
+       DEVICE( VORTEX,         VORTEX_GDT6x20, "GDT 6120/6520")
+       DEVICE( VORTEX,         VORTEX_GDT6530, "GDT 6530")
+       DEVICE( VORTEX,         VORTEX_GDT6550, "GDT 6550")
+       DEVICE( VORTEX,         VORTEX_GDT6x17, "GDT 6117/6517")
+       DEVICE( VORTEX,         VORTEX_GDT6x27, "GDT 6127/6527")
+       DEVICE( VORTEX,         VORTEX_GDT6537, "GDT 6537")
+       DEVICE( VORTEX,         VORTEX_GDT6557, "GDT 6557")
+       DEVICE( VORTEX,         VORTEX_GDT6x15, "GDT 6115/6515")
+       DEVICE( VORTEX,         VORTEX_GDT6x25, "GDT 6125/6525")
+       DEVICE( VORTEX,         VORTEX_GDT6535, "GDT 6535")
+       DEVICE( VORTEX,         VORTEX_GDT6555, "GDT 6555")
+       DEVICE( VORTEX,         VORTEX_GDT6x17RP,"GDT 6117RP/6517RP")
+       DEVICE( VORTEX,         VORTEX_GDT6x27RP,"GDT 6127RP/6527RP")
+       DEVICE( VORTEX,         VORTEX_GDT6537RP,"GDT 6537RP")
+       DEVICE( VORTEX,         VORTEX_GDT6557RP,"GDT 6557RP")
+       DEVICE( VORTEX,         VORTEX_GDT6x11RP,"GDT 6111RP/6511RP")
+       DEVICE( VORTEX,         VORTEX_GDT6x21RP,"GDT 6121RP/6521RP")
+       DEVICE( VORTEX,         VORTEX_GDT6x17RP1,"GDT 6117RP1/6517RP1")
+       DEVICE( VORTEX,         VORTEX_GDT6x27RP1,"GDT 6127RP1/6527RP1")
+       DEVICE( VORTEX,         VORTEX_GDT6537RP1,"GDT 6537RP1")
+       DEVICE( VORTEX,         VORTEX_GDT6557RP1,"GDT 6557RP1")
+       DEVICE( VORTEX,         VORTEX_GDT6x11RP1,"GDT 6111RP1/6511RP1")
+       DEVICE( VORTEX,         VORTEX_GDT6x21RP1,"GDT 6121RP1/6521RP1")
+       DEVICE( VORTEX,         VORTEX_GDT6x17RP2,"GDT 6117RP2/6517RP2")
+       DEVICE( VORTEX,         VORTEX_GDT6x27RP2,"GDT 6127RP2/6527RP2")
+       DEVICE( VORTEX,         VORTEX_GDT6537RP2,"GDT 6537RP2")
+       DEVICE( VORTEX,         VORTEX_GDT6557RP2,"GDT 6557RP2")
+       DEVICE( VORTEX,         VORTEX_GDT6x11RP2,"GDT 6111RP2/6511RP2")
+       DEVICE( VORTEX,         VORTEX_GDT6x21RP2,"GDT 6121RP2/6521RP2")
+ENDVENDOR()
+
+VENDOR( EF, "Efficient Networks" )
+       DEVICE( EF,             EF_ATM_FPGA,    "155P-MF1 (FPGA)")
+       DEVICE( EF,             EF_ATM_ASIC,    "155P-MF1 (ASIC)")
+ENDVENDOR()
+
+VENDOR( FORE, "Fore Systems" )
+       DEVICE( FORE,           FORE_PCA200PC,  "PCA-200PC")
+       DEVICE( FORE,           FORE_PCA200E,    "PCA-200E")
+ENDVENDOR()
+
+VENDOR( IMAGINGTECH, "Imaging Technology" )
+       DEVICE( IMAGINGTECH,    IMAGINGTECH_ICPCI, "MVC IC-PCI")
+ENDVENDOR()
+
+VENDOR( PHILIPS, "Philips" )
+       DEVICE( PHILIPS,        PHILIPS_SAA7145,"SAA7145")
+       DEVICE( PHILIPS,        PHILIPS_SAA7146,"SAA7146")
+ENDVENDOR()
+
+VENDOR( CYCLONE, "Cyclone" )
+       DEVICE( CYCLONE,        CYCLONE_SDK,    "SDK")
+ENDVENDOR()
+
+VENDOR( ALLIANCE, "Alliance" )
+       DEVICE( ALLIANCE,       ALLIANCE_PROMOTIO, "Promotion-6410")
+       DEVICE( ALLIANCE,       ALLIANCE_PROVIDEO, "Provideo")
+       DEVICE( ALLIANCE,       ALLIANCE_AT24,  "AT24")
+       DEVICE( ALLIANCE,       ALLIANCE_AT3D,  "AT3D")
+ENDVENDOR()
+
+VENDOR( VMIC, "VMIC" )
+       DEVICE( VMIC,           VMIC_VME,       "VMIVME-7587")
+ENDVENDOR()
+
+VENDOR( DIGI, "Digi Intl." )
+       DEVICE( DIGI,           DIGI_EPC,       "AccelPort EPC")
+       DEVICE( DIGI,           DIGI_RIGHTSWITCH, "RightSwitch SE-6")
+       DEVICE( DIGI,           DIGI_XEM,       "AccelPort Xem")
+       DEVICE( DIGI,           DIGI_XR,        "AccelPort Xr")
+       DEVICE( DIGI,           DIGI_CX,        "AccelPort C/X")
+       DEVICE( DIGI,           DIGI_XRJ,       "AccelPort Xr/J")
+       DEVICE( DIGI,           DIGI_EPCJ,      "AccelPort EPC/J")
+       DEVICE( DIGI,           DIGI_XR_920,    "AccelPort Xr 920")
+ENDVENDOR()
+
+VENDOR( MUTECH, "Mutech" )
+       DEVICE( MUTECH,         MUTECH_MV1000,  "MV-1000")
+ENDVENDOR()
+
+VENDOR( RENDITION, "Rendition" )
+       DEVICE( RENDITION,      RENDITION_VERITE,"Verite 1000")
+       DEVICE( RENDITION,      RENDITION_VERITE2100,"Verite 2100")
+ENDVENDOR()
+
+VENDOR( TOSHIBA, "Toshiba" )
+       DEVICE( TOSHIBA,        TOSHIBA_601,    "Laptop")
+       DEVICE( TOSHIBA,        TOSHIBA_TOPIC95,"ToPIC95")
+       DEVICE( TOSHIBA,        TOSHIBA_TOPIC97,"ToPIC97")
+ENDVENDOR()
+
+VENDOR( RICOH, "Ricoh" )
+       DEVICE( RICOH,          RICOH_RL5C466,  "RL5C466")
+ENDVENDOR()
+
+VENDOR( ARTOP, "Artop Electronics" )
+       DEVICE( ARTOP,          ARTOP_ATP8400,  "ATP8400")
+       DEVICE( ARTOP,          ARTOP_ATP850UF, "ATP850UF")
+ENDVENDOR()
+
+VENDOR( ZEITNET, "ZeitNet" )
+       DEVICE( ZEITNET,        ZEITNET_1221,   "1221")
+       DEVICE( ZEITNET,        ZEITNET_1225,   "1225")
+ENDVENDOR()
+
+VENDOR( OMEGA, "Omega Micro" )
+       DEVICE( OMEGA,          OMEGA_82C092G,  "82C092G")
+ENDVENDOR()
+
+VENDOR( LITEON, "LiteOn" )
+       DEVICE( LITEON,         LITEON_LNE100TX,"LNE100TX")
+ENDVENDOR()
+
+VENDOR( NP, "Network Peripherals" )
+       DEVICE( NP,             NP_PCI_FDDI,    "NP-PCI")
+ENDVENDOR()
+
+VENDOR( ATT, "Lucent Microelectronics" )
+       DEVICE( ATT,            ATT_L56XMF,     "L56xMF")
+ENDVENDOR()
+
+VENDOR( SPECIALIX, "Specialix" )
+       DEVICE( SPECIALIX,      SPECIALIX_IO8,  "IO8+/PCI")
+       DEVICE( SPECIALIX,      SPECIALIX_XIO,  "XIO/SIO host")
+       DEVICE( SPECIALIX,      SPECIALIX_RIO,  "RIO host")
+ENDVENDOR()
+
+VENDOR( AURAVISION, "Auravision" )
+       DEVICE( AURAVISION,     AURAVISION_VXP524,"VXP524")
+ENDVENDOR()
+
+VENDOR( IKON, "Ikon" )
+       DEVICE( IKON,           IKON_10115,     "10115 Greensheet")
+       DEVICE( IKON,           IKON_10117,     "10117 Greensheet")
+ENDVENDOR()
+
+VENDOR( ZORAN, "Zoran" )
+       DEVICE( ZORAN,          ZORAN_36057,    "ZR36057")
+       DEVICE( ZORAN,          ZORAN_36120,    "ZR36120")
+ENDVENDOR()
+
+VENDOR( KINETIC, "Kinetic" )
+       DEVICE( KINETIC,        KINETIC_2915,   "2915 CAMAC")
+ENDVENDOR()
+
+VENDOR( COMPEX, "Compex" )
+       DEVICE( COMPEX,         COMPEX_ENET100VG4, "Readylink ENET100-VG4")
+       DEVICE( COMPEX,         COMPEX_RL2000,  "ReadyLink 2000")
+ENDVENDOR()
+
+VENDOR( RP, "Comtrol" )
+       DEVICE( RP,             RP32INTF,       "RocketPort 32 Intf")
+       DEVICE( RP,             RP8INTF,        "RocketPort 8 Intf")
+       DEVICE( RP,             RP16INTF,       "RocketPort 16 Intf")
+       DEVICE( RP,             RP4QUAD,        "Rocketport 4 Quad")
+       DEVICE( RP,             RP8OCTA,        "RocketPort 8 Oct")
+       DEVICE( RP,             RP8J,           "RocketPort 8 J")
+       DEVICE( RP,             RPP4,           "RocketPort Plus 4 Quad")
+       DEVICE( RP,             RPP8,           "RocketPort Plus 8 Oct")
+       DEVICE( RP,             RP8M,           "RocketModem 8 J")
+ENDVENDOR()
+
+VENDOR( CYCLADES, "Cyclades" )
+       DEVICE( CYCLADES,       CYCLOM_Y_Lo,    "Cyclom-Y below 1Mbyte")
+       DEVICE( CYCLADES,       CYCLOM_Y_Hi,    "Cyclom-Y above 1Mbyte")
+       DEVICE( CYCLADES,       CYCLOM_4Y_Lo,   "Cyclom-4Y below 1Mbyte")
+       DEVICE( CYCLADES,       CYCLOM_4Y_Hi,   "Cyclom-4Y above 1Mbyte")
+       DEVICE( CYCLADES,       CYCLOM_8Y_Lo,   "Cyclom-8Y below 1Mbyte")
+       DEVICE( CYCLADES,       CYCLOM_8Y_Hi,   "Cyclom-8Y above 1Mbyte")
+       DEVICE( CYCLADES,       CYCLOM_Z_Lo,    "Cyclades-Z below 1Mbyte")
+       DEVICE( CYCLADES,       CYCLOM_Z_Hi,    "Cyclades-Z above 1Mbyte")
+ENDVENDOR()
+
+VENDOR( ESSENTIAL, "Essential Communications" )
+       DEVICE( ESSENTIAL,      ESSENTIAL_ROADRUNNER,"Roadrunner serial HIPPI")
+ENDVENDOR()
+
+VENDOR( O2, "O2 Micro" )
+       DEVICE( O2,             O2_6832,        "6832")
+ENDVENDOR()
+
+VENDOR( 3DFX, "3Dfx" )
+       DEVICE( 3DFX,           3DFX_VOODOO,    "Voodoo")
+       DEVICE( 3DFX,           3DFX_VOODOO2,   "Voodoo2")
+       DEVICE( 3DFX,           3DFX_BANSHEE,   "Banshee")
+       DEVICE( 3DFX,           3DFX_VOODOO3,   "Voodoo3")
+ENDVENDOR()
+
+VENDOR( SIGMADES, "Sigma Designs" )
+       DEVICE( SIGMADES,       SIGMADES_6425,  "REALmagic64/GX")
+ENDVENDOR()
+
+VENDOR( AVM, "AVM" )
+       DEVICE( AVM,            AVM_A1,         "A1 (Fritz)")
+ENDVENDOR()
+
+VENDOR( CCUBE, "C-Cube" )
+ENDVENDOR()
+
+VENDOR( DIPIX, "Dipix" )
+ENDVENDOR()
+
+VENDOR( STALLION, "Stallion" )
+       DEVICE( STALLION,       STALLION_ECHPCI832,"EasyConnection 8/32")
+       DEVICE( STALLION,       STALLION_ECHPCI864,"EasyConnection 8/64")
+       DEVICE( STALLION,       STALLION_EIOPCI,"EasyIO")
+ENDVENDOR()
+
+VENDOR( OPTIBASE, "Optibase" )
+       DEVICE( OPTIBASE,       OPTIBASE_FORGE, "MPEG Forge")
+       DEVICE( OPTIBASE,       OPTIBASE_FUSION,"MPEG Fusion")
+       DEVICE( OPTIBASE,       OPTIBASE_VPLEX, "VideoPlex")
+       DEVICE( OPTIBASE,       OPTIBASE_VPLEXCC,"VideoPlex CC")
+       DEVICE( OPTIBASE,       OPTIBASE_VQUEST,"VideoQuest")
+ENDVENDOR()
+
+VENDOR( SATSAGEM, "SatSagem" )
+       DEVICE( SATSAGEM,       SATSAGEM_PCR2101,"PCR2101 DVB receiver")
+       DEVICE( SATSAGEM,       SATSAGEM_TELSATTURBO,"Telsat Turbo DVB")
+ENDVENDOR()
+
+VENDOR( HUGHES, "Hughes" )
+       DEVICE( HUGHES,         HUGHES_DIRECPC, "DirecPC")
+ENDVENDOR()
+
+VENDOR( ENSONIQ, "Ensoniq" )
+       DEVICE( ENSONIQ,        ENSONIQ_ES1371, "ES1371")
+       DEVICE( ENSONIQ,        ENSONIQ_AUDIOPCI,"AudioPCI")
+ENDVENDOR()
+
+VENDOR( ALTEON, "Alteon" )
+       DEVICE( ALTEON,         ALTEON_ACENIC,  "AceNIC")
+ENDVENDOR()
+
+VENDOR( PICTUREL, "Picture Elements" )
+       DEVICE( PICTUREL,       PICTUREL_PCIVST,"PCIVST")
+ENDVENDOR()
+
+VENDOR( NVIDIA_SGS, "NVidia/SGS Thomson" )
+       DEVICE( NVIDIA_SGS,     NVIDIA_SGS_RIVA128,     "Riva 128")
+ENDVENDOR()
+
+VENDOR( CBOARDS, "ComputerBoards" )
+       DEVICE( CBOARDS,        CBOARDS_DAS1602_16,"DAS1602/16")
+ENDVENDOR()
+
+VENDOR( MOTOROLA_OOPS, "Motorola" )
+       DEVICE( MOTOROLA_OOPS,  MOTOROLA_FALCON,"Falcon")
+ENDVENDOR()
+
+VENDOR( SYMPHONY, "Symphony" )
+       DEVICE( SYMPHONY,       SYMPHONY_101,   "82C101")
+ENDVENDOR()
+
+VENDOR( TEKRAM, "Tekram" )
+       DEVICE( TEKRAM,         TEKRAM_DC290,   "DC-290")
+ENDVENDOR()
+
+VENDOR( 3DLABS, "3Dlabs" )
+       DEVICE( 3DLABS,         3DLABS_300SX,   "GLINT 300SX")
+       DEVICE( 3DLABS,         3DLABS_500TX,   "GLINT 500TX")
+       DEVICE( 3DLABS,         3DLABS_DELTA,   "GLINT Delta")
+       DEVICE( 3DLABS,         3DLABS_PERMEDIA,"PERMEDIA")
+       DEVICE( 3DLABS,         3DLABS_MX,      "GLINT MX")
+ENDVENDOR()
+
+VENDOR( AVANCE, "Avance" )
+       DEVICE( AVANCE,         AVANCE_ALG2064, "ALG2064i")
+       DEVICE( AVANCE,         AVANCE_2302,    "ALG-2302")
+ENDVENDOR()
+
+VENDOR( NETVIN, "NetVin" )
+       DEVICE( NETVIN,         NETVIN_NV5000SC,"NV5000")
+ENDVENDOR()
+
+VENDOR( S3, "S3 Inc." )
+       DEVICE( S3,             S3_PLATO_PXS,   "PLATO/PX (system)")
+       DEVICE( S3,             S3_ViRGE,       "ViRGE")
+       DEVICE( S3,             S3_TRIO,        "Trio32/Trio64")
+       DEVICE( S3,             S3_AURORA64VP,  "Aurora64V+")
+       DEVICE( S3,             S3_TRIO64UVP,   "Trio64UV+")
+       DEVICE( S3,             S3_ViRGE_VX,    "ViRGE/VX")
+       DEVICE( S3,             S3_868,         "Vision 868")
+       DEVICE( S3,             S3_928,         "Vision 928-P")
+       DEVICE( S3,             S3_864_1,       "Vision 864-P")
+       DEVICE( S3,             S3_864_2,       "Vision 864-P")
+       DEVICE( S3,             S3_964_1,       "Vision 964-P")
+       DEVICE( S3,             S3_964_2,       "Vision 964-P")
+       DEVICE( S3,             S3_968,         "Vision 968")
+       DEVICE( S3,             S3_TRIO64V2,    "Trio64V2/DX or /GX")
+       DEVICE( S3,             S3_PLATO_PXG,   "PLATO/PX (graphics)")
+       DEVICE( S3,             S3_ViRGE_DXGX,  "ViRGE/DX or /GX")
+       DEVICE( S3,             S3_ViRGE_GX2,   "ViRGE/GX2")
+       DEVICE( S3,             S3_ViRGE_MX,    "ViRGE/MX")
+       DEVICE( S3,             S3_ViRGE_MXP,   "ViRGE/MX+")
+       DEVICE( S3,             S3_ViRGE_MXPMV, "ViRGE/MX+MV")
+       DEVICE( S3,             S3_SONICVIBES,  "SonicVibes")
+ENDVENDOR()
+
+VENDOR( DCI, "Decision Computer Int." )
+       DEVICE( DCI,            DCI_PCCOM4,     "PC COM PCI Bus 4 port serial Adapter")
+ENDVENDOR()
+
+VENDOR( GENROCO, "Genroco" )
+       DEVICE( GENROCO,        GENROCO_HFP832, "TURBOstor HFP832")
+ENDVENDOR()
+
+VENDOR( INTEL, "Intel" )
+       DEVICE( INTEL,          INTEL_82375,    "82375EB")
+       DEVICE( INTEL,          INTEL_82424,    "82424ZX Saturn")
+       DEVICE( INTEL,          INTEL_82378,    "82378IB")
+       DEVICE( INTEL,          INTEL_82430,    "82430ZX Aries")
+       DEVICE( INTEL,          INTEL_82434,    "82434LX Mercury/Neptune")
+       DEVICE( INTEL,          INTEL_82092AA_0,"82092AA PCMCIA bridge")
+       DEVICE( INTEL,          INTEL_82092AA_1,"82092AA EIDE")
+       DEVICE( INTEL,          INTEL_7116,     "SAA7116")
+       DEVICE( INTEL,          INTEL_82596,    "82596")
+       DEVICE( INTEL,          INTEL_82865,    "82865")
+       DEVICE( INTEL,          INTEL_82557,    "EtherExpress Pro100")
+       DEVICE( INTEL,          INTEL_82437,    "82437")
+       DEVICE( INTEL,          INTEL_82371FB_0,"82371FB PIIX ISA")
+       DEVICE( INTEL,          INTEL_82371FB_1,"82371FB PIIX IDE")
+       DEVICE( INTEL,          INTEL_82371MX,  "430MX - 82371MX MPIIX")
+       DEVICE( INTEL,          INTEL_82437MX,  "430MX - 82437MX MTSC")
+       DEVICE( INTEL,          INTEL_82441,    "82441FX Natoma")
+       DEVICE( INTEL,          INTEL_82380FB,  "82380FB Mobile")
+       DEVICE( INTEL,          INTEL_82439,    "82439HX Triton II")
+       DEVICE( INTEL,          INTEL_82371SB_0,"82371SB PIIX3 ISA")
+       DEVICE( INTEL,          INTEL_82371SB_1,"82371SB PIIX3 IDE")
+       DEVICE( INTEL,          INTEL_82371SB_2,"82371SB PIIX3 USB")
+       DEVICE( INTEL,          INTEL_82437VX,  "82437VX Triton II")
+       DEVICE( INTEL,          INTEL_82439TX,  "82439TX")
+       DEVICE( INTEL,          INTEL_82371AB_0,"82371AB PIIX4 ISA")
+       DEVICE( INTEL,          INTEL_82371AB,  "82371AB PIIX4 IDE")
+       DEVICE( INTEL,          INTEL_82371AB_2,"82371AB PIIX4 USB")
+       DEVICE( INTEL,          INTEL_82371AB_3,"82371AB PIIX4 ACPI")
+       DEVICE( INTEL,          INTEL_82443LX_0,"440LX - 82443LX PAC Host")
+       DEVICE( INTEL,          INTEL_82443LX_1,"440LX - 82443LX PAC AGP")
+       DEVICE( INTEL,          INTEL_82443BX_0,"440BX - 82443BX Host")
+       DEVICE( INTEL,          INTEL_82443BX_1,"440BX - 82443BX AGP")
+       DEVICE( INTEL,          INTEL_82443BX_2,"440BX - 82443BX Host (no AGP)")
+       DEVICE( INTEL,          INTEL_P6,       "Orion P6")
+       DEVICE( INTEL,          INTEL_82450GX,  "82450GX Orion P6")
+ENDVENDOR()
+
+VENDOR( KTI, "KTI" )
+       DEVICE( KTI,            KTI_ET32P2,     "ET32P2")
+ENDVENDOR()
+
+VENDOR( ADAPTEC, "Adaptec" )
+       DEVICE( ADAPTEC,        ADAPTEC_7810,   "AIC-7810 RAID")
+       DEVICE( ADAPTEC,        ADAPTEC_7821,   "AIC-7860")
+       DEVICE( ADAPTEC,        ADAPTEC_38602,  "AIC-7860")
+       DEVICE( ADAPTEC,        ADAPTEC_7850,   "AIC-7850")
+       DEVICE( ADAPTEC,        ADAPTEC_7855,   "AIC-7855")
+       DEVICE( ADAPTEC,        ADAPTEC_5800,   "AIC-5800")
+       DEVICE( ADAPTEC,        ADAPTEC_3860,   "AIC-7860")
+       DEVICE( ADAPTEC,        ADAPTEC_7860,   "AIC-7860")
+       DEVICE( ADAPTEC,        ADAPTEC_7861,   "AIC-7861")
+       DEVICE( ADAPTEC,        ADAPTEC_7870,   "AIC-7870")
+       DEVICE( ADAPTEC,        ADAPTEC_7871,   "AIC-7871")
+       DEVICE( ADAPTEC,        ADAPTEC_7872,   "AIC-7872")
+       DEVICE( ADAPTEC,        ADAPTEC_7873,   "AIC-7873")
+       DEVICE( ADAPTEC,        ADAPTEC_7874,   "AIC-7874")
+       DEVICE( ADAPTEC,        ADAPTEC_7895,   "AIC-7895U")
+       DEVICE( ADAPTEC,        ADAPTEC_7880,   "AIC-7880U")
+       DEVICE( ADAPTEC,        ADAPTEC_7881,   "AIC-7881U")
+       DEVICE( ADAPTEC,        ADAPTEC_7882,   "AIC-7882U")
+       DEVICE( ADAPTEC,        ADAPTEC_7883,   "AIC-7883U")
+       DEVICE( ADAPTEC,        ADAPTEC_7884,   "AIC-7884U")
+       DEVICE( ADAPTEC,        ADAPTEC_7885,   "AIC-7885U")
+       DEVICE( ADAPTEC,        ADAPTEC_7886,   "AIC-7886U")
+       DEVICE( ADAPTEC,        ADAPTEC_7887,   "AIC-7887U")
+       DEVICE( ADAPTEC,        ADAPTEC_7888,   "AIC-7888U")
+       DEVICE( ADAPTEC,        ADAPTEC_1030,   "ABA-1030 DVB receiver")
+ENDVENDOR()
+
+VENDOR( ADAPTEC2, "Adaptec" )
+       DEVICE( ADAPTEC2,       ADAPTEC2_2940U2,"AHA-2940U2")
+       DEVICE( ADAPTEC2,       ADAPTEC2_2930U2,"AHA-2930U2")
+       DEVICE( ADAPTEC2,       ADAPTEC2_7890B, "AIC-7890/1")
+       DEVICE( ADAPTEC2,       ADAPTEC2_7890,  "AIC-7890/1")
+       DEVICE( ADAPTEC2,       ADAPTEC2_3940U2,"AHA-3940U2")
+       DEVICE( ADAPTEC2,       ADAPTEC2_3950U2D,"AHA-3950U2D")
+       DEVICE( ADAPTEC2,       ADAPTEC2_7896,  "AIC-7896/7")
+       DEVICE( ADAPTEC2,       ADAPTEC2_7892A, "AIC-7892")
+       DEVICE( ADAPTEC2,       ADAPTEC2_7892B, "AIC-7892")
+       DEVICE( ADAPTEC2,       ADAPTEC2_7892D, "AIC-7892")
+       DEVICE( ADAPTEC2,       ADAPTEC2_7892P, "AIC-7892")
+       DEVICE( ADAPTEC2,       ADAPTEC2_7899A, "AIC-7899")
+       DEVICE( ADAPTEC2,       ADAPTEC2_7899B, "AIC-7899")
+       DEVICE( ADAPTEC2,       ADAPTEC2_7899D, "AIC-7899")
+       DEVICE( ADAPTEC2,       ADAPTEC2_7899P, "AIC-7899")
+ENDVENDOR()
+
+VENDOR( ATRONICS, "Atronics" )
+       DEVICE( ATRONICS,       ATRONICS_2015,  "IDE-2015PL")
+ENDVENDOR()
+
+VENDOR( TIGERJET, "TigerJet" )
+       DEVICE( TIGERJET,       TIGERJET_300,   "Tiger300 ISDN")
+ENDVENDOR()
+
+VENDOR( ARK, "ARK" )
+       DEVICE( ARK,            ARK_STING,      "Stingray")
+       DEVICE( ARK,            ARK_STINGARK,   "Stingray ARK 2000PV")
+       DEVICE( ARK,            ARK_2000MT,     "2000MT")
+ENDVENDOR()
+
+#undef VENDOR
+#undef ENDVENDOR
+#undef DEVICE
index 0ad2c018e6533c1fc3ace05f95e808292483d122..1a1a9aac5a812ea969c21fcbc2403c0ef1f5dbc3 100644 (file)
 
 #include <asm/page.h>
 
-struct pci_dev_info {
-       unsigned short  vendor;         /* vendor id */
-       unsigned short  device;         /* device id */
-
-       const char      *name;          /* device name */
+struct pci_device_info {
+       unsigned short device;
+       unsigned short seen;
+       const char *name;
 };
 
-#define DEVICE(vid,did,name) \
-  {PCI_VENDOR_ID_##vid, PCI_DEVICE_ID_##did, (name)}
+struct pci_vendor_info {
+       unsigned short vendor;
+       unsigned short nr;
+       const char *name;
+       struct pci_device_info *devices;
+};
 
 /*
- * Sorted in ascending order by vendor and device.
- * Use binary search for lookup. If you add a device make sure
- * it is sequential by both vendor and device id.
+ * This is ridiculous, but we want the strings in
+ * the .init section so that they don't take up
+ * real memory.. Parse the same file multiple times
+ * to get all the info.
  */
-static __initdata struct pci_dev_info dev_info[] = {
-       DEVICE( COMPAQ,         COMPAQ_1280,    "QVision 1280/p"),
-       DEVICE( COMPAQ,         COMPAQ_SMART2P, "Smart-2/P RAID Controller"),
-       DEVICE( COMPAQ,         COMPAQ_NETEL100,"Netelligent 10/100"),
-       DEVICE( COMPAQ,         COMPAQ_NETEL10, "Netelligent 10"),
-       DEVICE( COMPAQ,         COMPAQ_NETFLEX3I,"NetFlex 3"),
-       DEVICE( COMPAQ,         COMPAQ_NETEL100D,"Netelligent 10/100 Dual"),
-       DEVICE( COMPAQ,         COMPAQ_NETEL100PI,"Netelligent 10/100 ProLiant"),
-       DEVICE( COMPAQ,         COMPAQ_NETEL100I,"Netelligent 10/100 Integrated"),
-       DEVICE( COMPAQ,         COMPAQ_THUNDER, "ThunderLAN"),
-       DEVICE( COMPAQ,         COMPAQ_NETFLEX3B,"NetFlex 3 BNC"),
-       DEVICE( NCR,            NCR_53C810,     "53c810"),
-       DEVICE( NCR,            NCR_53C820,     "53c820"),
-       DEVICE( NCR,            NCR_53C825,     "53c825"),
-       DEVICE( NCR,            NCR_53C815,     "53c815"),
-       DEVICE( NCR,            NCR_53C860,     "53c860"),
-       DEVICE( NCR,            NCR_53C896,     "53c896"),
-       DEVICE( NCR,            NCR_53C895,     "53c895"),
-       DEVICE( NCR,            NCR_53C885,     "53c885"),
-       DEVICE( NCR,            NCR_53C875,     "53c875"),
-       DEVICE( NCR,            NCR_53C875J,    "53c875J"),
-       DEVICE( ATI,            ATI_68800,      "68800AX"),
-       DEVICE( ATI,            ATI_215CT222,   "215CT222"),
-       DEVICE( ATI,            ATI_210888CX,   "210888CX"),
-       DEVICE( ATI,            ATI_215GB,      "Mach64 GB"),
-       DEVICE( ATI,            ATI_215GD,      "Mach64 GD (Rage Pro)"),
-       DEVICE( ATI,            ATI_215GI,      "Mach64 GI (Rage Pro)"),
-       DEVICE( ATI,            ATI_215GP,      "Mach64 GP (Rage Pro)"),
-       DEVICE( ATI,            ATI_215GQ,      "Mach64 GQ (Rage Pro)"),
-       DEVICE( ATI,            ATI_215GT,      "Mach64 GT (Rage II)"),
-       DEVICE( ATI,            ATI_215GTB,     "Mach64 GT (Rage II)"),
-       DEVICE( ATI,            ATI_210888GX,   "210888GX"),
-       DEVICE( ATI,            ATI_215LG,      "Mach64 LG (Rage Pro)"),
-       DEVICE( ATI,            ATI_264LT,      "Mach64 LT"),
-       DEVICE( ATI,            ATI_264VT,      "Mach64 VT"),
-       DEVICE( VLSI,           VLSI_82C592,    "82C592-FC1"),
-       DEVICE( VLSI,           VLSI_82C593,    "82C593-FC1"),
-       DEVICE( VLSI,           VLSI_82C594,    "82C594-AFC2"),
-       DEVICE( VLSI,           VLSI_82C597,    "82C597-AFC2"),
-       DEVICE( VLSI,           VLSI_82C541,    "82C541 Lynx"),
-       DEVICE( VLSI,           VLSI_82C543,    "82C543 Lynx ISA"),
-       DEVICE( VLSI,           VLSI_82C532,    "82C532"),
-       DEVICE( VLSI,           VLSI_82C534,    "82C534"),
-       DEVICE( VLSI,           VLSI_82C535,    "82C535"),
-       DEVICE( VLSI,           VLSI_82C147,    "82C147"),
-       DEVICE( VLSI,           VLSI_VAS96011,  "VAS96011 (Golden Gate II)"),
-       DEVICE( ADL,            ADL_2301,       "2301"),
-       DEVICE( NS,             NS_87415,       "87415"),
-       DEVICE( NS,             NS_87410,       "87410"),
-       DEVICE( TSENG,          TSENG_W32P_2,   "ET4000W32P"),
-       DEVICE( TSENG,          TSENG_W32P_b,   "ET4000W32P rev B"),
-       DEVICE( TSENG,          TSENG_W32P_c,   "ET4000W32P rev C"),
-       DEVICE( TSENG,          TSENG_W32P_d,   "ET4000W32P rev D"),
-       DEVICE( TSENG,          TSENG_ET6000,   "ET6000"),
-       DEVICE( WEITEK,         WEITEK_P9000,   "P9000"),
-       DEVICE( WEITEK,         WEITEK_P9100,   "P9100"),
-       DEVICE( DEC,            DEC_BRD,        "DC21050"),
-       DEVICE( DEC,            DEC_TULIP,      "DC21040"),
-       DEVICE( DEC,            DEC_TGA,        "TGA"),
-       DEVICE( DEC,            DEC_TULIP_FAST, "DC21140"),
-       DEVICE( DEC,            DEC_TGA2,       "TGA2"),
-       DEVICE( DEC,            DEC_FDDI,       "DEFPA"),
-       DEVICE( DEC,            DEC_TULIP_PLUS, "DC21041"),
-       DEVICE( DEC,            DEC_21142,      "DC21142"),
-       DEVICE( DEC,            DEC_21052,      "DC21052"),
-       DEVICE( DEC,            DEC_21150,      "DC21150"),
-       DEVICE( DEC,            DEC_21152,      "DC21152"),
-       DEVICE( DEC,            DEC_21153,      "DC21153"),
-       DEVICE( DEC,            DEC_21154,      "DC21154"),
-       DEVICE( CIRRUS,         CIRRUS_7548,    "GD 7548"),
-       DEVICE( CIRRUS,         CIRRUS_5430,    "GD 5430"),
-       DEVICE( CIRRUS,         CIRRUS_5434_4,  "GD 5434"),
-       DEVICE( CIRRUS,         CIRRUS_5434_8,  "GD 5434"),
-       DEVICE( CIRRUS,         CIRRUS_5436,    "GD 5436"),
-       DEVICE( CIRRUS,         CIRRUS_5446,    "GD 5446"),
-       DEVICE( CIRRUS,         CIRRUS_5480,    "GD 5480"),
-       DEVICE( CIRRUS,         CIRRUS_5464,    "GD 5464"),
-       DEVICE( CIRRUS,         CIRRUS_5465,    "GD 5465"),
-       DEVICE( CIRRUS,         CIRRUS_6729,    "CL 6729"),
-       DEVICE( CIRRUS,         CIRRUS_6832,    "PD 6832"),
-       DEVICE( CIRRUS,         CIRRUS_7542,    "CL 7542"),
-       DEVICE( CIRRUS,         CIRRUS_7543,    "CL 7543"),
-       DEVICE( CIRRUS,         CIRRUS_7541,    "CL 7541"),
-       DEVICE( IBM,            IBM_FIRE_CORAL, "Fire Coral"),
-       DEVICE( IBM,            IBM_TR,         "Token Ring"),
-       DEVICE( IBM,            IBM_82G2675,    "82G2675"),
-       DEVICE( IBM,            IBM_MCA,        "MicroChannel"),
-       DEVICE( IBM,            IBM_82351,      "82351"),
-       DEVICE( IBM,            IBM_PYTHON,     "Python"),
-       DEVICE( IBM,            IBM_SERVERAID,  "ServeRAID"),
-       DEVICE( IBM,            IBM_TR_WAKE,    "Wake On LAN Token Ring"),
-       DEVICE( IBM,            IBM_MPIC,       "MPIC-2 Interrupt Controller"),
-       DEVICE( IBM,            IBM_3780IDSP,   "MWave DSP"),
-       DEVICE( IBM,            IBM_MPIC_2,     "MPIC-2 ASIC Interrupt Controller"),
-       DEVICE( WD,             WD_7197,        "WD 7197"),
-       DEVICE( AMD,            AMD_LANCE,      "79C970"),
-       DEVICE( AMD,            AMD_SCSI,       "53C974"),
-       DEVICE( TRIDENT,        TRIDENT_9397,   "Cyber9397"),
-       DEVICE( TRIDENT,        TRIDENT_9420,   "TG 9420"),
-       DEVICE( TRIDENT,        TRIDENT_9440,   "TG 9440"),
-       DEVICE( TRIDENT,        TRIDENT_9660,   "TG 9660 / Cyber9385"),
-       DEVICE( TRIDENT,        TRIDENT_9750,   "Image 975"),
-       DEVICE( AI,             AI_M1435,       "M1435"),
-       DEVICE( MATROX,         MATROX_MGA_2,   "Atlas PX2085"),
-       DEVICE( MATROX,         MATROX_MIL,     "Millennium"),
-       DEVICE( MATROX,         MATROX_MYS,     "Mystique"),
-       DEVICE( MATROX,         MATROX_MIL_2,   "Millennium II"),
-       DEVICE( MATROX,         MATROX_MIL_2_AGP,"Millennium II AGP"),
-       DEVICE( MATROX,         MATROX_G200_PCI,"Matrox G200 PCI"),
-       DEVICE( MATROX,         MATROX_G200_AGP,"Matrox G200 AGP"),
-       DEVICE( MATROX,         MATROX_MGA_IMP, "MGA Impression"),
-       DEVICE( MATROX,         MATROX_G100_MM, "Matrox G100 multi monitor"),
-       DEVICE( MATROX,         MATROX_G100_AGP,"Matrox G100 AGP"),
-       DEVICE( CT,             CT_65545,       "65545"),
-       DEVICE( CT,             CT_65548,       "65548"),
-       DEVICE( CT,             CT_65550,       "65550"),
-       DEVICE( CT,             CT_65554,       "65554"),
-       DEVICE( CT,             CT_65555,       "65555"),
-       DEVICE( MIRO,           MIRO_36050,     "ZR36050"),
-       DEVICE( NEC,            NEC_PCX2,       "PowerVR PCX2"),
-       DEVICE( FD,             FD_36C70,       "TMC-18C30"),
-       DEVICE( SI,             SI_5591_AGP,    "5591/5592 AGP"),
-       DEVICE( SI,             SI_6202,        "6202"),
-       DEVICE( SI,             SI_503,         "85C503"),
-       DEVICE( SI,             SI_ACPI,        "ACPI"),
-       DEVICE( SI,             SI_5597_VGA,    "5597/5598 VGA"),
-       DEVICE( SI,             SI_6205,        "6205"),
-       DEVICE( SI,             SI_501,         "85C501"),
-       DEVICE( SI,             SI_496,         "85C496"),
-       DEVICE( SI,             SI_601,         "85C601"),
-       DEVICE( SI,             SI_5107,        "5107"),
-       DEVICE( SI,             SI_5511,        "85C5511"),
-       DEVICE( SI,             SI_5513,        "85C5513"),
-       DEVICE( SI,             SI_5571,        "5571"),
-       DEVICE( SI,             SI_5591,        "5591/5592 Host"),
-       DEVICE( SI,             SI_5597,        "5597/5598 Host"),
-       DEVICE( SI,             SI_7001,        "7001 USB"),
-       DEVICE( HP,             HP_J2585A,      "J2585A"),
-       DEVICE( HP,             HP_J2585B,      "J2585B (Lassen)"),
-       DEVICE( PCTECH,         PCTECH_RZ1000,  "RZ1000 (buggy)"),
-       DEVICE( PCTECH,         PCTECH_RZ1001,  "RZ1001 (buggy?)"),
-       DEVICE( PCTECH,         PCTECH_SAMURAI_0,"Samurai 0"),
-       DEVICE( PCTECH,         PCTECH_SAMURAI_1,"Samurai 1"),
-       DEVICE( PCTECH,         PCTECH_SAMURAI_IDE,"Samurai IDE"),
-       DEVICE( DPT,            DPT,            "SmartCache/Raid"),
-       DEVICE( OPTI,           OPTI_92C178,    "92C178"),
-       DEVICE( OPTI,           OPTI_82C557,    "82C557 Viper-M"),
-       DEVICE( OPTI,           OPTI_82C558,    "82C558 Viper-M ISA+IDE"),
-       DEVICE( OPTI,           OPTI_82C621,    "82C621"),
-       DEVICE( OPTI,           OPTI_82C700,    "82C700"),
-       DEVICE( OPTI,           OPTI_82C701,    "82C701 FireStar Plus"),
-       DEVICE( OPTI,           OPTI_82C814,    "82C814 Firebridge 1"),
-       DEVICE( OPTI,           OPTI_82C822,    "82C822"),
-       DEVICE( OPTI,           OPTI_82C825,    "82C825 Firebridge 2"),
-       DEVICE( SGS,            SGS_2000,       "STG 2000X"),
-       DEVICE( SGS,            SGS_1764,       "STG 1764X"),
-       DEVICE( BUSLOGIC,       BUSLOGIC_MULTIMASTER_NC, "MultiMaster NC"),
-       DEVICE( BUSLOGIC,       BUSLOGIC_MULTIMASTER,    "MultiMaster"),
-       DEVICE( BUSLOGIC,       BUSLOGIC_FLASHPOINT,     "FlashPoint"),
-       DEVICE( TI,             TI_TVP4010,     "TVP4010 Permedia"),
-       DEVICE( TI,             TI_TVP4020,     "TVP4020 Permedia 2"),
-       DEVICE( TI,             TI_PCI1130,     "PCI1130"),
-       DEVICE( TI,             TI_PCI1131,     "PCI1131"),
-       DEVICE( TI,             TI_PCI1250,     "PCI1250"),
-       DEVICE( OAK,            OAK_OTI107,     "OTI107"),
-       DEVICE( WINBOND2,       WINBOND2_89C940,"NE2000-PCI"),
-       DEVICE( MOTOROLA,       MOTOROLA_MPC105,"MPC105 Eagle"),
-       DEVICE( MOTOROLA,       MOTOROLA_MPC106,"MPC106 Grackle"),
-       DEVICE( MOTOROLA,       MOTOROLA_RAVEN, "Raven"),
-       DEVICE( MOTOROLA,       MOTOROLA_FALCON,"Falcon"),
-       DEVICE( MOTOROLA,       MOTOROLA_CPX8216,"CPX8216"),
-       DEVICE( PROMISE,        PROMISE_20246,  "IDE UltraDMA/33"),
-       DEVICE( PROMISE,        PROMISE_20262,  "IDE UltraDMA/66"),
-       DEVICE( PROMISE,        PROMISE_5300,   "DC5030"),
-       DEVICE( N9,             N9_I128,        "Imagine 128"),
-       DEVICE( N9,             N9_I128_2,      "Imagine 128v2"),
-       DEVICE( N9,             N9_I128_T2R,    "Revolution 3D"),
-       DEVICE( UMC,            UMC_UM8673F,    "UM8673F"),
-       DEVICE( UMC,            UMC_UM8891A,    "UM8891A"),
-       DEVICE( UMC,            UMC_UM8886BF,   "UM8886BF"),
-       DEVICE( UMC,            UMC_UM8886A,    "UM8886A"),
-       DEVICE( UMC,            UMC_UM8881F,    "UM8881F"),
-       DEVICE( UMC,            UMC_UM8886F,    "UM8886F"),
-       DEVICE( UMC,            UMC_UM9017F,    "UM9017F"),
-       DEVICE( UMC,            UMC_UM8886N,    "UM8886N"),
-       DEVICE( UMC,            UMC_UM8891N,    "UM8891N"),
-       DEVICE( X,              X_AGX016,       "ITT AGX016"),
-       DEVICE( PICOP,          PICOP_PT86C52X, "PT86C52x Vesuvius"),
-       DEVICE( PICOP,          PICOP_PT80C524, "PT80C524 Nile"),
-       DEVICE( APPLE,          APPLE_BANDIT,   "Bandit"),
-       DEVICE( APPLE,          APPLE_GC,       "Grand Central"),
-       DEVICE( APPLE,          APPLE_HYDRA,    "Hydra"),
-       DEVICE( NEXGEN,         NEXGEN_82C501,  "82C501"),
-       DEVICE( QLOGIC,         QLOGIC_ISP1020, "ISP1020"),
-       DEVICE( QLOGIC,         QLOGIC_ISP1022, "ISP1022"),
-       DEVICE( CYRIX,          CYRIX_5510,     "5510"),
-       DEVICE( CYRIX,          CYRIX_PCI_MASTER,"PCI Master"),
-       DEVICE( CYRIX,          CYRIX_5520,     "5520"),
-       DEVICE( CYRIX,          CYRIX_5530_LEGACY,"5530 Kahlua Legacy"),
-       DEVICE( CYRIX,          CYRIX_5530_SMI, "5530 Kahlua SMI"),
-       DEVICE( CYRIX,          CYRIX_5530_IDE, "5530 Kahlua IDE"),
-       DEVICE( CYRIX,          CYRIX_5530_AUDIO,"5530 Kahlua Audio"),
-       DEVICE( CYRIX,          CYRIX_5530_VIDEO,"5530 Kahlua Video"),
-       DEVICE( LEADTEK,        LEADTEK_805,    "S3 805"),
-       DEVICE( CONTAQ,         CONTAQ_82C599,  "82C599"),
-       DEVICE( CONTAQ,         CONTAQ_82C693,  "82C693"),
-       DEVICE( OLICOM,         OLICOM_OC3136,  "OC-3136/3137"),
-       DEVICE( OLICOM,         OLICOM_OC2315,  "OC-2315"),
-       DEVICE( OLICOM,         OLICOM_OC2325,  "OC-2325"),
-       DEVICE( OLICOM,         OLICOM_OC2183,  "OC-2183/2185"),
-       DEVICE( OLICOM,         OLICOM_OC2326,  "OC-2326"),
-       DEVICE( OLICOM,         OLICOM_OC6151,  "OC-6151/6152"),
-       DEVICE( SUN,            SUN_EBUS,       "PCI-EBus Bridge"),
-       DEVICE( SUN,            SUN_HAPPYMEAL,  "Happy Meal Ethernet"),
-       DEVICE( SUN,            SUN_SIMBA,      "Advanced PCI Bridge"),
-       DEVICE( SUN,            SUN_PBM,        "PCI Bus Module"),
-       DEVICE( SUN,            SUN_SABRE,      "Ultra IIi PCI"),
-       DEVICE( CMD,            CMD_640,        "640 (buggy)"),
-       DEVICE( CMD,            CMD_643,        "643"),
-       DEVICE( CMD,            CMD_646,        "646"),
-       DEVICE( CMD,            CMD_670,        "670"),
-       DEVICE( VISION,         VISION_QD8500,  "QD-8500"),
-       DEVICE( VISION,         VISION_QD8580,  "QD-8580"),
-       DEVICE( BROOKTREE,      BROOKTREE_848,  "Bt848"),
-       DEVICE( BROOKTREE,      BROOKTREE_849A, "Bt849"),
-       DEVICE( BROOKTREE,      BROOKTREE_878_1,"Bt878 2nd Contr. (?)"),
-       DEVICE( BROOKTREE,      BROOKTREE_878,  "Bt878"),
-       DEVICE( BROOKTREE,      BROOKTREE_8474, "Bt8474"),
-       DEVICE( SIERRA,         SIERRA_STB,     "STB Horizon 64"),
-       DEVICE( SGI,            SGI_IOC3,       "IOC3"),
-       DEVICE( ACC,            ACC_2056,       "2056"),
-       DEVICE( WINBOND,        WINBOND_83769,  "W83769F"),
-       DEVICE( WINBOND,        WINBOND_82C105, "SL82C105"),
-       DEVICE( WINBOND,        WINBOND_83C553, "W83C553"),
-       DEVICE( DATABOOK,       DATABOOK_87144, "DB87144"),
-       DEVICE( PLX,            PLX_9050,       "PCI9050 I2O"),
-       DEVICE( PLX,            PLX_9080,       "PCI9080 I2O"),
-       DEVICE( MADGE,          MADGE_MK2,      "Smart 16/4 BM Mk2 Ringnode"),
-       DEVICE( MADGE,          MADGE_C155S,    "Collage 155 Server"),
-       DEVICE( 3COM,           3COM_3C339,     "3C339 TokenRing"),
-       DEVICE( 3COM,           3COM_3C590,     "3C590 10bT"),
-       DEVICE( 3COM,           3COM_3C595TX,   "3C595 100bTX"),
-       DEVICE( 3COM,           3COM_3C595T4,   "3C595 100bT4"),
-       DEVICE( 3COM,           3COM_3C595MII,  "3C595 100b-MII"),
-       DEVICE( 3COM,           3COM_3C900TPO,  "3C900 10bTPO"),
-       DEVICE( 3COM,           3COM_3C900COMBO,"3C900 10b Combo"),
-       DEVICE( 3COM,           3COM_3C905TX,   "3C905 100bTX"),
-       DEVICE( 3COM,           3COM_3C905T4,   "3C905 100bT4"),
-       DEVICE( 3COM,           3COM_3C905B_TX, "3C905B 100bTX"),
-       DEVICE( SMC,            SMC_EPIC100,    "9432 TX"),
-       DEVICE( AL,             AL_M1445,       "M1445"),
-       DEVICE( AL,             AL_M1449,       "M1449"),
-       DEVICE( AL,             AL_M1451,       "M1451"),
-       DEVICE( AL,             AL_M1461,       "M1461"),
-       DEVICE( AL,             AL_M1489,       "M1489"),
-       DEVICE( AL,             AL_M1511,       "M1511"),
-       DEVICE( AL,             AL_M1513,       "M1513"),
-       DEVICE( AL,             AL_M1521,       "M1521"),
-       DEVICE( AL,             AL_M1523,       "M1523"),
-       DEVICE( AL,             AL_M1531,       "M1531 Aladdin IV"),
-       DEVICE( AL,             AL_M1533,       "M1533 Aladdin IV"),
-       DEVICE( AL,             AL_M1541,       "M1541 Aladdin V"),
-       DEVICE( AL,             AL_M1543,       "M1543 Aladdin V"),
-       DEVICE( AL,             AL_M3307,       "M3307 MPEG-1 decoder"),
-       DEVICE( AL,             AL_M4803,       "M4803"),
-       DEVICE( AL,             AL_M5219,       "M5219"),
-       DEVICE( AL,             AL_M5229,       "M5229 TXpro"),
-       DEVICE( AL,             AL_M5237,       "M5237 USB"),
-       DEVICE( AL,             AL_M5243,       "M5243 AGP"),
-       DEVICE( AL,             AL_M7101,       "M7101 PMU"),
-       DEVICE( SURECOM,        SURECOM_NE34,   "NE-34PCI LAN"),
-       DEVICE( NEOMAGIC,       NEOMAGIC_MAGICGRAPH_NM2070,     "Magicgraph NM2070"),
-       DEVICE( NEOMAGIC,       NEOMAGIC_MAGICGRAPH_128V, "MagicGraph 128V"),
-       DEVICE( NEOMAGIC,       NEOMAGIC_MAGICGRAPH_128ZV, "MagicGraph 128ZV"),
-       DEVICE( NEOMAGIC,       NEOMAGIC_MAGICGRAPH_NM2160, "MagicGraph NM2160"),
-       DEVICE( NEOMAGIC,       NEOMAGIC_MAGICGRAPH_128ZVPLUS, "MagicGraph 128ZV+"),
-       DEVICE( ASP,            ASP_ABP940,     "ABP940"),
-       DEVICE( ASP,            ASP_ABP940U,    "ABP940U"),
-       DEVICE( ASP,            ASP_ABP940UW,   "ABP940UW"),
-       DEVICE( MACRONIX,       MACRONIX_MX98713,"MX98713"),
-       DEVICE( MACRONIX,       MACRONIX_MX987x5,"MX98715 / MX98725"),
-       DEVICE( CERN,           CERN_SPSB_PMC,  "STAR/RD24 SCI-PCI (PMC)"),
-       DEVICE( CERN,           CERN_SPSB_PCI,  "STAR/RD24 SCI-PCI (PMC)"),
-       DEVICE( CERN,           CERN_HIPPI_DST, "HIPPI destination"),
-       DEVICE( CERN,           CERN_HIPPI_SRC, "HIPPI source"),
-       DEVICE( IMS,            IMS_8849,       "8849"),
-       DEVICE( TEKRAM2,        TEKRAM2_690c,   "DC690c"),
-       DEVICE( TUNDRA,         TUNDRA_CA91C042,"CA91C042 Universe"),
-       DEVICE( AMCC,           AMCC_MYRINET,   "Myrinet PCI (M2-PCI-32)"),
-       DEVICE( AMCC,           AMCC_PARASTATION,"ParaStation Interface"),
-       DEVICE( AMCC,           AMCC_S5933,     "S5933 PCI44"),
-       DEVICE( AMCC,           AMCC_S5933_HEPC3,"S5933 Traquair HEPC3"),
-       DEVICE( INTERG,         INTERG_1680,    "IGA-1680"),
-       DEVICE( INTERG,         INTERG_1682,    "IGA-1682"),
-       DEVICE( REALTEK,        REALTEK_8029,   "8029"),
-       DEVICE( REALTEK,        REALTEK_8129,   "8129"),
-       DEVICE( REALTEK,        REALTEK_8139,   "8139"),
-       DEVICE( TRUEVISION,     TRUEVISION_T1000,"TARGA 1000"),
-       DEVICE( INIT,           INIT_320P,      "320 P"),
-       DEVICE( INIT,           INIT_360P,      "360 P"),
-       DEVICE( TTI,            TTI_HPT343,     "HPT343"),
-       DEVICE( VIA,            VIA_82C505,     "VT 82C505"),
-       DEVICE( VIA,            VIA_82C561,     "VT 82C561"),
-       DEVICE( VIA,            VIA_82C586_1,   "VT 82C586 Apollo IDE"),
-       DEVICE( VIA,            VIA_82C576,     "VT 82C576 3V"),
-       DEVICE( VIA,            VIA_82C585,     "VT 82C585 Apollo VP1/VPX"),
-       DEVICE( VIA,            VIA_82C586_0,   "VT 82C586 Apollo ISA"),
-       DEVICE( VIA,            VIA_82C595,     "VT 82C595 Apollo VP2"),
-       DEVICE( VIA,            VIA_82C597_0,   "VT 82C597 Apollo VP3"),
-       DEVICE( VIA,            VIA_82C598_0,   "VT 82C598 Apollo MVP3"),
-       DEVICE( VIA,            VIA_82C926,     "VT 82C926 Amazon"),
-       DEVICE( VIA,            VIA_82C416,     "VT 82C416MV"),
-       DEVICE( VIA,            VIA_82C595_97,  "VT 82C595 Apollo VP2/97"),
-       DEVICE( VIA,            VIA_82C586_2,   "VT 82C586 Apollo USB"),
-       DEVICE( VIA,            VIA_82C586_3,   "VT 82C586B Apollo ACPI"),
-       DEVICE( VIA,            VIA_86C100A,    "VT 86C100A"),
-       DEVICE( VIA,            VIA_82C597_1,   "VT 82C597 Apollo VP3 AGP"),
-       DEVICE( VIA,            VIA_82C598_1,   "VT 82C598 Apollo MVP3 AGP"),
-       DEVICE( SMC2,           SMC2_1211TX,    "1211 TX"),
-       DEVICE( VORTEX,         VORTEX_GDT60x0, "GDT 60x0"),
-       DEVICE( VORTEX,         VORTEX_GDT6000B,"GDT 6000b"),
-       DEVICE( VORTEX,         VORTEX_GDT6x10, "GDT 6110/6510"),
-       DEVICE( VORTEX,         VORTEX_GDT6x20, "GDT 6120/6520"),
-       DEVICE( VORTEX,         VORTEX_GDT6530, "GDT 6530"),
-       DEVICE( VORTEX,         VORTEX_GDT6550, "GDT 6550"),
-       DEVICE( VORTEX,         VORTEX_GDT6x17, "GDT 6117/6517"),
-       DEVICE( VORTEX,         VORTEX_GDT6x27, "GDT 6127/6527"),
-       DEVICE( VORTEX,         VORTEX_GDT6537, "GDT 6537"),
-       DEVICE( VORTEX,         VORTEX_GDT6557, "GDT 6557"),
-       DEVICE( VORTEX,         VORTEX_GDT6x15, "GDT 6115/6515"),
-       DEVICE( VORTEX,         VORTEX_GDT6x25, "GDT 6125/6525"),
-       DEVICE( VORTEX,         VORTEX_GDT6535, "GDT 6535"),
-       DEVICE( VORTEX,         VORTEX_GDT6555, "GDT 6555"),
-       DEVICE( VORTEX,         VORTEX_GDT6x17RP,"GDT 6117RP/6517RP"),
-       DEVICE( VORTEX,         VORTEX_GDT6x27RP,"GDT 6127RP/6527RP"),
-       DEVICE( VORTEX,         VORTEX_GDT6537RP,"GDT 6537RP"),
-       DEVICE( VORTEX,         VORTEX_GDT6557RP,"GDT 6557RP"),
-       DEVICE( VORTEX,         VORTEX_GDT6x11RP,"GDT 6111RP/6511RP"),
-       DEVICE( VORTEX,         VORTEX_GDT6x21RP,"GDT 6121RP/6521RP"),
-       DEVICE( VORTEX,         VORTEX_GDT6x17RP1,"GDT 6117RP1/6517RP1"),
-       DEVICE( VORTEX,         VORTEX_GDT6x27RP1,"GDT 6127RP1/6527RP1"),
-       DEVICE( VORTEX,         VORTEX_GDT6537RP1,"GDT 6537RP1"),
-       DEVICE( VORTEX,         VORTEX_GDT6557RP1,"GDT 6557RP1"),
-       DEVICE( VORTEX,         VORTEX_GDT6x11RP1,"GDT 6111RP1/6511RP1"),
-       DEVICE( VORTEX,         VORTEX_GDT6x21RP1,"GDT 6121RP1/6521RP1"),
-       DEVICE( VORTEX,         VORTEX_GDT6x17RP2,"GDT 6117RP2/6517RP2"),
-       DEVICE( VORTEX,         VORTEX_GDT6x27RP2,"GDT 6127RP2/6527RP2"),
-       DEVICE( VORTEX,         VORTEX_GDT6537RP2,"GDT 6537RP2"),
-       DEVICE( VORTEX,         VORTEX_GDT6557RP2,"GDT 6557RP2"),
-       DEVICE( VORTEX,         VORTEX_GDT6x11RP2,"GDT 6111RP2/6511RP2"),
-       DEVICE( VORTEX,         VORTEX_GDT6x21RP2,"GDT 6121RP2/6521RP2"),
-       DEVICE( EF,             EF_ATM_FPGA,    "155P-MF1 (FPGA)"),
-       DEVICE( EF,             EF_ATM_ASIC,    "155P-MF1 (ASIC)"),
-       DEVICE( FORE,           FORE_PCA200PC,  "PCA-200PC"),
-       DEVICE( FORE,           FORE_PCA200E,    "PCA-200E"),
-       DEVICE( IMAGINGTECH,    IMAGINGTECH_ICPCI, "MVC IC-PCI"),
-       DEVICE( PHILIPS,        PHILIPS_SAA7145,"SAA7145"),
-       DEVICE( PHILIPS,        PHILIPS_SAA7146,"SAA7146"),
-       DEVICE( CYCLONE,        CYCLONE_SDK,    "SDK"),
-       DEVICE( ALLIANCE,       ALLIANCE_PROMOTIO, "Promotion-6410"),
-       DEVICE( ALLIANCE,       ALLIANCE_PROVIDEO, "Provideo"),
-       DEVICE( ALLIANCE,       ALLIANCE_AT24,  "AT24"),
-       DEVICE( ALLIANCE,       ALLIANCE_AT3D,  "AT3D"),
-       DEVICE( VMIC,           VMIC_VME,       "VMIVME-7587"),
-       DEVICE( DIGI,           DIGI_EPC,       "AccelPort EPC"),
-       DEVICE( DIGI,           DIGI_RIGHTSWITCH, "RightSwitch SE-6"),
-       DEVICE( DIGI,           DIGI_XEM,       "AccelPort Xem"),
-       DEVICE( DIGI,           DIGI_XR,        "AccelPort Xr"),
-       DEVICE( DIGI,           DIGI_CX,        "AccelPort C/X"),
-       DEVICE( DIGI,           DIGI_XRJ,       "AccelPort Xr/J"),
-       DEVICE( DIGI,           DIGI_EPCJ,      "AccelPort EPC/J"),
-       DEVICE( DIGI,           DIGI_XR_920,    "AccelPort Xr 920"),
-       DEVICE( MUTECH,         MUTECH_MV1000,  "MV-1000"),
-       DEVICE( RENDITION,      RENDITION_VERITE,"Verite 1000"),
-       DEVICE( RENDITION,      RENDITION_VERITE2100,"Verite 2100"),
-       DEVICE( TOSHIBA,        TOSHIBA_601,    "Laptop"),
-       DEVICE( TOSHIBA,        TOSHIBA_TOPIC95,"ToPIC95"),
-       DEVICE( TOSHIBA,        TOSHIBA_TOPIC97,"ToPIC97"),
-       DEVICE( RICOH,          RICOH_RL5C466,  "RL5C466"),
-       DEVICE( ARTOP,          ARTOP_ATP8400,  "ATP8400"),
-       DEVICE( ARTOP,          ARTOP_ATP850UF, "ATP850UF"),
-       DEVICE( ZEITNET,        ZEITNET_1221,   "1221"),
-       DEVICE( ZEITNET,        ZEITNET_1225,   "1225"),
-       DEVICE( OMEGA,          OMEGA_82C092G,  "82C092G"),
-       DEVICE( LITEON,         LITEON_LNE100TX,"LNE100TX"),
-       DEVICE( NP,             NP_PCI_FDDI,    "NP-PCI"),       
-       DEVICE( ATT,            ATT_L56XMF,     "L56xMF"),
-       DEVICE( SPECIALIX,      SPECIALIX_IO8,  "IO8+/PCI"),
-       DEVICE( SPECIALIX,      SPECIALIX_XIO,  "XIO/SIO host"),
-       DEVICE( SPECIALIX,      SPECIALIX_RIO,  "RIO host"),
-       DEVICE( AURAVISION,     AURAVISION_VXP524,"VXP524"),
-       DEVICE( IKON,           IKON_10115,     "10115 Greensheet"),
-       DEVICE( IKON,           IKON_10117,     "10117 Greensheet"),
-       DEVICE( ZORAN,          ZORAN_36057,    "ZR36057"),
-       DEVICE( ZORAN,          ZORAN_36120,    "ZR36120"),
-       DEVICE( KINETIC,        KINETIC_2915,   "2915 CAMAC"),
-       DEVICE( COMPEX,         COMPEX_ENET100VG4, "Readylink ENET100-VG4"),
-       DEVICE( COMPEX,         COMPEX_RL2000,  "ReadyLink 2000"),
-       DEVICE( RP,             RP32INTF,       "RocketPort 32 Intf"),
-       DEVICE( RP,             RP8INTF,        "RocketPort 8 Intf"),
-       DEVICE( RP,             RP16INTF,       "RocketPort 16 Intf"),
-       DEVICE( RP,             RP4QUAD,        "Rocketport 4 Quad"),
-       DEVICE( RP,             RP8OCTA,        "RocketPort 8 Oct"),
-       DEVICE( RP,             RP8J,           "RocketPort 8 J"),
-       DEVICE( RP,             RPP4,           "RocketPort Plus 4 Quad"),
-       DEVICE( RP,             RPP8,           "RocketPort Plus 8 Oct"),
-       DEVICE( RP,             RP8M,           "RocketModem 8 J"),
-       DEVICE( CYCLADES,       CYCLOM_Y_Lo,    "Cyclom-Y below 1Mbyte"),
-       DEVICE( CYCLADES,       CYCLOM_Y_Hi,    "Cyclom-Y above 1Mbyte"),
-       DEVICE( CYCLADES,       CYCLOM_4Y_Lo,   "Cyclom-4Y below 1Mbyte"),
-       DEVICE( CYCLADES,       CYCLOM_4Y_Hi,   "Cyclom-4Y above 1Mbyte"),
-       DEVICE( CYCLADES,       CYCLOM_8Y_Lo,   "Cyclom-8Y below 1Mbyte"),
-       DEVICE( CYCLADES,       CYCLOM_8Y_Hi,   "Cyclom-8Y above 1Mbyte"),
-       DEVICE( CYCLADES,       CYCLOM_Z_Lo,    "Cyclades-Z below 1Mbyte"),
-       DEVICE( CYCLADES,       CYCLOM_Z_Hi,    "Cyclades-Z above 1Mbyte"),
-       DEVICE( ESSENTIAL,      ESSENTIAL_ROADRUNNER,"Roadrunner serial HIPPI"),
-       DEVICE( O2,             O2_6832,        "6832"),
-       DEVICE( 3DFX,           3DFX_VOODOO,    "Voodoo"),
-       DEVICE( 3DFX,           3DFX_VOODOO2,   "Voodoo2"),
-       DEVICE( 3DFX,           3DFX_BANSHEE,   "Banshee"),
-       DEVICE( SIGMADES,       SIGMADES_6425,  "REALmagic64/GX"),
-       DEVICE( AVM,            AVM_A1,         "A1 (Fritz)"),
-       DEVICE( STALLION,       STALLION_ECHPCI832,"EasyConnection 8/32"),
-       DEVICE( STALLION,       STALLION_ECHPCI864,"EasyConnection 8/64"),
-       DEVICE( STALLION,       STALLION_EIOPCI,"EasyIO"),
-       DEVICE( OPTIBASE,       OPTIBASE_FORGE, "MPEG Forge"),
-       DEVICE( OPTIBASE,       OPTIBASE_FUSION,"MPEG Fusion"),
-       DEVICE( OPTIBASE,       OPTIBASE_VPLEX, "VideoPlex"),
-       DEVICE( OPTIBASE,       OPTIBASE_VPLEXCC,"VideoPlex CC"),
-       DEVICE( OPTIBASE,       OPTIBASE_VQUEST,"VideoQuest"),
-       DEVICE( SATSAGEM,       SATSAGEM_PCR2101,"PCR2101 DVB receiver"),
-       DEVICE( SATSAGEM,       SATSAGEM_TELSATTURBO,"Telsat Turbo DVB"),
-       DEVICE( HUGHES,         HUGHES_DIRECPC, "DirecPC"),
-       DEVICE( ENSONIQ,        ENSONIQ_ES1371, "ES1371"),
-       DEVICE( ENSONIQ,        ENSONIQ_AUDIOPCI,"AudioPCI"),
-       DEVICE( ALTEON,         ALTEON_ACENIC,  "AceNIC"),
-       DEVICE( PICTUREL,       PICTUREL_PCIVST,"PCIVST"),
-       DEVICE( NVIDIA_SGS,     NVIDIA_SGS_RIVA128,     "Riva 128"),
-       DEVICE( CBOARDS,        CBOARDS_DAS1602_16,"DAS1602/16"),
-       DEVICE( MOTOROLA_OOPS,  MOTOROLA_FALCON,"Falcon"),
-       DEVICE( SYMPHONY,       SYMPHONY_101,   "82C101"),
-       DEVICE( TEKRAM,         TEKRAM_DC290,   "DC-290"),
-       DEVICE( 3DLABS,         3DLABS_300SX,   "GLINT 300SX"),
-       DEVICE( 3DLABS,         3DLABS_500TX,   "GLINT 500TX"),
-       DEVICE( 3DLABS,         3DLABS_DELTA,   "GLINT Delta"),
-       DEVICE( 3DLABS,         3DLABS_PERMEDIA,"PERMEDIA"),
-       DEVICE( 3DLABS,         3DLABS_MX,      "GLINT MX"),
-       DEVICE( AVANCE,         AVANCE_ALG2064, "ALG2064i"),
-       DEVICE( AVANCE,         AVANCE_2302,    "ALG-2302"),
-       DEVICE( NETVIN,         NETVIN_NV5000SC,"NV5000"),
-       DEVICE( S3,             S3_PLATO_PXS,   "PLATO/PX (system)"),
-       DEVICE( S3,             S3_ViRGE,       "ViRGE"),
-       DEVICE( S3,             S3_TRIO,        "Trio32/Trio64"),
-       DEVICE( S3,             S3_AURORA64VP,  "Aurora64V+"),
-       DEVICE( S3,             S3_TRIO64UVP,   "Trio64UV+"),
-       DEVICE( S3,             S3_ViRGE_VX,    "ViRGE/VX"),
-       DEVICE( S3,             S3_868,         "Vision 868"),
-       DEVICE( S3,             S3_928,         "Vision 928-P"),
-       DEVICE( S3,             S3_864_1,       "Vision 864-P"),
-       DEVICE( S3,             S3_864_2,       "Vision 864-P"),
-       DEVICE( S3,             S3_964_1,       "Vision 964-P"),
-       DEVICE( S3,             S3_964_2,       "Vision 964-P"),
-       DEVICE( S3,             S3_968,         "Vision 968"),
-       DEVICE( S3,             S3_TRIO64V2,    "Trio64V2/DX or /GX"),
-       DEVICE( S3,             S3_PLATO_PXG,   "PLATO/PX (graphics)"),
-       DEVICE( S3,             S3_ViRGE_DXGX,  "ViRGE/DX or /GX"),
-       DEVICE( S3,             S3_ViRGE_GX2,   "ViRGE/GX2"),
-       DEVICE( S3,             S3_ViRGE_MX,    "ViRGE/MX"),
-       DEVICE( S3,             S3_ViRGE_MXP,   "ViRGE/MX+"),
-       DEVICE( S3,             S3_ViRGE_MXPMV, "ViRGE/MX+MV"),
-       DEVICE( S3,             S3_SONICVIBES,  "SonicVibes"),
-       DEVICE( DCI,            DCI_PCCOM4,     "PC COM PCI Bus 4 port serial Adapter"),
-       DEVICE( GENROCO,        GENROCO_HFP832, "TURBOstor HFP832"),
-       DEVICE( INTEL,          INTEL_82375,    "82375EB"),
-       DEVICE( INTEL,          INTEL_82424,    "82424ZX Saturn"),
-       DEVICE( INTEL,          INTEL_82378,    "82378IB"),
-       DEVICE( INTEL,          INTEL_82430,    "82430ZX Aries"),
-       DEVICE( INTEL,          INTEL_82434,    "82434LX Mercury/Neptune"),
-       DEVICE( INTEL,          INTEL_82092AA_0,"82092AA PCMCIA bridge"),
-       DEVICE( INTEL,          INTEL_82092AA_1,"82092AA EIDE"),
-       DEVICE( INTEL,          INTEL_7116,     "SAA7116"),
-       DEVICE( INTEL,          INTEL_82596,    "82596"),
-       DEVICE( INTEL,          INTEL_82865,    "82865"),
-       DEVICE( INTEL,          INTEL_82557,    "82557"),
-       DEVICE( INTEL,          INTEL_82437,    "82437"),
-       DEVICE( INTEL,          INTEL_82371FB_0,"82371FB PIIX ISA"),
-       DEVICE( INTEL,          INTEL_82371FB_1,"82371FB PIIX IDE"),
-       DEVICE( INTEL,          INTEL_82371MX,  "430MX - 82371MX MPIIX"),
-       DEVICE( INTEL,          INTEL_82437MX,  "430MX - 82437MX MTSC"),
-       DEVICE( INTEL,          INTEL_82441,    "82441FX Natoma"),
-       DEVICE( INTEL,          INTEL_82380FB,  "82380FB Mobile"),
-       DEVICE( INTEL,          INTEL_82439,    "82439HX Triton II"),
-       DEVICE( INTEL,          INTEL_82371SB_0,"82371SB PIIX3 ISA"),
-       DEVICE( INTEL,          INTEL_82371SB_1,"82371SB PIIX3 IDE"),
-       DEVICE( INTEL,          INTEL_82371SB_2,"82371SB PIIX3 USB"),
-       DEVICE( INTEL,          INTEL_82437VX,  "82437VX Triton II"),
-       DEVICE( INTEL,          INTEL_82439TX,  "82439TX"),
-       DEVICE( INTEL,          INTEL_82371AB_0,"82371AB PIIX4 ISA"),
-       DEVICE( INTEL,          INTEL_82371AB,  "82371AB PIIX4 IDE"),
-       DEVICE( INTEL,          INTEL_82371AB_2,"82371AB PIIX4 USB"),
-       DEVICE( INTEL,          INTEL_82371AB_3,"82371AB PIIX4 ACPI"),
-       DEVICE( INTEL,          INTEL_82443LX_0,"440LX - 82443LX PAC Host"),
-       DEVICE( INTEL,          INTEL_82443LX_1,"440LX - 82443LX PAC AGP"),
-       DEVICE( INTEL,          INTEL_82443BX_0,"440BX - 82443BX Host"),
-       DEVICE( INTEL,          INTEL_82443BX_1,"440BX - 82443BX AGP"),
-       DEVICE( INTEL,          INTEL_82443BX_2,"440BX - 82443BX Host (no AGP)"),
-       DEVICE( INTEL,          INTEL_P6,       "Orion P6"),
-       DEVICE( INTEL,          INTEL_82450GX,  "82450GX Orion P6"),
-       DEVICE( KTI,            KTI_ET32P2,     "ET32P2"),
-       DEVICE( ADAPTEC,        ADAPTEC_7810,   "AIC-7810 RAID"),
-       DEVICE( ADAPTEC,        ADAPTEC_7821,   "AIC-7860"),
-       DEVICE( ADAPTEC,        ADAPTEC_38602,  "AIC-7860"),
-       DEVICE( ADAPTEC,        ADAPTEC_7850,   "AIC-7850"),
-       DEVICE( ADAPTEC,        ADAPTEC_7855,   "AIC-7855"),
-       DEVICE( ADAPTEC,        ADAPTEC_5800,   "AIC-5800"),
-       DEVICE( ADAPTEC,        ADAPTEC_3860,   "AIC-7860"),
-       DEVICE( ADAPTEC,        ADAPTEC_7860,   "AIC-7860"),
-       DEVICE( ADAPTEC,        ADAPTEC_7861,   "AIC-7861"),
-       DEVICE( ADAPTEC,        ADAPTEC_7870,   "AIC-7870"),
-       DEVICE( ADAPTEC,        ADAPTEC_7871,   "AIC-7871"),
-       DEVICE( ADAPTEC,        ADAPTEC_7872,   "AIC-7872"),
-       DEVICE( ADAPTEC,        ADAPTEC_7873,   "AIC-7873"),
-       DEVICE( ADAPTEC,        ADAPTEC_7874,   "AIC-7874"),
-       DEVICE( ADAPTEC,        ADAPTEC_7895,   "AIC-7895U"),
-       DEVICE( ADAPTEC,        ADAPTEC_7880,   "AIC-7880U"),
-       DEVICE( ADAPTEC,        ADAPTEC_7881,   "AIC-7881U"),
-       DEVICE( ADAPTEC,        ADAPTEC_7882,   "AIC-7882U"),
-       DEVICE( ADAPTEC,        ADAPTEC_7883,   "AIC-7883U"),
-       DEVICE( ADAPTEC,        ADAPTEC_7884,   "AIC-7884U"),
-       DEVICE( ADAPTEC,        ADAPTEC_7885,   "AIC-7885U"),
-       DEVICE( ADAPTEC,        ADAPTEC_7886,   "AIC-7886U"),
-       DEVICE( ADAPTEC,        ADAPTEC_7887,   "AIC-7887U"),
-       DEVICE( ADAPTEC,        ADAPTEC_7888,   "AIC-7888U"),
-       DEVICE( ADAPTEC,        ADAPTEC_1030,   "ABA-1030 DVB receiver"),
-       DEVICE( ADAPTEC2,       ADAPTEC2_2940U2,"AHA-2940U2"),
-       DEVICE( ADAPTEC2,       ADAPTEC2_2930U2,"AHA-2930U2"),
-       DEVICE( ADAPTEC2,       ADAPTEC2_7890B, "AIC-7890/1"),
-       DEVICE( ADAPTEC2,       ADAPTEC2_7890,  "AIC-7890/1"),
-       DEVICE( ADAPTEC2,       ADAPTEC2_3940U2,"AHA-3940U2"),
-       DEVICE( ADAPTEC2,       ADAPTEC2_3950U2D,"AHA-3950U2D"),
-       DEVICE( ADAPTEC2,       ADAPTEC2_7896,  "AIC-7896/7"),
-       DEVICE( ADAPTEC2,       ADAPTEC2_7892A, "AIC-7892"),
-       DEVICE( ADAPTEC2,       ADAPTEC2_7892B, "AIC-7892"),
-       DEVICE( ADAPTEC2,       ADAPTEC2_7892D, "AIC-7892"),
-       DEVICE( ADAPTEC2,       ADAPTEC2_7892P, "AIC-7892"),
-       DEVICE( ADAPTEC2,       ADAPTEC2_7899A, "AIC-7899"),
-       DEVICE( ADAPTEC2,       ADAPTEC2_7899B, "AIC-7899"),
-       DEVICE( ADAPTEC2,       ADAPTEC2_7899D, "AIC-7899"),
-       DEVICE( ADAPTEC2,       ADAPTEC2_7899P, "AIC-7899"),
-       DEVICE( ATRONICS,       ATRONICS_2015,  "IDE-2015PL"),
-       DEVICE( TIGERJET,       TIGERJET_300,   "Tiger300 ISDN"),
-       DEVICE( ARK,            ARK_STING,      "Stingray"),
-       DEVICE( ARK,            ARK_STINGARK,   "Stingray ARK 2000PV"),
-       DEVICE( ARK,            ARK_2000MT,     "2000MT")
+#define VENDOR( vendor, name )         static const char __vendorstr_##vendor[] __initdata = name;
+#define ENDVENDOR()
+#define DEVICE( vendor, device, name )         static const char __devicestr_##vendor##device[] __initdata = name;
+#include "devlist.h"
+
+
+#define VENDOR( vendor, name )         static struct pci_device_info __devices_##vendor[] __initdata = {
+#define ENDVENDOR()                    };
+#define DEVICE( vendor, device, name ) { PCI_DEVICE_ID_##device, 0, __devicestr_##vendor##device },
+#include "devlist.h"
+
+static const struct pci_vendor_info __initdata pci_vendor_list[] = {
+#define VENDOR( vendor, name )         { PCI_VENDOR_ID_##vendor, sizeof(__devices_##vendor) / sizeof(struct pci_device_info), name, __devices_##vendor },
+#define ENDVENDOR()
+#define DEVICE( vendor, device, name )
+#include "devlist.h"
 };
 
+#define VENDORS (sizeof(pci_vendor_list)/sizeof(struct pci_vendor_info))
 
-/*
- * device_info[] is sorted so we can use binary search
- */
-static struct pci_dev_info * __init pci_lookup_dev(unsigned int vendor, unsigned int dev)
+void __init pci_namedevice(struct pci_dev *dev)
 {
-       int min = 0,
-           max = sizeof(dev_info)/sizeof(dev_info[0]) - 1;
-
-       for ( ; ; )
-       {
-           int i = (min + max) >> 1;
-           long order;
-
-           order = dev_info[i].vendor - (long) vendor;
-           if (!order)
-               order = dev_info[i].device - (long) dev;
+       const struct pci_vendor_info *vendor_p = pci_vendor_list;
+       int i = VENDORS;
        
-           if (order < 0)
-           {
-                   min = i + 1;
-                   if ( min > max )
-                      return 0;
-                   continue;
-           }
+       do {
+               if (vendor_p->vendor == dev->vendor)
+                       goto match_vendor;
+               vendor_p++;
+       } while (--i);
 
-           if (order > 0)
-           {
-                   max = i - 1;
-                   if ( min > max )
-                      return 0;
-                   continue;
-           }
-          
-           return & dev_info[ i ];
-       }
-}
+       /* Coulding find either the vendor nor the device */
+       sprintf(dev->name, "PCI<%d:%04x> %04x:%04x", dev->bus->number, dev->devfn, dev->vendor, dev->device);
+       return;
 
-__init void pci_namedevice(struct pci_dev *dev)
-{
-       struct pci_dev_info *info;
+       match_vendor: {
+               struct pci_device_info *device_p = vendor_p->devices;
+               int i = vendor_p->nr;
 
-       info =  pci_lookup_dev(dev->vendor, dev->device);
-       if (info) {
-               strcpy(dev->name, info->name);
+               while (i > 0) {
+                       if (device_p->device == dev->device)
+                               goto match_device;
+                       device_p++;
+                       i--;
+               }
+
+               /* Ok, found the vendor, but unknown device */
+               sprintf(dev->name, "PCI<%d:%04x> %04x:%04x (%s)", dev->bus->number, dev->devfn, dev->vendor, dev->device, vendor_p->name);
                return;
+
+               /* Full match */
+               match_device: {
+                       char *n = dev->name + sprintf(dev->name, "%s %s", vendor_p->name, device_p->name);
+                       int nr = device_p->seen + 1;
+                       device_p->seen = nr;
+                       if (nr > 1)
+                               sprintf(n, " (#%d)", nr);
+               }
        }
-       sprintf(dev->name, "PCI<%d:%04x> %04x:%04x", dev->bus->number, dev->devfn, dev->vendor, dev->device);
 }
 
 #ifdef CONFIG_PROC_FS
@@ -719,149 +178,6 @@ static const char *pci_strclass (unsigned int class)
        }
 }
 
-
-static const char *pci_strvendor(unsigned int vendor)
-{
-       switch (vendor) {
-             case PCI_VENDOR_ID_COMPAQ:        return "Compaq";
-             case PCI_VENDOR_ID_NCR:           return "NCR";
-             case PCI_VENDOR_ID_ATI:           return "ATI";
-             case PCI_VENDOR_ID_VLSI:          return "VLSI";
-             case PCI_VENDOR_ID_ADL:           return "Avance Logic";
-             case PCI_VENDOR_ID_NS:            return "NS";
-             case PCI_VENDOR_ID_TSENG:         return "Tseng'Lab";
-             case PCI_VENDOR_ID_WEITEK:        return "Weitek";
-             case PCI_VENDOR_ID_DEC:           return "DEC";
-             case PCI_VENDOR_ID_CIRRUS:        return "Cirrus Logic";
-             case PCI_VENDOR_ID_IBM:           return "IBM";
-             case PCI_VENDOR_ID_WD:            return "Western Digital";
-             case PCI_VENDOR_ID_AMD:           return "AMD";
-             case PCI_VENDOR_ID_TRIDENT:       return "Trident";
-             case PCI_VENDOR_ID_AI:            return "Acer Incorporated";
-             case PCI_VENDOR_ID_MATROX:        return "Matrox";
-             case PCI_VENDOR_ID_CT:            return "Chips & Technologies";
-             case PCI_VENDOR_ID_MIRO:          return "Miro";
-             case PCI_VENDOR_ID_NEC:           return "NEC";
-             case PCI_VENDOR_ID_FD:            return "Future Domain";
-             case PCI_VENDOR_ID_SI:            return "Silicon Integrated Systems";
-             case PCI_VENDOR_ID_HP:            return "Hewlett Packard";
-             case PCI_VENDOR_ID_PCTECH:        return "PCTECH";
-             case PCI_VENDOR_ID_DPT:           return "DPT";
-             case PCI_VENDOR_ID_OPTI:          return "OPTi";
-             case PCI_VENDOR_ID_SGS:           return "SGS Thomson";
-             case PCI_VENDOR_ID_BUSLOGIC:      return "BusLogic";
-             case PCI_VENDOR_ID_TI:            return "Texas Instruments";
-             case PCI_VENDOR_ID_OAK:           return "OAK";
-             case PCI_VENDOR_ID_WINBOND2:      return "Winbond";
-             case PCI_VENDOR_ID_MOTOROLA:      return "Motorola";
-             case PCI_VENDOR_ID_MOTOROLA_OOPS: return "Motorola";
-             case PCI_VENDOR_ID_PROMISE:       return "Promise Technology";
-             case PCI_VENDOR_ID_N9:            return "Number Nine";
-             case PCI_VENDOR_ID_UMC:           return "UMC";
-             case PCI_VENDOR_ID_X:             return "X TECHNOLOGY";
-             case PCI_VENDOR_ID_PICOP:         return "PicoPower";
-             case PCI_VENDOR_ID_APPLE:         return "Apple";
-             case PCI_VENDOR_ID_NEXGEN:        return "Nexgen";
-             case PCI_VENDOR_ID_QLOGIC:        return "Q Logic";
-             case PCI_VENDOR_ID_CYRIX:         return "Cyrix";
-             case PCI_VENDOR_ID_LEADTEK:       return "Leadtek Research";
-             case PCI_VENDOR_ID_CONTAQ:        return "Contaq";
-             case PCI_VENDOR_ID_FOREX:         return "Forex";
-             case PCI_VENDOR_ID_OLICOM:        return "Olicom";
-             case PCI_VENDOR_ID_SUN:           return "Sun Microsystems";
-             case PCI_VENDOR_ID_CMD:           return "CMD";
-             case PCI_VENDOR_ID_VISION:        return "Vision";
-             case PCI_VENDOR_ID_BROOKTREE:     return "Brooktree";
-             case PCI_VENDOR_ID_SIERRA:        return "Sierra";
-             case PCI_VENDOR_ID_ACC:           return "ACC MICROELECTRONICS";
-             case PCI_VENDOR_ID_WINBOND:       return "Winbond";
-             case PCI_VENDOR_ID_DATABOOK:      return "Databook";
-             case PCI_VENDOR_ID_PLX:           return "PLX";
-             case PCI_VENDOR_ID_MADGE:         return "Madge Networks";
-             case PCI_VENDOR_ID_3COM:          return "3Com";
-             case PCI_VENDOR_ID_SMC:           return "SMC";
-             case PCI_VENDOR_ID_AL:            return "Acer Labs";
-             case PCI_VENDOR_ID_MITSUBISHI:    return "Mitsubishi";
-             case PCI_VENDOR_ID_SURECOM:       return "Surecom";
-             case PCI_VENDOR_ID_NEOMAGIC:      return "Neomagic";
-             case PCI_VENDOR_ID_ASP:           return "Advanced System Products";
-             case PCI_VENDOR_ID_MACRONIX:      return "Macronix";
-             case PCI_VENDOR_ID_CERN:          return "CERN";
-             case PCI_VENDOR_ID_NVIDIA:        return "NVidia";
-             case PCI_VENDOR_ID_IMS:           return "IMS";
-             case PCI_VENDOR_ID_TEKRAM2:       return "Tekram";
-             case PCI_VENDOR_ID_TUNDRA:        return "Tundra";
-             case PCI_VENDOR_ID_AMCC:          return "AMCC";
-             case PCI_VENDOR_ID_INTERG:        return "Intergraphics";
-             case PCI_VENDOR_ID_REALTEK:       return "Realtek";
-             case PCI_VENDOR_ID_TRUEVISION:    return "Truevision";
-             case PCI_VENDOR_ID_INIT:          return "Initio Corp";
-             case PCI_VENDOR_ID_TTI:           return "Triones Technologies, Inc.";
-             case PCI_VENDOR_ID_VIA:           return "VIA Technologies";
-             case PCI_VENDOR_ID_SMC2:          return "SMC";
-             case PCI_VENDOR_ID_VORTEX:        return "VORTEX";
-             case PCI_VENDOR_ID_EF:            return "Efficient Networks";
-             case PCI_VENDOR_ID_FORE:          return "Fore Systems";
-             case PCI_VENDOR_ID_IMAGINGTECH:   return "Imaging Technology";
-             case PCI_VENDOR_ID_PHILIPS:       return "Philips";
-             case PCI_VENDOR_ID_CYCLONE:       return "Cyclone";
-             case PCI_VENDOR_ID_ALLIANCE:      return "Alliance";
-             case PCI_VENDOR_ID_VMIC:          return "VMIC";
-             case PCI_VENDOR_ID_DIGI:          return "Digi Intl.";
-             case PCI_VENDOR_ID_MUTECH:        return "Mutech";
-             case PCI_VENDOR_ID_RENDITION:     return "Rendition";
-             case PCI_VENDOR_ID_TOSHIBA:       return "Toshiba";
-             case PCI_VENDOR_ID_RICOH:         return "Ricoh";
-             case PCI_VENDOR_ID_ARTOP:         return "Artop Electronics";
-             case PCI_VENDOR_ID_ZEITNET:       return "ZeitNet";
-             case PCI_VENDOR_ID_OMEGA:         return "Omega Micro";
-             case PCI_VENDOR_ID_LITEON:        return "LiteOn";
-             case PCI_VENDOR_ID_NP:            return "Network Peripherals";
-             case PCI_VENDOR_ID_ATT:           return "Lucent (ex-AT&T) Microelectronics";
-             case PCI_VENDOR_ID_SPECIALIX:     return "Specialix";
-             case PCI_VENDOR_ID_AURAVISION:    return "Auravision";
-             case PCI_VENDOR_ID_IKON:          return "Ikon";
-             case PCI_VENDOR_ID_ZORAN:         return "Zoran";
-             case PCI_VENDOR_ID_KINETIC:       return "Kinetic";
-             case PCI_VENDOR_ID_COMPEX:        return "Compex";
-             case PCI_VENDOR_ID_RP:            return "Comtrol";
-             case PCI_VENDOR_ID_CYCLADES:      return "Cyclades";
-             case PCI_VENDOR_ID_ESSENTIAL:     return "Essential Communications";
-             case PCI_VENDOR_ID_O2:            return "O2 Micro";
-             case PCI_VENDOR_ID_3DFX:          return "3Dfx";
-             case PCI_VENDOR_ID_SIGMADES:      return "Sigma Designs";
-             case PCI_VENDOR_ID_AVM:           return "AVM";
-             case PCI_VENDOR_ID_CCUBE:         return "C-Cube";
-             case PCI_VENDOR_ID_DIPIX:         return "Dipix";
-             case PCI_VENDOR_ID_STALLION:      return "Stallion Technologies";
-             case PCI_VENDOR_ID_OPTIBASE:      return "Optibase";
-             case PCI_VENDOR_ID_SATSAGEM:      return "SatSagem";
-             case PCI_VENDOR_ID_HUGHES:        return "Hughes";
-             case PCI_VENDOR_ID_ENSONIQ:       return "Ensoniq";
-             case PCI_VENDOR_ID_ALTEON:        return "Alteon";
-             case PCI_VENDOR_ID_PICTUREL:      return "Picture Elements";
-             case PCI_VENDOR_ID_NVIDIA_SGS:    return "NVidia/SGS Thomson";
-             case PCI_VENDOR_ID_CBOARDS:       return "ComputerBoards";
-             case PCI_VENDOR_ID_SYMPHONY:      return "Symphony";
-             case PCI_VENDOR_ID_TEKRAM:        return "Tekram";
-             case PCI_VENDOR_ID_3DLABS:        return "3Dlabs";
-             case PCI_VENDOR_ID_AVANCE:        return "Avance";
-             case PCI_VENDOR_ID_NETVIN:        return "NetVin";
-             case PCI_VENDOR_ID_S3:            return "S3 Inc.";
-             case PCI_VENDOR_ID_DCI:           return "Decision Computer Int.";
-             case PCI_VENDOR_ID_GENROCO:       return "Genroco";
-             case PCI_VENDOR_ID_INTEL:         return "Intel";
-             case PCI_VENDOR_ID_KTI:           return "KTI";
-             case PCI_VENDOR_ID_ADAPTEC:       return "Adaptec";
-             case PCI_VENDOR_ID_ADAPTEC2:      return "Adaptec";
-             case PCI_VENDOR_ID_ATRONICS:      return "Atronics";
-             case PCI_VENDOR_ID_TIGERJET:      return "TigerJet";
-             case PCI_VENDOR_ID_ARK:           return "ARK Logic";
-             default:                          return "Unknown vendor";
-       }
-}
-
-
 /*
  * Convert some of the configuration space registers of the device at
  * address (bus,devfn) into a string (possibly several lines each).
@@ -896,9 +212,10 @@ static int sprint_dev_config(struct pci_dev *dev, char *buf, int size)
        if (len + 80 > size) {
                return -1;
        }
-       len += sprintf(buf + len, "    %s: %s %s (rev %d).\n      ",
-                      pci_strclass(class_rev >> 8), pci_strvendor(vendor),
-                      dev->name, class_rev & 0xff);
+       len += sprintf(buf + len, "    %s: %s (rev %d).\n      ",
+                      pci_strclass(class_rev >> 8),
+                      dev->name,
+                      class_rev & 0xff);
 
        switch (status & PCI_STATUS_DEVSEL_MASK) {
              case PCI_STATUS_DEVSEL_FAST:   str = "Fast devsel.  "; break;
index f471c80735409ea84e3846cc8feea943dada4c6f..b66baa972d42813c272713041d2a4f504690d310 100644 (file)
@@ -171,7 +171,6 @@ void __init pci_read_bases(struct pci_dev *dev, unsigned int howmany)
                do {
                        size <<= 1;
                } while (!(size & newval));
-               res->end = res->start + size - 1;
 
                /* 64-bit memory? */
                if ((l & (PCI_BASE_ADDRESS_SPACE | PCI_BASE_ADDRESS_MEM_TYPE_MASK))
@@ -192,6 +191,7 @@ void __init pci_read_bases(struct pci_dev *dev, unsigned int howmany)
 #endif
                        }
                }
+               res->end = res->start + size - 1;
                request_resource((l & PCI_BASE_ADDRESS_SPACE_IO) ? &ioport_resource : &iomem_resource, res);
        }
 }
index 30f844b9062db1cc5a7b4da17de366fcf5f9b6d7..b5c73c7c3af578c3e23e60db3f7c53e9b4200ea1 100644 (file)
@@ -9536,10 +9536,8 @@ aic7xxx_detect(Scsi_Host_Template *template)
           temp_p->pdev = pdev;
           temp_p->pci_bus = pdev->bus->number;
           temp_p->pci_device_fn = pdev->devfn;
-          temp_p->base = pdev->base_address[0];
-          temp_p->mbase = pdev->base_address[1];
-          temp_p->base &= PCI_BASE_ADDRESS_IO_MASK;
-          temp_p->mbase &= PCI_BASE_ADDRESS_MEM_MASK;
+          temp_p->base = pdev->resource[0].start;
+          temp_p->mbase = pdev->resource[1].start;
           current_p = list_p;
          while(current_p)
          {
index 70117fed491ab40b4fa22486fd2117205e280ee7..3734b98d58a57c7038a38451cb9318c54d56c7a7 100644 (file)
@@ -1036,13 +1036,6 @@ static __inline__ void __put_unused_buffer_head(struct buffer_head * bh)
        }
 }
 
-static void put_unused_buffer_head(struct buffer_head *bh)
-{
-       spin_lock(&unused_list_lock);
-       __put_unused_buffer_head(bh);
-       spin_unlock(&unused_list_lock);
-}
-
 /*
  * Reserve NR_RESERVED buffer heads for async IO requests to avoid
  * no-buffer-head deadlock.  Return NULL on failure; waiting for
index df9c9e95fd7eb447fd7d7f809384e96ad0b202ff..944ddcea3e59df03070194a96785f4558e332abb 100644 (file)
@@ -652,7 +652,7 @@ static struct proc_dir_entry proc_root_ioports = {
        0, &proc_array_inode_operations
 };
 static struct proc_dir_entry proc_root_iomem = {
-       PROC_MEMORY, 6, "iomem",
+       PROC_MEMORY, 5, "iomem",
        S_IFREG | S_IRUGO, 1, 0, 0,
        0, &proc_array_inode_operations
 };
index ce1964d096c1a766a307997e815ea68bffcef965..08ed89e185900e0203b9a70737c848fbbd94e4fb 100644 (file)
@@ -57,8 +57,7 @@ typedef int (*initcall_t)(void);
 extern initcall_t __initcall_start, __initcall_end;
 
 #define __initcall(fn)                                                         \
-       static __attribute__ ((unused,__section__ (".initcall.init")))          \
-               initcall_t __initcall_##fn = fn
+       static initcall_t __initcall_##fn __init_call = fn
 
 /*
  * Used for kernel command line parameter setup
@@ -70,20 +69,20 @@ struct kernel_param {
 
 extern struct kernel_param __setup_start, __setup_end;
 
-#define __setup(str, fn)                                                       \
-       static __attribute__ ((__section__ (".data.init")))                     \
-               char __setup_str_##fn[] = str;                                  \
-       static __attribute__ ((unused,__section__ (".setup.init")))             \
-               struct kernel_param __setup_##fn = { __setup_str_##fn, fn }
+#define __setup(str, fn)                                                               \
+       static char __setup_str_##fn[] __initdata = str;                                \
+       static struct kernel_param __setup_##fn __initsetup = { __setup_str_##fn, fn }
 
 /*
  * Mark functions and data as being only used at initialization
  * or exit time.
  */
-#define __init __attribute__ ((__section__ (".text.init")))
-#define __exit __attribute__ ((unused, __section__(".text.init")))
-#define __initdata __attribute__ ((__section__ (".data.init")))
-#define __exitdata __attribute__ ((unused, __section__ (".data.init")))
+#define __init         __attribute__ ((__section__ (".text.init")))
+#define __exit         __attribute__ ((unused, __section__(".text.init")))
+#define __initdata     __attribute__ ((__section__ (".data.init")))
+#define __exitdata     __attribute__ ((unused, __section__ (".data.init")))
+#define __initsetup    __attribute__ ((unused,__section__ (".setup.init")))
+#define __init_call    __attribute__ ((unused,__section__ (".initcall.init")))
 
 #define __initfunc(__arginit) \
        __arginit __init; \
index 03e19e1ec83f989aadc1352a4b2368a93a45ae90..28309dc8b1e3307878b5597b96803c87f5cb35cf 100644 (file)
@@ -19,6 +19,16 @@ struct resource {
        struct resource *parent, *sibling, *child;
 };
 
+/*
+ * PCI-like IO resources have these defined flags.
+ * The low four bits come directly from the PCI specs,
+ * the rest are extended sw flags..
+ */
+#define IORESOURCE_IOPORT      0x01    /* 0 - memory mapped, 1 - IO ports */
+#define IORESOURCE_MEMTYPE_MASK        0x06    /* PCI-specific mapping info */
+#define IORESOURCE_PREFETCH    0x08    /* No side effects */
+#define IORESOURCE_BUSY                0x10    /* Driver uses this resource */
+
 /* PC/ISA/whatever - the normal PC address spaces: IO and memory */
 extern struct resource ioport_resource;
 extern struct resource iomem_resource;
index 2e80c0ff2b8f4e8f2238b0b3d464ef24c78d4ac8..7f8f0ceae5fcd3f3ff0a1e73046f5fbf10aa564c 100644 (file)
 #define PCI_DEVICE_ID_3DFX_VOODOO      0x0001
 #define PCI_DEVICE_ID_3DFX_VOODOO2     0x0002
 #define PCI_DEVICE_ID_3DFX_BANSHEE      0x0003
+#define PCI_DEVICE_ID_3DFX_VOODOO3     0x0005
 
 #define PCI_VENDOR_ID_SIGMADES         0x1236
 #define PCI_DEVICE_ID_SIGMADES_6425    0x6401
@@ -1210,7 +1211,8 @@ struct pci_dev {
        unsigned int    hdr_type;       /* PCI header type */
        unsigned int    master : 1;     /* set if device is master capable */
 
-       char            name[32];
+       char            name[48];
+
        /*
         * In theory, the irq level can be read from configuration
         * space and all would be fine.  However, old PCI chips don't
index 5e5d9567b47abcbdee39535e8243b6708e31db5b..fe46e3d85a034bba157fe019630f15ebed87d79b 100644 (file)
 #include <linux/init.h>
 #include <linux/malloc.h>
 
+#include <asm/spinlock.h>
+
 struct resource ioport_resource = { "PCI IO", 0x0000, 0xFFFF };
 struct resource iomem_resource = { "PCI mem", 0x00000000, 0xFFFFFFFF };
 
+static rwlock_t resource_lock = RW_LOCK_UNLOCKED;
+
 /*
  * This generates reports for /proc/ioports and /proc/memory
  */
@@ -47,25 +51,30 @@ static char * do_resource_list(struct resource *entry, const char *fmt, int offs
 int get_resource_list(struct resource *root, char *buf, int size)
 {
        char *fmt;
+       int retval;
 
        fmt = "        %08lx-%08lx : %s\n";
        if (root == &ioport_resource)
                fmt = "        %04lx-%04lx : %s\n";
-       return do_resource_list(root->child, fmt, 8, buf, buf + size) - buf;
+       read_lock(&resource_lock);
+       retval = do_resource_list(root->child, fmt, 8, buf, buf + size) - buf;
+       read_unlock(&resource_lock);
+       return retval;
 }      
 
-int request_resource(struct resource *root, struct resource *new)
+/* Return the conflict entry if you can't request it */
+static struct resource * __request_resource(struct resource *root, struct resource *new)
 {
        unsigned long start = new->start;
        unsigned long end = new->end;
        struct resource *tmp, **p;
 
        if (end < start)
-               return -EINVAL;
+               return root;
        if (start < root->start)
-               return -EINVAL;
+               return root;
        if (end > root->end)
-               return -EINVAL;
+               return root;
        p = &root->child;
        for (;;) {
                tmp = *p;
@@ -73,15 +82,25 @@ int request_resource(struct resource *root, struct resource *new)
                        new->sibling = tmp;
                        *p = new;
                        new->parent = root;
-                       return 0;
+                       return NULL;
                }
                p = &tmp->sibling;
                if (tmp->end < start)
                        continue;
-               return -EBUSY;
+               return tmp;
        }
 }
 
+int request_resource(struct resource *root, struct resource *new)
+{
+       struct resource *conflict;
+
+       write_lock(&resource_lock);
+       conflict = __request_resource(root, new);
+       write_unlock(&resource_lock);
+       return conflict ? -EBUSY : 0;
+}
+
 int release_resource(struct resource *old)
 {
        struct resource *tmp, **p;
@@ -101,6 +120,18 @@ int release_resource(struct resource *old)
        return -EINVAL;
 }
 
+/*
+ * This is compatibility stuff for IO resources.
+ *
+ * Note how this, unlike the above, knows about
+ * the IO flag meanings (busy etc).
+ *
+ * Request-region creates a new busy region.
+ *
+ * Check-region returns non-zero if the area is already busy
+ *
+ * Release-region releases a matching busy region.
+ */
 struct resource * __request_region(struct resource *parent, unsigned long start, unsigned long n, const char *name)
 {
        struct resource *res = kmalloc(sizeof(*res), GFP_KERNEL);
@@ -110,21 +141,32 @@ struct resource * __request_region(struct resource *parent, unsigned long start,
                res->name = name;
                res->start = start;
                res->end = start + n - 1;
-               if (request_resource(parent, res) != 0) {
+               res->flags = IORESOURCE_BUSY;
+
+               write_lock(&resource_lock);
+
+               while (!(parent->flags & IORESOURCE_BUSY)) {
+                       struct resource *conflict;
+
+                       conflict = __request_resource(parent, res);
+                       if (!conflict)
+                               break;
+                       if (conflict != parent) {
+                               parent = conflict;
+                               continue;
+                       }
+
+                       /* Uhhuh, that didn't work out.. */
                        kfree(res);
                        res = NULL;
+                       break;
                }
+               write_unlock(&resource_lock);
        }
        return res;
 }
 
 /*
- * Compatibility cruft.
- *
- * Check-region returns non-zero if something already exists.
- *
- * Release-region releases an anonymous region that matches
- * the IO port range.
  */
 int __check_region(struct resource *parent, unsigned long start, unsigned long n)
 {
@@ -152,13 +194,20 @@ void __release_region(struct resource *parent, unsigned long start, unsigned lon
 
                if (!res)
                        break;
-               if (res->start == start && res->end == end) {
+               if (res->start <= start && res->end >= end) {
+                       if (!(res->flags & IORESOURCE_BUSY)) {
+                               p = &res->child;
+                               continue;
+                       }
+                       if (res->start != start || res->end != end)
+                               break;
                        *p = res->sibling;
                        kfree(res);
-                       break;
+                       return;
                }
                p = &res->sibling;
        }
+       printk("Trying to free nonexistent resource <%04lx-%04lx>\n", start, end);
 }
 
 /*