diff options
Diffstat (limited to 'src/core/hle/kernel/kernel.cpp')
| -rw-r--r-- | src/core/hle/kernel/kernel.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index d840d44e6..5984afd7e 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp | |||
| @@ -140,6 +140,7 @@ struct KernelCore::Impl { | |||
| 140 | CleanupObject(font_shared_mem); | 140 | CleanupObject(font_shared_mem); |
| 141 | CleanupObject(irs_shared_mem); | 141 | CleanupObject(irs_shared_mem); |
| 142 | CleanupObject(time_shared_mem); | 142 | CleanupObject(time_shared_mem); |
| 143 | CleanupObject(hidbus_shared_mem); | ||
| 143 | CleanupObject(system_resource_limit); | 144 | CleanupObject(system_resource_limit); |
| 144 | 145 | ||
| 145 | for (u32 core_id = 0; core_id < Core::Hardware::NUM_CPU_CORES; core_id++) { | 146 | for (u32 core_id = 0; core_id < Core::Hardware::NUM_CPU_CORES; core_id++) { |
| @@ -622,16 +623,20 @@ struct KernelCore::Impl { | |||
| 622 | constexpr std::size_t font_size{0x1100000}; | 623 | constexpr std::size_t font_size{0x1100000}; |
| 623 | constexpr std::size_t irs_size{0x8000}; | 624 | constexpr std::size_t irs_size{0x8000}; |
| 624 | constexpr std::size_t time_size{0x1000}; | 625 | constexpr std::size_t time_size{0x1000}; |
| 626 | constexpr std::size_t hidbus_size{0x1000}; | ||
| 625 | 627 | ||
| 626 | const PAddr hid_phys_addr{system_pool.GetAddress()}; | 628 | const PAddr hid_phys_addr{system_pool.GetAddress()}; |
| 627 | const PAddr font_phys_addr{system_pool.GetAddress() + hid_size}; | 629 | const PAddr font_phys_addr{system_pool.GetAddress() + hid_size}; |
| 628 | const PAddr irs_phys_addr{system_pool.GetAddress() + hid_size + font_size}; | 630 | const PAddr irs_phys_addr{system_pool.GetAddress() + hid_size + font_size}; |
| 629 | const PAddr time_phys_addr{system_pool.GetAddress() + hid_size + font_size + irs_size}; | 631 | const PAddr time_phys_addr{system_pool.GetAddress() + hid_size + font_size + irs_size}; |
| 632 | const PAddr hidbus_phys_addr{system_pool.GetAddress() + hid_size + font_size + irs_size + | ||
| 633 | time_size}; | ||
| 630 | 634 | ||
| 631 | hid_shared_mem = KSharedMemory::Create(system.Kernel()); | 635 | hid_shared_mem = KSharedMemory::Create(system.Kernel()); |
| 632 | font_shared_mem = KSharedMemory::Create(system.Kernel()); | 636 | font_shared_mem = KSharedMemory::Create(system.Kernel()); |
| 633 | irs_shared_mem = KSharedMemory::Create(system.Kernel()); | 637 | irs_shared_mem = KSharedMemory::Create(system.Kernel()); |
| 634 | time_shared_mem = KSharedMemory::Create(system.Kernel()); | 638 | time_shared_mem = KSharedMemory::Create(system.Kernel()); |
| 639 | hidbus_shared_mem = KSharedMemory::Create(system.Kernel()); | ||
| 635 | 640 | ||
| 636 | hid_shared_mem->Initialize(system.DeviceMemory(), nullptr, | 641 | hid_shared_mem->Initialize(system.DeviceMemory(), nullptr, |
| 637 | {hid_phys_addr, hid_size / PageSize}, | 642 | {hid_phys_addr, hid_size / PageSize}, |
| @@ -649,6 +654,10 @@ struct KernelCore::Impl { | |||
| 649 | {time_phys_addr, time_size / PageSize}, | 654 | {time_phys_addr, time_size / PageSize}, |
| 650 | Svc::MemoryPermission::None, Svc::MemoryPermission::Read, | 655 | Svc::MemoryPermission::None, Svc::MemoryPermission::Read, |
| 651 | time_phys_addr, time_size, "Time:SharedMemory"); | 656 | time_phys_addr, time_size, "Time:SharedMemory"); |
| 657 | hidbus_shared_mem->Initialize(system.DeviceMemory(), nullptr, | ||
| 658 | {hidbus_phys_addr, hidbus_size / PageSize}, | ||
| 659 | Svc::MemoryPermission::None, Svc::MemoryPermission::Read, | ||
| 660 | hidbus_phys_addr, hidbus_size, "HidBus:SharedMemory"); | ||
| 652 | } | 661 | } |
| 653 | 662 | ||
| 654 | KClientPort* CreateNamedServicePort(std::string name) { | 663 | KClientPort* CreateNamedServicePort(std::string name) { |
| @@ -748,6 +757,7 @@ struct KernelCore::Impl { | |||
| 748 | Kernel::KSharedMemory* font_shared_mem{}; | 757 | Kernel::KSharedMemory* font_shared_mem{}; |
| 749 | Kernel::KSharedMemory* irs_shared_mem{}; | 758 | Kernel::KSharedMemory* irs_shared_mem{}; |
| 750 | Kernel::KSharedMemory* time_shared_mem{}; | 759 | Kernel::KSharedMemory* time_shared_mem{}; |
| 760 | Kernel::KSharedMemory* hidbus_shared_mem{}; | ||
| 751 | 761 | ||
| 752 | // Memory layout | 762 | // Memory layout |
| 753 | std::unique_ptr<KMemoryLayout> memory_layout; | 763 | std::unique_ptr<KMemoryLayout> memory_layout; |
| @@ -1047,6 +1057,14 @@ const Kernel::KSharedMemory& KernelCore::GetTimeSharedMem() const { | |||
| 1047 | return *impl->time_shared_mem; | 1057 | return *impl->time_shared_mem; |
| 1048 | } | 1058 | } |
| 1049 | 1059 | ||
| 1060 | Kernel::KSharedMemory& KernelCore::GetHidBusSharedMem() { | ||
| 1061 | return *impl->hidbus_shared_mem; | ||
| 1062 | } | ||
| 1063 | |||
| 1064 | const Kernel::KSharedMemory& KernelCore::GetHidBusSharedMem() const { | ||
| 1065 | return *impl->hidbus_shared_mem; | ||
| 1066 | } | ||
| 1067 | |||
| 1050 | void KernelCore::Suspend(bool in_suspention) { | 1068 | void KernelCore::Suspend(bool in_suspention) { |
| 1051 | const bool should_suspend = exception_exited || in_suspention; | 1069 | const bool should_suspend = exception_exited || in_suspention; |
| 1052 | { | 1070 | { |