rustubs/arch/x86_64/
io_port.rs

1use super::misc::delay;
2use core::arch::asm;
3
4#[inline(always)]
5pub fn inw(p: u16) -> u16 {
6	let result: u16;
7	unsafe {
8		asm!("in ax, dx",
9			in("dx") p,
10			out("ax") result
11		)
12	}
13	delay();
14	result
15}
16
17#[inline(always)]
18pub fn inb(p: u16) -> u8 {
19	let result: u8;
20	unsafe {
21		asm!("in al, dx",
22			in("dx") p,
23			out("al") result
24		)
25	}
26	delay();
27	result
28}
29
30#[inline(always)]
31pub fn outb(p: u16, val: u8) {
32	unsafe {
33		asm!("out dx, al",
34			in("dx") p,
35			in("al") val,
36		)
37	}
38	delay();
39}
40
41#[inline(always)]
42pub fn outw(p: u16, val: u16) {
43	unsafe {
44		asm!("out dx, ax",
45			in("dx") p,
46			in("ax") val,
47		)
48	}
49	delay();
50}