strat9_kernel/arch/x86_64/
io.rs1use core::arch::asm;
6
7#[inline(always)]
12pub unsafe fn inb(port: u16) -> u8 {
13 let ret: u8;
14 unsafe {
15 asm!("in al, dx", out("al") ret, in("dx") port, options(nostack, nomem));
16 }
17 ret
18}
19
20#[inline(always)]
25pub unsafe fn inw(port: u16) -> u16 {
26 let ret: u16;
27 unsafe {
28 asm!("in ax, dx", out("ax") ret, in("dx") port, options(nostack, nomem));
29 }
30 ret
31}
32
33#[inline(always)]
38pub unsafe fn inl(port: u16) -> u32 {
39 let ret: u32;
40 unsafe {
41 asm!("in eax, dx", out("eax") ret, in("dx") port, options(nostack, nomem));
42 }
43 ret
44}
45
46#[inline(always)]
51pub unsafe fn outb(port: u16, value: u8) {
52 unsafe {
53 asm!("out dx, al", in("al") value, in("dx") port, options(nostack, nomem));
54 }
55}
56
57#[inline(always)]
62pub unsafe fn outw(port: u16, value: u16) {
63 unsafe {
64 asm!("out dx, ax", in("ax") value, in("dx") port, options(nostack, nomem));
65 }
66}
67
68#[inline(always)]
73pub unsafe fn outl(port: u16, value: u32) {
74 unsafe {
75 asm!("out dx, eax", in("eax") value, in("dx") port, options(nostack, nomem));
76 }
77}
78
79#[inline(always)]
81pub fn io_wait() {
82 unsafe {
83 outb(0x80, 0);
84 }
85}