xref: /original-bsd/sys/vax/mba/mbavar.h (revision e74403ba)
1 /*	mbavar.h	6.1	83/07/29	*/
2 
3 /*
4  * This file contains definitions related to the kernel structures
5  * for dealing with the massbus adapters.
6  *
7  * Each mba has a mba_hd structure.
8  * Each massbus device has a mba_device structure.
9  * Each massbus slave has a mba_slave structure.
10  *
11  * At boot time we prowl the structures and fill in the pointers
12  * for devices which we find.
13  */
14 
15 /*
16  * Per-mba structure.
17  *
18  * The initialization routine uses the information in the mbdinit table
19  * to initialize the what is attached to each massbus slot information.
20  * It counts the number of devices on each mba (to see if bothering to
21  * search/seek is appropriate).
22  *
23  * During normal operation, the devices attached to the mba which wish
24  * to transfer are queued on the mh_act? links.
25  */
26 struct	mba_hd {
27 	short	mh_active;		/* set if mba is active */
28 	short	mh_ndrive;		/* number of devices, to avoid seeks */
29 	struct	mba_regs *mh_mba;	/* virt addr of mba */
30 	struct	mba_regs *mh_physmba;	/* phys addr of mba */
31 	struct	mba_device *mh_mbip[8];	/* what is attached to each dev */
32 	struct	mba_device *mh_actf;	/* head of queue to transfer */
33 	struct	mba_device *mh_actl;	/* tail of queue to transfer */
34 };
35 
36 /*
37  * Per-device structure
38  * (one for each RM/RP disk, and one for each tape formatter).
39  *
40  * This structure is used by the device driver as its argument
41  * to the massbus driver, and by the massbus driver to locate
42  * the device driver for a particular massbus slot.
43  *
44  * The device drivers hang ready buffers on this structure,
45  * and the massbus driver will start i/o on the first such buffer
46  * when appropriate.
47  */
48 struct	mba_device {
49 	struct	mba_driver *mi_driver;
50 	short	mi_unit;	/* unit number to the system */
51 	short	mi_mbanum;	/* the mba it is on */
52 	short	mi_drive;	/* controller on mba */
53 	short	mi_dk;		/* driver number for iostat */
54 	short	mi_alive;	/* device exists */
55 	short	mi_type;	/* driver specific unit type */
56 	struct	buf mi_tab;	/* head of queue for this device */
57 	struct	mba_device *mi_forw;
58 /* we could compute these every time, but hereby save time */
59 	struct	mba_regs *mi_mba;
60 	struct	mba_drv *mi_drv;
61 	struct	mba_hd *mi_hd;
62 };
63 
64 /*
65  * Tape formatter slaves are specified by
66  * the following information which is used
67  * at boot time to initialize the tape driver
68  * internal tables.
69  */
70 struct	mba_slave {
71 	struct	mba_driver *ms_driver;
72 	short	ms_ctlr;		/* which of several formatters */
73 	short	ms_unit;		/* which unit to system */
74 	short	ms_slave;		/* which slave to formatter */
75 	short	ms_alive;
76 };
77 
78 /*
79  * Per device-type structure.
80  *
81  * Each massbus driver defines entries for a set of routines used
82  * by the massbus driver, as well as an array of types which are
83  * acceptable to it.
84  */
85 struct mba_driver {
86 	int	(*md_attach)();		/* attach a device */
87 	int	(*md_slave)();		/* attach a slave */
88 	int	(*md_ustart)();		/* unit start routine */
89 	int	(*md_start)();		/* setup a data transfer */
90 	int	(*md_dtint)();		/* data transfer complete */
91 	int	(*md_ndint)();		/* non-data transfer interrupt */
92 	short	*md_type;		/* array of drive type codes */
93 	char	*md_dname, *md_sname;	/* device, slave names */
94 	struct	mba_device **md_info;	/* backpointers to mbinit structs */
95 };
96 
97 /*
98  * Possible return values from unit start routines.
99  */
100 #define	MBU_NEXT	0		/* skip to next operation */
101 #define	MBU_BUSY	1		/* dual port busy; wait for intr */
102 #define	MBU_STARTED	2		/* non-data transfer started */
103 #define	MBU_DODATA	3		/* data transfer ready; start mba */
104 
105 /*
106  * Possible return values from data transfer interrupt handling routines
107  */
108 #define	MBD_DONE	0		/* data transfer complete */
109 #define	MBD_RETRY	1		/* error occurred, please retry */
110 #define	MBD_RESTARTED	2		/* driver restarted i/o itself */
111 
112 /*
113  * Possible return values from non-data-transfer interrupt handling routines
114  */
115 #define	MBN_DONE	0		/* non-data transfer complete */
116 #define	MBN_RETRY	1		/* failed; retry the operation */
117 #define	MBN_SKIP	2		/* don't do anything */
118 
119 /*
120  * Clear attention status for specified device.
121  */
122 #define	mbclrattn(mi)	((mi)->mi_mba->mba_drv[0].mbd_as = 1 << (mi)->mi_drive)
123 
124 /*
125  * Kernel definitions related to mba.
126  */
127 #ifdef KERNEL
128 int	nummba;
129 #if NMBA > 0
130 struct	mba_hd mba_hd[NMBA];
131 extern	Xmba0int(), Xmba1int(), Xmba2int(), Xmba3int();
132 
133 extern	struct	mba_device mbdinit[];
134 extern	struct	mba_slave mbsinit[];
135 #endif
136 #endif
137