]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
2 | * linux/zorro.h -- Amiga AutoConfig (Zorro) Bus Definitions | |
3 | * | |
4 | * Copyright (C) 1995--2003 Geert Uytterhoeven | |
5 | * | |
6 | * This file is subject to the terms and conditions of the GNU General Public | |
7 | * License. See the file COPYING in the main directory of this archive | |
8 | * for more details. | |
9 | */ | |
10 | ||
11 | #ifndef _LINUX_ZORRO_H | |
12 | #define _LINUX_ZORRO_H | |
13 | ||
1da177e4 | 14 | |
986ea58d | 15 | #include <uapi/linux/zorro.h> |
1da177e4 | 16 | |
986ea58d | 17 | #include <linux/device.h> |
1da177e4 LT |
18 | #include <linux/init.h> |
19 | #include <linux/ioport.h> | |
bf54a2b3 | 20 | #include <linux/mod_devicetable.h> |
1da177e4 LT |
21 | |
22 | #include <asm/zorro.h> | |
23 | ||
24 | ||
25 | /* | |
26 | * Zorro devices | |
27 | */ | |
28 | ||
29 | struct zorro_dev { | |
30 | struct ExpansionRom rom; | |
31 | zorro_id id; | |
32 | struct zorro_driver *driver; /* which driver has allocated this device */ | |
33 | struct device dev; /* Generic device interface */ | |
34 | u16 slotaddr; | |
35 | u16 slotsize; | |
36 | char name[64]; | |
37 | struct resource resource; | |
38 | }; | |
39 | ||
40 | #define to_zorro_dev(n) container_of(n, struct zorro_dev, dev) | |
41 | ||
42 | ||
43 | /* | |
44 | * Zorro bus | |
45 | */ | |
46 | ||
1da177e4 LT |
47 | extern struct bus_type zorro_bus_type; |
48 | ||
49 | ||
1da177e4 LT |
50 | /* |
51 | * Zorro device drivers | |
52 | */ | |
53 | ||
54 | struct zorro_driver { | |
55 | struct list_head node; | |
56 | char *name; | |
57 | const struct zorro_device_id *id_table; /* NULL if wants all devices */ | |
58 | int (*probe)(struct zorro_dev *z, const struct zorro_device_id *id); /* New device inserted */ | |
59 | void (*remove)(struct zorro_dev *z); /* Device removed (NULL if not a hot-plug capable driver) */ | |
60 | struct device_driver driver; | |
61 | }; | |
62 | ||
63 | #define to_zorro_driver(drv) container_of(drv, struct zorro_driver, driver) | |
64 | ||
65 | ||
66 | #define zorro_for_each_dev(dev) \ | |
67 | for (dev = &zorro_autocon[0]; dev < zorro_autocon+zorro_num_autocon; dev++) | |
68 | ||
69 | ||
70 | /* New-style probing */ | |
71 | extern int zorro_register_driver(struct zorro_driver *); | |
72 | extern void zorro_unregister_driver(struct zorro_driver *); | |
73 | extern const struct zorro_device_id *zorro_match_device(const struct zorro_device_id *ids, const struct zorro_dev *z); | |
74 | static inline struct zorro_driver *zorro_dev_driver(const struct zorro_dev *z) | |
75 | { | |
76 | return z->driver; | |
77 | } | |
78 | ||
79 | ||
80 | extern unsigned int zorro_num_autocon; /* # of autoconfig devices found */ | |
c293738e GU |
81 | extern struct zorro_dev *zorro_autocon; |
82 | ||
83 | ||
84 | /* | |
85 | * Minimal information about a Zorro device, passed from bootinfo | |
86 | * Only available temporarily, i.e. until initmem has been freed! | |
87 | */ | |
88 | ||
89 | struct zorro_dev_init { | |
90 | struct ExpansionRom rom; | |
91 | u16 slotaddr; | |
92 | u16 slotsize; | |
93 | u32 boardaddr; | |
94 | u32 boardsize; | |
95 | }; | |
96 | ||
97 | extern struct zorro_dev_init zorro_autocon_init[ZORRO_NUM_AUTO] __initdata; | |
1da177e4 LT |
98 | |
99 | ||
100 | /* | |
101 | * Zorro Functions | |
102 | */ | |
103 | ||
104 | extern struct zorro_dev *zorro_find_device(zorro_id id, | |
105 | struct zorro_dev *from); | |
106 | ||
107 | #define zorro_resource_start(z) ((z)->resource.start) | |
108 | #define zorro_resource_end(z) ((z)->resource.end) | |
28f65c11 | 109 | #define zorro_resource_len(z) (resource_size(&(z)->resource)) |
1da177e4 LT |
110 | #define zorro_resource_flags(z) ((z)->resource.flags) |
111 | ||
112 | #define zorro_request_device(z, name) \ | |
113 | request_mem_region(zorro_resource_start(z), zorro_resource_len(z), name) | |
114 | #define zorro_release_device(z) \ | |
115 | release_mem_region(zorro_resource_start(z), zorro_resource_len(z)) | |
116 | ||
117 | /* Similar to the helpers above, these manipulate per-zorro_dev | |
118 | * driver-specific data. They are really just a wrapper around | |
119 | * the generic device structure functions of these calls. | |
120 | */ | |
121 | static inline void *zorro_get_drvdata (struct zorro_dev *z) | |
122 | { | |
123 | return dev_get_drvdata(&z->dev); | |
124 | } | |
125 | ||
126 | static inline void zorro_set_drvdata (struct zorro_dev *z, void *data) | |
127 | { | |
128 | dev_set_drvdata(&z->dev, data); | |
129 | } | |
130 | ||
131 | ||
1da177e4 LT |
132 | /* |
133 | * Bitmask indicating portions of available Zorro II RAM that are unused | |
134 | * by the system. Every bit represents a 64K chunk, for a maximum of 8MB | |
135 | * (128 chunks, physical 0x00200000-0x009fffff). | |
136 | * | |
137 | * If you want to use (= allocate) portions of this RAM, you should clear | |
138 | * the corresponding bits. | |
139 | */ | |
140 | ||
141 | extern DECLARE_BITMAP(zorro_unused_z2ram, 128); | |
142 | ||
143 | #define Z2RAM_START (0x00200000) | |
144 | #define Z2RAM_END (0x00a00000) | |
145 | #define Z2RAM_SIZE (0x00800000) | |
146 | #define Z2RAM_CHUNKSIZE (0x00010000) | |
147 | #define Z2RAM_CHUNKMASK (0x0000ffff) | |
148 | #define Z2RAM_CHUNKSHIFT (16) | |
149 | ||
150 | ||
1da177e4 | 151 | #endif /* _LINUX_ZORRO_H */ |