Commit | Line | Data |
---|---|---|
430f81c3 MK |
1 | /* |
2 | * Copyright (c) 1988 Regents of the University of California. | |
3 | * All rights reserved. | |
4 | * | |
1c15e888 C |
5 | * Redistribution is only permitted until one year after the first shipment |
6 | * of 4.4BSD by the Regents. Otherwise, redistribution and use in source and | |
7 | * binary forms are permitted provided that: (1) source distributions retain | |
8 | * this entire copyright notice and comment, and (2) distributions including | |
9 | * binaries display the following acknowledgement: This product includes | |
10 | * software developed by the University of California, Berkeley and its | |
11 | * contributors'' in the documentation or other materials provided with the | |
12 | * distribution and in all advertising materials mentioning features or use | |
13 | * of this software. Neither the name of the University nor the names of | |
14 | * its contributors may be used to endorse or promote products derived from | |
15 | * this software without specific prior written permission. | |
16 | * THIS SOFTWARE IS PROVIDED AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED | |
17 | * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF | |
18 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | |
430f81c3 | 19 | * |
1c15e888 | 20 | * @(#)vbavar.h 7.5 (Berkeley) 6/28/90 |
430f81c3 | 21 | */ |
e67951b3 SL |
22 | |
23 | /* | |
24 | * This file contains definitions related to the kernel structures | |
87c4412d | 25 | * for dealing with the VERSAbus adapters. |
e67951b3 | 26 | * |
87c4412d SL |
27 | * Each VERSAbus has a vba_hd structure. |
28 | * Each VERSAbus controller which is not a device has a vba_ctlr structure. | |
29 | * Each VERSAbus device has a vba_device structure. | |
e67951b3 SL |
30 | */ |
31 | ||
e67951b3 | 32 | #ifndef LOCORE |
336ca318 SL |
33 | /* |
34 | * Per-vba structure. | |
35 | */ | |
36 | struct vba_hd { | |
37 | int vh_lastiv; /* last interrupt vector assigned */ | |
38 | }; | |
39 | ||
e67951b3 SL |
40 | /* |
41 | * Per-controller structure. | |
42 | * (E.g. one for each disk and tape controller, and other things | |
43 | * which use and release buffered data paths.) | |
44 | * | |
45 | * If a controller has devices attached, then there are | |
46 | * cross-referenced vba_drive structures. | |
87c4412d SL |
47 | * This structure is the one which is queued in VERSAbus resource wait, |
48 | * and saves the information about VERSAbus resources which are used. | |
e67951b3 SL |
49 | * The queue of devices waiting to transfer is also attached here. |
50 | */ | |
51 | struct vba_ctlr { | |
52 | struct vba_driver *um_driver; | |
53 | short um_ctlr; /* controller index in driver */ | |
54 | short um_vbanum; /* the vba it is on */ | |
55 | short um_alive; /* controller exists */ | |
56 | int (**um_intr)(); /* interrupt handler(s) */ | |
57 | caddr_t um_addr; /* address of device in i/o space */ | |
336ca318 | 58 | struct vba_hd *um_hd; |
e67951b3 SL |
59 | /* the driver saves the prototype command here for use in its go routine */ |
60 | int um_cmd; /* communication to dgo() */ | |
87c4412d | 61 | int um_vbinfo; /* save VERSAbus registers, etc */ |
e67951b3 SL |
62 | struct buf um_tab; /* queue of devices for this controller */ |
63 | }; | |
64 | ||
65 | /* | |
66 | * Per ``device'' structure. | |
67 | * (A controller has devices or uses and releases buffered data paths). | |
68 | * (Everything else is a ``device''.) | |
69 | * | |
70 | * If a controller has many drives attached, then there will | |
71 | * be several vba_device structures associated with a single vba_ctlr | |
72 | * structure. | |
73 | * | |
74 | * This structure contains all the information necessary to run | |
87c4412d SL |
75 | * a VERSAbus device. It also contains information |
76 | * for slaves of VERSAbus controllers as to which device on the slave | |
e67951b3 | 77 | * this is. A flags field here can also be given in the system specification |
87c4412d | 78 | * and is used to tell which tty lines are hard wired or other device |
e67951b3 SL |
79 | * specific parameters. |
80 | */ | |
81 | struct vba_device { | |
82 | struct vba_driver *ui_driver; | |
83 | short ui_unit; /* unit number on the system */ | |
84 | short ui_ctlr; /* mass ctlr number; -1 if none */ | |
85 | short ui_vbanum; /* the vba it is on */ | |
86 | short ui_slave; /* slave on controller */ | |
87 | int (**ui_intr)(); /* interrupt handler(s) */ | |
88 | caddr_t ui_addr; /* address of device in i/o space */ | |
89 | short ui_dk; /* if init 1 set to number for iostat */ | |
87c4412d | 90 | long ui_flags; /* parameter from system specification */ |
e67951b3 SL |
91 | short ui_alive; /* device exists */ |
92 | short ui_type; /* driver specific type information */ | |
93 | caddr_t ui_physaddr; /* phys addr, for standalone (dump) code */ | |
94 | /* this is the forward link in a list of devices on a controller */ | |
95 | struct vba_device *ui_forw; | |
96 | /* if the device is connected to a controller, this is the controller */ | |
97 | struct vba_ctlr *ui_mi; | |
336ca318 | 98 | struct vba_hd *ui_hd; |
e67951b3 SL |
99 | }; |
100 | #endif | |
101 | ||
102 | /* | |
103 | * Per-driver structure. | |
104 | * | |
87c4412d | 105 | * Each VERSAbus driver defines entries for a set of routines |
e67951b3 SL |
106 | * as well as an array of types which are acceptable to it. |
107 | * These are used at boot time by the configuration program. | |
108 | */ | |
109 | struct vba_driver { | |
110 | int (*ud_probe)(); /* see if a driver is really there */ | |
111 | int (*ud_slave)(); /* see if a slave is there */ | |
112 | int (*ud_attach)(); /* setup driver for a slave */ | |
113 | int (*ud_dgo)(); /* fill csr/ba to start transfer */ | |
114 | long *ud_addr; /* device csr addresses */ | |
115 | char *ud_dname; /* name of a device */ | |
116 | struct vba_device **ud_dinfo; /* backpointers to vbdinit structs */ | |
117 | char *ud_mname; /* name of a controller */ | |
118 | struct vba_ctlr **ud_minfo; /* backpointers to vbminit structs */ | |
e67951b3 SL |
119 | }; |
120 | ||
1f9a1539 MK |
121 | /* |
122 | * Common state for Versabus driver I/O resources, | |
123 | * including memory for intermediate buffer and page map, | |
124 | * allocated by vbainit. | |
125 | */ | |
126 | struct vb_buf { | |
127 | /* these fields set up once by vbainit */ | |
128 | int vb_flags; /* device parameters */ | |
129 | struct pte *vb_map; /* private page entries */ | |
130 | caddr_t vb_utl; /* virtual addresses mapped by vb_map */ | |
131 | caddr_t vb_rawbuf; /* intermediate buffer */ | |
132 | u_long vb_physbuf; /* phys addr of intermediate buffer */ | |
ef2ed459 | 133 | u_long vb_bufsize; /* intermediate buffer size */ |
1f9a1539 MK |
134 | u_long vb_maxphys; /* physical address limit */ |
135 | /* remaining fields apply to current transfer: */ | |
136 | int vb_copy; /* copy to/from intermediate buffer */ | |
137 | int vb_iskernel; /* is to/from kernel address space */ | |
138 | }; | |
139 | ||
140 | /* | |
141 | * flags to vbainit | |
142 | */ | |
143 | #define VB_32BIT 0x00 /* device uses 32-bit addressing */ | |
144 | #define VB_24BIT 0x01 /* device uses 24-bit addressing */ | |
145 | #define VB_20BIT 0x02 /* device uses 20-bit addressing */ | |
146 | #define VB_SCATTER 0x04 /* device does scatter-gather */ | |
147 | ||
148 | /* | |
acc1f6a2 MK |
149 | * hardware memory-addressing limits: highest physical address |
150 | * that each address length can use for main memory access. | |
1f9a1539 MK |
151 | */ |
152 | #define VB_MAXADDR20 0x000fffff /* highest addr for 20-bit */ | |
acc1f6a2 | 153 | #define VB_MAXADDR24 0x00efffff /* highest addr for 23/24-bit */ |
1f9a1539 MK |
154 | #define VB_MAXADDR32 0x3effffff /* highest addr for 32-bit */ |
155 | ||
156 | /* | |
157 | * Statistics on vba operations. | |
158 | */ | |
159 | struct vbastat { | |
ef2ed459 MK |
160 | u_long k_raw; /* to/from contiguous kernel DMA buffer */ |
161 | u_long u_raw; /* to/from contiguous user DMA buffer */ | |
162 | u_long k_copy; /* copied to/from kernel */ | |
163 | u_long u_copy; /* copied to/from user */ | |
164 | u_long k_sg; /* scatter-gather to/from kernel */ | |
165 | u_long u_sg; /* scatter-gather to/from user */ | |
1f9a1539 MK |
166 | }; |
167 | ||
e67951b3 SL |
168 | #ifndef LOCORE |
169 | #ifdef KERNEL | |
170 | /* | |
171 | * VBA related kernel variables | |
172 | */ | |
336ca318 SL |
173 | int numvba; /* number of uba's */ |
174 | struct vba_hd vba_hd[]; | |
1f9a1539 | 175 | struct vbastat vbastat; |
e67951b3 SL |
176 | |
177 | /* | |
178 | * Vbminit and vbdinit initialize the mass storage controller and | |
179 | * device tables specifying possible devices. | |
180 | */ | |
181 | extern struct vba_ctlr vbminit[]; | |
182 | extern struct vba_device vbdinit[]; | |
183 | ||
184 | /* | |
87c4412d | 185 | * VERSAbus device address space is mapped by VMEMmap |
68876947 | 186 | * into virtual address vmem[]. |
e67951b3 SL |
187 | */ |
188 | extern struct pte VMEMmap[]; /* vba device addr pte's */ | |
68876947 | 189 | extern char vmem[]; /* vba device addr space */ |
1f9a1539 | 190 | u_long vbasetup(); |
e67951b3 SL |
191 | #endif KERNEL |
192 | #endif !LOCORE |