00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00021 #include "src/common/shared.hpp"
00022 #include "src/common/io.hpp"
00023
00024 namespace IOPorts {
00025
00026
00027
00028 void outb(uint16 port, uint8 ch) {
00029 __asm__ __volatile__("outb %%al, %%dx" : : "d" (port), "a" (ch));
00030 }
00031
00032
00033 uint8 inb(uint16 port)
00034 {
00035 uint8 ret;
00036 __asm__ __volatile__ ("inb %%dx, %%al" : "=a" (ret) : "d" (port));
00037 return ret;
00038 }
00039
00040 uint16 inw(uint16 port) {
00041 uint16 ret; __asm__ __volatile__ ("inw %%dx, %%ax" :"=a" (ret) : "d"(port));
00042 return ret; }
00043
00044 void outw(uint16 port, uint16 ch) {
00045 __asm__ __volatile__ ("outw %%ax, %%dx" : : "d"(port),"a"(ch));
00046 }
00047
00048 uint32 inl(uint16 port) {
00049 uint32 ret; __asm__ __volatile__ ("inl %%dx, %%eax" :"=a" (ret) : "d"(port));
00050 return ret; }
00051
00052 void outl(uint16 port, uint32 ch) {
00053 __asm__ __volatile__ ("outl %%eax, %%dx" : : "d"(port),"a"(ch));
00054 }
00055
00056
00057 };
00058
00059
00060
00061
00062
00063
00064
00065