struct nubus_slot { int slot_flags; #define NUBUS_DEVICE_PRESENT 1 #define NUBUS_DEVICE_ACTIVE 2 #define NUBUS_DEVICE_IRQ 4 __u32 slot_directory; __u32 slot_dlength; __u32 slot_crc; __u8 slot_rev; __u8 slot_format; __u8 slot_lanes; /* * Stuff we pulled from the directory */ __u32 slot_dirbase; __u32 slot_thisdir; char slot_vendor[64]; char slot_cardname[64]; }; struct nbnamevec { char *name; int id; }; struct nubus_dir { unsigned char *base; int length; int count; int mask; }; struct nubus_dirent { unsigned char type; int value; /* Actually 24bits used */ int mask; int base; /* For dirptr function */ }; struct nubus_type { __u16 category; __u16 type; __u16 DrHW; __u16 DrSW; }; #define NUBUS_CAT_BOARD 0x0001 #define NUBUS_CAT_DISPLAY 0x0003 #define NUBUS_CAT_NETWORK 0x0004 #define NUBUS_CAT_COMMUNICATIONS 0x0006 #define NUBUS_CAT_FONT 0x0009 #define NUBUS_CAT_CPU 0x000A #define RES_ID_TYPE 0x0001 #define RES_ID_NAME 0x0002 #define RES_ID_BOARD_DIR 0x0001 #define RES_ID_FLAGS 0x0007 struct nubus_device_specifier { int (*setup)(struct nubus_device_specifier *, int slot, struct nubus_type *); struct nubus_device_specifier *next; }; extern void register_nubus_device(struct nubus_device_specifier *nb); extern void unregister_nubus_device(struct nubus_device_specifier *nb); extern struct nubus_dir *nubus_openrootdir(int slot); extern struct nubus_dir *nubus_opensubdir(struct nubus_dirent *d); extern void nubus_closedir(struct nubus_dir *); extern struct nubus_dirent *nubus_readdir(struct nubus_dir *); extern unsigned char *nubus_dirptr(struct nubus_dirent *d); extern void nubus_strncpy(int slot, void *to, unsigned char *p, int len); extern void nubus_memcpy(int slot, void *to, unsigned char *p, int len); extern void nubus_init(void); extern void nubus_sweep_video(void); extern int nubus_ethernet_addr(int slot, unsigned char *addr); extern __inline void *nubus_slot_addr(int slot) { return (void *)(0xF0000000|(slot<<24)); } extern int nubus_hwreg_present(volatile void *ptr); extern void nubus_init_via(void); extern int nubus_free_irq(int slot); extern int nubus_request_irq(int slot, void *dev_id, void (*handler)(int,void *,struct pt_regs *));