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