1 /*	$OpenBSD: isa_machdep.h,v 1.19 2003/06/02 23:27:47 millert 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  * XXX THIS FILE IS A MESS.  copyright: berkeley's probably.
87  * contents from isavar.h and isareg.h, mostly the latter.
88  * perhaps charles's?
89  *
90  * copyright from berkeley's isa.h which is now dev/isa/isareg.h.
91  */
92 
93 /*
94  * Types provided to machine-independent ISA code.
95  */
96 typedef void *isa_chipset_tag_t;
97 
98 struct device;			/* XXX */
99 struct isabus_attach_args;	/* XXX */
100 
101 /*
102  * Functions provided to machine-independent ISA code.
103  */
104 void	isa_attach_hook(struct device *, struct device *,
105 	    struct isabus_attach_args *);
106 int	isa_intr_alloc(isa_chipset_tag_t, int, int, int *);
107 int	isa_intr_check(isa_chipset_tag_t, int, int);
108 void	*isa_intr_establish(isa_chipset_tag_t ic, int irq, int type,
109 	    int level, int (*ih_fun)(void *), void *ih_arg, char *ih_what);
110 void	isa_intr_disestablish(isa_chipset_tag_t ic, void *handler);
111 
112 /*
113  * ALL OF THE FOLLOWING ARE MACHINE-DEPENDENT, AND SHOULD NOT BE USED
114  * BY PORTABLE CODE.
115  */
116 
117 extern struct i386_bus_dma_tag isa_bus_dma_tag;
118 
119 /*
120  * Cookie used by ISA dma.  A pointer to one of these it stashed in
121  * the DMA map.
122  */
123 struct i386_isa_dma_cookie {
124 	int	id_flags;		/* flags; see below */
125 
126 	void	*id_origbuf;		/* pointer to orig buffer if
127 					   bouncing */
128 	bus_size_t id_origbuflen;	/* ...and size */
129 
130 	void	*id_bouncebuf;		/* pointer to the bounce buffer */
131 	bus_size_t id_bouncebuflen;	/* ...and size */
132 	int	id_nbouncesegs;		/* number of valid bounce segs */
133 	bus_dma_segment_t id_bouncesegs[0]; /* array of bounce buffer
134 					       physical memory segments */
135 };
136 
137 /* id_flags */
138 #define	ID_MIGHT_NEED_BOUNCE	0x01	/* map could need bounce buffers */
139 #define	ID_HAS_BOUNCE		0x02	/* map currently has bounce buffers */
140 #define	ID_IS_BOUNCING		0x04	/* map is bouncing current xfer */
141 
142 /*
143  * XXX Various seemingly PC-specific constants, some of which may be
144  * unnecessary anyway.
145  */
146 
147 /*
148  * RAM Physical Address Space (ignoring the above mentioned "hole")
149  */
150 #define	RAM_BEGIN	0x0000000	/* Start of RAM Memory */
151 #define	RAM_END		0x1000000	/* End of RAM Memory */
152 #define	RAM_SIZE	(RAM_END - RAM_BEGIN)
153 
154 /*
155  * Oddball Physical Memory Addresses
156  */
157 #define	COMPAQ_RAMRELOC	0x80c00000	/* Compaq RAM relocation/diag */
158 #define	COMPAQ_RAMSETUP	0x80c00002	/* Compaq RAM setup */
159 #define	WEITEK_FPU	0xC0000000	/* WTL 2167 */
160 #define	CYRIX_EMC	0xC0000000	/* Cyrix EMC */
161 
162 /*
163  * stuff that used to be in pccons.c
164  */
165 #define	MONO_BUF	0xB0000
166 #define	CGA_BUF		0xB8000
167 #define	IOPHYSMEM	0xA0000
168 
169 
170 /*
171  * ISA DMA bounce buffers.
172  * XXX should be made partially machine- and bus-mapping-independent.
173  *
174  * DMA_BOUNCE is the number of pages of low-addressed physical memory
175  * to acquire for ISA bounce buffers. If physical memory below 16 MB
176  * then DMA_BOUNCE_LOW will be used.
177  *
178  * isaphysmem is the address of this physical contiguous low memory.
179  * isaphysmempgs is the number of pages allocated.
180  */
181 
182 #ifndef DMA_BOUNCE
183 #define	DMA_BOUNCE      48		/* number of pages if memory > 16M */
184 #endif
185 
186 #ifndef DMA_BOUNCE_LOW
187 #define	DMA_BOUNCE_LOW  16		/* number of pages if memory <= 16M */
188 #endif
189 
190 extern vaddr_t isaphysmem;
191 extern int isaphysmempgs;
192 
193 
194 /*
195  * Variables and macros to deal with the ISA I/O hole.
196  * XXX These should be converted to machine- and bus-mapping-independent
197  * function definitions, invoked through the softc.
198  */
199 
200 extern u_long atdevbase;           /* kernel virtual address of "hole" */
201 
202 /*
203  * Given a kernel virtual address for some location
204  * in the "hole" I/O space, return a physical address.
205  */
206 #define ISA_PHYSADDR(v) ((void *) ((u_long)(v) - atdevbase + IOM_BEGIN))
207 
208 /*
209  * Given a physical address in the "hole",
210  * return a kernel virtual address.
211  */
212 #define ISA_HOLE_VADDR(p)  ((void *) ((u_long)(p) - IOM_BEGIN + atdevbase))
213 
214 
215 /*
216  * Miscellanous functions.
217  */
218 void sysbeep(int, int);		/* beep with the system speaker */
219 
220 #endif /* _I386_ISA_MACHDEP_H_ XXX */
221