Date: Mon, 8 Jun 1998 00:21:44 +0200 (CEST)
From: Geert Uytterhoeven <Geert.Uytterhoeven@cs.kuleuven.ac.be>
To: Linux/m68k <linux-m68k@lists.linux-m68k.org>
Subject: L68K: /proc/bus/zorro
Sender: owner-linux-m68k@phil.uni-sb.de


The following patch implements /proc/bus/zorro (cfr. /proc/bus/pci):

    /proc/bus/zorro/devices	hexadecimal list of present devices
		    00		hexadecimal data for device in slot 0
		    01		hexadecimal data for device in slot 1
		    ..

  - The Zorro database is no longer in the kernel but in userspace
    (/etc/zorro.ids). This saves some memory and makes maintenance easier.

  - You need a user space utility (lszorro) to convert /proc/bus/pci data to a
    human readable form. The package is called zorroutils and borrows a lot
    of code from pciutils. You can find a prerelease of zorroutils at

	http://www.cs.kuleuven.ac.be/~geert/bin/zorroutils-0.01.tar.gz

  - The Zorro stuff was moved to drivers/zorro/ (Jes already did that in the
    vger tree). CONFIG_ZORRO is now a switch for all the Zorro code, and all
    drivers for Zorro boards depend on it.

  - include/linux/zorro.h no longer contains all IDs, but only IDs for boards
    that have a Linux driver.

  - GVP boards with epc (extended product code) are still detected.

  - Since no software relies on /proc/zorro (unlike /proc/pci), I did not
    implement a backward compatibility mode.

  - There was a bug in the autoremoval of Z2 memory from the memory list in
    Z3 machines: if you had two succesive chunks of Z2 memory, it skipped the
    second chunk.

  - I have only one Zorro device (VillageTronic Ariadne Ethernet), which is
    detected fine. YMMV with more and other boards.

To do:

  - Test it on various hardware.

  - Implement the missing pieces in lszorro (marked with #warn).

  - Proofread /etc/zorro.ids.

  - Fix the PPC/APUS port.

Volunteers are welcomed, as usual, so I can continue working on other things.

Jes: I already checked this in at vger.

--- m68k/Documentation/Configure.help.orig	Mon Jun  1 15:54:08 1998
+++ m68k/Documentation/Configure.help	Sun Jun  7 21:27:47 1998
@@ -8362,17 +8362,14 @@
   really know what you are doing, say N. Try Y only if you're
   quite adventurous.
 
-Amiga AutoConfig Identification
+Amiga Zorro (AutoConfig) bus support
 CONFIG_ZORRO
-  This enables support for automatic identification of Amiga expansion
-  cards that obey the AutoConfig(tm) specification.
-  Say Y if you want your expansion cards to be identified on bootup;
-  it will enlarge your kernel by about 10KB. The identification
-  information is also available through /proc/zorro (say Y to
-  "/proc filesystem support"!).
-
-  Note that even if you say N here, you can still use your expansion
-  cards. If in doubt, say Y.
+  Zorro is the name of the expansion bus used in Amiga systems. It
+  provides real Plug-and-Play through the AutoConfig(tm) protocol.
+  Say Y if you want to use your Zorro expansion cards, otherwise say N.
+  Note that expansion cards that do not plug in a Zorro connector (but
+  e.g. in the CPU socket) may still behave like Zorro boards.
+  If in doubt, say Y.
 
 Amiga OCS chipset support
 CONFIG_AMIFB_OCS
--- m68k/arch/m68k/amiga/zorro.c.orig	Mon Jun  1 16:19:21 1998
+++ m68k/arch/m68k/amiga/zorro.c	Sun Jun  7 22:08:50 1998
@@ -1,1245 +0,0 @@
-/*
- *    linux/arch/m68k/amiga/zorro.c
- *
- *    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.
- */
-
-
-#include <linux/config.h>
-#include <linux/types.h>
-#include <linux/kernel.h>
-#include <linux/string.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
-     */
-
-struct Manufacturer {
-    const char *Name;
-    u_short Manuf;
-    u_short NumProd;
-    const struct Product *Products;
-};
-
-struct Product {
-    const char *Name;
-    u_char Class;
-    u_char Prod;
-};
-
-struct GVP_Product {
-    const char *Name;
-    u_char Class;
-    u_char EPC;
-};
-
-
-    /*
-     *  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 MANUF(name, id) \
-    { name, ZORRO_MANUF_##id, ARRAYSIZE(Prod_##id), Prod_##id },
-
-#define END \
-    };
-
-
-    /*
-     *  Recognized Zorro Expansion Devices
-     */
-
-BEGIN_PROD(PACIFIC_PERIPHERALS)
-    PROD("SE 2000 A500", HD, PACIFIC_PERIPHERALS_SE_2000_A500)
-    PROD(NULL, SCSI, PACIFIC_PERIPHERALS_SCSI)
-END
-
-BEGIN_PROD(MACROSYSTEMS_USA_2)
-    PROD("Warp Engine", TURBO_SCSI_RAM, MACROSYSTEMS_WARP_ENGINE)
-END
-
-BEGIN_PROD(KUPKE_1)
-    PROD("Golem RAM Box 2MB", RAM, KUPKE_GOLEM_RAM_BOX_2MB)
-END
-
-BEGIN_PROD(MEMPHIS)
-    PROD("Stormbringer", TURBO, MEMPHIS_STORMBRINGER)
-END
-
-BEGIN_PROD(3_STATE)
-    PROD("Megamix 2000", RAM, 3_STATE_MEGAMIX_2000)
-END
-
-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("A2090/A2090A Combitec/MacroSystem", SCSI, CBM_A2090A_CM)
-END
-
-BEGIN_PROD(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS_2)
-    PROD("EXP8000", RAM, PPS_EXP8000)
-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", VIDEO, A_SQUARED_LIVE_2000)
-END
-
-BEGIN_PROD(COMSPEC_COMMUNICATIONS)
-    PROD("AX2000", RAM, COMSPEC_COMMUNICATIONS_AX2000)
-END
-
-BEGIN_PROD(ANAKIN_RESEARCH)
-    PROD("Easyl", TABLET, ANAKIN_RESEARCH_EASYL)
-END
-
-BEGIN_PROD(MICROBOTICS)
-    PROD("StarBoard II", RAM, MICROBOTICS_STARBOARD_II)
-    PROD("StarDrive", SCSI, MICROBOTICS_STARDRIVE)
-    PROD("8-Up (Rev A)", RAM, MICROBOTICS_8_UP_A)
-    PROD("8-Up (Rev Z)", RAM, 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_1)
-    PROD("Hardframe 2000", SCSI, MICROBOTICS_HARDFRAME_2000_2)
-    PROD("MBX 1200/1200z", MISC, MICROBOTICS_MBX_1200_1200Z)
-END
-
-BEGIN_PROD(ACCESS_ASSOCIATES_ALEGRA)
-END
-
-BEGIN_PROD(EXPANSION_TECHNOLOGIES)
-END
-
-BEGIN_PROD(ASDG)
-    PROD(NULL, RAM, ASDG_MEMORY_1)
-    PROD(NULL, RAM, ASDG_MEMORY_2)
-    PROD("EB-920 Lan Rover", ETHERNET, ASDG_EB920_LAN_ROVER)
-    PROD("GPIB/Dual IEEE-488/Twin-X", MULTIIO, ASDG_GPIB_DUALIEEE488_TWIN_X)
-END
-
-BEGIN_PROD(IMTRONICS_1)
-    PROD("Hurricane 2800", TURBO_RAM, IMTRONICS_HURRICANE_2800_1)
-    PROD("Hurricane 2800", TURBO_RAM, IMTRONICS_HURRICANE_2800_2)
-END
-
-BEGIN_PROD(CBM_UNIVERSITY_OF_LOWELL)
-    PROD("A2410 HiRes", GFX, CBM_A2410)
-END
-
-BEGIN_PROD(AMERISTAR)
-    PROD("A2065", ETHERNET, AMERISTAR_A2065)
-    PROD("A560", ARCNET, AMERISTAR_A560)
-    PROD("A4066", ETHERNET, AMERISTAR_A4066)
-END
-
-BEGIN_PROD(SUPRA)
-    PROD("SupraDrive 4x4", SCSI, SUPRA_SUPRADRIVE_4x4)
-    PROD("1000", RAM, SUPRA_1000_RAM)
-    PROD("2000 DMA", SCSI, SUPRA_2000_DMA)
-    PROD("500", SCSI_RAM, SUPRA_500)
-    PROD("500", SCSI, SUPRA_500_SCSI)
-    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(COMPUTER_SYSTEMS_ASSOCIATES)
-    PROD("Magnum 40", TURBO_SCSI, CSA_MAGNUM)
-    PROD("12 Gauge", SCSI, CSA_12_GAUGE)
-END
-
-BEGIN_PROD(MARC_MICHAEL_GROTH)
-END
-
-BEGIN_PROD(M_TECH)
-    PROD("AT500", RAM, MTEC_AT500_1)
-END
-
-BEGIN_PROD(GREAT_VALLEY_PRODUCTS_1)
-    PROD("Impact Series I", SCSI_RAM, GVP_IMPACT_SERIES_I)
-END
-
-BEGIN_PROD(BYTEBOX)
-    PROD("A500", UNKNOWN, BYTEBOX_A500)
-END
-
-BEGIN_PROD(DKB_POWER_COMPUTING)
-    PROD("SecureKey", UNKNOWN, DKB_POWER_COMPUTING_SECUREKEY)
-    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(CALIFORNIA_ACCESS_SYNERGY)
-    PROD("Malibu", SCSI, CALIFORNIA_ACCESS_SYNERGY_MALIBU)
-END
-
-BEGIN_PROD(XETEC)
-    PROD("FastCard", SCSI, XETEC_FASTCARD)
-    PROD("FastCard", RAM, XETEC_FASTCARD_RAM)
-    PROD("FastCard Plus", SCSI, XETEC_FASTCARD_PLUS)
-END
-
-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", TURBO_SCSI_RAM, PPS_ZEUS)
-    PROD("A500 68040", TURBO, PPS_A500_68040)
-END
-
-BEGIN_PROD(XEBEC)
-END
-
-BEGIN_PROD(SPIRIT_TECHNOLOGY)
-    PROD("Insider IN1000", RAM, SPIRIT_TECHNOLOGY_INSIDER_IN1000)
-    PROD("Insider IN500", RAM, SPIRIT_TECHNOLOGY_INSIDER_IN500)
-    PROD("SIN500", RAM, SPIRIT_TECHNOLOGY_SIN500)
-    PROD("HDA 506", HD, SPIRIT_TECHNOLOGY_HDA_506)
-    PROD("AX-S", MISC, SPIRIT_TECHNOLOGY_AX_S)
-    PROD("OctaByte", RAM, SPIRIT_TECHNOLOGY_OCTABYTE)
-    PROD("Inmate", SCSI_RAM, SPIRIT_TECHNOLOGY_INMATE)
-END
-
-BEGIN_PROD(SPIRIT_TECHNOLOGY_2)
-END
-
-BEGIN_PROD(BSC_ALFADATA_1)
-    PROD("ALF 3", SCSI, BSC_ALF_3_1)
-END
-
-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(CARDCO_2)
-    PROD("Kronos", SCSI, CARDCO_KRONOS_2000_2)
-    PROD("A1000", SCSI, CARDCO_A1000_2)
-END
-
-BEGIN_PROD(JOCHHEIM)
-    PROD(NULL, RAM, JOCHHEIM_RAM)
-END
-
-BEGIN_PROD(CHECKPOINT_TECHNOLOGIES)
-    PROD("Serial Solution", SERIAL, CHECKPOINT_TECHNOLOGIES_SERIAL_SOLUTION)
-END
-
-BEGIN_PROD(EDOTRONIK)
-    PROD("IEEE-488 Interface Board", UNKNOWN, EDOTRONIK_IEEE_488)
-    PROD("CBM-8032 Board", UNKNOWN, EDOTRONIK_8032)
-    PROD(NULL, SERIAL, EDOTRONIK_MULTISERIAL)
-    PROD("24Bit Realtime Video Digitizer", UNKNOWN, EDOTRONIK_VIDEODIGITIZER)
-    PROD("32Bit Parallel I/O Interface", UNKNOWN, EDOTRONIK_PARALLEL_IO)
-    PROD("PIC Prototyping Board", UNKNOWN, EDOTRONIK_PIC_PROTOYPING)
-    PROD("16 Channel ADC Interface", UNKNOWN, EDOTRONIK_ADC)
-    PROD("VME-Bus Controller", UNKNOWN, EDOTRONIK_VME)
-    PROD("DSP96000 Realtime Data Acquisition", DSP, EDOTRONIK_DSP96000)
-END
-
-BEGIN_PROD(NES_INC)
-    PROD(NULL, RAM, NES_INC_RAM)
-END
-
-BEGIN_PROD(ICD)
-    PROD("Advantage 2000", SCSI, ICD_ADVANTAGE_2000_SCSI)
-    PROD("Advantage", IDE, ICD_ADVANTAGE_2000_SCSI)
-    PROD("Advantage 2080", RAM, ICD_ADVANTAGE_2080_RAM)
-END
-
-BEGIN_PROD(KUPKE_2)
-    PROD("Omti", HD, KUPKE_OMTI)
-    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(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_NETWORK)
-END
-
-BEGIN_PROD(HARDITAL_SYNTHESIS)
-    PROD("TQM 68030+68882", TURBO, HARDITAL_SYNTHESIS_TQM_68030_68882)
-END
-
-BEGIN_PROD(APPLIED_ENGINEERING)
-    PROD("DL2000", MODEM, APPLIED_ENGINEERING_DL2000)
-    PROD("RAM Works", RAM, APPLIED_ENGINEERING_RAM_WORKS)
-END
-
-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(PHOENIX)
-    PROD("ST506", HD, PHOENIX_ST506)
-    PROD(NULL, SCSI, PHOENIX_SCSI)
-    PROD(NULL, RAM, PHOENIX_RAM)
-END
-
-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", GFX, IMPULSE_FIRECRACKER_24)
-END
-
-BEGIN_PROD(IVS)
-    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_1)
-    PROD("Connection", MULTIIO, VECTOR_CONNECTION_1)
-END
-
-BEGIN_PROD(XPERT_PRODEV)
-    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", ETHERNET, HYDRA_SYSTEMS_AMIGANET)
-END
-
-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(NULL, MULTIIO, TRICERATOPS_MULTI_IO)
-END
-
-BEGIN_PROD(APPLIED_MAGIC)
-    PROD("DMI Resolver", GFX, APPLIED_MAGIC_DMI_RESOLVER)
-    PROD("Digital Broadcaster", VIDEO, APPLIED_MAGIC_DIGITAL_BROADCASTER)
-END
-
-BEGIN_PROD(GFX_BASE)
-    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", HD, ROCTEC_RH_800C)
-    PROD("RH 800C", RAM, ROCTEC_RH_800C_RAM)
-END
-
-BEGIN_PROD(KATO)
-    PROD("Melody MPEG", AUDIO, KATO_MELODY)
-    PROD("Rainbow II", GFX, HELFRICH_RAINBOW_II)	/* ID clash!! */
-    PROD("Rainbow III", GFX, HELFRICH_RAINBOW_III)	/* ID clash!! */
-END
-
-BEGIN_PROD(ATLANTIS)
-END
-
-BEGIN_PROD(PROTAR)
-END
-
-BEGIN_PROD(ACS)
-END
-
-BEGIN_PROD(SOFTWARE_RESULTS_ENTERPRISES)
-    PROD("Golden Gate 2 Bus+", BRIDGE, SOFTWARE_RESULTS_ENTERPRISES_GOLDEN_GATE_2_BUS_PLUS)
-END
-
-BEGIN_PROD(MASOBOSHI)
-    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(MAINHATTAN_DATA)
-    PROD(NULL, IDE, MAINHATTAN_DATA_IDE)
-END
-
-BEGIN_PROD(VILLAGE_TRONIC)
-    PROD("Domino", GFXRAM, VILLAGE_TRONIC_DOMINO_RAM)
-    PROD("Domino", GFX, VILLAGE_TRONIC_DOMINO_REG)
-    PROD("Domino 16M Prototype", GFX, VILLAGE_TRONIC_DOMINO_16M_PROTOTYPE)
-    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/II+ (Segmented Mode)", GFX, VILLAGE_TRONIC_PICASSO_II_II_PLUS_SEGMENTED_MODE)
-    PROD("Picasso IV Z2", GFXRAM, VILLAGE_TRONIC_PICASSO_IV_Z2_MEM1)
-    PROD("Picasso IV Z2", GFXRAM, VILLAGE_TRONIC_PICASSO_IV_Z2_MEM2)
-    PROD("Picasso IV Z2", GFX, VILLAGE_TRONIC_PICASSO_IV_Z2_REG)
-    PROD("Picasso IV Z3", GFX, VILLAGE_TRONIC_PICASSO_IV_Z3)
-    PROD("Ariadne", ETHERNET_PARALLEL, VILLAGE_TRONIC_ARIADNE)
-END
-
-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(NULL, MULTIIO, AMITRIX_MULTI_IO)
-    PROD("CD-RAM", RAM, AMITRIX_CD_RAM)
-END
-
-BEGIN_PROD(ARMAX)
-    PROD("OmniBus", GFX, ARMAX_OMNIBUS)
-END
-
-BEGIN_PROD(ZEUS)
-    PROD("Spider", VIDEO, ZEUS_SPIDER)
-END
-
-BEGIN_PROD(NEWTEK)
-    PROD("VideoToaster", VIDEO, NEWTEK_VIDEOTOASTER)
-END
-
-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/E-Matrix 530", TURBO_RAM, MTEC_VIPER_MK_V_E_MATRIX_530)
-    PROD("8MB", RAM, MTEC_8_MB_RAM)
-    PROD("Viper Mk V/E-Matrix 530 SCSI/IDE", SCSI_IDE, MTEC_VIPER_MK_V_E_MATRIX_530_SCSI_IDE)
-END
-
-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(APOLLO_1)
-    PROD("A1200", FPU_RAM, APOLLO_A1200)
-END
-
-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("Piccolo SD64", GFXRAM, HELFRICH_SD64_RAM)
-    PROD("Piccolo SD64", GFX, HELFRICH_SD64_REG)
-END
-
-BEGIN_PROD(MACROSYSTEMS_USA)
-    PROD("Warp Engine 40xx", TURBO_SCSI_RAM, MACROSYSTEMS_WARP_ENGINE_40xx)
-END
-
-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 Professional", TURBO_RAM, HARMS_PROFESSIONAL_3500)
-END
-
-BEGIN_PROD(MICRONIK)
-    PROD("RCA 120", RAM, MICRONIK_RCA_120)
-END
-
-BEGIN_PROD(MICRONIK2)
-    PROD("Z3i A1200 Zorro III + SCSI", SCSI, MICRONIK2_Z3I)
-END
-
-BEGIN_PROD(MEGAMICRO)
-    PROD("SCRAM 500", SCSI, MEGAMICRO_SCRAM_500)
-    PROD("SCRAM 500", RAM, MEGAMICRO_SCRAM_500_RAM)
-END
-
-BEGIN_PROD(IMTRONICS_2)
-    PROD("Hurricane 2800", TURBO_RAM, IMTRONICS_HURRICANE_2800_3)
-    PROD("Hurricane 2800", TURBO_RAM, IMTRONICS_HURRICANE_2800_4)
-END
-
-BEGIN_PROD(INDIVIDUAL_COMPUTERS)
-    PROD("Buddha", IDE, INDIVIDUAL_COMPUTERS_BUDDHA)
-    PROD("Catweasel", IDE_FLOPPY, INDIVIDUAL_COMPUTERS_CATWEASEL)
-END
-
-BEGIN_PROD(KUPKE_3)
-    PROD("Golem HD 3000", HD, KUPKE_GOLEM_HD_3000)
-END
-
-BEGIN_PROD(ITH)
-    PROD("ISDN-Master II", ISDN, ITH_ISDN_MASTER_II)
-END
-
-BEGIN_PROD(VMC)
-    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, INFORMATION_ISDN_ENGINE_I)
-END
-
-BEGIN_PROD(VORTEX)
-    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(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", MACEMU, READYSOFT_AMAX_II_IV)
-END
-
-BEGIN_PROD(PHASE5)
-    PROD("Blizzard", RAM, PHASE5_BLIZZARD_RAM)
-    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)
-    PROD("CyberStorm Mk III", TURBO_SCSI, PHASE5_CYBERSTORM_MK_III)
-    PROD("Blizzard 603e+", TURBO_SCSI, PHASE5_BLIZZARD_603E_PLUS)
-END
-
-BEGIN_PROD(DPS)
-    PROD("Personal Animation Recorder", VIDEO, DPS_PERSONAL_ANIMATION_RECORDER)
-END
-
-BEGIN_PROD(APOLLO_2)
-    PROD("A620 68020", TURBO, APOLLO_A620_68020_1)
-    PROD("A620 68020", TURBO, APOLLO_A620_68020_2)
-END
-
-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_LP)
-    PROD("Delfina", AUDIO, PETSOFF_LP_DELFINA)
-    PROD("Delfina Lite", AUDIO, PETSOFF_LP_DELFINA_LITE)
-END
-
-BEGIN_PROD(UWE_GERLACH)
-    PROD("RAM/ROM", MISC, UWE_GERLACH_RAM_ROM)
-END
-
-BEGIN_PROD(ACT)
-    PROD("Prelude", AUDIO, ACT_PRELUDE)
-END
-
-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_PERIPHERALS)
-    PROD("MAST Fireball", SCSI, SKI_PERIPHERALS_MAST_FIREBALL)
-    PROD("SCSI/Dual Serial", SCSI_SERIAL, SKI_PERIPHERALS_SCSI_DUAL_SERIAL)
-END
-
-BEGIN_PROD(REIS_WARE_2)
-    PROD("Scan King", SCANNER, REIS_WARE_SCAN_KING)
-END
-
-BEGIN_PROD(CAMERON)
-    PROD("Personal A4", SCANNER, CAMERON_PERSONAL_A4)
-END
-
-BEGIN_PROD(REIS_WARE)
-    PROD("Handyscanner", SCANNER, REIS_WARE_HANDYSCANNER)
-END
-
-BEGIN_PROD(PHOENIX_2)
-    PROD("ST506", HD, PHOENIX_ST506_2)
-    PROD(NULL, SCSI, PHOENIX_SCSI_2)
-    PROD(NULL, RAM, PHOENIX_RAM_2)
-END
-
-BEGIN_PROD(COMBITEC_2)
-    PROD(NULL, HD, COMBITEC_HD)
-    PROD("SRAM", RAM, COMBITEC_SRAM)
-END
-
-BEGIN_PROD(HACKER)	/* Unused */
-END
-
-
-BEGIN_MANUF
-    MANUF("Pacific Peripherals", PACIFIC_PERIPHERALS)
-    MANUF("MacroSystems USA", MACROSYSTEMS_USA_2)
-    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("Progressive Peripherals & Systems", PROGRESSIVE_PERIPHERALS_AND_SYSTEMS_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 Alegra", ACCESS_ASSOCIATES_ALEGRA)
-    MANUF("Expansion Technologies (Pacific Cypress)", EXPANSION_TECHNOLOGIES)
-    MANUF("ASDG", ASDG)
-    MANUF("Ronin/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("Marc Michael Groth", MARC_MICHAEL_GROTH)
-    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("California Access (Synergy)", CALIFORNIA_ACCESS_SYNERGY)
-    MANUF("Xetec", XETEC)
-    MANUF("Progressive Peripherals & Systems", PROGRESSIVE_PERIPHERALS_AND_SYSTEMS)
-    MANUF("Xebec", XEBEC)
-    MANUF("Spirit Technology", SPIRIT_TECHNOLOGY)
-    MANUF("Spirit Technology", SPIRIT_TECHNOLOGY_2)
-    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("Edotronik", EDOTRONIK)
-    MANUF("NES Inc.", NES_INC)
-    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("Applied Engineering", APPLIED_ENGINEERING)
-    MANUF("BSC/Alfadata", BSC_ALFADATA_3)
-    MANUF("Phoenix", PHOENIX)
-    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("Atlantis", ATLANTIS)
-    MANUF("Protar", PROTAR)
-    MANUF("ACS", ACS)
-    MANUF("Software Results Enterprises", SOFTWARE_RESULTS_ENTERPRISES)
-    MANUF("Masoboshi", MASOBOSHI)
-    MANUF("Mainhattan-Data (A-Team)", MAINHATTAN_DATA)
-    MANUF("Village Tronic", VILLAGE_TRONIC)
-    MANUF("Utilities Unlimited", UTILITIES_UNLIMITED)
-    MANUF("Amitrix", AMITRIX)
-    MANUF("ArMax", ARMAX)
-    MANUF("ZEUS Electronic Development", ZEUS)
-    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("Micronik", MICRONIK2)
-    MANUF("MegaMicro", MEGAMICRO)
-    MANUF("Ronin/Imtronics", IMTRONICS_2)
-    MANUF("Individual Computers", INDIVIDUAL_COMPUTERS)
-    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("ACT", ACT)
-    MANUF("MacroSystems Germany", MACROSYSTEMS_GERMANY)
-    MANUF("Combitec", COMBITEC)
-    MANUF("SKI Peripherals", SKI_PERIPHERALS)
-    MANUF("Reis-Ware", REIS_WARE_2)
-    MANUF("Cameron", CAMERON)
-    MANUF("Reis-Ware", REIS_WARE)
-    MANUF("Hacker Test Board", HACKER)	/* Unused */
-    MANUF("Phoenix", PHOENIX_2)
-    MANUF("Combitec", COMBITEC_2)
-END
-
-#define NUM_MANUF		(ARRAYSIZE(Manufacturers))
-#define NUM_GVP_PROD		(ARRAYSIZE(Ext_Prod_GVP))
-
-
-    /*
-     *  Zorro product classes
-     *
-     *  Make sure to keep these in sync with include/linux/zorro.h!
-     */
-
-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 */
-    "IDE Interface and Floppy Controller",  /* ZORRO_CLASS_IDE_FLOPPY */
-    "ISDN Interface",			    /* ZORRO_CLASS_ISDN */
-    "Macintosh 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 */
-    "Accelerator, SCSI Host Adapter and RAM Expansion",    /* ZORRO_CLASS_TURBO_SCSI */
-    "Video Board",			    /* ZORRO_CLASS_VIDEO */
-};
-
-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
-     */
-
-u_int zorro_num_autocon;
-struct ConfigDev zorro_autocon[ZORRO_NUM_AUTO];
-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 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);
-     *      }
-     */
-
-u_int zorro_find(zorro_id id, u_int part, u_int index)
-{
-    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 corresponding to a specific key
-     */
-
-const struct ConfigDev *zorro_get_board(u_int key)
-{
-    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];
-
-    return(cd);
-}
-
-
-    /*
-     *  Mark a part of a board as configured
-     */
-
-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 > 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
-     */
-
-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 > 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).
-     */
-
-static int identify(u_int devnum, char *buf, int verbose)
-{
-    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 "
-				    "zorro@linux-m68k.org\n");
-    }
-    return(len);
-}
-
-
-    /*
-     *  Identify all known AutoConfig Expansion Devices
-     */
-
-void zorro_identify(void)
-{
-    u_int i;
-    char tmp[256];
-
-    if (!AMIGAHW_PRESENT(ZORRO))
-	return;
-
-    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
-     */
-
-int zorro_get_list(char *buffer)
-{
-    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++) {
-	    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
-     */
-
-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;
-
-    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
-     */
-
-void zorro_init(void)
-{
-    u_int i;
-    const struct ConfigDev *cd;
-
-    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);
-}
--- m68k/arch/m68k/amiga/amiga_ksyms.c.orig	Fri May 15 00:32:19 1998
+++ m68k/arch/m68k/amiga/amiga_ksyms.c	Sun Jun  7 21:27:45 1998
@@ -19,9 +19,3 @@
 EXPORT_SYMBOL(amiga_chip_size);
 EXPORT_SYMBOL(amiga_audio_period);
 EXPORT_SYMBOL(amiga_audio_min_period);
-
-EXPORT_SYMBOL(zorro_find);
-EXPORT_SYMBOL(zorro_get_board);
-EXPORT_SYMBOL(zorro_config_board);
-EXPORT_SYMBOL(zorro_unconfig_board);
-EXPORT_SYMBOL(zorro_unused_z2ram);
--- m68k/arch/m68k/amiga/config.c.orig	Mon Jun  1 10:51:29 1998
+++ m68k/arch/m68k/amiga/config.c	Sun Jun  7 21:27:45 1998
@@ -80,7 +80,6 @@
 #endif
 static void amiga_reset (void);
 static int amiga_wait_key (struct console *co);
-extern void zorro_init(void);
 extern void amiga_init_sound(void);
 static void amiga_savekmsg_init(void);
 static void amiga_mem_console_write(struct console *co, const char *b,
@@ -402,27 +401,6 @@
   /* ensure that the DMA master bit is set */
   custom.dmacon = DMAF_SETCLR | DMAF_MASTER;
 
-  /* don't use Z2 RAM as system memory on Z3 capable machines */
-  if (AMIGAHW_PRESENT(ZORRO3)) {
-    int i, j;
-    unsigned long z2mem = 0;
-    for (i = 0; i < m68k_num_memory; i++)
-      if (m68k_memory[i].addr < 16*1024*1024) {
-	if (i == 0) {
-	  /* don't cut off the branch we're sitting on */
-	  printk("Warning: kernel runs in Zorro II memory\n");
-	  continue;
-	}
-	z2mem += m68k_memory[i].size;
-	m68k_num_memory--;
-	for (j = i; j < m68k_num_memory; j++)
-	  m68k_memory[j] = m68k_memory[j+1];
-      }
-    if (z2mem)
-      printk("%ldK of Zorro II memory will not be used as system memory\n",
-	     z2mem>>10);
-  }
-
   /* initialize chipram allocator */
   amiga_chip_init ();
 
@@ -448,12 +426,8 @@
   if (AMIGAHW_PRESENT(MAGIC_REKICK))
 	  *(unsigned char *)ZTWO_VADDR(0xde0002) |= 0x80;
 
-  zorro_init();
 #ifdef CONFIG_ZORRO
-  /*
-   * Identify all known AutoConfig Expansion Devices
-   */
-  zorro_identify();
+  zorro_init();
 #endif
 }
 
--- m68k/arch/m68k/amiga/Makefile.orig	Sun Feb  8 22:37:40 1998
+++ m68k/arch/m68k/amiga/Makefile	Sun Jun  7 22:09:14 1998
@@ -8,7 +8,7 @@
 # Note 2! The CFLAGS definitions are now in the main makefile...
 
 O_TARGET := amiga.o
-O_OBJS   := config.o amiints.o cia.o chipram.o amisound.o zorro.o
+O_OBJS   := config.o amiints.o cia.o chipram.o amisound.o
 OX_OBJS  := amiga_ksyms.o
 
 include $(TOPDIR)/Rules.make
--- m68k/arch/m68k/config.in.orig	Mon Jun  1 12:13:13 1998
+++ m68k/arch/m68k/config.in	Sun Jun  7 21:27:45 1998
@@ -75,7 +75,7 @@
 tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
 
 if [ "$CONFIG_AMIGA" = "y" ]; then
-  bool 'Amiga AutoConfig Identification' CONFIG_ZORRO
+  bool 'Amiga Zorro (AutoConfig) bus support' CONFIG_ZORRO
 fi
 if [ "$CONFIG_ATARI" = "y" ]; then
   bool 'Support for ST-RAM as swap space' CONFIG_STRAM_SWAP
@@ -127,15 +127,19 @@
 
 if [ "$CONFIG_AMIGA" = "y" ]; then
   tristate 'A3000 WD33C93A support' CONFIG_A3000_SCSI
+  if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+    bool 'A4000T SCSI support' CONFIG_A4000T_SCSI
+  fi
+fi
+if [ "$CONFIG_ZORRO" = "y" ]; then
   tristate 'A2091 WD33C93A support' CONFIG_A2091_SCSI
   tristate 'GVP Series II WD33C93A support' CONFIG_GVP11_SCSI
   bool 'CyberStorm SCSI support' CONFIG_CYBERSTORM_SCSI
-  bool 'CyberStorm SCSI Mk II support' CONFIG_CYBERSTORMII_SCSI
+  bool 'CyberStorm Mk II SCSI support' CONFIG_CYBERSTORMII_SCSI
   bool 'Blizzard 2060 SCSI support' CONFIG_BLZ2060_SCSI
   bool 'Blizzard 1230IV/1260 SCSI support' CONFIG_BLZ1230_SCSI
   bool 'Fastlane SCSI support' CONFIG_FASTLANE_SCSI
   if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-    bool 'A4000T SCSI support' CONFIG_A4000T_SCSI
     bool 'A4091 SCSI support' CONFIG_A4091_SCSI
     bool 'WarpEngine SCSI support' CONFIG_WARPENGINE_SCSI
 #    bool 'Cyberstorm Mk III SCSI support' CONFIG_CYBERSTORMIII_SCSI
@@ -191,7 +195,7 @@
   comment 'CCP compressors for PPP are only built as modules.'
 fi
 tristate 'EQL (serial line load balancing) support' CONFIG_EQUALIZER
-if [ "$CONFIG_AMIGA" = "y" ]; then
+if [ "$CONFIG_ZORRO" = "y" ]; then
   tristate 'Ariadne support' CONFIG_ARIADNE
   tristate 'A2065 support' CONFIG_A2065
   tristate 'Hydra support' CONFIG_HYDRA
@@ -241,8 +245,10 @@
 fi
 
 tristate 'Parallel printer support' CONFIG_PRINTER
-if [ "$CONFIG_AMIGA" = "y" ]; then
+if [ "$CONFIG_ZORRO" = "y" ]; then
   dep_tristate 'Multiface Card III parallel support' CONFIG_MULTIFACE_III_LP $CONFIG_PRINTER
+fi
+if [ "$CONFIG_AMIGA" = "y" ]; then
   tristate 'Amiga mouse support' CONFIG_AMIGAMOUSE
 fi
 if [ "$CONFIG_ATARI" = "y" ]; then
@@ -264,11 +270,13 @@
 fi
 if [ "$CONFIG_AMIGA" = "y" ]; then
   tristate 'Amiga builtin serial support' CONFIG_AMIGA_BUILTIN_SERIAL
+  bool 'Hisoft Whippet PCMCIA serial support' CONFIG_WHIPPET
+fi
+if [ "$CONFIG_ZORRO" = "y" ]; then
   tristate 'GVP IO-Extender support' CONFIG_GVPIOEXT
   dep_tristate 'GVP IO-Extender parallel printer support' CONFIG_GVPIOEXT_LP $CONFIG_GVPIOEXT
   dep_tristate 'GVP IO-Extender PLIP support' CONFIG_GVPIOEXT_PLIP $CONFIG_GVPIOEXT
   tristate 'Multiface Card III serial support' CONFIG_MULTIFACE_III_TTY
-  bool 'Hisoft Whippet PCMCIA serial support' CONFIG_WHIPPET
 fi
 if [ "$CONFIG_MAC" = "y" ]; then
   bool 'Mac SCC serial support' CONFIG_MAC_SCC
--- m68k/drivers/zorro/zorro.c.orig	Sun Jun  7 21:27:45 1998
+++ m68k/drivers/zorro/zorro.c	Mon Jun  8 00:05:12 1998
@@ -0,0 +1,229 @@
+/*
+ *    $Id: zorro.c,v 1.2 1998/06/07 20:21:08 geert Exp $
+ *
+ *    Zorro Bus Services
+ *
+ *    Copyright (C) 1995-1998 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.
+ */
+
+
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/zorro.h>
+#include <asm/setup.h>
+#include <asm/bitops.h>
+#include <asm/amigahw.h>
+
+
+    /*
+     *  Expansion Devices
+     */
+
+u_int zorro_num_autocon = 0;
+struct ConfigDev zorro_autocon[ZORRO_NUM_AUTO];
+static u32 zorro_autocon_parts[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 use 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);
+     *      }
+     */
+
+u_int zorro_find(zorro_id id, u_int part, u_int index)
+{
+    u16 manuf = ZORRO_MANUF(id);
+    u8 prod = ZORRO_PROD(id);
+    u8 epc = ZORRO_EPC(id);
+    u_int key;
+    const struct ConfigDev *cd;
+    u32 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 = (u32)cd->cd_BoardAddr;
+	if ((cd->cd_Rom.er_Manufacturer == manuf) &&
+	    (cd->cd_Rom.er_Product == prod) &&
+	    !(zorro_autocon_parts[key-1] & (1<<part)) &&
+	    (manuf != ZORRO_MANUF(ZORRO_PROD_GVP_EPC_BASE) ||
+	     prod != ZORRO_PROD(ZORRO_PROD_GVP_EPC_BASE) || /* GVP quirk */
+	     (*(u16 *)ZTWO_VADDR(addr+0x8000) & GVP_PRODMASK) == epc))
+	    return key;
+    }
+    return 0;
+}
+
+
+    /*
+     *  Get the board corresponding to a specific key
+     */
+
+const struct ConfigDev *zorro_get_board(u_int key)
+{
+    if ((key < 1) || (key > zorro_num_autocon)) {
+	printk("zorro_get_board: bad key %d\n", key);
+	return NULL;
+    }
+    return &zorro_autocon[key-1];
+}
+
+
+    /*
+     *  Mark a part of a board as configured
+     */
+
+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 > 31)
+	printk("zorro_config_board: bad part %d\n", part);
+    else if (zorro_autocon_parts[key-1] & (1<<part))
+	printk("zorro_config_board: key %d part %d is already configured\n",
+	       key, part);
+    else
+	zorro_autocon_parts[key-1] |= 1<<part;
+}
+
+
+    /*
+     *  Mark a part of a board as unconfigured
+     *
+     *  This function is mainly intended for the unloading of LKMs
+     */
+
+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 > 31)
+	printk("zorro_unconfig_board: bad part %d\n", part);
+    else if (!(zorro_autocon_parts[key-1] & (1<<part)))
+	printk("zorro_config_board: key %d part %d is not yet configured\n",
+	       key, part);
+    else
+	zorro_autocon_parts[key-1] &= ~(1<<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.
+     *
+     *  Possible uses:
+     *      - z2ram device
+     *      - SCSI DMA bounce buffers
+     */
+
+u32 zorro_unused_z2ram[4] = { 0, 0, 0, 0 };
+
+
+__initfunc(static void mark_region(u32 addr, u_int size, int flag))
+{
+    u32 start, end;
+
+    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) {
+	u32 chunk = start>>Z2RAM_CHUNKSHIFT;
+	if (flag)
+	    set_bit(chunk, zorro_unused_z2ram);
+	else
+	    clear_bit(chunk, zorro_unused_z2ram);
+	start += Z2RAM_CHUNKSIZE;
+    }
+}
+
+
+    /*
+     *  Initialization
+     */
+
+__initfunc(void zorro_init(void))
+{
+    u_int i, j;
+    u32 disabled_z2mem = 0;
+
+    if (!MACH_IS_AMIGA || !AMIGAHW_PRESENT(ZORRO)) {
+	printk("Zorro: No Zorro bus detected\n");
+	return;
+    }
+
+    printk("Zorro: Probing AutoConfig expansion devices: %d device%s\n",
+	   zorro_num_autocon, zorro_num_autocon == 1 ? "" : "s");
+
+    /* Mark all available Zorro II memory */
+    for (i = 0; i < zorro_num_autocon; i++) {
+	const struct ConfigDev *cd = &zorro_autocon[i];
+	if (cd->cd_Rom.er_Type & ERTF_MEMLIST)
+	    mark_region((u32)cd->cd_BoardAddr, cd->cd_BoardSize, 1);
+    }
+
+    /* Unmark all used Zorro II memory */
+    for (i = 0; i < m68k_num_memory; i++)
+	if (m68k_memory[i].addr < 16*1024*1024) {
+	    if (AMIGAHW_PRESENT(ZORRO3)) {
+		/* don't use Zorro II RAM as system memory on Zorro III */
+		/* capable machines */
+		if (i == 0) {
+		    /* don't cut off the branch we're sitting on */
+		    printk("Warning: kernel runs in Zorro II memory\n");
+		} else {
+		    disabled_z2mem += m68k_memory[i].size;
+		    m68k_num_memory--;
+		    for (j = i; j < m68k_num_memory; j++)
+			m68k_memory[j] = m68k_memory[j+1];
+		    i--;
+		    continue;
+		}
+	    }
+	    mark_region(m68k_memory[i].addr, m68k_memory[i].size, 0);
+	}
+    if (disabled_z2mem)
+	printk("%dK of Zorro II memory will not be used as system memory\n",
+	       disabled_z2mem>>10);
+}
--- m68k/drivers/zorro/proc.c.orig	Sun Jun  7 21:27:45 1998
+++ m68k/drivers/zorro/proc.c	Mon Jun  8 00:05:21 1998
@@ -0,0 +1,167 @@
+/*
+ *	$Id: proc.c,v 1.1 1998/06/07 20:21:08 geert Exp $
+ *
+ *	Procfs interface for the Zorro bus.
+ *
+ *	Copyright (C) 1998 Geert Uytterhoeven
+ *
+ *	Heavily based on the procfs interface for the PCI bus, which is
+ *
+ *	Copyright (C) 1997, 1998 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
+ */
+
+#include <linux/types.h>
+#include <linux/zorro.h>
+#include <linux/proc_fs.h>
+#include <linux/init.h>
+#include <asm/uaccess.h>
+#include <asm/amigahw.h>
+#include <asm/setup.h>
+
+static loff_t
+proc_bus_zorro_lseek(struct file *file, loff_t off, int whence)
+{
+	loff_t new;
+
+	switch (whence) {
+	case 0:
+		new = off;
+		break;
+	case 1:
+		new = file->f_pos + off;
+		break;
+	case 2:
+		new = sizeof(struct ConfigDev) + off;
+		break;
+	default:
+		return -EINVAL;
+	}
+	if (new < 0 || new > sizeof(struct ConfigDev))
+		return -EINVAL;
+	return (file->f_pos = new);
+}
+
+static ssize_t
+proc_bus_zorro_read(struct file *file, char *buf, size_t nbytes, loff_t *ppos)
+{
+	struct inode *ino = file->f_dentry->d_inode;
+	struct proc_dir_entry *dp = ino->u.generic_ip;
+	struct ConfigDev *cd = dp->data;
+	int pos = *ppos;
+
+	if (pos >= sizeof(struct ConfigDev))
+		return 0;
+	if (nbytes >= sizeof(struct ConfigDev))
+		nbytes = sizeof(struct ConfigDev);
+	if (pos + nbytes > sizeof(struct ConfigDev))
+		nbytes = sizeof(struct ConfigDev) - pos;
+	if (copy_to_user(buf, cd, nbytes))
+		return -EFAULT;
+	*ppos += nbytes;
+
+	return nbytes;
+}
+
+static struct file_operations proc_bus_zorro_operations = {
+	proc_bus_zorro_lseek,
+	proc_bus_zorro_read,
+	NULL,		/* write */
+	NULL,		/* readdir */
+	NULL,		/* poll */
+	NULL,		/* ioctl */
+	NULL,		/* mmap */
+	NULL,		/* no special open code */
+	NULL,		/* no special release code */
+	NULL		/* can't fsync */
+};
+
+static struct inode_operations proc_bus_zorro_inode_operations = {
+	&proc_bus_zorro_operations, /* default base directory file-ops */
+	NULL,			/* create */
+	NULL,			/* lookup */
+	NULL,			/* link */
+	NULL,			/* unlink */
+	NULL,			/* symlink */
+	NULL,			/* mkdir */
+	NULL,			/* rmdir */
+	NULL,			/* mknod */
+	NULL,			/* rename */
+	NULL,			/* readlink */
+	NULL,			/* follow_link */
+	NULL,			/* readpage */
+	NULL,			/* writepage */
+	NULL,			/* bmap */
+	NULL,			/* truncate */
+	NULL			/* permission */
+};
+
+int
+get_zorro_dev_info(char *buf, char **start, off_t pos, int count, int wr)
+{
+	u_int slot;
+	off_t at = 0;
+	int len, cnt;
+
+	for (slot = cnt = 0; slot < zorro_num_autocon && count > cnt; slot++) {
+		struct ConfigDev *cd = &zorro_autocon[slot];
+		u16 manuf = cd->cd_Rom.er_Manufacturer;
+		u8 prod = cd->cd_Rom.er_Product;
+		u8 epc;
+		if (manuf == ZORRO_MANUF(ZORRO_PROD_GVP_EPC_BASE) &&
+		    prod == ZORRO_PROD(ZORRO_PROD_GVP_EPC_BASE)) {
+		    /* GVP quirk */
+		    u32 addr = (u32)cd->cd_BoardAddr;
+		    epc = *(u16 *)ZTWO_VADDR(addr+0x8000);
+		} else
+		    epc = 0;
+		len = sprintf(buf, "%02x\t%04x%02x%02x\t%08x\t%08x\t%02x\n",
+			      slot, manuf, prod, epc, (u32)cd->cd_BoardAddr,
+			      cd->cd_BoardSize, cd->cd_Rom.er_Type);
+		at += len;
+		if (at >= pos) {
+			if (!*start) {
+				*start = buf + (pos - (at - len));
+				cnt = at - pos;
+			} else
+				cnt += len;
+			buf += len;
+		}
+	}
+	return (count > cnt) ? cnt : count;
+}
+
+static struct proc_dir_entry proc_zorro_devices = {
+	PROC_BUS_ZORRO_DEVICES, 7, "devices",
+	S_IFREG | S_IRUGO, 1, 0, 0,
+	0, &proc_array_inode_operations,
+	get_zorro_dev_info
+};
+
+static struct proc_dir_entry *proc_bus_zorro_dir;
+
+__initfunc(static int zorro_proc_attach_device(u_int slot))
+{
+	struct proc_dir_entry *entry;
+	char name[4];
+
+	sprintf(name, "%02x", slot);
+	entry = create_proc_entry(name, S_IFREG | S_IRUGO, proc_bus_zorro_dir);
+	if (!entry)
+		return -ENOMEM;
+	entry->ops = &proc_bus_zorro_inode_operations;
+	entry->data = &zorro_autocon[slot];
+	entry->size = sizeof(struct ConfigDev);
+	return 0;
+}
+
+__initfunc(void zorro_proc_init(void))
+{
+	u_int slot;
+
+	if (!MACH_IS_AMIGA || !AMIGAHW_PRESENT(ZORRO))
+		return;
+	proc_bus_zorro_dir = create_proc_entry("zorro", S_IFDIR, proc_bus);
+	proc_register(proc_bus_zorro_dir, &proc_zorro_devices);
+	for (slot = 0; slot < zorro_num_autocon; slot++)
+	    zorro_proc_attach_device(slot);
+}
--- m68k/drivers/zorro/zorrosyms.c.orig	Sun Jun  7 21:27:45 1998
+++ m68k/drivers/zorro/zorrosyms.c	Mon Jun  8 00:05:16 1998
@@ -0,0 +1,22 @@
+/*
+ *	$Id: zorrosyms.c,v 1.1 1998/06/07 20:21:09 geert Exp $
+ *
+ *	Zorro Bus Services -- Exported Symbols
+ *
+ *	Copyright (C) 1998 Geert Uytterhoeven
+ */
+
+#include <linux/module.h>
+#include <linux/zorro.h>
+
+    /* Board configuration */
+
+EXPORT_SYMBOL(zorro_find);
+EXPORT_SYMBOL(zorro_get_board);
+EXPORT_SYMBOL(zorro_config_board);
+EXPORT_SYMBOL(zorro_unconfig_board);
+
+    /* Z2 memory */
+
+EXPORT_SYMBOL(zorro_unused_z2ram);
+
--- m68k/drivers/zorro/Makefile.orig	Sun Jun  7 21:27:45 1998
+++ m68k/drivers/zorro/Makefile	Mon Jun  8 00:05:08 1998
@@ -0,0 +1,28 @@
+#
+# Makefile for the Zorro bus specific drivers.
+#
+# Note! Dependencies are done automagically by 'make dep', which also
+# removes any old dependencies. DON'T put your own dependencies here
+# unless it's something special (ie not a .c file).
+#
+# Note 2! The CFLAGS definition is now inherited from the
+# parent makefile.
+#
+
+L_TARGET := zorro.a
+
+# Nasty trick as nobody references zorrosyms.o, but we still want it linked.
+ifeq ($(CONFIG_MODULES),y)
+O_TARGET = zorro_syms.o
+OX_OBJS  = zorrosyms.o
+O_OBJS   = zorro.o
+L_OBJS   := zorro_syms.o
+else
+L_OBJS   := zorro.o
+endif
+
+ifdef CONFIG_PROC_FS
+L_OBJS   += proc.o
+endif
+
+include $(TOPDIR)/Rules.make
--- m68k/drivers/block/Config.in.orig	Mon Jun  1 13:15:17 1998
+++ m68k/drivers/block/Config.in	Sun Jun  7 21:32:44 1998
@@ -32,10 +32,12 @@
     if [ "$CONFIG_AMIGA" = "y" ]; then
       bool '   Amiga Gayle IDE interface support' CONFIG_BLK_DEV_GAYLE
       if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-	bool '   Buddha/Catweasel IDE interface support' CONFIG_BLK_DEV_BUDDHA
 	bool '   Amiga IDE Doubler support' CONFIG_BLK_DEV_IDEDOUBLER $CONFIG_BLK_DEV_GAYLE
       fi
     fi
+    if [ "$CONFIG_ZORRO" = "y" -a "$CONFIG_EXPERIMENTAL" = "y" ]; then
+      bool '   Buddha/Catweasel IDE interface support' CONFIG_BLK_DEV_BUDDHA
+    fi
     if [ "$CONFIG_ATARI" = "y" ]; then
       bool '   Falcon IDE interface support' CONFIG_BLK_DEV_FALCON_IDE
     fi
@@ -81,7 +83,7 @@
 if [ "$CONFIG_MCA" = "y" ]; then
   bool 'PS/2 ESDI harddisk support' CONFIG_BLK_DEV_PS2
 fi
-if [ "$CONFIG_AMIGA" = "y" ]; then
+if [ "$CONFIG_ZORRO" = "y" ]; then
   tristate 'Amiga Zorro II ramdisk support' CONFIG_AMIGA_Z2RAM
 fi
 if [ "$CONFIG_ATARI" = "y" ]; then
--- m68k/drivers/video/Config.in.orig	Mon Jun  1 11:23:00 1998
+++ m68k/drivers/video/Config.in	Sun Jun  7 21:27:45 1998
@@ -20,6 +20,8 @@
       bool 'Amiga ECS chipset support' CONFIG_FB_AMIGA_ECS
       bool 'Amiga AGA chipset support' CONFIG_FB_AMIGA_AGA
     fi
+  fi
+  if [ "$CONFIG_ZORRO" = "y" ]; then
     tristate 'Amiga CyberVision support' CONFIG_FB_CYBER
     if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
       bool 'Amiga CyberVision3D support (experimental)' CONFIG_FB_VIRGE
--- m68k/drivers/Makefile.orig	Fri May 15 00:34:59 1998
+++ m68k/drivers/Makefile	Sun Jun  7 22:54:04 1998
@@ -10,7 +10,7 @@
 SUB_DIRS     := block char net misc #streams
 MOD_SUB_DIRS := $(SUB_DIRS) sbus
 ALL_SUB_DIRS := $(SUB_DIRS) pci scsi sbus sound cdrom isdn \
-				pnp macintosh video dio
+				pnp macintosh video dio nubus zorro
 
 ifdef CONFIG_DIO
 SUB_DIRS += dio
@@ -84,6 +84,11 @@
 ifeq ($(CONFIG_AP1000),y)
 SUB_DIRS += ap1000
 ALL_SUB_DIRS += ap1000
+endif
+
+ifdef CONFIG_ZORRO
+SUB_DIRS += zorro
+MOD_SUB_DIRS += zorro
 endif
 
 # make will try to add $(MOD_SUB_DIRS).o to modules/MOD_LIST_NAME 
--- m68k/fs/proc/array.c.orig	Fri May 15 00:41:52 1998
+++ m68k/fs/proc/array.c	Sun Jun  7 21:27:44 1998
@@ -1198,7 +1198,6 @@
 extern int get_rtc_status (char *);
 extern int get_locks_status (char *, char **, off_t, int);
 extern int get_swaparea_info (char *);
-extern int zorro_get_list(char *);
 extern int get_hardware_list(char *);
 extern int get_stram_list(char *);
 
@@ -1277,10 +1276,6 @@
 #endif
 		case PROC_LOCKS:
 			return get_locks_status(page, start, offset, length);
-#ifdef CONFIG_ZORRO
-		case PROC_ZORRO:
-			return zorro_get_list(page);
-#endif
 #ifdef CONFIG_PROC_HARDWARE
 		case PROC_HARDWARE:
 			return get_hardware_list(page);
--- m68k/fs/proc/root.c.orig	Mon May  4 22:11:32 1998
+++ m68k/fs/proc/root.c	Sun Jun  7 21:53:40 1998
@@ -17,6 +17,9 @@
 #ifdef CONFIG_KMOD
 #include <linux/kmod.h>
 #endif
+#ifdef CONFIG_ZORRO
+#include <linux/zorro.h>
+#endif
 
 /*
  * Offset of the first process in the /proc root directory..
@@ -498,13 +501,6 @@
 	S_IFREG | S_IRUGO, 1, 0, 0,
 	0, &proc_array_inode_operations
 };
-#ifdef CONFIG_ZORRO
-static struct proc_dir_entry proc_root_zorro = {
-	PROC_ZORRO, 5, "zorro",
-	S_IFREG | S_IRUGO, 1, 0, 0,
-	0, &proc_array_inode_operations
-};
-#endif
 static struct proc_dir_entry proc_root_cpuinfo = {
 	PROC_CPUINFO, 7, "cpuinfo",
 	S_IFREG | S_IRUGO, 1, 0, 0,
@@ -639,9 +635,6 @@
 	proc_register(&proc_root, &proc_root_meminfo);
 	proc_register(&proc_root, &proc_root_kmsg);
 	proc_register(&proc_root, &proc_root_version);
-#ifdef CONFIG_ZORRO
-	proc_register(&proc_root, &proc_root_zorro);
-#endif
 	proc_register(&proc_root, &proc_root_cpuinfo);
 	proc_register(&proc_root, &proc_root_self);
 	proc_net = create_proc_entry("net", S_IFDIR, 0);
@@ -706,6 +699,13 @@
 #endif
 
 	proc_bus = create_proc_entry("bus", S_IFDIR, 0);
+
+#ifdef CONFIG_PCI
+	pci_proc_init();
+#endif
+#ifdef CONFIG_ZORRO
+	zorro_proc_init();
+#endif
 }
 
 /*
--- m68k/include/linux/zorro.h.orig	Mon Jun  1 16:17:51 1998
+++ m68k/include/linux/zorro.h	Sun Jun  7 21:27:44 1998
@@ -1,12 +1,7 @@
 /*
- *  linux/zorro.h -- Amiga AutoConfig (Zorro) Expansion Device Definitions
+ *  linux/zorro.h -- Amiga AutoConfig (Zorro) Bus Definitions
  *
- *  Copyright (C) 1995 Geert Uytterhoeven
- *
- *  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
+ *  Copyright (C) 1995-1998 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
@@ -19,53 +14,8 @@
 #ifndef __ASSEMBLY__
 
     /*
-     *  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_IDE_FLOPPY,
-    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_TURBO_SCSI_RAM,
-    ZORRO_CLASS_VIDEO,
-};
-
-
-    /*
-     *  Known Zorro Boards
+     *  Known Zorro boards (well, those the kernel has drivers for, the others
+     *  are in /etc/zorro.ids)
      *
      *  Each Zorro board has a 32-bit ID of the form
      *
@@ -90,550 +40,50 @@
 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_SCSI			ZORRO_ID(PACIFIC_PERIPHERALS, 0x0A, 0)
-
-#define ZORRO_MANUF_MACROSYSTEMS_USA_2				0x0100
-#define  ZORRO_PROD_MACROSYSTEMS_WARP_ENGINE			ZORRO_ID(MACROSYSTEMS_USA_2, 0x13, 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_PROGRESSIVE_PERIPHERALS_AND_SYSTEMS_2	0x02F4
-#define  ZORRO_PROD_PPS_EXP8000					ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS_2, 0x02, 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_1		ZORRO_ID(MICROBOTICS, 0x96, 0)
-#define  ZORRO_PROD_MICROBOTICS_HARDFRAME_2000_2		ZORRO_ID(MICROBOTICS, 0x9E, 0)
-#define  ZORRO_PROD_MICROBOTICS_MBX_1200_1200Z			ZORRO_ID(MICROBOTICS, 0xC1, 0)
-
-#define ZORRO_MANUF_ACCESS_ASSOCIATES_ALEGRA			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_EB920_LAN_ROVER			ZORRO_ID(ASDG, 0xFE, 0)
-#define  ZORRO_PROD_ASDG_GPIB_DUALIEEE488_TWIN_X		ZORRO_ID(ASDG, 0xFF, 0)
-
-#define ZORRO_MANUF_IMTRONICS_1					0x0404
-#define  ZORRO_PROD_IMTRONICS_HURRICANE_2800_1			ZORRO_ID(IMTRONICS_1, 0x39, 0)
-#define  ZORRO_PROD_IMTRONICS_HURRICANE_2800_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_1000_RAM				ZORRO_ID(SUPRA, 0x02, 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_500_SCSI				ZORRO_ID(SUPRA, 0x08, 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_MARC_MICHAEL_GROTH				0x0439
-
-#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_SECUREKEY		ZORRO_ID(DKB_POWER_COMPUTING, 0x09, 0)
-#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_CALIFORNIA_ACCESS_SYNERGY			0x07E5
-#define  ZORRO_PROD_CALIFORNIA_ACCESS_SYNERGY_MALIBU		ZORRO_ID(CALIFORNIA_ACCESS_SYNERGY, 0x01, 0)
-
-#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_PROD_XETEC_FASTCARD_PLUS				ZORRO_ID(XETEC, 0x03, 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_TECHNOLOGY				0x07F2
-#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_INSIDER_IN1000		ZORRO_ID(SPIRIT_TECHNOLOGY, 0x01, 0)
-#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_INSIDER_IN500		ZORRO_ID(SPIRIT_TECHNOLOGY, 0x02, 0)
-#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_SIN500			ZORRO_ID(SPIRIT_TECHNOLOGY, 0x03, 0)
-#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_HDA_506			ZORRO_ID(SPIRIT_TECHNOLOGY, 0x04, 0)
-#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_AX_S			ZORRO_ID(SPIRIT_TECHNOLOGY, 0x05, 0)
-#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_OCTABYTE			ZORRO_ID(SPIRIT_TECHNOLOGY, 0x06, 0)
-#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_INMATE			ZORRO_ID(SPIRIT_TECHNOLOGY, 0x08, 0)
-
-#define ZORRO_MANUF_SPIRIT_TECHNOLOGY_2				0x07F3
-
-#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_EDOTRONIK					0x0810
-#define  ZORRO_PROD_EDOTRONIK_IEEE_488				ZORRO_ID(EDOTRONIK, 0x01, 0)
-#define  ZORRO_PROD_EDOTRONIK_8032				ZORRO_ID(EDOTRONIK, 0x02, 0)
-#define  ZORRO_PROD_EDOTRONIK_MULTISERIAL			ZORRO_ID(EDOTRONIK, 0x03, 0)
-#define  ZORRO_PROD_EDOTRONIK_VIDEODIGITIZER			ZORRO_ID(EDOTRONIK, 0x04, 0)
-#define  ZORRO_PROD_EDOTRONIK_PARALLEL_IO			ZORRO_ID(EDOTRONIK, 0x05, 0)
-#define  ZORRO_PROD_EDOTRONIK_PIC_PROTOYPING			ZORRO_ID(EDOTRONIK, 0x06, 0)
-#define  ZORRO_PROD_EDOTRONIK_ADC				ZORRO_ID(EDOTRONIK, 0x07, 0)
-#define  ZORRO_PROD_EDOTRONIK_VME				ZORRO_ID(EDOTRONIK, 0x08, 0)
-#define  ZORRO_PROD_EDOTRONIK_DSP96000				ZORRO_ID(EDOTRONIK, 0x09, 0)
-
-#define ZORRO_MANUF_NES_INC					0x0813
-#define  ZORRO_PROD_NES_INC_RAM					ZORRO_ID(NES_INC, 0x00, 0)
-
-#define ZORRO_MANUF_ICD						0x0817
-#define  ZORRO_PROD_ICD_ADVANTAGE_2000_SCSI			ZORRO_ID(ICD, 0x01, 0)
-#define  ZORRO_PROD_ICD_ADVANTAGE_IDE				ZORRO_ID(ICD, 0x03, 0)
-#define  ZORRO_PROD_ICD_ADVANTAGE_2080_RAM			ZORRO_ID(ICD, 0x04, 0)
-
-#define ZORRO_MANUF_KUPKE_2					0x0819
-#define  ZORRO_PROD_KUPKE_OMTI					ZORRO_ID(KUPKE_2, 0x01, 0)
-#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_APPLIED_ENGINEERING				0x0828
-#define  ZORRO_PROD_APPLIED_ENGINEERING_DL2000			ZORRO_ID(APPLIED_ENGINEERING, 0x10, 0)
-#define  ZORRO_PROD_APPLIED_ENGINEERING_RAM_WORKS		ZORRO_ID(APPLIED_ENGINEERING, 0xE0, 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_PHOENIX					0x0835
-#define  ZORRO_PROD_PHOENIX_ST506				ZORRO_ID(PHOENIX, 0x21, 0)
-#define  ZORRO_PROD_PHOENIX_SCSI				ZORRO_ID(PHOENIX, 0x22, 0)
-#define  ZORRO_PROD_PHOENIX_RAM					ZORRO_ID(PHOENIX, 0xBE, 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_II				ZORRO_ID(HELFRICH_1, 0x20, 0)
-#define  ZORRO_PROD_HELFRICH_RAINBOW_III			ZORRO_ID(HELFRICH_1, 0x21, 0)
-
-#define ZORRO_MANUF_ATLANTIS					0x0862
-
-#define ZORRO_MANUF_PROTAR					0x0864
-
-#define ZORRO_MANUF_ACS						0x0865
-
-#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_MAINHATTAN_DATA				0x086F
-#define  ZORRO_PROD_MAINHATTAN_DATA_IDE				ZORRO_ID(MAINHATTAN_DATA, 0x01, 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_DOMINO_16M_PROTOTYPE		ZORRO_ID(VILLAGE_TRONIC, 0x03, 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_II_PLUS_SEGMENTED_MODE	ZORRO_ID(VILLAGE_TRONIC, 0x0D, 0)
-#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_Z2_MEM1		ZORRO_ID(VILLAGE_TRONIC, 0x15, 0)
-#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_Z2_MEM2		ZORRO_ID(VILLAGE_TRONIC, 0x16, 0)
-#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_Z2_REG		ZORRO_ID(VILLAGE_TRONIC, 0x17, 0)
-#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_Z3		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_ZEUS					0x088d
-#define  ZORRO_PROD_ZEUS_SPIDER					ZORRO_ID(ZEUS, 0x04, 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_E_MATRIX_530		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_E_MATRIX_530_SCSI_IDE	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_MICRONIK2					0x0F0F
-#define  ZORRO_PROD_MICRONIK2_Z3I				ZORRO_ID(MICRONIK2, 0x01, 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_3			ZORRO_ID(IMTRONICS_2, 0x39, 0)
-#define  ZORRO_PROD_IMTRONICS_HURRICANE_2800_4			ZORRO_ID(IMTRONICS_2, 0x57, 0)
-
-/* unofficial ID */
-#define ZORRO_MANUF_INDIVIDUAL_COMPUTERS			0x1212
-#define  ZORRO_PROD_INDIVIDUAL_COMPUTERS_BUDDHA			ZORRO_ID(INDIVIDUAL_COMPUTERS, 0x00, 0)
-#define  ZORRO_PROD_INDIVIDUAL_COMPUTERS_CATWEASEL		ZORRO_ID(INDIVIDUAL_COMPUTERS, 0x2A, 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_RAM				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_PROD_PHASE5_CYBERSTORM_MK_III			ZORRO_ID(PHASE5, 0x64, 0)
-#define  ZORRO_PROD_PHASE5_BLIZZARD_603E_PLUS			ZORRO_ID(PHASE5, 0x6e, 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_PROD_PETSOFF_LP_DELFINA_LITE			ZORRO_ID(PETSOFF_LP, 0x01, 0)
-
-#define ZORRO_MANUF_UWE_GERLACH					0x3FF7
-#define  ZORRO_PROD_UWE_GERLACH_RAM_ROM				ZORRO_ID(UWE_GERLACH, 0xd4, 0)
-
-#define ZORRO_MANUF_ACT						0x4231
-#define  ZORRO_PROD_ACT_PRELUDE					ZORRO_ID(ACT, 0x01, 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_REIS_WARE_2					0xA9AD
-#define  ZORRO_PROD_REIS_WARE_SCAN_KING				ZORRO_ID(REIS_WARE_2, 0x11, 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)
-
-#define ZORRO_MANUF_PHOENIX_2					0xB5A8
-#define  ZORRO_PROD_PHOENIX_ST506_2				ZORRO_ID(PHOENIX_2, 0x21, 0)
-#define  ZORRO_PROD_PHOENIX_SCSI_2				ZORRO_ID(PHOENIX_2, 0x22, 0)
-#define  ZORRO_PROD_PHOENIX_RAM_2				ZORRO_ID(PHOENIX_2, 0xBE, 0)
-
-#define ZORRO_MANUF_COMBITEC_2					0xC008
-#define  ZORRO_PROD_COMBITEC_HD					ZORRO_ID(COMBITEC_2, 0x2A, 0)
-#define  ZORRO_PROD_COMBITEC_SRAM				ZORRO_ID(COMBITEC_2, 0x2B, 0)
+#define ZORRO_MANUF_COMMODORE_BRAUNSCHWEIG		0x0201
+#define  ZORRO_PROD_CBM_A4091_1				ZORRO_ID(COMMODORE_BRAUNSCHWEIG, 0x54, 0)
 
+#define ZORRO_MANUF_COMMODORE_WEST_CHESTER_1		0x0202
+#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_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_A2065_2				ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x70, 0)
+
+#define ZORRO_MANUF_AMERISTAR				0x041D
+#define  ZORRO_PROD_AMERISTAR_A2065			ZORRO_ID(AMERISTAR, 0x01, 0)
+
+#define ZORRO_MANUF_GREAT_VALLEY_PRODUCTS_2		0x07E1
+#define  ZORRO_PROD_GVP_EPC_BASE			ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0)
+#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_SCSI		ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x70)
+#define  ZORRO_PROD_GVP_GFORCE_030_SCSI			ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xb0)
+#define  ZORRO_PROD_GVP_A530_SCSI			ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xd0)
+#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_GFORCE_040_060			ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x16, 0)
+
+#define ZORRO_MANUF_HYDRA_SYSTEMS			0x0849
+#define  ZORRO_PROD_HYDRA_SYSTEMS_AMIGANET		ZORRO_ID(HYDRA_SYSTEMS, 0x01, 0)
 
-    /*
-     *  Test and illegal Manufacturer IDs.
-     *  These do NOT appear in arch/m68k/amiga/zorro.c!
-     */
+#define ZORRO_MANUF_VILLAGE_TRONIC			0x0877
+#define  ZORRO_PROD_VILLAGE_TRONIC_ARIADNE		ZORRO_ID(VILLAGE_TRONIC, 0xC9, 0)
+
+#define ZORRO_MANUF_MACROSYSTEMS_USA			0x089B
+#define  ZORRO_PROD_MACROSYSTEMS_WARP_ENGINE_40xx	ZORRO_ID(MACROSYSTEMS_USA, 0x13, 0)
+
+#define ZORRO_MANUF_PHASE5				0x2140
+#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_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		ZORRO_ID(PHASE5, 0x43, 0)
 
-#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_QN2000	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)
+#define ZORRO_MANUF_MACROSYSTEMS_GERMANY		0x4754
+#define  ZORRO_PROD_MACROSYSTEMS_RETINA_Z3		ZORRO_ID(MACROSYSTEMS_GERMANY, 0x10, 0)
 
 
     /*
@@ -659,24 +109,24 @@
 struct Node {
     struct  Node *ln_Succ;	/* Pointer to next (successor) */
     struct  Node *ln_Pred;	/* Pointer to previous (predecessor) */
-    u_char  ln_Type;
-    char    ln_Pri;		/* Priority, for sorting */
-    char    *ln_Name;		/* ID string, null terminated */
+    __u8    ln_Type;
+    __s8    ln_Pri;		/* Priority, for sorting */
+    __s8    *ln_Name;		/* ID string, null terminated */
 };
 
 struct ExpansionRom {
     /* -First 16 bytes of the expansion ROM */
-    u_char	er_Type;	/* Board type, size and flags */
-    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_InitDiagVec;	/* Offset to optional "DiagArea" structure */
-    u_char	er_Reserved0c;
-    u_char	er_Reserved0d;
-    u_char	er_Reserved0e;
-    u_char	er_Reserved0f;
+    __u8  er_Type;		/* Board type, size and flags */
+    __u8  er_Product;		/* Product number, assigned by manufacturer */
+    __u8  er_Flags;		/* Flags */
+    __u8  er_Reserved03;	/* Must be zero ($ff inverted) */
+    __u16 er_Manufacturer;	/* Unique ID, ASSIGNED BY COMMODORE-AMIGA! */
+    __u32 er_SerialNumber;	/* Available for use by manufacturer */
+    __u16 er_InitDiagVec;	/* Offset to optional "DiagArea" structure */
+    __u8  er_Reserved0c;
+    __u8  er_Reserved0d;
+    __u8  er_Reserved0e;
+    __u8  er_Reserved0f;
 };
 
 /* er_Type board type bits */
@@ -690,16 +140,16 @@
 
 struct ConfigDev {
     struct Node 	cd_Node;
-    u_char		cd_Flags;	/* (read/write) */
-    u_char		cd_Pad; 	/* reserved */
+    __u8  		cd_Flags;	/* (read/write) */
+    __u8  		cd_Pad; 	/* reserved */
     struct ExpansionRom cd_Rom; 	/* copy of board's expansion ROM */
     void		*cd_BoardAddr;	/* where in memory the board was placed */
-    u_long		cd_BoardSize;	/* size of board in bytes */
-    u_short		cd_SlotAddr;	/* which slot number (PRIVATE) */
-    u_short		cd_SlotSize;	/* number of slots (PRIVATE) */
+    __u32 		cd_BoardSize;	/* size of board in bytes */
+    __u16  		cd_SlotAddr;	/* which slot number (PRIVATE) */
+    __u16  		cd_SlotSize;	/* number of slots (PRIVATE) */
     void		*cd_Driver;	/* pointer to node of driver */
     struct ConfigDev	*cd_NextCD;	/* linked list of drivers to config */
-    u_long		cd_Unused[4];	/* for whatever the driver wants */
+    __u32 		cd_Unused[4];	/* for whatever the driver wants */
 };
 
 #else /* __ASSEMBLY__ */
@@ -745,7 +195,7 @@
 
 #ifdef __KERNEL__
 
-extern unsigned int zorro_num_autocon;		/* # of autoconfig devices found */
+extern unsigned int zorro_num_autocon;	/* # of autoconfig devices found */
 extern struct ConfigDev zorro_autocon[ZORRO_NUM_AUTO];
 
 
@@ -753,6 +203,9 @@
      *  Zorro Functions
      */
 
+extern void zorro_init(void);
+extern void zorro_proc_init(void);
+
 extern unsigned int zorro_find(zorro_id id, unsigned int part, unsigned int index);
 extern const struct ConfigDev *zorro_get_board(unsigned int key);
 extern void zorro_config_board(unsigned int key, unsigned int part);
@@ -768,7 +221,7 @@
      *  the corresponding bits.
      */
 
-extern u32 zorro_unused_z2ram[4];
+extern __u32 zorro_unused_z2ram[4];
 
 #define Z2RAM_START		(0x00200000)
 #define Z2RAM_END		(0x00a00000)
@@ -777,13 +230,6 @@
 #define Z2RAM_CHUNKMASK		(0x0000ffff)
 #define Z2RAM_CHUNKSHIFT	(16)
 
-
-    /*
-     *  Verbose Board Identification
-     */
-
-extern void zorro_identify(void);
-extern int zorro_get_list(char *buffer);
 
 #endif /* !__ASSEMBLY__ */
 #endif /* __KERNEL__ */
--- m68k/include/linux/proc_fs.h.orig	Mon May 18 23:16:40 1998
+++ m68k/include/linux/proc_fs.h	Sun Jun  7 21:27:44 1998
@@ -44,7 +44,6 @@
 	PROC_MD,
 	PROC_RTC,
 	PROC_LOCKS,
-	PROC_ZORRO,
 	PROC_HARDWARE,
 	PROC_SLABINFO,
 	PROC_PARPORT,
@@ -207,16 +206,18 @@
 enum bus_directory_inos {
 	PROC_BUS_PCI = PROC_MCA_LAST,
 	PROC_BUS_PCI_DEVICES,
+	PROC_BUS_ZORRO,
+	PROC_BUS_ZORRO_DEVICES,
 	PROC_BUS_LAST
 };
 
 enum fs_directory_inos {
-	PROC_FS_CODA = PROC_MCA_LAST,
+	PROC_FS_CODA = PROC_BUS_LAST,
 	PROC_FS_LAST
 };
 
 enum fs_coda_directory_inos {
-	PROC_VFS_STATS = PROC_MCA_LAST,
+	PROC_VFS_STATS = PROC_FS_LAST,
 	PROC_UPCALL_STATS,
 	PROC_PERMISSION_STATS,
 	PROC_CACHE_INV_STATS,
--- m68k/Makefile.orig	Fri May 15 00:30:57 1998
+++ m68k/Makefile	Sun Jun  7 22:53:36 1998
@@ -149,6 +149,10 @@
 DRIVERS := $(DRIVERS) drivers/sbus/sbus.a
 endif
 
+ifdef CONFIG_ZORRO
+DRIVERS := $(DRIVERS) drivers/zorro/zorro.a
+endif
+
 ifdef CONFIG_PPC
 DRIVERS := $(DRIVERS) drivers/macintosh/macintosh.a
 endif

Greetings,

						Geert

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

