aboutsummaryrefslogtreecommitdiff
path: root/src/arch/x86_64/io_port.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/x86_64/io_port.rs')
-rw-r--r--src/arch/x86_64/io_port.rs41
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)
+ }
+}