SimpleKernel 1.17.0
Loading...
Searching...
No Matches
mmio_accessor.hpp
Go to the documentation of this file.
1
5#pragma once
6
7#include <cstddef>
8#include <cstdint>
9
18 template <typename T>
19 [[nodiscard]] auto Read(size_t offset) const -> T {
20 return *reinterpret_cast<volatile T*>(base + offset);
21 }
22
27 template <typename T>
28 auto Write(size_t offset, T val) const -> void {
29 *reinterpret_cast<volatile T*>(base + offset) = val;
30 }
31
32 uint64_t base{0};
33
36 explicit MmioAccessor(uint64_t base_addr = 0) : base(base_addr) {}
37 MmioAccessor(const MmioAccessor&) = default;
39 auto operator=(const MmioAccessor&) -> MmioAccessor& = default;
40 auto operator=(MmioAccessor&&) -> MmioAccessor& = default;
41 ~MmioAccessor() = default;
43};
通用 MMIO 寄存器访问器
auto operator=(MmioAccessor &&) -> MmioAccessor &=default
~MmioAccessor()=default
auto operator=(const MmioAccessor &) -> MmioAccessor &=default
MmioAccessor(MmioAccessor &&)=default
auto Write(size_t offset, T val) const -> void
Write to MMIO register.
MmioAccessor(const MmioAccessor &)=default
auto Read(size_t offset) const -> T
Read from MMIO register.
MmioAccessor(uint64_t base_addr=0)