#pragma once #include namespace Kernel { class DMARegion { public: static BAN::ErrorOr> create(size_t size); ~DMARegion(); size_t size() const { return m_size; } vaddr_t vaddr() const { return m_vaddr; } paddr_t paddr() const { return m_paddr; } paddr_t vaddr_to_paddr(vaddr_t vaddr) const { return vaddr - m_vaddr + m_paddr; } vaddr_t paddr_to_vaddr(paddr_t paddr) const { return paddr - m_paddr + m_vaddr; } private: DMARegion(size_t size, vaddr_t vaddr, paddr_t paddr); private: const size_t m_size; const vaddr_t m_vaddr; const paddr_t m_paddr; }; }