From f857bd1d4f12316bd3434192d41c2489407c11a4 Mon Sep 17 00:00:00 2001 From: Tianhao Wang Date: Thu, 1 Feb 2024 22:01:25 +0100 Subject: add IOPort struct So that device IO can be be synchronized. --- src/arch/x86_64/io_port.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/arch') diff --git a/src/arch/x86_64/io_port.rs b/src/arch/x86_64/io_port.rs index 7b37989..cb6c80f 100644 --- a/src/arch/x86_64/io_port.rs +++ b/src/arch/x86_64/io_port.rs @@ -1,5 +1,9 @@ use core::arch::asm; +// put a few cycles of delay after IO ops +use super::misc::delay; + +#[inline(always)] pub fn inw(p: u16) -> u16 { let result: u16; unsafe { @@ -8,9 +12,11 @@ pub fn inw(p: u16) -> u16 { out("ax") result ) } + delay(); result } +#[inline(always)] pub fn inb(p: u16) -> u8 { let result: u8; unsafe { @@ -19,9 +25,11 @@ pub fn inb(p: u16) -> u8 { out("al") result ) } + delay(); result } +#[inline(always)] pub fn outb(p: u16, val: u8) { unsafe { asm!("out dx, al", @@ -29,8 +37,10 @@ pub fn outb(p: u16, val: u8) { in("al") val, ) } + delay(); } +#[inline(always)] pub fn outw(p: u16, val: u16) { unsafe { asm!("out dx, ax", @@ -38,4 +48,5 @@ pub fn outw(p: u16, val: u16) { in("ax") val, ) } + delay(); } -- cgit v1.2.3-70-g09d2