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