X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=geekos%2Fsrc%2Fgeekos%2Fio.c;fp=geekos%2Fsrc%2Fgeekos%2Fio.c;h=1310cdc752cb3aa35b71ec368a5cfff6b72c2baf;hp=0000000000000000000000000000000000000000;hb=ddc16b0737cf58f7aa90a69c6652cdf4090aec51;hpb=626595465a2c6987606a6bc697df65130ad8c2d3 diff --git a/geekos/src/geekos/io.c b/geekos/src/geekos/io.c new file mode 100644 index 0000000..1310cdc --- /dev/null +++ b/geekos/src/geekos/io.c @@ -0,0 +1,108 @@ +/* + * x86 port IO routines + * Copyright (c) 2001, David H. Hovemeyer + * $Revision: 1.2 $ + * + * This is free software. You are permitted to use, + * redistribute, and modify it as specified in the file "COPYING". + */ + +#include + +/* + * Write a byte to an I/O port. + */ +void Out_Byte(ushort_t port, uchar_t value) +{ + __asm__ __volatile__ ( + "outb %b0, %w1" + : + : "a" (value), "Nd" (port) + ); +} + +/* + * Read a byte from an I/O port. + */ +uchar_t In_Byte(ushort_t port) +{ + uchar_t value; + + __asm__ __volatile__ ( + "inb %w1, %b0" + : "=a" (value) + : "Nd" (port) + ); + + return value; +} + +/* + * Write a word to an I/O port. + */ +void Out_Word(ushort_t port, ushort_t value) +{ + __asm__ __volatile__ ( + "outw %w0, %w1" + : + : "a" (value), "Nd" (port) + ); +} + +/* + * Read a word from an I/O port. + */ +ushort_t In_Word(ushort_t port) +{ + ushort_t value; + + __asm__ __volatile__ ( + "inw %w1, %w0" + : "=a" (value) + : "Nd" (port) + ); + + return value; +} + +/* + * Write a double word to an I/O port. + */ +void Out_DWord(ushort_t port, uint_t value) +{ + __asm__ __volatile__ ( + "outl %0, %1" + : + : "a" (value), "Nd" (port) + ); +} + +/* + * Read a double word from an I/O port. + */ +uint_t In_DWord(ushort_t port) +{ + uint_t value; + + __asm__ __volatile__ ( + "inl %1, %0" + : "=a" (value) + : "Nd" (port) + ); + + return value; +} + +/* + * Short delay. May be needed when talking to some + * (slow) I/O devices. + */ +void IO_Delay(void) +{ + uchar_t value = 0; + __asm__ __volatile__ ( + "outb %0, $0x80" + : + : "a" (value) + ); +}