mmio_ptr/mmio-ptr.rs
1// Copyright 2026 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#![no_std]
6
7unsafe extern "C" {
8 fn mmio_read8(buffer: *const u8) -> u8;
9 fn mmio_write8(data: u8, buffer: *mut u8);
10
11 fn mmio_read16(buffer: *const u16) -> u16;
12 fn mmio_write16(data: u16, buffer: *mut u16);
13
14 fn mmio_read32(buffer: *const u32) -> u32;
15 fn mmio_write32(data: u32, buffer: *mut u32);
16
17 fn mmio_read64(buffer: *const u64) -> u64;
18 fn mmio_write64(data: u64, buffer: *mut u64);
19}
20
21/// Reads an 8-bit value from MMIO memory.
22///
23/// # Safety
24///
25/// `buffer` must be a valid pointer to MMIO memory.
26#[inline(always)]
27pub unsafe fn read8(buffer: *const u8) -> u8 {
28 // Safety: Justification deferred to caller.
29 unsafe { mmio_read8(buffer) }
30}
31
32/// Writes an 8-bit value to MMIO memory.
33///
34/// # Safety
35///
36/// `buffer` must be a valid pointer to MMIO memory.
37#[inline(always)]
38pub unsafe fn write8(data: u8, buffer: *mut u8) {
39 // Safety: Justification deferred to caller.
40 unsafe { mmio_write8(data, buffer) }
41}
42
43/// Reads a 16-bit value from MMIO memory.
44///
45/// # Safety
46///
47/// `buffer` must be a valid pointer to MMIO memory.
48#[inline(always)]
49pub unsafe fn read16(buffer: *const u16) -> u16 {
50 // Safety: Justification deferred to caller.
51 unsafe { mmio_read16(buffer) }
52}
53
54/// Writes a 16-bit value to MMIO memory.
55///
56/// # Safety
57///
58/// `buffer` must be a valid pointer to MMIO memory.
59#[inline(always)]
60pub unsafe fn write16(data: u16, buffer: *mut u16) {
61 // Safety: Justification deferred to caller.
62 unsafe { mmio_write16(data, buffer) }
63}
64
65/// Reads a 32-bit value from MMIO memory.
66///
67/// # Safety
68///
69/// `buffer` must be a valid pointer to MMIO memory.
70#[inline(always)]
71pub unsafe fn read32(buffer: *const u32) -> u32 {
72 // Safety: Justification deferred to caller.
73 unsafe { mmio_read32(buffer) }
74}
75
76/// Writes a 32-bit value to MMIO memory.
77///
78/// # Safety
79///
80/// `buffer` must be a valid pointer to MMIO memory.
81#[inline(always)]
82pub unsafe fn write32(data: u32, buffer: *mut u32) {
83 // Safety: Justification deferred to caller.
84 unsafe { mmio_write32(data, buffer) }
85}
86
87/// Reads a 64-bit value from MMIO memory.
88///
89/// # Safety
90///
91/// `buffer` must be a valid pointer to MMIO memory.
92#[inline(always)]
93pub unsafe fn read64(buffer: *const u64) -> u64 {
94 // Safety: Justification deferred to caller.
95 unsafe { mmio_read64(buffer) }
96}
97
98/// Writes a 64-bit value to MMIO memory.
99///
100/// # Safety
101///
102/// `buffer` must be a valid pointer to MMIO memory.
103#[inline(always)]
104pub unsafe fn write64(data: u64, buffer: *mut u64) {
105 // Safety: Justification deferred to caller.
106 unsafe { mmio_write64(data, buffer) }
107}