diff options
| author | Tianhao Wang <shrik3@riseup.net> | 2023-03-14 03:16:54 +0100 |
|---|---|---|
| committer | Tianhao Wang <shrik3@riseup.net> | 2023-03-14 03:16:54 +0100 |
| commit | 4eae38a6ce9110a155715575adcf12bdf45703cb (patch) | |
| tree | 407cc8f97eabca6d67cd6e83801d83b3a1542beb /src/arch/x86_64/io_port.rs | |
| parent | b6a2fe46752ce5198122bd427a36fdd8878fd05a (diff) | |
CGA cursor location
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) + } +} |
