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