Commit | Line | Data |
---|---|---|
ba9bfaab C |
1 | /* mbavar.h 4.15 81/04/08 */ |
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 |