|
|
1.1 root 1: /* vbavar.h 4.18 81/03/09 */
2:
3: /*
4: * This file contains definitions related to the kernel structures
5: * for dealing with the Versabus adapters.
6: *
7: * Each Versabus controller which is not a device has a vba_ctlr structure.
8: * Each Versabus device has a vba_device structure.
9: */
10:
11:
12: #ifndef LOCORE
13: /*
14: * Per-controller structure.
15: * (E.g. one for each disk and tape controller, and other things
16: * which use and release buffered data paths.)
17: *
18: * If a controller has devices attached, then there are
19: * cross-referenced vba_drive structures.
20: * This structure is the one which is queued in Versabus resource wait,
21: * and saves the information about Versabus resources which are used.
22: * The queue of devices waiting to transfer is also attached here.
23: */
24: struct vba_ctlr {
25: struct vba_driver *um_driver;
26: short um_ctlr; /* controller index in driver */
27: short um_vbanum; /* the vba it is on */
28: short um_alive; /* controller exists */
29: int (**um_intr)(); /* interrupt handler(s) */
30: caddr_t um_addr; /* address of device in i/o space */
31: /* the driver saves the prototype command here for use in its go routine */
32: int um_cmd; /* communication to dgo() */
33: int um_vbinfo; /* save Versabus registers, etc */
34: struct buf um_tab; /* queue of devices for this controller */
35: };
36:
37: /*
38: * Per ``device'' structure.
39: * (A controller has devices or uses and releases buffered data paths).
40: * (Everything else is a ``device''.)
41: *
42: * If a controller has many drives attached, then there will
43: * be several vba_device structures associated with a single vba_ctlr
44: * structure.
45: *
46: * This structure contains all the information necessary to run
47: * a Versabus device. It also contains information
48: * for slaves of Versabus controllers as to which device on the slave
49: * this is. A flags field here can also be given in the system specification
50: * and is used to tell which vcx lines are hard wired or other device
51: * specific parameters.
52: */
53: struct vba_device {
54: struct vba_driver *ui_driver;
55: short ui_unit; /* unit number on the system */
56: short ui_ctlr; /* mass ctlr number; -1 if none */
57: short ui_vbanum; /* the vba it is on */
58: short ui_slave; /* slave on controller */
59: int (**ui_intr)(); /* interrupt handler(s) */
60: caddr_t ui_addr; /* address of device in i/o space */
61: short ui_dk; /* if init 1 set to number for iostat */
62: short ui_flags; /* parameter from system specification */
63: short ui_alive; /* device exists */
64: short ui_type; /* driver specific type information */
65: caddr_t ui_physaddr; /* phys addr, for standalone (dump) code */
66: /* this is the forward link in a list of devices on a controller */
67: struct vba_device *ui_forw;
68: /* if the device is connected to a controller, this is the controller */
69: struct vba_ctlr *ui_mi;
70: };
71: #endif
72:
73: /*
74: * Per-driver structure.
75: *
76: * Each Versabus driver defines entries for a set of routines
77: * as well as an array of types which are acceptable to it.
78: * These are used at boot time by the configuration program.
79: */
80: struct vba_driver {
81: int (*ud_probe)(); /* see if a driver is really there */
82: int (*ud_slave)(); /* see if a slave is there */
83: int (*ud_attach)(); /* setup driver for a slave */
84: int (*ud_dgo)(); /* fill csr/ba to start transfer */
85: long *ud_addr; /* device csr addresses */
86: char *ud_dname; /* name of a device */
87: struct vba_device **ud_dinfo; /* backpointers to vbdinit structs */
88: char *ud_mname; /* name of a controller */
89: struct vba_ctlr **ud_minfo; /* backpointers to vbminit structs */
90: short ud_xclu; /* want exclusive use of bdp's */
91: };
92:
93: /*
94: * Flags to VBA map/bdp allocation routines
95: */
96: #define VBA_NEEDBDP 1 /* transfer needs a bdp */
97: #define VBA_CANTWAIT 2 /* don't block me */
98: #define VBA_NEED16 3 /* need 16 bit addresses only */
99:
100: #define numvba 1 /* number of vba's */
101: #ifndef LOCORE
102: #ifdef KERNEL
103: /*
104: * VBA related kernel variables
105: */
106:
107: /*
108: * Vbminit and vbdinit initialize the mass storage controller and
109: * device tables specifying possible devices.
110: */
111: extern struct vba_ctlr vbminit[];
112: extern struct vba_device vbdinit[];
113:
114: /*
115: * Versabus device address space is mapped by VMEMmap
116: * into virtual address umem[][].
117: */
118: extern struct pte VMEMmap[]; /* vba device addr pte's */
119: extern char vmem[]; /* vba device addr space */
120:
121: #endif KERNEL
122: #endif !LOCORE
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.