diff options
| author | Zephyron <zephyron@citron-emu.orgq> | 2025-02-17 17:33:10 +1000 | 
|---|---|---|
| committer | Zephyron <zephyron@citron-emu.orgq> | 2025-02-17 17:33:10 +1000 | 
| commit | c5e480e55ddc3183c48148daaa14c00ada855fee (patch) | |
| tree | 36613554e13c7526fc106b59b80c49bb1c893392 /src/core/hle/kernel | |
| parent | 1c9e17496b6f9f4b083c62aa25548617dd179a8b (diff) | |
feat: Add Home Menu launch support and system improvements
This commit adds support for launching the system Home Menu and implements
several system-level improvements:
- Add Home Menu launch functionality through new UI action
- Implement shutdown/reboot sequence handlers in GlobalStateController
- Add support for reserved region extra size in page tables
- Enhance audio controller with output management
- Expand parental control service capabilities
- Add profile service improvements for user management
Technical changes:
- Add OnHomeMenu() handler to launch QLaunch system applet
- Implement m_alias_region_extra_size tracking in page tables
- Add new CreateProcessFlag for reserved region extra size
- Expand audio controller interface with output management
- Add self-controller methods to various services
- Implement play timer and profile service improvements
The changes primarily focus on system menu integration and core service
improvements to better support system functionality.
Diffstat (limited to 'src/core/hle/kernel')
| -rw-r--r-- | src/core/hle/kernel/k_page_table_base.cpp | 1 | ||||
| -rw-r--r-- | src/core/hle/kernel/k_page_table_base.h | 5 | ||||
| -rw-r--r-- | src/core/hle/kernel/k_process_page_table.h | 4 | ||||
| -rw-r--r-- | src/core/hle/kernel/svc_types.h | 7 | 
4 files changed, 16 insertions, 1 deletions
diff --git a/src/core/hle/kernel/k_page_table_base.cpp b/src/core/hle/kernel/k_page_table_base.cpp index 5e00f0c81..5d5e3d002 100644 --- a/src/core/hle/kernel/k_page_table_base.cpp +++ b/src/core/hle/kernel/k_page_table_base.cpp @@ -172,6 +172,7 @@ Result KPageTableBase::InitializeForKernel(bool is_64_bit, KVirtualAddress start      m_mapped_unsafe_physical_memory = 0;      m_mapped_insecure_memory = 0;      m_mapped_ipc_server_memory = 0; +    m_alias_region_extra_size = 0;      m_memory_block_slab_manager =          m_kernel.GetSystemSystemResource().GetMemoryBlockSlabManagerPointer(); diff --git a/src/core/hle/kernel/k_page_table_base.h b/src/core/hle/kernel/k_page_table_base.h index 939b8a7ae..1a6f90ec2 100644 --- a/src/core/hle/kernel/k_page_table_base.h +++ b/src/core/hle/kernel/k_page_table_base.h @@ -208,6 +208,7 @@ private:      size_t m_mapped_unsafe_physical_memory{};      size_t m_mapped_insecure_memory{};      size_t m_mapped_ipc_server_memory{}; +    size_t m_alias_region_extra_size{};      mutable KLightLock m_general_lock;      mutable KLightLock m_map_physical_memory_lock;      KLightLock m_device_map_lock; @@ -715,6 +716,10 @@ public:          return m_address_space_width;      } +    size_t GetReservedRegionExtraSize() const { +        return m_alias_region_extra_size; +    } +  public:      // Linear mapped      static u8* GetLinearMappedVirtualPointer(KernelCore& kernel, KPhysicalAddress addr) { diff --git a/src/core/hle/kernel/k_process_page_table.h b/src/core/hle/kernel/k_process_page_table.h index 346d7ca08..4b9942d50 100644 --- a/src/core/hle/kernel/k_process_page_table.h +++ b/src/core/hle/kernel/k_process_page_table.h @@ -472,6 +472,10 @@ public:      const KPageTable& GetBasePageTable() const {          return m_page_table;      } + +    size_t GetReservedRegionExtraSize() const { +        return m_page_table.GetReservedRegionExtraSize(); +    }  };  } // namespace Kernel diff --git a/src/core/hle/kernel/svc_types.h b/src/core/hle/kernel/svc_types.h index e301f67c5..e4f60d953 100644 --- a/src/core/hle/kernel/svc_types.h +++ b/src/core/hle/kernel/svc_types.h @@ -153,6 +153,7 @@ enum class InfoType : u32 {      ThreadTickCount = 25,      IsSvcPermitted = 26,      IoRegionHint = 27, +    ReservedRegionExtraSize = 28,      MesosphereMeta = 65000,      MesosphereCurrentProcess = 65001, @@ -643,9 +644,13 @@ enum class CreateProcessFlag : u32 {      // 11.x+ DisableDeviceAddressSpaceMerge.      DisableDeviceAddressSpaceMerge = (1 << 12), +    // 13.x+ EnableReservedRegionExtraSize. +    EnableReservedRegionExtraSize = (1 << 13), +      // Mask of all flags.      All = Is64Bit | AddressSpaceMask | EnableDebug | EnableAslr | IsApplication | -          PoolPartitionMask | OptimizeMemoryAllocation | DisableDeviceAddressSpaceMerge, +          PoolPartitionMask | OptimizeMemoryAllocation | DisableDeviceAddressSpaceMerge | +          EnableReservedRegionExtraSize,  };  DECLARE_ENUM_FLAG_OPERATORS(CreateProcessFlag);  | 
