annotate libdha/AsmMacros.h @ 4042:d651a7b5d213

STREAMTYPE_PLAYLIST introduced. similar to STREAMTYPE_STREAM but used for playlists. patch by Alban Bedel <albeu@free.fr>
author arpi
date Tue, 08 Jan 2002 01:19:54 +0000
parents 138800dfbe22
children 7b85e545cfb9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
1 /* $XConsortium: AsmMacros.h /main/13 1996/10/25 11:33:12 kaleb $ */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
2 /*
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
3 * (c) Copyright 1993,1994 by David Wexelblat <dwex@xfree86.org>
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
4 *
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
5 * Permission is hereby granted, free of charge, to any person obtaining a
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
6 * copy of this software and associated documentation files (the "Software"),
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
7 * to deal in the Software without restriction, including without limitation
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
9 * and/or sell copies of the Software, and to permit persons to whom the
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
10 * Software is furnished to do so, subject to the following conditions:
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
11 *
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
12 * The above copyright notice and this permission notice shall be included in
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
13 * all copies or substantial portions of the Software.
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
14 *
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
18 * DAVID WEXELBLAT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
19 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
20 * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
21 * SOFTWARE.
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
22 *
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
23 * Except as contained in this notice, the name of David Wexelblat shall not be
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
24 * used in advertising or otherwise to promote the sale, use or other dealings
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
25 * in this Software without prior written authorization from David Wexelblat.
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
26 *
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
27 */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
28 /*
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
29 * Copyright 1997
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
30 * Digital Equipment Corporation. All rights reserved.
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
31 * This software is furnished under license and may be used and copied only in
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
32 * accordance with the following terms and conditions. Subject to these
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
33 * conditions, you may download, copy, install, use, modify and distribute
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
34 * this software in source and/or binary form. No title or ownership is
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
35 * transferred hereby.
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
36 *
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
37 * 1) Any source code used, modified or distributed must reproduce and retain
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
38 * this copyright notice and list of conditions as they appear in the source
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
39 * file.
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
40 *
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
41 * 2) No right is granted to use any trade name, trademark, or logo of Digital
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
42 * Equipment Corporation. Neither the "Digital Equipment Corporation" name
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
43 * nor any trademark or logo of Digital Equipment Corporation may be used
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
44 * to endorse or promote products derived from this software without the
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
45 * prior written permission of Digital Equipment Corporation.
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
46 *
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
47 * 3) This software is provided "AS-IS" and any express or implied warranties,
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
48 * including but not limited to, any implied warranties of merchantability,
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
49 * fitness for a particular purpose, or non-infringement are disclaimed. In
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
50 * no event shall DIGITAL be liable for any damages whatsoever, and in
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
51 * particular, DIGITAL shall not be liable for special, indirect,
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
52 * consequential, or incidental damages or damages for
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
53 * lost profits, loss of revenue or loss of use, whether such damages arise
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
54 * in contract,
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
55 * negligence, tort, under statute, in equity, at law or otherwise, even if
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
56 * advised of the possibility of such damage.
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
57 *
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
58 */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
59
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
60
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
61
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
62
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
63 /* $XFree86: xc/programs/Xserver/hw/xfree86/SuperProbe/AsmMacros.h,v 3.13 1999/03/28 15:32:21 dawes Exp $ */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
64
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
65 #if defined(__GNUC__)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
66 #if defined(linux) && defined(__alpha__)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
67 #define inb _inb
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
68 #define inw _inw
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
69 #define inl _inl
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
70 #define outb(p,v) _outb((v),(p))
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
71 #define outw(p,v) _outw((v),(p))
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
72 #define outl(p,v) _outl((v),(p))
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
73 #else
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
74 #if defined(__sparc__)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
75 #ifndef ASI_PL
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
76 #define ASI_PL 0x88
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
77 #endif
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
78
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
79 static __inline__ void
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
80 outb(port, val)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
81 unsigned long port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
82 char val;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
83 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
84 __asm__ __volatile__("stba %0, [%1] %2" : : "r" (val), "r" (port), "i" (ASI_PL));
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
85 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
86
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
87 static __inline__ void
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
88 outw(port, val)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
89 unsigned long port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
90 char val;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
91 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
92 __asm__ __volatile__("stha %0, [%1] %2" : : "r" (val), "r" (port), "i" (ASI_PL));
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
93 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
94
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
95 static __inline__ void
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
96 outl(port, val)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
97 unsigned long port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
98 char val;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
99 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
100 __asm__ __volatile__("sta %0, [%1] %2" : : "r" (val), "r" (port), "i" (ASI_PL));
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
101 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
102
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
103 static __inline__ unsigned int
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
104 inb(port)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
105 unsigned long port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
106 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
107 unsigned char ret;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
108 __asm__ __volatile__("lduba [%1] %2, %0" : "=r" (ret) : "r" (port), "i" (ASI_PL));
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
109 return ret;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
110 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
111
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
112 static __inline__ unsigned int
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
113 inw(port)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
114 unsigned long port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
115 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
116 unsigned char ret;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
117 __asm__ __volatile__("lduha [%1] %2, %0" : "=r" (ret) : "r" (port), "i" (ASI_PL));
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
118 return ret;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
119 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
120
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
121 static __inline__ unsigned int
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
122 inl(port)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
123 unsigned long port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
124 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
125 unsigned char ret;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
126 __asm__ __volatile__("lda [%1] %2, %0" : "=r" (ret) : "r" (port), "i" (ASI_PL));
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
127 return ret;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
128 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
129 #else
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
130 #ifdef __arm32__
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
131 unsigned int IOPortBase; /* Memory mapped I/O port area */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
132
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
133 static __inline__ void
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
134 outb(port, val)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
135 short port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
136 char val;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
137 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
138 if ((unsigned short)port >= 0x400) return;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
139
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
140 *(volatile unsigned char*)(((unsigned short)(port))+IOPortBase) = val;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
141 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
142
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
143 static __inline__ void
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
144 outw(port, val)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
145 short port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
146 short val;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
147 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
148 if ((unsigned short)port >= 0x400) return;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
149
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
150 *(volatile unsigned short*)(((unsigned short)(port))+IOPortBase) = val;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
151 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
152
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
153 static __inline__ void
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
154 outl(port, val)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
155 short port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
156 int val;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
157 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
158 if ((unsigned short)port >= 0x400) return;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
159
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
160 *(volatile unsigned long*)(((unsigned short)(port))+IOPortBase) = val;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
161 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
162
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
163 static __inline__ unsigned int
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
164 inb(port)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
165 short port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
166 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
167 if ((unsigned short)port >= 0x400) return((unsigned int)-1);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
168
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
169 return(*(volatile unsigned char*)(((unsigned short)(port))+IOPortBase));
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
170 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
171
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
172 static __inline__ unsigned int
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
173 inw(port)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
174 short port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
175 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
176 if ((unsigned short)port >= 0x400) return((unsigned int)-1);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
177
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
178 return(*(volatile unsigned short*)(((unsigned short)(port))+IOPortBase));
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
179 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
180
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
181 static __inline__ unsigned int
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
182 inl(port)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
183 short port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
184 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
185 if ((unsigned short)port >= 0x400) return((unsigned int)-1);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
186
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
187 return(*(volatile unsigned long*)(((unsigned short)(port))+IOPortBase));
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
188 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
189 #else /* __arm32__ */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
190 #if defined(Lynx) && defined(__powerpc__)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
191 extern unsigned char *ioBase;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
192
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
193 static volatile void
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
194 eieio()
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
195 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
196 __asm__ __volatile__ ("eieio");
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
197 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
198
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
199 static void
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
200 outb(port, value)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
201 short port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
202 unsigned char value;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
203 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
204 *(uchar *)(ioBase + port) = value; eieio();
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
205 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
206
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
207 static void
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
208 outw(port, value)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
209 short port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
210 unsigned short value;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
211 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
212 *(unsigned short *)(ioBase + port) = value; eieio();
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
213 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
214
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
215 static void
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
216 outl(port, value)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
217 short port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
218 unsigned long value;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
219 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
220 *(unsigned long *)(ioBase + port) = value; eieio();
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
221 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
222
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
223 static unsigned char
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
224 inb(port)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
225 short port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
226 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
227 unsigned char val;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
228
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
229 val = *((unsigned char *)(ioBase + port)); eieio();
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
230 return(val);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
231 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
232
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
233 static unsigned short
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
234 inw(port)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
235 short port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
236 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
237 unsigned short val;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
238
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
239 val = *((unsigned short *)(ioBase + port)); eieio();
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
240 return(val);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
241 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
242
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
243 static unsigned long
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
244 inl(port)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
245 short port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
246 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
247 unsigned long val;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
248
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
249 val = *((unsigned long *)(ioBase + port)); eieio();
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
250 return(val);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
251 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
252
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
253 #else
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
254 #ifdef GCCUSESGAS
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
255 static __inline__ void
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
256 outb(port, val)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
257 short port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
258 char val;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
259 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
260 __asm__ __volatile__("outb %0,%1" : :"a" (val), "d" (port));
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
261 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
262
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
263 static __inline__ void
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
264 outw(port, val)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
265 short port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
266 short val;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
267 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
268 __asm__ __volatile__("outw %0,%1" : :"a" (val), "d" (port));
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
269 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
270
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
271 static __inline__ void
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
272 outl(port, val)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
273 short port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
274 unsigned int val;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
275 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
276 __asm__ __volatile__("outl %0,%1" : :"a" (val), "d" (port));
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
277 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
278
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
279 static __inline__ unsigned int
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
280 inb(port)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
281 short port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
282 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
283 unsigned char ret;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
284 __asm__ __volatile__("inb %1,%0" :
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
285 "=a" (ret) :
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
286 "d" (port));
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
287 return ret;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
288 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
289
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
290 static __inline__ unsigned int
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
291 inw(port)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
292 short port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
293 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
294 unsigned short ret;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
295 __asm__ __volatile__("inw %1,%0" :
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
296 "=a" (ret) :
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
297 "d" (port));
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
298 return ret;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
299 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
300
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
301 static __inline__ unsigned int
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
302 inl(port)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
303 short port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
304 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
305 unsigned int ret;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
306 __asm__ __volatile__("inl %1,%0" :
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
307 "=a" (ret) :
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
308 "d" (port));
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
309 return ret;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
310 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
311
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
312 #else /* GCCUSESGAS */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
313
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
314 static __inline__ void
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
315 outb(port, val)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
316 short port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
317 char val;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
318 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
319 __asm__ __volatile__("out%B0 (%1)" : :"a" (val), "d" (port));
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
320 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
321
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
322 static __inline__ void
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
323 outw(port, val)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
324 short port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
325 short val;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
326 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
327 __asm__ __volatile__("out%W0 (%1)" : :"a" (val), "d" (port));
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
328 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
329
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
330 static __inline__ void
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
331 outl(port, val)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
332 short port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
333 unsigned int val;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
334 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
335 __asm__ __volatile__("out%L0 (%1)" : :"a" (val), "d" (port));
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
336 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
337
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
338 static __inline__ unsigned int
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
339 inb(port)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
340 short port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
341 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
342 unsigned int ret;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
343 __asm__ __volatile__("in%B0 (%1)" :
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
344 "=a" (ret) :
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
345 "d" (port));
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
346 return ret;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
347 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
348
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
349 static __inline__ unsigned int
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
350 inw(port)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
351 short port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
352 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
353 unsigned int ret;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
354 __asm__ __volatile__("in%W0 (%1)" :
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
355 "=a" (ret) :
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
356 "d" (port));
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
357 return ret;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
358 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
359
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
360 static __inline__ unsigned int
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
361 inl(port)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
362 short port;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
363 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
364 unsigned int ret;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
365 __asm__ __volatile__("in%L0 (%1)" :
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
366 "=a" (ret) :
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
367 "d" (port));
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
368 return ret;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
369 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
370
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
371 #endif /* GCCUSESGAS */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
372 #endif /* Lynx && __powerpc__ */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
373 #endif /* arm32 */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
374 #endif /* linux && __sparc__ */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
375 #endif /* linux && __alpha__ */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
376
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
377 #if defined(linux) || defined(__arm32__) || (defined(Lynx) && defined(__powerpc__))
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
378
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
379 #define intr_disable()
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
380 #define intr_enable()
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
381
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
382 #else
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
383
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
384 static __inline__ void
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
385 intr_disable()
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
386 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
387 __asm__ __volatile__("cli");
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
388 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
389
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
390 static __inline__ void
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
391 intr_enable()
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
392 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
393 __asm__ __volatile__("sti");
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
394 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
395
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
396 #endif /* else !linux && !__arm32__ */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
397
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
398 #else /* __GNUC__ */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
399
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
400 #if defined(_MINIX) && defined(_ACK)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
401
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
402 /* inb, outb, inw and outw are defined in the library */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
403 /* ... but I've no idea if the same is true for inl & outl */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
404
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
405 u8_t inb(U16_t);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
406 void outb(U16_t, U8_t);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
407 u16_t inw(U16_t);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
408 void outw(U16_t, U16_t);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
409 u32_t inl(U16_t);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
410 void outl(U16_t, U32_t);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
411
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
412 #else /* not _MINIX and _ACK */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
413
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
414 # if defined(__STDC__) && (__STDC__ == 1)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
415 # ifndef NCR
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
416 # define asm __asm
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
417 # endif
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
418 # endif
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
419 # ifdef SVR4
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
420 # include <sys/types.h>
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
421 # ifndef __USLC__
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
422 # define __USLC__
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
423 # endif
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
424 # endif
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
425 #ifndef SCO325
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
426 # include <sys/inline.h>
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
427 #else
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
428 # include "../common/scoasm.h"
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
429 #endif
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
430 #define intr_disable() asm("cli")
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
431 #define intr_enable() asm("sti")
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
432
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
433 #endif /* _MINIX and _ACK */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
434 #endif /* __GNUC__ */