diff options
| author | 2017-09-23 14:01:04 -0500 | |
|---|---|---|
| committer | 2017-09-24 08:59:31 -0500 | |
| commit | 7096f01c14ff76aefd829ae449a8ab5d474eacf7 (patch) | |
| tree | 55aa778db706781b0dc9c5f677bb6ecd4c0c360e /src | |
| parent | HLE/APT: Prepare the APT Wakeup parameter when the game calls Initialize (diff) | |
| download | yuzu-7096f01c14ff76aefd829ae449a8ab5d474eacf7.tar.gz yuzu-7096f01c14ff76aefd829ae449a8ab5d474eacf7.tar.xz yuzu-7096f01c14ff76aefd829ae449a8ab5d474eacf7.zip | |
HLE/APT: Always return an error from PrepareToStartNewestHomeMenu so that the Home Menu doesn't try to reboot the system.
As per 3dbrew:
"During Home Menu start-up it uses APT:PrepareToStartNewestHomeMenu. If that doesn't return an error(normally NS returns 0xC8A0CFFC for that), Home Menu starts a hardware reboot with APT:StartNewestHomeMenu etc. "
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/hle/service/apt/apt.cpp | 14 | ||||
| -rw-r--r-- | src/core/hle/service/apt/apt.h | 10 | ||||
| -rw-r--r-- | src/core/hle/service/apt/apt_s.cpp | 4 |
3 files changed, 26 insertions, 2 deletions
diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp index ea964bab1..490c14605 100644 --- a/src/core/hle/service/apt/apt.cpp +++ b/src/core/hle/service/apt/apt.cpp | |||
| @@ -776,6 +776,20 @@ void PrepareToStartLibraryApplet(Service::Interface* self) { | |||
| 776 | LOG_DEBUG(Service_APT, "called applet_id=%08X", applet_id); | 776 | LOG_DEBUG(Service_APT, "called applet_id=%08X", applet_id); |
| 777 | } | 777 | } |
| 778 | 778 | ||
| 779 | void PrepareToStartNewestHomeMenu(Service::Interface* self) { | ||
| 780 | IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x1A, 0, 0); // 0x1A0000 | ||
| 781 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); | ||
| 782 | |||
| 783 | // TODO(Subv): This command can only be called by a System Applet (return 0xC8A0CC04 otherwise). | ||
| 784 | |||
| 785 | // This command must return an error when called, otherwise the Home Menu will try to reboot the | ||
| 786 | // system. | ||
| 787 | rb.Push(ResultCode(ErrorDescription::AlreadyExists, ErrorModule::Applet, | ||
| 788 | ErrorSummary::InvalidState, ErrorLevel::Status)); | ||
| 789 | |||
| 790 | LOG_DEBUG(Service_APT, "called"); | ||
| 791 | } | ||
| 792 | |||
| 779 | void PreloadLibraryApplet(Service::Interface* self) { | 793 | void PreloadLibraryApplet(Service::Interface* self) { |
| 780 | IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x16, 1, 0); // 0x160040 | 794 | IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x16, 1, 0); // 0x160040 |
| 781 | AppletId applet_id = static_cast<AppletId>(rp.Pop<u32>()); | 795 | AppletId applet_id = static_cast<AppletId>(rp.Pop<u32>()); |
diff --git a/src/core/hle/service/apt/apt.h b/src/core/hle/service/apt/apt.h index 96b28b438..7b79e1f3e 100644 --- a/src/core/hle/service/apt/apt.h +++ b/src/core/hle/service/apt/apt.h | |||
| @@ -420,6 +420,16 @@ void GetAppCpuTimeLimit(Service::Interface* self); | |||
| 420 | void PrepareToStartLibraryApplet(Service::Interface* self); | 420 | void PrepareToStartLibraryApplet(Service::Interface* self); |
| 421 | 421 | ||
| 422 | /** | 422 | /** |
| 423 | * APT::PrepareToStartNewestHomeMenu service function | ||
| 424 | * Inputs: | ||
| 425 | * 0 : Command header [0x001A0000] | ||
| 426 | * Outputs: | ||
| 427 | * 0 : Return header | ||
| 428 | * 1 : Result of function | ||
| 429 | */ | ||
| 430 | void PrepareToStartNewestHomeMenu(Service::Interface* self); | ||
| 431 | |||
| 432 | /** | ||
| 423 | * APT::PreloadLibraryApplet service function | 433 | * APT::PreloadLibraryApplet service function |
| 424 | * Inputs: | 434 | * Inputs: |
| 425 | * 0 : Command header [0x00160040] | 435 | * 0 : Command header [0x00160040] |
diff --git a/src/core/hle/service/apt/apt_s.cpp b/src/core/hle/service/apt/apt_s.cpp index ec5668d05..fe1d21fff 100644 --- a/src/core/hle/service/apt/apt_s.cpp +++ b/src/core/hle/service/apt/apt_s.cpp | |||
| @@ -17,7 +17,7 @@ const Interface::FunctionInfo FunctionTable[] = { | |||
| 17 | {0x00060040, GetAppletInfo, "GetAppletInfo"}, | 17 | {0x00060040, GetAppletInfo, "GetAppletInfo"}, |
| 18 | {0x00070000, nullptr, "GetLastSignaledAppletId"}, | 18 | {0x00070000, nullptr, "GetLastSignaledAppletId"}, |
| 19 | {0x00080000, nullptr, "CountRegisteredApplet"}, | 19 | {0x00080000, nullptr, "CountRegisteredApplet"}, |
| 20 | {0x00090040, nullptr, "IsRegistered"}, | 20 | {0x00090040, IsRegistered, "IsRegistered"}, |
| 21 | {0x000A0040, nullptr, "GetAttribute"}, | 21 | {0x000A0040, nullptr, "GetAttribute"}, |
| 22 | {0x000B0040, InquireNotification, "InquireNotification"}, | 22 | {0x000B0040, InquireNotification, "InquireNotification"}, |
| 23 | {0x000C0104, nullptr, "SendParameter"}, | 23 | {0x000C0104, nullptr, "SendParameter"}, |
| @@ -34,7 +34,7 @@ const Interface::FunctionInfo FunctionTable[] = { | |||
| 34 | {0x00170040, nullptr, "FinishPreloadingLibraryApplet"}, | 34 | {0x00170040, nullptr, "FinishPreloadingLibraryApplet"}, |
| 35 | {0x00180040, PrepareToStartLibraryApplet, "PrepareToStartLibraryApplet"}, | 35 | {0x00180040, PrepareToStartLibraryApplet, "PrepareToStartLibraryApplet"}, |
| 36 | {0x00190040, nullptr, "PrepareToStartSystemApplet"}, | 36 | {0x00190040, nullptr, "PrepareToStartSystemApplet"}, |
| 37 | {0x001A0000, nullptr, "PrepareToStartNewestHomeMenu"}, | 37 | {0x001A0000, PrepareToStartNewestHomeMenu, "PrepareToStartNewestHomeMenu"}, |
| 38 | {0x001B00C4, nullptr, "StartApplication"}, | 38 | {0x001B00C4, nullptr, "StartApplication"}, |
| 39 | {0x001C0000, nullptr, "WakeupApplication"}, | 39 | {0x001C0000, nullptr, "WakeupApplication"}, |
| 40 | {0x001D0000, nullptr, "CancelApplication"}, | 40 | {0x001D0000, nullptr, "CancelApplication"}, |