Annotation of XNU/bsd/dev/i386/pio.h, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
        !             3:  *
        !             4:  * @APPLE_LICENSE_HEADER_START@
        !             5:  * 
        !             6:  * The contents of this file constitute Original Code as defined in and
        !             7:  * are subject to the Apple Public Source License Version 1.1 (the
        !             8:  * "License").  You may not use this file except in compliance with the
        !             9:  * License.  Please obtain a copy of the License at
        !            10:  * http://www.apple.com/publicsource and read it before using this file.
        !            11:  * 
        !            12:  * This Original Code and all software distributed under the License are
        !            13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
        !            14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
        !            15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
        !            16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
        !            17:  * License for the specific language governing rights and limitations
        !            18:  * under the License.
        !            19:  * 
        !            20:  * @APPLE_LICENSE_HEADER_END@
        !            21:  */
        !            22: /*
        !            23:  * @OSF_COPYRIGHT@
        !            24:  */
        !            25: /*
        !            26:  * HISTORY
        !            27:  * 
        !            28:  * Revision 1.2  1998/09/30 21:20:45  wsanchez
        !            29:  * Merged in IntelMerge1 (mburg: Intel support)
        !            30:  *
        !            31:  * Revision 1.1.2.1  1998/09/30 18:18:50  mburg
        !            32:  * Changes for Intel port
        !            33:  *
        !            34:  * Revision 1.1.1.1  1998/03/07 02:25:38  wsanchez
        !            35:  * Import of OSF Mach kernel (~mburg)
        !            36:  *
        !            37:  * Revision 1.1.8.2  1996/07/31  09:46:36  paire
        !            38:  *     Merged with nmk20b7_shared (1.1.11.2 -> 1.1.11.1)
        !            39:  *     [96/06/10            paire]
        !            40:  *
        !            41:  * Revision 1.1.11.2  1996/06/13  12:38:25  bernadat
        !            42:  *     Do not use inline macros when MACH_ASSERT is configured.
        !            43:  *     [96/05/24            bernadat]
        !            44:  * 
        !            45:  * Revision 1.1.11.1  1996/05/14  13:50:23  paire
        !            46:  *     Added new linl and loutl __inline__.
        !            47:  *     Added conditional compilation for [l]{in|oub}[bwl]() __inline__.
        !            48:  *     [95/11/24            paire]
        !            49:  * 
        !            50:  * Revision 1.1.8.1  1994/09/23  02:00:28  ezf
        !            51:  *     change marker to not FREE
        !            52:  *     [1994/09/22  21:25:52  ezf]
        !            53:  * 
        !            54:  * Revision 1.1.4.5  1993/08/09  19:40:41  dswartz
        !            55:  *     Add ANSI prototypes - CR#9523
        !            56:  *     [1993/08/06  17:45:57  dswartz]
        !            57:  * 
        !            58:  * Revision 1.1.4.4  1993/06/11  15:17:37  jeffc
        !            59:  *     CR9176 - ANSI C violations: inb/outb macros must be changed from
        !            60:  *     ({ ... }) to inline functions, with proper type definitions. Callers
        !            61:  *     must pass proper types to these functions: 386 I/O port addresses
        !            62:  *     are unsigned shorts (not pointers).
        !            63:  *     [1993/06/10  14:26:10  jeffc]
        !            64:  * 
        !            65:  * Revision 1.1.4.3  1993/06/07  22:09:28  jeffc
        !            66:  *     CR9176 - ANSI C violations: trailing tokens on CPP
        !            67:  *     directives, extra semicolons after decl_ ..., asm keywords
        !            68:  *     [1993/06/07  19:00:26  jeffc]
        !            69:  * 
        !            70:  * Revision 1.1.4.2  1993/06/04  15:28:45  jeffc
        !            71:  *     CR9176 - ANSI problems -
        !            72:  *     Added casts to get macros to take caddr_t as an I/O space address.
        !            73:  *     [1993/06/04  13:45:55  jeffc]
        !            74:  * 
        !            75:  * Revision 1.1  1992/09/30  02:25:51  robert
        !            76:  *     Initial revision
        !            77:  * 
        !            78:  * $EndLog$
        !            79:  */
        !            80: /* CMU_HIST */
        !            81: /*
        !            82:  * Revision 2.5  91/05/14  16:14:20  mrt
        !            83:  *     Correcting copyright
        !            84:  * 
        !            85:  * Revision 2.4  91/02/05  17:13:56  mrt
        !            86:  *     Changed to new Mach copyright
        !            87:  *     [91/02/01  17:37:08  mrt]
        !            88:  * 
        !            89:  * Revision 2.3  90/12/20  16:36:37  jeffreyh
        !            90:  *     changes for __STDC__
        !            91:  *     [90/12/07            jeffreyh]
        !            92:  * 
        !            93:  * Revision 2.2  90/11/26  14:48:41  rvb
        !            94:  *     Pulled from 2.5
        !            95:  *     [90/11/22  10:09:38  rvb]
        !            96:  * 
        !            97:  *     [90/08/14            mg32]
        !            98:  * 
        !            99:  *     Now we know how types are factor in.
        !           100:  *     Cleaned up a bunch: eliminated ({ for output and flushed unused
        !           101:  *     output variables.
        !           102:  *     [90/08/14            rvb]
        !           103:  * 
        !           104:  *     This is how its done in gcc:
        !           105:  *             Created.
        !           106:  *     [90/03/26            rvb]
        !           107:  * 
        !           108:  */
        !           109: /* CMU_ENDHIST */
        !           110: /* 
        !           111:  * Mach Operating System
        !           112:  * Copyright (c) 1991,1990 Carnegie Mellon University
        !           113:  * All Rights Reserved.
        !           114:  * 
        !           115:  * Permission to use, copy, modify and distribute this software and its
        !           116:  * documentation is hereby granted, provided that both the copyright
        !           117:  * notice and this permission notice appear in all copies of the
        !           118:  * software, derivative works or modified versions, and any portions
        !           119:  * thereof, and that both notices appear in supporting documentation.
        !           120:  * 
        !           121:  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
        !           122:  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
        !           123:  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
        !           124:  * 
        !           125:  * Carnegie Mellon requests users of this software to return to
        !           126:  * 
        !           127:  *  Software Distribution Coordinator  or  [email protected]
        !           128:  *  School of Computer Science
        !           129:  *  Carnegie Mellon University
        !           130:  *  Pittsburgh PA 15213-3890
        !           131:  * 
        !           132:  * any improvements or extensions that they make and grant Carnegie Mellon
        !           133:  * the rights to redistribute these changes.
        !           134:  */
        !           135: /* 
        !           136:  */
        !           137: #ifndef I386_PIO_H
        !           138: #define I386_PIO_H
        !           139: 
        !           140: typedef unsigned short i386_ioport_t;
        !           141: 
        !           142: /* read a longword */
        !           143: extern unsigned long   inl(
        !           144:                                i386_ioport_t   port);
        !           145: /* read a shortword */
        !           146: extern unsigned short  inw(
        !           147:                                i386_ioport_t   port);
        !           148: /* read a byte */
        !           149: extern unsigned char   inb(
        !           150:                                i386_ioport_t   port);
        !           151: /* write a longword */
        !           152: extern void            outl(
        !           153:                                i386_ioport_t   port,
        !           154:                                unsigned long   datum);
        !           155: /* write a word */
        !           156: extern void            outw(
        !           157:                                i386_ioport_t   port,
        !           158:                                unsigned short  datum);
        !           159: /* write a longword */
        !           160: extern void            outb(
        !           161:                                i386_ioport_t   port,
        !           162:                                unsigned char   datum);
        !           163: 
        !           164: /* input an array of longwords */
        !           165: extern void            linl(
        !           166:                                i386_ioport_t   port,
        !           167:                                int             * data,
        !           168:                                int             count);
        !           169: /* output an array of longwords */
        !           170: extern void            loutl(
        !           171:                                i386_ioport_t   port,
        !           172:                                int             * data,
        !           173:                                int             count);
        !           174: 
        !           175: /* input an array of words */
        !           176: extern void            linw(
        !           177:                                i386_ioport_t   port,
        !           178:                                int             * data,
        !           179:                                int             count);
        !           180: /* output an array of words */
        !           181: extern void            loutw(
        !           182:                                i386_ioport_t   port,
        !           183:                                int             * data,
        !           184:                                int             count);
        !           185: 
        !           186: /* input an array of bytes */
        !           187: extern void            linb(
        !           188:                                i386_ioport_t   port,
        !           189:                                char            * data,
        !           190:                                int             count);
        !           191: /* output an array of bytes */
        !           192: extern void            loutb(
        !           193:                                i386_ioport_t   port,
        !           194:                                char            * data,
        !           195:                                int             count);
        !           196: 
        !           197: extern __inline__ unsigned long        inl(
        !           198:                                i386_ioport_t port)
        !           199: {
        !           200:        unsigned long datum;
        !           201:        __asm__ volatile("inl %1, %0" : "=a" (datum) : "d" (port));
        !           202:        return(datum);
        !           203: }
        !           204: 
        !           205: extern __inline__ unsigned short inw(
        !           206:                                i386_ioport_t port)
        !           207: {
        !           208:        unsigned short datum;
        !           209:        __asm__ volatile(".byte 0x66; inl %1, %0" : "=a" (datum) : "d" (port));
        !           210:        return(datum);
        !           211: }
        !           212: 
        !           213: extern __inline__ unsigned char inb(
        !           214:                                i386_ioport_t port)
        !           215: {
        !           216:        unsigned char datum;
        !           217:        __asm__ volatile("inb %1, %0" : "=a" (datum) : "d" (port));
        !           218:        return(datum);
        !           219: }
        !           220: 
        !           221: extern __inline__ void outl(
        !           222:                                i386_ioport_t port,
        !           223:                                unsigned long datum)
        !           224: {
        !           225:        __asm__ volatile("outl %0, %1" : : "a" (datum), "d" (port));
        !           226: }
        !           227: 
        !           228: extern __inline__ void outw(
        !           229:                                i386_ioport_t port,
        !           230:                                unsigned short datum)
        !           231: {
        !           232:        __asm__ volatile(".byte 0x66; outl %0, %1" : : "a" (datum), "d" (port));
        !           233: }
        !           234: 
        !           235: extern __inline__ void outb(
        !           236:                                i386_ioport_t port,
        !           237:                                unsigned char datum)
        !           238: {
        !           239:        __asm__ volatile("outb %0, %1" : : "a" (datum), "d" (port));
        !           240: }
        !           241: 
        !           242: #endif /* I386_PIO_H */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.