early-access version 2795
This commit is contained in:
parent
f8f3a2708e
commit
bbb22ae7cd
6 changed files with 48 additions and 3 deletions
|
@ -1,8 +1,8 @@
|
||||||
yuzu emulator early access
|
yuzu emulator early access
|
||||||
=============
|
=============
|
||||||
|
|
||||||
This is the source code for early-access 2794.
|
This is the source code for early-access 2795.
|
||||||
|
|
||||||
## Legal Notice
|
## Legal Notice
|
||||||
|
|
||||||
yuzu is a GPLv2 program, which allows fully free redistribution of its source code.
|
yuzu is a GPLv3 program, which allows fully free redistribution of its source code.
|
|
@ -748,6 +748,19 @@ void KThread::Continue() {
|
||||||
KScheduler::OnThreadStateChanged(kernel, this, old_state);
|
KScheduler::OnThreadStateChanged(kernel, this, old_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void KThread::WaitUntilSuspended() {
|
||||||
|
// Make sure we have a suspend requested.
|
||||||
|
ASSERT(IsSuspendRequested());
|
||||||
|
|
||||||
|
// Loop until the thread is not executing on any core.
|
||||||
|
for (std::size_t i = 0; i < static_cast<std::size_t>(Core::Hardware::NUM_CPU_CORES); ++i) {
|
||||||
|
KThread* core_thread{};
|
||||||
|
do {
|
||||||
|
core_thread = kernel.Scheduler(i).GetCurrentThread();
|
||||||
|
} while (core_thread == this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ResultCode KThread::SetActivity(Svc::ThreadActivity activity) {
|
ResultCode KThread::SetActivity(Svc::ThreadActivity activity) {
|
||||||
// Lock ourselves.
|
// Lock ourselves.
|
||||||
KScopedLightLock lk(activity_pause_lock);
|
KScopedLightLock lk(activity_pause_lock);
|
||||||
|
|
|
@ -207,6 +207,8 @@ public:
|
||||||
|
|
||||||
void Continue();
|
void Continue();
|
||||||
|
|
||||||
|
void WaitUntilSuspended();
|
||||||
|
|
||||||
constexpr void SetSyncedIndex(s32 index) {
|
constexpr void SetSyncedIndex(s32 index) {
|
||||||
synced_index = index;
|
synced_index = index;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1078,6 +1078,13 @@ void KernelCore::Suspend(bool suspended) {
|
||||||
|
|
||||||
for (auto* process : GetProcessList()) {
|
for (auto* process : GetProcessList()) {
|
||||||
process->SetActivity(activity);
|
process->SetActivity(activity);
|
||||||
|
|
||||||
|
if (should_suspend) {
|
||||||
|
// Wait for execution to stop
|
||||||
|
for (auto* thread : process->GetThreadList()) {
|
||||||
|
thread->WaitUntilSuspended();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -686,7 +686,7 @@ ICommonStateGetter::ICommonStateGetter(Core::System& system_,
|
||||||
{66, &ICommonStateGetter::SetCpuBoostMode, "SetCpuBoostMode"},
|
{66, &ICommonStateGetter::SetCpuBoostMode, "SetCpuBoostMode"},
|
||||||
{67, nullptr, "CancelCpuBoostMode"},
|
{67, nullptr, "CancelCpuBoostMode"},
|
||||||
{68, nullptr, "GetBuiltInDisplayType"},
|
{68, nullptr, "GetBuiltInDisplayType"},
|
||||||
{80, nullptr, "PerformSystemButtonPressingIfInFocus"},
|
{80, &ICommonStateGetter::PerformSystemButtonPressingIfInFocus, "PerformSystemButtonPressingIfInFocus"},
|
||||||
{90, nullptr, "SetPerformanceConfigurationChangedNotification"},
|
{90, nullptr, "SetPerformanceConfigurationChangedNotification"},
|
||||||
{91, nullptr, "GetCurrentPerformanceConfiguration"},
|
{91, nullptr, "GetCurrentPerformanceConfiguration"},
|
||||||
{100, nullptr, "SetHandlingHomeButtonShortPressedEnabled"},
|
{100, nullptr, "SetHandlingHomeButtonShortPressedEnabled"},
|
||||||
|
@ -826,6 +826,16 @@ void ICommonStateGetter::SetCpuBoostMode(Kernel::HLERequestContext& ctx) {
|
||||||
apm_sys->SetCpuBoostMode(ctx);
|
apm_sys->SetCpuBoostMode(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ICommonStateGetter::PerformSystemButtonPressingIfInFocus(Kernel::HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
const auto system_button{rp.PopEnum<SystemButtonType>()};
|
||||||
|
|
||||||
|
LOG_WARNING(Service_AM, "(STUBBED) called, system_button={}", system_button);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
void ICommonStateGetter::SetRequestExitToLibraryAppletAtExecuteNextProgramEnabled(
|
void ICommonStateGetter::SetRequestExitToLibraryAppletAtExecuteNextProgramEnabled(
|
||||||
Kernel::HLERequestContext& ctx) {
|
Kernel::HLERequestContext& ctx) {
|
||||||
LOG_WARNING(Service_AM, "(STUBBED) called");
|
LOG_WARNING(Service_AM, "(STUBBED) called");
|
||||||
|
|
|
@ -220,6 +220,18 @@ private:
|
||||||
Docked = 1,
|
Docked = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// This is nn::am::service::SystemButtonType
|
||||||
|
enum class SystemButtonType {
|
||||||
|
None,
|
||||||
|
HomeButtonShortPressing,
|
||||||
|
HomeButtonLongPressing,
|
||||||
|
PowerButtonShortPressing,
|
||||||
|
PowerButtonLongPressing,
|
||||||
|
ShutdownSystem,
|
||||||
|
CaptureButtonShortPressing,
|
||||||
|
CaptureButtonLongPressing,
|
||||||
|
};
|
||||||
|
|
||||||
void GetEventHandle(Kernel::HLERequestContext& ctx);
|
void GetEventHandle(Kernel::HLERequestContext& ctx);
|
||||||
void ReceiveMessage(Kernel::HLERequestContext& ctx);
|
void ReceiveMessage(Kernel::HLERequestContext& ctx);
|
||||||
void GetCurrentFocusState(Kernel::HLERequestContext& ctx);
|
void GetCurrentFocusState(Kernel::HLERequestContext& ctx);
|
||||||
|
@ -234,6 +246,7 @@ private:
|
||||||
void EndVrModeEx(Kernel::HLERequestContext& ctx);
|
void EndVrModeEx(Kernel::HLERequestContext& ctx);
|
||||||
void GetDefaultDisplayResolution(Kernel::HLERequestContext& ctx);
|
void GetDefaultDisplayResolution(Kernel::HLERequestContext& ctx);
|
||||||
void SetCpuBoostMode(Kernel::HLERequestContext& ctx);
|
void SetCpuBoostMode(Kernel::HLERequestContext& ctx);
|
||||||
|
void PerformSystemButtonPressingIfInFocus(Kernel::HLERequestContext& ctx);
|
||||||
void SetRequestExitToLibraryAppletAtExecuteNextProgramEnabled(Kernel::HLERequestContext& ctx);
|
void SetRequestExitToLibraryAppletAtExecuteNextProgramEnabled(Kernel::HLERequestContext& ctx);
|
||||||
|
|
||||||
std::shared_ptr<AppletMessageQueue> msg_queue;
|
std::shared_ptr<AppletMessageQueue> msg_queue;
|
||||||
|
|
Loading…
Reference in a new issue