blob: 84c180b54cfe4ea1322faeb02ada885411bd7367 [file] [log] [blame]
// Copyright 2025 The safe-mmio Authors.
// This project is dual-licensed under Apache 2.0 and MIT terms.
// See LICENSE-APACHE and LICENSE-MIT for details.
use crate::{SharedMmioPointer, UniqueMmioPointer};
impl<T> UniqueMmioPointer<'_, T> {
/// Performs an MMIO read of the entire `T`.
///
/// # Safety
///
/// This field must be safe to perform an MMIO read from.
pub unsafe fn read_unsafe(&mut self) -> T {
// SAFETY: self.regs is always a valid and unique pointer to MMIO address space.
unsafe { self.regs.read_volatile() }
}
/// Performs an MMIO write of the entire `T`.
///
/// Note that this takes `&mut self` rather than `&self` because an MMIO read may cause
/// side-effects that change the state of the device.
///
/// # Safety
///
/// This field must be safe to perform an MMIO write to.
pub unsafe fn write_unsafe(&mut self, value: T) {
// SAFETY: self.regs is always a valid and unique pointer to MMIO address space.
unsafe {
self.regs.write_volatile(value);
}
}
}
impl<T> SharedMmioPointer<'_, T> {
/// Performs an MMIO read of the entire `T`.
///
/// # Safety
///
/// This field must be safe to perform an MMIO read from, and doing so must not cause any
/// side-effects.
pub unsafe fn read_unsafe(&self) -> T {
// SAFETY: self.regs is always a valid and unique pointer to MMIO address space.
unsafe { self.regs.read_volatile() }
}
}