diff options
Diffstat (limited to 'src/core/hle/kernel/kernel.cpp')
| -rw-r--r-- | src/core/hle/kernel/kernel.cpp | 43 |
1 files changed, 14 insertions, 29 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index b75bac5df..1fb25f221 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp | |||
| @@ -94,6 +94,7 @@ struct KernelCore::Impl { | |||
| 94 | pt_heap_region.GetSize()); | 94 | pt_heap_region.GetSize()); |
| 95 | } | 95 | } |
| 96 | 96 | ||
| 97 | InitializeHackSharedMemory(); | ||
| 97 | RegisterHostThread(nullptr); | 98 | RegisterHostThread(nullptr); |
| 98 | 99 | ||
| 99 | default_service_thread = &CreateServiceThread(kernel, "DefaultServiceThread"); | 100 | default_service_thread = &CreateServiceThread(kernel, "DefaultServiceThread"); |
| @@ -726,14 +727,14 @@ struct KernelCore::Impl { | |||
| 726 | } | 727 | } |
| 727 | 728 | ||
| 728 | void InitializeMemoryLayout() { | 729 | void InitializeMemoryLayout() { |
| 729 | const auto system_pool = memory_layout->GetKernelSystemPoolRegionPhysicalExtents(); | ||
| 730 | |||
| 731 | // Initialize the memory manager. | 730 | // Initialize the memory manager. |
| 732 | memory_manager = std::make_unique<KMemoryManager>(system); | 731 | memory_manager = std::make_unique<KMemoryManager>(system); |
| 733 | const auto& management_region = memory_layout->GetPoolManagementRegion(); | 732 | const auto& management_region = memory_layout->GetPoolManagementRegion(); |
| 734 | ASSERT(management_region.GetEndAddress() != 0); | 733 | ASSERT(management_region.GetEndAddress() != 0); |
| 735 | memory_manager->Initialize(management_region.GetAddress(), management_region.GetSize()); | 734 | memory_manager->Initialize(management_region.GetAddress(), management_region.GetSize()); |
| 735 | } | ||
| 736 | 736 | ||
| 737 | void InitializeHackSharedMemory() { | ||
| 737 | // Setup memory regions for emulated processes | 738 | // Setup memory regions for emulated processes |
| 738 | // TODO(bunnei): These should not be hardcoded regions initialized within the kernel | 739 | // TODO(bunnei): These should not be hardcoded regions initialized within the kernel |
| 739 | constexpr std::size_t hid_size{0x40000}; | 740 | constexpr std::size_t hid_size{0x40000}; |
| @@ -742,39 +743,23 @@ struct KernelCore::Impl { | |||
| 742 | constexpr std::size_t time_size{0x1000}; | 743 | constexpr std::size_t time_size{0x1000}; |
| 743 | constexpr std::size_t hidbus_size{0x1000}; | 744 | constexpr std::size_t hidbus_size{0x1000}; |
| 744 | 745 | ||
| 745 | const PAddr hid_phys_addr{system_pool.GetAddress()}; | ||
| 746 | const PAddr font_phys_addr{system_pool.GetAddress() + hid_size}; | ||
| 747 | const PAddr irs_phys_addr{system_pool.GetAddress() + hid_size + font_size}; | ||
| 748 | const PAddr time_phys_addr{system_pool.GetAddress() + hid_size + font_size + irs_size}; | ||
| 749 | const PAddr hidbus_phys_addr{system_pool.GetAddress() + hid_size + font_size + irs_size + | ||
| 750 | time_size}; | ||
| 751 | |||
| 752 | hid_shared_mem = KSharedMemory::Create(system.Kernel()); | 746 | hid_shared_mem = KSharedMemory::Create(system.Kernel()); |
| 753 | font_shared_mem = KSharedMemory::Create(system.Kernel()); | 747 | font_shared_mem = KSharedMemory::Create(system.Kernel()); |
| 754 | irs_shared_mem = KSharedMemory::Create(system.Kernel()); | 748 | irs_shared_mem = KSharedMemory::Create(system.Kernel()); |
| 755 | time_shared_mem = KSharedMemory::Create(system.Kernel()); | 749 | time_shared_mem = KSharedMemory::Create(system.Kernel()); |
| 756 | hidbus_shared_mem = KSharedMemory::Create(system.Kernel()); | 750 | hidbus_shared_mem = KSharedMemory::Create(system.Kernel()); |
| 757 | 751 | ||
| 758 | hid_shared_mem->Initialize(system.DeviceMemory(), nullptr, | 752 | hid_shared_mem->Initialize(system.DeviceMemory(), nullptr, Svc::MemoryPermission::None, |
| 759 | {hid_phys_addr, hid_size / PageSize}, | 753 | Svc::MemoryPermission::Read, hid_size, "HID:SharedMemory"); |
| 760 | Svc::MemoryPermission::None, Svc::MemoryPermission::Read, | 754 | font_shared_mem->Initialize(system.DeviceMemory(), nullptr, Svc::MemoryPermission::None, |
| 761 | hid_phys_addr, hid_size, "HID:SharedMemory"); | 755 | Svc::MemoryPermission::Read, font_size, "Font:SharedMemory"); |
| 762 | font_shared_mem->Initialize(system.DeviceMemory(), nullptr, | 756 | irs_shared_mem->Initialize(system.DeviceMemory(), nullptr, Svc::MemoryPermission::None, |
| 763 | {font_phys_addr, font_size / PageSize}, | 757 | Svc::MemoryPermission::Read, irs_size, "IRS:SharedMemory"); |
| 764 | Svc::MemoryPermission::None, Svc::MemoryPermission::Read, | 758 | time_shared_mem->Initialize(system.DeviceMemory(), nullptr, Svc::MemoryPermission::None, |
| 765 | font_phys_addr, font_size, "Font:SharedMemory"); | 759 | Svc::MemoryPermission::Read, time_size, "Time:SharedMemory"); |
| 766 | irs_shared_mem->Initialize(system.DeviceMemory(), nullptr, | 760 | hidbus_shared_mem->Initialize(system.DeviceMemory(), nullptr, Svc::MemoryPermission::None, |
| 767 | {irs_phys_addr, irs_size / PageSize}, | 761 | Svc::MemoryPermission::Read, hidbus_size, |
| 768 | Svc::MemoryPermission::None, Svc::MemoryPermission::Read, | 762 | "HidBus:SharedMemory"); |
| 769 | irs_phys_addr, irs_size, "IRS:SharedMemory"); | ||
| 770 | time_shared_mem->Initialize(system.DeviceMemory(), nullptr, | ||
| 771 | {time_phys_addr, time_size / PageSize}, | ||
| 772 | Svc::MemoryPermission::None, Svc::MemoryPermission::Read, | ||
| 773 | time_phys_addr, time_size, "Time:SharedMemory"); | ||
| 774 | hidbus_shared_mem->Initialize(system.DeviceMemory(), nullptr, | ||
| 775 | {hidbus_phys_addr, hidbus_size / PageSize}, | ||
| 776 | Svc::MemoryPermission::None, Svc::MemoryPermission::Read, | ||
| 777 | hidbus_phys_addr, hidbus_size, "HidBus:SharedMemory"); | ||
| 778 | } | 763 | } |
| 779 | 764 | ||
| 780 | KClientPort* CreateNamedServicePort(std::string name) { | 765 | KClientPort* CreateNamedServicePort(std::string name) { |