Core: pass down Core::System reference to all services (#4272)
* Core: pass down Core::System reference to all services This has to be done at once due to unified interface used by HLE/LLE switcher * apt: eliminate Core::System::GetInstance * gpu_gsp: eliminate Core::System::GetInstance in service * hid: eliminate Core::System::GetInstance * nwm: eliminate Core::System::GetInstance * err_f: eliminate Core::System::GetInstance
This commit is contained in:
		@@ -182,7 +182,8 @@ void Module::Interface::GetSharedFont(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
    IPC::RequestBuilder rb = rp.MakeBuilder(2, 2);
 | 
			
		||||
 | 
			
		||||
    // Log in telemetry if the game uses the shared font
 | 
			
		||||
    Core::Telemetry().AddField(Telemetry::FieldType::Session, "RequiresSharedFont", true);
 | 
			
		||||
    apt->system.TelemetrySession().AddField(Telemetry::FieldType::Session, "RequiresSharedFont",
 | 
			
		||||
                                            true);
 | 
			
		||||
 | 
			
		||||
    if (!apt->shared_font_loaded) {
 | 
			
		||||
        // On real 3DS, font loading happens on booting. However, we load it on demand to coordinate
 | 
			
		||||
@@ -197,8 +198,7 @@ void Module::Interface::GetSharedFont(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
            rb.Push<u32>(-1); // TODO: Find the right error code
 | 
			
		||||
            rb.Push<u32>(0);
 | 
			
		||||
            rb.PushCopyObjects<Kernel::Object>(nullptr);
 | 
			
		||||
            Core::System::GetInstance().SetStatus(Core::System::ResultStatus::ErrorSystemFiles,
 | 
			
		||||
                                                  "Shared fonts");
 | 
			
		||||
            apt->system.SetStatus(Core::System::ResultStatus::ErrorSystemFiles, "Shared fonts");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@@ -544,7 +544,7 @@ void Module::Interface::CloseApplication(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
 | 
			
		||||
    LOG_DEBUG(Service_APT, "called");
 | 
			
		||||
 | 
			
		||||
    Core::System::GetInstance().RequestShutdown();
 | 
			
		||||
    apt->system.RequestShutdown();
 | 
			
		||||
 | 
			
		||||
    IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
 | 
			
		||||
    rb.Push(RESULT_SUCCESS);
 | 
			
		||||
@@ -584,11 +584,11 @@ void Module::Interface::DoApplicationJump(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
 | 
			
		||||
    if (application_reset_prepared) {
 | 
			
		||||
        // Reset system
 | 
			
		||||
        Core::System::GetInstance().RequestReset();
 | 
			
		||||
        apt->system.RequestReset();
 | 
			
		||||
    } else {
 | 
			
		||||
        // After the jump, the application should shutdown
 | 
			
		||||
        // TODO: Actually implement the jump
 | 
			
		||||
        Core::System::GetInstance().RequestShutdown();
 | 
			
		||||
        apt->system.RequestShutdown();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
 | 
			
		||||
@@ -843,7 +843,7 @@ Module::Interface::Interface(std::shared_ptr<Module> apt, const char* name, u32
 | 
			
		||||
 | 
			
		||||
Module::Interface::~Interface() = default;
 | 
			
		||||
 | 
			
		||||
Module::Module() {
 | 
			
		||||
Module::Module(Core::System& system) : system(system) {
 | 
			
		||||
    applet_manager = std::make_shared<AppletManager>();
 | 
			
		||||
 | 
			
		||||
    using Kernel::MemoryPermission;
 | 
			
		||||
@@ -857,8 +857,9 @@ Module::Module() {
 | 
			
		||||
 | 
			
		||||
Module::~Module() {}
 | 
			
		||||
 | 
			
		||||
void InstallInterfaces(SM::ServiceManager& service_manager) {
 | 
			
		||||
    auto apt = std::make_shared<Module>();
 | 
			
		||||
void InstallInterfaces(Core::System& system) {
 | 
			
		||||
    auto& service_manager = system.ServiceManager();
 | 
			
		||||
    auto apt = std::make_shared<Module>(system);
 | 
			
		||||
    std::make_shared<APT_U>(apt)->InstallAsService(service_manager);
 | 
			
		||||
    std::make_shared<APT_S>(apt)->InstallAsService(service_manager);
 | 
			
		||||
    std::make_shared<APT_A>(apt)->InstallAsService(service_manager);
 | 
			
		||||
 
 | 
			
		||||
@@ -11,6 +11,10 @@
 | 
			
		||||
#include "core/hle/kernel/kernel.h"
 | 
			
		||||
#include "core/hle/service/service.h"
 | 
			
		||||
 | 
			
		||||
namespace Core {
 | 
			
		||||
class System;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
namespace Kernel {
 | 
			
		||||
class Mutex;
 | 
			
		||||
class SharedMemory;
 | 
			
		||||
@@ -52,7 +56,7 @@ enum class ScreencapPostPermission : u32 {
 | 
			
		||||
 | 
			
		||||
class Module final {
 | 
			
		||||
public:
 | 
			
		||||
    Module();
 | 
			
		||||
    explicit Module(Core::System& system);
 | 
			
		||||
    ~Module();
 | 
			
		||||
 | 
			
		||||
    class Interface : public ServiceFramework<Interface> {
 | 
			
		||||
@@ -582,6 +586,8 @@ private:
 | 
			
		||||
    bool LoadSharedFont();
 | 
			
		||||
    bool LoadLegacySharedFont();
 | 
			
		||||
 | 
			
		||||
    Core::System& system;
 | 
			
		||||
 | 
			
		||||
    /// Handle to shared memory region designated to for shared system font
 | 
			
		||||
    Kernel::SharedPtr<Kernel::SharedMemory> shared_font_mem;
 | 
			
		||||
    bool shared_font_loaded = false;
 | 
			
		||||
@@ -602,6 +608,6 @@ private:
 | 
			
		||||
    std::shared_ptr<AppletManager> applet_manager;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void InstallInterfaces(SM::ServiceManager& service_manager);
 | 
			
		||||
void InstallInterfaces(Core::System& system);
 | 
			
		||||
 | 
			
		||||
} // namespace Service::APT
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user