diff options
author | André Fabian Silva Delgado <emulatorman@parabola.nu> | 2015-08-05 17:04:01 -0300 |
---|---|---|
committer | André Fabian Silva Delgado <emulatorman@parabola.nu> | 2015-08-05 17:04:01 -0300 |
commit | 57f0f512b273f60d52568b8c6b77e17f5636edc0 (patch) | |
tree | 5e910f0e82173f4ef4f51111366a3f1299037a7b /drivers/zorro |
Initial import
Diffstat (limited to 'drivers/zorro')
-rw-r--r-- | drivers/zorro/.gitignore | 2 | ||||
-rw-r--r-- | drivers/zorro/Kconfig | 18 | ||||
-rw-r--r-- | drivers/zorro/Makefile | 22 | ||||
-rw-r--r-- | drivers/zorro/gen-devlist.c | 107 | ||||
-rw-r--r-- | drivers/zorro/names.c | 97 | ||||
-rw-r--r-- | drivers/zorro/proc.c | 142 | ||||
-rw-r--r-- | drivers/zorro/zorro-driver.c | 180 | ||||
-rw-r--r-- | drivers/zorro/zorro-sysfs.c | 120 | ||||
-rw-r--r-- | drivers/zorro/zorro.c | 235 | ||||
-rw-r--r-- | drivers/zorro/zorro.h | 9 | ||||
-rw-r--r-- | drivers/zorro/zorro.ids | 474 |
11 files changed, 1406 insertions, 0 deletions
diff --git a/drivers/zorro/.gitignore b/drivers/zorro/.gitignore new file mode 100644 index 000000000..34f980bd8 --- /dev/null +++ b/drivers/zorro/.gitignore @@ -0,0 +1,2 @@ +devlist.h +gen-devlist diff --git a/drivers/zorro/Kconfig b/drivers/zorro/Kconfig new file mode 100644 index 000000000..19bc753a4 --- /dev/null +++ b/drivers/zorro/Kconfig @@ -0,0 +1,18 @@ +# +# Zorro configuration +# +config ZORRO_NAMES + bool "Zorro device name database" + depends on ZORRO + ---help--- + By default, the kernel contains a database of all known Zorro device + names to make the information in /proc/iomem comprehensible to the + user. This database increases the size of the kernel image by about + 15KB, but it gets freed after the system boots up, so it doesn't + take up kernel memory. Anyway, if you are building an installation + floppy or kernel for an embedded system where kernel image size + really matters, you can disable this feature and you'll get device + ID numbers instead of names. + + When in doubt, say Y. + diff --git a/drivers/zorro/Makefile b/drivers/zorro/Makefile new file mode 100644 index 000000000..7dc5332ff --- /dev/null +++ b/drivers/zorro/Makefile @@ -0,0 +1,22 @@ +# +# Makefile for the Zorro bus specific drivers. +# + +obj-$(CONFIG_ZORRO) += zorro.o zorro-driver.o zorro-sysfs.o +obj-$(CONFIG_PROC_FS) += proc.o +obj-$(CONFIG_ZORRO_NAMES) += names.o + +hostprogs-y := gen-devlist + +# Files generated that shall be removed upon make clean +clean-files := devlist.h + +# Dependencies on generated files need to be listed explicitly +$(obj)/names.o: $(obj)/devlist.h + +# And that's how to generate them +quiet_cmd_devlist = DEVLIST $@ + cmd_devlist = ( cd $(obj); ./gen-devlist ) < $< +$(obj)/devlist.h: $(src)/zorro.ids $(obj)/gen-devlist + $(call cmd,devlist) + diff --git a/drivers/zorro/gen-devlist.c b/drivers/zorro/gen-devlist.c new file mode 100644 index 000000000..16fe206f9 --- /dev/null +++ b/drivers/zorro/gen-devlist.c @@ -0,0 +1,107 @@ +/* + * Generate devlist.h from the Zorro ID file. + * + * (c) 2000 Geert Uytterhoeven <geert@linux-m68k.org> + * + * Based on the PCI version: + * + * (c) 1999--2000 Martin Mares <mj@ucw.cz> + */ + +#include <stdio.h> +#include <string.h> + +#define MAX_NAME_SIZE 63 + +static void +pq(FILE *f, const char *c) +{ + while (*c) { + if (*c == '"') + fprintf(f, "\\\""); + else + fputc(*c, f); + c++; + } +} + +int +main(void) +{ + char line[1024], *c, *bra, manuf[8]; + int manufs = 0; + int mode = 0; + int lino = 0; + int manuf_len = 0; + FILE *devf; + + devf = fopen("devlist.h", "w"); + if (!devf) { + fprintf(stderr, "Cannot create output file!\n"); + return 1; + } + + while (fgets(line, sizeof(line)-1, stdin)) { + lino++; + if ((c = strchr(line, '\n'))) + *c = 0; + if (!line[0] || line[0] == '#') + continue; + if (line[0] == '\t') { + switch (mode) { + case 1: + if (strlen(line) > 5 && line[5] == ' ') { + c = line + 5; + while (*c == ' ') + *c++ = 0; + if (manuf_len + strlen(c) + 1 > MAX_NAME_SIZE) { + /* Too long, try cutting off long description */ + bra = strchr(c, '['); + if (bra && bra > c && bra[-1] == ' ') + bra[-1] = 0; + if (manuf_len + strlen(c) + 1 > MAX_NAME_SIZE) { + fprintf(stderr, "Line %d: Product name too long\n", lino); + return 1; + } + } + fprintf(devf, "\tPRODUCT(%s,%s,\"", manuf, line+1); + pq(devf, c); + fputs("\")\n", devf); + } else goto err; + break; + default: + goto err; + } + } else if (strlen(line) > 4 && line[4] == ' ') { + c = line + 4; + while (*c == ' ') + *c++ = 0; + if (manufs) + fputs("ENDMANUF()\n\n", devf); + manufs++; + strcpy(manuf, line); + manuf_len = strlen(c); + if (manuf_len + 24 > MAX_NAME_SIZE) { + fprintf(stderr, "Line %d: manufacturer name too long\n", lino); + return 1; + } + fprintf(devf, "MANUF(%s,\"", manuf); + pq(devf, c); + fputs("\")\n", devf); + mode = 1; + } else { + err: + fprintf(stderr, "Line %d: Syntax error in mode %d: %s\n", lino, mode, line); + return 1; + } + } + fputs("ENDMANUF()\n\ +\n\ +#undef MANUF\n\ +#undef PRODUCT\n\ +#undef ENDMANUF\n", devf); + + fclose(devf); + + return 0; +} diff --git a/drivers/zorro/names.c b/drivers/zorro/names.c new file mode 100644 index 000000000..83eedddbb --- /dev/null +++ b/drivers/zorro/names.c @@ -0,0 +1,97 @@ +/* + * Zorro Device Name Tables + * + * Copyright (C) 1999--2000 Geert Uytterhoeven + * + * Based on the PCI version: + * + * Copyright 1992--1999 Drew Eckhardt, Frederic Potter, + * David Mosberger-Tang, Martin Mares + */ + +#include <linux/init.h> +#include <linux/kernel.h> +#include <linux/types.h> +#include <linux/zorro.h> + + +struct zorro_prod_info { + __u16 prod; + unsigned short seen; + const char *name; +}; + +struct zorro_manuf_info { + __u16 manuf; + unsigned short nr; + const char *name; + struct zorro_prod_info *prods; +}; + +/* + * This is ridiculous, but we want the strings in + * the .init section so that they don't take up + * real memory.. Parse the same file multiple times + * to get all the info. + */ +#define MANUF( manuf, name ) static char __manufstr_##manuf[] __initdata = name; +#define ENDMANUF() +#define PRODUCT( manuf, prod, name ) static char __prodstr_##manuf##prod[] __initdata = name; +#include "devlist.h" + + +#define MANUF( manuf, name ) static struct zorro_prod_info __prods_##manuf[] __initdata = { +#define ENDMANUF() }; +#define PRODUCT( manuf, prod, name ) { 0x##prod, 0, __prodstr_##manuf##prod }, +#include "devlist.h" + +static struct zorro_manuf_info __initdata zorro_manuf_list[] = { +#define MANUF( manuf, name ) { 0x##manuf, ARRAY_SIZE(__prods_##manuf), __manufstr_##manuf, __prods_##manuf }, +#define ENDMANUF() +#define PRODUCT( manuf, prod, name ) +#include "devlist.h" +}; + +#define MANUFS ARRAY_SIZE(zorro_manuf_list) + +void __init zorro_name_device(struct zorro_dev *dev) +{ + const struct zorro_manuf_info *manuf_p = zorro_manuf_list; + int i = MANUFS; + char *name = dev->name; + + do { + if (manuf_p->manuf == ZORRO_MANUF(dev->id)) + goto match_manuf; + manuf_p++; + } while (--i); + + /* Couldn't find either the manufacturer nor the product */ + return; + + match_manuf: { + struct zorro_prod_info *prod_p = manuf_p->prods; + int i = manuf_p->nr; + + while (i > 0) { + if (prod_p->prod == + ((ZORRO_PROD(dev->id)<<8) | ZORRO_EPC(dev->id))) + goto match_prod; + prod_p++; + i--; + } + + /* Ok, found the manufacturer, but unknown product */ + sprintf(name, "Zorro device %08x (%s)", dev->id, manuf_p->name); + return; + + /* Full match */ + match_prod: { + char *n = name + sprintf(name, "%s %s", manuf_p->name, prod_p->name); + int nr = prod_p->seen + 1; + prod_p->seen = nr; + if (nr > 1) + sprintf(n, " (#%d)", nr); + } + } +} diff --git a/drivers/zorro/proc.c b/drivers/zorro/proc.c new file mode 100644 index 000000000..6ac2579da --- /dev/null +++ b/drivers/zorro/proc.c @@ -0,0 +1,142 @@ +/* + * Procfs interface for the Zorro bus. + * + * Copyright (C) 1998-2003 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/seq_file.h> +#include <linux/init.h> +#include <linux/export.h> + +#include <asm/byteorder.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) +{ + return fixed_size_llseek(file, off, whence, sizeof(struct ConfigDev)); +} + +static ssize_t +proc_bus_zorro_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos) +{ + struct zorro_dev *z = PDE_DATA(file_inode(file)); + struct ConfigDev cd; + loff_t 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; + + /* Construct a ConfigDev */ + memset(&cd, 0, sizeof(cd)); + cd.cd_Rom = z->rom; + cd.cd_SlotAddr = cpu_to_be16(z->slotaddr); + cd.cd_SlotSize = cpu_to_be16(z->slotsize); + cd.cd_BoardAddr = cpu_to_be32(zorro_resource_start(z)); + cd.cd_BoardSize = cpu_to_be32(zorro_resource_len(z)); + + if (copy_to_user(buf, (void *)&cd + pos, nbytes)) + return -EFAULT; + *ppos += nbytes; + + return nbytes; +} + +static const struct file_operations proc_bus_zorro_operations = { + .owner = THIS_MODULE, + .llseek = proc_bus_zorro_lseek, + .read = proc_bus_zorro_read, +}; + +static void * zorro_seq_start(struct seq_file *m, loff_t *pos) +{ + return (*pos < zorro_num_autocon) ? pos : NULL; +} + +static void * zorro_seq_next(struct seq_file *m, void *v, loff_t *pos) +{ + (*pos)++; + return (*pos < zorro_num_autocon) ? pos : NULL; +} + +static void zorro_seq_stop(struct seq_file *m, void *v) +{ +} + +static int zorro_seq_show(struct seq_file *m, void *v) +{ + unsigned int slot = *(loff_t *)v; + struct zorro_dev *z = &zorro_autocon[slot]; + + seq_printf(m, "%02x\t%08x\t%08lx\t%08lx\t%02x\n", slot, z->id, + (unsigned long)zorro_resource_start(z), + (unsigned long)zorro_resource_len(z), + z->rom.er_Type); + return 0; +} + +static const struct seq_operations zorro_devices_seq_ops = { + .start = zorro_seq_start, + .next = zorro_seq_next, + .stop = zorro_seq_stop, + .show = zorro_seq_show, +}; + +static int zorro_devices_proc_open(struct inode *inode, struct file *file) +{ + return seq_open(file, &zorro_devices_seq_ops); +} + +static const struct file_operations zorro_devices_proc_fops = { + .owner = THIS_MODULE, + .open = zorro_devices_proc_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; + +static struct proc_dir_entry *proc_bus_zorro_dir; + +static int __init zorro_proc_attach_device(unsigned int slot) +{ + struct proc_dir_entry *entry; + char name[4]; + + sprintf(name, "%02x", slot); + entry = proc_create_data(name, 0, proc_bus_zorro_dir, + &proc_bus_zorro_operations, + &zorro_autocon[slot]); + if (!entry) + return -ENOMEM; + proc_set_size(entry, sizeof(struct zorro_dev)); + return 0; +} + +static int __init zorro_proc_init(void) +{ + unsigned int slot; + + if (MACH_IS_AMIGA && AMIGAHW_PRESENT(ZORRO)) { + proc_bus_zorro_dir = proc_mkdir("bus/zorro", NULL); + proc_create("devices", 0, proc_bus_zorro_dir, + &zorro_devices_proc_fops); + for (slot = 0; slot < zorro_num_autocon; slot++) + zorro_proc_attach_device(slot); + } + return 0; +} + +device_initcall(zorro_proc_init); diff --git a/drivers/zorro/zorro-driver.c b/drivers/zorro/zorro-driver.c new file mode 100644 index 000000000..eacae1434 --- /dev/null +++ b/drivers/zorro/zorro-driver.c @@ -0,0 +1,180 @@ +/* + * Zorro Driver Services + * + * Copyright (C) 2003 Geert Uytterhoeven + * + * Loosely based on drivers/pci/pci-driver.c + * + * 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/init.h> +#include <linux/module.h> +#include <linux/zorro.h> + + + /** + * zorro_match_device - Tell if a Zorro device structure has a matching + * Zorro device id structure + * @ids: array of Zorro device id structures to search in + * @dev: the Zorro device structure to match against + * + * Used by a driver to check whether a Zorro device present in the + * system is in its list of supported devices. Returns the matching + * zorro_device_id structure or %NULL if there is no match. + */ + +const struct zorro_device_id * +zorro_match_device(const struct zorro_device_id *ids, + const struct zorro_dev *z) +{ + while (ids->id) { + if (ids->id == ZORRO_WILDCARD || ids->id == z->id) + return ids; + ids++; + } + return NULL; +} +EXPORT_SYMBOL(zorro_match_device); + + +static int zorro_device_probe(struct device *dev) +{ + int error = 0; + struct zorro_driver *drv = to_zorro_driver(dev->driver); + struct zorro_dev *z = to_zorro_dev(dev); + + if (!z->driver && drv->probe) { + const struct zorro_device_id *id; + + id = zorro_match_device(drv->id_table, z); + if (id) + error = drv->probe(z, id); + if (error >= 0) { + z->driver = drv; + error = 0; + } + } + return error; +} + + +static int zorro_device_remove(struct device *dev) +{ + struct zorro_dev *z = to_zorro_dev(dev); + struct zorro_driver *drv = to_zorro_driver(dev->driver); + + if (drv) { + if (drv->remove) + drv->remove(z); + z->driver = NULL; + } + return 0; +} + + + /** + * zorro_register_driver - register a new Zorro driver + * @drv: the driver structure to register + * + * Adds the driver structure to the list of registered drivers + * Returns zero or a negative error value. + */ + +int zorro_register_driver(struct zorro_driver *drv) +{ + /* initialize common driver fields */ + drv->driver.name = drv->name; + drv->driver.bus = &zorro_bus_type; + + /* register with core */ + return driver_register(&drv->driver); +} +EXPORT_SYMBOL(zorro_register_driver); + + + /** + * zorro_unregister_driver - unregister a zorro driver + * @drv: the driver structure to unregister + * + * Deletes the driver structure from the list of registered Zorro drivers, + * gives it a chance to clean up by calling its remove() function for + * each device it was responsible for, and marks those devices as + * driverless. + */ + +void zorro_unregister_driver(struct zorro_driver *drv) +{ + driver_unregister(&drv->driver); +} +EXPORT_SYMBOL(zorro_unregister_driver); + + + /** + * zorro_bus_match - Tell if a Zorro device structure has a matching Zorro + * device id structure + * @ids: array of Zorro device id structures to search in + * @dev: the Zorro device structure to match against + * + * Used by a driver to check whether a Zorro device present in the + * system is in its list of supported devices.Returns the matching + * zorro_device_id structure or %NULL if there is no match. + */ + +static int zorro_bus_match(struct device *dev, struct device_driver *drv) +{ + struct zorro_dev *z = to_zorro_dev(dev); + struct zorro_driver *zorro_drv = to_zorro_driver(drv); + const struct zorro_device_id *ids = zorro_drv->id_table; + + if (!ids) + return 0; + + while (ids->id) { + if (ids->id == ZORRO_WILDCARD || ids->id == z->id) + return 1; + ids++; + } + return 0; +} + +static int zorro_uevent(struct device *dev, struct kobj_uevent_env *env) +{ + struct zorro_dev *z; + + if (!dev) + return -ENODEV; + + z = to_zorro_dev(dev); + if (!z) + return -ENODEV; + + if (add_uevent_var(env, "ZORRO_ID=%08X", z->id) || + add_uevent_var(env, "ZORRO_SLOT_NAME=%s", dev_name(dev)) || + add_uevent_var(env, "ZORRO_SLOT_ADDR=%04X", z->slotaddr) || + add_uevent_var(env, "MODALIAS=" ZORRO_DEVICE_MODALIAS_FMT, z->id)) + return -ENOMEM; + + return 0; +} + +struct bus_type zorro_bus_type = { + .name = "zorro", + .dev_name = "zorro", + .match = zorro_bus_match, + .uevent = zorro_uevent, + .probe = zorro_device_probe, + .remove = zorro_device_remove, +}; +EXPORT_SYMBOL(zorro_bus_type); + + +static int __init zorro_driver_init(void) +{ + return bus_register(&zorro_bus_type); +} + +postcore_initcall(zorro_driver_init); + diff --git a/drivers/zorro/zorro-sysfs.c b/drivers/zorro/zorro-sysfs.c new file mode 100644 index 000000000..36b210f9b --- /dev/null +++ b/drivers/zorro/zorro-sysfs.c @@ -0,0 +1,120 @@ +/* + * File Attributes for Zorro Devices + * + * Copyright (C) 2003 Geert Uytterhoeven + * + * Loosely based on drivers/pci/pci-sysfs.c + * + * 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/kernel.h> +#include <linux/zorro.h> +#include <linux/stat.h> +#include <linux/string.h> + +#include <asm/byteorder.h> + +#include "zorro.h" + + +/* show configuration fields */ +#define zorro_config_attr(name, field, format_string) \ +static ssize_t \ +show_##name(struct device *dev, struct device_attribute *attr, char *buf) \ +{ \ + struct zorro_dev *z; \ + \ + z = to_zorro_dev(dev); \ + return sprintf(buf, format_string, z->field); \ +} \ +static DEVICE_ATTR(name, S_IRUGO, show_##name, NULL); + +zorro_config_attr(id, id, "0x%08x\n"); +zorro_config_attr(type, rom.er_Type, "0x%02x\n"); +zorro_config_attr(slotaddr, slotaddr, "0x%04x\n"); +zorro_config_attr(slotsize, slotsize, "0x%04x\n"); + +static ssize_t +show_serial(struct device *dev, struct device_attribute *attr, char *buf) +{ + struct zorro_dev *z; + + z = to_zorro_dev(dev); + return sprintf(buf, "0x%08x\n", be32_to_cpu(z->rom.er_SerialNumber)); +} + +static DEVICE_ATTR(serial, S_IRUGO, show_serial, NULL); + +static ssize_t zorro_show_resource(struct device *dev, struct device_attribute *attr, char *buf) +{ + struct zorro_dev *z = to_zorro_dev(dev); + + return sprintf(buf, "0x%08lx 0x%08lx 0x%08lx\n", + (unsigned long)zorro_resource_start(z), + (unsigned long)zorro_resource_end(z), + zorro_resource_flags(z)); +} + +static DEVICE_ATTR(resource, S_IRUGO, zorro_show_resource, NULL); + +static ssize_t zorro_read_config(struct file *filp, struct kobject *kobj, + struct bin_attribute *bin_attr, + char *buf, loff_t off, size_t count) +{ + struct zorro_dev *z = to_zorro_dev(container_of(kobj, struct device, + kobj)); + struct ConfigDev cd; + + /* Construct a ConfigDev */ + memset(&cd, 0, sizeof(cd)); + cd.cd_Rom = z->rom; + cd.cd_SlotAddr = cpu_to_be16(z->slotaddr); + cd.cd_SlotSize = cpu_to_be16(z->slotsize); + cd.cd_BoardAddr = cpu_to_be32(zorro_resource_start(z)); + cd.cd_BoardSize = cpu_to_be32(zorro_resource_len(z)); + + return memory_read_from_buffer(buf, count, &off, &cd, sizeof(cd)); +} + +static struct bin_attribute zorro_config_attr = { + .attr = { + .name = "config", + .mode = S_IRUGO, + }, + .size = sizeof(struct ConfigDev), + .read = zorro_read_config, +}; + +static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct zorro_dev *z = to_zorro_dev(dev); + + return sprintf(buf, ZORRO_DEVICE_MODALIAS_FMT "\n", z->id); +} + +static DEVICE_ATTR(modalias, S_IRUGO, modalias_show, NULL); + +int zorro_create_sysfs_dev_files(struct zorro_dev *z) +{ + struct device *dev = &z->dev; + int error; + + /* current configuration's attributes */ + if ((error = device_create_file(dev, &dev_attr_id)) || + (error = device_create_file(dev, &dev_attr_type)) || + (error = device_create_file(dev, &dev_attr_serial)) || + (error = device_create_file(dev, &dev_attr_slotaddr)) || + (error = device_create_file(dev, &dev_attr_slotsize)) || + (error = device_create_file(dev, &dev_attr_resource)) || + (error = device_create_file(dev, &dev_attr_modalias)) || + (error = sysfs_create_bin_file(&dev->kobj, &zorro_config_attr))) + return error; + + return 0; +} + diff --git a/drivers/zorro/zorro.c b/drivers/zorro/zorro.c new file mode 100644 index 000000000..d295d9878 --- /dev/null +++ b/drivers/zorro/zorro.c @@ -0,0 +1,235 @@ +/* + * Zorro Bus Services + * + * Copyright (C) 1995-2003 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/module.h> +#include <linux/types.h> +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/zorro.h> +#include <linux/bitops.h> +#include <linux/string.h> +#include <linux/platform_device.h> +#include <linux/slab.h> + +#include <asm/byteorder.h> +#include <asm/setup.h> +#include <asm/amigahw.h> + +#include "zorro.h" + + + /* + * Zorro Expansion Devices + */ + +unsigned int zorro_num_autocon; +struct zorro_dev_init zorro_autocon_init[ZORRO_NUM_AUTO] __initdata; +struct zorro_dev *zorro_autocon; + + + /* + * Zorro bus + */ + +struct zorro_bus { + struct device dev; + struct zorro_dev devices[0]; +}; + + + /* + * Find Zorro Devices + */ + +struct zorro_dev *zorro_find_device(zorro_id id, struct zorro_dev *from) +{ + struct zorro_dev *z; + + if (!zorro_num_autocon) + return NULL; + + for (z = from ? from+1 : &zorro_autocon[0]; + z < zorro_autocon+zorro_num_autocon; + z++) + if (id == ZORRO_WILDCARD || id == z->id) + return z; + return NULL; +} +EXPORT_SYMBOL(zorro_find_device); + + + /* + * 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 + * + * FIXME: use the normal resource management + */ + +DECLARE_BITMAP(zorro_unused_z2ram, 128); +EXPORT_SYMBOL(zorro_unused_z2ram); + + +static void __init mark_region(unsigned long start, unsigned long end, + int flag) +{ + if (flag) + start += Z2RAM_CHUNKMASK; + else + end += Z2RAM_CHUNKMASK; + start &= ~Z2RAM_CHUNKMASK; + end &= ~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; + } +} + + +static struct resource __init *zorro_find_parent_resource( + struct platform_device *bridge, struct zorro_dev *z) +{ + int i; + + for (i = 0; i < bridge->num_resources; i++) { + struct resource *r = &bridge->resource[i]; + if (zorro_resource_start(z) >= r->start && + zorro_resource_end(z) <= r->end) + return r; + } + return &iomem_resource; +} + + + +static int __init amiga_zorro_probe(struct platform_device *pdev) +{ + struct zorro_bus *bus; + struct zorro_dev_init *zi; + struct zorro_dev *z; + struct resource *r; + unsigned int i; + int error; + + /* Initialize the Zorro bus */ + bus = kzalloc(sizeof(*bus) + + zorro_num_autocon * sizeof(bus->devices[0]), + GFP_KERNEL); + if (!bus) + return -ENOMEM; + + zorro_autocon = bus->devices; + bus->dev.parent = &pdev->dev; + dev_set_name(&bus->dev, zorro_bus_type.name); + error = device_register(&bus->dev); + if (error) { + pr_err("Zorro: Error registering zorro_bus\n"); + put_device(&bus->dev); + kfree(bus); + return error; + } + platform_set_drvdata(pdev, bus); + + pr_info("Zorro: Probing AutoConfig expansion devices: %u device%s\n", + zorro_num_autocon, zorro_num_autocon == 1 ? "" : "s"); + + /* First identify all devices ... */ + for (i = 0; i < zorro_num_autocon; i++) { + zi = &zorro_autocon_init[i]; + z = &zorro_autocon[i]; + + z->rom = zi->rom; + z->id = (be16_to_cpu(z->rom.er_Manufacturer) << 16) | + (z->rom.er_Product << 8); + if (z->id == ZORRO_PROD_GVP_EPC_BASE) { + /* GVP quirk */ + unsigned long magic = zi->boardaddr + 0x8000; + z->id |= *(u16 *)ZTWO_VADDR(magic) & GVP_PRODMASK; + } + z->slotaddr = zi->slotaddr; + z->slotsize = zi->slotsize; + sprintf(z->name, "Zorro device %08x", z->id); + zorro_name_device(z); + z->resource.start = zi->boardaddr; + z->resource.end = zi->boardaddr + zi->boardsize - 1; + z->resource.name = z->name; + r = zorro_find_parent_resource(pdev, z); + error = request_resource(r, &z->resource); + if (error) + dev_err(&bus->dev, + "Address space collision on device %s %pR\n", + z->name, &z->resource); + z->dev.parent = &bus->dev; + z->dev.bus = &zorro_bus_type; + z->dev.id = i; + } + + /* ... then register them */ + for (i = 0; i < zorro_num_autocon; i++) { + z = &zorro_autocon[i]; + error = device_register(&z->dev); + if (error) { + dev_err(&bus->dev, "Error registering device %s\n", + z->name); + put_device(&z->dev); + continue; + } + error = zorro_create_sysfs_dev_files(z); + if (error) + dev_err(&z->dev, "Error creating sysfs files\n"); + } + + /* Mark all available Zorro II memory */ + zorro_for_each_dev(z) { + if (z->rom.er_Type & ERTF_MEMLIST) + mark_region(zorro_resource_start(z), + zorro_resource_end(z)+1, 1); + } + + /* Unmark all used Zorro II memory */ + for (i = 0; i < m68k_num_memory; i++) + if (m68k_memory[i].addr < 16*1024*1024) + mark_region(m68k_memory[i].addr, + m68k_memory[i].addr+m68k_memory[i].size, + 0); + + return 0; +} + +static struct platform_driver amiga_zorro_driver = { + .driver = { + .name = "amiga-zorro", + }, +}; + +static int __init amiga_zorro_init(void) +{ + return platform_driver_probe(&amiga_zorro_driver, amiga_zorro_probe); +} + +module_init(amiga_zorro_init); + +MODULE_LICENSE("GPL"); diff --git a/drivers/zorro/zorro.h b/drivers/zorro/zorro.h new file mode 100644 index 000000000..34119fb4e --- /dev/null +++ b/drivers/zorro/zorro.h @@ -0,0 +1,9 @@ + +#ifdef CONFIG_ZORRO_NAMES +extern void zorro_name_device(struct zorro_dev *z); +#else +static inline void zorro_name_device(struct zorro_dev *dev) { } +#endif + +extern int zorro_create_sysfs_dev_files(struct zorro_dev *z); + diff --git a/drivers/zorro/zorro.ids b/drivers/zorro/zorro.ids new file mode 100644 index 000000000..119abea8c --- /dev/null +++ b/drivers/zorro/zorro.ids @@ -0,0 +1,474 @@ +# +# List of Zorro IDs +# +# Maintained by Geert Uytterhoeven <zorro@linux-m68k.org> +# If you have any new entries, please send them to the maintainer. +# + +# Manufacturers and Products. Please keep sorted. + +# Syntax: +# manufacturer manufacturer_name +# product product_name <-- single tab + +00d3 Pacific Peripherals + 0000 SE 2000 A500 [HD Controller] + 0a00 [SCSI Host Adapter] +00dd Kupke + 0000 Golem RAM Box 2MB [RAM Expansion] +0100 MacroSystems USA +# The Stormbringer is actually made by Memphis + 0000 Stormbringer [Accelerator] + 1300 Warp Engine [Accelerator, SCSI Host Adapter and RAM Expansion] +0200 3-State + 0200 Megamix 2000 [RAM Expansion] +0201 Commodore Braunschweig + 0100 A2088 XT/A2286 AT [ISA Bus Bridge] + 0200 A2286 AT [ISA Bus Bridge] + 5400 A4091 [SCSI Host Adapter] + 6700 A2386-SX [ISA Bus Bridge] +0202 Commodore West Chester + 0100 A2090/A2090A [SCSI Host Adapter] + 0200 A590/A2091 [SCSI Host Adapter] + 0300 A590/A2091 [SCSI Host Adapter] + 0400 A2090B 2090 Autoboot [SCSI Host Adapter] + 0900 A2060 [ArcNet Card] + 0a00 A590/A2052/A2058/A2091 [RAM Expansion] + 2000 A560 [RAM Expansion] + 4500 A2232 Prototype [Multi I/O] + 4600 A2232 [Multi I/O] + 5000 A2620 68020 [Accelerator and RAM Expansion] + 5100 A2630 68030 [Accelerator and RAM Expansion] + 5400 A4091 [SCSI Host Adapter] + 5a00 A2065 [Ethernet Card] + 6000 Romulator Card + 6100 A3000 Test Fixture [Miscellaneous Expansion Card] + 6700 A2386-SX [ISA Bus Bridge] + 7000 A2065 [Ethernet Card] +0203 Commodore West Chester + 0300 A2090/A2090A Combitec/MacroSystem [SCSI Host Adapter] +02f4 Progressive Peripherals & Systems + 0200 EXP8000 [RAM Expansion] + 6900 A2000 68040 [Accelerator] + 9600 68040 [Accelerator] +02ff Kolff Computer Supplies + 0000 KCS Power PC [ISA Bus Bridge] +03ec Cardco Ltd. + 0400 Kronos 2000 [SCSI Host Adapter] + 0c00 A1000 [SCSI Host Adapter] + 0e00 Escort [SCSI Host Adapter] + f500 A2410 HiRes [Graphics Card] +03ed A-Squared + 0100 Live! 2000 [Video Card] +03ee Comspec Communications + 0100 AX2000 [RAM Expansion] +03f1 Anakin Research + 0100 Easyl Drawing Tablet Interface +03f2 Microbotics + 0000 StarBoard II [RAM Expansion] + 0200 StarDrive [SCSI Host Adapter] + 0300 8-Up (Rev A) [RAM Expansion] + 0400 8-Up (Rev Z) [RAM Expansion] + 2000 Delta [RAM Expansion] + 4000 8-Star [RAM Expansion] + 4100 8-Star [Miscellaneous Expansion Card] + 4400 VXL RAM*32 [RAM Expansion] + 4500 VXL-30 [Accelerator] + 6000 Delta [Miscellaneous Expansion Card] + 8100 MBX 1200/1200z [RAM Expansion] + 9600 Hardframe 2000 [SCSI Host Adapter] + 9e00 Hardframe 2000 [SCSI Host Adapter] + c100 MBX 1200/1200z [Miscellaneous Expansion Card] +03f4 Access Associates Alegra +03f6 Expansion Technologies/Pacific Cypress +03ff ASDG + 0100 [RAM Expansion] + 0200 [RAM Expansion] + fe00 EB-920 Lan Rover [Ethernet Card] + ff00 GPIB/Dual IEEE-488/Twin-X [Multi I/O] +0404 Ronin/Imtronics + 3900 Hurricane 2800 [Accelerator and RAM Expansion] + 5700 Hurricane 2800 [Accelerator and RAM Expansion] +0406 Commodore/University of Lowell + 0000 A2410 HiRes [Graphics Card] +041d Ameristar + 0100 A2065 [Ethernet Card] + 0900 A560 [ArcNet Card] + 0a00 A4066 [Ethernet Card] + 2000 1600-GX [Graphics Card] +0420 Supra + 0100 SupraDrive 4x4 [SCSI Host Adapter] + 0200 1000 [RAM Expansion] + 0300 2000 DMA [SCSI Host Adapter] + 0500 500 [SCSI Host Adapter and RAM Expansion] + 0800 500 [SCSI Host Adapter] + 0900 500XP/2000 [RAM Expansion] + 0a00 500RX/2000 [RAM Expansion] + 0b00 2400zi [Modem] + 0c00 500XP/SupraDrive WordSync [SCSI Host Adapter] + 0d00 SupraDrive WordSync II [SCSI Host Adapter] + 1000 2400zi+ [Modem] +0422 Computer Systems Associates + 1100 Magnum 40 [Accelerator and SCSI Host Adapter] + 1500 12 Gauge [SCSI Host Adapter] +0439 Marc Michael Groth +0502 M-Tech + 0300 AT500 [RAM Expansion] +06e1 Great Valley Products + 0800 Impact Series I [SCSI Host Adapter and RAM Expansion] + 2000 Impact Vision 24 [Graphics Card] +07da ByteBox + 0000 A500 +07db Hacker Test Board +07dc DKB/Power Computing + 0900 SecureKey + 0e00 DKM 3128 [RAM Expansion] + 0f00 Rapid Fire [SCSI Host Adapter] + 1000 DKM 1202 [FPU and RAM Expansion] + 1200 Cobra/Viper II 68EC030 [Accelerator] + 1700 WildFire 060 [Accelerator] + ff00 WildFire 060 [Accelerator] +07e1 Great Valley Products + 0100 Impact Series I (4K) [SCSI Host Adapter] + 0200 Impact Series I (16K/2) [SCSI Host Adapter] + 0300 Impact Series I (16K/2) [SCSI Host Adapter] + 0800 Impact 3001 [IDE Interface] + 0900 Impact 3001 [RAM Expansion] + 0a00 Impact Series II [RAM Expansion] + 0b20 GForce 040 [Accelerator] + 0b30 GForce 040 [Accelerator and SCSI Host Adapter] + 0b40 A1291 [SCSI Host Adapter] + 0b60 Combo 030 R4 [Accelerator] + 0b70 Combo 030 R4 [Accelerator and SCSI Host Adapter] + 0b78 Phone Pak + 0b98 IO-Extender [Multi I/O] + 0ba0 GForce 030 [Accelerator] + 0bb0 GForce 030 [Accelerator and SCSI Host Adapter] + 0bc0 A530 [Accelerator] + 0bd0 A530 [Accelerator and SCSI Host Adapter] + 0be0 Combo 030 R3 [Accelerator] + 0bf0 Combo 030 R3 [Accelerator and SCSI Host Adapter] + 0bf8 Series-II [SCSI Host Adapter] + 0d00 Impact 3001 [IDE Interface] + 1600 GForce 040/060 [Accelerator and SCSI Host Adapter] + 2000 Impact Vision 24 [Graphics Card] + 4400 Rembrandt [Graphics Card] + ff00 GForce 040 [Accelerator] +07e5 California Access/Synergy + 0100 Malibu [SCSI Host Adapter] +07e6 Xetec + 0100 FastCard [SCSI Host Adapter] + 0200 FastCard [RAM Expansion] + 0300 FastCard Plus [SCSI Host Adapter] +07ea Progressive Peripherals & Systems + 0000 Mercury [Accelerator] + 0100 A3000 68040 [Accelerator] + 6900 A2000 68040 [Accelerator] + 9600 Zeus [Accelerator, SCSI Host Adapter and RAM Expansion] + bb00 A500 68040 [Accelerator] +# The AteoBus and Pixel64 are actually made by Ateo Concepts + fc00 AteoBus [Expansion Bus Bridge] + fe00 Pixel64 [Graphics Card] + ff00 Pixel64 RAM [Graphics Card] +07ec Xebec +07f2 Spirit Technology + 0100 Insider IN1000 [RAM Expansion] + 0200 Insider IN500 [RAM Expansion] + 0300 SIN500 [RAM Expansion] + 0400 HDA 506 [HD Controller] + 0500 AX-S [Miscellaneous Expansion Card] + 0600 OctaByte [RAM Expansion] + 0800 Inmate [SCSI Host Adapter and RAM Expansion] +07f3 Spirit Technology +07fe BSC/Alfadata + 0300 ALF 3 [SCSI Host Adapter] +0801 BSC/Alfadata + 0100 ALF 2 [SCSI Host Adapter] + 0200 ALF 2 [SCSI Host Adapter] + 0300 ALF 3 [SCSI Host Adapter] + 0400 Oktagon 500 [SCSI Host Adapter] + 0600 Tandem AT-2008/508 [IDE Interface] + 0800 Oktagon 2008 [RAM Expansion] + 1000 MultiFace I [Multi I/O] + 2000 FrameMaster II [Graphics Card] + 4000 ISDN MasterCard [ISDN Interface] +0802 Cardco Ltd. + 0400 Kronos 2000 [SCSI Host Adapter] + 0c00 A1000 [SCSI Host Adapter] +0804 Jochheim + 0100 [RAM Expansion] + 2000 [RAM Expansion] +0807 Checkpoint Technologies + 0000 Serial Solution [Multi Serial] +0810 Edotronik + 0100 IEEE-488 Interface Card + 0200 CBM-8032 Card + 0300 [Multi Serial] + 0400 24Bit Realtime Video Digitizer + 0500 32Bit Parallel I/O Interface + 0600 PIC Prototyping Card + 0700 16 Channel ADC Interface + 0800 VME-Bus Controller + 0900 DSP96000 Realtime Data Acquisition DSP Card +0813 NES Inc. + 0000 [RAM Expansion] +0817 ICD + 0100 Advantage 2000 [SCSI Host Adapter] + 0300 Advantage [IDE Interface] + 0400 Advantage 2080 [RAM Expansion] +0819 Kupke + 0100 Omti [HD Controller] + 0200 Golem SCSI-II [SCSI Host Adapter] + 0300 Golem Box + 0400 030/882 [Accelerator] + 0500 Golem [SCSI Host Adapter] +081d Great Valley Products + 0900 A2000-RAM8/2 [Miscellaneous Expansion Card] + 0a00 Impact Series II [RAM Expansion] +081e Interworks Network +0820 Hardital Synthesis + 0100 Super Big Bang [Accelerator, SCSI Host Adapter and RAM Expansion] + 1400 TQM 68030+68882 [Accelerator] +0828 Applied Engineering + 1000 DL2000 [Modem] + e000 RAM Works [RAM Expansion] +082c BSC/Alfadata + 0400 Oktagon 500 [SCSI Host Adapter] + 0500 Oktagon 2008 [SCSI Host Adapter] + 0600 Tandem AT-2008/508 [IDE Interface] + 0700 Alpha 1200 [RAM Expansion] + 0800 Oktagon 2008 [RAM Expansion] + 1000 MultiFace I [Multi I/O] + 1100 MultiFace II [Multi I/O] + 1200 MultiFace III [Multi I/O] + 2000 FrameMaster II [Graphics Card] + 2100 Graffiti RAM [Graphics Card] + 2200 Graffiti [Graphics Card] + 4000 ISDN MasterCard [ISDN Interface] + 4100 ISDN MasterCard II [ISDN Interface] +0835 Phoenix + 2100 ST506 [HD Controller] + 2200 [SCSI Host Adapter] + be00 [RAM Expansion] +0836 Advanced Storage Systems + 0100 Nexus [SCSI Host Adapter] + 0800 Nexus [RAM Expansion] +0838 Impulse + 0000 FireCracker 24 (NTSC) [Graphics Card] + 0100 FireCracker 24 (PAL) [Graphics Card] +0840 IVS + 0200 GrandSlam PIC 2 [RAM Expansion] + 0400 GrandSlam PIC 1 [RAM Expansion] + 1000 OverDrive [HD Controller] + 3000 TrumpCard Classic [SCSI Host Adapter] + 3400 TrumpCard Pro/GrandSlam [SCSI Host Adapter] + 4000 Meta-4 [RAM Expansion] + bf00 Wavetools [Audio Card] + f300 Vector [SCSI Host Adapter] + f400 Vector [SCSI Host Adapter] +0841 Vector + e300 Connection [Multi I/O] +0845 XPert ProDev + 0100 Visiona RAM [Graphics Card] + 0200 Visiona [Graphics Card] + 0300 Merlin RAM [Graphics Card] + 0400 Merlin [Graphics Card] + c900 Merlin [Graphics Card] +0849 Hydra Systems + 0100 Amiganet [Ethernet Card] +084f Sunrize Industries + 0100 AD1012 [Audio Card] + 0200 AD516 [Audio Card] + 0300 DD512 [Audio Card] +0850 Triceratops + 0100 [Multi I/O] +0851 Applied Magic Inc. + 0100 DMI Resolver [Graphics Card] + 0200 Vivid 24 [Graphics Card] + 0600 Digital Broadcaster [Video Card] +085e GFX-Base + 0000 GDA-1 VRAM [Graphics Card] + 0100 GDA-1 [Graphics Card] +0860 RocTec + 0100 RH 800C [HD Controller] + 0200 RH 800C [RAM Expansion] +0861 Kato +# The Rainbow II and III are actually made by Ingenieurbüro Helfrich + 2000 Rainbow II [Graphics Card] + 2100 Rainbow III [Graphics Card] + 8000 Melody MPEG [Audio Card] +0862 Atlantis +0864 Protar +0865 ACS +0866 Software Results Enterprises + 0100 Golden Gate 2 Bus+ [ISA Bus Bridge] +086a Unknown + 0100 Horizon [Graphics Card] + 0200 Blackbox [Graphics Card] + 0300 Voyager [Graphics Card] +086d Masoboshi + 0300 MasterCard SC201 [RAM Expansion] + 0400 MasterCard MC702 [SCSI Host Adapter and IDE Interface] + 0700 MVD 819 +086f Mainhattan-Data/A-Team + 0100 [IDE Interface] +0877 Village Tronic + 0100 Domino RAM [Graphics Card] + 0200 Domino [Graphics Card] + 0300 Domino 16M Prototype [Graphics Card] + 0b00 Picasso II/II+ RAM [Graphics Card] + 0c00 Picasso II/II+ [Graphics Card] + 0d00 Picasso II/II+ (Segmented Mode) [Graphics Card] + 1500 Picasso IV Z2 RAM [Graphics Card] + 1600 Picasso IV Z2 RAM [Graphics Card] + 1700 Picasso IV Z2 [Graphics Card] + 1800 Picasso IV Z3 [Graphics Card] + c900 Ariadne [Ethernet Card and Parallel Ports] + ca00 Ariadne II [Ethernet Card] +087b Utilities Unlimited + 1500 Emplant Deluxe [Macintosh Emulator] + 2000 Emplant Deluxe [Macintosh Emulator] +0880 Amitrix + 0100 [Multi I/O] + 0200 CD-RAM [RAM Expansion] +0885 ArMax + 0000 OmniBus [Graphics Card] +088d ZEUS Electronic Development + 0300 [ISDN Interface] + 0400 Spider [Video Card] +088f NewTek + 0000 VideoToaster [Video Card] +0890 M-Tech Germany + 0100 AT500 [IDE Interface] + 0300 68030 [Accelerator] + 0600 68020i [Accelerator] + 2000 A1200 T68030 RTC [Accelerator] + 2100 Viper Mk V/E-Matrix 530 [Accelerator and RAM Expansion] + 2200 8MB [RAM Expansion] + 2400 Viper Mk V/E-Matrix 530 [SCSI Host Adapter and IDE Interface] +0891 Great Valley Products + 0100 EGS 28/24 Spectrum RAM [Graphics Card] + 0200 EGS 28/24 Spectrum [Graphics Card] +0892 Apollo + 0100 A1200 [FPU and RAM Expansion] +0893 Ingenieurbüro Helfrich + 0500 Piccolo RAM [Graphics Card] + 0600 Piccolo [Graphics Card] + 0700 PeggyPlus MPEG [Video Card] + 0800 VideoCruncher [Video Card] + 0a00 Piccolo SD64 RAM [Graphics Card] + 0b00 Piccolo SD64 [Graphics Card] +089b MacroSystems USA + 1300 Warp Engine 40xx [Accelerator, SCSI Host Adapter and RAM Expansion] +089e ElBox Computer + 0600 1200/4 [RAM Expansion] + 0800 FastATA 1200 [IDE Interface] + 1200 FastATA 1200 [IDE Interface] + 1300 FastATA 1200 [IDE Interface] + 1800 FastATA 1200 [IDE Interface] + 1900 FastATA 4000 [IDE Interface] + 1d00 FastATA 4000 [IDE Interface] + 1e00 FastATA ZIV [IDE Interface] +0a00 Harms Professional + 1000 030 Plus [Accelerator] + d000 3500 Professional [Accelerator and RAM Expansion] +0a50 Micronik + 0a00 RCA 120 [RAM Expansion] +0f0f Micronik + 0100 Z3i A1200 [Zorro III Extender and SCSI Host Adapter] +1000 MegaMicro + 0300 SCRAM 500 [SCSI Host Adapter] + 0400 SCRAM 500 [RAM Expansion] +1028 Ronin/Imtronics + 3900 Hurricane 2800 [Accelerator and RAM Expansion] + 5700 Hurricane 2800 [Accelerator and RAM Expansion] +102f Ateo Concepts + fc00 AteoBus [Expansion Bus Bridge] + fe00 Pixel64 [Graphics Card] + ff00 Pixel64 RAM [Graphics Card] +1212 Individual Computers + 0000 Buddha [IDE Interface] + 1700 X-Surf [Ethernet Card and IDE Interface] + 2a00 Catweasel [IDE Interface and Floppy Controller] +1248 Kupke + 0100 Golem HD 3000 [HD Controller] +1267 RBM-Computertechnik + 0100 IOBlix [Multi I/O] +1388 ITH + 0100 ISDN-Master II [ISDN Interface] +1389 VMC + 0100 ISDN Blaster Z2 [ISDN Interface] + 0200 HyperCom 4 [Multi I/O] + 0600 HyperCom 4+ [Multi I/O] +157c Information + 6400 ISDN Engine I [ISDN Interface] +2017 Vortex + 0700 Golden Gate 80386SX [ISA Bus Bridge] + 0800 Golden Gate [RAM Expansion] + 0900 Golden Gate 80486 [ISA Bus Bridge] +2062 Expansion Systems + 0100 DataFlyer 4000SX [SCSI Host Adapter] + 0200 DataFlyer 4000SX [RAM Expansion] +2100 ReadySoft + 0100 AMax II/IV [Macintosh Emulator] +2140 Phase 5 + 0100 Blizzard [RAM Expansion] + 0200 Blizzard [Accelerator] + 0600 Blizzard 1220-IV [Accelerator] + 0a00 FastLane Z3 [RAM Expansion] + 0b00 Blizzard 1230-II/Fastlane Z3/CyberSCSI/CyberStorm060 [Accelerator and/or SCSI Host Adapter] + 0c00 Blizzard 1220/CyberStorm [Accelerator and SCSI Host Adapter] + 0d00 Blizzard 1230 [Accelerator] + 1100 Blizzard 1230-IV/1260 [Accelerator] + 1800 Blizzard 2060 [Accelerator] + 1900 CyberStorm Mk II [Flash ROM] + 2200 CyberVision64 [Graphics Card] + 3200 CyberVision64-3D Prototype [Graphics Card] + 4300 CyberVision64-3D [Graphics Card] + 6400 CyberStorm Mk III [Accelerator and SCSI Host Adapter] + 6e00 Blizzard 603e+ [Accelerator and SCSI Host Adapter] +2169 DPS + 0100 Personal Animation Recorder [Video Card] +2200 Apollo + 0000 A620 68020 [Accelerator] + 0100 A620 68020 [Accelerator] +2222 Apollo + 2200 AT-Apollo + 2300 1230/1240/1260/2030/4040/4060 [Accelerator] +38a5 Petsoff LP + 0000 Delfina [Audio Card] + 0100 Delfina Lite [Audio Card] + 0200 Delfina Plus [Audio Card] +3ff7 Uwe Gerlach + d400 RAM/ROM [Miscellaneous Expansion Card] +4231 ACT + 0100 Prelude [Audio Card] +4754 MacroSystems Germany + 0300 Maestro [Audio Card] + 0400 VLab [Video Card] + 0500 Maestro Pro [Audio Card] + 0600 Retina [Graphics Card] + 0800 MultiEvolution [SCSI Host Adapter] + 0c00 Toccata [Audio Card] + 0d00 Toccata Pro [Audio Card] + 1000 Retina Z3 [Graphics Card] + 1200 VLab Motion [Video Card] + 1300 Altais [Graphics Card] + fd00 Falcon '040 [Accelerator] +6766 Combitec +8000 SKI Peripherals + 0800 MAST Fireball [SCSI Host Adapter] + 8000 [SCSI Host Adapter and Dual Serial Card] +a9ad Reis-Ware + 1100 Scan King [Scanner Interface] +aa01 Cameron + 1000 Personal A4 [Scanner Interface] +aa11 Reis-Ware + 1100 Handyscanner [Scanner Interface] +b5a8 Phoenix + 2100 ST506 [HD Controller] + 2200 [SCSI Host Adapter] + be00 [RAM Expansion] +c008 Combitec + 2a00 [HD Controller] + 2b00 SRAM [RAM Expansion] |