1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
//! Traits for accessing I/O ports. /// A helper trait that implements the read port operation. /// /// On x86, I/O ports operate on either `u8` (via `inb`/`outb`), `u16` (via `inw`/`outw`), /// or `u32` (via `inl`/`outl`). Therefore this trait is implemented for exactly these types. pub trait PortRead { /// Reads a `Self` value from the given port. /// /// This function is unsafe because the I/O port could have side effects that violate memory /// safety. unsafe fn read_from_port(port: u16) -> Self; } /// A helper trait that implements the write port operation. /// /// On x86, I/O ports operate on either `u8` (via `inb`/`outb`), `u16` (via `inw`/`outw`), /// or `u32` (via `inl`/`outl`). Therefore this trait is implemented for exactly these types. pub trait PortWrite { /// Writes a `Self` value to the given port. /// /// This function is unsafe because the I/O port could have side effects that violate memory /// safety. unsafe fn write_to_port(port: u16, value: Self); } /// A helper trait that implements the read/write port operations. /// /// On x86, I/O ports operate on either `u8` (via `inb`/`outb`), `u16` (via `inw`/`outw`), /// or `u32` (via `inl`/`outl`). Therefore this trait is implemented for exactly these types. pub trait PortReadWrite: PortRead + PortWrite {}