// SPDX-License-Identifier: MIT OR Apache-2.0 // // Copyright (c) 2020-2022 Andre Richter //! Common device driver code. use crate::memory::{Address, Virtual}; use core::{marker::PhantomData, ops}; //-------------------------------------------------------------------------------------------------- // Public Definitions //-------------------------------------------------------------------------------------------------- pub struct MMIODerefWrapper { start_addr: Address, phantom: PhantomData T>, } //-------------------------------------------------------------------------------------------------- // Public Code //-------------------------------------------------------------------------------------------------- impl MMIODerefWrapper { /// Create an instance. pub const unsafe fn new(start_addr: Address) -> Self { Self { start_addr, phantom: PhantomData, } } } impl ops::Deref for MMIODerefWrapper { type Target = T; fn deref(&self) -> &Self::Target { unsafe { &*(self.start_addr.as_usize() as *const _) } } }