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