diff options
Diffstat (limited to 'src/arch/x86_64/io_port.rs')
| -rw-r--r-- | src/arch/x86_64/io_port.rs | 41 |
1 files changed, 32 insertions, 9 deletions
diff --git a/src/arch/x86_64/io_port.rs b/src/arch/x86_64/io_port.rs index 9c24c98..4f629b8 100644 --- a/src/arch/x86_64/io_port.rs +++ b/src/arch/x86_64/io_port.rs @@ -1,13 +1,36 @@ - extern "C" { - fn inb(port:u32) -> u32; - fn inw(port:u32) -> u32; - fn outb(port:u32, val:u32); - fn outw(port:u32, val:u32); + fn _inb(port:u16) -> u8; + fn _inw(port:u16) -> u16; + fn _outb(port:u16, val:u8); + fn _outw(port:u16, val:u16); +} + +// The port addr is 16-bit wide. +// wrappers for in/out[b,w] +// Also I don't feel necessary to have a IO_Port Class give how +// trivial it is +// TODO perhaps use inline asm, because the code is short + +pub fn inw(p:u16) -> u16 { + unsafe{ + _inw(p) + } } -// TODO -// pub struct IO_Port { -// addr: u32, -// } +pub fn inb(p:u16) -> u8 { + unsafe{ + _inb(p) + } +} +pub fn outb(p:u16, val:u8){ + unsafe{ + _outb(p,val); + } +} + +pub fn outw(p:u16, val:u16){ + unsafe{ + _outw(p,val) + } +} |
