diff options
Diffstat (limited to 'drivers/zorro')
-rw-r--r-- | drivers/zorro/Kconfig | 18 | ||||
-rw-r--r-- | drivers/zorro/Makefile | 21 | ||||
-rw-r--r-- | drivers/zorro/gen-devlist.c | 107 | ||||
-rw-r--r-- | drivers/zorro/names.c | 109 | ||||
-rw-r--r-- | drivers/zorro/proc.c | 139 | ||||
-rw-r--r-- | drivers/zorro/zorro-driver.c | 150 | ||||
-rw-r--r-- | drivers/zorro/zorro-sysfs.c | 98 | ||||
-rw-r--r-- | drivers/zorro/zorro.c | 193 | ||||
-rw-r--r-- | drivers/zorro/zorro.h | 4 | ||||
-rw-r--r-- | drivers/zorro/zorro.ids | 476 |
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 | # | ||
4 | config 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 | |||
5 | obj-$(CONFIG_ZORRO) += zorro.o zorro-driver.o zorro-sysfs.o names.o | ||
6 | obj-$(CONFIG_PROC_FS) += proc.o | ||
7 | |||
8 | hostprogs-y := gen-devlist | ||
9 | |||
10 | # Files generated that shall be removed upon make clean | ||
11 | clean-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 | ||
17 | quiet_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 | |||
16 | static void | ||
17 | pq(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 | |||
28 | int | ||
29 | main(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 | |||
21 | struct zorro_prod_info { | ||
22 | __u16 prod; | ||
23 | unsigned short seen; | ||
24 | const char *name; | ||
25 | }; | ||
26 | |||
27 | struct 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 | |||
51 | static 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 | |||
60 | void __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 | |||
105 | void __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 | |||
22 | static loff_t | ||
23 | proc_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 | |||
47 | static ssize_t | ||
48 | proc_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 | |||
78 | static struct file_operations proc_bus_zorro_operations = { | ||
79 | .llseek = proc_bus_zorro_lseek, | ||
80 | .read = proc_bus_zorro_read, | ||
81 | }; | ||
82 | |||
83 | static int | ||
84 | get_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 | |||
108 | static struct proc_dir_entry *proc_bus_zorro_dir; | ||
109 | |||
110 | static 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 | |||
125 | static 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 | |||
29 | const struct zorro_device_id * | ||
30 | zorro_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 | |||
42 | static 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 | |||
73 | int 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 | |||
98 | void 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 | |||
115 | static 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 | |||
133 | struct bus_type zorro_bus_type = { | ||
134 | .name = "zorro", | ||
135 | .match = zorro_bus_match | ||
136 | }; | ||
137 | |||
138 | |||
139 | static int __init zorro_driver_init(void) | ||
140 | { | ||
141 | return bus_register(&zorro_bus_type); | ||
142 | } | ||
143 | |||
144 | postcore_initcall(zorro_driver_init); | ||
145 | |||
146 | EXPORT_SYMBOL(zorro_match_device); | ||
147 | EXPORT_SYMBOL(zorro_register_driver); | ||
148 | EXPORT_SYMBOL(zorro_unregister_driver); | ||
149 | EXPORT_SYMBOL(zorro_dev_driver); | ||
150 | EXPORT_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) \ | ||
23 | static ssize_t \ | ||
24 | show_##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 | } \ | ||
31 | static DEVICE_ATTR(name, S_IRUGO, show_##name, NULL); | ||
32 | |||
33 | zorro_config_attr(id, id, "0x%08x\n"); | ||
34 | zorro_config_attr(type, rom.er_Type, "0x%02x\n"); | ||
35 | zorro_config_attr(serial, rom.er_SerialNumber, "0x%08x\n"); | ||
36 | zorro_config_attr(slotaddr, slotaddr, "0x%04x\n"); | ||
37 | zorro_config_attr(slotsize, slotsize, "0x%04x\n"); | ||
38 | |||
39 | static 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 | |||
48 | static DEVICE_ATTR(resource, S_IRUGO, zorro_show_resource, NULL); | ||
49 | |||
50 | static 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 | |||
75 | static 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 | |||
85 | void 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 | |||
29 | u_int zorro_num_autocon = 0; | ||
30 | struct zorro_dev zorro_autocon[ZORRO_NUM_AUTO]; | ||
31 | |||
32 | |||
33 | /* | ||
34 | * Single Zorro bus | ||
35 | */ | ||
36 | |||
37 | struct 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 | |||
54 | struct 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 | |||
85 | DECLARE_BITMAP(zorro_unused_z2ram, 128); | ||
86 | |||
87 | |||
88 | static 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 | |||
113 | static 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 | |||
129 | static 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 | |||
188 | subsys_initcall(zorro_init); | ||
189 | |||
190 | EXPORT_SYMBOL(zorro_find_device); | ||
191 | EXPORT_SYMBOL(zorro_unused_z2ram); | ||
192 | |||
193 | MODULE_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 | |||
2 | extern void zorro_name_device(struct zorro_dev *z); | ||
3 | extern 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 | |||
16 | 00d3 Pacific Peripherals | ||
17 | 0000 SE 2000 A500 [HD Controller] | ||
18 | 0a00 [SCSI Host Adapter] | ||
19 | 00dd Kupke | ||
20 | 0000 Golem RAM Box 2MB [RAM Expansion] | ||
21 | 0100 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] | ||
25 | 0200 3-State | ||
26 | 0200 Megamix 2000 [RAM Expansion] | ||
27 | 0201 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] | ||
32 | 0202 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] | ||
50 | 0203 Commodore West Chester | ||
51 | 0300 A2090/A2090A Combitec/MacroSystem [SCSI Host Adapter] | ||
52 | 02f4 Progressive Peripherals & Systems | ||
53 | 0200 EXP8000 [RAM Expansion] | ||
54 | 6900 A2000 68040 [Accelerator] | ||
55 | 9600 68040 [Accelerator] | ||
56 | 02ff Kolff Computer Supplies | ||
57 | 0000 KCS Power PC [ISA Bus Bridge] | ||
58 | 03ec 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] | ||
63 | 03ed A-Squared | ||
64 | 0100 Live! 2000 [Video Card] | ||
65 | 03ee Comspec Communications | ||
66 | 0100 AX2000 [RAM Expansion] | ||
67 | 03f1 Anakin Research | ||
68 | 0100 Easyl Drawing Tablet Interface | ||
69 | 03f2 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] | ||
84 | 03f4 Access Associates Alegra | ||
85 | 03f6 Expansion Technologies/Pacific Cypress | ||
86 | 03ff 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] | ||
91 | 0404 Ronin/Imtronics | ||
92 | 3900 Hurricane 2800 [Accelerator and RAM Expansion] | ||
93 | 5700 Hurricane 2800 [Accelerator and RAM Expansion] | ||
94 | 0406 Commodore/University of Lowell | ||
95 | 0000 A2410 HiRes [Graphics Card] | ||
96 | 041d Ameristar | ||
97 | 0100 A2065 [Ethernet Card] | ||
98 | 0900 A560 [ArcNet Card] | ||
99 | 0a00 A4066 [Ethernet Card] | ||
100 | 2000 1600-GX [Graphics Card] | ||
101 | 0420 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] | ||
113 | 0422 Computer Systems Assosiates | ||
114 | 1100 Magnum 40 [Accelerator and SCSI Host Adapter] | ||
115 | 1500 12 Gauge [SCSI Host Adapter] | ||
116 | 0439 Marc Michael Groth | ||
117 | 0502 M-Tech | ||
118 | 0300 AT500 [RAM Expansion] | ||
119 | 06e1 Great Valley Products | ||
120 | 0800 Impact Series I [SCSI Host Adapter and RAM Expansion] | ||
121 | 2000 Impact Vision 24 [Graphics Card] | ||
122 | 07da ByteBox | ||
123 | 0000 A500 | ||
124 | 07db Hacker Test Board | ||
125 | 07dc 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] | ||
133 | 07e1 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] | ||
159 | 07e5 California Access/Synergy | ||
160 | 0100 Malibu [SCSI Host Adapter] | ||
161 | 07e6 Xetec | ||
162 | 0100 FastCard [SCSI Host Adapter] | ||
163 | 0200 FastCard [RAM Expansion] | ||
164 | 0300 FastCard Plus [SCSI Host Adapter] | ||
165 | 07ea 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] | ||
175 | 07ec Xebec | ||
176 | 07f2 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] | ||
184 | 07f3 Spirit Technology | ||
185 | 07fe BSC/Alfadata | ||
186 | 0300 ALF 3 [SCSI Host Adapter] | ||
187 | 0801 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] | ||
197 | 0802 Cardco Ltd. | ||
198 | 0400 Kronos 2000 [SCSI Host Adapter] | ||
199 | 0c00 A1000 [SCSI Host Adapter] | ||
200 | 0804 Jochheim | ||
201 | 0100 [RAM Expansion] | ||
202 | 2000 [RAM Expansion] | ||
203 | 0807 Checkpoint Technologies | ||
204 | 0000 Serial Solution [Multi Serial] | ||
205 | 0810 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 | ||
215 | 0813 NES Inc. | ||
216 | 0000 [RAM Expansion] | ||
217 | 0817 ICD | ||
218 | 0100 Advantage 2000 [SCSI Host Adapter] | ||
219 | 0300 Advantage [IDE Interface] | ||
220 | 0400 Advantage 2080 [RAM Expansion] | ||
221 | 0819 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] | ||
227 | 081d Great Valley Products | ||
228 | 0900 A2000-RAM8/2 [Miscellaneous Expansion Card] | ||
229 | 0a00 Impact Series II [RAM Expansion] | ||
230 | 081e Interworks Network | ||
231 | 0820 Hardital Synthesis | ||
232 | 0100 Super Big Bang [Accelerator, SCSI Host Adapter and RAM Expansion] | ||
233 | 1400 TQM 68030+68882 [Accelerator] | ||
234 | 0828 Applied Engineering | ||
235 | 1000 DL2000 [Modem] | ||
236 | e000 RAM Works [RAM Expansion] | ||
237 | 082c 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] | ||
251 | 0835 Phoenix | ||
252 | 2100 ST506 [HD Controller] | ||
253 | 2200 [SCSI Host Adapter] | ||
254 | be00 [RAM Expansion] | ||
255 | 0836 Advanced Storage Systems | ||
256 | 0100 Nexus [SCSI Host Adapter] | ||
257 | 0800 Nexus [RAM Expansion] | ||
258 | 0838 Impulse | ||
259 | 0000 FireCracker 24 (NTSC) [Graphics Card] | ||
260 | 0100 FireCracker 24 (PAL) [Graphics Card] | ||
261 | 0840 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] | ||
271 | 0841 Vector | ||
272 | e300 Connection [Multi I/O] | ||
273 | 0845 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] | ||
279 | 0849 Hydra Systems | ||
280 | 0100 Amiganet [Ethernet Card] | ||
281 | 084f Sunrize Industries | ||
282 | 0100 AD1012 [Audio Card] | ||
283 | 0200 AD516 [Audio Card] | ||
284 | 0300 DD512 [Audio Card] | ||
285 | 0850 Triceratops | ||
286 | 0100 [Multi I/O] | ||
287 | 0851 Applied Magic Inc. | ||
288 | 0100 DMI Resolver [Graphics Card] | ||
289 | 0200 Vivid 24 [Graphics Card] | ||
290 | 0600 Digital Broadcaster [Video Card] | ||
291 | 085e GFX-Base | ||
292 | 0000 GDA-1 VRAM [Graphics Card] | ||
293 | 0100 GDA-1 [Graphics Card] | ||
294 | 0860 RocTec | ||
295 | 0100 RH 800C [HD Controller] | ||
296 | 0200 RH 800C [RAM Expansion] | ||
297 | 0861 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] | ||
302 | 0862 Atlantis | ||
303 | 0864 Protar | ||
304 | 0865 ACS | ||
305 | 0866 Software Results Enterprises | ||
306 | 0100 Golden Gate 2 Bus+ [ISA Bus Bridge] | ||
307 | 086a Unknown | ||
308 | 0100 Horizon [Graphics Card] | ||
309 | 0200 Blackbox [Graphics Card] | ||
310 | 0300 Voyager [Graphics Card] | ||
311 | 086d Masoboshi | ||
312 | 0300 MasterCard SC201 [RAM Expansion] | ||
313 | 0400 MasterCard MC702 [SCSI Host Adapter and IDE Interface] | ||
314 | 0700 MVD 819 | ||
315 | 086f Mainhattan-Data/A-Team | ||
316 | 0100 [IDE Interface] | ||
317 | 0877 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] | ||
330 | 087b Utilities Unlimited | ||
331 | 1500 Emplant Deluxe [Macintosh Emulator] | ||
332 | 2000 Emplant Deluxe [Macintosh Emulator] | ||
333 | 0880 Amitrix | ||
334 | 0100 [Multi I/O] | ||
335 | 0200 CD-RAM [RAM Expansion] | ||
336 | 0885 ArMax | ||
337 | 0000 OmniBus [Graphics Card] | ||
338 | 088d ZEUS Electronic Development | ||
339 | 0300 [ISDN Interface] | ||
340 | 0400 Spider [Video Card] | ||
341 | 088f NewTek | ||
342 | 0000 VideoToaster [Video Card] | ||
343 | 0890 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] | ||
351 | 0891 Great Valley Products | ||
352 | 0100 EGS 28/24 Spectrum RAM [Graphics Card] | ||
353 | 0200 EGS 28/24 Spectrum [Graphics Card] | ||
354 | 0892 Apollo | ||
355 | 0100 A1200 [FPU and RAM Expansion] | ||
356 | 0893 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] | ||
363 | 089b MacroSystems USA | ||
364 | 1300 Warp Engine 40xx [Accelerator, SCSI Host Adapter and RAM Expansion] | ||
365 | 089e 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] | ||
374 | 0a00 Harms Professional | ||
375 | 1000 030 Plus [Accelerator] | ||
376 | d000 3500 Professional [Accelerator and RAM Expansion] | ||
377 | 0a50 Micronik | ||
378 | 0a00 RCA 120 [RAM Expansion] | ||
379 | 0f0f Micronik | ||
380 | 0100 Z3i A1200 [Zorro III Extender and SCSI Host Adapter] | ||
381 | 1000 MegaMicro | ||
382 | 0300 SCRAM 500 [SCSI Host Adapter] | ||
383 | 0400 SCRAM 500 [RAM Expansion] | ||
384 | 1028 Ronin/Imtronics | ||
385 | 3900 Hurricane 2800 [Accelerator and RAM Expansion] | ||
386 | 5700 Hurricane 2800 [Accelerator and RAM Expansion] | ||
387 | 102f Ateo Concepts | ||
388 | fc00 AteoBus [Expansion Bus Bridge] | ||
389 | fe00 Pixel64 [Graphics Card] | ||
390 | ff00 Pixel64 RAM [Graphics Card] | ||
391 | 1212 Individual Computers | ||
392 | 0000 Buddha [IDE Interface] | ||
393 | 1700 X-Surf [Ethernet Card and IDE Interface] | ||
394 | 2a00 Catweasel [IDE Interface and Floppy Controller] | ||
395 | 1248 Kupke | ||
396 | 0100 Golem HD 3000 [HD Controller] | ||
397 | 1267 RBM-Computertechnik | ||
398 | 0100 IOBlix [Multi I/O] | ||
399 | 1388 ITH | ||
400 | 0100 ISDN-Master II [ISDN Interface] | ||
401 | 1389 VMC | ||
402 | 0100 ISDN Blaster Z2 [ISDN Interface] | ||
403 | 0200 HyperCom 4 [Multi I/O] | ||
404 | 0600 HyperCom 4+ [Multi I/O] | ||
405 | 157c Information | ||
406 | 6400 ISDN Engine I [ISDN Interface] | ||
407 | 2017 Vortex | ||
408 | 0700 Golden Gate 80386SX [ISA Bus Bridge] | ||
409 | 0800 Golden Gate [RAM Expansion] | ||
410 | 0900 Golden Gate 80486 [ISA Bus Bridge] | ||
411 | 2062 Expansion Systems | ||
412 | 0100 DataFlyer 4000SX [SCSI Host Adapter] | ||
413 | 0200 DataFlyer 4000SX [RAM Expansion] | ||
414 | 2100 ReadySoft | ||
415 | 0100 AMax II/IV [Macintosh Emulator] | ||
416 | 2140 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] | ||
432 | 2169 DPS | ||
433 | 0100 Personal Animation Recorder [Video Card] | ||
434 | 2200 Apollo | ||
435 | 0000 A620 68020 [Accelerator] | ||
436 | 0100 A620 68020 [Accelerator] | ||
437 | 2222 Apollo | ||
438 | 2200 AT-Apollo | ||
439 | 2300 1230/1240/1260/2030/4040/4060 [Accelerator] | ||
440 | 38a5 Petsoff LP | ||
441 | 0000 Delfina [Audio Card] | ||
442 | 0100 Delfina Lite [Audio Card] | ||
443 | 0200 Delfina Plus [Audio Card] | ||
444 | 3ff7 Uwe Gerlach | ||
445 | d400 RAM/ROM [Miscellaneous Expansion Card] | ||
446 | 4231 ACT | ||
447 | 0100 Prelude [Audio Card] | ||
448 | 4754 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] | ||
460 | 6766 Combitec | ||
461 | 8000 SKI Peripherals | ||
462 | 0800 MAST Fireball [SCSI Host Adapter] | ||
463 | 8000 [SCSI Host Adapter and Dual Serial Card] | ||
464 | a9ad Reis-Ware | ||
465 | 1100 Scan King [Scanner Interface] | ||
466 | aa01 Cameron | ||
467 | 1000 Personal A4 [Scanner Interface] | ||
468 | aa11 Reis-Ware | ||
469 | 1100 Handyscanner [Scanner Interface] | ||
470 | b5a8 Phoenix | ||
471 | 2100 ST506 [HD Controller] | ||
472 | 2200 [SCSI Host Adapter] | ||
473 | be00 [RAM Expansion] | ||
474 | c008 Combitec | ||
475 | 2a00 [HD Controller] | ||
476 | 2b00 SRAM [RAM Expansion] | ||