at v2.6.13 329 lines 8.9 kB view raw
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 14#ifndef __ASSEMBLY__ 15 16#include <linux/device.h> 17 18 19 /* 20 * Each Zorro board has a 32-bit ID of the form 21 * 22 * mmmmmmmmmmmmmmmmppppppppeeeeeeee 23 * 24 * with 25 * 26 * mmmmmmmmmmmmmmmm 16-bit Manufacturer ID (assigned by CBM (sigh)) 27 * pppppppp 8-bit Product ID (assigned by manufacturer) 28 * eeeeeeee 8-bit Extended Product ID (currently only used 29 * for some GVP boards) 30 */ 31 32 33#define ZORRO_MANUF(id) ((id) >> 16) 34#define ZORRO_PROD(id) (((id) >> 8) & 0xff) 35#define ZORRO_EPC(id) ((id) & 0xff) 36 37#define ZORRO_ID(manuf, prod, epc) \ 38 ((ZORRO_MANUF_##manuf << 16) | ((prod) << 8) | (epc)) 39 40typedef __u32 zorro_id; 41 42 43#define ZORRO_WILDCARD (0xffffffff) /* not official */ 44 45/* Include the ID list */ 46#include <linux/zorro_ids.h> 47 48 49 /* 50 * GVP identifies most of its products through the 'extended product code' 51 * (epc). The epc has to be ANDed with the GVP_PRODMASK before the 52 * identification. 53 */ 54 55#define GVP_PRODMASK (0xf8) 56#define GVP_SCSICLKMASK (0x01) 57 58enum GVP_flags { 59 GVP_IO = 0x01, 60 GVP_ACCEL = 0x02, 61 GVP_SCSI = 0x04, 62 GVP_24BITDMA = 0x08, 63 GVP_25BITDMA = 0x10, 64 GVP_NOBANK = 0x20, 65 GVP_14MHZ = 0x40, 66}; 67 68 69struct Node { 70 struct Node *ln_Succ; /* Pointer to next (successor) */ 71 struct Node *ln_Pred; /* Pointer to previous (predecessor) */ 72 __u8 ln_Type; 73 __s8 ln_Pri; /* Priority, for sorting */ 74 __s8 *ln_Name; /* ID string, null terminated */ 75} __attribute__ ((packed)); 76 77struct ExpansionRom { 78 /* -First 16 bytes of the expansion ROM */ 79 __u8 er_Type; /* Board type, size and flags */ 80 __u8 er_Product; /* Product number, assigned by manufacturer */ 81 __u8 er_Flags; /* Flags */ 82 __u8 er_Reserved03; /* Must be zero ($ff inverted) */ 83 __u16 er_Manufacturer; /* Unique ID, ASSIGNED BY COMMODORE-AMIGA! */ 84 __u32 er_SerialNumber; /* Available for use by manufacturer */ 85 __u16 er_InitDiagVec; /* Offset to optional "DiagArea" structure */ 86 __u8 er_Reserved0c; 87 __u8 er_Reserved0d; 88 __u8 er_Reserved0e; 89 __u8 er_Reserved0f; 90} __attribute__ ((packed)); 91 92/* er_Type board type bits */ 93#define ERT_TYPEMASK 0xc0 94#define ERT_ZORROII 0xc0 95#define ERT_ZORROIII 0x80 96 97/* other bits defined in er_Type */ 98#define ERTB_MEMLIST 5 /* Link RAM into free memory list */ 99#define ERTF_MEMLIST (1<<5) 100 101struct ConfigDev { 102 struct Node cd_Node; 103 __u8 cd_Flags; /* (read/write) */ 104 __u8 cd_Pad; /* reserved */ 105 struct ExpansionRom cd_Rom; /* copy of board's expansion ROM */ 106 void *cd_BoardAddr; /* where in memory the board was placed */ 107 __u32 cd_BoardSize; /* size of board in bytes */ 108 __u16 cd_SlotAddr; /* which slot number (PRIVATE) */ 109 __u16 cd_SlotSize; /* number of slots (PRIVATE) */ 110 void *cd_Driver; /* pointer to node of driver */ 111 struct ConfigDev *cd_NextCD; /* linked list of drivers to config */ 112 __u32 cd_Unused[4]; /* for whatever the driver wants */ 113} __attribute__ ((packed)); 114 115#else /* __ASSEMBLY__ */ 116 117LN_Succ = 0 118LN_Pred = LN_Succ+4 119LN_Type = LN_Pred+4 120LN_Pri = LN_Type+1 121LN_Name = LN_Pri+1 122LN_sizeof = LN_Name+4 123 124ER_Type = 0 125ER_Product = ER_Type+1 126ER_Flags = ER_Product+1 127ER_Reserved03 = ER_Flags+1 128ER_Manufacturer = ER_Reserved03+1 129ER_SerialNumber = ER_Manufacturer+2 130ER_InitDiagVec = ER_SerialNumber+4 131ER_Reserved0c = ER_InitDiagVec+2 132ER_Reserved0d = ER_Reserved0c+1 133ER_Reserved0e = ER_Reserved0d+1 134ER_Reserved0f = ER_Reserved0e+1 135ER_sizeof = ER_Reserved0f+1 136 137CD_Node = 0 138CD_Flags = CD_Node+LN_sizeof 139CD_Pad = CD_Flags+1 140CD_Rom = CD_Pad+1 141CD_BoardAddr = CD_Rom+ER_sizeof 142CD_BoardSize = CD_BoardAddr+4 143CD_SlotAddr = CD_BoardSize+4 144CD_SlotSize = CD_SlotAddr+2 145CD_Driver = CD_SlotSize+2 146CD_NextCD = CD_Driver+4 147CD_Unused = CD_NextCD+4 148CD_sizeof = CD_Unused+(4*4) 149 150#endif /* __ASSEMBLY__ */ 151 152#ifndef __ASSEMBLY__ 153 154#define ZORRO_NUM_AUTO 16 155 156#ifdef __KERNEL__ 157 158#include <linux/init.h> 159#include <linux/ioport.h> 160 161#include <asm/zorro.h> 162 163 164 /* 165 * Zorro devices 166 */ 167 168struct zorro_dev { 169 struct ExpansionRom rom; 170 zorro_id id; 171 struct zorro_driver *driver; /* which driver has allocated this device */ 172 struct device dev; /* Generic device interface */ 173 u16 slotaddr; 174 u16 slotsize; 175 char name[64]; 176 struct resource resource; 177}; 178 179#define to_zorro_dev(n) container_of(n, struct zorro_dev, dev) 180 181 182 /* 183 * Zorro bus 184 */ 185 186struct zorro_bus { 187 struct list_head devices; /* list of devices on this bus */ 188 unsigned int num_resources; /* number of resources */ 189 struct resource resources[4]; /* address space routed to this bus */ 190 struct device dev; 191 char name[10]; 192}; 193 194extern struct zorro_bus zorro_bus; /* single Zorro bus */ 195extern struct bus_type zorro_bus_type; 196 197 198 /* 199 * Zorro device IDs 200 */ 201 202struct zorro_device_id { 203 zorro_id id; /* Device ID or ZORRO_WILDCARD */ 204 unsigned long driver_data; /* Data private to the driver */ 205}; 206 207 208 /* 209 * Zorro device drivers 210 */ 211 212struct zorro_driver { 213 struct list_head node; 214 char *name; 215 const struct zorro_device_id *id_table; /* NULL if wants all devices */ 216 int (*probe)(struct zorro_dev *z, const struct zorro_device_id *id); /* New device inserted */ 217 void (*remove)(struct zorro_dev *z); /* Device removed (NULL if not a hot-plug capable driver) */ 218 struct device_driver driver; 219}; 220 221#define to_zorro_driver(drv) container_of(drv, struct zorro_driver, driver) 222 223 224#define zorro_for_each_dev(dev) \ 225 for (dev = &zorro_autocon[0]; dev < zorro_autocon+zorro_num_autocon; dev++) 226 227 228/* New-style probing */ 229extern int zorro_register_driver(struct zorro_driver *); 230extern void zorro_unregister_driver(struct zorro_driver *); 231extern const struct zorro_device_id *zorro_match_device(const struct zorro_device_id *ids, const struct zorro_dev *z); 232static inline struct zorro_driver *zorro_dev_driver(const struct zorro_dev *z) 233{ 234 return z->driver; 235} 236 237 238extern unsigned int zorro_num_autocon; /* # of autoconfig devices found */ 239extern struct zorro_dev zorro_autocon[ZORRO_NUM_AUTO]; 240 241 242 /* 243 * Zorro Functions 244 */ 245 246extern struct zorro_dev *zorro_find_device(zorro_id id, 247 struct zorro_dev *from); 248 249#define zorro_resource_start(z) ((z)->resource.start) 250#define zorro_resource_end(z) ((z)->resource.end) 251#define zorro_resource_len(z) ((z)->resource.end-(z)->resource.start+1) 252#define zorro_resource_flags(z) ((z)->resource.flags) 253 254#define zorro_request_device(z, name) \ 255 request_mem_region(zorro_resource_start(z), zorro_resource_len(z), name) 256#define zorro_release_device(z) \ 257 release_mem_region(zorro_resource_start(z), zorro_resource_len(z)) 258 259/* Similar to the helpers above, these manipulate per-zorro_dev 260 * driver-specific data. They are really just a wrapper around 261 * the generic device structure functions of these calls. 262 */ 263static inline void *zorro_get_drvdata (struct zorro_dev *z) 264{ 265 return dev_get_drvdata(&z->dev); 266} 267 268static inline void zorro_set_drvdata (struct zorro_dev *z, void *data) 269{ 270 dev_set_drvdata(&z->dev, data); 271} 272 273 274/* 275 * A helper function which helps ensure correct zorro_driver 276 * setup and cleanup for commonly-encountered hotplug/modular cases 277 * 278 * This MUST stay in a header, as it checks for -DMODULE 279 */ 280static inline int zorro_module_init(struct zorro_driver *drv) 281{ 282 int rc = zorro_register_driver(drv); 283 284 if (rc > 0) 285 return 0; 286 287 /* iff CONFIG_HOTPLUG and built into kernel, we should 288 * leave the driver around for future hotplug events. 289 * For the module case, a hotplug daemon of some sort 290 * should load a module in response to an insert event. */ 291#if defined(CONFIG_HOTPLUG) && !defined(MODULE) 292 if (rc == 0) 293 return 0; 294#else 295 if (rc == 0) 296 rc = -ENODEV; 297#endif 298 299 /* if we get here, we need to clean up Zorro driver instance 300 * and return some sort of error */ 301 zorro_unregister_driver(drv); 302 303 return rc; 304} 305 306 307 /* 308 * Bitmask indicating portions of available Zorro II RAM that are unused 309 * by the system. Every bit represents a 64K chunk, for a maximum of 8MB 310 * (128 chunks, physical 0x00200000-0x009fffff). 311 * 312 * If you want to use (= allocate) portions of this RAM, you should clear 313 * the corresponding bits. 314 */ 315 316extern DECLARE_BITMAP(zorro_unused_z2ram, 128); 317 318#define Z2RAM_START (0x00200000) 319#define Z2RAM_END (0x00a00000) 320#define Z2RAM_SIZE (0x00800000) 321#define Z2RAM_CHUNKSIZE (0x00010000) 322#define Z2RAM_CHUNKMASK (0x0000ffff) 323#define Z2RAM_CHUNKSHIFT (16) 324 325 326#endif /* !__ASSEMBLY__ */ 327#endif /* __KERNEL__ */ 328 329#endif /* _LINUX_ZORRO_H */