1 /* $OpenBSD: isa_machdep.h,v 1.21 2006/02/12 19:55:39 miod Exp $ */
2 /* $NetBSD: isa_machdep.h,v 1.7 1997/06/06 23:28:42 thorpej Exp $ */
3
4 /*-
5 * Copyright (c) 1996, 1997 The NetBSD Foundation, Inc.
6 * All rights reserved.
7 *
8 * This code is derived from software contributed to The NetBSD Foundation
9 * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
10 * NASA Ames Research Center.
11 *
12 * Redistribution and use in source and binary forms, with or without
13 * modification, are permitted provided that the following conditions
14 * are met:
15 * 1. Redistributions of source code must retain the above copyright
16 * notice, this list of conditions and the following disclaimer.
17 * 2. Redistributions in binary form must reproduce the above copyright
18 * notice, this list of conditions and the following disclaimer in the
19 * documentation and/or other materials provided with the distribution.
20 * 3. All advertising materials mentioning features or use of this software
21 * must display the following acknowledgement:
22 * This product includes software developed by the NetBSD
23 * Foundation, Inc. and its contributors.
24 * 4. Neither the name of The NetBSD Foundation nor the names of its
25 * contributors may be used to endorse or promote products derived
26 * from this software without specific prior written permission.
27 *
28 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
29 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
30 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
31 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
32 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
33 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
34 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
35 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
36 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
37 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
38 * POSSIBILITY OF SUCH DAMAGE.
39 */
40
41 /*-
42 * Copyright (c) 1990 The Regents of the University of California.
43 * All rights reserved.
44 *
45 * This code is derived from software contributed to Berkeley by
46 * William Jolitz.
47 *
48 * Redistribution and use in source and binary forms, with or without
49 * modification, are permitted provided that the following conditions
50 * are met:
51 * 1. Redistributions of source code must retain the above copyright
52 * notice, this list of conditions and the following disclaimer.
53 * 2. Redistributions in binary form must reproduce the above copyright
54 * notice, this list of conditions and the following disclaimer in the
55 * documentation and/or other materials provided with the distribution.
56 * 3. Neither the name of the University nor the names of its contributors
57 * may be used to endorse or promote products derived from this software
58 * without specific prior written permission.
59 *
60 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
61 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
62 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
63 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
64 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
65 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
66 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
67 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
68 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
69 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
70 * SUCH DAMAGE.
71 *
72 * @(#)isa.h 5.7 (Berkeley) 5/9/91
73 */
74
75 /*
76 * Various pieces of the i386 port want to include this file without
77 * or in spite of using isavar.h, and should be fixed.
78 */
79
80 #ifndef _I386_ISA_MACHDEP_H_ /* XXX */
81 #define _I386_ISA_MACHDEP_H_ /* XXX */
82
83 #include <machine/bus.h>
84
85 /*
86 * ISA can only DMA to 0-16M.
87 */
88 #define ISA_DMA_BOUNCE_THRESHOLD 0x00ffffff
89
90 /*
91 * XXX THIS FILE IS A MESS. copyright: berkeley's probably.
92 * contents from isavar.h and isareg.h, mostly the latter.
93 * perhaps charles's?
94 *
95 * copyright from berkeley's isa.h which is now dev/isa/isareg.h.
96 */
97
98 /*
99 * Types provided to machine-independent ISA code.
100 */
101 typedef void *isa_chipset_tag_t;
102
103 struct device; /* XXX */
104 struct isabus_attach_args; /* XXX */
105
106 /*
107 * Functions provided to machine-independent ISA code.
108 */
109 void isa_attach_hook(struct device *, struct device *,
110 struct isabus_attach_args *);
111 int isa_intr_alloc(isa_chipset_tag_t, int, int, int *);
112 int isa_intr_check(isa_chipset_tag_t, int, int);
113 void *isa_intr_establish(isa_chipset_tag_t ic, int irq, int type,
114 int level, int (*ih_fun)(void *), void *ih_arg, char *ih_what);
115 void isa_intr_disestablish(isa_chipset_tag_t ic, void *handler);
116
117 /*
118 * ALL OF THE FOLLOWING ARE MACHINE-DEPENDENT, AND SHOULD NOT BE USED
119 * BY PORTABLE CODE.
120 */
121
122 extern struct i386_bus_dma_tag isa_bus_dma_tag;
123
124 /*
125 * Cookie used by ISA dma. A pointer to one of these it stashed in
126 * the DMA map.
127 */
128 struct i386_isa_dma_cookie {
129 int id_flags; /* flags; see below */
130
131 void *id_origbuf; /* pointer to orig buffer if
132 bouncing */
133 bus_size_t id_origbuflen; /* ...and size */
134
135 void *id_bouncebuf; /* pointer to the bounce buffer */
136 bus_size_t id_bouncebuflen; /* ...and size */
137 int id_nbouncesegs; /* number of valid bounce segs */
138 bus_dma_segment_t id_bouncesegs[0]; /* array of bounce buffer
139 physical memory segments */
140 };
141
142 /* id_flags */
143 #define ID_MIGHT_NEED_BOUNCE 0x01 /* map could need bounce buffers */
144 #define ID_HAS_BOUNCE 0x02 /* map currently has bounce buffers */
145 #define ID_IS_BOUNCING 0x04 /* map is bouncing current xfer */
146
147 /*
148 * XXX Various seemingly PC-specific constants, some of which may be
149 * unnecessary anyway.
150 */
151
152 /*
153 * RAM Physical Address Space (ignoring the above mentioned "hole")
154 */
155 #define RAM_BEGIN 0x0000000 /* Start of RAM Memory */
156 #define RAM_END 0x1000000 /* End of RAM Memory */
157 #define RAM_SIZE (RAM_END - RAM_BEGIN)
158
159 /*
160 * Oddball Physical Memory Addresses
161 */
162 #define COMPAQ_RAMRELOC 0x80c00000 /* Compaq RAM relocation/diag */
163 #define COMPAQ_RAMSETUP 0x80c00002 /* Compaq RAM setup */
164 #define WEITEK_FPU 0xC0000000 /* WTL 2167 */
165 #define CYRIX_EMC 0xC0000000 /* Cyrix EMC */
166
167 /*
168 * stuff that used to be in pccons.c
169 */
170 #define MONO_BUF 0xB0000
171 #define CGA_BUF 0xB8000
172 #define IOPHYSMEM 0xA0000
173
174
175 /*
176 * ISA DMA bounce buffers.
177 * XXX should be made partially machine- and bus-mapping-independent.
178 *
179 * DMA_BOUNCE is the number of pages of low-addressed physical memory
180 * to acquire for ISA bounce buffers. If physical memory below 16 MB
181 * then DMA_BOUNCE_LOW will be used.
182 *
183 * isaphysmem is the address of this physical contiguous low memory.
184 * isaphysmempgs is the number of pages allocated.
185 */
186
187 #ifndef DMA_BOUNCE
188 #define DMA_BOUNCE 48 /* number of pages if memory > 16M */
189 #endif
190
191 #ifndef DMA_BOUNCE_LOW
192 #define DMA_BOUNCE_LOW 16 /* number of pages if memory <= 16M */
193 #endif
194
195 extern vaddr_t isaphysmem;
196 extern int isaphysmempgs;
197
198
199 /*
200 * Variables and macros to deal with the ISA I/O hole.
201 * XXX These should be converted to machine- and bus-mapping-independent
202 * function definitions, invoked through the softc.
203 */
204
205 extern u_long atdevbase; /* kernel virtual address of "hole" */
206
207 /*
208 * Given a kernel virtual address for some location
209 * in the "hole" I/O space, return a physical address.
210 */
211 #define ISA_PHYSADDR(v) ((void *) ((u_long)(v) - atdevbase + IOM_BEGIN))
212
213 /*
214 * Given a physical address in the "hole",
215 * return a kernel virtual address.
216 */
217 #define ISA_HOLE_VADDR(p) ((void *) ((u_long)(p) - IOM_BEGIN + atdevbase))
218
219 #endif /* _I386_ISA_MACHDEP_H_ XXX */