|
|
|
@ -83,12 +83,6 @@ FileSys::StorageId GetStorageIdForFrontendSlot( |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void KProcessDeleter(Kernel::KProcess* process) { |
|
|
|
process->Destroy(); |
|
|
|
} |
|
|
|
|
|
|
|
using KProcessPtr = std::unique_ptr<Kernel::KProcess, decltype(&KProcessDeleter)>; |
|
|
|
|
|
|
|
} // Anonymous namespace
|
|
|
|
|
|
|
|
FileSys::VirtualFile GetGameFileFromPath(const FileSys::VirtualFilesystem& vfs, |
|
|
|
@ -261,11 +255,10 @@ struct System::Impl { |
|
|
|
} |
|
|
|
|
|
|
|
telemetry_session->AddInitialInfo(*app_loader, fs_controller, *content_provider); |
|
|
|
main_process = KProcessPtr{Kernel::KProcess::Create(system.Kernel()), KProcessDeleter}; |
|
|
|
ASSERT(Kernel::KProcess::Initialize(main_process.get(), system, "main", |
|
|
|
auto main_process = Kernel::KProcess::Create(system.Kernel()); |
|
|
|
ASSERT(Kernel::KProcess::Initialize(main_process, system, "main", |
|
|
|
Kernel::KProcess::ProcessType::Userland) |
|
|
|
.IsSuccess()); |
|
|
|
main_process->Open(); |
|
|
|
const auto [load_result, load_parameters] = app_loader->Load(*main_process, system); |
|
|
|
if (load_result != Loader::ResultStatus::Success) { |
|
|
|
LOG_CRITICAL(Core, "Failed to load ROM (Error {})!", load_result); |
|
|
|
@ -275,7 +268,7 @@ struct System::Impl { |
|
|
|
static_cast<u32>(SystemResultStatus::ErrorLoader) + static_cast<u32>(load_result)); |
|
|
|
} |
|
|
|
AddGlueRegistrationForProcess(*app_loader, *main_process); |
|
|
|
kernel.MakeCurrentProcess(main_process.get()); |
|
|
|
kernel.MakeCurrentProcess(main_process); |
|
|
|
kernel.InitializeCores(); |
|
|
|
|
|
|
|
// Initialize cheat engine
|
|
|
|
@ -340,8 +333,6 @@ struct System::Impl { |
|
|
|
kernel.Shutdown(); |
|
|
|
memory.Reset(); |
|
|
|
applet_manager.ClearAll(); |
|
|
|
// TODO: The main process should be freed based on KAutoObject ref counting.
|
|
|
|
main_process.reset(); |
|
|
|
|
|
|
|
LOG_DEBUG(Core, "Shutdown OK"); |
|
|
|
} |
|
|
|
@ -403,7 +394,6 @@ struct System::Impl { |
|
|
|
std::unique_ptr<Tegra::GPU> gpu_core; |
|
|
|
std::unique_ptr<Hardware::InterruptManager> interrupt_manager; |
|
|
|
std::unique_ptr<Core::DeviceMemory> device_memory; |
|
|
|
KProcessPtr main_process{nullptr, KProcessDeleter}; |
|
|
|
Core::Memory::Memory memory; |
|
|
|
CpuManager cpu_manager; |
|
|
|
std::atomic_bool is_powered_on{}; |
|
|
|
|