]> git.saurik.com Git - apple/boot.git/blob - i386/libsaio/io_inline.h
00c1e3794d9b2eb1a4857c1cd21294e83d25ac37
[apple/boot.git] / i386 / libsaio / io_inline.h
1 /*
2 * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved.
7 *
8 * This file contains Original Code and/or Modifications of Original Code
9 * as defined in and that are subject to the Apple Public Source License
10 * Version 2.0 (the 'License'). You may not use this file except in
11 * compliance with the License. Please obtain a copy of the License at
12 * http://www.opensource.apple.com/apsl/ and read it before using this
13 * file.
14 *
15 * The Original Code and all software distributed under the License are
16 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
17 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
18 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
20 * Please see the License for the specific language governing rights and
21 * limitations under the License.
22 *
23 * @APPLE_LICENSE_HEADER_END@
24 */
25 /*
26 * Copyright (c) 1992 NeXT Computer, Inc.
27 *
28 * Inlines for io space access.
29 *
30 * HISTORY
31 *
32 * 20 May 1992 ? at NeXT
33 * Created.
34 */
35
36 #ifndef __LIBSAIO_IO_INLINE_H
37 #define __LIBSAIO_IO_INLINE_H
38
39 /*
40 *############################################################################
41 *
42 * x86 IN/OUT I/O inline functions.
43 *
44 * IN : inb, inw, inl
45 * IN(port)
46 *
47 * OUT: outb, outw, outl
48 * OUT(port, data)
49 *
50 *############################################################################
51 */
52
53 #define __IN(s, u) \
54 static inline unsigned u \
55 in##s(unsigned short port) \
56 { \
57 unsigned u data; \
58 asm volatile ( \
59 "in" #s " %1,%0" \
60 : "=a" (data) \
61 : "d" (port)); \
62 return (data); \
63 }
64
65 #define __OUT(s, u) \
66 static inline void \
67 out##s(unsigned short port, unsigned u data) \
68 { \
69 asm volatile ( \
70 "out" #s " %1,%0" \
71 : \
72 : "d" (port), "a" (data)); \
73 }
74
75 __IN(b, char) /* inb() */
76 __IN(w, short) /* inw() */
77 __IN(l, long) /* inl() */
78
79 __OUT(b, char) /* outb() */
80 __OUT(w, short) /* outw() */
81 __OUT(l, long) /* outl() */
82
83 #endif /* !__LIBSAIO_IO_INLINE_H */