mirror of https://git.suyu.dev/suyu/suyu
Merge pull request #8855 from german77/pls
core: ns: Implement pl:s service
This commit is contained in:
commit
3faa1c54b6
|
@ -538,14 +538,14 @@ add_library(core STATIC
|
||||||
hle/service/npns/npns.cpp
|
hle/service/npns/npns.cpp
|
||||||
hle/service/npns/npns.h
|
hle/service/npns/npns.h
|
||||||
hle/service/ns/errors.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.cpp
|
||||||
hle/service/ns/language.h
|
hle/service/ns/language.h
|
||||||
hle/service/ns/ns.cpp
|
hle/service/ns/ns.cpp
|
||||||
hle/service/ns/ns.h
|
hle/service/ns/ns.h
|
||||||
hle/service/ns/pdm_qry.cpp
|
hle/service/ns/pdm_qry.cpp
|
||||||
hle/service/ns/pdm_qry.h
|
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/nvdevice.h
|
||||||
hle/service/nvdrv/devices/nvdisp_disp0.cpp
|
hle/service/nvdrv/devices/nvdisp_disp0.cpp
|
||||||
hle/service/nvdrv/devices/nvdisp_disp0.h
|
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/data/font_standard.h"
|
||||||
#include "core/file_sys/system_archive/shared_font.h"
|
#include "core/file_sys/system_archive/shared_font.h"
|
||||||
#include "core/file_sys/vfs_vector.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 {
|
namespace FileSys::SystemArchive {
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
#include "core/hle/service/am/am.h"
|
#include "core/hle/service/am/am.h"
|
||||||
#include "core/hle/service/am/applets/applet_web_browser.h"
|
#include "core/hle/service/am/applets/applet_web_browser.h"
|
||||||
#include "core/hle/service/filesystem/filesystem.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"
|
#include "core/loader/loader.h"
|
||||||
|
|
||||||
namespace Service::AM::Applets {
|
namespace Service::AM::Applets {
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
#include "core/hle/kernel/kernel.h"
|
#include "core/hle/kernel/kernel.h"
|
||||||
#include "core/hle/kernel/physical_memory.h"
|
#include "core/hle/kernel/physical_memory.h"
|
||||||
#include "core/hle/service/filesystem/filesystem.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 {
|
namespace Service::NS {
|
||||||
|
|
||||||
|
@ -99,7 +99,7 @@ static u32 GetU32Swapped(const u8* data) {
|
||||||
return Common::swap32(value);
|
return Common::swap32(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct PL_U::Impl {
|
struct IPlatformServiceManager::Impl {
|
||||||
const FontRegion& GetSharedFontRegion(std::size_t index) const {
|
const FontRegion& GetSharedFontRegion(std::size_t index) const {
|
||||||
if (index >= shared_font_regions.size() || shared_font_regions.empty()) {
|
if (index >= shared_font_regions.size() || shared_font_regions.empty()) {
|
||||||
// No font fallback
|
// No font fallback
|
||||||
|
@ -134,16 +134,16 @@ struct PL_U::Impl {
|
||||||
std::vector<FontRegion> shared_font_regions;
|
std::vector<FontRegion> shared_font_regions;
|
||||||
};
|
};
|
||||||
|
|
||||||
PL_U::PL_U(Core::System& system_)
|
IPlatformServiceManager::IPlatformServiceManager(Core::System& system_, const char* service_name_)
|
||||||
: ServiceFramework{system_, "pl:u"}, impl{std::make_unique<Impl>()} {
|
: ServiceFramework{system_, service_name_}, impl{std::make_unique<Impl>()} {
|
||||||
// clang-format off
|
// clang-format off
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0, &PL_U::RequestLoad, "RequestLoad"},
|
{0, &IPlatformServiceManager::RequestLoad, "RequestLoad"},
|
||||||
{1, &PL_U::GetLoadState, "GetLoadState"},
|
{1, &IPlatformServiceManager::GetLoadState, "GetLoadState"},
|
||||||
{2, &PL_U::GetSize, "GetSize"},
|
{2, &IPlatformServiceManager::GetSize, "GetSize"},
|
||||||
{3, &PL_U::GetSharedMemoryAddressOffset, "GetSharedMemoryAddressOffset"},
|
{3, &IPlatformServiceManager::GetSharedMemoryAddressOffset, "GetSharedMemoryAddressOffset"},
|
||||||
{4, &PL_U::GetSharedMemoryNativeHandle, "GetSharedMemoryNativeHandle"},
|
{4, &IPlatformServiceManager::GetSharedMemoryNativeHandle, "GetSharedMemoryNativeHandle"},
|
||||||
{5, &PL_U::GetSharedFontInOrderOfPriority, "GetSharedFontInOrderOfPriority"},
|
{5, &IPlatformServiceManager::GetSharedFontInOrderOfPriority, "GetSharedFontInOrderOfPriority"},
|
||||||
{6, nullptr, "GetSharedFontInOrderOfPriorityForSystem"},
|
{6, nullptr, "GetSharedFontInOrderOfPriorityForSystem"},
|
||||||
{100, nullptr, "RequestApplicationFunctionAuthorization"},
|
{100, nullptr, "RequestApplicationFunctionAuthorization"},
|
||||||
{101, nullptr, "RequestApplicationFunctionAuthorizationByProcessId"},
|
{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};
|
IPC::RequestParser rp{ctx};
|
||||||
const u32 shared_font_type{rp.Pop<u32>()};
|
const u32 shared_font_type{rp.Pop<u32>()};
|
||||||
// Games don't call this so all fonts should be loaded
|
// 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);
|
rb.Push(ResultSuccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PL_U::GetLoadState(Kernel::HLERequestContext& ctx) {
|
void IPlatformServiceManager::GetLoadState(Kernel::HLERequestContext& ctx) {
|
||||||
IPC::RequestParser rp{ctx};
|
IPC::RequestParser rp{ctx};
|
||||||
const u32 font_id{rp.Pop<u32>()};
|
const u32 font_id{rp.Pop<u32>()};
|
||||||
LOG_DEBUG(Service_NS, "called, font_id={}", font_id);
|
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));
|
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};
|
IPC::RequestParser rp{ctx};
|
||||||
const u32 font_id{rp.Pop<u32>()};
|
const u32 font_id{rp.Pop<u32>()};
|
||||||
LOG_DEBUG(Service_NS, "called, font_id={}", font_id);
|
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);
|
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};
|
IPC::RequestParser rp{ctx};
|
||||||
const u32 font_id{rp.Pop<u32>()};
|
const u32 font_id{rp.Pop<u32>()};
|
||||||
LOG_DEBUG(Service_NS, "called, font_id={}", font_id);
|
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);
|
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
|
// Map backing memory for the font data
|
||||||
LOG_DEBUG(Service_NS, "called");
|
LOG_DEBUG(Service_NS, "called");
|
||||||
|
|
||||||
|
@ -261,7 +261,7 @@ void PL_U::GetSharedMemoryNativeHandle(Kernel::HLERequestContext& ctx) {
|
||||||
rb.PushCopyObjects(&kernel.GetFontSharedMem());
|
rb.PushCopyObjects(&kernel.GetFontSharedMem());
|
||||||
}
|
}
|
||||||
|
|
||||||
void PL_U::GetSharedFontInOrderOfPriority(Kernel::HLERequestContext& ctx) {
|
void IPlatformServiceManager::GetSharedFontInOrderOfPriority(Kernel::HLERequestContext& ctx) {
|
||||||
IPC::RequestParser rp{ctx};
|
IPC::RequestParser rp{ctx};
|
||||||
const u64 language_code{rp.Pop<u64>()}; // TODO(ogniK): Find out what this is used for
|
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);
|
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 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);
|
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:
|
public:
|
||||||
explicit PL_U(Core::System& system_);
|
explicit IPlatformServiceManager(Core::System& system_, const char* service_name_);
|
||||||
~PL_U() override;
|
~IPlatformServiceManager() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void RequestLoad(Kernel::HLERequestContext& ctx);
|
void RequestLoad(Kernel::HLERequestContext& ctx);
|
|
@ -9,10 +9,10 @@
|
||||||
#include "core/file_sys/vfs.h"
|
#include "core/file_sys/vfs.h"
|
||||||
#include "core/hle/ipc_helpers.h"
|
#include "core/hle/ipc_helpers.h"
|
||||||
#include "core/hle/service/ns/errors.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/language.h"
|
||||||
#include "core/hle/service/ns/ns.h"
|
#include "core/hle/service/ns/ns.h"
|
||||||
#include "core/hle/service/ns/pdm_qry.h"
|
#include "core/hle/service/ns/pdm_qry.h"
|
||||||
#include "core/hle/service/ns/pl_u.h"
|
|
||||||
#include "core/hle/service/set/set.h"
|
#include "core/hle/service/set/set.h"
|
||||||
|
|
||||||
namespace Service::NS {
|
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<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
|
} // namespace Service::NS
|
||||||
|
|
Loading…
Reference in New Issue