core: ns: Implement pl:s service
This commit is contained in:
		| @@ -540,14 +540,14 @@ add_library(core STATIC | ||||
|     hle/service/npns/npns.cpp | ||||
|     hle/service/npns/npns.h | ||||
|     hle/service/ns/errors.h | ||||
|     hle/service/ns/iplatform_service_manager.cpp | ||||
|     hle/service/ns/iplatform_service_manager.h | ||||
|     hle/service/ns/language.cpp | ||||
|     hle/service/ns/language.h | ||||
|     hle/service/ns/ns.cpp | ||||
|     hle/service/ns/ns.h | ||||
|     hle/service/ns/pdm_qry.cpp | ||||
|     hle/service/ns/pdm_qry.h | ||||
|     hle/service/ns/pl_u.cpp | ||||
|     hle/service/ns/pl_u.h | ||||
|     hle/service/nvdrv/devices/nvdevice.h | ||||
|     hle/service/nvdrv/devices/nvdisp_disp0.cpp | ||||
|     hle/service/nvdrv/devices/nvdisp_disp0.h | ||||
|   | ||||
| @@ -9,7 +9,7 @@ | ||||
| #include "core/file_sys/system_archive/data/font_standard.h" | ||||
| #include "core/file_sys/system_archive/shared_font.h" | ||||
| #include "core/file_sys/vfs_vector.h" | ||||
| #include "core/hle/service/ns/pl_u.h" | ||||
| #include "core/hle/service/ns/iplatform_service_manager.h" | ||||
|  | ||||
| namespace FileSys::SystemArchive { | ||||
|  | ||||
|   | ||||
| @@ -21,7 +21,7 @@ | ||||
| #include "core/hle/service/am/am.h" | ||||
| #include "core/hle/service/am/applets/applet_web_browser.h" | ||||
| #include "core/hle/service/filesystem/filesystem.h" | ||||
| #include "core/hle/service/ns/pl_u.h" | ||||
| #include "core/hle/service/ns/iplatform_service_manager.h" | ||||
| #include "core/loader/loader.h" | ||||
|  | ||||
| namespace Service::AM::Applets { | ||||
|   | ||||
| @@ -20,7 +20,7 @@ | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/physical_memory.h" | ||||
| #include "core/hle/service/filesystem/filesystem.h" | ||||
| #include "core/hle/service/ns/pl_u.h" | ||||
| #include "core/hle/service/ns/iplatform_service_manager.h" | ||||
| 
 | ||||
| namespace Service::NS { | ||||
| 
 | ||||
| @@ -99,7 +99,7 @@ static u32 GetU32Swapped(const u8* data) { | ||||
|     return Common::swap32(value); | ||||
| } | ||||
| 
 | ||||
| struct PL_U::Impl { | ||||
| struct IPlatformServiceManager::Impl { | ||||
|     const FontRegion& GetSharedFontRegion(std::size_t index) const { | ||||
|         if (index >= shared_font_regions.size() || shared_font_regions.empty()) { | ||||
|             // No font fallback
 | ||||
| @@ -134,16 +134,16 @@ struct PL_U::Impl { | ||||
|     std::vector<FontRegion> shared_font_regions; | ||||
| }; | ||||
| 
 | ||||
| PL_U::PL_U(Core::System& system_) | ||||
|     : ServiceFramework{system_, "pl:u"}, impl{std::make_unique<Impl>()} { | ||||
| IPlatformServiceManager::IPlatformServiceManager(Core::System& system_, const char* service_name_) | ||||
|     : ServiceFramework{system_, service_name_}, impl{std::make_unique<Impl>()} { | ||||
|     // clang-format off
 | ||||
|     static const FunctionInfo functions[] = { | ||||
|         {0, &PL_U::RequestLoad, "RequestLoad"}, | ||||
|         {1, &PL_U::GetLoadState, "GetLoadState"}, | ||||
|         {2, &PL_U::GetSize, "GetSize"}, | ||||
|         {3, &PL_U::GetSharedMemoryAddressOffset, "GetSharedMemoryAddressOffset"}, | ||||
|         {4, &PL_U::GetSharedMemoryNativeHandle, "GetSharedMemoryNativeHandle"}, | ||||
|         {5, &PL_U::GetSharedFontInOrderOfPriority, "GetSharedFontInOrderOfPriority"}, | ||||
|         {0, &IPlatformServiceManager::RequestLoad, "RequestLoad"}, | ||||
|         {1, &IPlatformServiceManager::GetLoadState, "GetLoadState"}, | ||||
|         {2, &IPlatformServiceManager::GetSize, "GetSize"}, | ||||
|         {3, &IPlatformServiceManager::GetSharedMemoryAddressOffset, "GetSharedMemoryAddressOffset"}, | ||||
|         {4, &IPlatformServiceManager::GetSharedMemoryNativeHandle, "GetSharedMemoryNativeHandle"}, | ||||
|         {5, &IPlatformServiceManager::GetSharedFontInOrderOfPriority, "GetSharedFontInOrderOfPriority"}, | ||||
|         {6, nullptr, "GetSharedFontInOrderOfPriorityForSystem"}, | ||||
|         {100, nullptr, "RequestApplicationFunctionAuthorization"}, | ||||
|         {101, nullptr, "RequestApplicationFunctionAuthorizationByProcessId"}, | ||||
| @@ -206,9 +206,9 @@ PL_U::PL_U(Core::System& system_) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| PL_U::~PL_U() = default; | ||||
| IPlatformServiceManager::~IPlatformServiceManager() = default; | ||||
| 
 | ||||
| void PL_U::RequestLoad(Kernel::HLERequestContext& ctx) { | ||||
| void IPlatformServiceManager::RequestLoad(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const u32 shared_font_type{rp.Pop<u32>()}; | ||||
|     // Games don't call this so all fonts should be loaded
 | ||||
| @@ -218,7 +218,7 @@ void PL_U::RequestLoad(Kernel::HLERequestContext& ctx) { | ||||
|     rb.Push(ResultSuccess); | ||||
| } | ||||
| 
 | ||||
| void PL_U::GetLoadState(Kernel::HLERequestContext& ctx) { | ||||
| void IPlatformServiceManager::GetLoadState(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const u32 font_id{rp.Pop<u32>()}; | ||||
|     LOG_DEBUG(Service_NS, "called, font_id={}", font_id); | ||||
| @@ -228,7 +228,7 @@ void PL_U::GetLoadState(Kernel::HLERequestContext& ctx) { | ||||
|     rb.Push<u32>(static_cast<u32>(LoadState::Done)); | ||||
| } | ||||
| 
 | ||||
| void PL_U::GetSize(Kernel::HLERequestContext& ctx) { | ||||
| void IPlatformServiceManager::GetSize(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const u32 font_id{rp.Pop<u32>()}; | ||||
|     LOG_DEBUG(Service_NS, "called, font_id={}", font_id); | ||||
| @@ -238,7 +238,7 @@ void PL_U::GetSize(Kernel::HLERequestContext& ctx) { | ||||
|     rb.Push<u32>(impl->GetSharedFontRegion(font_id).size); | ||||
| } | ||||
| 
 | ||||
| void PL_U::GetSharedMemoryAddressOffset(Kernel::HLERequestContext& ctx) { | ||||
| void IPlatformServiceManager::GetSharedMemoryAddressOffset(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const u32 font_id{rp.Pop<u32>()}; | ||||
|     LOG_DEBUG(Service_NS, "called, font_id={}", font_id); | ||||
| @@ -248,7 +248,7 @@ void PL_U::GetSharedMemoryAddressOffset(Kernel::HLERequestContext& ctx) { | ||||
|     rb.Push<u32>(impl->GetSharedFontRegion(font_id).offset); | ||||
| } | ||||
| 
 | ||||
| void PL_U::GetSharedMemoryNativeHandle(Kernel::HLERequestContext& ctx) { | ||||
| void IPlatformServiceManager::GetSharedMemoryNativeHandle(Kernel::HLERequestContext& ctx) { | ||||
|     // Map backing memory for the font data
 | ||||
|     LOG_DEBUG(Service_NS, "called"); | ||||
| 
 | ||||
| @@ -261,7 +261,7 @@ void PL_U::GetSharedMemoryNativeHandle(Kernel::HLERequestContext& ctx) { | ||||
|     rb.PushCopyObjects(&kernel.GetFontSharedMem()); | ||||
| } | ||||
| 
 | ||||
| void PL_U::GetSharedFontInOrderOfPriority(Kernel::HLERequestContext& ctx) { | ||||
| void IPlatformServiceManager::GetSharedFontInOrderOfPriority(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const u64 language_code{rp.Pop<u64>()}; // TODO(ogniK): Find out what this is used for
 | ||||
|     LOG_DEBUG(Service_NS, "called, language_code={:X}", language_code); | ||||
| @@ -36,10 +36,10 @@ constexpr std::array<std::pair<FontArchives, const char*>, 7> SHARED_FONTS{ | ||||
| void DecryptSharedFontToTTF(const std::vector<u32>& input, std::vector<u8>& output); | ||||
| void EncryptSharedFont(const std::vector<u32>& input, std::vector<u8>& output, std::size_t& offset); | ||||
| 
 | ||||
| class PL_U final : public ServiceFramework<PL_U> { | ||||
| class IPlatformServiceManager final : public ServiceFramework<IPlatformServiceManager> { | ||||
| public: | ||||
|     explicit PL_U(Core::System& system_); | ||||
|     ~PL_U() override; | ||||
|     explicit IPlatformServiceManager(Core::System& system_, const char* service_name_); | ||||
|     ~IPlatformServiceManager() override; | ||||
| 
 | ||||
| private: | ||||
|     void RequestLoad(Kernel::HLERequestContext& ctx); | ||||
| @@ -9,10 +9,10 @@ | ||||
| #include "core/file_sys/vfs.h" | ||||
| #include "core/hle/ipc_helpers.h" | ||||
| #include "core/hle/service/ns/errors.h" | ||||
| #include "core/hle/service/ns/iplatform_service_manager.h" | ||||
| #include "core/hle/service/ns/language.h" | ||||
| #include "core/hle/service/ns/ns.h" | ||||
| #include "core/hle/service/ns/pdm_qry.h" | ||||
| #include "core/hle/service/ns/pl_u.h" | ||||
| #include "core/hle/service/set/set.h" | ||||
|  | ||||
| namespace Service::NS { | ||||
| @@ -764,7 +764,8 @@ void InstallInterfaces(SM::ServiceManager& service_manager, Core::System& system | ||||
|  | ||||
|     std::make_shared<PDM_QRY>(system)->InstallAsService(service_manager); | ||||
|  | ||||
|     std::make_shared<PL_U>(system)->InstallAsService(service_manager); | ||||
|     std::make_shared<IPlatformServiceManager>(system, "pl:s")->InstallAsService(service_manager); | ||||
|     std::make_shared<IPlatformServiceManager>(system, "pl:u")->InstallAsService(service_manager); | ||||
| } | ||||
|  | ||||
| } // namespace Service::NS | ||||
|   | ||||
		Reference in New Issue
	
	Block a user