From 9835e2ae736235810b4ea1c162ca5e65c547e770 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 18 May 2024 04:49:50 +0200 Subject: Merging upstream version 1.71.1+dfsg1. Signed-off-by: Daniel Baumann --- vendor/redox_syscall-0.2.16/src/io/mmio.rs | 45 ++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 vendor/redox_syscall-0.2.16/src/io/mmio.rs (limited to 'vendor/redox_syscall-0.2.16/src/io/mmio.rs') diff --git a/vendor/redox_syscall-0.2.16/src/io/mmio.rs b/vendor/redox_syscall-0.2.16/src/io/mmio.rs new file mode 100644 index 000000000..3966ab454 --- /dev/null +++ b/vendor/redox_syscall-0.2.16/src/io/mmio.rs @@ -0,0 +1,45 @@ +use core::ptr::{read_volatile, write_volatile, addr_of, addr_of_mut}; +use core::mem::MaybeUninit; +use core::ops::{BitAnd, BitOr, Not}; + +use super::io::Io; + +#[repr(packed)] +pub struct Mmio { + value: MaybeUninit, +} + +impl Mmio { + /// Create a new Mmio without initializing + #[deprecated = "unsound because it's possible to read even though it's uninitialized"] + pub fn new() -> Self { + unsafe { Self::uninit() } + } + pub unsafe fn zeroed() -> Self { + Self { + value: MaybeUninit::zeroed(), + } + } + pub unsafe fn uninit() -> Self { + Self { + value: MaybeUninit::uninit(), + } + } + pub const fn from(value: T) -> Self { + Self { + value: MaybeUninit::new(value), + } + } +} + +impl Io for Mmio where T: Copy + PartialEq + BitAnd + BitOr + Not { + type Value = T; + + fn read(&self) -> T { + unsafe { read_volatile(addr_of!(self.value).cast::()) } + } + + fn write(&mut self, value: T) { + unsafe { write_volatile(addr_of_mut!(self.value).cast::(), value) }; + } +} -- cgit v1.2.3