1 /* 2 * Mach Operating System 3 * Copyright (c) 1990 Carnegie-Mellon University 4 * All rights reserved. The CMU software License Agreement specifies 5 * the terms and conditions for use and redistribution. 6 * 7 * $Id: pio.h,v 1.3 1993/06/06 04:16:22 cgd Exp $ 8 */ 9 /* 10 * HISTORY 11 * $Log: pio.h,v $ 12 * Revision 1.3 1993/06/06 04:16:22 cgd 13 * incorporate Bruce Evans' interrupt changes, as hacked by Rod grimes, 14 * for patchkit patch 158. it appears to work well. 15 * 16 * Revision 1.2 1993/05/22 08:00:27 cgd 17 * add rcsids to everything and clean up headers 18 * 19 * Revision 1.1 1993/03/21 18:09:48 cgd 20 * after 0.2.2 "stable" patches applied 21 * 22 * Revision 1.1 1992/05/27 00:48:30 balsup 23 * machkern/cor merge 24 * 25 * Revision 1.1 1991/10/10 20:11:39 balsup 26 * Initial revision 27 * 28 * Revision 2.2 91/04/02 11:52:29 mbj 29 * [90/08/14 mg32] 30 * 31 * Now we know how types are factor in. 32 * Cleaned up a bunch: eliminated ({ for output and flushed unused 33 * output variables. 34 * [90/08/14 rvb] 35 * 36 * This is how its done in gcc: 37 * Created. 38 * [90/03/26 rvb] 39 * 40 */ 41 42 43 #define inl(y) \ 44 ({ unsigned long _tmp__; \ 45 asm volatile("inl %1, %0" : "=a" (_tmp__) : "d" ((unsigned short)(y))); \ 46 _tmp__; }) 47 48 #define inw(y) \ 49 ({ unsigned short _tmp__; \ 50 asm volatile(".byte 0x66; inl %1, %0" : "=a" (_tmp__) : "d" ((unsigned short)(y))); \ 51 _tmp__; }) 52 53 /* 54 * only do this if it has not already be defined.. this is a crock for the 55 * patch kit for right now. Need to clean up all the inx, outx stuff for 56 * 0.1.5 to use 1 common header file, that has Bruces fast mode inb/outb 57 * stuff in it. Rgrimes 5/27/93 58 */ 59 #ifndef inb 60 #define inb(y) \ 61 ({ unsigned char _tmp__; \ 62 asm volatile("inb %1, %0" : "=a" (_tmp__) : "d" ((unsigned short)(y))); \ 63 _tmp__; }) 64 #endif 65 66 67 #define outl(x, y) \ 68 { asm volatile("outl %0, %1" : : "a" (y) , "d" ((unsigned short)(x))); } 69 70 71 #define outw(x, y) \ 72 {asm volatile(".byte 0x66; outl %0, %1" : : "a" ((unsigned short)(y)) , "d" ((unsigned short)(x))); } 73 74 75 #define outb(x, y) \ 76 { asm volatile("outb %0, %1" : : "a" ((unsigned char)(y)) , "d" ((unsigned short)(x))); } 77