From 344e84c313a05ceac677b5666762c39809215f6a Mon Sep 17 00:00:00 2001 From: Drew Galbraith Date: Sun, 19 Nov 2023 20:48:23 -0800 Subject: [PATCH] [Mammoth] Get rid of last uses of MappedMemoryRegion. --- lib/mammoth/include/mammoth/memory_region.h | 30 ++------------------ lib/mammoth/src/memory_region.cpp | 31 +++++++-------------- sys/denali/ahci/ahci_driver.cpp | 2 +- sys/denali/ahci/ahci_driver.h | 2 +- sys/teton/framebuffer/framebuffer.cpp | 8 ++---- sys/teton/framebuffer/framebuffer.h | 3 ++ 6 files changed, 20 insertions(+), 56 deletions(-) diff --git a/lib/mammoth/include/mammoth/memory_region.h b/lib/mammoth/include/mammoth/memory_region.h index 0f7ac4c..1ce79b7 100644 --- a/lib/mammoth/include/mammoth/memory_region.h +++ b/lib/mammoth/include/mammoth/memory_region.h @@ -3,34 +3,6 @@ #include #include -class MappedMemoryRegion { - public: - // FIXME: Introduce optional type to contain error or. - static MappedMemoryRegion DirectPhysical(uint64_t phys_addr, uint64_t size); - static MappedMemoryRegion Default(uint64_t size); - - MappedMemoryRegion() {} - // TODO: Disallow copy before doing any cleanup here. - ~MappedMemoryRegion() {} - - uint64_t paddr() { return paddr_; } - uint64_t vaddr() { return vaddr_; } - uint64_t size() { return size_; } - - uint64_t cap() { return vmmo_cap_; } - - operator bool() { return vmmo_cap_ != 0; } - - private: - MappedMemoryRegion(uint64_t vmmo_cap, uint64_t paddr, uint64_t vaddr, - uint64_t size) - : vmmo_cap_(vmmo_cap), paddr_(paddr), vaddr_(vaddr), size_(size) {} - uint64_t vmmo_cap_ = 0; - uint64_t paddr_ = 0; - uint64_t vaddr_ = 0; - uint64_t size_ = 0; -}; - /* * Memory Region class that unmaps its memory and releases its * capability when it goes out of scope. @@ -50,6 +22,7 @@ class OwnedMemoryRegion { static OwnedMemoryRegion FromCapability(z_cap_t vmmo_cap); // TODO: Consider making this its own class. static OwnedMemoryRegion ContiguousPhysical(uint64_t size, uint64_t* paddr); + static OwnedMemoryRegion DirectPhysical(uint64_t paddr, uint64_t size); uint64_t vaddr() { return vaddr_; } uint64_t size() { return size_; } @@ -65,5 +38,6 @@ class OwnedMemoryRegion { : vmmo_cap_(vmmo_cap), vaddr_(vaddr), size_(size) {} uint64_t vmmo_cap_ = 0; uint64_t vaddr_ = 0; + // TODO: We may want to differentiate between VMMO size and mapped size? uint64_t size_ = 0; }; diff --git a/lib/mammoth/src/memory_region.cpp b/lib/mammoth/src/memory_region.cpp index e547f6e..d4b88e0 100644 --- a/lib/mammoth/src/memory_region.cpp +++ b/lib/mammoth/src/memory_region.cpp @@ -5,27 +5,6 @@ #include "mammoth/debug.h" #include "mammoth/init.h" -MappedMemoryRegion MappedMemoryRegion::DirectPhysical(uint64_t paddr, - uint64_t size) { - uint64_t vmmo_cap; - check(ZMemoryObjectCreatePhysical(paddr, size, &vmmo_cap)); - - uint64_t vaddr; - check(ZAddressSpaceMap(gSelfVmasCap, 0, vmmo_cap, &vaddr)); - - return MappedMemoryRegion(vmmo_cap, paddr, vaddr, size); -} - -MappedMemoryRegion MappedMemoryRegion::Default(uint64_t size) { - uint64_t vmmo_cap; - check(ZMemoryObjectCreate(size, &vmmo_cap)); - - uint64_t vaddr; - check(ZAddressSpaceMap(gSelfVmasCap, 0, vmmo_cap, &vaddr)); - - return MappedMemoryRegion(vmmo_cap, 0, vaddr, size); -} - OwnedMemoryRegion::OwnedMemoryRegion(OwnedMemoryRegion&& other) : OwnedMemoryRegion(other.vmmo_cap_, other.vaddr_, other.size_) { other.vmmo_cap_ = 0; @@ -74,6 +53,16 @@ OwnedMemoryRegion OwnedMemoryRegion::ContiguousPhysical(uint64_t size, return OwnedMemoryRegion(vmmo_cap, vaddr, size); } +OwnedMemoryRegion OwnedMemoryRegion::DirectPhysical(uint64_t paddr, + uint64_t size) { + uint64_t vmmo_cap; + check(ZMemoryObjectCreatePhysical(paddr, size, &vmmo_cap)); + + uint64_t vaddr; + check(ZAddressSpaceMap(gSelfVmasCap, 0, vmmo_cap, &vaddr)); + return OwnedMemoryRegion(vmmo_cap, vaddr, size); +} + z_cap_t OwnedMemoryRegion::DuplicateCap() { z_cap_t cap; check(ZCapDuplicate(vmmo_cap_, kZionPerm_All, &cap)); diff --git a/sys/denali/ahci/ahci_driver.cpp b/sys/denali/ahci/ahci_driver.cpp index addd338..7e9868c 100644 --- a/sys/denali/ahci/ahci_driver.cpp +++ b/sys/denali/ahci/ahci_driver.cpp @@ -192,7 +192,7 @@ glcr::ErrorCode AhciDriver::RegisterIrq() { glcr::ErrorCode AhciDriver::LoadHbaRegisters() { ahci_region_ = - MappedMemoryRegion::DirectPhysical(pci_device_header_->abar, 0x1100); + OwnedMemoryRegion ::DirectPhysical(pci_device_header_->abar, 0x1100); ahci_hba_ = reinterpret_cast(ahci_region_.vaddr()); num_ports_ = (ahci_hba_->capabilities & 0x1F) + 1; num_commands_ = ((ahci_hba_->capabilities & 0x1F00) >> 8) + 1; diff --git a/sys/denali/ahci/ahci_driver.h b/sys/denali/ahci/ahci_driver.h index 48b05d0..9122e14 100644 --- a/sys/denali/ahci/ahci_driver.h +++ b/sys/denali/ahci/ahci_driver.h @@ -24,7 +24,7 @@ class AhciDriver { private: OwnedMemoryRegion pci_region_; PciDeviceHeader* pci_device_header_ = nullptr; - MappedMemoryRegion ahci_region_; + OwnedMemoryRegion ahci_region_; AhciHba* ahci_hba_ = nullptr; // TODO: Allocate these dynamically. diff --git a/sys/teton/framebuffer/framebuffer.cpp b/sys/teton/framebuffer/framebuffer.cpp index 16e8537..3a507f0 100644 --- a/sys/teton/framebuffer/framebuffer.cpp +++ b/sys/teton/framebuffer/framebuffer.cpp @@ -1,12 +1,10 @@ #include "framebuffer/framebuffer.h" -#include - Framebuffer::Framebuffer(const FramebufferInfo& info) : fb_info_(info) { uint64_t buff_size_bytes = fb_info_.height() * fb_info_.pitch(); - MappedMemoryRegion region = MappedMemoryRegion::DirectPhysical( - fb_info_.address_phys(), buff_size_bytes); - fb_ = reinterpret_cast(region.vaddr()); + fb_memory_ = OwnedMemoryRegion::DirectPhysical(fb_info_.address_phys(), + buff_size_bytes); + fb_ = reinterpret_cast(fb_memory_.vaddr()); } void Framebuffer::DrawPixel(uint32_t row, uint32_t col, uint32_t pixel) { diff --git a/sys/teton/framebuffer/framebuffer.h b/sys/teton/framebuffer/framebuffer.h index 2d8ec55..7e82a10 100644 --- a/sys/teton/framebuffer/framebuffer.h +++ b/sys/teton/framebuffer/framebuffer.h @@ -1,5 +1,6 @@ #pragma once +#include #include class Framebuffer { @@ -12,5 +13,7 @@ class Framebuffer { // FIXME: Implement Yunq copy or move so we // don't have to store a reference here. const FramebufferInfo& fb_info_; + + OwnedMemoryRegion fb_memory_; uint32_t* fb_; };