1 // Copyright 2025 The safe-mmio Authors. 2 // This project is dual-licensed under Apache 2.0 and MIT terms. 3 // See LICENSE-APACHE and LICENSE-MIT for details. 4 5 use crate::{SharedMmioPointer, UniqueMmioPointer}; 6 7 impl<T> UniqueMmioPointer<'_, T> { 8 /// Performs an MMIO read of the entire `T`. 9 /// 10 /// # Safety 11 /// 12 /// This field must be safe to perform an MMIO read from. read_unsafe(&mut self) -> T13 pub unsafe fn read_unsafe(&mut self) -> T { 14 // SAFETY: self.regs is always a valid and unique pointer to MMIO address space. 15 unsafe { self.regs.read_volatile() } 16 } 17 18 /// Performs an MMIO write of the entire `T`. 19 /// 20 /// Note that this takes `&mut self` rather than `&self` because an MMIO read may cause 21 /// side-effects that change the state of the device. 22 /// 23 /// # Safety 24 /// 25 /// This field must be safe to perform an MMIO write to. write_unsafe(&mut self, value: T)26 pub unsafe fn write_unsafe(&mut self, value: T) { 27 // SAFETY: self.regs is always a valid and unique pointer to MMIO address space. 28 unsafe { 29 self.regs.write_volatile(value); 30 } 31 } 32 } 33 34 impl<T> SharedMmioPointer<'_, T> { 35 /// Performs an MMIO read of the entire `T`. 36 /// 37 /// # Safety 38 /// 39 /// This field must be safe to perform an MMIO read from, and doing so must not cause any 40 /// side-effects. read_unsafe(&self) -> T41 pub unsafe fn read_unsafe(&self) -> T { 42 // SAFETY: self.regs is always a valid and unique pointer to MMIO address space. 43 unsafe { self.regs.read_volatile() } 44 } 45 } 46