summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/kernel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/hle/kernel/kernel.cpp')
-rw-r--r--src/core/hle/kernel/kernel.cpp43
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) {