aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/zorro
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@ppc970.osdl.org>2005-04-16 18:20:36 -0400
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-04-16 18:20:36 -0400
commit1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch)
tree0bba044c4ce775e45a88a51686b5d9f90697ea9d /drivers/zorro
Linux-2.6.12-rc2v2.6.12-rc2
Initial git repository build. I'm not bothering with the full history, even though we have it. We can create a separate "historical" git archive of that later if we want to, and in the meantime it's about 3.2GB when imported into git - space that would just make the early git days unnecessarily complicated, when we don't have a lot of good infrastructure for it. Let it rip!
Diffstat (limited to 'drivers/zorro')
-rw-r--r--drivers/zorro/Kconfig18
-rw-r--r--drivers/zorro/Makefile21
-rw-r--r--drivers/zorro/gen-devlist.c107
-rw-r--r--drivers/zorro/names.c109
-rw-r--r--drivers/zorro/proc.c139
-rw-r--r--drivers/zorro/zorro-driver.c150
-rw-r--r--drivers/zorro/zorro-sysfs.c98
-rw-r--r--drivers/zorro/zorro.c193
-rw-r--r--drivers/zorro/zorro.h4
-rw-r--r--drivers/zorro/zorro.ids476
10 files changed, 1315 insertions, 0 deletions
diff --git a/drivers/zorro/Kconfig b/drivers/zorro/Kconfig
new file mode 100644
index 000000000000..19bc753a4755
--- /dev/null
+++ b/drivers/zorro/Kconfig
@@ -0,0 +1,18 @@
1#
2# Zorro configuration
3#
4config ZORRO_NAMES
5 bool "Zorro device name database"
6 depends on ZORRO
7 ---help---
8 By default, the kernel contains a database of all known Zorro device
9 names to make the information in /proc/iomem comprehensible to the
10 user. This database increases the size of the kernel image by about
11 15KB, but it gets freed after the system boots up, so it doesn't
12 take up kernel memory. Anyway, if you are building an installation
13 floppy or kernel for an embedded system where kernel image size
14 really matters, you can disable this feature and you'll get device
15 ID numbers instead of names.
16
17 When in doubt, say Y.
18
diff --git a/drivers/zorro/Makefile b/drivers/zorro/Makefile
new file mode 100644
index 000000000000..f62172603215
--- /dev/null
+++ b/drivers/zorro/Makefile
@@ -0,0 +1,21 @@
1#
2# Makefile for the Zorro bus specific drivers.
3#
4
5obj-$(CONFIG_ZORRO) += zorro.o zorro-driver.o zorro-sysfs.o names.o
6obj-$(CONFIG_PROC_FS) += proc.o
7
8hostprogs-y := gen-devlist
9
10# Files generated that shall be removed upon make clean
11clean-files := devlist.h
12
13# Dependencies on generated files need to be listed explicitly
14$(obj)/names.o: $(obj)/devlist.h
15
16# And that's how to generate them
17quiet_cmd_devlist = DEVLIST $@
18 cmd_devlist = ( cd $(obj); ./gen-devlist ) < $<
19$(obj)/devlist.h: $(src)/zorro.ids $(obj)/gen-devlist
20 $(call cmd,devlist)
21
diff --git a/drivers/zorro/gen-devlist.c b/drivers/zorro/gen-devlist.c
new file mode 100644
index 000000000000..16fe206f9998
--- /dev/null
+++ b/drivers/zorro/gen-devlist.c
@@ -0,0 +1,107 @@
1/*
2 * Generate devlist.h from the Zorro ID file.
3 *
4 * (c) 2000 Geert Uytterhoeven <geert@linux-m68k.org>
5 *
6 * Based on the PCI version:
7 *
8 * (c) 1999--2000 Martin Mares <mj@ucw.cz>
9 */
10
11#include <stdio.h>
12#include <string.h>
13
14#define MAX_NAME_SIZE 63
15
16static void
17pq(FILE *f, const char *c)
18{
19 while (*c) {
20 if (*c == '"')
21 fprintf(f, "\\\"");
22 else
23 fputc(*c, f);
24 c++;
25 }
26}
27
28int
29main(void)
30{
31 char line[1024], *c, *bra, manuf[8];
32 int manufs = 0;
33 int mode = 0;
34 int lino = 0;
35 int manuf_len = 0;
36 FILE *devf;
37
38 devf = fopen("devlist.h", "w");
39 if (!devf) {
40 fprintf(stderr, "Cannot create output file!\n");
41 return 1;
42 }
43
44 while (fgets(line, sizeof(line)-1, stdin)) {
45 lino++;
46 if ((c = strchr(line, '\n')))
47 *c = 0;
48 if (!line[0] || line[0] == '#')
49 continue;
50 if (line[0] == '\t') {
51 switch (mode) {
52 case 1:
53 if (strlen(line) > 5 && line[5] == ' ') {
54 c = line + 5;
55 while (*c == ' ')
56 *c++ = 0;
57 if (manuf_len + strlen(c) + 1 > MAX_NAME_SIZE) {
58 /* Too long, try cutting off long description */
59 bra = strchr(c, '[');
60 if (bra && bra > c && bra[-1] == ' ')
61 bra[-1] = 0;
62 if (manuf_len + strlen(c) + 1 > MAX_NAME_SIZE) {
63 fprintf(stderr, "Line %d: Product name too long\n", lino);
64 return 1;
65 }
66 }
67 fprintf(devf, "\tPRODUCT(%s,%s,\"", manuf, line+1);
68 pq(devf, c);
69 fputs("\")\n", devf);
70 } else goto err;
71 break;
72 default:
73 goto err;
74 }
75 } else if (strlen(line) > 4 && line[4] == ' ') {
76 c = line + 4;
77 while (*c == ' ')
78 *c++ = 0;
79 if (manufs)
80 fputs("ENDMANUF()\n\n", devf);
81 manufs++;
82 strcpy(manuf, line);
83 manuf_len = strlen(c);
84 if (manuf_len + 24 > MAX_NAME_SIZE) {
85 fprintf(stderr, "Line %d: manufacturer name too long\n", lino);
86 return 1;
87 }
88 fprintf(devf, "MANUF(%s,\"", manuf);
89 pq(devf, c);
90 fputs("\")\n", devf);
91 mode = 1;
92 } else {
93 err:
94 fprintf(stderr, "Line %d: Syntax error in mode %d: %s\n", lino, mode, line);
95 return 1;
96 }
97 }
98 fputs("ENDMANUF()\n\
99\n\
100#undef MANUF\n\
101#undef PRODUCT\n\
102#undef ENDMANUF\n", devf);
103
104 fclose(devf);
105
106 return 0;
107}
diff --git a/drivers/zorro/names.c b/drivers/zorro/names.c
new file mode 100644
index 000000000000..0dd532d3a5d6
--- /dev/null
+++ b/drivers/zorro/names.c
@@ -0,0 +1,109 @@
1/*
2 * Zorro Device Name Tables
3 *
4 * Copyright (C) 1999--2000 Geert Uytterhoeven
5 *
6 * Based on the PCI version:
7 *
8 * Copyright 1992--1999 Drew Eckhardt, Frederic Potter,
9 * David Mosberger-Tang, Martin Mares
10 */
11
12#include <linux/config.h>
13#include <linux/init.h>
14#include <linux/kernel.h>
15#include <linux/types.h>
16#include <linux/zorro.h>
17
18
19#ifdef CONFIG_ZORRO_NAMES
20
21struct zorro_prod_info {
22 __u16 prod;
23 unsigned short seen;
24 const char *name;
25};
26
27struct zorro_manuf_info {
28 __u16 manuf;
29 unsigned short nr;
30 const char *name;
31 struct zorro_prod_info *prods;
32};
33
34/*
35 * This is ridiculous, but we want the strings in
36 * the .init section so that they don't take up
37 * real memory.. Parse the same file multiple times
38 * to get all the info.
39 */
40#define MANUF( manuf, name ) static char __manufstr_##manuf[] __initdata = name;
41#define ENDMANUF()
42#define PRODUCT( manuf, prod, name ) static char __prodstr_##manuf##prod[] __initdata = name;
43#include "devlist.h"
44
45
46#define MANUF( manuf, name ) static struct zorro_prod_info __prods_##manuf[] __initdata = {
47#define ENDMANUF() };
48#define PRODUCT( manuf, prod, name ) { 0x##prod, 0, __prodstr_##manuf##prod },
49#include "devlist.h"
50
51static struct zorro_manuf_info __initdata zorro_manuf_list[] = {
52#define MANUF( manuf, name ) { 0x##manuf, sizeof(__prods_##manuf) / sizeof(struct zorro_prod_info), __manufstr_##manuf, __prods_##manuf },
53#define ENDMANUF()
54#define PRODUCT( manuf, prod, name )
55#include "devlist.h"
56};
57
58#define MANUFS (sizeof(zorro_manuf_list)/sizeof(struct zorro_manuf_info))
59
60void __init zorro_name_device(struct zorro_dev *dev)
61{
62 const struct zorro_manuf_info *manuf_p = zorro_manuf_list;
63 int i = MANUFS;
64 char *name = dev->name;
65
66 do {
67 if (manuf_p->manuf == ZORRO_MANUF(dev->id))
68 goto match_manuf;
69 manuf_p++;
70 } while (--i);
71
72 /* Couldn't find either the manufacturer nor the product */
73 sprintf(name, "Zorro device %08x", dev->id);
74 return;
75
76 match_manuf: {
77 struct zorro_prod_info *prod_p = manuf_p->prods;
78 int i = manuf_p->nr;
79
80 while (i > 0) {
81 if (prod_p->prod ==
82 ((ZORRO_PROD(dev->id)<<8) | ZORRO_EPC(dev->id)))
83 goto match_prod;
84 prod_p++;
85 i--;
86 }
87
88 /* Ok, found the manufacturer, but unknown product */
89 sprintf(name, "Zorro device %08x (%s)", dev->id, manuf_p->name);
90 return;
91
92 /* Full match */
93 match_prod: {
94 char *n = name + sprintf(name, "%s %s", manuf_p->name, prod_p->name);
95 int nr = prod_p->seen + 1;
96 prod_p->seen = nr;
97 if (nr > 1)
98 sprintf(n, " (#%d)", nr);
99 }
100 }
101}
102
103#else
104
105void __init zorro_name_device(struct zorro_dev *dev)
106{
107}
108
109#endif
diff --git a/drivers/zorro/proc.c b/drivers/zorro/proc.c
new file mode 100644
index 000000000000..1a409c2c320c
--- /dev/null
+++ b/drivers/zorro/proc.c
@@ -0,0 +1,139 @@
1/*
2 * $Id: proc.c,v 1.1.2.1 1998/06/07 23:21:01 geert Exp $
3 *
4 * Procfs interface for the Zorro bus.
5 *
6 * Copyright (C) 1998-2003 Geert Uytterhoeven
7 *
8 * Heavily based on the procfs interface for the PCI bus, which is
9 *
10 * Copyright (C) 1997, 1998 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
11 */
12
13#include <linux/types.h>
14#include <linux/zorro.h>
15#include <linux/proc_fs.h>
16#include <linux/init.h>
17#include <linux/smp_lock.h>
18#include <asm/uaccess.h>
19#include <asm/amigahw.h>
20#include <asm/setup.h>
21
22static loff_t
23proc_bus_zorro_lseek(struct file *file, loff_t off, int whence)
24{
25 loff_t new = -1;
26
27 lock_kernel();
28 switch (whence) {
29 case 0:
30 new = off;
31 break;
32 case 1:
33 new = file->f_pos + off;
34 break;
35 case 2:
36 new = sizeof(struct ConfigDev) + off;
37 break;
38 }
39 if (new < 0 || new > sizeof(struct ConfigDev)) {
40 unlock_kernel();
41 return -EINVAL;
42 }
43 unlock_kernel();
44 return (file->f_pos = new);
45}
46
47static ssize_t
48proc_bus_zorro_read(struct file *file, char *buf, size_t nbytes, loff_t *ppos)
49{
50 struct inode *ino = file->f_dentry->d_inode;
51 struct proc_dir_entry *dp = PDE(ino);
52 struct zorro_dev *z = dp->data;
53 struct ConfigDev cd;
54 loff_t pos = *ppos;
55
56 if (pos >= sizeof(struct ConfigDev))
57 return 0;
58 if (nbytes >= sizeof(struct ConfigDev))
59 nbytes = sizeof(struct ConfigDev);
60 if (pos + nbytes > sizeof(struct ConfigDev))
61 nbytes = sizeof(struct ConfigDev) - pos;
62
63 /* Construct a ConfigDev */
64 memset(&cd, 0, sizeof(cd));
65 cd.cd_Rom = z->rom;
66 cd.cd_SlotAddr = z->slotaddr;
67 cd.cd_SlotSize = z->slotsize;
68 cd.cd_BoardAddr = (void *)zorro_resource_start(z);
69 cd.cd_BoardSize = zorro_resource_len(z);
70
71 if (copy_to_user(buf, &cd, nbytes))
72 return -EFAULT;
73 *ppos += nbytes;
74
75 return nbytes;
76}
77
78static struct file_operations proc_bus_zorro_operations = {
79 .llseek = proc_bus_zorro_lseek,
80 .read = proc_bus_zorro_read,
81};
82
83static int
84get_zorro_dev_info(char *buf, char **start, off_t pos, int count)
85{
86 u_int slot;
87 off_t at = 0;
88 int len, cnt;
89
90 for (slot = cnt = 0; slot < zorro_num_autocon && count > cnt; slot++) {
91 struct zorro_dev *z = &zorro_autocon[slot];
92 len = sprintf(buf, "%02x\t%08x\t%08lx\t%08lx\t%02x\n", slot,
93 z->id, zorro_resource_start(z),
94 zorro_resource_len(z), z->rom.er_Type);
95 at += len;
96 if (at >= pos) {
97 if (!*start) {
98 *start = buf + (pos - (at - len));
99 cnt = at - pos;
100 } else
101 cnt += len;
102 buf += len;
103 }
104 }
105 return (count > cnt) ? cnt : count;
106}
107
108static struct proc_dir_entry *proc_bus_zorro_dir;
109
110static int __init zorro_proc_attach_device(u_int slot)
111{
112 struct proc_dir_entry *entry;
113 char name[4];
114
115 sprintf(name, "%02x", slot);
116 entry = create_proc_entry(name, 0, proc_bus_zorro_dir);
117 if (!entry)
118 return -ENOMEM;
119 entry->proc_fops = &proc_bus_zorro_operations;
120 entry->data = &zorro_autocon[slot];
121 entry->size = sizeof(struct zorro_dev);
122 return 0;
123}
124
125static int __init zorro_proc_init(void)
126{
127 u_int slot;
128
129 if (MACH_IS_AMIGA && AMIGAHW_PRESENT(ZORRO)) {
130 proc_bus_zorro_dir = proc_mkdir("zorro", proc_bus);
131 create_proc_info_entry("devices", 0, proc_bus_zorro_dir,
132 get_zorro_dev_info);
133 for (slot = 0; slot < zorro_num_autocon; slot++)
134 zorro_proc_attach_device(slot);
135 }
136 return 0;
137}
138
139__initcall(zorro_proc_init);
diff --git a/drivers/zorro/zorro-driver.c b/drivers/zorro/zorro-driver.c
new file mode 100644
index 000000000000..ccba227676f2
--- /dev/null
+++ b/drivers/zorro/zorro-driver.c
@@ -0,0 +1,150 @@
1/*
2 * Zorro Driver Services
3 *
4 * Copyright (C) 2003 Geert Uytterhoeven
5 *
6 * Loosely based on drivers/pci/pci-driver.c
7 *
8 * This file is subject to the terms and conditions of the GNU General Public
9 * License. See the file COPYING in the main directory of this archive
10 * for more details.
11 */
12
13#include <linux/init.h>
14#include <linux/module.h>
15#include <linux/zorro.h>
16
17
18 /**
19 * zorro_match_device - Tell if a Zorro device structure has a matching
20 * Zorro device id structure
21 * @ids: array of Zorro device id structures to search in
22 * @dev: the Zorro device structure to match against
23 *
24 * Used by a driver to check whether a Zorro device present in the
25 * system is in its list of supported devices. Returns the matching
26 * zorro_device_id structure or %NULL if there is no match.
27 */
28
29const struct zorro_device_id *
30zorro_match_device(const struct zorro_device_id *ids,
31 const struct zorro_dev *z)
32{
33 while (ids->id) {
34 if (ids->id == ZORRO_WILDCARD || ids->id == z->id)
35 return ids;
36 ids++;
37 }
38 return NULL;
39}
40
41
42static int zorro_device_probe(struct device *dev)
43{
44 int error = 0;
45 struct zorro_driver *drv = to_zorro_driver(dev->driver);
46 struct zorro_dev *z = to_zorro_dev(dev);
47
48 if (!z->driver && drv->probe) {
49 const struct zorro_device_id *id;
50
51 id = zorro_match_device(drv->id_table, z);
52 if (id)
53 error = drv->probe(z, id);
54 if (error >= 0) {
55 z->driver = drv;
56 error = 0;
57 }
58 }
59 return error;
60}
61
62
63 /**
64 * zorro_register_driver - register a new Zorro driver
65 * @drv: the driver structure to register
66 *
67 * Adds the driver structure to the list of registered drivers
68 * Returns the number of Zorro devices which were claimed by the driver
69 * during registration. The driver remains registered even if the
70 * return value is zero.
71 */
72
73int zorro_register_driver(struct zorro_driver *drv)
74{
75 int count = 0;
76
77 /* initialize common driver fields */
78 drv->driver.name = drv->name;
79 drv->driver.bus = &zorro_bus_type;
80 drv->driver.probe = zorro_device_probe;
81
82 /* register with core */
83 count = driver_register(&drv->driver);
84 return count ? count : 1;
85}
86
87
88 /**
89 * zorro_unregister_driver - unregister a zorro driver
90 * @drv: the driver structure to unregister
91 *
92 * Deletes the driver structure from the list of registered Zorro drivers,
93 * gives it a chance to clean up by calling its remove() function for
94 * each device it was responsible for, and marks those devices as
95 * driverless.
96 */
97
98void zorro_unregister_driver(struct zorro_driver *drv)
99{
100 driver_unregister(&drv->driver);
101}
102
103
104 /**
105 * zorro_bus_match - Tell if a Zorro device structure has a matching Zorro
106 * device id structure
107 * @ids: array of Zorro device id structures to search in
108 * @dev: the Zorro device structure to match against
109 *
110 * Used by a driver to check whether a Zorro device present in the
111 * system is in its list of supported devices.Returns the matching
112 * zorro_device_id structure or %NULL if there is no match.
113 */
114
115static int zorro_bus_match(struct device *dev, struct device_driver *drv)
116{
117 struct zorro_dev *z = to_zorro_dev(dev);
118 struct zorro_driver *zorro_drv = to_zorro_driver(drv);
119 const struct zorro_device_id *ids = zorro_drv->id_table;
120
121 if (!ids)
122 return 0;
123
124 while (ids->id) {
125 if (ids->id == ZORRO_WILDCARD || ids->id == z->id)
126 return 1;
127 ids++;
128 }
129 return 0;
130}
131
132
133struct bus_type zorro_bus_type = {
134 .name = "zorro",
135 .match = zorro_bus_match
136};
137
138
139static int __init zorro_driver_init(void)
140{
141 return bus_register(&zorro_bus_type);
142}
143
144postcore_initcall(zorro_driver_init);
145
146EXPORT_SYMBOL(zorro_match_device);
147EXPORT_SYMBOL(zorro_register_driver);
148EXPORT_SYMBOL(zorro_unregister_driver);
149EXPORT_SYMBOL(zorro_dev_driver);
150EXPORT_SYMBOL(zorro_bus_type);
diff --git a/drivers/zorro/zorro-sysfs.c b/drivers/zorro/zorro-sysfs.c
new file mode 100644
index 000000000000..dad03fc33a44
--- /dev/null
+++ b/drivers/zorro/zorro-sysfs.c
@@ -0,0 +1,98 @@
1/*
2 * File Attributes for Zorro Devices
3 *
4 * Copyright (C) 2003 Geert Uytterhoeven
5 *
6 * Loosely based on drivers/pci/pci-sysfs.c
7 *
8 * This file is subject to the terms and conditions of the GNU General Public
9 * License. See the file COPYING in the main directory of this archive
10 * for more details.
11 */
12
13
14#include <linux/kernel.h>
15#include <linux/zorro.h>
16#include <linux/stat.h>
17
18#include "zorro.h"
19
20
21/* show configuration fields */
22#define zorro_config_attr(name, field, format_string) \
23static ssize_t \
24show_##name(struct device *dev, char *buf) \
25{ \
26 struct zorro_dev *z; \
27 \
28 z = to_zorro_dev(dev); \
29 return sprintf(buf, format_string, z->field); \
30} \
31static DEVICE_ATTR(name, S_IRUGO, show_##name, NULL);
32
33zorro_config_attr(id, id, "0x%08x\n");
34zorro_config_attr(type, rom.er_Type, "0x%02x\n");
35zorro_config_attr(serial, rom.er_SerialNumber, "0x%08x\n");
36zorro_config_attr(slotaddr, slotaddr, "0x%04x\n");
37zorro_config_attr(slotsize, slotsize, "0x%04x\n");
38
39static ssize_t zorro_show_resource(struct device *dev, char *buf)
40{
41 struct zorro_dev *z = to_zorro_dev(dev);
42
43 return sprintf(buf, "0x%08lx 0x%08lx 0x%08lx\n",
44 zorro_resource_start(z), zorro_resource_end(z),
45 zorro_resource_flags(z));
46}
47
48static DEVICE_ATTR(resource, S_IRUGO, zorro_show_resource, NULL);
49
50static ssize_t zorro_read_config(struct kobject *kobj, char *buf, loff_t off,
51 size_t count)
52{
53 struct zorro_dev *z = to_zorro_dev(container_of(kobj, struct device,
54 kobj));
55 struct ConfigDev cd;
56 unsigned int size = sizeof(cd);
57
58 if (off > size)
59 return 0;
60 if (off+count > size)
61 count = size-off;
62
63 /* Construct a ConfigDev */
64 memset(&cd, 0, sizeof(cd));
65 cd.cd_Rom = z->rom;
66 cd.cd_SlotAddr = z->slotaddr;
67 cd.cd_SlotSize = z->slotsize;
68 cd.cd_BoardAddr = (void *)zorro_resource_start(z);
69 cd.cd_BoardSize = zorro_resource_len(z);
70
71 memcpy(buf, (void *)&cd+off, count);
72 return count;
73}
74
75static struct bin_attribute zorro_config_attr = {
76 .attr = {
77 .name = "config",
78 .mode = S_IRUGO | S_IWUSR,
79 .owner = THIS_MODULE
80 },
81 .size = sizeof(struct ConfigDev),
82 .read = zorro_read_config,
83};
84
85void zorro_create_sysfs_dev_files(struct zorro_dev *z)
86{
87 struct device *dev = &z->dev;
88
89 /* current configuration's attributes */
90 device_create_file(dev, &dev_attr_id);
91 device_create_file(dev, &dev_attr_type);
92 device_create_file(dev, &dev_attr_serial);
93 device_create_file(dev, &dev_attr_slotaddr);
94 device_create_file(dev, &dev_attr_slotsize);
95 device_create_file(dev, &dev_attr_resource);
96 sysfs_create_bin_file(&dev->kobj, &zorro_config_attr);
97}
98
diff --git a/drivers/zorro/zorro.c b/drivers/zorro/zorro.c
new file mode 100644
index 000000000000..d3c05dfe20d2
--- /dev/null
+++ b/drivers/zorro/zorro.c
@@ -0,0 +1,193 @@
1/*
2 * $Id: zorro.c,v 1.1.2.1 1998/06/07 23:21:02 geert Exp $
3 *
4 * Zorro Bus Services
5 *
6 * Copyright (C) 1995-2003 Geert Uytterhoeven
7 *
8 * This file is subject to the terms and conditions of the GNU General Public
9 * License. See the file COPYING in the main directory of this archive
10 * for more details.
11 */
12
13#include <linux/module.h>
14#include <linux/types.h>
15#include <linux/kernel.h>
16#include <linux/init.h>
17#include <linux/zorro.h>
18#include <linux/bitops.h>
19#include <asm/setup.h>
20#include <asm/amigahw.h>
21
22#include "zorro.h"
23
24
25 /*
26 * Zorro Expansion Devices
27 */
28
29u_int zorro_num_autocon = 0;
30struct zorro_dev zorro_autocon[ZORRO_NUM_AUTO];
31
32
33 /*
34 * Single Zorro bus
35 */
36
37struct zorro_bus zorro_bus = {\
38 .resources = {
39 /* Zorro II regions (on Zorro II/III) */
40 { .name = "Zorro II exp", .start = 0x00e80000, .end = 0x00efffff },
41 { .name = "Zorro II mem", .start = 0x00200000, .end = 0x009fffff },
42 /* Zorro III regions (on Zorro III only) */
43 { .name = "Zorro III exp", .start = 0xff000000, .end = 0xffffffff },
44 { .name = "Zorro III cfg", .start = 0x40000000, .end = 0x7fffffff }
45 },
46 .name = "Zorro bus"
47};
48
49
50 /*
51 * Find Zorro Devices
52 */
53
54struct zorro_dev *zorro_find_device(zorro_id id, struct zorro_dev *from)
55{
56 struct zorro_dev *z;
57
58 if (!MACH_IS_AMIGA || !AMIGAHW_PRESENT(ZORRO))
59 return NULL;
60
61 for (z = from ? from+1 : &zorro_autocon[0];
62 z < zorro_autocon+zorro_num_autocon;
63 z++)
64 if (id == ZORRO_WILDCARD || id == z->id)
65 return z;
66 return NULL;
67}
68
69
70 /*
71 * Bitmask indicating portions of available Zorro II RAM that are unused
72 * by the system. Every bit represents a 64K chunk, for a maximum of 8MB
73 * (128 chunks, physical 0x00200000-0x009fffff).
74 *
75 * If you want to use (= allocate) portions of this RAM, you should clear
76 * the corresponding bits.
77 *
78 * Possible uses:
79 * - z2ram device
80 * - SCSI DMA bounce buffers
81 *
82 * FIXME: use the normal resource management
83 */
84
85DECLARE_BITMAP(zorro_unused_z2ram, 128);
86
87
88static void __init mark_region(unsigned long start, unsigned long end,
89 int flag)
90{
91 if (flag)
92 start += Z2RAM_CHUNKMASK;
93 else
94 end += Z2RAM_CHUNKMASK;
95 start &= ~Z2RAM_CHUNKMASK;
96 end &= ~Z2RAM_CHUNKMASK;
97
98 if (end <= Z2RAM_START || start >= Z2RAM_END)
99 return;
100 start = start < Z2RAM_START ? 0x00000000 : start-Z2RAM_START;
101 end = end > Z2RAM_END ? Z2RAM_SIZE : end-Z2RAM_START;
102 while (start < end) {
103 u32 chunk = start>>Z2RAM_CHUNKSHIFT;
104 if (flag)
105 set_bit(chunk, zorro_unused_z2ram);
106 else
107 clear_bit(chunk, zorro_unused_z2ram);
108 start += Z2RAM_CHUNKSIZE;
109 }
110}
111
112
113static struct resource __init *zorro_find_parent_resource(struct zorro_dev *z)
114{
115 int i;
116
117 for (i = 0; i < zorro_bus.num_resources; i++)
118 if (zorro_resource_start(z) >= zorro_bus.resources[i].start &&
119 zorro_resource_end(z) <= zorro_bus.resources[i].end)
120 return &zorro_bus.resources[i];
121 return &iomem_resource;
122}
123
124
125 /*
126 * Initialization
127 */
128
129static int __init zorro_init(void)
130{
131 struct zorro_dev *z;
132 unsigned int i;
133
134 if (!MACH_IS_AMIGA || !AMIGAHW_PRESENT(ZORRO))
135 return 0;
136
137 pr_info("Zorro: Probing AutoConfig expansion devices: %d device%s\n",
138 zorro_num_autocon, zorro_num_autocon == 1 ? "" : "s");
139
140 /* Initialize the Zorro bus */
141 INIT_LIST_HEAD(&zorro_bus.devices);
142 strcpy(zorro_bus.dev.bus_id, "zorro");
143 device_register(&zorro_bus.dev);
144
145 /* Request the resources */
146 zorro_bus.num_resources = AMIGAHW_PRESENT(ZORRO3) ? 4 : 2;
147 for (i = 0; i < zorro_bus.num_resources; i++)
148 request_resource(&iomem_resource, &zorro_bus.resources[i]);
149
150 /* Register all devices */
151 for (i = 0; i < zorro_num_autocon; i++) {
152 z = &zorro_autocon[i];
153 z->id = (z->rom.er_Manufacturer<<16) | (z->rom.er_Product<<8);
154 if (z->id == ZORRO_PROD_GVP_EPC_BASE) {
155 /* GVP quirk */
156 unsigned long magic = zorro_resource_start(z)+0x8000;
157 z->id |= *(u16 *)ZTWO_VADDR(magic) & GVP_PRODMASK;
158 }
159 sprintf(z->name, "Zorro device %08x", z->id);
160 zorro_name_device(z);
161 z->resource.name = z->name;
162 if (request_resource(zorro_find_parent_resource(z), &z->resource))
163 printk(KERN_ERR "Zorro: Address space collision on device %s "
164 "[%lx:%lx]\n",
165 z->name, zorro_resource_start(z), zorro_resource_end(z));
166 sprintf(z->dev.bus_id, "%02x", i);
167 z->dev.parent = &zorro_bus.dev;
168 z->dev.bus = &zorro_bus_type;
169 device_register(&z->dev);
170 zorro_create_sysfs_dev_files(z);
171 }
172
173 /* Mark all available Zorro II memory */
174 zorro_for_each_dev(z) {
175 if (z->rom.er_Type & ERTF_MEMLIST)
176 mark_region(zorro_resource_start(z), zorro_resource_end(z)+1, 1);
177 }
178
179 /* Unmark all used Zorro II memory */
180 for (i = 0; i < m68k_num_memory; i++)
181 if (m68k_memory[i].addr < 16*1024*1024)
182 mark_region(m68k_memory[i].addr,
183 m68k_memory[i].addr+m68k_memory[i].size, 0);
184
185 return 0;
186}
187
188subsys_initcall(zorro_init);
189
190EXPORT_SYMBOL(zorro_find_device);
191EXPORT_SYMBOL(zorro_unused_z2ram);
192
193MODULE_LICENSE("GPL");
diff --git a/drivers/zorro/zorro.h b/drivers/zorro/zorro.h
new file mode 100644
index 000000000000..5c91adac4df1
--- /dev/null
+++ b/drivers/zorro/zorro.h
@@ -0,0 +1,4 @@
1
2extern void zorro_name_device(struct zorro_dev *z);
3extern void zorro_create_sysfs_dev_files(struct zorro_dev *z);
4
diff --git a/drivers/zorro/zorro.ids b/drivers/zorro/zorro.ids
new file mode 100644
index 000000000000..5bd4b05d4c45
--- /dev/null
+++ b/drivers/zorro/zorro.ids
@@ -0,0 +1,476 @@
1#
2# List of Zorro IDs
3#
4# Maintained by Geert Uytterhoeven <zorro@linux-m68k.org>
5# If you have any new entries, please send them to the maintainer.
6#
7# $Id: zorro.ids,v 1.19 2002/10/14 13:08:58 geert Exp $
8#
9
10# Manufacturers and Products. Please keep sorted.
11
12# Syntax:
13# manufacturer manufacturer_name
14# product product_name <-- single tab
15
1600d3 Pacific Peripherals
17 0000 SE 2000 A500 [HD Controller]
18 0a00 [SCSI Host Adapter]
1900dd Kupke
20 0000 Golem RAM Box 2MB [RAM Expansion]
210100 MacroSystems USA
22# The Stormbringer is actually made by Memphis
23 0000 Stormbringer [Accelerator]
24 1300 Warp Engine [Accelerator, SCSI Host Adapter and RAM Expansion]
250200 3-State
26 0200 Megamix 2000 [RAM Expansion]
270201 Commodore Braunschweig
28 0100 A2088 XT/A2286 AT [ISA Bus Bridge]
29 0200 A2286 AT [ISA Bus Bridge]
30 5400 A4091 [SCSI Host Adapter]
31 6700 A2386-SX [ISA Bus Bridge]
320202 Commodore West Chester
33 0100 A2090/A2090A [SCSI Host Adapter]
34 0200 A590/A2091 [SCSI Host Adapter]
35 0300 A590/A2091 [SCSI Host Adapter]
36 0400 A2090B 2090 Autoboot [SCSI Host Adapter]
37 0900 A2060 [ArcNet Card]
38 0a00 A590/A2052/A2058/A2091 [RAM Expansion]
39 2000 A560 [RAM Expansion]
40 4500 A2232 Prototype [Multi I/O]
41 4600 A2232 [Multi I/O]
42 5000 A2620 68020 [Accelerator and RAM Expansion]
43 5100 A2630 68030 [Accelerator and RAM Expansion]
44 5400 A4091 [SCSI Host Adapter]
45 5a00 A2065 [Ethernet Card]
46 6000 Romulator Card
47 6100 A3000 Test Fixture [Miscellaneous Expansion Card]
48 6700 A2386-SX [ISA Bus Bridge]
49 7000 A2065 [Ethernet Card]
500203 Commodore West Chester
51 0300 A2090/A2090A Combitec/MacroSystem [SCSI Host Adapter]
5202f4 Progressive Peripherals & Systems
53 0200 EXP8000 [RAM Expansion]
54 6900 A2000 68040 [Accelerator]
55 9600 68040 [Accelerator]
5602ff Kolff Computer Supplies
57 0000 KCS Power PC [ISA Bus Bridge]
5803ec Cardco Ltd.
59 0400 Kronos 2000 [SCSI Host Adapter]
60 0c00 A1000 [SCSI Host Adapter]
61 0e00 Escort [SCSI Host Adapter]
62 f500 A2410 HiRes [Graphics Card]
6303ed A-Squared
64 0100 Live! 2000 [Video Card]
6503ee Comspec Communications
66 0100 AX2000 [RAM Expansion]
6703f1 Anakin Research
68 0100 Easyl Drawing Tablet Interface
6903f2 Microbotics
70 0000 StarBoard II [RAM Expansion]
71 0200 StarDrive [SCSI Host Adapter]
72 0300 8-Up (Rev A) [RAM Expansion]
73 0400 8-Up (Rev Z) [RAM Expansion]
74 2000 Delta [RAM Expansion]
75 4000 8-Star [RAM Expansion]
76 4100 8-Star [Miscellaneous Expansion Card]
77 4400 VXL RAM*32 [RAM Expansion]
78 4500 VXL-30 [Accelerator]
79 6000 Delta [Miscellaneous Expansion Card]
80 8100 MBX 1200/1200z [RAM Expansion]
81 9600 Hardframe 2000 [SCSI Host Adapter]
82 9e00 Hardframe 2000 [SCSI Host Adapter]
83 c100 MBX 1200/1200z [Miscellaneous Expansion Card]
8403f4 Access Associates Alegra
8503f6 Expansion Technologies/Pacific Cypress
8603ff ASDG
87 0100 [RAM Expansion]
88 0200 [RAM Expansion]
89 fe00 EB-920 Lan Rover [Ethernet Card]
90 ff00 GPIB/Dual IEEE-488/Twin-X [Multi I/O]
910404 Ronin/Imtronics
92 3900 Hurricane 2800 [Accelerator and RAM Expansion]
93 5700 Hurricane 2800 [Accelerator and RAM Expansion]
940406 Commodore/University of Lowell
95 0000 A2410 HiRes [Graphics Card]
96041d Ameristar
97 0100 A2065 [Ethernet Card]
98 0900 A560 [ArcNet Card]
99 0a00 A4066 [Ethernet Card]
100 2000 1600-GX [Graphics Card]
1010420 Supra
102 0100 SupraDrive 4x4 [SCSI Host Adapter]
103 0200 1000 [RAM Expansion]
104 0300 2000 DMA [SCSI Host Adapter]
105 0500 500 [SCSI Host Adapter and RAM Expansion]
106 0800 500 [SCSI Host Adapter]
107 0900 500XP/2000 [RAM Expansion]
108 0a00 500RX/2000 [RAM Expansion]
109 0b00 2400zi [Modem]
110 0c00 500XP/SupraDrive WordSync [SCSI Host Adapter]
111 0d00 SupraDrive WordSync II [SCSI Host Adapter]
112 1000 2400zi+ [Modem]
1130422 Computer Systems Assosiates
114 1100 Magnum 40 [Accelerator and SCSI Host Adapter]
115 1500 12 Gauge [SCSI Host Adapter]
1160439 Marc Michael Groth
1170502 M-Tech
118 0300 AT500 [RAM Expansion]
11906e1 Great Valley Products
120 0800 Impact Series I [SCSI Host Adapter and RAM Expansion]
121 2000 Impact Vision 24 [Graphics Card]
12207da ByteBox
123 0000 A500
12407db Hacker Test Board
12507dc DKB/Power Computing
126 0900 SecureKey
127 0e00 DKM 3128 [RAM Expansion]
128 0f00 Rapid Fire [SCSI Host Adapter]
129 1000 DKM 1202 [FPU and RAM Expansion]
130 1200 Cobra/Viper II 68EC030 [Accelerator]
131 1700 WildFire 060 [Accelerator]
132 ff00 WildFire 060 [Accelerator]
13307e1 Great Valley Products
134 0100 Impact Series I (4K) [SCSI Host Adapter]
135 0200 Impact Series I (16K/2) [SCSI Host Adapter]
136 0300 Impact Series I (16K/2) [SCSI Host Adapter]
137 0800 Impact 3001 [IDE Interface]
138 0900 Impact 3001 [RAM Expansion]
139 0a00 Impact Series II [RAM Expansion]
140 0b20 GForce 040 [Accelerator]
141 0b30 GForce 040 [Accelerator and SCSI Host Adapter]
142 0b40 A1291 [SCSI Host Adapter]
143 0b60 Combo 030 R4 [Accelerator]
144 0b70 Combo 030 R4 [Accelerator and SCSI Host Adapter]
145 0b78 Phone Pak
146 0b98 IO-Extender [Multi I/O]
147 0ba0 GForce 030 [Accelerator]
148 0bb0 GForce 030 [Accelerator and SCSI Host Adapter]
149 0bc0 A530 [Accelerator]
150 0bd0 A530 [Accelerator and SCSI Host Adapter]
151 0be0 Combo 030 R3 [Accelerator]
152 0bf0 Combo 030 R3 [Accelerator and SCSI Host Adapter]
153 0bf8 Series-II [SCSI Host Adapter]
154 0d00 Impact 3001 [IDE Interface]
155 1600 GForce 040/060 [Accelerator and SCSI Host Adapter]
156 2000 Impact Vision 24 [Graphics Card]
157 4400 Rembrandt [Graphics Card]
158 ff00 GForce 040 [Accelerator]
15907e5 California Access/Synergy
160 0100 Malibu [SCSI Host Adapter]
16107e6 Xetec
162 0100 FastCard [SCSI Host Adapter]
163 0200 FastCard [RAM Expansion]
164 0300 FastCard Plus [SCSI Host Adapter]
16507ea Progressive Peripherals & Systems
166 0000 Mercury [Accelerator]
167 0100 A3000 68040 [Accelerator]
168 6900 A2000 68040 [Accelerator]
169 9600 Zeus [Accelerator, SCSI Host Adapter and RAM Expansion]
170 bb00 A500 68040 [Accelerator]
171# The AteoBus and Pixel64 are actually made by Ateo Concepts
172 fc00 AteoBus [Expansion Bus Bridge]
173 fe00 Pixel64 [Graphics Card]
174 ff00 Pixel64 RAM [Graphics Card]
17507ec Xebec
17607f2 Spirit Technology
177 0100 Insider IN1000 [RAM Expansion]
178 0200 Insider IN500 [RAM Expansion]
179 0300 SIN500 [RAM Expansion]
180 0400 HDA 506 [HD Controller]
181 0500 AX-S [Miscellaneous Expansion Card]
182 0600 OctaByte [RAM Expansion]
183 0800 Inmate [SCSI Host Adapter and RAM Expansion]
18407f3 Spirit Technology
18507fe BSC/Alfadata
186 0300 ALF 3 [SCSI Host Adapter]
1870801 BSC/Alfadata
188 0100 ALF 2 [SCSI Host Adapter]
189 0200 ALF 2 [SCSI Host Adapter]
190 0300 ALF 3 [SCSI Host Adapter]
191 0400 Oktagon 500 [SCSI Host Adapter]
192 0600 Tandem AT-2008/508 [IDE Interface]
193 0800 Oktagon 2008 [RAM Expansion]
194 1000 MultiFace I [Multi I/O]
195 2000 FrameMaster II [Graphics Card]
196 4000 ISDN MasterCard [ISDN Interface]
1970802 Cardco Ltd.
198 0400 Kronos 2000 [SCSI Host Adapter]
199 0c00 A1000 [SCSI Host Adapter]
2000804 Jochheim
201 0100 [RAM Expansion]
202 2000 [RAM Expansion]
2030807 Checkpoint Technologies
204 0000 Serial Solution [Multi Serial]
2050810 Edotronik
206 0100 IEEE-488 Interface Card
207 0200 CBM-8032 Card
208 0300 [Multi Serial]
209 0400 24Bit Realtime Video Digitizer
210 0500 32Bit Parallel I/O Interface
211 0600 PIC Prototyping Card
212 0700 16 Channel ADC Interface
213 0800 VME-Bus Controller
214 0900 DSP96000 Realtime Data Acquisition DSP Card
2150813 NES Inc.
216 0000 [RAM Expansion]
2170817 ICD
218 0100 Advantage 2000 [SCSI Host Adapter]
219 0300 Advantage [IDE Interface]
220 0400 Advantage 2080 [RAM Expansion]
2210819 Kupke
222 0100 Omti [HD Controller]
223 0200 Golem SCSI-II [SCSI Host Adapter]
224 0300 Golem Box
225 0400 030/882 [Accelerator]
226 0500 Golem [SCSI Host Adapter]
227081d Great Valley Products
228 0900 A2000-RAM8/2 [Miscellaneous Expansion Card]
229 0a00 Impact Series II [RAM Expansion]
230081e Interworks Network
2310820 Hardital Synthesis
232 0100 Super Big Bang [Accelerator, SCSI Host Adapter and RAM Expansion]
233 1400 TQM 68030+68882 [Accelerator]
2340828 Applied Engineering
235 1000 DL2000 [Modem]
236 e000 RAM Works [RAM Expansion]
237082c BSC/Alfadata
238 0400 Oktagon 500 [SCSI Host Adapter]
239 0500 Oktagon 2008 [SCSI Host Adapter]
240 0600 Tandem AT-2008/508 [IDE Interface]
241 0700 Alpha 1200 [RAM Expansion]
242 0800 Oktagon 2008 [RAM Expansion]
243 1000 MultiFace I [Multi I/O]
244 1100 MultiFace II [Multi I/O]
245 1200 MultiFace III [Multi I/O]
246 2000 FrameMaster II [Graphics Card]
247 2100 Graffiti RAM [Graphics Card]
248 2200 Graffiti [Graphics Card]
249 4000 ISDN MasterCard [ISDN Interface]
250 4100 ISDN MasterCard II [ISDN Interface]
2510835 Phoenix
252 2100 ST506 [HD Controller]
253 2200 [SCSI Host Adapter]
254 be00 [RAM Expansion]
2550836 Advanced Storage Systems
256 0100 Nexus [SCSI Host Adapter]
257 0800 Nexus [RAM Expansion]
2580838 Impulse
259 0000 FireCracker 24 (NTSC) [Graphics Card]
260 0100 FireCracker 24 (PAL) [Graphics Card]
2610840 IVS
262 0200 GrandSlam PIC 2 [RAM Expansion]
263 0400 GrandSlam PIC 1 [RAM Expansion]
264 1000 OverDrive [HD Controller]
265 3000 TrumpCard Classic [SCSI Host Adapter]
266 3400 TrumpCard Pro/GrandSlam [SCSI Host Adapter]
267 4000 Meta-4 [RAM Expansion]
268 bf00 Wavetools [Audio Card]
269 f300 Vector [SCSI Host Adapter]
270 f400 Vector [SCSI Host Adapter]
2710841 Vector
272 e300 Connection [Multi I/O]
2730845 XPert ProDev
274 0100 Visiona RAM [Graphics Card]
275 0200 Visiona [Graphics Card]
276 0300 Merlin RAM [Graphics Card]
277 0400 Merlin [Graphics Card]
278 c900 Merlin [Graphics Card]
2790849 Hydra Systems
280 0100 Amiganet [Ethernet Card]
281084f Sunrize Industries
282 0100 AD1012 [Audio Card]
283 0200 AD516 [Audio Card]
284 0300 DD512 [Audio Card]
2850850 Triceratops
286 0100 [Multi I/O]
2870851 Applied Magic Inc.
288 0100 DMI Resolver [Graphics Card]
289 0200 Vivid 24 [Graphics Card]
290 0600 Digital Broadcaster [Video Card]
291085e GFX-Base
292 0000 GDA-1 VRAM [Graphics Card]
293 0100 GDA-1 [Graphics Card]
2940860 RocTec
295 0100 RH 800C [HD Controller]
296 0200 RH 800C [RAM Expansion]
2970861 Kato
298# The Rainbow II and III are actually made by Ingenieurbüro Helfrich
299 2000 Rainbow II [Graphics Card]
300 2100 Rainbow III [Graphics Card]
301 8000 Melody MPEG [Audio Card]
3020862 Atlantis
3030864 Protar
3040865 ACS
3050866 Software Results Enterprises
306 0100 Golden Gate 2 Bus+ [ISA Bus Bridge]
307086a Unknown
308 0100 Horizon [Graphics Card]
309 0200 Blackbox [Graphics Card]
310 0300 Voyager [Graphics Card]
311086d Masoboshi
312 0300 MasterCard SC201 [RAM Expansion]
313 0400 MasterCard MC702 [SCSI Host Adapter and IDE Interface]
314 0700 MVD 819
315086f Mainhattan-Data/A-Team
316 0100 [IDE Interface]
3170877 Village Tronic
318 0100 Domino RAM [Graphics Card]
319 0200 Domino [Graphics Card]
320 0300 Domino 16M Prototype [Graphics Card]
321 0b00 Picasso II/II+ RAM [Graphics Card]
322 0c00 Picasso II/II+ [Graphics Card]
323 0d00 Picasso II/II+ (Segmented Mode) [Graphics Card]
324 1500 Picasso IV Z2 RAM [Graphics Card]
325 1600 Picasso IV Z2 RAM [Graphics Card]
326 1700 Picasso IV Z2 [Graphics Card]
327 1800 Picasso IV Z3 [Graphics Card]
328 c900 Ariadne [Ethernet Card and Parallel Ports]
329 ca00 Ariadne II [Ethernet Card]
330087b Utilities Unlimited
331 1500 Emplant Deluxe [Macintosh Emulator]
332 2000 Emplant Deluxe [Macintosh Emulator]
3330880 Amitrix
334 0100 [Multi I/O]
335 0200 CD-RAM [RAM Expansion]
3360885 ArMax
337 0000 OmniBus [Graphics Card]
338088d ZEUS Electronic Development
339 0300 [ISDN Interface]
340 0400 Spider [Video Card]
341088f NewTek
342 0000 VideoToaster [Video Card]
3430890 M-Tech Germany
344 0100 AT500 [IDE Interface]
345 0300 68030 [Accelerator]
346 0600 68020i [Accelerator]
347 2000 A1200 T68030 RTC [Accelerator]
348 2100 Viper Mk V/E-Matrix 530 [Accelerator and RAM Expansion]
349 2200 8MB [RAM Expansion]
350 2400 Viper Mk V/E-Matrix 530 [SCSI Host Adapter and IDE Interface]
3510891 Great Valley Products
352 0100 EGS 28/24 Spectrum RAM [Graphics Card]
353 0200 EGS 28/24 Spectrum [Graphics Card]
3540892 Apollo
355 0100 A1200 [FPU and RAM Expansion]
3560893 Ingenieurbüro Helfrich
357 0500 Piccolo RAM [Graphics Card]
358 0600 Piccolo [Graphics Card]
359 0700 PeggyPlus MPEG [Video Card]
360 0800 VideoCruncher [Video Card]
361 0a00 Piccolo SD64 RAM [Graphics Card]
362 0b00 Piccolo SD64 [Graphics Card]
363089b MacroSystems USA
364 1300 Warp Engine 40xx [Accelerator, SCSI Host Adapter and RAM Expansion]
365089e ElBox Computer
366 0600 1200/4 [RAM Expansion]
367 0800 FastATA 1200 [IDE Interface]
368 1200 FastATA 1200 [IDE Interface]
369 1300 FastATA 1200 [IDE Interface]
370 1800 FastATA 1200 [IDE Interface]
371 1900 FastATA 4000 [IDE Interface]
372 1d00 FastATA 4000 [IDE Interface]
373 1e00 FastATA ZIV [IDE Interface]
3740a00 Harms Professional
375 1000 030 Plus [Accelerator]
376 d000 3500 Professional [Accelerator and RAM Expansion]
3770a50 Micronik
378 0a00 RCA 120 [RAM Expansion]
3790f0f Micronik
380 0100 Z3i A1200 [Zorro III Extender and SCSI Host Adapter]
3811000 MegaMicro
382 0300 SCRAM 500 [SCSI Host Adapter]
383 0400 SCRAM 500 [RAM Expansion]
3841028 Ronin/Imtronics
385 3900 Hurricane 2800 [Accelerator and RAM Expansion]
386 5700 Hurricane 2800 [Accelerator and RAM Expansion]
387102f Ateo Concepts
388 fc00 AteoBus [Expansion Bus Bridge]
389 fe00 Pixel64 [Graphics Card]
390 ff00 Pixel64 RAM [Graphics Card]
3911212 Individual Computers
392 0000 Buddha [IDE Interface]
393 1700 X-Surf [Ethernet Card and IDE Interface]
394 2a00 Catweasel [IDE Interface and Floppy Controller]
3951248 Kupke
396 0100 Golem HD 3000 [HD Controller]
3971267 RBM-Computertechnik
398 0100 IOBlix [Multi I/O]
3991388 ITH
400 0100 ISDN-Master II [ISDN Interface]
4011389 VMC
402 0100 ISDN Blaster Z2 [ISDN Interface]
403 0200 HyperCom 4 [Multi I/O]
404 0600 HyperCom 4+ [Multi I/O]
405157c Information
406 6400 ISDN Engine I [ISDN Interface]
4072017 Vortex
408 0700 Golden Gate 80386SX [ISA Bus Bridge]
409 0800 Golden Gate [RAM Expansion]
410 0900 Golden Gate 80486 [ISA Bus Bridge]
4112062 Expansion Systems
412 0100 DataFlyer 4000SX [SCSI Host Adapter]
413 0200 DataFlyer 4000SX [RAM Expansion]
4142100 ReadySoft
415 0100 AMax II/IV [Macintosh Emulator]
4162140 Phase 5
417 0100 Blizzard [RAM Expansion]
418 0200 Blizzard [Accelerator]
419 0600 Blizzard 1220-IV [Accelerator]
420 0a00 FastLane Z3 [RAM Expansion]
421 0b00 Blizzard 1230-II/Fastlane Z3/CyberSCSI/CyberStorm060 [Accelerator and/or SCSI Host Adapter]
422 0c00 Blizzard 1220/CyberStorm [Accelerator and SCSI Host Adapter]
423 0d00 Blizzard 1230 [Accelerator]
424 1100 Blizzard 1230-IV/1260 [Accelerator]
425 1800 Blizzard 2060 [Accelerator]
426 1900 CyberStorm Mk II [Flash ROM]
427 2200 CyberVision64 [Graphics Card]
428 3200 CyberVision64-3D Prototype [Graphics Card]
429 4300 CyberVision64-3D [Graphics Card]
430 6400 CyberStorm Mk III [Accelerator and SCSI Host Adapter]
431 6e00 Blizzard 603e+ [Accelerator and SCSI Host Adapter]
4322169 DPS
433 0100 Personal Animation Recorder [Video Card]
4342200 Apollo
435 0000 A620 68020 [Accelerator]
436 0100 A620 68020 [Accelerator]
4372222 Apollo
438 2200 AT-Apollo
439 2300 1230/1240/1260/2030/4040/4060 [Accelerator]
44038a5 Petsoff LP
441 0000 Delfina [Audio Card]
442 0100 Delfina Lite [Audio Card]
443 0200 Delfina Plus [Audio Card]
4443ff7 Uwe Gerlach
445 d400 RAM/ROM [Miscellaneous Expansion Card]
4464231 ACT
447 0100 Prelude [Audio Card]
4484754 MacroSystems Germany
449 0300 Maestro [Audio Card]
450 0400 VLab [Video Card]
451 0500 Maestro Pro [Audio Card]
452 0600 Retina [Graphics Card]
453 0800 MultiEvolution [SCSI Host Adapter]
454 0c00 Toccata [Audio Card]
455 0d00 Toccata Pro [Audio Card]
456 1000 Retina Z3 [Graphics Card]
457 1200 VLab Motion [Video Card]
458 1300 Altais [Graphics Card]
459 fd00 Falcon '040 [Accelerator]
4606766 Combitec
4618000 SKI Peripherals
462 0800 MAST Fireball [SCSI Host Adapter]
463 8000 [SCSI Host Adapter and Dual Serial Card]
464a9ad Reis-Ware
465 1100 Scan King [Scanner Interface]
466aa01 Cameron
467 1000 Personal A4 [Scanner Interface]
468aa11 Reis-Ware
469 1100 Handyscanner [Scanner Interface]
470b5a8 Phoenix
471 2100 ST506 [HD Controller]
472 2200 [SCSI Host Adapter]
473 be00 [RAM Expansion]
474c008 Combitec
475 2a00 [HD Controller]
476 2b00 SRAM [RAM Expansion]