diff options
Diffstat (limited to 'src/core/hle')
| -rw-r--r-- | src/core/hle/kernel/vm_manager.cpp | 7 | ||||
| -rw-r--r-- | src/core/hle/kernel/vm_manager.h | 5 | 
2 files changed, 8 insertions, 4 deletions
diff --git a/src/core/hle/kernel/vm_manager.cpp b/src/core/hle/kernel/vm_manager.cpp index 2610acf76..1e289f38a 100644 --- a/src/core/hle/kernel/vm_manager.cpp +++ b/src/core/hle/kernel/vm_manager.cpp @@ -8,6 +8,7 @@  #include "core/hle/kernel/vm_manager.h"  #include "core/memory_setup.h" +#include "core/mmio.h"  namespace Kernel { @@ -104,7 +105,7 @@ ResultVal<VMManager::VMAHandle> VMManager::MapBackingMemory(VAddr target, u8 * m      return MakeResult<VMAHandle>(MergeAdjacent(vma_handle));  } -ResultVal<VMManager::VMAHandle> VMManager::MapMMIO(VAddr target, PAddr paddr, u32 size, MemoryState state) { +ResultVal<VMManager::VMAHandle> VMManager::MapMMIO(VAddr target, PAddr paddr, u32 size, MemoryState state, Memory::MMIORegionPointer mmio_handler) {      // This is the appropriately sized VMA that will turn into our allocation.      CASCADE_RESULT(VMAIter vma_handle, CarveVMA(target, size));      VirtualMemoryArea& final_vma = vma_handle->second; @@ -114,6 +115,7 @@ ResultVal<VMManager::VMAHandle> VMManager::MapMMIO(VAddr target, PAddr paddr, u3      final_vma.permissions = VMAPermission::ReadWrite;      final_vma.meminfo_state = state;      final_vma.paddr = paddr; +    final_vma.mmio_handler = mmio_handler;      UpdatePageTableForVMA(final_vma);      return MakeResult<VMAHandle>(MergeAdjacent(vma_handle)); @@ -330,8 +332,7 @@ void VMManager::UpdatePageTableForVMA(const VirtualMemoryArea& vma) {          Memory::MapMemoryRegion(vma.base, vma.size, vma.backing_memory);          break;      case VMAType::MMIO: -        // TODO(yuriks): Add support for MMIO handlers. -        Memory::MapIoRegion(vma.base, vma.size); +        Memory::MapIoRegion(vma.base, vma.size, vma.mmio_handler);          break;      }  } diff --git a/src/core/hle/kernel/vm_manager.h b/src/core/hle/kernel/vm_manager.h index 4e95f1f0c..91d40655b 100644 --- a/src/core/hle/kernel/vm_manager.h +++ b/src/core/hle/kernel/vm_manager.h @@ -11,6 +11,7 @@  #include "common/common_types.h"  #include "core/hle/result.h" +#include "core/mmio.h"  namespace Kernel { @@ -92,6 +93,7 @@ struct VirtualMemoryArea {      // Settings for type = MMIO      /// Physical address of the register area this VMA maps to.      PAddr paddr = 0; +    Memory::MMIORegionPointer mmio_handler = nullptr;      /// Tests if this area can be merged to the right with `next`.      bool CanBeMergedWith(const VirtualMemoryArea& next) const; @@ -168,8 +170,9 @@ public:       * @param paddr The physical address where the registers are present.       * @param size Size of the mapping.       * @param state MemoryState tag to attach to the VMA. +     * @param mmio_handler The handler that will implement read and write for this MMIO region.       */ -    ResultVal<VMAHandle> MapMMIO(VAddr target, PAddr paddr, u32 size, MemoryState state); +    ResultVal<VMAHandle> MapMMIO(VAddr target, PAddr paddr, u32 size, MemoryState state, Memory::MMIORegionPointer mmio_handler);      /// Unmaps a range of addresses, splitting VMAs as necessary.      ResultCode UnmapRange(VAddr target, u32 size);  | 
