Date: Wed, 18 Jun 1997 09:33:55 +0200 (MET DST)
From: Geert Uytterhoeven <Geert.Uytterhoeven@cs.kuleuven.ac.be>
To: Jes Sorensen <Jes.Sorensen@cern.ch>,
        Linux/m68k <linux-m68k@phil.uni-sb.de>
Subject: Re: L68K: New Zorro II id scheme (was no subject *boggle*)
In-Reply-To: <19970617224425.45815@quango>
Sender: owner-linux-m68k@phil.uni-sb.de
Reply-To: linux-m68k@phil.uni-sb.de

On Tue, 17 Jun 1997, Chris Lawrence wrote:
> On Jun 16, Geert Uytterhoeven wrote
> > Anyone with a _real_ objection against my new Zorro scheme (cfr. the patches I
> > posted against various 2.1.x source trees before)??
> 
> Obviously I haven't tested it recently, but the new Zorro scheme seemed fine
> on my A4000 (which has a GVP device, the most likely thing to break it).

And here are the patches (for 2.1.42/m68k-current)...

--- linux-2.1.42/arch/m68k/amiga/zorro.c.orig	Mon Jun 16 21:18:24 1997
+++ linux-2.1.42/arch/m68k/amiga/zorro.c	Wed Jun 18 08:45:32 1997
@@ -13,998 +13,1105 @@
 #include <linux/types.h>
 #include <linux/kernel.h>
 #include <linux/string.h>
-#include <linux/init.h>
-#include <linux/zorro.h>
 #include <asm/setup.h>
 #include <asm/bitops.h>
 #include <asm/amigahw.h>
+#include <linux/zorro.h>
 
 
 #ifdef CONFIG_ZORRO
 
-   /*
-    *    Zorro Expansion Device Manufacturers and Products
-    */
+    /*
+     *  Zorro Expansion Device Manufacturers and Products
+     */
 
 struct Manufacturer {
-   char *Name;
-   u_short ID;
-   u_short NumProd;
-   struct Product *Products;
+    const char *Name;
+    u_short Manuf;
+    u_short NumProd;
+    const struct Product *Products;
 };
 
 struct Product {
-   char *Name;
-   u_char ID;
+    const char *Name;
+    u_char Class;
+    u_char Prod;
 };
 
 struct GVP_Product {
-   char *Name;
-   enum GVP_ident ID;
+    const char *Name;
+    u_char Class;
+    u_char EPC;
 };
 
 
-   /*
-    *    Macro's to make life easier
-    */
-
-#define BEGIN_PROD(id) static struct Product Prod_##id[] = {
-#define PROD(name, id) \
-   { name, PROD_##id },
-
-#define BEGIN_GVP_PROD static struct GVP_Product Ext_Prod_GVP[] = {
-#define GVP_PROD(name, id) \
-   { name, GVP_##id },
+    /*
+     *  Macro's to make life easier
+     */
+
+#define ARRAYSIZE(x)		(sizeof(x)/sizeof(*(x)))
+
+#define BEGIN_PROD(id) \
+    static struct Product Prod_##id[] = {
+#define PROD(name, class, id) \
+    { name, ZORRO_CLASS_##class, ZORRO_PROD(ZORRO_PROD_##id) },
+
+#define BEGIN_GVP_PROD \
+    static struct GVP_Product Ext_Prod_GVP[] = {
+#define GVP_PROD(name, class, id) \
+    { name, ZORRO_CLASS_##class, ZORRO_EPC(ZORRO_PROD_##id) },
 
-#define BEGIN_MANUF static struct Manufacturer Manufacturers[] = {
+#define BEGIN_MANUF \
+    static struct Manufacturer Manufacturers[] = {
 #define MANUF(name, id) \
-   { name, MANUF_##id, sizeof(Prod_##id)/sizeof(struct Product), Prod_##id },
+    { name, ZORRO_MANUF_##id, ARRAYSIZE(Prod_##id), Prod_##id },
 
-#define END };
+#define END \
+    };
 
 
-   /*
-    *    Known Zorro Expansion Devices
-    *
-    *    Warning: Make sure the Manufacturer and Product names are not too
-    *             long (max. 80 characters per board identification line)
-    */
+    /*
+     *  Recognized Zorro Expansion Devices
+     */
 
-BEGIN_PROD(PACIFIC)
-   PROD("SE 2000 A500", SE_2000_A500)
-   PROD("HD Controller", PACIFIC_HD)
+BEGIN_PROD(PACIFIC_PERIPHERALS)
+    PROD("SE 2000 A500", HD, PACIFIC_PERIPHERALS_SE_2000_A500)
+    PROD(NULL, HD, PACIFIC_PERIPHERALS_HD)
 END
 
-BEGIN_PROD(KUPKE)
-   PROD("Golem RAM Box 2MB", GOLEM_BOX_2)
+BEGIN_PROD(KUPKE_1)
+    PROD("Golem RAM Box 2MB", RAM, KUPKE_GOLEM_RAM_BOX_2MB)
 END
 
 BEGIN_PROD(MEMPHIS)
-   PROD("Stormbringer", STORMBRINGER)
+    PROD("Stormbringer", TURBO, MEMPHIS_STORMBRINGER)
 END
 
 BEGIN_PROD(3_STATE)
-   PROD("Megamix 2000 RAM", MEGAMIX_2000)
+    PROD("Megamix 2000", RAM, 3_STATE_MEGAMIX_2000)
 END
 
-BEGIN_PROD(COMMODORE2)
-   PROD("A2088 XT Bridgeboard", A2088)
-   PROD("A2286 AT Bridgeboard", A2286)
-   PROD("A4091 SCSI Controller", A4091_2)
-   PROD("A2386-SX Bridgeboard", A2386SX)
-END
-
-BEGIN_PROD(COMMODORE)
-   PROD("A2090/A2090A HD Controller", A2090A)
-   PROD("A590 SCSI Controller", A590)
-   PROD("A2091 SCSI Controller", A2091)
-   PROD("A2090B 2090 Autoboot Card", A2090B)
-   PROD("A2060 Arcnet Card", ARCNET)
-   PROD("A2052/58.RAM | 590/2091.RAM", CBMRAM)
-   PROD("A560 Memory Module", A560RAM)
-   PROD("A2232 Serial Prototype", A2232PROTO)
-   PROD("A2232 Serial Production", A2232)
-   PROD("A2620 68020/RAM Card", A2620)
-   PROD("A2630 68030/RAM Card", A2630)
-   PROD("A4091 SCSI Controller", A4091)
-   PROD("A2065 Ethernet Card", A2065_2)
-   PROD("Romulator Card", ROMULATOR)
-   PROD("A3000 Test Fixture", A3000TESTFIX)
-   PROD("A2386-SX Bridgeboard", A2386SX_2)
-   PROD("A2065 Ethernet Card", A2065)
-END
-
-BEGIN_PROD(COMMODORE3)
-   PROD("A2090A Combitec/MacroSystem", A2090A_CM)
-END
-
-BEGIN_PROD(KCS)
-   PROD("KCS Power PC Board", POWER_BOARD)
-END
-
-BEGIN_PROD(CARDCO)
-   PROD("Kronos 2000 SCSI Controller", KRONOS_2000_SCSI)
-   PROD("A1000 SCSI Controller", A1000_SCSI)
-   PROD("Escort SCSI Controller", ESCORT_SCSI)
-   PROD("Cardco A2410 Hires Graphics card", CC_A2410)
+BEGIN_PROD(COMMODORE_BRAUNSCHWEIG)
+    PROD("A2088 XT/A2286 AT", BRIDGE, CBM_A2088_A2286)
+    PROD("A2286 AT", BRIDGE, CBM_A2286)
+    PROD("A4091", SCSI, CBM_A4091_1)
+    PROD("A2386-SX", BRIDGE, CBM_A2386SX_1)
+END
+
+BEGIN_PROD(COMMODORE_WEST_CHESTER_1)
+    PROD("A2090/A2090A", SCSI, CBM_A2090A)
+    PROD("A590/A2091", SCSI, CBM_A590_A2091_1)
+    PROD("A590/A2091", SCSI, CBM_A590_A2091_2)
+    PROD("A2090B 2090 Autoboot", SCSI, CBM_A2090B)
+    PROD("A2060", ARCNET, CBM_A2060)
+    PROD("A590/A2052/A2058/A2091", RAM, CBM_A590_A2052_A2058_A2091)
+    PROD("A560", RAM, CBM_A560_RAM)
+    PROD("A2232 Prototype", MULTIIO, CBM_A2232_PROTOTYPE)
+    PROD("A2232", MULTIIO, CBM_A2232)
+    PROD("A2620 68020/RAM", TURBO_RAM, CBM_A2620)
+    PROD("A2630 68030/RAM", TURBO_RAM, CBM_A2630)
+    PROD("A4091", SCSI, CBM_A4091_2)
+    PROD("A2065", ETHERNET, CBM_A2065_1)
+    PROD("Romulator Card", UNKNOWN, CBM_ROMULATOR)
+    PROD("A3000 Test Fixture", MISC, CBM_A3000_TEST_FIXTURE)
+    PROD("A2386-SX", BRIDGE, CBM_A2386SX_2)
+    PROD("A2065", ETHERNET, CBM_A2065_2)
+END
+
+BEGIN_PROD(COMMODORE_WEST_CHESTER_2)
+    PROD("A2090A Combitec/MacroSystem", SCSI, CBM_A2090A_CM)
+END
+
+BEGIN_PROD(KOLFF_COMPUTER_SUPPLIES)
+    PROD("KCS Power PC Board", BRIDGE, KCS_POWER_PC_BOARD)
+END
+
+BEGIN_PROD(CARDCO_1)
+    PROD("Kronos 2000", SCSI, CARDCO_KRONOS_2000_1)
+    PROD("A1000", SCSI, CARDCO_A1000_1)
+    PROD("Escort", SCSI, CARDCO_ESCORT)
+    PROD("A2410 HiRes", GFX, CARDCO_A2410)
 END
 
 BEGIN_PROD(A_SQUARED)
-   PROD("Live! 2000", LIVE_2000)
+    PROD("Live! 2000", UNKNOWN, A_SQUARED_LIVE_2000)
 END
 
-BEGIN_PROD(COMSPEC)
-   PROD("AX2000", AX2000)
+BEGIN_PROD(COMSPEC_COMMUNICATIONS)
+    PROD("AX2000", UNKNOWN, COMSPEC_COMMUNICATIONS_AX2000)
 END
 
-BEGIN_PROD(ANAKIN)
-   PROD("Easyl Tablet", EASYL)
+BEGIN_PROD(ANAKIN_RESEARCH)
+    PROD("Easyl", TABLET, ANAKIN_RESEARCH_EASYL)
 END
 
 BEGIN_PROD(MICROBOTICS)
-   PROD("StarBoard II", STARBOARD_II)
-   PROD("StarDrive", STARDRIVE)
-   PROD("8-Up (Rev A)", 8_UP_A)
-   PROD("8-Up (Rev Z)", 8_UP_Z)
-   PROD("Delta Card RAM", DELTA_RAM)
-   PROD("8-Star RAM", 8_STAR_RAM)
-   PROD("8-Star", 8_STAR)
-   PROD("VXL RAM", VXL_RAM)
-   PROD("VXL-30 Turbo Board", VXL_30)
-   PROD("Delta Card", DELTA)
-   PROD("MBX 1200", MBX_1200)
-   PROD("Hardframe 2000", HARDFRAME_2000)
-   PROD("MBX 1200", MBX_1200_2)
+    PROD("StarBoard II", RAM, MICROBOTICS_STARBOARD_II)
+    PROD("StarDrive", HD, MICROBOTICS_STARDRIVE)
+    PROD("8-Up (Rev A)", UNKNOWN, MICROBOTICS_8_UP_A)
+    PROD("8-Up (Rev Z)", UNKNOWN, MICROBOTICS_8_UP_Z)
+    PROD("Delta", RAM, MICROBOTICS_DELTA_RAM)
+    PROD("8-Star", RAM, MICROBOTICS_8_STAR_RAM)
+    PROD("8-Star", MISC, MICROBOTICS_8_STAR)
+    PROD("VXL RAM*32", RAM, MICROBOTICS_VXL_RAM_32)
+    PROD("VXL-30", TURBO, MICROBOTICS_VXL_68030)
+    PROD("Delta", MISC, MICROBOTICS_DELTA)
+    PROD("MBX 1200/1200z", RAM, MICROBOTICS_MBX_1200_1200Z_RAM)
+    PROD("Hardframe 2000", SCSI, MICROBOTICS_HARDFRAME_2000)
+    PROD("MBX 1200/1200z", MISC, MICROBOTICS_MBX_1200_1200Z)
 END
 
-BEGIN_PROD(ACCESS)
+BEGIN_PROD(ACCESS_ASSOCIATES)
 END
 
-BEGIN_PROD(EXPANSION_TECH)
+BEGIN_PROD(EXPANSION_TECHNOLOGIES)
 END
 
 BEGIN_PROD(ASDG)
-   PROD("Memory Expansion", ASDG_MEMORY)
-   PROD("Memory Expansion", ASDG_MEMORY_2)
-   PROD("Lan Rover Ethernet", LAN_ROVER)
-   PROD("Twin-X Serial Card", TWIN_X)
+    PROD(NULL, RAM, ASDG_MEMORY_1)
+    PROD(NULL, RAM, ASDG_MEMORY_2)
+    PROD("Lan Rover", ETHERNET, ASDG_LAN_ROVER)
+    PROD("Twin-X", SERIAL, ASDG_TWIN_X)
 END
 
-BEGIN_PROD(IMTRONICS)
-   PROD("Hurricane 2800 68030", HURRICANE_2800)
-   PROD("Hurricane 2800 68030", HURRICANE_2800_2)
+BEGIN_PROD(IMTRONICS_1)
+    PROD("Hurricane 2800 68030", TURBO, IMTRONICS_HURRICANE_2800_68030_1)
+    PROD("Hurricane 2800 68030", TURBO, IMTRONICS_HURRICANE_2800_68030_2)
 END
 
-BEGIN_PROD(UNIV_OF_LOWELL)
-   PROD("A2410 Hires Graphics Card", A2410)
+BEGIN_PROD(CBM_UNIVERSITY_OF_LOWELL)
+    PROD("A2410 HiRes", GFX, CBM_A2410)
 END
 
 BEGIN_PROD(AMERISTAR)
-   PROD("A2065 Ethernet Card", AMERISTAR2065)
-   PROD("A560 Arcnet Card", A560)
-   PROD("A4066 Ethernet Card", A4066)
+    PROD("A2065", ETHERNET, AMERISTAR_A2065)
+    PROD("A560", ARCNET, AMERISTAR_A560)
+    PROD("A4066", ETHERNET, AMERISTAR_A4066)
 END
 
 BEGIN_PROD(SUPRA)
-   PROD("SupraDrive 4x4 SCSI Controller", SUPRADRIVE_4x4)
-   PROD("2000 DMA HD", SUPRA_2000)
-   PROD("500 HD/RAM", SUPRA_500)
-   PROD("500XP/2000 RAM", SUPRA_500XP)
-   PROD("500RX/2000 RAM", SUPRA_500RX)
-   PROD("2400zi Modem", SUPRA_2400ZI)
-   PROD("Wordsync SCSI Controller", WORDSYNC)
-   PROD("Wordsync II SCSI Controller", WORDSYNC_II)
-   PROD("2400zi+ Modem", SUPRA_2400ZIPLUS)
+    PROD("SupraDrive 4x4", SCSI, SUPRA_SUPRADRIVE_4x4)
+    PROD("2000 DMA", HD, SUPRA_2000_DMA)
+    PROD("500", HD_RAM, SUPRA_500)
+    PROD("500XP/2000", RAM, SUPRA_500XP_2000_RAM)
+    PROD("500RX/2000", RAM, SUPRA_500RX_2000_RAM)
+    PROD("2400zi", MODEM, SUPRA_2400ZI)
+    PROD("500XP/SupraDrive WordSync", SCSI, SUPRA_500XP_SUPRADRIVE_WORDSYNC)
+    PROD("SupraDrive WordSync II", SCSI, SUPRA_SUPRADRIVE_WORDSYNC_II)
+    PROD("2400zi+", MODEM, SUPRA_2400ZIPLUS)
 END
 
-BEGIN_PROD(CSA)
-   PROD("Magnum 40 SCSI Controller", MAGNUM)
-   PROD("12 Gauge SCSI Controller", 12GAUGE)
+BEGIN_PROD(COMPUTER_SYSTEMS_ASSOCIATES)
+    PROD("Magnum 40", TURBO_SCSI, CSA_MAGNUM)
+    PROD("12 Gauge", SCSI, CSA_12_GAUGE)
 END
 
-BEGIN_PROD(MTEC2)
-   PROD("AT500 RAM", AT500_2)
+BEGIN_PROD(M_TECH)
+    PROD("AT500", RAM, MTEC_AT500_1)
 END
 
-BEGIN_PROD(GVP3)
-   PROD("Impact SCSI/Memory", IMPACT)
+BEGIN_PROD(GREAT_VALLEY_PRODUCTS_1)
+    PROD("Impact Series I", SCSI_RAM, GVP_IMPACT_SERIES_I)
 END
 
 BEGIN_PROD(BYTEBOX)
-   PROD("A500", BYTEBOX_A500)
+    PROD("A500", UNKNOWN, BYTEBOX_A500)
 END
 
-BEGIN_PROD(POWER_COMPUTING)
-   PROD("DKB 3128 RAM", DKB_3128)
-   PROD("Rapid Fire SCSI Controller", RAPID_FIRE)
-   PROD("DKB 1202 RAM", DKB_1202)
-   PROD("DKB Cobra / Viper II Turbo Board", VIPER_II_COBRA)
-   PROD("WildFire 060 Turbo Board", WILDFIRE_060)
-   PROD("WildFire 060 Turbo Board", WILDFIRE_060_2)
-END
-
-BEGIN_PROD(GVP)
-   PROD("Impact Series-I SCSI 4K", IMPACT_I_4K)
-   PROD("Impact Series-I SCSI 16K/2", IMPACT_I_16K_2)
-   PROD("Impact Series-I SCSI 16K/3", IMPACT_I_16K_3)
-   PROD("Impact 3001 IDE", IMPACT_3001_IDE)
-/* PROD("Impact 3001 RAM", IMPACT_3001_RAM) */
-   PROD("Generic GVP product", GVP)
-   PROD("Series II SCSI Controller", GVPIISCSI)
-   PROD("Series II SCSI Controller", GVPIISCSI_2)
-   PROD("Series II RAM", GVPIIRAM)
-   PROD("A2000 68030 Turbo Board", GVP_A2000_030)
-/* PROD("Impact 3001 IDE", IMPACT_3001_IDE_2) */
-   PROD("GFORCE 040 with SCSI Controller", GFORCE_040_SCSI)
-   PROD("IV-24 Graphics Board", GVPIV_24)
-   PROD("GFORCE 040 Turbo Board", GFORCE_040)
-/* PROD("I/O Extender", GVPIO_EXT) */
-END
-
-BEGIN_GVP_PROD
-   GVP_PROD("GFORCE 040", GFORCE_040)
-   GVP_PROD("GFORCE 040 with SCSI controller", GFORCE_040_SCSI)
-   GVP_PROD("A1291 SCSI controller", A1291_SCSI)
-   GVP_PROD("COMBO 030 R4", COMBO_R4)
-   GVP_PROD("COMBO 030 R4 with SCSI controller", COMBO_R4_SCSI)
-   GVP_PROD("Phone Pak", PHONEPAK)
-   GVP_PROD("IO-Extender", IOEXT)
-   GVP_PROD("GFORCE 030", GFORCE_030)
-   GVP_PROD("GFORCE 030 with SCSI controller", GFORCE_030_SCSI)
-   GVP_PROD("A530", A530)
-   GVP_PROD("A530 with SCSI", A530_SCSI)
-   GVP_PROD("COMBO 030 R3", COMBO_R3)
-   GVP_PROD("COMBO 030 R3 with SCSI controller", COMBO_R3_SCSI)
-   GVP_PROD("SERIES-II SCSI controller", SERIESII)
+BEGIN_PROD(DKB_POWER_COMPUTING)
+    PROD("DKM 3128", RAM, DKB_POWER_COMPUTING_DKM_3128)
+    PROD("Rapid Fire", SCSI, DKB_POWER_COMPUTING_RAPID_FIRE)
+    PROD("DKM 1202", FPU_RAM, DKB_POWER_COMPUTING_DKM_1202)
+    PROD("Cobra/Viper II 68EC030", TURBO, DKB_POWER_COMPUTING_COBRA_VIPER_II_68EC030)
+    PROD("WildFire 060", TURBO, DKB_POWER_COMPUTING_WILDFIRE_060_1)
+    PROD("WildFire 060", TURBO, DKB_POWER_COMPUTING_WILDFIRE_060_2)
+END
+
+BEGIN_PROD(GREAT_VALLEY_PRODUCTS_2)
+    PROD("Impact Series I (4K)", SCSI, GVP_IMPACT_SERIES_I_4K)
+    PROD("Impact Series I (16K/2)", SCSI, GVP_IMPACT_SERIES_I_16K_2)
+    PROD("Impact Series I (16K/2)", SCSI, GVP_IMPACT_SERIES_I_16K_3)
+    PROD("Impact 3001", IDE, GVP_IMPACT_3001_IDE_1)
+    PROD("Impact 3001", RAM, GVP_IMPACT_3001_RAM)
+    PROD("Impact Series II", RAM, GVP_IMPACT_SERIES_II_RAM_1)
+/*  PROD(NULL, UNKNOWN, GVP_EPC_BASE) */
+    PROD("Impact 3001", IDE, GVP_IMPACT_3001_IDE_2)
+/*  PROD("A2000 030", TURBO, GVP_A2000_030) */
+/*  PROD("GForce 040", TURBO_SCSI, GFORCE_040_SCSI_2) */
+    PROD("GForce 040/060", TURBO_SCSI, GVP_GFORCE_040_060)
+    PROD("Impact Vision 24", GFX, GVP_IMPACT_VISION_24)
+    PROD("GForce 040", TURBO, GVP_GFORCE_040_2)
+END
+
+BEGIN_GVP_PROD					/* ZORRO_PROD_GVP_EPC_BASE */
+   GVP_PROD("GForce 040", TURBO, GVP_GFORCE_040_1)
+   GVP_PROD("GForce 040", TURBO_SCSI, GVP_GFORCE_040_SCSI_1)
+   GVP_PROD("A1291", SCSI, GVP_A1291)
+   GVP_PROD("Combo 030 R4", TURBO, GVP_COMBO_030_R4)
+   GVP_PROD("Combo 030 R4", TURBO_SCSI, GVP_COMBO_030_R4_SCSI)
+   GVP_PROD("Phone Pak", UNKNOWN, GVP_PHONEPAK)
+   GVP_PROD("IO-Extender", MULTIIO, GVP_IO_EXTENDER)
+   GVP_PROD("GForce 030", TURBO, GVP_GFORCE_030)
+   GVP_PROD("GForce 030", TURBO_SCSI, GVP_GFORCE_030_SCSI)
+   GVP_PROD("A530", TURBO, GVP_A530)
+   GVP_PROD("A530", TURBO_SCSI, GVP_A530_SCSI)
+   GVP_PROD("Combo 030 R3", TURBO, GVP_COMBO_030_R3)
+   GVP_PROD("Combo 030 R3", TURBO_SCSI, GVP_COMBO_030_R3_SCSI)
+   GVP_PROD("Series-II", SCSI, GVP_SERIES_II)
 END
 
 BEGIN_PROD(SYNERGY)
 END
 
 BEGIN_PROD(XETEC)
-   PROD("FastCard SCSI Controller", FASTCARD_SCSI)
-   PROD("FastCard RAM", FASTCARD_RAM)
+    PROD("FastCard", SCSI, XETEC_FASTCARD)
+    PROD("FastCard", RAM, XETEC_FASTCARD_RAM)
 END
 
-BEGIN_PROD(PPI)
-   PROD("Mercury Turbo Board", MERCURY)
-   PROD("PP&S A3000 68040 Turbo Board", PPS_A3000_040)
-   PROD("PP&S A2000 68040 Turbo Board", PPS_A2000_040)
-   PROD("Zeus SCSI Controller", ZEUS)
-   PROD("PP&S A500 68040 Turbo Board", PPS_A500_040)
+BEGIN_PROD(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS)
+    PROD("Mercury", TURBO, PPS_MERCURY)
+    PROD("A3000 68040", TURBO, PPS_A3000_68040)
+    PROD("A2000 68040", TURBO, PPS_A2000_68040)
+    PROD("Zeus", SCSI, PPS_ZEUS)
+    PROD("A500 68040", TURBO, PPS_A500_68040)
 END
 
 BEGIN_PROD(XEBEC)
 END
 
 BEGIN_PROD(SPIRIT)
-   PROD("HDA 506 Harddisk", HDA_506)
-   PROD("OctaByte RAM", OCTABYTE_RAM)
+    PROD("HDA 506", HD, SPIRIT_HDA_506)
+    PROD("OctaByte", RAM, SPIRIT_OCTABYTE)
 END
 
-BEGIN_PROD(BSC)
-   PROD("ALF 3 SCSI Controller", ALF_3_SCSI)
+BEGIN_PROD(BSC_ALFADATA_1)
+    PROD("ALF 3", SCSI, BSC_ALF_3_1)
 END
 
-BEGIN_PROD(BSC3)
-   PROD("ALF 2 SCSI Controller", ALF_2_SCSI)
-   PROD("ALF 2 SCSI Controller", ALF_2_SCSI_2)
-   PROD("ALF 3 SCSI Controller", ALF_3_SCSI_2)
+BEGIN_PROD(BSC_ALFADATA_2)
+    PROD("ALF 2", SCSI, BSC_ALF_2_1)
+    PROD("ALF 2", SCSI, BSC_ALF_2_2)
+    PROD("ALF 3", SCSI, BSC_ALF_3_2)
 END
 
-BEGIN_PROD(C_LTD)
-   PROD("Kronos SCSI Controller", KRONOS_SCSI)
-   PROD("A1000 SCSI Controller", A1000_SCSI_2)
+BEGIN_PROD(CARDCO_2)
+    PROD("Kronos", SCSI, CARDCO_KRONOS_2000_2)
+    PROD("A1000", SCSI, CARDCO_A1000_2)
 END
 
 BEGIN_PROD(JOCHHEIM)
-   PROD("Jochheim RAM", JOCHHEIM_RAM)
+    PROD(NULL, RAM, JOCHHEIM_RAM)
 END
 
-BEGIN_PROD(CHECKPOINT)
-   PROD("Serial Solution", SERIAL_SOLUTION)
+BEGIN_PROD(CHECKPOINT_TECHNOLOGIES)
+    PROD("Serial Solution", SERIAL, CHECKPOINT_TECHNOLOGIES_SERIAL_SOLUTION)
 END
 
 BEGIN_PROD(ICD)
-   PROD("Advantage 2000 SCSI Controller", ADVANTAGE_2000)
+    PROD("Advantage 2000", SCSI, ICD_ADVANTAGE_2000)
 END
 
-BEGIN_PROD(KUPKE2)
-   PROD("Golem SCSI-II Controller", KUPKE_SCSI_II)
-   PROD("Golem Box", GOLEM_BOX)
-   PROD("030/882 Turbo Board", KUPKE_TURBO)
-   PROD("Golem SCSI/AT Controller", KUPKE_SCSI_AT)
+BEGIN_PROD(KUPKE_2)
+    PROD("Golem SCSI-II", SCSI, KUPKE_SCSI_II)
+    PROD("Golem Box", UNKNOWN, KUPKE_GOLEM_BOX)
+    PROD("030/882", TURBO, KUPKE_030_882)
+    PROD("Golem", SCSI, KUPKE_SCSI_AT)
 END
 
-BEGIN_PROD(GVP4)
-   PROD("A2000-RAM8/2", A2000_RAM8)
+BEGIN_PROD(GREAT_VALLEY_PRODUCTS_3)
+    PROD("A2000-RAM8/2", MISC, GVP_A2000_RAM8)
+    PROD("Impact Series II", RAM, GVP_IMPACT_SERIES_II_RAM_2)
 END
 
-BEGIN_PROD(INTERWORKS_NET)
+BEGIN_PROD(INTERWORKS_NETWORK)
 END
 
-BEGIN_PROD(HARDITAL)
-   PROD("TQM 68030+68882 Turbo Board", TQM)
+BEGIN_PROD(HARDITAL_SYNTHESIS)
+    PROD("TQM 68030+68882", TURBO, HARDITAL_SYNTHESIS_TQM_68030_68882)
 END
 
-BEGIN_PROD(BSC2)
-   PROD("Oktagon 2008 SCSI Controller", OKTAGON_SCSI)
-   PROD("Tandem AT-2008/508 IDE Controller", TANDEM)
-   PROD("Alpha RAM 1200", ALPHA_RAM_1200)
-   PROD("Oktagon 2008 RAM", OKTAGON_RAM)
-   PROD("Alfa Data MultiFace I", MULTIFACE_I)
-   PROD("Alfa Data MultiFace II", MULTIFACE_II)
-   PROD("Alfa Data MultiFace III", MULTIFACE_III)
-   PROD("Framebuffer", BSC_FRAEMBUFFER)
-   PROD("Graffiti Graphics Board (RAM)", GRAFFITI_RAM)
-   PROD("Graffiti Graphics Board (REG)", GRAFFITI_REG)
-   PROD("ISDN MasterCard", ISDN_MASTERCARD)
-   PROD("ISDN MasterCard II", ISDN_MASTERCARD_2)
+BEGIN_PROD(BSC_ALFADATA_3)
+    PROD("Oktagon 2008", SCSI, BSC_OKTAGON_2008)
+    PROD("Tandem AT-2008/508", IDE, BSC_TANDEM_AT_2008_508)
+    PROD("Alpha RAM 1200", RAM, BSC_ALFA_RAM_1200)
+    PROD("Oktagon 2008", RAM, BSC_OKTAGON_2008_RAM)
+    PROD("MultiFace I", MULTIIO, BSC_MULTIFACE_I)
+    PROD("MultiFace II", MULTIIO, BSC_MULTIFACE_II)
+    PROD("MultiFace III", MULTIIO, BSC_MULTIFACE_III)
+    PROD("Framebuffer", MISC, BSC_FRAMEBUFFER)
+    PROD("Graffiti", GFXRAM, BSC_GRAFFITI_RAM)
+    PROD("Graffiti", GFX, BSC_GRAFFITI_REG)
+    PROD("ISDN MasterCard", ISDN, BSC_ISDN_MASTERCARD)
+    PROD("ISDN MasterCard II", ISDN, BSC_ISDN_MASTERCARD_II)
 END
 
-BEGIN_PROD(ADV_SYS_SOFT)
-   PROD("Nexus SCSI Controller", NEXUS_SCSI)
-   PROD("Nexus RAM", NEXUS_RAM)
+BEGIN_PROD(ADVANCED_STORAGE_SYSTEMS)
+    PROD("Nexus", SCSI, ADVANCED_STORAGE_SYSTEMS_NEXUS)
+    PROD("Nexus", RAM, ADVANCED_STORAGE_SYSTEMS_NEXUS_RAM)
 END
 
 BEGIN_PROD(IMPULSE)
-   PROD("FireCracker 24", FIRECRACKER_24)
+    PROD("FireCracker 24", GFX, IMPULSE_FIRECRACKER_24)
 END
 
 BEGIN_PROD(IVS)
-   PROD("GrandSlam PIC 2 RAM", GRANDSLAM_PIC_2)
-   PROD("GrandSlam PIC 1 RAM", GRANDSLAM_PIC_1)
-   PROD("OverDrive HD", IVS_OVERDRIVE)
-   PROD("Trumpcard Classic SCSI Controller", TRUMPCARD_CLASSIC)
-   PROD("Trumpcard Pro SCSI Controller", TRUMPCARD_PRO)
-   PROD("Meta-4 RAM", META_4)
-   PROD("Wavetools Sound Board", WAVETOOLS)
-   PROD("Vector SCSI Controller", VECTOR)
-   PROD("Vector SCSI Controller", VECTOR_2)
+    PROD("GrandSlam PIC 2", RAM, IVS_GRANDSLAM_PIC_2)
+    PROD("GrandSlam PIC 1", RAM, IVS_GRANDSLAM_PIC_1)
+    PROD("OverDrive", HD, IVS_OVERDRIVE)
+    PROD("TrumpCard Classic", SCSI, IVS_TRUMPCARD_CLASSIC)
+    PROD("TrumpCard Pro/GrandSlam", SCSI, IVS_TRUMPCARD_PRO_GRANDSLAM)
+    PROD("Meta-4", RAM, IVS_META_4)
+    PROD("Wavetools", AUDIO, IVS_WAVETOOLS)
+    PROD("Vector", SCSI, IVS_VECTOR_1)
+    PROD("Vector", SCSI, IVS_VECTOR_2)
 END
 
-BEGIN_PROD(VECTOR)
-   PROD("Connection Serial IO", CONNECTION)
+BEGIN_PROD(VECTOR_1)
+    PROD("Connection", MULTIIO, VECTOR_CONNECTION_1)
 END
 
 BEGIN_PROD(XPERT_PRODEV)
-   PROD("Visiona Graphics Board (RAM)", VISIONA_RAM)
-   PROD("Visiona Graphics Board (REG)", VISIONA_REG)
-   PROD("Merlin Graphics Board (RAM)", MERLIN_RAM)
-   PROD("Merlin Graphics Board (REG)", MERLIN_REG)
-   PROD("Merlin Graphics Board (REG)", MERLIN_REG_2)
+    PROD("Visiona", GFXRAM, XPERT_PRODEV_VISIONA_RAM)
+    PROD("Visiona", GFX, XPERT_PRODEV_VISIONA_REG)
+    PROD("Merlin", GFXRAM, XPERT_PRODEV_MERLIN_RAM)
+    PROD("Merlin", GFX, XPERT_PRODEV_MERLIN_REG_1)
+    PROD("Merlin", GFX, XPERT_PRODEV_MERLIN_REG_2)
 END
 
 BEGIN_PROD(HYDRA_SYSTEMS)
-   PROD("Amiganet Board", AMIGANET)
+    PROD("Amiganet", ETHERNET, HYDRA_SYSTEMS_AMIGANET)
 END
 
-BEGIN_PROD(SUNRIZE)
-   PROD("AD516 Audio", AD516)
+BEGIN_PROD(SUNRIZE_INDUSTRIES)
+    PROD("AD1012", AUDIO, SUNRIZE_INDUSTRIES_AD1012)
+    PROD("AD516", AUDIO, SUNRIZE_INDUSTRIES_AD516)
+    PROD("DD512", AUDIO, SUNRIZE_INDUSTRIES_DD512)
 END
 
 BEGIN_PROD(TRICERATOPS)
-   PROD("Multi I/O Board", TRICERATOPS)
+    PROD(NULL, MULTIIO, TRICERATOPS_MULTI_IO)
 END
 
 BEGIN_PROD(APPLIED_MAGIC)
-   PROD("DMI Resolver Graphics Board", DMI_RESOLVER)
-   PROD("Digital Broadcaster", DIGITAL_BCASTER)
+    PROD("DMI Resolver", GFX, APPLIED_MAGIC_DMI_RESOLVER)
+    PROD("Digital Broadcaster", VIDEO, APPLIED_MAGIC_DIGITAL_BROADCASTER)
 END
 
 BEGIN_PROD(GFX_BASE)
-   PROD("GDA-1 Graphics Board (RAM)", GDA_1_RAM)
-   PROD("GDA-1 Graphics Board (REG)", GDA_1_REG)
+    PROD("GDA-1 VRAM", GFX, GFX_BASE_GDA_1_VRAM)
+    PROD("GDA-1", GFX, GFX_BASE_GDA_1)
 END
 
 BEGIN_PROD(ROCTEC)
-   PROD("RH 800C Hard Disk Controller", RH_800C)
-   PROD("RH 800C RAM", RH_800C_RAM)
+    PROD("RH 800C", HD, ROCTEC_RH_800C)
+    PROD("RH 800C", RAM, ROCTEC_RH_800C_RAM)
 END
 
-BEGIN_PROD(HELFRICH1)
-   PROD("Rainbow3 Graphics Board", RAINBOW3)
+BEGIN_PROD(KATO)
+    PROD("Melody MPEG", AUDIO, KATO_MELODY)
+    PROD("Rainbow III", GFX, HELFRICH_RAINBOW_III)	/* ID clash!! */
 END
 
-BEGIN_PROD(SW_RESULT_ENTS)
-   PROD("GG2+ Bus Converter", GG2PLUS)
+BEGIN_PROD(SOFTWARE_RESULTS_ENTERPRISES)
+    PROD("Golden Gate 2 Bus+", BRIDGE, SOFTWARE_RESULTS_ENTERPRISES_GOLDEN_GATE_2_BUS_PLUS)
 END
 
 BEGIN_PROD(MASOBOSHI)
-   PROD("Master Card RAM", MASTER_CARD_RAM)
-   PROD("Master Card SCSI Controller", MASTER_CARD_SCSI)
-   PROD("MVD 819", MVD_819)
+    PROD("MasterCard SC201", RAM, MASOBOSHI_MASTER_CARD_SC201)
+    PROD("MasterCard MC702", SCSI_IDE, MASOBOSHI_MASTER_CARD_MC702)
+    PROD("MVD 819", UNKNOWN, MASOBOSHI_MVD_819)
 END
 
 BEGIN_PROD(VILLAGE_TRONIC)
-   PROD("Domino Graphics Board (RAM)", DOMINO_RAM)
-   PROD("Domino Graphics Board (REG)", DOMINO_REG)
-   PROD("Picasso II Graphics Board (RAM)", PICASSO_II_RAM)
-   PROD("Picasso II Graphics Board (REG)", PICASSO_II_REG)
-   PROD("Picasso II/II+ Graphics Board (Segmented Mode)", PICASSO_II_SEGM)
-   PROD("Picassio IV Graphics Board", PICASSO_IV)
-   PROD("Picassio IV Graphics Board", PICASSO_IV_2)
-   PROD("Picassio IV Graphics Board", PICASSO_IV_3)
-   PROD("Picassio IV Graphics Board", PICASSO_IV_4)
-   PROD("Ariadne Ethernet Card", ARIADNE)
+    PROD("Domino", GFXRAM, VILLAGE_TRONIC_DOMINO_RAM)
+    PROD("Domino", GFX, VILLAGE_TRONIC_DOMINO_REG)
+    PROD("Picasso II/II+", GFXRAM, VILLAGE_TRONIC_PICASSO_II_II_PLUS_RAM)
+    PROD("Picasso II/II+", GFX, VILLAGE_TRONIC_PICASSO_II_II_PLUS_REG)
+    PROD("Picasso II (Segmented Mode)", GFX, VILLAGE_TRONIC_PICASSO_II_SEGMENTED_MODE)
+    PROD("Picasso IV", GFX, VILLAGE_TRONIC_PICASSO_IV_1)
+    PROD("Picasso IV", GFX, VILLAGE_TRONIC_PICASSO_IV_2)
+    PROD("Picasso IV", GFX, VILLAGE_TRONIC_PICASSO_IV_3)
+    PROD("Picasso IV", GFX, VILLAGE_TRONIC_PICASSO_IV_4)
+    PROD("Ariadne", ETHERNET_PARALLEL, VILLAGE_TRONIC_ARIADNE)
 END
 
-BEGIN_PROD(UTILITIES_ULTD)
-   PROD("Emplant Deluxe SCSI Controller", EMPLANT_DELUXE)
-   PROD("Emplant Deluxe SCSI Controller", EMPLANT_DELUXE2)
+BEGIN_PROD(UTILITIES_UNLIMITED)
+    PROD("Emplant Deluxe", MACEMU, UTILITIES_UNLIMITED_EMPLANT_DELUXE)
+    PROD("Emplant Deluxe", MACEMU, UTILITIES_UNLIMITED_EMPLANT_DELUXE2)
 END
 
 BEGIN_PROD(AMITRIX)
-   PROD("Multi-IO", AMITRIX_MULTI_IO)
-   PROD("CD-RAM Memory", AMITRIX_CD_RAM)
+    PROD(NULL, MULTIIO, AMITRIX_MULTI_IO)
+    PROD("CD-RAM", RAM, AMITRIX_CD_RAM)
 END
 
 BEGIN_PROD(ARMAX)
-   PROD("OmniBus Graphics Board", OMNIBUS)
+    PROD("OmniBus", GFX, ARMAX_OMNIBUS)
 END
 
 BEGIN_PROD(NEWTEK)
-   PROD("VideoToaster", VIDEOTOASTER)
+    PROD("VideoToaster", VIDEO, NEWTEK_VIDEOTOASTER)
 END
 
-BEGIN_PROD(MTEC)
-   PROD("AT500 IDE Controller", AT500)
-   PROD("68030 Turbo Board", MTEC_68030)
-   PROD("68020i Turbo Board", MTEC_68020I)
-   PROD("A1200 T68030/42 RTC Turbo Board", MTEC_T1230)
-   PROD("8MB RAM", MTEC_RAM)
-   PROD("Viper Mk V Turbo Board", VIPER_MK5_TURBO)
-   PROD("Viper Mk V SCSI Controller", VIPER_MK5_SCSI)
+BEGIN_PROD(M_TECH_GERMANY)
+    PROD("AT500", IDE, MTEC_AT500_2)
+    PROD("68030", TURBO, MTEC_68030)
+    PROD("68020i", TURBO, MTEC_68020I)
+    PROD("A1200 T68030 RTC", TURBO, MTEC_A1200_T68030_RTC)
+    PROD("Viper Mk V", TURBO, MTEC_VIPER_MK_V)
+    PROD("8MB", RAM, MTEC_8_MB_RAM)
+    PROD("Viper Mk V", SCSI, MTEC_VIPER_MK_V_SCSI)
 END
 
-BEGIN_PROD(GVP2)
-   PROD("EGS 28/24 Spectrum Graphics Board (RAM)", SPECTRUM_RAM)
-   PROD("EGS 28/24 Spectrum Graphics Board (REG)", SPECTRUM_REG)
+BEGIN_PROD(GREAT_VALLEY_PRODUCTS_4)
+    PROD("EGS 28/24 Spectrum", GFX, GVP_EGS_28_24_SPECTRUM_REG)
+    PROD("EGS 28/24 Spectrum", GFXRAM, GVP_EGS_28_24_SPECTRUM_RAM)
 END
 
-BEGIN_PROD(HELFRICH2)
-   PROD("Piccolo Graphics Board (RAM)", PICCOLO_RAM)
-   PROD("Piccolo Graphics Board (REG)", PICCOLO_REG)
-   PROD("PeggyPlus MPEG Decoder Board", PEGGY_PLUS)
-   PROD("VideoCruncher", VIDEOCRUNCHER)
-   PROD("SD64 Graphics Board (RAM)", SD64_RAM)
-   PROD("SD64 Graphics Board (REG)", SD64_REG)
+BEGIN_PROD(APOLLO_1)
+    PROD("A1200", FPU_RAM, APOLLO_A1200)
 END
 
-BEGIN_PROD(MACROSYSTEMS)
-   PROD("Warp Engine 40xx SCSI Controller", WARP_ENGINE)
+BEGIN_PROD(HELFRICH_2)
+    PROD("Piccolo", GFXRAM, HELFRICH_PICCOLO_RAM)
+    PROD("Piccolo", GFX, HELFRICH_PICCOLO_REG)
+    PROD("PeggyPlus MPEG", VIDEO, HELFRICH_PEGGY_PLUS_MPEG)
+    PROD("VideoCruncher", VIDEO, HELFRICH_VIDEOCRUNCHER)
+    PROD("SD64", GFXRAM, HELFRICH_SD64_RAM)
+    PROD("SD64", GFX, HELFRICH_SD64_REG)
 END
 
-BEGIN_PROD(ELBOX)
-   PROD("Elbox 1200/4 RAM", ELBOX_1200)
+BEGIN_PROD(MACROSYSTEMS_USA)
+    PROD("Warp Engine 40xx", TURBO_SCSI, MACROSYSTEMS_WARP_ENGINE_40xx)
 END
 
-BEGIN_PROD(HARMS_PROF)
-   PROD("030 plus", HARMS_030_PLUS)
-   PROD("3500 Turbo board", 3500_TURBO)
+BEGIN_PROD(ELBOX_COMPUTER)
+    PROD("1200/4", RAM, ELBOX_COMPUTER_1200_4)
+END
+
+BEGIN_PROD(HARMS_PROFESSIONAL)
+    PROD("030 Plus", TURBO, HARMS_PROFESSIONAL_030_PLUS)
+    PROD("3500", TURBO, HARMS_PROFESSIONAL_3500)
 END
 
 BEGIN_PROD(MICRONIK)
-   PROD("RCA 120 RAM", RCA_120)
+    PROD("RCA 120", RAM, MICRONIK_RCA_120)
 END
 
-BEGIN_PROD(MEGA_MICRO)
-   PROD("SCRAM 500 SCSI Controller", SCRAM_500_SCSI)
-   PROD("SCRAM 500 RAM", SCRAM_500_RAM)
+BEGIN_PROD(MEGAMICRO)
+    PROD("SCRAM 500", SCSI, MEGAMICRO_SCRAM_500)
+    PROD("SCRAM 500", RAM, MEGAMICRO_SCRAM_500_RAM)
 END
 
-BEGIN_PROD(IMTRONICS2)
-   PROD("Hurricane 2800 68030", HURRICANE_2800_3)
-   PROD("Hurricane 2800 68030", HURRICANE_2800_4)
+BEGIN_PROD(IMTRONICS_2)
+    PROD("xHurricane 2800 68030", TURBO, IMTRONICS_HURRICANE_2800_68030_3)
+    PROD("Hurricane 2800 68030", TURBO, IMTRONICS_HURRICANE_2800_68030_4)
 END
 
-BEGIN_PROD(KUPKE3)
-   PROD("Golem HD 3000", GOLEM_3000)
+BEGIN_PROD(KUPKE_3)
+    PROD("Golem HD 3000", HD, KUPKE_GOLEM_HD_3000)
 END
 
 BEGIN_PROD(ITH)
-   PROD("ISDN-Master II", ISDN_MASTER_II)
+    PROD("ISDN-Master II", ISDN, ITH_ISDN_MASTER_II)
 END
 
 BEGIN_PROD(VMC)
-   PROD("ISDN Blaster Z2", ISDN_BLASTER_Z2)
-   PROD("HyperCom 4", HYPERCOM_4)
+    PROD("ISDN Blaster Z2", ISDN, VMC_ISDN_BLASTER_Z2)
+    PROD("HyperCom 4", MULTIIO, VMC_HYPERCOM_4)
 END
 
 BEGIN_PROD(INFORMATION)
-   PROD("ISDN Engine I", ISDN_ENGINE_I)
+    PROD("ISDN Engine I", ISDN, INFORMATION_ISDN_ENGINE_I)
 END
 
 BEGIN_PROD(VORTEX)
-   PROD("Golden Gate 80386SX Board", GOLDEN_GATE_386SX)
-   PROD("Golden Gate RAM", GOLDEN_GATE_RAM)
-   PROD("Golden Gate 80486 Board", GOLDEN_GATE_486)
+    PROD("Golden Gate 80386SX", BRIDGE, VORTEX_GOLDEN_GATE_80386SX)
+    PROD("Golden Gate", RAM, VORTEX_GOLDEN_GATE_RAM)
+    PROD("Golden Gate 80486", BRIDGE, VORTEX_GOLDEN_GATE_80486)
 END
 
-BEGIN_PROD(DATAFLYER)
-   PROD("4000SX SCSI Controller", DATAFLYER_4000SXS)
-   PROD("4000SX RAM", DATAFLYER_4000SXR)
+BEGIN_PROD(EXPANSION_SYSTEMS)
+    PROD("DataFlyer 4000SX", SCSI, EXPANSION_SYSTEMS_DATAFLYER_4000SX)
+    PROD("DataFlyer 4000SX", RAM, EXPANSION_SYSTEMS_DATAFLYER_4000SX_RAM)
 END
 
 BEGIN_PROD(READYSOFT)
-   PROD("AMax II/IV", AMAX)
+    PROD("AMax II/IV", MACEMU, READYSOFT_AMAX_II_IV)
 END
 
 BEGIN_PROD(PHASE5)
-   PROD("Blizzard RAM", BLIZZARD_RAM)
-   PROD("Blizzard", BLIZZARD)
-   PROD("Blizzard 1220-IV Turbo Board", BLIZZARD_1220_IV)
-   PROD("FastLane RAM", FASTLANE_RAM)
-   PROD("FastLane/Blizzard 1230-II/CyberSCSI", FASTLANE_SCSI)
-   PROD("Blizzard 1220/CyberStorm", CYBERSTORM_SCSI)
-   PROD("Blizzard 1230-III Turbo Board", BLIZZARD_1230_III)
-   PROD("Blizzard 1230-IV/1260 Turbo Board", BLIZZARD_1230_IV)
-   PROD("Blizzard 2060 SCSI Controller", BLIZZARD_2060SCSI)
-   PROD("CyberStorm Mk II", CYBERSTORM_II)
-   PROD("CyberVision64 Graphics Board", CYBERVISION)
-   PROD("CyberVision64-3D Graphics Board Prototype)", CYBERVISION3D_PRT)
-   PROD("CyberVision64-3D Graphics Board", CYBERVISION3D)
+    PROD("Blizzard 1-8MB", RAM, PHASE5_BLIZZARD_1_8MB)
+    PROD("Blizzard", TURBO, PHASE5_BLIZZARD)
+    PROD("Blizzard 1220-IV", TURBO, PHASE5_BLIZZARD_1220_IV)
+    PROD("FastLane Z3", RAM, PHASE5_FASTLANE_Z3_RAM)
+    PROD("Blizzard 1230-II/Fastlane Z3/CyberSCSI/CyberStorm060", TURBO_SCSI, PHASE5_BLIZZARD_1230_II_FASTLANE_Z3_CYBERSCSI_CYBERSTORM060)
+    PROD("Blizzard 1220/CyberStorm", TURBO_SCSI, PHASE5_BLIZZARD_1220_CYBERSTORM)
+    PROD("Blizzard 1230", TURBO, PHASE5_BLIZZARD_1230)
+    PROD("Blizzard 1230-IV/1260", TURBO, PHASE5_BLIZZARD_1230_IV_1260)
+    PROD("Blizzard 2060", TURBO, PHASE5_BLIZZARD_2060)
+    PROD("CyberStorm Mk II", FLASHROM, PHASE5_CYBERSTORM_MK_II)
+    PROD("CyberVision64", GFX, PHASE5_CYBERVISION64)
+    PROD("CyberVision64-3D Prototype", GFX, PHASE5_CYBERVISION64_3D_PROTOTYPE)
+    PROD("CyberVision64-3D", GFX, PHASE5_CYBERVISION64_3D)
 END
 
 BEGIN_PROD(DPS)
-   PROD("Personal Animation Recorder", DPS_PAR)
+    PROD("Personal Animation Recorder", VIDEO, DPS_PERSONAL_ANIMATION_RECORDER)
 END
 
-BEGIN_PROD(APOLLO2)
-   PROD("A620 68020 Accelerator", A620)
-   PROD("A620 68020 Accelerator", A620_2)
+BEGIN_PROD(APOLLO_2)
+    PROD("A620 68020", TURBO, APOLLO_A620_68020_1)
+    PROD("A620 68020", TURBO, APOLLO_A620_68020_2)
 END
 
-BEGIN_PROD(APOLLO)
-   PROD("AT-Apollo", AT_APOLLO)
-   PROD("Turbo Board", APOLLO_TURBO)
+BEGIN_PROD(APOLLO_3)
+    PROD("AT-Apollo", UNKNOWN, APOLLO_AT_APOLLO)
+    PROD("1230/1240/1260/2030/4040/4060", TURBO, APOLLO_1230_1240_1260_2030_4040_4060)
 END
 
-BEGIN_PROD(PETSOFF)
-   PROD("Delfina DSP", DELFINA)
+BEGIN_PROD(PETSOFF_LP)
+    PROD("Delfina", DSP, PETSOFF_LP_DELFINA)
 END
 
 BEGIN_PROD(UWE_GERLACH)
-   PROD("RAM/ROM", UG_RAM_ROM)
+    PROD("RAM/ROM", MISC, UWE_GERLACH_RAM_ROM)
 END
 
-BEGIN_PROD(MACROSYSTEMS2)
-   PROD("Maestro", MAESTRO)
-   PROD("VLab", VLAB)
-   PROD("Maestro Pro", MAESTRO_PRO)
-   PROD("Retina Z2 Graphics Board", RETINA_Z2)
-   PROD("MultiEvolution", MULTI_EVOLUTION)
-   PROD("Toccata Sound Board", TOCCATA)
-   PROD("Retina Z3 Graphics Board", RETINA_Z3)
-   PROD("VLab Motion", VLAB_MOTION)
-   PROD("Altais Graphics Board", ALTAIS)
-   PROD("Falcon '040 Turbo Board", FALCON_040)
+BEGIN_PROD(MACROSYSTEMS_GERMANY)
+    PROD("Maestro", AUDIO, MACROSYSTEMS_MAESTRO)
+    PROD("VLab", VIDEO, MACROSYSTEMS_VLAB)
+    PROD("Maestro Pro", AUDIO, MACROSYSTEMS_MAESTRO_PRO)
+    PROD("Retina", GFX, MACROSYSTEMS_RETINA)
+    PROD("MultiEvolution", SCSI, MACROSYSTEMS_MULTI_EVOLUTION)
+    PROD("Toccata", AUDIO, MACROSYSTEMS_TOCCATA)
+    PROD("Retina Z3", GFX, MACROSYSTEMS_RETINA_Z3)
+    PROD("VLab Motion", VIDEO, MACROSYSTEMS_VLAB_MOTION)
+    PROD("Altais", GFX, MACROSYSTEMS_ALTAIS)
+    PROD("Falcon '040", TURBO, MACROSYSTEMS_FALCON_040)
 END
 
 BEGIN_PROD(COMBITEC)
 END
 
-BEGIN_PROD(SKI)
-   PROD("MAST Fireball SCSI Controller", MAST_FIREBALL)
-   PROD("SCSI / Dual Serial", SKI_SCSI_SERIAL)
+BEGIN_PROD(SKI_PERIPHERALS)
+    PROD("MAST Fireball", SCSI, SKI_PERIPHERALS_MAST_FIREBALL)
+    PROD("SCSI/Dual Serial", SCSI_SERIAL, SKI_PERIPHERALS_SCSI_DUAL_SERIAL)
 END
 
 BEGIN_PROD(CAMERON)
-   PROD("Personal A4", PERSONAL_A4)
+    PROD("Personal A4", SCANNER, CAMERON_PERSONAL_A4)
 END
 
 BEGIN_PROD(REIS_WARE)
-   PROD("Handyscanner", RW_HANDYSCANNER)
+    PROD("Handyscanner", SCANNER, REIS_WARE_HANDYSCANNER)
+END
+
+BEGIN_PROD(HACKER)	/* Unused */
 END
 
 
 BEGIN_MANUF
-   MANUF("Pacific Peripherals", PACIFIC)
-   MANUF("Kupke", KUPKE)
-   MANUF("Memphis", MEMPHIS)
-   MANUF("3-State", 3_STATE)
-   MANUF("Commodore", COMMODORE2)
-   MANUF("Commodore", COMMODORE)
-   MANUF("Commodore", COMMODORE3)
-   MANUF("Kolff Computer Supplies", KCS)
-   MANUF("Cardco", CARDCO)
-   MANUF("A-Squared", A_SQUARED)
-   MANUF("ComSpec Communications", COMSPEC)
-   MANUF("Anakin", ANAKIN)
-   MANUF("MicroBotics", MICROBOTICS)
-   MANUF("Access Associates", ACCESS)
-   MANUF("Expansion Technologies", EXPANSION_TECH)
-   MANUF("ASDG", ASDG)
-   MANUF("Imtronics", IMTRONICS)
-   MANUF("University of Lowell", UNIV_OF_LOWELL)
-   MANUF("Ameristar", AMERISTAR)
-   MANUF("Supra", SUPRA)
-   MANUF("Computer Systems Ass.", CSA)
-   MANUF("M-Tech", MTEC2)
-   MANUF("Great Valley Products", GVP3)
-   MANUF("ByteBox", BYTEBOX)
-   MANUF("Power Computing", POWER_COMPUTING)
-   MANUF("Great Valley Products", GVP)
-   MANUF("Synergy", SYNERGY)
-   MANUF("Xetec", XETEC)
-   MANUF("Progressive Peripherals", PPI)
-   MANUF("Xebec", XEBEC)
-   MANUF("Spirit", SPIRIT)
-   MANUF("BSC", BSC)
-   MANUF("BSC", BSC3)
-   MANUF("C Ltd.", C_LTD)
-   MANUF("Jochheim", JOCHHEIM)
-   MANUF("Checkpoint Technologies", CHECKPOINT)
-   MANUF("ICD", ICD)
-   MANUF("Kupke", KUPKE2)
-   MANUF("Great Valley Products", GVP4)
-   MANUF("Interworks Network", INTERWORKS_NET)
-   MANUF("Hardital Synthesis", HARDITAL)
-   MANUF("BSC", BSC2)
-   MANUF("Advanced Systems & Software", ADV_SYS_SOFT)
-   MANUF("Impulse", IMPULSE)
-   MANUF("IVS", IVS)
-   MANUF("Vector", VECTOR)
-   MANUF("XPert/ProDev", XPERT_PRODEV)
-   MANUF("Hydra Systems", HYDRA_SYSTEMS)
-   MANUF("Sunrize Industries", SUNRIZE)
-   MANUF("Triceratops", TRICERATOPS)
-   MANUF("Applied Magic", APPLIED_MAGIC)
-   MANUF("GFX-Base", GFX_BASE)
-   MANUF("RocTec", ROCTEC)
-   MANUF("Helfrich", HELFRICH1)
-   MANUF("Software Result Enterprises", SW_RESULT_ENTS)
-   MANUF("Masoboshi", MASOBOSHI)
-   MANUF("Village Tronic", VILLAGE_TRONIC)
-   MANUF("Utilities Unlimited", UTILITIES_ULTD)
-   MANUF("Amitrix", AMITRIX)
-   MANUF("ArMax", ARMAX)
-   MANUF("NewTek", NEWTEK)
-   MANUF("M-Tech", MTEC)
-   MANUF("Great Valley Products", GVP2)
-   MANUF("Helfrich", HELFRICH2)
-   MANUF("MacroSystems", MACROSYSTEMS)
-   MANUF("ElBox Computer", ELBOX)
-   MANUF("Harms Professional", HARMS_PROF)
-   MANUF("Micronik", MICRONIK)
-   MANUF("MegaMicro", MEGA_MICRO)
-   MANUF("Imtronics", IMTRONICS2)
-   MANUF("Kupke", KUPKE3)
-   MANUF("ITH", ITH)
-   MANUF("VMC", VMC)
-   MANUF("Information", INFORMATION)
-   MANUF("Vortex", VORTEX)
-   MANUF("DataFlyer", DATAFLYER)
-   MANUF("ReadySoft", READYSOFT)
-   MANUF("Phase5", PHASE5)
-   MANUF("DPS", DPS)
-   MANUF("Apollo", APOLLO2)
-   MANUF("Apollo", APOLLO)
-   MANUF("Petsoff LP", PETSOFF)
-   MANUF("Uwe Gerlach", UWE_GERLACH)
-   MANUF("MacroSystems", MACROSYSTEMS2)
-   MANUF("Combitec", COMBITEC)
-   MANUF("SKI Peripherals", SKI)
-   MANUF("Cameron", CAMERON)
-   MANUF("Reis-Ware", REIS_WARE)
-END
+    MANUF("Pacific Peripherals", PACIFIC_PERIPHERALS)
+    MANUF("Kupke", KUPKE_1)
+    MANUF("Memphis", MEMPHIS)
+    MANUF("3-State", 3_STATE)
+    MANUF("Commodore Braunschweig", COMMODORE_BRAUNSCHWEIG)
+    MANUF("Commodore West Chester", COMMODORE_WEST_CHESTER_1)
+    MANUF("Commodore West Chester", COMMODORE_WEST_CHESTER_2)
+    MANUF("Kolff Computer Supplies", KOLFF_COMPUTER_SUPPLIES)
+    MANUF("Cardco Ltd.", CARDCO_1)
+    MANUF("A-Squared", A_SQUARED)
+    MANUF("Comspec Communications", COMSPEC_COMMUNICATIONS)
+    MANUF("Anakin Research", ANAKIN_RESEARCH)
+    MANUF("Microbotics", MICROBOTICS)
+    MANUF("Access Associates", ACCESS_ASSOCIATES)
+    MANUF("Expansion Technologies", EXPANSION_TECHNOLOGIES)
+    MANUF("ASDG", ASDG)
+    MANUF("Imtronics", IMTRONICS_1)
+    MANUF("Commodore/University of Lowell", CBM_UNIVERSITY_OF_LOWELL)
+    MANUF("Ameristar", AMERISTAR)
+    MANUF("Supra", SUPRA)
+    MANUF("Computer Systems Assosiates", COMPUTER_SYSTEMS_ASSOCIATES)
+    MANUF("M-Tech", M_TECH)
+    MANUF("Great Valley Products", GREAT_VALLEY_PRODUCTS_1)
+    MANUF("ByteBox", BYTEBOX)
+    MANUF("DKB/Power Computing", DKB_POWER_COMPUTING)
+    MANUF("Great Valley Products", GREAT_VALLEY_PRODUCTS_2)
+    MANUF("Synergy", SYNERGY)
+    MANUF("Xetec", XETEC)
+    MANUF("Progressive Peripherals & Systems", PROGRESSIVE_PERIPHERALS_AND_SYSTEMS)
+    MANUF("Xebec", XEBEC)
+    MANUF("Spirit", SPIRIT)
+    MANUF("BSC/Alfadata", BSC_ALFADATA_1)
+    MANUF("BSC/Alfadata", BSC_ALFADATA_2)
+    MANUF("Cardco Ltd.", CARDCO_2)
+    MANUF("Jochheim", JOCHHEIM)
+    MANUF("Checkpoint Technologies", CHECKPOINT_TECHNOLOGIES)
+    MANUF("ICD", ICD)
+    MANUF("Kupke", KUPKE_2)
+    MANUF("Great Valley Products", GREAT_VALLEY_PRODUCTS_3)
+    MANUF("Interworks Network", INTERWORKS_NETWORK)
+    MANUF("Hardital Synthesis", HARDITAL_SYNTHESIS)
+    MANUF("BSC/Alfadata", BSC_ALFADATA_3)
+    MANUF("Advanced Storage Systems", ADVANCED_STORAGE_SYSTEMS)
+    MANUF("Impulse", IMPULSE)
+    MANUF("IVS", IVS)
+    MANUF("Vector", VECTOR_1)
+    MANUF("XPert ProDev", XPERT_PRODEV)
+    MANUF("Hydra Systems", HYDRA_SYSTEMS)
+    MANUF("Sunrize Industries", SUNRIZE_INDUSTRIES)
+    MANUF("Triceratops", TRICERATOPS)
+    MANUF("Applied Magic Inc.", APPLIED_MAGIC)
+    MANUF("GFX-Base", GFX_BASE)
+    MANUF("RocTec", ROCTEC)
+    MANUF("Kato", KATO)
+    MANUF("Software Results Enterprises", SOFTWARE_RESULTS_ENTERPRISES)
+    MANUF("Masoboshi", MASOBOSHI)
+    MANUF("Village Tronic", VILLAGE_TRONIC)
+    MANUF("Utilities Unlimited", UTILITIES_UNLIMITED)
+    MANUF("Amitrix", AMITRIX)
+    MANUF("ArMax", ARMAX)
+    MANUF("NewTek", NEWTEK)
+    MANUF("M-Tech Germany", M_TECH_GERMANY)
+    MANUF("Great Valley Products", GREAT_VALLEY_PRODUCTS_4)
+    MANUF("Apollo", APOLLO_1)
+    MANUF("Ingenieurbüro Helfrich", HELFRICH_2)
+    MANUF("MacroSystems USA", MACROSYSTEMS_USA)
+    MANUF("ElBox Computer", ELBOX_COMPUTER)
+    MANUF("Harms Professional", HARMS_PROFESSIONAL)
+    MANUF("Micronik", MICRONIK)
+    MANUF("MegaMicro", MEGAMICRO)
+    MANUF("Imtronics", IMTRONICS_2)
+    MANUF("Kupke", KUPKE_3)
+    MANUF("ITH", ITH)
+    MANUF("VMC", VMC)
+    MANUF("Information", INFORMATION)
+    MANUF("Vortex", VORTEX)
+    MANUF("Expansion Systems", EXPANSION_SYSTEMS)
+    MANUF("ReadySoft", READYSOFT)
+    MANUF("Phase 5", PHASE5)
+    MANUF("DPS", DPS)
+    MANUF("Apollo", APOLLO_2)
+    MANUF("Apollo", APOLLO_3)
+    MANUF("Petsoff LP", PETSOFF_LP)
+    MANUF("Uwe Gerlach", UWE_GERLACH)
+    MANUF("MacroSystems Germany", MACROSYSTEMS_GERMANY)
+    MANUF("Combitec", COMBITEC)
+    MANUF("SKI Peripherals", SKI_PERIPHERALS)
+    MANUF("Cameron", CAMERON)
+    MANUF("Reis-Ware", REIS_WARE)
+    MANUF("Hacker Test Board", HACKER)	/* Unused */
+END
+
+#define NUM_MANUF		(ARRAYSIZE(Manufacturers))
+#define NUM_GVP_PROD		(ARRAYSIZE(Ext_Prod_GVP))
+
+
+    /*
+     *  Zorro product classes
+     */
+
+static const char *classnames[] = {
+    NULL,				    /* ZORRO_CLASS_UNKNOWN */
+    "ArcNet Card",			    /* ZORRO_CLASS_ARCNET */
+    "Audio Board",			    /* ZORRO_CLASS_AUDIO */
+    "ISA Bus Bridge",			    /* ZORRO_CLASS_BRIDGE */
+    "DSP Board",			    /* ZORRO_CLASS_DSP */
+    "Ethernet Card",			    /* ZORRO_CLASS_ETHERNET */
+    "Ethernet Card and Parallel Ports",	    /* ZORRO_CLASS_ETHERNET_PARALLEL */
+    "Flash ROM",			    /* ZORRO_CLASS_FLASHROM */
+    "FPU and RAM Expansion",		    /* ZORRO_CLASS_FPU_RAM */
+    "Graphics Board",			    /* ZORRO_CLASS_GFX */
+    "Graphics Board (RAM)",		    /* ZORRO_CLASS_GFXRAM */
+    "HD Controller",			    /* ZORRO_CLASS_HD */
+    "HD Controller and RAM Expansion",	    /* ZORRO_CLASS_HD_RAM */
+    "IDE Interface",			    /* ZORRO_CLASS_IDE */
+    "IDE Interface and RAM Expansion",	    /* ZORRO_CLASS_IDE_RAM */
+    "ISDN Interface",			    /* ZORRO_CLASS_ISDN */
+    "Maxintosh Emulator",		    /* ZORRO_CLASS_MACEMU */
+    "Miscellaneous Expansion Card",	    /* ZORRO_CLASS_MISC */
+    "Modem",				    /* ZORRO_CLASS_MODEM */
+    "Multi I/O",			    /* ZORRO_CLASS_MULTIIO */
+    "RAM Expansion",			    /* ZORRO_CLASS_RAM */
+    "Scanner Interface",		    /* ZORRO_CLASS_SCANNER */
+    "SCSI Host Adapter",		    /* ZORRO_CLASS_SCSI */
+    "SCSI Host Adapter and IDE Interface",  /* ZORRO_CLASS_SCSI_IDE */
+    "SCSI Host Adapter and RAM Expansion",  /* ZORRO_CLASS_SCSI_RAM */
+    "SCSI Host Adapter and Serial Card",    /* ZORRO_CLASS_SCSI_SERIAL */
+    "Multi Serial",			    /* ZORRO_CLASS_SERIAL */
+    "Drawing Tablet Interface",		    /* ZORRO_CLASS_TABLET */
+    "Accelerator",			    /* ZORRO_CLASS_TURBO */
+    "Accelerator and RAM Expansion",	    /* ZORRO_CLASS_TURBO_RAM */
+    "Accelerator and HD Controller",	    /* ZORRO_CLASS_TURBO_HD */
+    "Accelerator and IDE Interface",	    /* ZORRO_CLASS_TURBO_IDE */
+    "Accelerator and SCSI Host Adapter",    /* ZORRO_CLASS_TURBO_SCSI */
+    "Video Board",			    /* ZORRO_CLASS_VIDEO */
+};
 
-#define NUM_MANUF (sizeof(Manufacturers)/sizeof(struct Manufacturer))
-#define NUM_GVP_PROD (sizeof(Ext_Prod_GVP)/sizeof(struct GVP_Product))
+static inline const char *get_class_name(enum Zorro_Classes class)
+{
+    if (class < ARRAYSIZE(classnames))
+	return(classnames[class]);
+    else
+	return("(**Illegal**)");
+}
 
 #endif /* CONFIG_ZORRO */
 
 
-   /*
-    *    Expansion Devices
-    */
+    /*
+     *  Expansion Devices
+     */
 
-int zorro_num_autocon;
+u_int zorro_num_autocon;
 struct ConfigDev zorro_autocon[ZORRO_NUM_AUTO];
-static u_long BoardPartFlags[ZORRO_NUM_AUTO] = { 0, };
+static u32 BoardPartFlags[ZORRO_NUM_AUTO] = { 0, };
 
    
-   /*
-    *    Find the key for the next unconfigured expansion device of a specific
-    *    type.
-    *
-    *    Part is a device specific number (0 <= part <= 31) to allow for the
-    *    independent configuration of independent parts of an expansion board.
-    *    Thanks to Jes Soerensen for this idea!
-    *
-    *    Index is used to specify the first board in the autocon list
-    *    to be tested. It was inserted in order to solve the problem
-    *    with the GVP boards that uses the same product code, but
-    *    it should help if there are other companies uses the same
-    *    method as GVP. Drivers for boards which are not using this
-    *    method does not need to think of this - just set index = 0.
-    *    
-    *    Example:
-    *
-    *       while ((key = zorro_find(MY_MANUF, MY_PROD, MY_PART, 0))) {
-    *          cd = zorro_get_board(key);
-    *          initialise_this_board;
-    *          zorro_config_board(key, MY_PART);
-    *       }
-    */
+    /*
+     *  Find the key for the next unconfigured expansion device of a specific
+     *  type.
+     *
+     *  Part is a device specific number (0 <= part <= 31) to allow for the
+     *  independent configuration of independent parts of an expansion board.
+     *  Thanks to Jes Soerensen for this idea!
+     *
+     *  Index is used to specify the first board in the autocon list
+     *  to be tested. It was inserted in order to solve the problem
+     *  with the GVP boards that uses the same product code, but
+     *  it should help if there are other companies which use the same
+     *  method as GVP. Drivers for boards which are not using this
+     *  method do not need to think of this - just set index = 0.
+     *
+     *  Example:
+     *
+     *      while ((key = zorro_find(ZORRO_PROD_MY_BOARD, MY_PART, 0))) {
+     *      	cd = zorro_get_board(key);
+     *      	initialise_this_board;
+     *      	zorro_config_board(key, MY_PART);
+     *      }
+     */
 
-int zorro_find(int manuf, int prod, int part, int index)
+u_int zorro_find(zorro_id id, u_int part, u_int index)
 {
-   int key;
-   struct ConfigDev *cd;
-  
-   if (!MACH_IS_AMIGA || !AMIGAHW_PRESENT(ZORRO))
-      return(0);
-
-   if ((part < 0) || (part > 31)) {
-      printk("zorro_find: bad part %d\n", part);
-      return(0);
-   }
-
-   for (key = index + 1; key <= zorro_num_autocon; key++) {
-      cd = &zorro_autocon[key-1];
-      if ((cd->cd_Rom.er_Manufacturer == manuf) &&
-          (cd->cd_Rom.er_Product == prod) &&
-          !(BoardPartFlags[key-1] & (1<<part)))
-         break;
-   }
-   return(key <= zorro_num_autocon ? key : 0);
+    u_int manuf = ZORRO_MANUF(id);
+    u_int prod = ZORRO_PROD(id);
+    u_int epc = ZORRO_EPC(id);
+    u_int key;
+    const struct ConfigDev *cd;
+    u_long addr;
+
+    if (!MACH_IS_AMIGA || !AMIGAHW_PRESENT(ZORRO))
+	return(0);
+
+    if (part > 31) {
+	printk("zorro_find: bad part %d\n", part);
+	return(0);
+    }
+
+    for (key = index + 1; key <= zorro_num_autocon; key++) {
+	cd = &zorro_autocon[key-1];
+	addr = (u_long)cd->cd_BoardAddr;
+	if ((cd->cd_Rom.er_Manufacturer == manuf) &&
+	    (cd->cd_Rom.er_Product == prod) &&
+	    !(BoardPartFlags[key-1] & (1<<part)) &&
+	    (manuf != ZORRO_MANUF(ZORRO_PROD_GVP_EPC_BASE) ||
+	     prod != ZORRO_PROD(ZORRO_PROD_GVP_EPC_BASE) ||
+	     (*(u_short *)ZTWO_VADDR(addr+0x8000) & GVP_PRODMASK) == epc))
+	    break;
+    }
+    return(key <= zorro_num_autocon ? key : 0);
 }
 
 
-   /*
-    *    Get the board for a specified key
-    */
+    /*
+     *  Get the board corresponding to a specific key
+     */
 
-struct ConfigDev *zorro_get_board(int key)
+const struct ConfigDev *zorro_get_board(u_int key)
 {
-   struct ConfigDev *cd = NULL;
+    const struct ConfigDev *cd = NULL;
 
-   if ((key < 1) || (key > zorro_num_autocon))
-      printk("zorro_get_board: bad key %d\n", key);
-   else
-      cd = &zorro_autocon[key-1];
+    if ((key < 1) || (key > zorro_num_autocon))
+	printk("zorro_get_board: bad key %d\n", key);
+    else
+	cd = &zorro_autocon[key-1];
 
-   return(cd);
+    return(cd);
 }
 
 
-   /*
-    *    Mark a part of a board as configured
-    */
+    /*
+     *  Mark a part of a board as configured
+     */
 
-void zorro_config_board(int key, int part)
+void zorro_config_board(u_int key, u_int part)
 {
-   if ((key < 1) || (key > zorro_num_autocon))
-      printk("zorro_config_board: bad key %d\n", key);
-   else if ((part < 0) || (part > 31))
-      printk("zorro_config_board: bad part %d\n", part);
-   else
-      BoardPartFlags[key-1] |= 1<<part;
+    if ((key < 1) || (key > zorro_num_autocon))
+	printk("zorro_config_board: bad key %d\n", key);
+    else if (part > 31)
+	printk("zorro_config_board: bad part %d\n", part);
+    else if (BoardPartFlags[key-1] & (1<<part))
+	printk("zorro_config_board: key %d part %d is already configured\n",
+	       key, part);
+    else
+	BoardPartFlags[key-1] |= 1<<part;
 }
 
 
-   /*
-    *    Mark a part of a board as unconfigured
-    *
-    *    This function is mainly intended for the unloading of LKMs
-    */
+    /*
+     *  Mark a part of a board as unconfigured
+     *
+     *  This function is mainly intended for the unloading of LKMs
+     */
 
-void zorro_unconfig_board(int key, int part)
+void zorro_unconfig_board(u_int key, u_int part)
 {
-   if ((key < 1) || (key > zorro_num_autocon))
-      printk("zorro_unconfig_board: bad key %d\n", key);
-   else if ((part < 0) || (part > 31))
-      printk("zorro_unconfig_board: bad part %d\n", part);
-   else
-      BoardPartFlags[key-1] &= ~(1<<part);
+    if ((key < 1) || (key > zorro_num_autocon))
+	printk("zorro_unconfig_board: bad key %d\n", key);
+    else if (part > 31)
+	printk("zorro_unconfig_board: bad part %d\n", part);
+    else if (!(BoardPartFlags[key-1] & (1<<part)))
+	printk("zorro_config_board: key %d part %d is not yet configured\n",
+	       key, part);
+    else
+	BoardPartFlags[key-1] &= ~(1<<part);
 }
 
 
 #ifdef CONFIG_ZORRO
 
-   /*
-    *    Identify an AutoConfig Expansion Device
-    *
-    *    If the board was configured by a Linux/m68k driver, an asterisk will
-    *    be printed before the board address (except for unknown and `Hacker
-    *    Test' boards).
-    */
+    /*
+     *  Identify an AutoConfig Expansion Device
+     *
+     *  If the board was configured by a Linux/m68k driver, an asterisk will
+     *  be printed before the board address (except for unknown and `Hacker
+     *  Test' boards).
+     */
 
-static int identify(int devnum, char *buf)
+static int identify(u_int devnum, char *buf, int verbose)
 {
-   struct ConfigDev *cd;
-   int manuf, prod;
-   u_long addr, size;
-   char *manufname, *prodname, *is_mem;
-   char zorro, mag, configured;
-   int identified = 0;
-   int i, j, k, len = 0;
-   enum GVP_ident epc;
-
-   cd = &zorro_autocon[devnum];
-   manuf = cd->cd_Rom.er_Manufacturer;
-   prod = cd->cd_Rom.er_Product;
-   addr = (u_long)cd->cd_BoardAddr;
-   size = cd->cd_BoardSize;
-   configured = BoardPartFlags[devnum] ? '*' : ' ';
-   manufname = prodname = "<UNKNOWN>";
-
-   for (i = 0; i < NUM_MANUF; i++)
-      if (Manufacturers[i].ID == manuf) {
-         manufname = Manufacturers[i].Name;
-         for (j = 0; j < Manufacturers[i].NumProd; j++)
-            if (Manufacturers[i].Products[j].ID == prod)
-               if ((manuf != MANUF_GVP) || (prod != PROD_GVP)) {
-                  prodname = Manufacturers[i].Products[j].Name;
-                  identified = 1;
-                  break;
-               } else {
-		       /*
-			* The epc must be read as a short from the
-			* hardware.
-			*/
-                  epc = *(unsigned short *)ZTWO_VADDR(addr+0x8000) &
-                        GVP_PRODMASK;
-                  for (k = 0; k < NUM_GVP_PROD; k++)
-                     if (Ext_Prod_GVP[k].ID == epc) {
-                        prodname = Ext_Prod_GVP[k].Name;
-                        identified = 1;
-                        break;
-                     }
-               }
-         break;
-      }
-
-   switch (cd->cd_Rom.er_Type & ERT_TYPEMASK) {
-      case ERT_ZORROII:
-         zorro = '2';
-         break;
-      case ERT_ZORROIII:
-         zorro = '3';
-         break;
-      default:
-         zorro = '?';
-         break;
-   }
-   if (size & 0xfffff) {
-      size >>= 10;
-      mag = 'K';
-   } else {
-      size >>= 20;
-      mag = 'M';
-   }
-   if (cd->cd_Rom.er_Type & ERTF_MEMLIST)
-      is_mem = " MEM";
-   else
-      is_mem = "";
-
-   if (identified)
-      len = sprintf(buf, " %c0x%08lx: %s %s (Z%c, %ld%c%s)\n", configured, addr,
-                    manufname, prodname, zorro, size, mag, is_mem);
-   else if (manuf == MANUF_HACKER)
-      len = sprintf(buf, "  0x%08lx: Hacker Test Board 0x%02x (Z%c, %ld%c%s)\n",
-                    addr, prod, zorro, size, mag, is_mem);
-   else {
-      len = sprintf(buf, "  0x%08lx: [%04x:%02x] made by %s (Z%c, %ld%c%s)\n",
-                    addr, manuf, prod, manufname, zorro, size, mag, is_mem);
-      len += sprintf(buf+len, "  Please report this unknown device to "
-                     "Geert.Uytterhoeven@cs.kuleuven.ac.be\n");
-   }
-   return(len);
+    const struct ConfigDev *cd = &zorro_autocon[devnum];
+    u32 configured = BoardPartFlags[devnum];
+    u_int manuf = cd->cd_Rom.er_Manufacturer;
+    u_int prod = cd->cd_Rom.er_Product;
+    u_int class = ZORRO_CLASS_UNKNOWN;
+    u_int epc = 0;
+    const char *manufname = "Unknown";
+    const char *prodname = "Unknown";
+    const char *classname;
+    u_int i, j, k, len = 0;
+    u_long addr = (u_long)cd->cd_BoardAddr;
+    u_long size = cd->cd_BoardSize;
+    char mag;
+    int identified = 0, gvp = 0;
+
+    if (manuf != ZORRO_MANUF(ZORRO_PROD_GVP_EPC_BASE) ||
+	prod != ZORRO_PROD(ZORRO_PROD_GVP_EPC_BASE)) {
+	for (i = 0; i < NUM_MANUF; i++)
+	    if (Manufacturers[i].Manuf == manuf) {
+		manufname = Manufacturers[i].Name;
+		for (j = 0; j < Manufacturers[i].NumProd; j++)
+		    if (Manufacturers[i].Products[j].Prod == prod) {
+			prodname = Manufacturers[i].Products[j].Name;
+			class = Manufacturers[i].Products[j].Class;
+			identified = 1;
+			break;
+		    }
+	    }
+	/* Put workarounds for ID clashes here */
+	if (manuf == ZORRO_MANUF(ZORRO_PROD_HELFRICH_RAINBOW_III) &&
+	    prod == ZORRO_PROD(ZORRO_PROD_HELFRICH_RAINBOW_III))
+	    manufname = "Ingenieurbüro Helfrich";
+    } else {
+	manufname = "Great Valley Products";
+	gvp = 1;
+	epc = *(u_short *)ZTWO_VADDR(addr+0x8000) & GVP_PRODMASK;
+	for (k = 0; k < NUM_GVP_PROD; k++)
+	    if (epc == Ext_Prod_GVP[k].EPC) {
+		prodname = Ext_Prod_GVP[k].Name;
+		class = Ext_Prod_GVP[k].Class;
+		identified = 1;
+		break;
+	    }
+    }
+    classname = get_class_name(class);
+    if (size & 0xfffff) {
+	size >>= 10;
+	mag = 'K';
+    } else {
+	size >>= 20;
+	mag = 'M';
+    }
+    if (verbose) {
+	const char *zorro;
+	int is_mem = cd->cd_Rom.er_Type & ERTF_MEMLIST;
+	switch (cd->cd_Rom.er_Type & ERT_TYPEMASK) {
+	    case ERT_ZORROII:
+		zorro = "Zorro II";
+		break;
+	    case ERT_ZORROIII:
+		zorro = "Zorro III";
+		break;
+	    default:
+		zorro = "Unknown Zorro";
+		break;
+	}
+	if (!prodname)
+	    prodname = "Unknown";
+	if (!classname)
+	    classname = "Unknown";
+	len = sprintf(buf, "  Device %d at 0x%08lx: ID=%04x:%02x", devnum,
+		      addr, manuf, prod);
+	if (gvp)
+	    len += sprintf(buf+len, ":%02x", epc);
+	len += sprintf(buf+len, ", %s, %ld%c", zorro, size, mag);
+	if (is_mem)
+	    len += sprintf(buf+len, ", System RAM");
+	else
+	    len += sprintf(buf+len, ", Configured=%08x", configured);
+	len += sprintf(buf+len, "\n"
+				"    Manufacturer: %s\n"
+				"    Product Name: %s\n"
+				"    Board Class : %s\n",
+				manufname, prodname, classname);
+    } else {
+	len = sprintf(buf, " %c%08lx: ", configured ? '*' : ' ', addr);
+	if (identified) {
+	    len += sprintf(buf+len, "%s", manufname);
+	    if (prodname)
+		len += sprintf(buf+len, " %s", prodname);
+	    if (classname)
+		len += sprintf(buf+len, " %s", classname);
+	} else if (manuf == ZORRO_MANUF_HACKER)
+	    len += sprintf(buf+len, "Hacker Test Board %02x", prod);
+	else if (gvp)
+	    len += sprintf(buf+len, "[%04x:%02x:%02x] made by %s", manuf, prod,
+			   epc, manufname);
+	else
+	    len += sprintf(buf+len, "[%04x:%02x] made by %s", manuf, prod,
+			   manufname);
+	len += sprintf(buf+len, " (%ld%c)\n", size, mag);
+	if (!identified && manuf != ZORRO_MANUF_HACKER)
+	    len += sprintf(buf+len, "    Please report this unknown device to "
+				    "Geert.Uytterhoeven@cs.kuleuven.ac.be\n");
+    }
+    return(len);
 }
 
 
-   /*
-    *    Identify all known AutoConfig Expansion Devices
-    */
+    /*
+     *  Identify all known AutoConfig Expansion Devices
+     */
 
 void zorro_identify(void)
 {
-   int i;
-   char tmp[160];
+    u_int i;
+    char tmp[256];
 
-   if (!AMIGAHW_PRESENT(ZORRO))
-      return;
+    if (!AMIGAHW_PRESENT(ZORRO))
+	return;
 
-   printk("Probing AutoConfig expansion device(s):\n");
-   for (i = 0; i < zorro_num_autocon; i++) {
-      identify(i, tmp);
-      printk(tmp);
-   }
-   if (!zorro_num_autocon)
-      printk("No AutoConfig expansion devices present.\n");
+    printk("Probing AutoConfig expansion device(s):\n");
+    for (i = 0; i < zorro_num_autocon; i++) {
+	identify(i, tmp, 0);
+	printk(tmp);
+    }
+    if (!zorro_num_autocon)
+	printk("No AutoConfig expansion devices present.\n");
 }
 
 
-   /*
-    *    Get the list of all AutoConfig Expansion Devices
-    */
+    /*
+     *  Get the list of all AutoConfig Expansion Devices
+     */
 
 int zorro_get_list(char *buffer)
 {
-   int i, j, len = 0;
-   char tmp[160];
+    u_int i, len = 0, len2;
+    char tmp[256];
 
-   if (MACH_IS_AMIGA && AMIGAHW_PRESENT(ZORRO)) {
-      len = sprintf(buffer, "AutoConfig expansion devices:\n");
-      for (i = 0; i < zorro_num_autocon; i++) {
-         j = identify(i, tmp);
-         if (len+j >= 4075) {
-            len += sprintf(buffer+len, "4K limit reached!\n");
-            break;
-         }
-         strcpy(buffer+len, tmp);
-         len += j;
-      }
-   }
-   return(len);
+    if (MACH_IS_AMIGA && AMIGAHW_PRESENT(ZORRO)) {
+	len = sprintf(buffer, "AutoConfig expansion devices:\n");
+	for (i = 0; i < zorro_num_autocon; i++) {
+	    len2 = identify(i, tmp, 1);
+	    if (len+len2 >= 4075) {
+		len += sprintf(buffer+len, "4K limit reached!\n");
+		break;
+	    }
+	    strcpy(buffer+len, tmp);
+	    len += len2;
+	}
+    }
+    return(len);
 }
 
 #endif /* CONFIG_ZORRO */
 
 
-   /*
-    *    Bitmask indicating portions of available Zorro II RAM that are unused
-    *    by the system. Every bit represents a 64K chunk, for a maximum of 8MB
-    *    (128 chunks, physical 0x00200000-0x009fffff).
-    *
-    *    If you want to use (= allocate) portions of this RAM, you should clear
-    *    the corresponding bits.
-    *
-    *    Possible uses:
-    *       - z2ram device
-    *       - SCSI DMA bounce buffers
-    */
+    /*
+     *  Bitmask indicating portions of available Zorro II RAM that are unused
+     *  by the system. Every bit represents a 64K chunk, for a maximum of 8MB
+     *  (128 chunks, physical 0x00200000-0x009fffff).
+     *
+     *  If you want to use (= allocate) portions of this RAM, you should clear
+     *  the corresponding bits.
+     *
+     *  Possible uses:
+     *      - z2ram device
+     *      - SCSI DMA bounce buffers
+     */
 
-u_long zorro_unused_z2ram[4] = { 0, 0, 0, 0 };
+u32 zorro_unused_z2ram[4] = { 0, 0, 0, 0 };
 
 
 static void mark_region(u_long addr, u_long size, int flag)
 {
-   u_long start, end, chunk;
+    u_long start, end, chunk;
 
-   if (flag) {
-      start = (addr+Z2RAM_CHUNKMASK) & ~Z2RAM_CHUNKMASK;
-      end = (addr+size) & ~Z2RAM_CHUNKMASK;
-   } else {
-      start = addr & ~Z2RAM_CHUNKMASK;
-      end = (addr+size+Z2RAM_CHUNKMASK) & ~Z2RAM_CHUNKMASK;
-   }
-   if (end <= Z2RAM_START || start >= Z2RAM_END)
-      return;
-   start = start < Z2RAM_START ? 0x00000000 : start-Z2RAM_START;
-   end = end > Z2RAM_END ? Z2RAM_SIZE : end-Z2RAM_START;
-   while (start < end) {
-      chunk = start>>Z2RAM_CHUNKSHIFT;
-      if (flag)
-         set_bit( chunk, zorro_unused_z2ram );
-      else
-         clear_bit( chunk, zorro_unused_z2ram );
-      start += Z2RAM_CHUNKSIZE;
-   }
+    if (flag) {
+	start = (addr+Z2RAM_CHUNKMASK) & ~Z2RAM_CHUNKMASK;
+	end = (addr+size) & ~Z2RAM_CHUNKMASK;
+    } else {
+	start = addr & ~Z2RAM_CHUNKMASK;
+	end = (addr+size+Z2RAM_CHUNKMASK) & ~Z2RAM_CHUNKMASK;
+    }
+    if (end <= Z2RAM_START || start >= Z2RAM_END)
+	return;
+    start = start < Z2RAM_START ? 0x00000000 : start-Z2RAM_START;
+    end = end > Z2RAM_END ? Z2RAM_SIZE : end-Z2RAM_START;
+    while (start < end) {
+	chunk = start>>Z2RAM_CHUNKSHIFT;
+	if (flag)
+	    set_bit( chunk, zorro_unused_z2ram );
+	else
+	    clear_bit( chunk, zorro_unused_z2ram );
+	start += Z2RAM_CHUNKSIZE;
+    }
 }
 
 
-   /*
-    *    Initialization
-    */
+    /*
+     *  Initialization
+     */
 
-__initfunc(void zorro_init(void))
+void zorro_init(void)
 {
-   int i;
-   struct ConfigDev *cd;
+    u_int i;
+    const struct ConfigDev *cd;
 
-   if (!AMIGAHW_PRESENT(ZORRO))
-      return;
+    if (!AMIGAHW_PRESENT(ZORRO))
+	return;
 
-   /* Mark all available Zorro II memory */
-   for (i = 0; i < zorro_num_autocon; i++) {
-      cd = &zorro_autocon[i];
-      if (cd->cd_Rom.er_Type & ERTF_MEMLIST)
-         mark_region((u_long)cd->cd_BoardAddr, cd->cd_BoardSize, 1);
-   }
-   /* Unmark all used Zorro II memory */
-   for (i = 0; i < m68k_num_memory; i++)
-      mark_region(m68k_memory[i].addr, m68k_memory[i].size, 0);
+    /* Mark all available Zorro II memory */
+    for (i = 0; i < zorro_num_autocon; i++) {
+	cd = &zorro_autocon[i];
+	if (cd->cd_Rom.er_Type & ERTF_MEMLIST)
+	    mark_region((u_long)cd->cd_BoardAddr, cd->cd_BoardSize, 1);
+    }
+
+    /* Unmark all used Zorro II memory */
+    for (i = 0; i < m68k_num_memory; i++)
+	mark_region(m68k_memory[i].addr, m68k_memory[i].size, 0);
 }
--- linux-2.1.42/arch/m68k/boot/amiga/linuxboot.c.orig	Wed Jun 11 23:45:58 1997
+++ linux-2.1.42/arch/m68k/boot/amiga/linuxboot.c	Tue Jun 17 22:36:51 1997
@@ -26,6 +26,7 @@
  *		    version 1.0
  *	27 Mar 1997 FPU-less machines couldn't boot kernels that use bootinfo
  *		    interface version 1.0 (Geert)
+ *	 2 Mar 1997 Updated for the new Zorro ID scheme
  *	 3 Feb 1997 Implemented kernel decompression (Geert, based on Roman's
  *		    code for ataboot)
  *	30 Dec 1996 Reverted the CPU detection to the old scheme
@@ -61,12 +62,13 @@
 #include <linux/a.out.h>
 #include <linux/elf.h>
 #include <linux/linkage.h>
+
+#include "linuxboot.h"
+
 #include <asm/bootinfo.h>
 #include <asm/amigahw.h>
 #include <asm/page.h>
 
-#include "linuxboot.h"
-
 
 #undef custom
 #define custom ((*(volatile struct CUSTOM *)(CUSTOM_PHYSADDR)))
@@ -164,20 +166,19 @@
 #endif
 
 struct boardreset {
-    u_short manuf;
-    u_short prod;
+    u_long id;
     const char *name;
     void (*reset)(const struct ConfigDev *cd);
 };
 
 static struct boardreset boardresetdb[] = {
-    { MANUF_HELFRICH1, PROD_RAINBOW3, "Rainbow 3", reset_rb3 },
-    { MANUF_HELFRICH2, PROD_PICCOLO_REG, "Piccolo", reset_piccolo },
-    { MANUF_HELFRICH2, PROD_SD64_REG, "SD64", reset_sd64 },
-    { MANUF_VILLAGE_TRONIC, PROD_ARIADNE, "Ariadne", reset_ariadne },
-    { MANUF_HYDRA_SYSTEMS, PROD_AMIGANET, "Hydra", reset_hydra },
+    { ZORRO_PROD_HELFRICH_RAINBOW_III, "Rainbow 3", reset_rb3 },
+    { ZORRO_PROD_HELFRICH_PICCOLO_REG, "Piccolo", reset_piccolo },
+    { ZORRO_PROD_HELFRICH_SD64_REG, "SD64", reset_sd64 },
+    { ZORRO_PROD_VILLAGE_TRONIC_ARIADNE, "Ariadne", reset_ariadne },
+    { ZORRO_PROD_HYDRA_SYSTEMS_AMIGANET, "Hydra", reset_hydra },
 #if 0
-    { MANUF_COMMODORE, PROD_A2060, "A2060", reset_a2060 },
+    { ZORRO_PROD_CBM_A2060, "A2060", reset_a2060 },
 #endif
 };
 #define NUM_BOARDRESET	sizeof(boardresetdb)/sizeof(*boardresetdb)
@@ -416,14 +417,16 @@
 	    if (reset_boards) {
 		manuf = bi.autocon[i].cd_Rom.er_Manufacturer;
 		prod = bi.autocon[i].cd_Rom.er_Product;
-		for (j = 0; j < NUM_BOARDRESET; j++)
-		    if ((manuf == boardresetdb[j].manuf) &&
-			(prod == boardresetdb[j].prod)) {
+		for (j = 0; j < NUM_BOARDRESET; j++) {
+		    u_long id = boardresetdb[j].id;
+		    if ((manuf == ZORRO_MANUF(id)) &&
+			(prod == ZORRO_PROD(id))) {
 			Printf(" [%s - will be reset at kernel boot time]",
 			       boardresetdb[j].name);
 			boardresetfuncs[i] = boardresetdb[j].reset;
 			break;
 		    }
+		}
 	    }
 	    PutChar('\n');
 	}
--- linux-2.1.42/arch/m68k/boot/amiga/linuxboot.h.orig	Tue Jun 10 22:26:07 1997
+++ linux-2.1.42/arch/m68k/boot/amiga/linuxboot.h	Tue Jun 17 22:31:21 1997
@@ -23,6 +23,8 @@
  */
 
 
+typedef unsigned int u32;
+
 #include <asm/setup.h>
 #include <linux/zorro.h>
 
--- linux-2.1.42/drivers/net/a2065.c.orig	Sun May 18 23:09:37 1997
+++ linux-2.1.42/drivers/net/a2065.c	Tue Jun 17 22:31:07 1997
@@ -129,7 +129,7 @@
 	unsigned short busmaster_regval;
 
 #ifdef CONFIG_AMIGA
-	int key;
+	u_int key;
 #endif
 #ifdef CONFIG_SUNLANCE
 	struct Linux_SBus_DMA *ledma; /* if set this points to ledma and arch=4m */
@@ -737,20 +737,20 @@
 
 __initfunc(int a2065_probe(struct device *dev))
 {
-	int key1, key2 = 0;
-	struct ConfigDev *cd;
+	u_int key, is_cbm;
+	const struct ConfigDev *cd;
 	u_long board;
 	u_long sn;
 	struct lance_private *priv;
 	struct A2065Board *a2065;
 
-	if ((key1 = zorro_find(MANUF_COMMODORE, PROD_A2065, 0, 0)) ||
-	    (key1 = zorro_find(MANUF_COMMODORE, PROD_A2065_2, 0, 0)) ||
-	    (key2 = zorro_find(MANUF_AMERISTAR, PROD_AMERISTAR2065, 0, 0))) {
-		cd = zorro_get_board(key1 ? key1 : key2);
+	if ((key = is_cbm = zorro_find(ZORRO_PROD_CBM_A2065_1, 0, 0)) ||
+	    (key = is_cbm = zorro_find(ZORRO_PROD_CBM_A2065_2, 0, 0)) ||
+	    (key = zorro_find(ZORRO_PROD_AMERISTAR_A2065, 0, 0))) {
+		cd = zorro_get_board(key);
 		if ((board = (u_long)cd->cd_BoardAddr)) {
 			sn = cd->cd_Rom.er_SerialNumber;
-			if (key1) {			/* Commodore */
+			if (is_cbm) {			/* Commodore */
 				dev->dev_addr[0] = 0x00;
 				dev->dev_addr[1] = 0x80;
 				dev->dev_addr[2] = 0x10;
@@ -783,7 +783,7 @@
 			priv->lance_init_block = (struct lance_init_block *)
 					      offsetof(struct A2065Board, RAM);
 			priv->auto_select = 0;
-			priv->key = key1 ? key1 : key2;
+			priv->key = key;
 			priv->busmaster_regval = LE_C3_BSWP;
 
 			priv->lance_log_rx_bufs = LANCE_LOG_RX_BUFFERS;
@@ -799,7 +799,7 @@
 			dev->dma = 0;
 
 			ether_setup(dev);
-			zorro_config_board(key1 ? key1 : key2, 0);
+			zorro_config_board(key, 0);
 			return(0);
 		}
 	}
--- linux-2.1.42/drivers/net/ariadne.c.orig	Sun May 18 23:09:39 1997
+++ linux-2.1.42/drivers/net/ariadne.c	Tue Jun 17 22:31:08 1997
@@ -6,7 +6,7 @@
  *			Peter De Schrijver
  *		       (Peter.DeSchrijver@linux.cc.kuleuven.ac.be)
  *
- *  ----------------------------------------------------------------------------------
+ *  ---------------------------------------------------------------------------
  *
  *  This program is based on
  *
@@ -20,13 +20,13 @@
  *	MC68230:	Parallel Interface/Timer (PI/T)
  *			Motorola Semiconductors, December, 1983
  *
- *  ----------------------------------------------------------------------------------
+ *  ---------------------------------------------------------------------------
  *
  *  This file is subject to the terms and conditions of the GNU General Public
  *  License.  See the file COPYING in the main directory of the Linux
  *  distribution for more details.
  *
- *  ----------------------------------------------------------------------------------
+ *  ---------------------------------------------------------------------------
  *
  *  The Ariadne is a Zorro-II board made by Village Tronic. It contains:
  *
@@ -107,7 +107,7 @@
     struct net_device_stats stats;
     char tx_full;
     unsigned long lock;
-    int key;
+    u_int key;
 };
 
 
@@ -148,13 +148,13 @@
 
 __initfunc(int ariadne_probe(struct device *dev))
 {
-    int key;
-    struct ConfigDev *cd;
+    u_int key;
+    const struct ConfigDev *cd;
     u_long board;
     struct ariadne_private *priv;
 
     /* Ethernet is part 0, Parallel is part 1 */
-    if ((key = zorro_find(MANUF_VILLAGE_TRONIC, PROD_ARIADNE, 0, 0))) {
+    if ((key = zorro_find(ZORRO_PROD_VILLAGE_TRONIC_ARIADNE, 0, 0))) {
 	cd = zorro_get_board(key);
 	if ((board = (u_long)cd->cd_BoardAddr)) {
 	    dev->dev_addr[0] = 0x00;
--- linux-2.1.42/drivers/net/hydra.c.orig	Sun May 18 23:06:00 1997
+++ linux-2.1.42/drivers/net/hydra.c	Tue Jun 17 22:31:08 1997
@@ -87,7 +87,7 @@
 	u16 rx_page_stop;
 	u16 next_pkt;
 	struct net_device_stats stats;
-	int key;
+	u_int key;
 };
 
 static int hydra_open(struct device *dev);
@@ -161,15 +161,15 @@
 {
 	struct hydra_private *priv;
 	u32 board;
-	int key;
-	struct ConfigDev *cd;
+	u_int key;
+	const struct ConfigDev *cd;
 	int j;
 
 #ifdef HYDRA_DEBUG
  printk("hydra_probe(%x)\n", dev);
 #endif
 
-	if ((key = zorro_find(MANUF_HYDRA_SYSTEMS, PROD_AMIGANET, 0, 0))) 
+	if ((key = zorro_find(ZORRO_PROD_HYDRA_SYSTEMS_AMIGANET, 0, 0))) 
 	{
 		cd = zorro_get_board(key);
 		if((board = (u32) cd->cd_BoardAddr))
--- linux-2.1.42/drivers/char/tiga.c.orig	Sun May 18 23:36:34 1997
+++ linux-2.1.42/drivers/char/tiga.c	Tue Jun 17 22:31:09 1997
@@ -111,16 +111,16 @@
 
 void gsp_init(void)
 {
-	int key, i;
-	struct ConfigDev *cd;
+	u_int key, i;
+	const struct ConfigDev *cd;
 
 	i = 0;
 
 	/*
 	 * Identify DMI Resolver boards.
 	 */
-	while ((i < MAX_TIGA) && (key = zorro_find(MANUF_APPLIED_MAGIC,
-						   PROD_DMI_RESOLVER, 0, 0))){
+	while ((i < MAX_TIGA) &&
+	       (key = zorro_find(ZORRO_PROD_APPLIED_MAGIC_DMI_RESOLVER, 0, 0))){
 		cd = zorro_get_board(key);
 		tigainfo[i].iobase = cd->cd_BoardAddr;
 		tigainfo[i].iosize = cd->cd_BoardSize;
@@ -137,8 +137,8 @@
 	 * Identify Commodore ULOWELL A2410 boards.
 	 */
 	while ((i < MAX_TIGA) &&
-	       ((key = zorro_find(MANUF_UNIV_OF_LOWELL, PROD_A2410, 0, 0)) ||
-		(key = zorro_find(MANUF_CARDCO, PROD_CC_A2410, 0, 0)))){
+	       ((key = zorro_find(ZORRO_PROD_CBM_A2410, 0, 0)) ||
+		(key = zorro_find(ZORRO_PROD_CARDCO_A2410, 0, 0)))){
 
 		cd = zorro_get_board(key);
 		tigainfo[i].iobase = cd->cd_BoardAddr;
--- linux-2.1.42/drivers/char/lp_mfc.c.orig	Sun May 18 23:36:32 1997
+++ linux-2.1.42/drivers/char/lp_mfc.c	Tue Jun 17 22:31:08 1997
@@ -33,7 +33,7 @@
 static volatile int dummy; /* for trigger reads */
 static int minor[MAX_LP] = { -1, -1, -1, -1, -1 };
 #ifdef MODULE
-static int board_key[MAX_LP];
+static u_int board_key[MAX_LP];
 #endif
 
 static void lp_mfc_out(int c, int dev)
@@ -89,11 +89,11 @@
 {
 int pias;
 struct pia *pp;
-int key = 0;
-struct ConfigDev *cd;
+u_int key = 0;
+const struct ConfigDev *cd;
 
 pias = 0;
-while((key = zorro_find( MANUF_BSC2, PROD_MULTIFACE_III, 0 , key))) {
+while((key = zorro_find( ZORRO_PROD_BSC_MULTIFACE_III, 0 , key))) {
   cd = zorro_get_board( key );
   pp = (struct pia *)ZTWO_VADDR((((u_char *)cd->cd_BoardAddr)+PIABASE));
   if (pias < MAX_LP) {
--- linux-2.1.42/drivers/char/ser_mfc.c.orig	Sun May 18 23:36:34 1997
+++ linux-2.1.42/drivers/char/ser_mfc.c	Tue Jun 17 22:31:09 1997
@@ -154,7 +154,7 @@
 
 static int nr_mfc; /* nr of ports configured */
 static int lines[MAX_CARD * 2]; /* accociated tty lines (index in rs_table) */
-static int board_index[MAX_CARD]; /* nr. of zorro slot */
+static u_int board_index[MAX_CARD]; /* nr. of zorro slot */
 static u_char imask[MAX_CARD];
 static u_char acmask[MAX_CARD];
 
@@ -603,10 +603,11 @@
 
 int multiface_init(void)
 {
-int i, line1, line2;
+u_int key;
+int line1, line2;
 struct duart *dp;
 int dummy;
-struct ConfigDev *cd;
+const struct ConfigDev *cd;
 struct serial_struct req;
 struct async_struct *info;
 
@@ -615,9 +616,9 @@
   
 nr_mfc = 0;
 /* add MFC_II and serial master for test purposes */
-while((i=zorro_find(MANUF_BSC2, PROD_MULTIFACE_III,1, 0))) {
-  board_index[nr_mfc/2] = i;
-  cd = zorro_get_board(i);
+while((key=zorro_find(ZORRO_PROD_BSC_MULTIFACE_III,1, 0))) {
+  board_index[nr_mfc/2] = key;
+  cd = zorro_get_board(key);
   dp = (struct duart *)ZTWO_VADDR((((u_char *)cd->cd_BoardAddr)+DUARTBASE));
 
   req.line = -1; /* first free ttyS? device */
@@ -692,7 +693,7 @@
   dummy = dp->start_sopc.start; /* load timer with new values */
   nr_mfc++;
 
-  zorro_config_board(i,1);
+  zorro_config_board(key,1);
 }
 return 0;
 }
--- linux-2.1.42/drivers/char/ioext.h.orig	Sun May 18 23:36:30 1997
+++ linux-2.1.42/drivers/char/ioext.h	Tue Jun 17 22:31:17 1997
@@ -20,7 +20,7 @@
 	int line[IOEXT_MAX_LINES];
 	volatile struct uart_16c550 *uart[IOEXT_MAX_LINES];
 	IOEXT_struct *board;
-	int zorro_key;
+	u_int zorro_key;
 	int spurious_count;
 	unsigned char par_use;		/* IOEXT_PAR_xxx */
 #if defined(CONFIG_GVPIOEXT_PLIP) || defined(CONFIG_GVPIOEXT_PLIP_MODULE)
--- linux-2.1.42/drivers/char/ser_ioext.c.orig	Sun Jun  1 22:04:34 1997
+++ linux-2.1.42/drivers/char/ser_ioext.c	Tue Jun 17 22:47:47 1997
@@ -818,8 +818,8 @@
  */
 __initfunc(int ioext_init(void))
 {
-	int isr_installed = 0;
-	int key = 0;
+	int isr_installed = 0, is_ioext;
+	u_int key = 0, skey;
 	static char support_string[50] = "io-extender serial";
 
 	if (!MACH_IS_AMIGA) {
@@ -828,23 +828,24 @@
 
 	memset(ioext_info, 0, sizeof(ioext_info));
 
-	while ((key = zorro_find(MANUF_GVP, PROD_GVP, 0, key))) {
+	while (1) {
+		const struct ConfigDev *cd;
+		caddr_t address;
 		IOEXT_struct *board;
 		int num_uarts;
 		int i;
+		skey = key;
 
-		struct ConfigDev *cd = zorro_get_board(key);
+		if ((key = zorro_find(ZORRO_PROD_GVP_IO_EXTENDER, 0, skey)))
+			is_ioext = 1;
+		else if ((key = zorro_find(ZORRO_PROD_GVP_GFORCE_040_1, 0,
+					   skey)))
+			is_ioext = 0;
+		else
+			break;
 
-    /* As GVP uses the same product code for several kind of boards, */
-    /* we have to check the extended product code, to see if this */
-    /* really is an io-extender. */
-    /* check extended product code */
-		caddr_t address = cd->cd_BoardAddr;
-		enum GVP_ident epc = *(enum GVP_ident *)ZTWO_VADDR(address + 0x8000) & GVP_PRODMASK;
-
-		if (epc != GVP_IOEXT && epc != GVP_GFORCE_040) {
-			continue;
-		}
+		cd = zorro_get_board(key);
+		address = cd->cd_BoardAddr;
 
 		/* Wait for the board to be ready and disable everything */
 		board = (IOEXT_struct *) ZTWO_VADDR(address);
@@ -862,7 +863,7 @@
 		board->CNTR &= ~GVP_IRQ_ENA;
 
 		/* IO Extender has a second serial port. GForce 040 does not */
-		num_uarts = (epc == GVP_IOEXT) ? 2 : 1;
+		num_uarts = is_ioext ? 2 : 1;
 
 		/*
 		 * Register the serial port devices.
@@ -897,7 +898,7 @@
 
 		/* Now we handle the parallel port
 		   (possibly as a PLIP device) */
-		if (epc == GVP_IOEXT) {
+		if (is_ioext) {
 			/* Make sure that LP_PINTEN is ALWAYS set,
 			   to prevent continuous interrupts */
 			board->par.CTRL = LP_PINTEN|LP_PINITP|LP_PSELECP;
--- linux-2.1.42/drivers/scsi/a2091.c.orig	Sun May 18 23:10:04 1997
+++ linux-2.1.42/drivers/scsi/a2091.c	Tue Jun 17 22:31:17 1997
@@ -196,8 +196,8 @@
     static unsigned char called = 0;
     struct Scsi_Host *instance;
     caddr_t address;
-    int key;
-    struct ConfigDev *cd;
+    u_int key;
+    const struct ConfigDev *cd;
 
     if (!MACH_IS_AMIGA || called)
 	return 0;
@@ -206,8 +206,8 @@
     tpnt->proc_dir = &proc_scsi_a2091;
     tpnt->proc_info = &wd33c93_proc_info;
 
-    while ((key = zorro_find(MANUF_COMMODORE, PROD_A2091, 0, 0)) ||
-	   (key = zorro_find(MANUF_COMMODORE, PROD_A590, 0, 0))) {
+    while ((key = zorro_find(ZORRO_PROD_CBM_A590_A2091_1, 0, 0)) ||
+	   (key = zorro_find(ZORRO_PROD_CBM_A590_A2091_2, 0, 0))) {
 	cd = zorro_get_board(key);
 	address = cd->cd_BoardAddr;
 	instance = scsi_register (tpnt, sizeof (struct WD33C93_hostdata));
--- linux-2.1.42/drivers/scsi/blz1230_esp.c.orig	Sun May 18 23:36:43 1997
+++ linux-2.1.42/drivers/scsi/blz1230_esp.c	Tue Jun 17 22:31:17 1997
@@ -61,15 +61,15 @@
 int blz1230_esp_detect(Scsi_Host_Template *tpnt)
 {
 	struct Sparc_ESP *esp;
-	struct ConfigDev *esp_dev;
-	int key;
+	const struct ConfigDev *esp_dev;
+	u_int key;
 	unsigned long address;
 	struct ESP_regs *eregs;
 
 #if MKIV
-	if ((key = zorro_find(MANUF_PHASE5, PROD_BLIZZARD_1230_IV, 0, 0))){
+	if ((key = zorro_find(ZORRO_PROD_PHASE5_BLIZZARD_1230_IV_1260, 0, 0))){
 #else
-	if ((key = zorro_find(MANUF_PHASE5, PROD_FASTLANE_SCSI, 0, 0))){
+	if ((key = zorro_find(ZORRO_PROD_PHASE5_BLIZZARD_1230_II_FASTLANE_Z3_CYBERSCSI_CYBERSTORM060, 0, 0))){
 #endif
 		esp_dev = zorro_get_board(key);
 
--- linux-2.1.42/drivers/scsi/blz2060_esp.c.orig	Sun May 18 23:36:43 1997
+++ linux-2.1.42/drivers/scsi/blz2060_esp.c	Tue Jun 17 22:31:17 1997
@@ -61,11 +61,11 @@
 int blz2060_esp_detect(Scsi_Host_Template *tpnt)
 {
 	struct Sparc_ESP *esp;
-	struct ConfigDev *esp_dev;
-	int key;
+	const struct ConfigDev *esp_dev;
+	u_int key;
 	unsigned long address;
 
-	if ((key = zorro_find(MANUF_PHASE5, PROD_BLIZZARD_2060SCSI, 0, 0))){
+	if ((key = zorro_find(ZORRO_PROD_PHASE5_BLIZZARD_2060, 0, 0))){
 		esp_dev = zorro_get_board(key);
 		esp = esp_allocate(tpnt, (void *) esp_dev);
 
--- linux-2.1.42/drivers/scsi/cyberII_esp.c.orig	Sun May 18 23:36:44 1997
+++ linux-2.1.42/drivers/scsi/cyberII_esp.c	Tue Jun 17 22:31:17 1997
@@ -60,12 +60,12 @@
 int cyberII_esp_detect(Scsi_Host_Template *tpnt)
 {
 	struct Sparc_ESP *esp;
-	struct ConfigDev *esp_dev;
-	int key;
+	const struct ConfigDev *esp_dev;
+	u_int key;
 	unsigned long address;
 	struct ESP_regs *eregs;
 
-	if((key = zorro_find(MANUF_PHASE5, PROD_CYBERSTORM_II, 0, 0))){
+	if((key = zorro_find(ZORRO_PROD_PHASE5_CYBERSTORM_MK_II, 0, 0))){
 		esp_dev = zorro_get_board(key);
 
 		/* Do some magic to figure out if the CyberStorm Mk II
--- linux-2.1.42/drivers/scsi/cyber_esp.c.orig	Sun May 18 23:36:45 1997
+++ linux-2.1.42/drivers/scsi/cyber_esp.c	Tue Jun 17 22:31:18 1997
@@ -70,18 +70,19 @@
 int cyber_esp_detect(Scsi_Host_Template *tpnt)
 {
 	struct Sparc_ESP *esp;
-	struct ConfigDev *esp_dev;
-	int key;
+	const struct ConfigDev *esp_dev;
+	u_int key;
 	unsigned long address;
 
 
-	if ((key = zorro_find(MANUF_PHASE5, PROD_CYBERSTORM_SCSI, 0, 0)) ||
-	    (key = zorro_find(MANUF_PHASE5, PROD_FASTLANE_SCSI, 0, 0))){
+	if ((key = zorro_find(ZORRO_PROD_PHASE5_BLIZZARD_1220_CYBERSTORM, 0, 0)) ||
+	    (key = zorro_find(ZORRO_PROD_PHASE5_BLIZZARD_1230_II_FASTLANE_Z3_CYBERSCSI_CYBERSTORM060, 0, 0))){
 		esp_dev = zorro_get_board(key);
 
 		/* Figure out if this is a CyberStorm or really a 
 		 * Fastlane/Blizzard Mk II by looking at the board size.
-		 * CyberStorm maps 64kB (PROD_CYBERSTORM_SCSI does anyway)
+		 * CyberStorm maps 64kB
+		 * (ZORRO_PROD_PHASE5_BLIZZARD_1220_CYBERSTORM does anyway)
 		 */
 		if((unsigned long)esp_dev->cd_BoardSize != 0x10000)
 			return 0;
--- linux-2.1.42/drivers/scsi/fastlane_esp.c.orig	Sun May 18 23:36:49 1997
+++ linux-2.1.42/drivers/scsi/fastlane_esp.c	Tue Jun 17 22:31:18 1997
@@ -76,11 +76,11 @@
 int fastlane_esp_detect(Scsi_Host_Template *tpnt)
 {
 	struct Sparc_ESP *esp;
-	struct ConfigDev *esp_dev;
-	int key;
+	const struct ConfigDev *esp_dev;
+	u_int key;
 	unsigned long address;
 
-	if ((key = zorro_find(MANUF_PHASE5, PROD_FASTLANE_SCSI, 0, 0))){
+	if ((key = zorro_find(ZORRO_PROD_PHASE5_BLIZZARD_1230_II_FASTLANE_Z3_CYBERSCSI_CYBERSTORM060, 0, 0))){
 
 		esp_dev = zorro_get_board(key);
 
--- linux-2.1.42/drivers/scsi/gvp11.c.orig	Sun May 18 23:10:05 1997
+++ linux-2.1.42/drivers/scsi/gvp11.c	Tue Jun 17 22:31:18 1997
@@ -204,9 +204,10 @@
     static unsigned char called = 0;
     struct Scsi_Host *instance;
     caddr_t address;
-    enum GVP_ident epc;
-    int key = 0;
-    struct ConfigDev *cd;
+    u_int epc;
+    u_int key = 0, skey;
+    const struct ConfigDev *cd;
+    u_int default_dma_xfer_mask;
 
     if (!MACH_IS_AMIGA || called)
 	return 0;
@@ -215,9 +216,28 @@
     tpnt->proc_dir = &proc_scsi_gvp11;
     tpnt->proc_info = &wd33c93_proc_info;
 
-    while ((key = zorro_find(MANUF_GVP, PROD_GVPIISCSI, 0, key))) {
+    while (1) {
+	/* 
+	 * This should (hopefully) be the correct way to identify
+	 * all the different GVP SCSI controllers (except for the
+	 * SERIES I though).
+	 */
+	skey = key;
+
+	if ((key = zorro_find(ZORRO_PROD_GVP_COMBO_030_R3_SCSI, 0, skey)) ||
+	    (key = zorro_find(ZORRO_PROD_GVP_SERIES_II, 0, skey)))
+	    default_dma_xfer_mask = ~0x00ffffff;
+	else if ((key = zorro_find(ZORRO_PROD_GVP_GFORCE_030_SCSI, 0, skey)) ||
+		 (key = zorro_find(ZORRO_PROD_GVP_A530_SCSI, 0, skey)) ||
+		 (key = zorro_find(ZORRO_PROD_GVP_COMBO_030_R4_SCSI, 0, skey)))
+	    default_dma_xfer_mask = ~0x01ffffff;
+	else if ((key = zorro_find(ZORRO_PROD_GVP_A1291, 0, skey)) ||
+		 (key = zorro_find(ZORRO_PROD_GVP_GFORCE_040_SCSI_1, 0, skey)))
+	    default_dma_xfer_mask = ~0x07ffffff;
+	else
+	    break;
+
 	cd = zorro_get_board(key);
-	address = cd->cd_BoardAddr;
 
 	/*
 	 * Rumors state that some GVP ram boards use the same product
@@ -227,23 +247,7 @@
 	if (cd->cd_BoardSize != 0x10000)
 		continue;
 
-	/* check extended product code */
-	epc = *(unsigned short *)(ZTWO_VADDR(address) + 0x8000);
-	epc = epc & GVP_PRODMASK;
-
-	/* 
-	 * This should (hopefully) be the correct way to identify
-	 * all the different GVP SCSI controllers (except for the
-	 * SERIES I though).
-	 */
-	if (!((epc == GVP_A1291_SCSI) || 
-	      (epc == GVP_GFORCE_040_SCSI) ||
-	      (epc == GVP_GFORCE_030_SCSI) ||
-	      (epc == GVP_A530_SCSI) ||
-	      (epc == GVP_COMBO_R4_SCSI) ||
-	      (epc == GVP_COMBO_R3_SCSI) ||
-	      (epc == GVP_SERIESII)))
-	    continue;
+	address = cd->cd_BoardAddr;
 
 	instance = scsi_register (tpnt, sizeof (struct WD33C93_hostdata));
 	instance->base = (unsigned char *)ZTWO_VADDR(address);
@@ -252,22 +256,9 @@
 
 	if (gvp11_xfer_mask)
 		HDATA(instance)->dma_xfer_mask = gvp11_xfer_mask;
-	else{
-		switch (epc){
-		case GVP_COMBO_R3_SCSI:
-		case GVP_SERIESII:
-			HDATA(instance)->dma_xfer_mask = ~0x00ffffff;
-			break;
-		case GVP_GFORCE_030_SCSI:
-		case GVP_A530_SCSI:
-		case GVP_COMBO_R4_SCSI:
-			HDATA(instance)->dma_xfer_mask = ~0x01ffffff;
-			break;
-		default:
-			HDATA(instance)->dma_xfer_mask = ~0x07ffffff;
-			break;
-		}
-	}
+	else
+		HDATA(instance)->dma_xfer_mask = default_dma_xfer_mask;
+
 
 	DMA(instance)->secret2 = 1;
 	DMA(instance)->secret1 = 0;
--- linux-2.1.42/drivers/scsi/amiga7xx.c.orig	Sun Jun  1 22:04:37 1997
+++ linux-2.1.42/drivers/scsi/amiga7xx.c	Tue Jun 17 22:31:18 1997
@@ -48,7 +48,7 @@
     tpnt->proc_dir = &proc_scsi_amiga7xx;
 
 #ifdef CONFIG_WARPENGINE_SCSI
-    if ((key = zorro_find(MANUF_MACROSYSTEMS, PROD_WARP_ENGINE, 0, 0)))
+    if ((key = zorro_find(ZORRO_PROD_MACROSYSTEMS_WARP_ENGINE_40xx, 0, 0)))
     {
 	cd = zorro_get_board(key);
 	address = (unsigned long)kernel_map((unsigned long)cd->cd_BoardAddr,
@@ -82,8 +82,8 @@
 #endif
 
 #ifdef CONFIG_A4091_SCSI
-    while ( (key = zorro_find(MANUF_COMMODORE, PROD_A4091, 0, 0)) ||
-	 (key = zorro_find(MANUF_COMMODORE2, PROD_A4091_2, 0, 0)) )
+    while ( (key = zorro_find(ZORRO_PROD_CBM_A4091_1, 0, 0)) ||
+	 (key = zorro_find(ZORRO_PROD_CBM_A4091_2, 0, 0)) )
     {
 	cd = zorro_get_board(key);
 	address = (unsigned long)kernel_map((unsigned long)cd->cd_BoardAddr,
--- linux-2.1.42/drivers/video/cyberfb.c.orig	Mon Jun 16 21:44:28 1997
+++ linux-2.1.42/drivers/video/cyberfb.c	Tue Jun 17 22:41:45 1997
@@ -99,7 +99,7 @@
 #define CYBER16_PIXCLOCK 25000   /* ++Geert: Just a guess */
 
 
-static int CyberKey = 0;
+static u_int CyberKey = 0;
 static u_char Cyber_colour_table [256][4];
 static unsigned long CyberMem;
 static unsigned long CyberSize;
@@ -297,7 +297,7 @@
 char size;
 volatile u_long *CursorBase;
 unsigned long board_addr;
-struct ConfigDev *cd;
+const struct ConfigDev *cd;
 
 if (Cyberfb_mode == -1)
   {
@@ -978,7 +978,7 @@
    int err;
    struct Cyber_fb_par par;
 
-   if (!(CyberKey = zorro_find(MANUF_PHASE5, PROD_CYBERVISION, 0, 0)))
+   if (!(CyberKey = zorro_find(ZORRO_PROD_PHASE5_CYBERVISION64, 0, 0)))
       return -ENODEV;
 
    memstart = mem_start;
--- linux-2.1.42/drivers/video/retz3fb.c.orig	Mon Jun 16 21:44:29 1997
+++ linux-2.1.42/drivers/video/retz3fb.c	Tue Jun 17 22:42:00 1997
@@ -132,7 +132,7 @@
 static char retz3_fb_name[16] = "RetinaZ3";
 
 
-static int z3_key = 0;
+static u_int z3_key = 0;
 static unsigned char retz3_color_table [256][4];
 static unsigned long z3_mem;
 static unsigned long z3_fbmem;
@@ -825,7 +825,7 @@
 	volatile unsigned long *CursorBase;
 #endif
 	unsigned long board_addr, board_size;
-	struct ConfigDev *cd;
+	const struct ConfigDev *cd;
 
 	cd = zorro_get_board (z3_key);
 	zorro_config_board (z3_key, 0);
@@ -1474,7 +1474,7 @@
 	int err;
 	struct retz3_fb_par par;
 
-	if (!(z3_key = zorro_find(MANUF_MACROSYSTEMS2, PROD_RETINA_Z3, 0, 0)))
+	if (!(z3_key = zorro_find(ZORRO_PROD_MACROSYSTEMS_RETINA_Z3, 0, 0)))
 		return -ENODEV;
 
 	memstart = mem_start;
--- linux-2.1.42/include/linux/zorro.h.orig	Mon Jun 16 21:18:01 1997
+++ linux-2.1.42/include/linux/zorro.h	Tue Jun 17 22:40:52 1997
@@ -1,505 +1,569 @@
 /*
- * linux/zorro.h -- Amiga AutoConfig (Zorro) Expansion Device Definitions
+ *  linux/zorro.h -- Amiga AutoConfig (Zorro) Expansion Device Definitions
  *
- * Copyright (C) 1995 Geert Uytterhoeven
+ *  Copyright (C) 1995 Geert Uytterhoeven
  *
- * This file is subject to the terms and conditions of the GNU General Public
- * License.  See the file COPYING in the main directory of this archive
- * for more details.
+ *  Please update arch/m68k/amiga/zorro.c if you make changes here!
+ *
+ *  Many IDs were obtained from ExpName/Identify ((C) Richard Körber)
+ *  and by looking at the NetBSD-Amiga kernel sources
+ *
+ *  This file is subject to the terms and conditions of the GNU General Public
+ *  License.  See the file COPYING in the main directory of this archive
+ *  for more details.
  */
 
-#ifndef __ZORRO_H
-#define __ZORRO_H
+#ifndef _LINUX_ZORRO_H
+#define _LINUX_ZORRO_H
 
 #ifndef __ASSEMBLY__
 
-/*
- * Defined Board Manufacturers
- *
- * Please update arch/m68k/amiga/zorro.c if you make changes here
- * Many IDs were obtained from ExpName/Identify ((C) Richard Körber)
- * and by looking at the NetBSD-Amiga kernel sources
- */
+    /*
+     *  Zorro Product Classes
+     *
+     *  Make sure to keep these in sync with arch/m68k/amiga/zorro.c!
+     */
+
+enum Zorro_Classes {
+    ZORRO_CLASS_UNKNOWN = 0x00,
+    ZORRO_CLASS_ARCNET,
+    ZORRO_CLASS_AUDIO,
+    ZORRO_CLASS_BRIDGE,
+    ZORRO_CLASS_DSP,
+    ZORRO_CLASS_ETHERNET,
+    ZORRO_CLASS_ETHERNET_PARALLEL,
+    ZORRO_CLASS_FLASHROM,
+    ZORRO_CLASS_FPU_RAM,
+    ZORRO_CLASS_GFX,
+    ZORRO_CLASS_GFXRAM,
+    ZORRO_CLASS_HD,
+    ZORRO_CLASS_HD_RAM,
+    ZORRO_CLASS_IDE,
+    ZORRO_CLASS_IDE_RAM,
+    ZORRO_CLASS_ISDN,
+    ZORRO_CLASS_MACEMU,
+    ZORRO_CLASS_MISC,
+    ZORRO_CLASS_MODEM,
+    ZORRO_CLASS_MULTIIO,
+    ZORRO_CLASS_RAM,
+    ZORRO_CLASS_SCANNER,
+    ZORRO_CLASS_SCSI,
+    ZORRO_CLASS_SCSI_IDE,
+    ZORRO_CLASS_SCSI_RAM,
+    ZORRO_CLASS_SCSI_SERIAL,
+    ZORRO_CLASS_SERIAL,
+    ZORRO_CLASS_TABLET,
+    ZORRO_CLASS_TURBO,
+    ZORRO_CLASS_TURBO_RAM,
+    ZORRO_CLASS_TURBO_HD,
+    ZORRO_CLASS_TURBO_IDE,
+    ZORRO_CLASS_TURBO_SCSI,
+    ZORRO_CLASS_VIDEO,
+};
 
-#define MANUF_PACIFIC          (0x00D3)	/* Pacific Peripherals */
-#define PROD_SE_2000_A500      (0x00)	/* SE 2000 A500 */
-#define PROD_PACIFIC_HD        (0x0A)	/* HD Controller */
-
-#define MANUF_KUPKE            (0x00DD)	/* Kupke */
-#define PROD_GOLEM_BOX_2       (0x00)	/* Golem RAM Box 2MB */
-
-#define MANUF_MEMPHIS          (0x0100)	/* Memphis */
-#define PROD_STORMBRINGER      (0x00)	/* Stormbringer */
-
-#define MANUF_3_STATE          (0x0200)	/* 3-State */
-#define PROD_MEGAMIX_2000      (0x02)	/* Megamix 2000 RAM */
-
-#define MANUF_COMMODORE2       (0x0201)	/* Commodore Braunschweig */
-#define PROD_A2088             (0x01)	/* CBM A2088 XT Bridgeboard */
-#define PROD_A2286             (0x02)	/* CBM A2286 AT Bridgeboard */
-#define PROD_A4091_2           (0x54)	/* CBM A4091 SCSI Controller */
-#define PROD_A2386SX           (0x67)	/* CBM A2386-SX Bridgeboard */
-
-#define MANUF_COMMODORE        (0x0202)	/* Commodore West Chester */
-#define PROD_A2090A            (0x01)	/* CBM A2090/A2090A HD Controller */
-#define PROD_A590              (0x02)	/* CBM A590 SCSI Controller */
-#define PROD_A2091             (0x03)	/* CBM A2091 SCSI Controller */
-#define PROD_A2090B            (0x04)	/* CBM A2090B 2090 Autoboot Card */
-#define PROD_ARCNET            (0x09)	/* CBM A2060 Arcnet Card */
-#define PROD_CBMRAM            (0x0A)	/* CBM A2052/58.RAM | 590/2091.RAM */
-#define PROD_A560RAM           (0x20)	/* CBM A560 Memory Module */
-#define PROD_A2232PROTO        (0x45)	/* CBM A2232 Serial Prototype */
-#define PROD_A2232             (0x46)	/* CBM A2232 Serial Production */
-#define PROD_A2620             (0x50)	/* CBM A2620 68020/RAM Card */
-#define PROD_A2630             (0x51)	/* CBM A2630 68030/RAM Card */
-#define PROD_A4091             (0x54)	/* CBM A4091 SCSI Controller */
-#define PROD_A2065_2           (0x5A)	/* A2065 Ethernet Card */
-#define PROD_ROMULATOR         (0x60)	/* CBM Romulator Card */
-#define PROD_A3000TESTFIX      (0x61)	/* CBM A3000 Test Fixture */
-#define PROD_A2386SX_2         (0x67)	/* A2386-SX Bridgeboard */
-#define PROD_A2065             (0x70)	/* CBM A2065 Ethernet Card */
-
-#define MANUF_COMMODORE3       (0x0203)	/* Commodore West Chester */
-#define PROD_A2090A_CM         (0x03)	/* A2090A Combitec/MacroSystem */
-
-#define MANUF_KCS              (0x02FF)	/* Kolff Computer Supplies */
-#define PROD_POWER_BOARD       (0x00)	/* KCS Power PC Board */
-
-#define MANUF_CARDCO           (0x03EC)	/* Cardco */
-#define PROD_KRONOS_2000_SCSI  (0x04)	/* Kronos 2000 SCSI Controller */
-#define PROD_A1000_SCSI        (0x0C)	/* A1000 SCSI Controller */
-#define PROD_ESCORT_SCSI       (0x0E)	/* Escort SCSI Controller */
-#define PROD_CC_A2410          (0xF5)	/* Cardco A2410 Hires Graphics Card */
-
-#define MANUF_A_SQUARED        (0x03ED)	/* A-Squared */
-#define PROD_LIVE_2000         (0x01)	/* Live! 2000 */
-
-#define MANUF_COMSPEC          (0x03EE)	/* ComSpec Communications */
-#define PROD_AX2000            (0x01)	/* AX2000 */
-
-#define MANUF_ANAKIN           (0x03F1)	/* Anakin */
-#define PROD_EASYL             (0x01)	/* Easyl Tablet */
-
-#define MANUF_MICROBOTICS      (0x03F2)	/* MicroBotics */
-#define PROD_STARBOARD_II      (0x00)	/* StarBoard II */
-#define PROD_STARDRIVE         (0x02)	/* StarDrive */
-#define PROD_8_UP_A            (0x03)	/* 8-Up (Rev A) */
-#define PROD_8_UP_Z            (0x04)	/* 8-Up (Rev Z) */
-#define PROD_DELTA_RAM         (0x20)	/* Delta Card RAM */
-#define PROD_8_STAR_RAM        (0x40)	/* 8-Star RAM */
-#define PROD_8_STAR            (0x41)	/* 8-Star */
-#define PROD_VXL_RAM           (0x44)	/* VXL RAM */
-#define PROD_VXL_30            (0x45)	/* VXL-30 Turbo Board */
-#define PROD_DELTA             (0x60)	/* Delta Card */
-#define PROD_MBX_1200          (0x81)	/* MBX 1200 */
-#define PROD_HARDFRAME_2000    (0x9E)	/* Hardframe 2000 */
-#define PROD_MBX_1200_2        (0xC1)	/* MBX 1200 */
-
-#define MANUF_ACCESS           (0x03F4)	/* Access Associates */
-
-#define MANUF_EXPANSION_TECH   (0x03F6)	/* Expansion Technologies */
-
-#define MANUF_ASDG             (0x03FF)	/* ASDG */
-#define PROD_ASDG_MEMORY       (0x01)	/* Memory Expansion */
-#define PROD_ASDG_MEMORY_2     (0x02)	/* Memory Expansion */
-#define PROD_LAN_ROVER         (0xFE)	/* Lan Rover Ethernet */
-#define PROD_TWIN_X            (0xFF)	/* Twin-X Serial Card */
-
-#define MANUF_IMTRONICS        (0x0404)	/* Imtronics */
-#define PROD_HURRICANE_2800    (0x39)	/* Hurricane 2800 68030 */
-#define PROD_HURRICANE_2800_2  (0x57)	/* Hurricane 2800 68030 */
-
-#define MANUF_UNIV_OF_LOWELL   (0x0406)	/* University of Lowell */
-#define PROD_A2410             (0x00)	/* CBM A2410 Hires Graphics Card */
-
-#define MANUF_AMERISTAR        (0x041D)	/* Ameristar */
-#define PROD_AMERISTAR2065     (0x01)	/* A2065 Ethernet Card */
-#define PROD_A560              (0x09)	/* Arcnet Card */
-#define PROD_A4066             (0x0A)	/* A4066 Ethernet Card */
-
-#define MANUF_SUPRA            (0x0420)	/* Supra */
-#define PROD_SUPRADRIVE_4x4    (0x01)	/* SupraDrive 4x4 SCSI Controller */
-#define PROD_SUPRA_2000        (0x03)	/* 2000 DMA HD */
-#define PROD_SUPRA_500         (0x05)	/* 500 HD/RAM */
-#define PROD_SUPRA_500XP       (0x09)	/* 500XP/2000 RAM */
-#define PROD_SUPRA_500RX       (0x0A)	/* 500RX/2000 RAM */
-#define PROD_SUPRA_2400ZI      (0x0B)	/* 2400zi Modem */
-#define PROD_WORDSYNC          (0x0C)	/* Supra Wordsync SCSI Controller */
-#define PROD_WORDSYNC_II       (0x0D)	/* Supra Wordsync II SCSI Controller */
-#define PROD_SUPRA_2400ZIPLUS  (0x10)	/* 2400zi+ Modem */
-
-#define MANUF_CSA              (0x0422)	/* Computer Systems Ass. */
-#define PROD_MAGNUM            (0x11)	/* Magnum 40 SCSI Controller */
-#define PROD_12GAUGE           (0x15)	/* 12 Gauge SCSI Controller */
-
-#define MANUF_MTEC2            (0x0502)	/* M-Tech */
-#define PROD_AT500_2           (0x03)	/* AT500 RAM */
-
-#define MANUF_GVP3             (0x06E1)	/* Great Valley Products */
-#define PROD_IMPACT            (0x08)	/* Impact SCSI/Memory */
-
-#define MANUF_BYTEBOX          (0x07DA)	/* ByteBox */
-#define PROD_BYTEBOX_A500      (0x00)	/* A500 */
-
-#define MANUF_HACKER           (0x07DB)	/* Test only: no product definitions */
-
-#define MANUF_POWER_COMPUTING  (0x07DC)	/* Power Computing (DKB) */
-#define PROD_DKB_3128          (0x0E)	/* DKB 3128 RAM */
-#define PROD_RAPID_FIRE        (0x0F)	/* Rapid Fire SCSI Controller */
-#define PROD_DKB_1202          (0x10)	/* DKB 1202 RAM */
-#define PROD_VIPER_II_COBRA    (0x12)	/* Viper II Turbo Board (DKB Cobra) */
-#define PROD_WILDFIRE_060      (0x17)	/* WildFire 060 Turbo Board */
-#define PROD_WILDFIRE_060_2    (0xFF)	/* WildFire 060 Turbo Board */
-
-#define MANUF_GVP              (0x07E1)	/* Great Valley Products */
-#define PROD_IMPACT_I_4K       (0x01)	/* Impact Series-I SCSI 4K */
-#define PROD_IMPACT_I_16K_2    (0x02)	/* Impact Series-I SCSI 16K/2 */
-#define PROD_IMPACT_I_16K_3    (0x03)	/* Impact Series-I SCSI 16K/3 */
-#define PROD_IMPACT_3001_IDE   (0x08)	/* Impact 3001 IDE */
-#define PROD_IMPACT_3001_RAM   (0x09)	/* Impact 3001 RAM */
-#define PROD_GVPIISCSI         (0x0B)	/* GVP Series II SCSI Controller */
-#define PROD_GVPIISCSI_2       (0x09)	/* evidence that the driver works
-					   for this product code also */
-#define PROD_GVPIIRAM          (0x0A)	/* GVP Series II RAM */
-#define PROD_GVP               (0x0B)	/* This code is used by a wide range of
-					   GVP products - use the epc to
-					   identify it correctly */
-#define PROD_GVP_A2000_030     (0x0D)	/* GVP A2000 68030 Turbo Board */
-#define PROD_IMPACT_3001_IDE_2 (0x0D)	/* Impact 3001 IDE */
-#define PROD_GFORCE_040_SCSI   (0x16)	/* GForce 040 with SCSI (new) */
-#define PROD_GVPIV_24          (0x20)	/* GVP IV-24 Graphics Board */
-#define PROD_GFORCE_040        (0xFF)	/* GForce 040 Turbo Board */
-/* #define PROD_GVPIO_EXT      (0xFF)*/	/* GVP I/O Extender */
-
-#define MANUF_SYNERGY          (0x07E5)	/* Synergy */
-
-#define MANUF_XETEC            (0x07E6)	/* Xetec */
-#define PROD_FASTCARD_SCSI     (0x01)	/* FastCard SCSI Controller */
-#define PROD_FASTCARD_RAM      (0x02)	/* FastCard RAM */
-
-#define MANUF_PPI              (0x07EA)	/* Progressive Peripherals Inc. */
-#define PROD_MERCURY           (0x00)	/* Mercury Turbo Board */
-#define PROD_PPS_A3000_040     (0x01)	/* PP&S A3000 68040 Turbo Board */
-#define PROD_PPS_A2000_040     (0x69)	/* PP&S A2000 68040 Turbo Board */
-#define PROD_ZEUS              (0x96)	/* Zeus SCSI Controller */
-#define PROD_PPS_A500_040      (0xBB)	/* PP&S A500 68040 Turbo Board */
-
-#define MANUF_XEBEC            (0x07EC)	/* Xebec */
-
-#define MANUF_SPIRIT           (0x07F2)	/* Spirit */
-#define PROD_HDA_506           (0x04)	/* HDA 506 Harddisk */
-#define PROD_OCTABYTE_RAM      (0x06)	/* OctaByte RAM */
-
-#define MANUF_BSC              (0x07FE)	/* BSC */
-#define PROD_ALF_3_SCSI        (0x03)	/* BSC ALF 3 SCSI Controller */
-
-#define MANUF_BSC3             (0x0801)	/* BSC */
-#define PROD_ALF_2_SCSI        (0x01)	/* ALF 2 SCSI Controller */
-#define PROD_ALF_2_SCSI_2      (0x02)	/* ALF 2 SCSI Controller */
-#define PROD_ALF_3_SCSI_2      (0x03)	/* ALF 3 SCSI Controller */
-
-#define MANUF_C_LTD            (0x0802)	/* C Ltd. */
-#define PROD_KRONOS_SCSI       (0x04)	/* Kronos SCSI Controller */
-#define PROD_A1000_SCSI_2      (0x0C)	/* A1000 SCSI Controller */
-
-#define MANUF_JOCHHEIM         (0x0804)	/* Jochheim */
-#define PROD_JOCHHEIM_RAM      (0x01)	/* Jochheim RAM */
-
-#define MANUF_CHECKPOINT       (0x0807)	/* Checkpoint Technologies */
-#define PROD_SERIAL_SOLUTION   (0x00)	/* Serial Solution */
-
-#define MANUF_ICD              (0x0817)	/* ICD */
-#define PROD_ADVANTAGE_2000    (0x01)	/* Advantage 2000 SCSI Controller */
-
-#define MANUF_KUPKE2           (0x0819)	/* Kupke */
-#define PROD_KUPKE_SCSI_II     (0x02)	/* Golem SCSI-II Controller */
-#define PROD_GOLEM_BOX         (0x03)	/* Golem Box */
-#define PROD_KUPKE_TURBO       (0x04)	/* 030/882 Turbo Board */
-#define PROD_KUPKE_SCSI_AT     (0x05)	/* SCSI/AT Controller */
-
-#define MANUF_GVP4             (0x081D)	/* Great Valley Products */
-#define PROD_A2000_RAM8        (0x09)	/* A2000-RAM8/2 */
-
-#define MANUF_INTERWORKS_NET   (0x081E)	/* Interworks Network */
-
-#define MANUF_HARDITAL         (0x0820)	/* Hardital Synthesis */
-#define PROD_TQM               (0x14)	/* TQM 68030+68882 Turbo Board */
-
-#define MANUF_BSC2             (0x082C)	/* BSC */
-#define PROD_OKTAGON_SCSI      (0x05)	/* BSC Oktagon 2008 SCSI Controller */
-#define PROD_TANDEM            (0x06)	/* BSC Tandem AT-2008/508 IDE */
-#define PROD_ALPHA_RAM_1200    (0x07)	/* Alpha RAM 1200 */
-#define PROD_OKTAGON_RAM       (0x08)	/* BSC Oktagon 2008 RAM */
-#define PROD_MULTIFACE_I       (0x10)	/* Alfa Data MultiFace I */
-#define PROD_MULTIFACE_II      (0x11)	/* Alfa Data MultiFace II */
-#define PROD_MULTIFACE_III     (0x12)	/* Alfa Data MultiFace III */
-#define PROD_BSC_FRAEMBUFFER   (0x20)	/* Framebuffer */
-#define PROD_GRAFFITI_RAM      (0x21)	/* Graffiti Graphics Board */
-#define PROD_GRAFFITI_REG      (0x22)
-#define PROD_ISDN_MASTERCARD   (0x40)	/* BSC ISDN MasterCard */
-#define PROD_ISDN_MASTERCARD_2 (0x41)	/* BSC ISDN MasterCard II */
-
-#define MANUF_ADV_SYS_SOFT     (0x0836)	/* Advanced Systems & Software */
-#define PROD_NEXUS_SCSI        (0x01)	/* Nexus SCSI Controller */
-#define PROD_NEXUS_RAM         (0x08)	/* Nexus RAM */
-
-#define MANUF_IMPULSE          (0x0838)	/* Impulse */
-#define PROD_FIRECRACKER_24    (0x00)	/* FireCracker 24 */
-
-#define MANUF_IVS              (0x0840)	/* IVS */
-#define PROD_GRANDSLAM_PIC_2   (0x02)	/* GrandSlam PIC 2 RAM */
-#define PROD_GRANDSLAM_PIC_1   (0x04)	/* GrandSlam PIC 1 RAM */
-#define PROD_IVS_OVERDRIVE     (0x10)	/* OverDrive HD */
-#define PROD_TRUMPCARD_CLASSIC (0x30)	/* Trumpcard Classic SCSI Controller */
-#define PROD_TRUMPCARD_PRO     (0x34)	/* Trumpcard Pro SCSI Controller */
-#define PROD_META_4            (0x40)	/* Meta-4 RAM */
-#define PROD_WAVETOOLS         (0xBF)	/* Wavetools Sound Board */
-#define PROD_VECTOR            (0xF3)	/* Vector SCSI Controller */
-#define PROD_VECTOR_2          (0xF4)	/* Vector SCSI Controller */
-
-#define MANUF_VECTOR           (0x0841)	/* Vector */
-#define PROD_CONNECTION        (0xE3)	/* Connection Serial IO */
-
-#define MANUF_XPERT_PRODEV     (0x0845)	/* XPert/ProDev */
-#define PROD_VISIONA_RAM       (0x01)	/* Visiona Graphics Board */
-#define PROD_VISIONA_REG       (0x02)
-#define PROD_MERLIN_RAM        (0x03)	/* Merlin Graphics Board */
-#define PROD_MERLIN_REG        (0x04)
-#define PROD_MERLIN_REG_2      (0xC9)
-
-#define MANUF_HYDRA_SYSTEMS    (0x0849)	/* Hydra Systems */
-#define PROD_AMIGANET          (0x01)	/* Amiganet Board */
-
-#define MANUF_SUNRIZE          (0x084F)	/* Sunrize Industries */
-#define PROD_AD1012            (0x01)	/* AD1012 Sound Board */
-#define PROD_AD516             (0x02)	/* AD516 Sound Board */
-#define PROD_DD512             (0x03)	/* DD512 Sound Board */
-
-#define MANUF_TRICERATOPS      (0x0850)	/* Triceratops */
-#define PROD_TRICERATOPS       (0x01)	/* Triceratops Multi I/O Board */
-
-#define MANUF_APPLIED_MAGIC    (0x0851)	/* Applied Magic Inc */
-#define PROD_DMI_RESOLVER      (0x01)	/* DMI Resolver Graphics Board */
-#define PROD_DIGITAL_BCASTER   (0x06)	/* Digital Broadcaster */
-
-#define MANUF_GFX_BASE         (0x085E)	/* GFX-Base */
-#define PROD_GDA_1_RAM         (0x00)	/* GDA-1 Graphics Board */
-#define PROD_GDA_1_REG         (0x01)
-
-#define MANUF_ROCTEC           (0x0860)	/* RocTec */
-#define PROD_RH_800C           (0x01)	/* RH 800C Hard Disk Controller */
-#define PROD_RH_800C_RAM       (0x01)	/* RH 800C RAM */
-
-#define MANUF_HELFRICH1        (0x0861)	/* Helfrich */
-#define PROD_RAINBOW3          (0x21)	/* Rainbow3 Graphics Board */
-
-#define MANUF_SW_RESULT_ENTS   (0x0866)	/* Software Result Enterprises */
-#define PROD_GG2PLUS           (0x01)	/* GG2+ Bus Converter */
-
-#define MANUF_MASOBOSHI        (0x086D)	/* Masoboshi */
-#define PROD_MASTER_CARD_RAM   (0x03)	/* Master Card RAM */
-#define PROD_MASTER_CARD_SCSI  (0x04)	/* Master Card SCSI Controller */
-#define PROD_MVD_819           (0x07)	/* MVD 819 */
-
-#define MANUF_VILLAGE_TRONIC   (0x0877)	/* Village Tronic */
-#define PROD_DOMINO_RAM        (0x01)	/* Domino Graphics Board */
-#define PROD_DOMINO_REG        (0x02)
-#define PROD_PICASSO_II_RAM    (0x0B)	/* Picasso II/II+ Graphics Board */
-#define PROD_PICASSO_II_REG    (0x0C)
-#define PROD_PICASSO_II_SEGM   (0x0D)	/* Picasso II/II+ (Segmented Mode) */
-#define PROD_PICASSO_IV        (0x15)	/* Picassio IV Graphics Board */
-#define PROD_PICASSO_IV_2      (0x16)
-#define PROD_PICASSO_IV_3      (0x17)
-#define PROD_PICASSO_IV_4      (0x18)
-#define PROD_ARIADNE           (0xC9)	/* Ariadne Ethernet */
-
-#define MANUF_UTILITIES_ULTD   (0x087B)	/* Utilities Unlimited */
-#define PROD_EMPLANT_DELUXE    (0x15)	/* Emplant Deluxe SCSI Controller */
-#define PROD_EMPLANT_DELUXE2   (0x20)	/* Emplant Deluxe SCSI Controller */
-
-#define MANUF_AMITRIX          (0x0880)	/* Amitrix */
-#define PROD_AMITRIX_MULTI_IO  (0x01)	/* Multi-IO */
-#define PROD_AMITRIX_CD_RAM    (0x02)	/* CD-RAM Memory */
-
-#define MANUF_ARMAX            (0x0885)	/* ArMax */
-#define PROD_OMNIBUS           (0x00)	/* OmniBus Graphics Board */
-
-#define MANUF_NEWTEK           (0x088F)	/* NewTek */
-#define PROD_VIDEOTOASTER      (0x00)	/* VideoToaster */
-
-#define MANUF_MTEC             (0x0890)	/* M-Tech Germany */
-#define PROD_AT500             (0x01)	/* AT500 IDE Controller */
-#define PROD_MTEC_68030        (0x03)	/* 68030 Turbo Board */
-#define PROD_MTEC_68020I       (0x06)	/* 68020i Turbo Board */
-#define PROD_MTEC_T1230        (0x20)	/* A1200 T68030/42 RTC Turbo Board */
-#define PROD_MTEC_RAM          (0x22)	/* MTEC 8MB RAM */
-#define PROD_VIPER_MK5_TURBO   (0x21)	/* Viper Mk V Turbo Board */
-#define PROD_VIPER_MK5_SCSI    (0x24)	/* Viper Mk V SCSI Controller */
-
-#define MANUF_GVP2             (0x0891)	/* Great Valley Products */
-#define PROD_SPECTRUM_RAM      (0x01)	/* EGS 28/24 Spectrum Graphics Board */
-#define PROD_SPECTRUM_REG      (0x02)
-
-#define MANUF_HELFRICH2        (0x0893)	/* Helfrich */
-#define PROD_PICCOLO_RAM       (0x05)	/* Piccolo Graphics Board */
-#define PROD_PICCOLO_REG       (0x06)
-#define PROD_PEGGY_PLUS        (0x07)	/* PeggyPlus MPEG Decoder Board */
-#define PROD_VIDEOCRUNCHER     (0x08)	/* VideoCruncher */
-#define PROD_SD64_RAM          (0x0A)	/* SD64 Graphics Board */
-#define PROD_SD64_REG          (0x0B)
-
-#define MANUF_MACROSYSTEMS     (0x089B)	/* MacroSystems USA */
-#define PROD_WARP_ENGINE       (0x13)	/* Warp Engine 40xx SCSI Controller */
-
-#define MANUF_ELBOX            (0x089E)	/* ElBox Computer */
-#define PROD_ELBOX_1200        (0x06)	/* Elbox 1200/4 RAM */
-
-#define MANUF_HARMS_PROF       (0x0A00)	/* Harms Professional */
-#define PROD_HARMS_030_PLUS    (0x10)	/* 030 plus */
-#define PROD_3500_TURBO        (0xD0)	/* 3500 Turbo board */
-
-#define MANUF_MICRONIK         (0x0A50)	/* Micronik */
-#define PROD_RCA_120           (0x0A)	/* RCA 120 RAM */
-
-#define MANUF_MEGA_MICRO       (0x1000)	/* MegaMicro */
-#define PROD_SCRAM_500_SCSI    (0x03)	/* SCRAM 500 SCSI Controller */
-#define PROD_SCRAM_500_RAM     (0x04)	/* SCRAM 500 RAM */
-
-#define MANUF_IMTRONICS2       (0x1028)	/* Imtronics */
-#define PROD_HURRICANE_2800_3  (0x39)	/* Hurricane 2800 68030 */
-#define PROD_HURRICANE_2800_4  (0x57)	/* Hurricane 2800 68030 */
-
-#define MANUF_KUPKE3           (0x1248)	/* Kupke */
-#define PROD_GOLEM_3000        (0x01)	/* Golem HD 3000 */
-
-#define MANUF_ITH              (0x1388)	/* ITH */
-#define PROD_ISDN_MASTER_II    (0x01)	/* ISDN-Master II */
-
-#define MANUF_VMC              (0x1389)	/* VMC */
-#define PROD_ISDN_BLASTER_Z2   (0x01)	/* ISDN Blaster Z2 */
-#define PROD_HYPERCOM_4        (0x02)	/* HyperCom 4 */
-
-#define MANUF_INFORMATION      (0x157C)	/* Information */
-#define PROD_ISDN_ENGINE_I     (0x64)	/* ISDN Engine I */
-
-#define MANUF_VORTEX           (0x2017)	/* Vortex */
-#define PROD_GOLDEN_GATE_386SX (0x07)	/* Golden Gate 80386SX Board */
-#define PROD_GOLDEN_GATE_RAM   (0x08)	/* Golden Gate RAM */
-#define PROD_GOLDEN_GATE_486   (0x09)	/* Golden Gate 80486 Board */
-
-#define MANUF_DATAFLYER        (0x2062)	/* DataFlyer */
-#define PROD_DATAFLYER_4000SXS (0x01)	/* DataFlyer 4000SX SCSI Controller */
-#define PROD_DATAFLYER_4000SXR (0x02)	/* DataFlyer 4000SX RAM */
-
-#define MANUF_READYSOFT        (0x2100)	/* ReadySoft */
-#define PROD_AMAX              (0x01)	/* AMax II/IV */
-
-#define MANUF_PHASE5           (0x2140)	/* Phase5 */
-#define PROD_BLIZZARD_RAM      (0x01)	/* Blizzard RAM */
-#define PROD_BLIZZARD          (0x02)	/* Blizzard */
-#define PROD_BLIZZARD_1220_IV  (0x06)	/* Blizzard 1220-IV Turbo Board */
-#define PROD_FASTLANE_RAM      (0x0A)	/* FastLane RAM */
-#define PROD_FASTLANE_SCSI     (0x0B)	/* FastLane/Blizzard 1230-II SCSI/CyberSCSI */
-#define PROD_CYBERSTORM_SCSI   (0x0C)	/* Blizzard 1220/CyberStorm */
-#define PROD_BLIZZARD_1230_III (0x0D)	/* Blizzard 1230-III Turbo Board */
-#define PROD_BLIZZARD_1230_IV  (0x11)	/* Blizzard 1230-IV/1260 Turbo Board */
-#define PROD_BLIZZARD_2060SCSI (0x18)	/* Blizzard 2060 SCSI Controller */
-#define PROD_CYBERSTORM_II     (0x19)	/* CyberStorm Mk II */
-#define PROD_CYBERVISION       (0x22)	/* CyberVision64 Graphics Board */
-#define PROD_CYBERVISION3D_PRT (0x32)	/* CyberVision64-3D Prototype */
-#define PROD_CYBERVISION3D     (0x43)	/* CyberVision64-3D Graphics Board */
-
-#define MANUF_DPS              (0x2169)	/* DPS */
-#define PROD_DPS_PAR           (0x01)	/* Personal Animation Recorder */
-
-#define MANUF_APOLLO2          (0x2200)	/* Apollo */
-#define PROD_A620              (0x00)	/* A620 68020 Accelerator */
-#define PROD_A620_2            (0x01)	/* A620 68020 Accelerator */
-
-#define MANUF_APOLLO           (0x2222)	/* Apollo */
-#define PROD_AT_APOLLO         (0x22)	/* AT-Apollo */
-#define PROD_APOLLO_TURBO      (0x23)	/* Apollo Turbo Board */
-
-#define MANUF_PETSOFF          (0x38A5)	/* Petsoff LP */
-#define PROD_DELFINA           (0x00)	/* Delfina DSP */
-
-#define MANUF_UWE_GERLACH      (0x3FF7)	/* Uwe Gerlach */
-#define PROD_UG_RAM_ROM        (0xd4)	/* RAM/ROM */
-
-#define MANUF_MACROSYSTEMS2    (0x4754)	/* MacroSystems Germany */
-#define PROD_MAESTRO           (0x03)	/* Maestro */
-#define PROD_VLAB              (0x04)	/* VLab */
-#define PROD_MAESTRO_PRO       (0x05)	/* Maestro Pro */
-#define PROD_RETINA_Z2         (0x06)	/* Retina Z2 Graphics Board */
-#define PROD_MULTI_EVOLUTION   (0x08)	/* MultiEvolution */
-#define PROD_TOCCATA           (0x0C)	/* Toccata Sound Board */
-#define PROD_RETINA_Z3         (0x10)	/* Retina Z3 Graphics Board */
-#define PROD_VLAB_MOTION       (0x12)	/* VLab Motion */
-#define PROD_ALTAIS            (0x13)	/* Altais Graphics Board */
-#define PROD_FALCON_040        (0xFD)	/* Falcon '040 Turbo Board */
-
-#define MANUF_COMBITEC         (0x6766)	/* Combitec */
-
-#define MANUF_SKI              (0x8000)	/* SKI Peripherals */
-#define PROD_MAST_FIREBALL     (0x08)	/* M.A.S.T. Fireball SCSI Controller */
-#define PROD_SKI_SCSI_SERIAL   (0x80)	/* SCSI / Dual Serial */
-
-#define MANUF_CAMERON          (0xAA01)	/* Cameron */
-#define PROD_PERSONAL_A4       (0x10)	/* Personal A4 */
-
-#define MANUF_REIS_WARE        (0xAA11)	/* Reis-Ware */
-#define PROD_RW_HANDYSCANNER   (0x11)	/* Handyscanner */
-
-
-/* Illegal Manufacturer IDs. These do NOT appear in arch/m68k/amiga/zorro.c! */
-
-#define MANUF_HACKER_INC       (0x07DB)	/* Hacker Inc. */
-#define PROD_HACKER_SCSI       (0x01)	/* Hacker Inc. SCSI Controller */
-
-#define MANUF_RES_MNGT_FORCE   (0x07DB)	/* Resource Management Force */
-#define PROD_QUICKNET          (0x02)	/* QuickNet Ethernet */
-
-#define MANUF_VECTOR2          (0x07DB)	/* Vector */
-#define PROD_CONNECTION_2      (0xE0)	/* Vector Connection */
-#define PROD_CONNECTION_3      (0xE1)	/* Vector Connection */
-#define PROD_CONNECTION_4      (0xE2)	/* Vector Connection */
-#define PROD_CONNECTION_5      (0xE3)	/* Vector Connection */
-
-
-/*
- * GVP's identifies most of their product through the 'extended
- * product code' (epc). The epc has to be and'ed with the GVP_PRODMASK
- * before the identification.
- */
 
-#define GVP_PRODMASK    (0xf8)
-#define GVP_SCSICLKMASK (0x01)
+    /*
+     *  Known Zorro Boards
+     *
+     *  Each Zorro board has a 32-bit ID of the form
+     *
+     *      mmmmmmmmmmmmmmmmppppppppeeeeeeee
+     *
+     *  with
+     *
+     *      mmmmmmmmmmmmmmmm	16-bit Manufacturer ID (assigned by CBM (sigh))
+     *      pppppppp		8-bit Product ID (assigned by manufacturer)
+     *      eeeeeeee		8-bit Extended Product ID (currently only used
+     *				for some GVP boards)
+     */
+
+
+#define ZORRO_MANUF(id)		((id) >> 16)
+#define ZORRO_PROD(id)		(((id) >> 8) & 0xff)
+#define ZORRO_EPC(id)		((id) & 0xff)
+
+#define ZORRO_ID(manuf, prod, epc) \
+    ((ZORRO_MANUF_##manuf << 16) | ((prod) << 8) | (epc))
+
+typedef u32 zorro_id;
+
+
+#define ZORRO_MANUF_PACIFIC_PERIPHERALS				0x00D3
+#define  ZORRO_PROD_PACIFIC_PERIPHERALS_SE_2000_A500		ZORRO_ID(PACIFIC_PERIPHERALS, 0x00, 0)
+#define  ZORRO_PROD_PACIFIC_PERIPHERALS_HD			ZORRO_ID(PACIFIC_PERIPHERALS, 0x0A, 0)
+
+#define ZORRO_MANUF_KUPKE_1					0x00DD
+#define  ZORRO_PROD_KUPKE_GOLEM_RAM_BOX_2MB			ZORRO_ID(KUPKE_1, 0x00, 0)
+
+#define ZORRO_MANUF_MEMPHIS					0x0100
+#define  ZORRO_PROD_MEMPHIS_STORMBRINGER			ZORRO_ID(MEMPHIS, 0x00, 0)
+
+#define ZORRO_MANUF_3_STATE					0x0200
+#define  ZORRO_PROD_3_STATE_MEGAMIX_2000			ZORRO_ID(3_STATE, 0x02, 0)
+
+#define ZORRO_MANUF_COMMODORE_BRAUNSCHWEIG			0x0201
+#define  ZORRO_PROD_CBM_A2088_A2286				ZORRO_ID(COMMODORE_BRAUNSCHWEIG, 0x01, 0)
+#define  ZORRO_PROD_CBM_A2286					ZORRO_ID(COMMODORE_BRAUNSCHWEIG, 0x02, 0)
+#define  ZORRO_PROD_CBM_A4091_1					ZORRO_ID(COMMODORE_BRAUNSCHWEIG, 0x54, 0)
+#define  ZORRO_PROD_CBM_A2386SX_1				ZORRO_ID(COMMODORE_BRAUNSCHWEIG, 0x67, 0)
+
+#define ZORRO_MANUF_COMMODORE_WEST_CHESTER_1			0x0202
+#define  ZORRO_PROD_CBM_A2090A					ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x01, 0)
+#define  ZORRO_PROD_CBM_A590_A2091_1				ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x02, 0)
+#define  ZORRO_PROD_CBM_A590_A2091_2				ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x03, 0)
+#define  ZORRO_PROD_CBM_A2090B					ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x04, 0)
+#define  ZORRO_PROD_CBM_A2060					ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x09, 0)
+#define  ZORRO_PROD_CBM_A590_A2052_A2058_A2091			ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x0A, 0)
+#define  ZORRO_PROD_CBM_A560_RAM				ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x20, 0)
+#define  ZORRO_PROD_CBM_A2232_PROTOTYPE				ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x45, 0)
+#define  ZORRO_PROD_CBM_A2232					ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x46, 0)
+#define  ZORRO_PROD_CBM_A2620					ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x50, 0)
+#define  ZORRO_PROD_CBM_A2630					ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x51, 0)
+#define  ZORRO_PROD_CBM_A4091_2					ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x54, 0)
+#define  ZORRO_PROD_CBM_A2065_1					ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x5A, 0)
+#define  ZORRO_PROD_CBM_ROMULATOR				ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x60, 0)
+#define  ZORRO_PROD_CBM_A3000_TEST_FIXTURE			ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x61, 0)
+#define  ZORRO_PROD_CBM_A2386SX_2				ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x67, 0)
+#define  ZORRO_PROD_CBM_A2065_2					ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x70, 0)
+
+#define ZORRO_MANUF_COMMODORE_WEST_CHESTER_2			0x0203
+#define  ZORRO_PROD_CBM_A2090A_CM				ZORRO_ID(COMMODORE_WEST_CHESTER_2, 0x03, 0)
+
+#define ZORRO_MANUF_KOLFF_COMPUTER_SUPPLIES			0x02FF
+#define  ZORRO_PROD_KCS_POWER_PC_BOARD				ZORRO_ID(KOLFF_COMPUTER_SUPPLIES, 0x00, 0)
+
+#define ZORRO_MANUF_CARDCO_1					0x03EC
+#define  ZORRO_PROD_CARDCO_KRONOS_2000_1			ZORRO_ID(CARDCO_1, 0x04, 0)
+#define  ZORRO_PROD_CARDCO_A1000_1				ZORRO_ID(CARDCO_1, 0x0C, 0)
+#define  ZORRO_PROD_CARDCO_ESCORT				ZORRO_ID(CARDCO_1, 0x0E, 0)
+#define  ZORRO_PROD_CARDCO_A2410				ZORRO_ID(CARDCO_1, 0xF5, 0)
+
+#define ZORRO_MANUF_A_SQUARED					0x03ED
+#define  ZORRO_PROD_A_SQUARED_LIVE_2000				ZORRO_ID(A_SQUARED, 0x01, 0)
+
+#define ZORRO_MANUF_COMSPEC_COMMUNICATIONS			0x03EE
+#define  ZORRO_PROD_COMSPEC_COMMUNICATIONS_AX2000		ZORRO_ID(COMSPEC_COMMUNICATIONS, 0x01, 0)
+
+#define ZORRO_MANUF_ANAKIN_RESEARCH				0x03F1
+#define  ZORRO_PROD_ANAKIN_RESEARCH_EASYL			ZORRO_ID(ANAKIN_RESEARCH, 0x01, 0)
+
+#define ZORRO_MANUF_MICROBOTICS					0x03F2
+#define  ZORRO_PROD_MICROBOTICS_STARBOARD_II			ZORRO_ID(MICROBOTICS, 0x00, 0)
+#define  ZORRO_PROD_MICROBOTICS_STARDRIVE			ZORRO_ID(MICROBOTICS, 0x02, 0)
+#define  ZORRO_PROD_MICROBOTICS_8_UP_A				ZORRO_ID(MICROBOTICS, 0x03, 0)
+#define  ZORRO_PROD_MICROBOTICS_8_UP_Z				ZORRO_ID(MICROBOTICS, 0x04, 0)
+#define  ZORRO_PROD_MICROBOTICS_DELTA_RAM			ZORRO_ID(MICROBOTICS, 0x20, 0)
+#define  ZORRO_PROD_MICROBOTICS_8_STAR_RAM			ZORRO_ID(MICROBOTICS, 0x40, 0)
+#define  ZORRO_PROD_MICROBOTICS_8_STAR				ZORRO_ID(MICROBOTICS, 0x41, 0)
+#define  ZORRO_PROD_MICROBOTICS_VXL_RAM_32			ZORRO_ID(MICROBOTICS, 0x44, 0)
+#define  ZORRO_PROD_MICROBOTICS_VXL_68030			ZORRO_ID(MICROBOTICS, 0x45, 0)
+#define  ZORRO_PROD_MICROBOTICS_DELTA				ZORRO_ID(MICROBOTICS, 0x60, 0)
+#define  ZORRO_PROD_MICROBOTICS_MBX_1200_1200Z_RAM		ZORRO_ID(MICROBOTICS, 0x81, 0)
+#define  ZORRO_PROD_MICROBOTICS_HARDFRAME_2000			ZORRO_ID(MICROBOTICS, 0x9E, 0)
+#define  ZORRO_PROD_MICROBOTICS_MBX_1200_1200Z			ZORRO_ID(MICROBOTICS, 0xC1, 0)
+
+#define ZORRO_MANUF_ACCESS_ASSOCIATES				0x03F4
+
+#define ZORRO_MANUF_EXPANSION_TECHNOLOGIES			0x03F6
+
+#define ZORRO_MANUF_ASDG					0x03FF
+#define  ZORRO_PROD_ASDG_MEMORY_1				ZORRO_ID(ASDG, 0x01, 0)
+#define  ZORRO_PROD_ASDG_MEMORY_2				ZORRO_ID(ASDG, 0x02, 0)
+#define  ZORRO_PROD_ASDG_LAN_ROVER				ZORRO_ID(ASDG, 0xFE, 0)
+#define  ZORRO_PROD_ASDG_TWIN_X					ZORRO_ID(ASDG, 0xFF, 0)
+
+#define ZORRO_MANUF_IMTRONICS_1					0x0404
+#define  ZORRO_PROD_IMTRONICS_HURRICANE_2800_68030_1		ZORRO_ID(IMTRONICS_1, 0x39, 0)
+#define  ZORRO_PROD_IMTRONICS_HURRICANE_2800_68030_2		ZORRO_ID(IMTRONICS_1, 0x57, 0)
+
+#define ZORRO_MANUF_CBM_UNIVERSITY_OF_LOWELL			0x0406
+#define  ZORRO_PROD_CBM_A2410					ZORRO_ID(CBM_UNIVERSITY_OF_LOWELL, 0x00, 0)
+
+#define ZORRO_MANUF_AMERISTAR					0x041D
+#define  ZORRO_PROD_AMERISTAR_A2065				ZORRO_ID(AMERISTAR, 0x01, 0)
+#define  ZORRO_PROD_AMERISTAR_A560				ZORRO_ID(AMERISTAR, 0x09, 0)
+#define  ZORRO_PROD_AMERISTAR_A4066				ZORRO_ID(AMERISTAR, 0x0A, 0)
+
+#define ZORRO_MANUF_SUPRA					0x0420
+#define  ZORRO_PROD_SUPRA_SUPRADRIVE_4x4			ZORRO_ID(SUPRA, 0x01, 0)
+#define  ZORRO_PROD_SUPRA_2000_DMA				ZORRO_ID(SUPRA, 0x03, 0)
+#define  ZORRO_PROD_SUPRA_500					ZORRO_ID(SUPRA, 0x05, 0)
+#define  ZORRO_PROD_SUPRA_500XP_2000_RAM			ZORRO_ID(SUPRA, 0x09, 0)
+#define  ZORRO_PROD_SUPRA_500RX_2000_RAM			ZORRO_ID(SUPRA, 0x0A, 0)
+#define  ZORRO_PROD_SUPRA_2400ZI				ZORRO_ID(SUPRA, 0x0B, 0)
+#define  ZORRO_PROD_SUPRA_500XP_SUPRADRIVE_WORDSYNC		ZORRO_ID(SUPRA, 0x0C, 0)
+#define  ZORRO_PROD_SUPRA_SUPRADRIVE_WORDSYNC_II		ZORRO_ID(SUPRA, 0x0D, 0)
+#define  ZORRO_PROD_SUPRA_2400ZIPLUS				ZORRO_ID(SUPRA, 0x10, 0)
+
+#define ZORRO_MANUF_COMPUTER_SYSTEMS_ASSOCIATES			0x0422
+#define  ZORRO_PROD_CSA_MAGNUM					ZORRO_ID(COMPUTER_SYSTEMS_ASSOCIATES, 0x11, 0)
+#define  ZORRO_PROD_CSA_12_GAUGE				ZORRO_ID(COMPUTER_SYSTEMS_ASSOCIATES, 0x15, 0)
+
+#define ZORRO_MANUF_M_TECH					0x0502
+#define  ZORRO_PROD_MTEC_AT500_1				ZORRO_ID(M_TECH, 0x03, 0)
+
+#define ZORRO_MANUF_GREAT_VALLEY_PRODUCTS_1			0x06E1
+#define  ZORRO_PROD_GVP_IMPACT_SERIES_I				ZORRO_ID(GREAT_VALLEY_PRODUCTS_1, 0x08, 0)
+
+#define ZORRO_MANUF_BYTEBOX					0x07DA
+#define  ZORRO_PROD_BYTEBOX_A500				ZORRO_ID(BYTEBOX, 0x00, 0)
+
+#define ZORRO_MANUF_DKB_POWER_COMPUTING				0x07DC
+#define  ZORRO_PROD_DKB_POWER_COMPUTING_DKM_3128		ZORRO_ID(DKB_POWER_COMPUTING, 0x0E, 0)
+#define  ZORRO_PROD_DKB_POWER_COMPUTING_RAPID_FIRE		ZORRO_ID(DKB_POWER_COMPUTING, 0x0F, 0)
+#define  ZORRO_PROD_DKB_POWER_COMPUTING_DKM_1202		ZORRO_ID(DKB_POWER_COMPUTING, 0x10, 0)
+#define  ZORRO_PROD_DKB_POWER_COMPUTING_COBRA_VIPER_II_68EC030	ZORRO_ID(DKB_POWER_COMPUTING, 0x12, 0)
+#define  ZORRO_PROD_DKB_POWER_COMPUTING_WILDFIRE_060_1		ZORRO_ID(DKB_POWER_COMPUTING, 0x17, 0)
+#define  ZORRO_PROD_DKB_POWER_COMPUTING_WILDFIRE_060_2		ZORRO_ID(DKB_POWER_COMPUTING, 0xFF, 0)
+
+#define ZORRO_MANUF_GREAT_VALLEY_PRODUCTS_2			0x07E1
+#define  ZORRO_PROD_GVP_IMPACT_SERIES_I_4K			ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x01, 0)
+#define  ZORRO_PROD_GVP_IMPACT_SERIES_I_16K_2			ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x02, 0)
+#define  ZORRO_PROD_GVP_IMPACT_SERIES_I_16K_3			ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x03, 0)
+#define  ZORRO_PROD_GVP_IMPACT_3001_IDE_1			ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x08, 0)
+#define  ZORRO_PROD_GVP_IMPACT_3001_RAM				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x09, 0)
+#define  ZORRO_PROD_GVP_IMPACT_SERIES_II_RAM_1			ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0A, 0)
+#define  ZORRO_PROD_GVP_EPC_BASE				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0)
+#define  ZORRO_PROD_GVP_GFORCE_040_1				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x20)
+#define  ZORRO_PROD_GVP_GFORCE_040_SCSI_1			ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x30)
+#define  ZORRO_PROD_GVP_A1291					ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x40)
+#define  ZORRO_PROD_GVP_COMBO_030_R4				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x60)
+#define  ZORRO_PROD_GVP_COMBO_030_R4_SCSI			ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x70)
+#define  ZORRO_PROD_GVP_PHONEPAK				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x78)
+#define  ZORRO_PROD_GVP_IO_EXTENDER				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x98)
+#define  ZORRO_PROD_GVP_GFORCE_030				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xa0)
+#define  ZORRO_PROD_GVP_GFORCE_030_SCSI				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xb0)
+#define  ZORRO_PROD_GVP_A530					ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xc0)
+#define  ZORRO_PROD_GVP_A530_SCSI				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xd0)
+#define  ZORRO_PROD_GVP_COMBO_030_R3				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xe0)
+#define  ZORRO_PROD_GVP_COMBO_030_R3_SCSI			ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xf0)
+#define  ZORRO_PROD_GVP_SERIES_II				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xf8)
+#define  ZORRO_PROD_GVP_IMPACT_3001_IDE_2			ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0D, 0)
+/*#define  ZORRO_PROD_GVP_A2000_030				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0D, 0)*/
+/*#define  ZORRO_PROD_GVP_GFORCE_040_SCSI_2			ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0D, 0)*/
+#define  ZORRO_PROD_GVP_GFORCE_040_060				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x16, 0)
+#define  ZORRO_PROD_GVP_IMPACT_VISION_24			ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x20, 0)
+#define  ZORRO_PROD_GVP_GFORCE_040_2				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0xFF, 0)
+
+#define ZORRO_MANUF_SYNERGY					0x07E5
+
+#define ZORRO_MANUF_XETEC					0x07E6
+#define  ZORRO_PROD_XETEC_FASTCARD				ZORRO_ID(XETEC, 0x01, 0)
+#define  ZORRO_PROD_XETEC_FASTCARD_RAM				ZORRO_ID(XETEC, 0x02, 0)
+
+#define ZORRO_MANUF_PROGRESSIVE_PERIPHERALS_AND_SYSTEMS		0x07EA
+#define  ZORRO_PROD_PPS_MERCURY					ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS, 0x00, 0)
+#define  ZORRO_PROD_PPS_A3000_68040				ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS, 0x01, 0)
+#define  ZORRO_PROD_PPS_A2000_68040				ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS, 0x69, 0)
+#define  ZORRO_PROD_PPS_ZEUS					ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS, 0x96, 0)
+#define  ZORRO_PROD_PPS_A500_68040				ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS, 0xBB, 0)
+
+#define ZORRO_MANUF_XEBEC					0x07EC
+
+#define ZORRO_MANUF_SPIRIT					0x07F2
+#define  ZORRO_PROD_SPIRIT_HDA_506				ZORRO_ID(SPIRIT, 0x04, 0)
+#define  ZORRO_PROD_SPIRIT_OCTABYTE				ZORRO_ID(SPIRIT, 0x06, 0)
+
+#define ZORRO_MANUF_BSC_ALFADATA_1				0x07FE
+#define  ZORRO_PROD_BSC_ALF_3_1					ZORRO_ID(BSC_ALFADATA_1, 0x03, 0)
+
+#define ZORRO_MANUF_BSC_ALFADATA_2				0x0801
+#define  ZORRO_PROD_BSC_ALF_2_1					ZORRO_ID(BSC_ALFADATA_2, 0x01, 0)
+#define  ZORRO_PROD_BSC_ALF_2_2					ZORRO_ID(BSC_ALFADATA_2, 0x02, 0)
+#define  ZORRO_PROD_BSC_ALF_3_2					ZORRO_ID(BSC_ALFADATA_2, 0x03, 0)
+
+#define ZORRO_MANUF_CARDCO_2					0x0802
+#define  ZORRO_PROD_CARDCO_KRONOS_2000_2			ZORRO_ID(CARDCO_2, 0x04, 0)
+#define  ZORRO_PROD_CARDCO_A1000_2				ZORRO_ID(CARDCO_2, 0x0C, 0)
+
+#define ZORRO_MANUF_JOCHHEIM					0x0804
+#define  ZORRO_PROD_JOCHHEIM_RAM				ZORRO_ID(JOCHHEIM, 0x01, 0)
+
+#define ZORRO_MANUF_CHECKPOINT_TECHNOLOGIES			0x0807
+#define  ZORRO_PROD_CHECKPOINT_TECHNOLOGIES_SERIAL_SOLUTION	ZORRO_ID(CHECKPOINT_TECHNOLOGIES, 0x00, 0)
+
+#define ZORRO_MANUF_ICD						0x0817
+#define  ZORRO_PROD_ICD_ADVANTAGE_2000				ZORRO_ID(ICD, 0x01, 0)
+
+#define ZORRO_MANUF_KUPKE_2					0x0819
+#define  ZORRO_PROD_KUPKE_SCSI_II				ZORRO_ID(KUPKE_2, 0x02, 0)
+#define  ZORRO_PROD_KUPKE_GOLEM_BOX				ZORRO_ID(KUPKE_2, 0x03, 0)
+#define  ZORRO_PROD_KUPKE_030_882				ZORRO_ID(KUPKE_2, 0x04, 0)
+#define  ZORRO_PROD_KUPKE_SCSI_AT				ZORRO_ID(KUPKE_2, 0x05, 0)
+
+#define ZORRO_MANUF_GREAT_VALLEY_PRODUCTS_3			0x081D
+#define  ZORRO_PROD_GVP_A2000_RAM8				ZORRO_ID(GREAT_VALLEY_PRODUCTS_3, 0x09, 0)
+#define  ZORRO_PROD_GVP_IMPACT_SERIES_II_RAM_2			ZORRO_ID(GREAT_VALLEY_PRODUCTS_3, 0x0A, 0)
+
+#define ZORRO_MANUF_INTERWORKS_NETWORK				0x081E
+
+#define ZORRO_MANUF_HARDITAL_SYNTHESIS				0x0820
+#define  ZORRO_PROD_HARDITAL_SYNTHESIS_TQM_68030_68882		ZORRO_ID(HARDITAL_SYNTHESIS, 0x14, 0)
+
+#define ZORRO_MANUF_BSC_ALFADATA_3				0x082C
+#define  ZORRO_PROD_BSC_OKTAGON_2008				ZORRO_ID(BSC_ALFADATA_3, 0x05, 0)
+#define  ZORRO_PROD_BSC_TANDEM_AT_2008_508			ZORRO_ID(BSC_ALFADATA_3, 0x06, 0)
+#define  ZORRO_PROD_BSC_ALFA_RAM_1200				ZORRO_ID(BSC_ALFADATA_3, 0x07, 0)
+#define  ZORRO_PROD_BSC_OKTAGON_2008_RAM			ZORRO_ID(BSC_ALFADATA_3, 0x08, 0)
+#define  ZORRO_PROD_BSC_MULTIFACE_I				ZORRO_ID(BSC_ALFADATA_3, 0x10, 0)
+#define  ZORRO_PROD_BSC_MULTIFACE_II				ZORRO_ID(BSC_ALFADATA_3, 0x11, 0)
+#define  ZORRO_PROD_BSC_MULTIFACE_III				ZORRO_ID(BSC_ALFADATA_3, 0x12, 0)
+#define  ZORRO_PROD_BSC_FRAMEBUFFER				ZORRO_ID(BSC_ALFADATA_3, 0x20, 0)
+#define  ZORRO_PROD_BSC_GRAFFITI_RAM				ZORRO_ID(BSC_ALFADATA_3, 0x21, 0)
+#define  ZORRO_PROD_BSC_GRAFFITI_REG				ZORRO_ID(BSC_ALFADATA_3, 0x22, 0)
+#define  ZORRO_PROD_BSC_ISDN_MASTERCARD				ZORRO_ID(BSC_ALFADATA_3, 0x40, 0)
+#define  ZORRO_PROD_BSC_ISDN_MASTERCARD_II			ZORRO_ID(BSC_ALFADATA_3, 0x41, 0)
+
+#define ZORRO_MANUF_ADVANCED_STORAGE_SYSTEMS			0x0836
+#define  ZORRO_PROD_ADVANCED_STORAGE_SYSTEMS_NEXUS		ZORRO_ID(ADVANCED_STORAGE_SYSTEMS, 0x01, 0)
+#define  ZORRO_PROD_ADVANCED_STORAGE_SYSTEMS_NEXUS_RAM		ZORRO_ID(ADVANCED_STORAGE_SYSTEMS, 0x08, 0)
+
+#define ZORRO_MANUF_IMPULSE					0x0838
+#define  ZORRO_PROD_IMPULSE_FIRECRACKER_24			ZORRO_ID(IMPULSE, 0x00, 0)
+
+#define ZORRO_MANUF_IVS						0x0840
+#define  ZORRO_PROD_IVS_GRANDSLAM_PIC_2				ZORRO_ID(IVS, 0x02, 0)
+#define  ZORRO_PROD_IVS_GRANDSLAM_PIC_1				ZORRO_ID(IVS, 0x04, 0)
+#define  ZORRO_PROD_IVS_OVERDRIVE				ZORRO_ID(IVS, 0x10, 0)
+#define  ZORRO_PROD_IVS_TRUMPCARD_CLASSIC			ZORRO_ID(IVS, 0x30, 0)
+#define  ZORRO_PROD_IVS_TRUMPCARD_PRO_GRANDSLAM			ZORRO_ID(IVS, 0x34, 0)
+#define  ZORRO_PROD_IVS_META_4					ZORRO_ID(IVS, 0x40, 0)
+#define  ZORRO_PROD_IVS_WAVETOOLS				ZORRO_ID(IVS, 0xBF, 0)
+#define  ZORRO_PROD_IVS_VECTOR_1				ZORRO_ID(IVS, 0xF3, 0)
+#define  ZORRO_PROD_IVS_VECTOR_2				ZORRO_ID(IVS, 0xF4, 0)
+
+#define ZORRO_MANUF_VECTOR_1					0x0841
+#define  ZORRO_PROD_VECTOR_CONNECTION_1				ZORRO_ID(VECTOR_1, 0xE3, 0)
+
+#define ZORRO_MANUF_XPERT_PRODEV				0x0845
+#define  ZORRO_PROD_XPERT_PRODEV_VISIONA_RAM			ZORRO_ID(XPERT_PRODEV, 0x01, 0)
+#define  ZORRO_PROD_XPERT_PRODEV_VISIONA_REG			ZORRO_ID(XPERT_PRODEV, 0x02, 0)
+#define  ZORRO_PROD_XPERT_PRODEV_MERLIN_RAM			ZORRO_ID(XPERT_PRODEV, 0x03, 0)
+#define  ZORRO_PROD_XPERT_PRODEV_MERLIN_REG_1			ZORRO_ID(XPERT_PRODEV, 0x04, 0)
+#define  ZORRO_PROD_XPERT_PRODEV_MERLIN_REG_2			ZORRO_ID(XPERT_PRODEV, 0xC9, 0)
+
+#define ZORRO_MANUF_HYDRA_SYSTEMS				0x0849
+#define  ZORRO_PROD_HYDRA_SYSTEMS_AMIGANET			ZORRO_ID(HYDRA_SYSTEMS, 0x01, 0)
+
+#define ZORRO_MANUF_SUNRIZE_INDUSTRIES				0x084F
+#define  ZORRO_PROD_SUNRIZE_INDUSTRIES_AD1012			ZORRO_ID(SUNRIZE_INDUSTRIES, 0x01, 0)
+#define  ZORRO_PROD_SUNRIZE_INDUSTRIES_AD516			ZORRO_ID(SUNRIZE_INDUSTRIES, 0x02, 0)
+#define  ZORRO_PROD_SUNRIZE_INDUSTRIES_DD512			ZORRO_ID(SUNRIZE_INDUSTRIES, 0x03, 0)
+
+#define ZORRO_MANUF_TRICERATOPS					0x0850
+#define  ZORRO_PROD_TRICERATOPS_MULTI_IO			ZORRO_ID(TRICERATOPS, 0x01, 0)
+
+#define ZORRO_MANUF_APPLIED_MAGIC				0x0851
+#define  ZORRO_PROD_APPLIED_MAGIC_DMI_RESOLVER			ZORRO_ID(APPLIED_MAGIC, 0x01, 0)
+#define  ZORRO_PROD_APPLIED_MAGIC_DIGITAL_BROADCASTER		ZORRO_ID(APPLIED_MAGIC, 0x06, 0)
+
+#define ZORRO_MANUF_GFX_BASE					0x085E
+#define  ZORRO_PROD_GFX_BASE_GDA_1_VRAM				ZORRO_ID(GFX_BASE, 0x00, 0)
+#define  ZORRO_PROD_GFX_BASE_GDA_1				ZORRO_ID(GFX_BASE, 0x01, 0)
+
+#define ZORRO_MANUF_ROCTEC					0x0860
+#define  ZORRO_PROD_ROCTEC_RH_800C				ZORRO_ID(ROCTEC, 0x01, 0)
+#define  ZORRO_PROD_ROCTEC_RH_800C_RAM				ZORRO_ID(ROCTEC, 0x01, 0)
+
+#define ZORRO_MANUF_KATO					0x0861
+#define  ZORRO_PROD_KATO_MELODY					ZORRO_ID(KATO, 0x80, 0)
+/* ID clash!! */
+#define ZORRO_MANUF_HELFRICH_1					0x0861
+#define  ZORRO_PROD_HELFRICH_RAINBOW_III			ZORRO_ID(HELFRICH_1, 0x21, 0)
+
+#define ZORRO_MANUF_SOFTWARE_RESULTS_ENTERPRISES		0x0866
+#define  ZORRO_PROD_SOFTWARE_RESULTS_ENTERPRISES_GOLDEN_GATE_2_BUS_PLUS	ZORRO_ID(SOFTWARE_RESULTS_ENTERPRISES, 0x01, 0)
+
+#define ZORRO_MANUF_MASOBOSHI					0x086D
+#define  ZORRO_PROD_MASOBOSHI_MASTER_CARD_SC201			ZORRO_ID(MASOBOSHI, 0x03, 0)
+#define  ZORRO_PROD_MASOBOSHI_MASTER_CARD_MC702			ZORRO_ID(MASOBOSHI, 0x04, 0)
+#define  ZORRO_PROD_MASOBOSHI_MVD_819				ZORRO_ID(MASOBOSHI, 0x07, 0)
+
+#define ZORRO_MANUF_VILLAGE_TRONIC				0x0877
+#define  ZORRO_PROD_VILLAGE_TRONIC_DOMINO_RAM			ZORRO_ID(VILLAGE_TRONIC, 0x01, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_DOMINO_REG			ZORRO_ID(VILLAGE_TRONIC, 0x02, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_II_II_PLUS_RAM	ZORRO_ID(VILLAGE_TRONIC, 0x0B, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_II_II_PLUS_REG	ZORRO_ID(VILLAGE_TRONIC, 0x0C, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_II_SEGMENTED_MODE	ZORRO_ID(VILLAGE_TRONIC, 0x0D, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_1			ZORRO_ID(VILLAGE_TRONIC, 0x15, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_2			ZORRO_ID(VILLAGE_TRONIC, 0x16, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_3			ZORRO_ID(VILLAGE_TRONIC, 0x17, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_4			ZORRO_ID(VILLAGE_TRONIC, 0x18, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_ARIADNE			ZORRO_ID(VILLAGE_TRONIC, 0xC9, 0)
+
+#define ZORRO_MANUF_UTILITIES_UNLIMITED				0x087B
+#define  ZORRO_PROD_UTILITIES_UNLIMITED_EMPLANT_DELUXE		ZORRO_ID(UTILITIES_UNLIMITED, 0x15, 0)
+#define  ZORRO_PROD_UTILITIES_UNLIMITED_EMPLANT_DELUXE2		ZORRO_ID(UTILITIES_UNLIMITED, 0x20, 0)
+
+#define ZORRO_MANUF_AMITRIX					0x0880
+#define  ZORRO_PROD_AMITRIX_MULTI_IO				ZORRO_ID(AMITRIX, 0x01, 0)
+#define  ZORRO_PROD_AMITRIX_CD_RAM				ZORRO_ID(AMITRIX, 0x02, 0)
+
+#define ZORRO_MANUF_ARMAX					0x0885
+#define  ZORRO_PROD_ARMAX_OMNIBUS				ZORRO_ID(ARMAX, 0x00, 0)
+
+#define ZORRO_MANUF_NEWTEK					0x088F
+#define  ZORRO_PROD_NEWTEK_VIDEOTOASTER				ZORRO_ID(NEWTEK, 0x00, 0)
+
+#define ZORRO_MANUF_M_TECH_GERMANY				0x0890
+#define  ZORRO_PROD_MTEC_AT500_2				ZORRO_ID(M_TECH_GERMANY, 0x01, 0)
+#define  ZORRO_PROD_MTEC_68030					ZORRO_ID(M_TECH_GERMANY, 0x03, 0)
+#define  ZORRO_PROD_MTEC_68020I					ZORRO_ID(M_TECH_GERMANY, 0x06, 0)
+#define  ZORRO_PROD_MTEC_A1200_T68030_RTC			ZORRO_ID(M_TECH_GERMANY, 0x20, 0)
+#define  ZORRO_PROD_MTEC_VIPER_MK_V				ZORRO_ID(M_TECH_GERMANY, 0x21, 0)
+#define  ZORRO_PROD_MTEC_8_MB_RAM				ZORRO_ID(M_TECH_GERMANY, 0x22, 0)
+#define  ZORRO_PROD_MTEC_VIPER_MK_V_SCSI			ZORRO_ID(M_TECH_GERMANY, 0x24, 0)
+
+#define ZORRO_MANUF_GREAT_VALLEY_PRODUCTS_4			0x0891
+#define  ZORRO_PROD_GVP_EGS_28_24_SPECTRUM_REG			ZORRO_ID(GREAT_VALLEY_PRODUCTS_4, 0x01, 0)
+#define  ZORRO_PROD_GVP_EGS_28_24_SPECTRUM_RAM			ZORRO_ID(GREAT_VALLEY_PRODUCTS_4, 0x02, 0)
+
+#define ZORRO_MANUF_APOLLO_1					0x0892
+#define  ZORRO_PROD_APOLLO_A1200				ZORRO_ID(APOLLO_1, 0x01, 0)
+
+#define ZORRO_MANUF_HELFRICH_2					0x0893
+#define  ZORRO_PROD_HELFRICH_PICCOLO_RAM			ZORRO_ID(HELFRICH_2, 0x05, 0)
+#define  ZORRO_PROD_HELFRICH_PICCOLO_REG			ZORRO_ID(HELFRICH_2, 0x06, 0)
+#define  ZORRO_PROD_HELFRICH_PEGGY_PLUS_MPEG			ZORRO_ID(HELFRICH_2, 0x07, 0)
+#define  ZORRO_PROD_HELFRICH_VIDEOCRUNCHER			ZORRO_ID(HELFRICH_2, 0x08, 0)
+#define  ZORRO_PROD_HELFRICH_SD64_RAM				ZORRO_ID(HELFRICH_2, 0x0A, 0)
+#define  ZORRO_PROD_HELFRICH_SD64_REG				ZORRO_ID(HELFRICH_2, 0x0B, 0)
+
+#define ZORRO_MANUF_MACROSYSTEMS_USA				0x089B
+#define  ZORRO_PROD_MACROSYSTEMS_WARP_ENGINE_40xx		ZORRO_ID(MACROSYSTEMS_USA, 0x13, 0)
+
+#define ZORRO_MANUF_ELBOX_COMPUTER				0x089E
+#define  ZORRO_PROD_ELBOX_COMPUTER_1200_4			ZORRO_ID(ELBOX_COMPUTER, 0x06, 0)
+
+#define ZORRO_MANUF_HARMS_PROFESSIONAL				0x0A00
+#define  ZORRO_PROD_HARMS_PROFESSIONAL_030_PLUS			ZORRO_ID(HARMS_PROFESSIONAL, 0x10, 0)
+#define  ZORRO_PROD_HARMS_PROFESSIONAL_3500			ZORRO_ID(HARMS_PROFESSIONAL, 0xD0, 0)
+
+#define ZORRO_MANUF_MICRONIK					0x0A50
+#define  ZORRO_PROD_MICRONIK_RCA_120				ZORRO_ID(MICRONIK, 0x0A, 0)
+
+#define ZORRO_MANUF_MEGAMICRO					0x1000
+#define  ZORRO_PROD_MEGAMICRO_SCRAM_500				ZORRO_ID(MEGAMICRO, 0x03, 0)
+#define  ZORRO_PROD_MEGAMICRO_SCRAM_500_RAM			ZORRO_ID(MEGAMICRO, 0x04, 0)
+
+#define ZORRO_MANUF_IMTRONICS_2					0x1028
+#define  ZORRO_PROD_IMTRONICS_HURRICANE_2800_68030_3		ZORRO_ID(IMTRONICS_2, 0x39, 0)
+#define  ZORRO_PROD_IMTRONICS_HURRICANE_2800_68030_4		ZORRO_ID(IMTRONICS_2, 0x57, 0)
+
+#define ZORRO_MANUF_KUPKE_3					0x1248
+#define  ZORRO_PROD_KUPKE_GOLEM_HD_3000				ZORRO_ID(KUPKE_3, 0x01, 0)
+
+#define ZORRO_MANUF_ITH						0x1388
+#define  ZORRO_PROD_ITH_ISDN_MASTER_II				ZORRO_ID(ITH, 0x01, 0)
+
+#define ZORRO_MANUF_VMC						0x1389
+#define  ZORRO_PROD_VMC_ISDN_BLASTER_Z2				ZORRO_ID(VMC, 0x01, 0)
+#define  ZORRO_PROD_VMC_HYPERCOM_4				ZORRO_ID(VMC, 0x02, 0)
+
+#define ZORRO_MANUF_INFORMATION					0x157C
+#define  ZORRO_PROD_INFORMATION_ISDN_ENGINE_I			ZORRO_ID(INFORMATION, 0x64, 0)
+
+#define ZORRO_MANUF_VORTEX					0x2017
+#define  ZORRO_PROD_VORTEX_GOLDEN_GATE_80386SX			ZORRO_ID(VORTEX, 0x07, 0)
+#define  ZORRO_PROD_VORTEX_GOLDEN_GATE_RAM			ZORRO_ID(VORTEX, 0x08, 0)
+#define  ZORRO_PROD_VORTEX_GOLDEN_GATE_80486			ZORRO_ID(VORTEX, 0x09, 0)
+
+#define ZORRO_MANUF_EXPANSION_SYSTEMS				0x2062
+#define  ZORRO_PROD_EXPANSION_SYSTEMS_DATAFLYER_4000SX		ZORRO_ID(EXPANSION_SYSTEMS, 0x01, 0)
+#define  ZORRO_PROD_EXPANSION_SYSTEMS_DATAFLYER_4000SX_RAM	ZORRO_ID(EXPANSION_SYSTEMS, 0x02, 0)
+
+#define ZORRO_MANUF_READYSOFT					0x2100
+#define  ZORRO_PROD_READYSOFT_AMAX_II_IV			ZORRO_ID(READYSOFT, 0x01, 0)
+
+#define ZORRO_MANUF_PHASE5					0x2140
+#define  ZORRO_PROD_PHASE5_BLIZZARD_1_8MB			ZORRO_ID(PHASE5, 0x01, 0)
+#define  ZORRO_PROD_PHASE5_BLIZZARD				ZORRO_ID(PHASE5, 0x02, 0)
+#define  ZORRO_PROD_PHASE5_BLIZZARD_1220_IV			ZORRO_ID(PHASE5, 0x06, 0)
+#define  ZORRO_PROD_PHASE5_FASTLANE_Z3_RAM			ZORRO_ID(PHASE5, 0x0A, 0)
+#define  ZORRO_PROD_PHASE5_BLIZZARD_1230_II_FASTLANE_Z3_CYBERSCSI_CYBERSTORM060	ZORRO_ID(PHASE5, 0x0B, 0)
+#define  ZORRO_PROD_PHASE5_BLIZZARD_1220_CYBERSTORM		ZORRO_ID(PHASE5, 0x0C, 0)
+#define  ZORRO_PROD_PHASE5_BLIZZARD_1230			ZORRO_ID(PHASE5, 0x0D, 0)
+#define  ZORRO_PROD_PHASE5_BLIZZARD_1230_IV_1260		ZORRO_ID(PHASE5, 0x11, 0)
+#define  ZORRO_PROD_PHASE5_BLIZZARD_2060			ZORRO_ID(PHASE5, 0x18, 0)
+#define  ZORRO_PROD_PHASE5_CYBERSTORM_MK_II			ZORRO_ID(PHASE5, 0x19, 0)
+#define  ZORRO_PROD_PHASE5_CYBERVISION64			ZORRO_ID(PHASE5, 0x22, 0)
+#define  ZORRO_PROD_PHASE5_CYBERVISION64_3D_PROTOTYPE		ZORRO_ID(PHASE5, 0x32, 0)
+#define  ZORRO_PROD_PHASE5_CYBERVISION64_3D			ZORRO_ID(PHASE5, 0x43, 0)
+
+#define ZORRO_MANUF_DPS						0x2169
+#define  ZORRO_PROD_DPS_PERSONAL_ANIMATION_RECORDER		ZORRO_ID(DPS, 0x01, 0)
+
+#define ZORRO_MANUF_APOLLO_2					0x2200
+#define  ZORRO_PROD_APOLLO_A620_68020_1				ZORRO_ID(APOLLO_2, 0x00, 0)
+#define  ZORRO_PROD_APOLLO_A620_68020_2				ZORRO_ID(APOLLO_2, 0x01, 0)
+
+#define ZORRO_MANUF_APOLLO_3					0x2222
+#define  ZORRO_PROD_APOLLO_AT_APOLLO				ZORRO_ID(APOLLO_3, 0x22, 0)
+#define  ZORRO_PROD_APOLLO_1230_1240_1260_2030_4040_4060	ZORRO_ID(APOLLO_3, 0x23, 0)
+
+#define ZORRO_MANUF_PETSOFF_LP					0x38A5
+#define  ZORRO_PROD_PETSOFF_LP_DELFINA				ZORRO_ID(PETSOFF_LP, 0x00, 0)
+
+#define ZORRO_MANUF_UWE_GERLACH					0x3FF7
+#define  ZORRO_PROD_UWE_GERLACH_RAM_ROM				ZORRO_ID(UWE_GERLACH, 0xd4, 0)
+
+#define ZORRO_MANUF_MACROSYSTEMS_GERMANY			0x4754
+#define  ZORRO_PROD_MACROSYSTEMS_MAESTRO			ZORRO_ID(MACROSYSTEMS_GERMANY, 0x03, 0)
+#define  ZORRO_PROD_MACROSYSTEMS_VLAB				ZORRO_ID(MACROSYSTEMS_GERMANY, 0x04, 0)
+#define  ZORRO_PROD_MACROSYSTEMS_MAESTRO_PRO			ZORRO_ID(MACROSYSTEMS_GERMANY, 0x05, 0)
+#define  ZORRO_PROD_MACROSYSTEMS_RETINA				ZORRO_ID(MACROSYSTEMS_GERMANY, 0x06, 0)
+#define  ZORRO_PROD_MACROSYSTEMS_MULTI_EVOLUTION		ZORRO_ID(MACROSYSTEMS_GERMANY, 0x08, 0)
+#define  ZORRO_PROD_MACROSYSTEMS_TOCCATA			ZORRO_ID(MACROSYSTEMS_GERMANY, 0x0C, 0)
+#define  ZORRO_PROD_MACROSYSTEMS_RETINA_Z3			ZORRO_ID(MACROSYSTEMS_GERMANY, 0x10, 0)
+#define  ZORRO_PROD_MACROSYSTEMS_VLAB_MOTION			ZORRO_ID(MACROSYSTEMS_GERMANY, 0x12, 0)
+#define  ZORRO_PROD_MACROSYSTEMS_ALTAIS				ZORRO_ID(MACROSYSTEMS_GERMANY, 0x13, 0)
+#define  ZORRO_PROD_MACROSYSTEMS_FALCON_040			ZORRO_ID(MACROSYSTEMS_GERMANY, 0xFD, 0)
+
+#define ZORRO_MANUF_COMBITEC					0x6766
+
+#define ZORRO_MANUF_SKI_PERIPHERALS				0x8000
+#define  ZORRO_PROD_SKI_PERIPHERALS_MAST_FIREBALL		ZORRO_ID(SKI_PERIPHERALS, 0x08, 0)
+#define  ZORRO_PROD_SKI_PERIPHERALS_SCSI_DUAL_SERIAL		ZORRO_ID(SKI_PERIPHERALS, 0x80, 0)
+
+#define ZORRO_MANUF_CAMERON					0xAA01
+#define  ZORRO_PROD_CAMERON_PERSONAL_A4				ZORRO_ID(CAMERON, 0x10, 0)
+
+#define ZORRO_MANUF_REIS_WARE					0xAA11
+#define  ZORRO_PROD_REIS_WARE_HANDYSCANNER			ZORRO_ID(REIS_WARE, 0x11, 0)
+
+
+    /*
+     *  Test and illegal Manufacturer IDs.
+     *  These do NOT appear in arch/m68k/amiga/zorro.c!
+     */
+
+#define ZORRO_MANUF_HACKER					0x07DB
+#define  ZORRO_PROD_GENERAL_PROTOTYPE				ZORRO_ID(HACKER, 0x00, 0)
+#define  ZORRO_PROD_HACKER_SCSI					ZORRO_ID(HACKER, 0x01, 0)
+#define  ZORRO_PROD_RESOURCE_MANAGEMENT_FORCE_QUICKNET		ZORRO_ID(HACKER, 0x02, 0)
+#define  ZORRO_PROD_VECTOR_CONNECTION_2				ZORRO_ID(HACKER, 0xE0, 0)
+#define  ZORRO_PROD_VECTOR_CONNECTION_3				ZORRO_ID(HACKER, 0xE1, 0)
+#define  ZORRO_PROD_VECTOR_CONNECTION_4				ZORRO_ID(HACKER, 0xE2, 0)
+#define  ZORRO_PROD_VECTOR_CONNECTION_5				ZORRO_ID(HACKER, 0xE3, 0)
+
+
+    /*
+     *  GVP identifies most of its products through the 'extended product code'
+     *  (epc). The epc has to be and'ed with the GVP_PRODMASK before the
+     *  identification.
+     */
 
-enum GVP_ident {
-  GVP_GFORCE_040      = 0x20,
-  GVP_GFORCE_040_SCSI = 0x30,
-  GVP_A1291_SCSI      = 0x40,
-  GVP_COMBO_R4        = 0x60,
-  GVP_COMBO_R4_SCSI   = 0x70,
-  GVP_PHONEPAK        = 0x78,
-  GVP_IOEXT           = 0x98,
-  GVP_GFORCE_030      = 0xa0,
-  GVP_GFORCE_030_SCSI = 0xb0,
-  GVP_A530            = 0xc0,
-  GVP_A530_SCSI       = 0xd0,
-  GVP_COMBO_R3        = 0xe0,
-  GVP_COMBO_R3_SCSI   = 0xf0,
-  GVP_SERIESII        = 0xf8,
-};
+#define GVP_PRODMASK			(0xf8)
+#define GVP_SCSICLKMASK			(0x01)
 
 enum GVP_flags {
-  GVP_IO       = 0x01,
-  GVP_ACCEL    = 0x02,
-  GVP_SCSI     = 0x04,
-  GVP_24BITDMA = 0x08,
-  GVP_25BITDMA = 0x10,
-  GVP_NOBANK   = 0x20,
-  GVP_14MHZ    = 0x40,
+    GVP_IO		= 0x01,
+    GVP_ACCEL		= 0x02,
+    GVP_SCSI		= 0x04,
+    GVP_24BITDMA	= 0x08,
+    GVP_25BITDMA	= 0x10,
+    GVP_NOBANK		= 0x20,
+    GVP_14MHZ		= 0x40,
 };
 
 
@@ -517,8 +581,8 @@
     u_char	er_Product;	/* Product number, assigned by manufacturer */
     u_char	er_Flags;	/* Flags */
     u_char	er_Reserved03;	/* Must be zero ($ff inverted) */
-    u_short	er_Manufacturer; /* Unique ID,ASSIGNED BY COMMODORE-AMIGA! */
-    u_long	er_SerialNumber; /* Available for use by manufacturer */
+    u_short	er_Manufacturer;/* Unique ID,ASSIGNED BY COMMODORE-AMIGA! */
+    u_long	er_SerialNumber;/* Available for use by manufacturer */
     u_short	er_InitDiagVec;	/* Offset to optional "DiagArea" structure */
     u_char	er_Reserved0c;
     u_char	er_Reserved0d;
@@ -549,7 +613,7 @@
     u_long		cd_Unused[4];	/* for whatever the driver wants */
 };
 
-#else	/* __ASSEMBLY__ */
+#else /* __ASSEMBLY__ */
 
 LN_Succ		= 0
 LN_Pred		= LN_Succ+4
@@ -584,7 +648,7 @@
 CD_Unused	= CD_NextCD+4
 CD_sizeof	= CD_Unused+(4*4)
 
-#endif	/* __ASSEMBLY__ */
+#endif /* __ASSEMBLY__ */
 
 #ifndef __ASSEMBLY__
 
@@ -592,30 +656,30 @@
 
 #ifdef __KERNEL__
 
-extern int zorro_num_autocon;		/* # of autoconfig devices found */
+extern u_int zorro_num_autocon;		/* # of autoconfig devices found */
 extern struct ConfigDev zorro_autocon[ZORRO_NUM_AUTO];
 
 
-/*
- * Zorro Functions
- */
-
-extern int zorro_find(int manuf, int prod, int part, int index);
-extern struct ConfigDev *zorro_get_board(int key);
-extern void zorro_config_board(int key, int part);
-extern void zorro_unconfig_board(int key, int part);
+    /*
+     *  Zorro Functions
+     */
+
+extern u_int zorro_find(zorro_id id, u_int part, u_int index);
+extern const struct ConfigDev *zorro_get_board(u_int key);
+extern void zorro_config_board(u_int key, u_int part);
+extern void zorro_unconfig_board(u_int key, u_int part);
+
+
+    /*
+     *  Bitmask indicating portions of available Zorro II RAM that are unused
+     *  by the system. Every bit represents a 64K chunk, for a maximum of 8MB
+     *  (128 chunks, physical 0x00200000-0x009fffff).
+     *
+     *  If you want to use (= allocate) portions of this RAM, you should clear
+     *  the corresponding bits.
+     */
 
-
-/*
- * Bitmask indicating portions of available Zorro II RAM that are unused
- * by the system. Every bit represents a 64K chunk, for a maximum of 8MB
- * (128 chunks, physical 0x00200000-0x009fffff).
- *
- * If you want to use (= allocate) portions of this RAM, you should clear
- * the corresponding bits.
- */
-
-extern u_long zorro_unused_z2ram[4];
+extern u32 zorro_unused_z2ram[4];
 
 #define Z2RAM_START		(0x00200000)
 #define Z2RAM_END		(0x00a00000)
@@ -625,14 +689,14 @@
 #define Z2RAM_CHUNKSHIFT	(16)
 
 
-/*
- * Verbose Board Identification
- */
+    /*
+     *  Verbose Board Identification
+     */
 
 extern void zorro_identify(void);
 extern int zorro_get_list(char *buffer);
 
-#endif	/* !__ASSEMBLY__ */
-#endif	/* __KERNEL__ */
+#endif /* !__ASSEMBLY__ */
+#endif /* __KERNEL__ */
 
-#endif /* __ZORRO_H */
+#endif /* _LINUX_ZORRO_H */
Greetings,

						Geert

--
Geert Uytterhoeven                     Geert.Uytterhoeven@cs.kuleuven.ac.be
Wavelets, Linux/m68k on Amiga          http://www.cs.kuleuven.ac.be/~geert/
Department of Computer Science -- Katholieke Universiteit Leuven -- Belgium

