Browse Source

core: device_memory: Templatize GetPointer(..).

nce_cpp
bunnei 3 years ago
parent
commit
d9871bab0b
  1. 10
      src/core/device_memory.h
  2. 6
      src/core/hle/kernel/init/init_slab_setup.cpp
  3. 2
      src/core/hle/kernel/k_code_memory.cpp
  4. 2
      src/core/hle/kernel/k_memory_manager.cpp
  5. 2
      src/core/hle/kernel/k_page_buffer.cpp
  6. 6
      src/core/hle/kernel/k_page_table.cpp
  7. 2
      src/core/hle/kernel/k_shared_memory.cpp
  8. 4
      src/core/hle/kernel/k_shared_memory.h
  9. 6
      src/core/memory.cpp

10
src/core/device_memory.h

@ -31,12 +31,14 @@ public:
DramMemoryMap::Base; DramMemoryMap::Base;
} }
u8* GetPointer(PAddr addr) {
return buffer.BackingBasePointer() + (addr - DramMemoryMap::Base);
template <typename T>
T* GetPointer(PAddr addr) {
return reinterpret_cast<T*>(buffer.BackingBasePointer() + (addr - DramMemoryMap::Base));
} }
const u8* GetPointer(PAddr addr) const {
return buffer.BackingBasePointer() + (addr - DramMemoryMap::Base);
template <typename T>
const T* GetPointer(PAddr addr) const {
return reinterpret_cast<T*>(buffer.BackingBasePointer() + (addr - DramMemoryMap::Base));
} }
Common::HostMemory buffer; Common::HostMemory buffer;

6
src/core/hle/kernel/init/init_slab_setup.cpp

@ -94,8 +94,8 @@ VAddr InitializeSlabHeap(Core::System& system, KMemoryLayout& memory_layout, VAd
// TODO(bunnei): Fix this once we support the kernel virtual memory layout. // TODO(bunnei): Fix this once we support the kernel virtual memory layout.
if (size > 0) { if (size > 0) {
void* backing_kernel_memory{
system.DeviceMemory().GetPointer(TranslateSlabAddrToPhysical(memory_layout, start))};
void* backing_kernel_memory{system.DeviceMemory().GetPointer<void>(
TranslateSlabAddrToPhysical(memory_layout, start))};
const KMemoryRegion* region = memory_layout.FindVirtual(start + size - 1); const KMemoryRegion* region = memory_layout.FindVirtual(start + size - 1);
ASSERT(region != nullptr); ASSERT(region != nullptr);
@ -181,7 +181,7 @@ void InitializeKPageBufferSlabHeap(Core::System& system) {
ASSERT(slab_address != 0); ASSERT(slab_address != 0);
// Initialize the slabheap. // Initialize the slabheap.
KPageBuffer::InitializeSlabHeap(kernel, system.DeviceMemory().GetPointer(slab_address),
KPageBuffer::InitializeSlabHeap(kernel, system.DeviceMemory().GetPointer<void>(slab_address),
slab_size); slab_size);
} }

2
src/core/hle/kernel/k_code_memory.cpp

@ -34,7 +34,7 @@ Result KCodeMemory::Initialize(Core::DeviceMemory& device_memory, VAddr addr, si
// Clear the memory. // Clear the memory.
for (const auto& block : m_page_group.Nodes()) { for (const auto& block : m_page_group.Nodes()) {
std::memset(device_memory.GetPointer(block.GetAddress()), 0xFF, block.GetSize());
std::memset(device_memory.GetPointer<void>(block.GetAddress()), 0xFF, block.GetSize());
} }
// Set remaining tracking members. // Set remaining tracking members.

2
src/core/hle/kernel/k_memory_manager.cpp

@ -331,7 +331,7 @@ Result KMemoryManager::AllocateAndOpenForProcess(KPageGroup* out, size_t num_pag
// Set all the allocated memory. // Set all the allocated memory.
for (const auto& block : out->Nodes()) { for (const auto& block : out->Nodes()) {
std::memset(system.DeviceMemory().GetPointer(block.GetAddress()), fill_pattern,
std::memset(system.DeviceMemory().GetPointer<void>(block.GetAddress()), fill_pattern,
block.GetSize()); block.GetSize());
} }

2
src/core/hle/kernel/k_page_buffer.cpp

@ -12,7 +12,7 @@ namespace Kernel {
KPageBuffer* KPageBuffer::FromPhysicalAddress(Core::System& system, PAddr phys_addr) { KPageBuffer* KPageBuffer::FromPhysicalAddress(Core::System& system, PAddr phys_addr) {
ASSERT(Common::IsAligned(phys_addr, PageSize)); ASSERT(Common::IsAligned(phys_addr, PageSize));
return reinterpret_cast<KPageBuffer*>(system.DeviceMemory().GetPointer(phys_addr));
return system.DeviceMemory().GetPointer<KPageBuffer>(phys_addr);
} }
} // namespace Kernel } // namespace Kernel

6
src/core/hle/kernel/k_page_table.cpp

@ -1648,7 +1648,7 @@ Result KPageTable::SetHeapSize(VAddr* out, std::size_t size) {
// Clear all the newly allocated pages. // Clear all the newly allocated pages.
for (const auto& it : pg.Nodes()) { for (const auto& it : pg.Nodes()) {
std::memset(system.DeviceMemory().GetPointer(it.GetAddress()), heap_fill_value,
std::memset(system.DeviceMemory().GetPointer<void>(it.GetAddress()), heap_fill_value,
it.GetSize()); it.GetSize());
} }
@ -1805,9 +1805,9 @@ bool KPageTable::IsRegionMapped(VAddr address, u64 size) {
} }
bool KPageTable::IsRegionContiguous(VAddr addr, u64 size) const { bool KPageTable::IsRegionContiguous(VAddr addr, u64 size) const {
auto start_ptr = system.Memory().GetPointer(addr);
auto start_ptr = system.DeviceMemory().GetPointer<u8>(addr);
for (u64 offset{}; offset < size; offset += PageSize) { for (u64 offset{}; offset < size; offset += PageSize) {
if (start_ptr != system.Memory().GetPointer(addr + offset)) {
if (start_ptr != system.DeviceMemory().GetPointer<u8>(addr + offset)) {
return false; return false;
} }
start_ptr += PageSize; start_ptr += PageSize;

2
src/core/hle/kernel/k_shared_memory.cpp

@ -50,7 +50,7 @@ Result KSharedMemory::Initialize(Core::DeviceMemory& device_memory_, KProcess* o
is_initialized = true; is_initialized = true;
// Clear all pages in the memory. // Clear all pages in the memory.
std::memset(device_memory_.GetPointer(physical_address_), 0, size_);
std::memset(device_memory_.GetPointer<void>(physical_address_), 0, size_);
return ResultSuccess; return ResultSuccess;
} }

4
src/core/hle/kernel/k_shared_memory.h

@ -54,7 +54,7 @@ public:
* @return A pointer to the shared memory block from the specified offset * @return A pointer to the shared memory block from the specified offset
*/ */
u8* GetPointer(std::size_t offset = 0) { u8* GetPointer(std::size_t offset = 0) {
return device_memory->GetPointer(physical_address + offset);
return device_memory->GetPointer<u8>(physical_address + offset);
} }
/** /**
@ -63,7 +63,7 @@ public:
* @return A pointer to the shared memory block from the specified offset * @return A pointer to the shared memory block from the specified offset
*/ */
const u8* GetPointer(std::size_t offset = 0) const { const u8* GetPointer(std::size_t offset = 0) const {
return device_memory->GetPointer(physical_address + offset);
return device_memory->GetPointer<u8>(physical_address + offset);
} }
void Finalize() override; void Finalize() override;

6
src/core/memory.cpp

@ -65,7 +65,7 @@ struct Memory::Impl {
return {}; return {};
} }
return system.DeviceMemory().GetPointer(paddr) + vaddr;
return system.DeviceMemory().GetPointer<u8>(paddr) + vaddr;
} }
[[nodiscard]] u8* GetPointerFromDebugMemory(VAddr vaddr) const { [[nodiscard]] u8* GetPointerFromDebugMemory(VAddr vaddr) const {
@ -75,7 +75,7 @@ struct Memory::Impl {
return {}; return {};
} }
return system.DeviceMemory().GetPointer(paddr) + vaddr;
return system.DeviceMemory().GetPointer<u8>(paddr) + vaddr;
} }
u8 Read8(const VAddr addr) { u8 Read8(const VAddr addr) {
@ -499,7 +499,7 @@ struct Memory::Impl {
} else { } else {
while (base != end) { while (base != end) {
page_table.pointers[base].Store( page_table.pointers[base].Store(
system.DeviceMemory().GetPointer(target) - (base << YUZU_PAGEBITS), type);
system.DeviceMemory().GetPointer<u8>(target) - (base << YUZU_PAGEBITS), type);
page_table.backing_addr[base] = target - (base << YUZU_PAGEBITS); page_table.backing_addr[base] = target - (base << YUZU_PAGEBITS);
ASSERT_MSG(page_table.pointers[base].Pointer(), ASSERT_MSG(page_table.pointers[base].Pointer(),

Loading…
Cancel
Save