Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v4.15-rc1 135 lines 4.2 kB view raw
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 nubus.h: various definitions and prototypes for NuBus drivers to use. 4 5 Originally written by Alan Cox. 6 7 Hacked to death by C. Scott Ananian and David Huggins-Daines. 8 9 Some of the constants in here are from the corresponding 10 NetBSD/OpenBSD header file, by Allen Briggs. We figured out the 11 rest of them on our own. */ 12#ifndef LINUX_NUBUS_H 13#define LINUX_NUBUS_H 14 15#include <asm/nubus.h> 16#include <uapi/linux/nubus.h> 17 18struct nubus_board { 19 struct nubus_board* next; 20 struct nubus_dev* first_dev; 21 22 /* Only 9-E actually exist, though 0-8 are also theoretically 23 possible, and 0 is a special case which represents the 24 motherboard and onboard peripherals (Ethernet, video) */ 25 int slot; 26 /* For slot 0, this is bogus. */ 27 char name[64]; 28 29 /* Format block */ 30 unsigned char* fblock; 31 /* Root directory (does *not* always equal fblock + doffset!) */ 32 unsigned char* directory; 33 34 unsigned long slot_addr; 35 /* Offset to root directory (sometimes) */ 36 unsigned long doffset; 37 /* Length over which to compute the crc */ 38 unsigned long rom_length; 39 /* Completely useless most of the time */ 40 unsigned long crc; 41 unsigned char rev; 42 unsigned char format; 43 unsigned char lanes; 44}; 45 46struct nubus_dev { 47 /* Next link in device list */ 48 struct nubus_dev* next; 49 /* Directory entry in /proc/bus/nubus */ 50 struct proc_dir_entry* procdir; 51 52 /* The functional resource ID of this device */ 53 unsigned char resid; 54 /* These are mostly here for convenience; we could always read 55 them from the ROMs if we wanted to */ 56 unsigned short category; 57 unsigned short type; 58 unsigned short dr_sw; 59 unsigned short dr_hw; 60 /* This is the device's name rather than the board's. 61 Sometimes they are different. Usually the board name is 62 more correct. */ 63 char name[64]; 64 /* MacOS driver (I kid you not) */ 65 unsigned char* driver; 66 /* Actually this is an offset */ 67 unsigned long iobase; 68 unsigned long iosize; 69 unsigned char flags, hwdevid; 70 71 /* Functional directory */ 72 unsigned char* directory; 73 /* Much of our info comes from here */ 74 struct nubus_board* board; 75}; 76 77/* This is all NuBus devices (used to find devices later on) */ 78extern struct nubus_dev* nubus_devices; 79/* This is all NuBus cards */ 80extern struct nubus_board* nubus_boards; 81 82/* Generic NuBus interface functions, modelled after the PCI interface */ 83void nubus_scan_bus(void); 84#ifdef CONFIG_PROC_FS 85extern void nubus_proc_init(void); 86#else 87static inline void nubus_proc_init(void) {} 88#endif 89int get_nubus_list(char *buf); 90int nubus_proc_attach_device(struct nubus_dev *dev); 91/* If we need more precision we can add some more of these */ 92struct nubus_dev* nubus_find_device(unsigned short category, 93 unsigned short type, 94 unsigned short dr_hw, 95 unsigned short dr_sw, 96 const struct nubus_dev* from); 97struct nubus_dev* nubus_find_type(unsigned short category, 98 unsigned short type, 99 const struct nubus_dev* from); 100/* Might have more than one device in a slot, you know... */ 101struct nubus_dev* nubus_find_slot(unsigned int slot, 102 const struct nubus_dev* from); 103 104/* These are somewhat more NuBus-specific. They all return 0 for 105 success and -1 for failure, as you'd expect. */ 106 107/* The root directory which contains the board and functional 108 directories */ 109int nubus_get_root_dir(const struct nubus_board* board, 110 struct nubus_dir* dir); 111/* The board directory */ 112int nubus_get_board_dir(const struct nubus_board* board, 113 struct nubus_dir* dir); 114/* The functional directory */ 115int nubus_get_func_dir(const struct nubus_dev* dev, 116 struct nubus_dir* dir); 117 118/* These work on any directory gotten via the above */ 119int nubus_readdir(struct nubus_dir* dir, 120 struct nubus_dirent* ent); 121int nubus_find_rsrc(struct nubus_dir* dir, 122 unsigned char rsrc_type, 123 struct nubus_dirent* ent); 124int nubus_rewinddir(struct nubus_dir* dir); 125 126/* Things to do with directory entries */ 127int nubus_get_subdir(const struct nubus_dirent* ent, 128 struct nubus_dir* dir); 129void nubus_get_rsrc_mem(void* dest, 130 const struct nubus_dirent *dirent, 131 int len); 132void nubus_get_rsrc_str(void* dest, 133 const struct nubus_dirent *dirent, 134 int maxlen); 135#endif /* LINUX_NUBUS_H */