xref: /csrg-svn/sys/tahoe/vba/vbavar.h (revision 25857)
1 /*	vbavar.h	1.2	86/01/12	*/
2 
3 /*
4  * This file contains definitions related to the kernel structures
5  * for dealing with the Versabus adapters.
6  *
7  * Each Versabus has a vba_hd structure.
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 
12 #ifndef LOCORE
13 /*
14  * Per-vba structure.
15  */
16 struct	vba_hd {
17 	int	vh_lastiv;		/* last interrupt vector assigned */
18 };
19 
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  */
31 struct 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 */
38 	struct	vba_hd *um_hd;
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  */
61 struct 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;
78 	struct	vba_hd *ui_hd;
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  */
89 struct 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 */
99 };
100 
101 #ifndef LOCORE
102 #ifdef KERNEL
103 /*
104  * VBA related kernel variables
105  */
106 int	numvba;					/* number of uba's */
107 struct	vba_hd vba_hd[];
108 
109 /*
110  * Vbminit and vbdinit initialize the mass storage controller and
111  * device tables specifying possible devices.
112  */
113 extern	struct	vba_ctlr vbminit[];
114 extern	struct	vba_device vbdinit[];
115 
116 /*
117  * Versabus device address space is mapped by VMEMmap
118  * into virtual address umem[][].
119  */
120 extern	struct pte VMEMmap[];	/* vba device addr pte's */
121 extern	char vmem[];		/* vba device addr space */
122 
123 #endif KERNEL
124 #endif !LOCORE
125