mirror of
https://github.com/eden-emulator/mirror.git
synced 2026-06-06 07:25:52 +08:00
special touchups, more kernel cascade calls :)
This commit is contained in:
parent
3e4d2cb3b2
commit
219bffec19
@ -52,7 +52,7 @@ void Applet::UpdateSuspensionStateLocked(bool force_message) {
|
||||
|
||||
// Signal if the focus state was changed or the process state was changed.
|
||||
if (update_requested_focus_state || was_changed || force_message) {
|
||||
lifecycle_manager.SignalSystemEventIfNeeded();
|
||||
lifecycle_manager.SignalSystemEventIfNeeded(context.kernel);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
|
||||
@ -69,7 +69,7 @@ Result IApplicationAccessor::RequestExit() {
|
||||
|
||||
std::scoped_lock lk{m_applet->lock};
|
||||
if (m_applet->exit_locked) {
|
||||
m_applet->lifecycle_manager.RequestExit();
|
||||
m_applet->lifecycle_manager.RequestExit(system.Kernel());
|
||||
m_applet->UpdateSuspensionStateLocked(true);
|
||||
} else {
|
||||
m_applet->process->Terminate();
|
||||
|
||||
@ -99,7 +99,7 @@ Result ICommonStateGetter::GetEventHandle(OutCopyHandle<Kernel::KReadableEvent>
|
||||
Result ICommonStateGetter::ReceiveMessage(Out<AppletMessage> out_applet_message) {
|
||||
LOG_DEBUG(Service_AM, "called");
|
||||
|
||||
if (!m_applet->lifecycle_manager.PopMessage(out_applet_message)) {
|
||||
if (!m_applet->lifecycle_manager.PopMessage(system.Kernel(), out_applet_message)) {
|
||||
LOG_ERROR(Service_AM, "Tried to pop message but none was available!");
|
||||
R_THROW(AM::ResultNoMessages);
|
||||
}
|
||||
@ -281,25 +281,25 @@ Result ICommonStateGetter::PerformSystemButtonPressingIfInFocus(SystemButtonType
|
||||
switch (type) {
|
||||
case SystemButtonType::HomeButtonShortPressing:
|
||||
if (!m_applet->home_button_short_pressed_blocked) {
|
||||
m_applet->lifecycle_manager.PushUnorderedMessage(
|
||||
m_applet->lifecycle_manager.PushUnorderedMessage(system.Kernel(),
|
||||
AppletMessage::DetectShortPressingHomeButton);
|
||||
}
|
||||
break;
|
||||
case SystemButtonType::HomeButtonLongPressing:
|
||||
if (!m_applet->home_button_long_pressed_blocked) {
|
||||
m_applet->lifecycle_manager.PushUnorderedMessage(
|
||||
m_applet->lifecycle_manager.PushUnorderedMessage(system.Kernel(),
|
||||
AppletMessage::DetectLongPressingHomeButton);
|
||||
}
|
||||
break;
|
||||
case SystemButtonType::CaptureButtonShortPressing:
|
||||
if (m_applet->handling_capture_button_short_pressed_message_enabled_for_applet) {
|
||||
m_applet->lifecycle_manager.PushUnorderedMessage(
|
||||
m_applet->lifecycle_manager.PushUnorderedMessage(system.Kernel(),
|
||||
AppletMessage::DetectShortPressingCaptureButton);
|
||||
}
|
||||
break;
|
||||
case SystemButtonType::CaptureButtonLongPressing:
|
||||
if (m_applet->handling_capture_button_long_pressed_message_enabled_for_applet) {
|
||||
m_applet->lifecycle_manager.PushUnorderedMessage(
|
||||
m_applet->lifecycle_manager.PushUnorderedMessage(system.Kernel(),
|
||||
AppletMessage::DetectLongPressingCaptureButton);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -1,3 +1,6 @@
|
||||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
@ -20,7 +23,7 @@ ILockAccessor::ILockAccessor(Core::System& system_)
|
||||
|
||||
RegisterHandlers(functions);
|
||||
|
||||
m_event.Signal();
|
||||
m_event.Signal(system.Kernel());
|
||||
}
|
||||
|
||||
ILockAccessor::~ILockAccessor() = default;
|
||||
@ -55,7 +58,7 @@ Result ILockAccessor::Unlock() {
|
||||
m_is_locked = false;
|
||||
}
|
||||
|
||||
m_event.Signal();
|
||||
m_event.Signal(system.Kernel());
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
|
||||
@ -151,7 +151,7 @@ Result ISelfController::GetLibraryAppletLaunchableEvent(
|
||||
OutCopyHandle<Kernel::KReadableEvent> out_event) {
|
||||
LOG_WARNING(Service_AM, "(STUBBED) called");
|
||||
|
||||
m_applet->library_applet_launchable_event.Signal();
|
||||
m_applet->library_applet_launchable_event.Signal(system.Kernel());
|
||||
*out_event = m_applet->library_applet_launchable_event.GetHandle();
|
||||
|
||||
R_SUCCEED();
|
||||
@ -170,7 +170,7 @@ Result ISelfController::SetOperationModeChangedNotification(bool enabled) {
|
||||
LOG_INFO(Service_AM, "called, enabled={}", enabled);
|
||||
|
||||
std::scoped_lock lk{m_applet->lock};
|
||||
m_applet->lifecycle_manager.SetOperationModeChangedNotificationEnabled(enabled);
|
||||
m_applet->lifecycle_manager.SetOperationModeChangedNotificationEnabled(system.Kernel(), enabled);
|
||||
|
||||
R_SUCCEED();
|
||||
}
|
||||
@ -179,7 +179,7 @@ Result ISelfController::SetPerformanceModeChangedNotification(bool enabled) {
|
||||
LOG_INFO(Service_AM, "called, enabled={}", enabled);
|
||||
|
||||
std::scoped_lock lk{m_applet->lock};
|
||||
m_applet->lifecycle_manager.SetPerformanceModeChangedNotificationEnabled(enabled);
|
||||
m_applet->lifecycle_manager.SetPerformanceModeChangedNotificationEnabled(system.Kernel(), enabled);
|
||||
|
||||
R_SUCCEED();
|
||||
}
|
||||
@ -188,7 +188,7 @@ Result ISelfController::SetFocusHandlingMode(bool notify, bool background, bool
|
||||
LOG_INFO(Service_AM, "called, notify={} background={} suspend={}", notify, background, suspend);
|
||||
|
||||
std::scoped_lock lk{m_applet->lock};
|
||||
m_applet->lifecycle_manager.SetFocusStateChangedNotificationEnabled(notify);
|
||||
m_applet->lifecycle_manager.SetFocusStateChangedNotificationEnabled(system.Kernel(), notify);
|
||||
m_applet->lifecycle_manager.SetFocusHandlingMode(suspend);
|
||||
m_applet->UpdateSuspensionStateLocked(true);
|
||||
|
||||
|
||||
@ -30,12 +30,13 @@ static_assert(sizeof(Struct32) == 32, "Struct32 has wrong size");
|
||||
|
||||
class IJitEnvironment final : public ServiceFramework<IJitEnvironment> {
|
||||
public:
|
||||
explicit IJitEnvironment(Core::System& system_,
|
||||
Kernel::KScopedAutoObject<Kernel::KProcess> process_,
|
||||
CodeMemory&& user_rx_, CodeMemory&& user_ro_)
|
||||
: ServiceFramework{system_, "IJitEnvironment"}, process{std::move(process_)},
|
||||
user_rx{std::move(user_rx_)}, user_ro{std::move(user_ro_)},
|
||||
context{system_.ApplicationMemory()} {
|
||||
explicit IJitEnvironment(Core::System& system_, Kernel::KProcess* process_, CodeMemory&& user_rx_, CodeMemory&& user_ro_)
|
||||
: ServiceFramework{system_, "IJitEnvironment"}
|
||||
, process{kernel, process_}
|
||||
, user_rx{std::move(user_rx_)}
|
||||
, user_ro{std::move(user_ro_)}
|
||||
, context{system_.ApplicationMemory()}
|
||||
{
|
||||
|
||||
// clang-format off
|
||||
static const FunctionInfo functions[] = {
|
||||
@ -58,6 +59,11 @@ public:
|
||||
configuration.sys_ro_memory = configuration.user_ro_memory;
|
||||
}
|
||||
|
||||
~IJitEnvironment() {
|
||||
user_rx.Finalize(system.Kernel());
|
||||
user_ro.Finalize(system.Kernel());
|
||||
}
|
||||
|
||||
Result GenerateCode(Out<s32> out_return_value, Out<CodeRange> out_range0,
|
||||
Out<CodeRange> out_range1, OutBuffer<BufferAttr_HipcMapAlias> out_buffer,
|
||||
u32 data_size, u64 command, CodeRange range0, CodeRange range1,
|
||||
@ -281,14 +287,9 @@ private:
|
||||
}
|
||||
|
||||
CodeMemory rx, ro;
|
||||
|
||||
R_TRY(rx.Initialize(*process, *rx_mem, rx_size, Kernel::Svc::MemoryPermission::ReadExecute,
|
||||
generate_random));
|
||||
R_TRY(ro.Initialize(*process, *ro_mem, ro_size, Kernel::Svc::MemoryPermission::Read,
|
||||
generate_random));
|
||||
|
||||
*out_jit_environment =
|
||||
std::make_shared<IJitEnvironment>(system, process.Get(), std::move(rx), std::move(ro));
|
||||
R_TRY(rx.Initialize(system.Kernel(), *process, *rx_mem, rx_size, Kernel::Svc::MemoryPermission::ReadExecute, generate_random));
|
||||
R_TRY(ro.Initialize(system.Kernel(), *process, *ro_mem, ro_size, Kernel::Svc::MemoryPermission::Read, generate_random));
|
||||
*out_jit_environment = std::make_shared<IJitEnvironment>(system, process.Get(), std::move(rx), std::move(ro));
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
|
||||
@ -1,3 +1,6 @@
|
||||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
@ -5,12 +8,9 @@
|
||||
|
||||
namespace Service::JIT {
|
||||
|
||||
Result CodeMemory::Initialize(Kernel::KProcess& process, Kernel::KCodeMemory& code_memory,
|
||||
size_t size, Kernel::Svc::MemoryPermission perm,
|
||||
std::mt19937_64& generate_random) {
|
||||
Result CodeMemory::Initialize(Kernel::KernelCore& kernel, Kernel::KProcess& process, Kernel::KCodeMemory& code_memory, size_t size, Kernel::Svc::MemoryPermission perm, std::mt19937_64& generate_random) {
|
||||
auto& page_table = process.GetPageTable();
|
||||
const u64 alias_code_start =
|
||||
GetInteger(page_table.GetAliasCodeRegionStart()) / Kernel::PageSize;
|
||||
const u64 alias_code_start = GetInteger(page_table.GetAliasCodeRegionStart()) / Kernel::PageSize;
|
||||
const u64 alias_code_size = page_table.GetAliasCodeRegionSize() / Kernel::PageSize;
|
||||
|
||||
// NOTE: This will retry indefinitely until mapping the code memory succeeds.
|
||||
@ -20,7 +20,7 @@ Result CodeMemory::Initialize(Kernel::KProcess& process, Kernel::KCodeMemory& co
|
||||
(alias_code_start + (generate_random() % alias_code_size)) * Kernel::PageSize;
|
||||
|
||||
// Try to map the address
|
||||
R_TRY_CATCH(code_memory.MapToOwner(mapped_address, size, perm)) {
|
||||
R_TRY_CATCH(code_memory.MapToOwner(kernel, mapped_address, size, perm)) {
|
||||
R_CATCH(Kernel::ResultInvalidMemoryRegion) {
|
||||
// If we could not map here, retry.
|
||||
continue;
|
||||
@ -35,17 +35,17 @@ Result CodeMemory::Initialize(Kernel::KProcess& process, Kernel::KCodeMemory& co
|
||||
m_perm = perm;
|
||||
|
||||
// Open a new reference to the code memory.
|
||||
m_code_memory->Open();
|
||||
m_code_memory->Open(kernel);
|
||||
|
||||
// We succeeded.
|
||||
R_SUCCEED();
|
||||
}
|
||||
}
|
||||
|
||||
void CodeMemory::Finalize() {
|
||||
void CodeMemory::Finalize(Kernel::KernelCore& kernel) {
|
||||
if (m_code_memory) {
|
||||
R_ASSERT(m_code_memory->UnmapFromOwner(m_address, m_size));
|
||||
m_code_memory->Close();
|
||||
R_ASSERT(m_code_memory->UnmapFromOwner(kernel, m_address, m_size));
|
||||
m_code_memory->Close(kernel);
|
||||
}
|
||||
|
||||
m_code_memory = nullptr;
|
||||
|
||||
@ -1,3 +1,6 @@
|
||||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
@ -7,29 +10,16 @@
|
||||
|
||||
#include "core/hle/kernel/k_code_memory.h"
|
||||
|
||||
namespace Kernel {
|
||||
class KernelCore;
|
||||
}
|
||||
|
||||
namespace Service::JIT {
|
||||
|
||||
class CodeMemory {
|
||||
public:
|
||||
YUZU_NON_COPYABLE(CodeMemory);
|
||||
|
||||
explicit CodeMemory() = default;
|
||||
|
||||
CodeMemory(CodeMemory&& rhs) {
|
||||
std::swap(m_code_memory, rhs.m_code_memory);
|
||||
std::swap(m_size, rhs.m_size);
|
||||
std::swap(m_address, rhs.m_address);
|
||||
std::swap(m_perm, rhs.m_perm);
|
||||
}
|
||||
|
||||
~CodeMemory() {
|
||||
this->Finalize();
|
||||
}
|
||||
|
||||
public:
|
||||
Result Initialize(Kernel::KProcess& process, Kernel::KCodeMemory& code_memory, size_t size,
|
||||
Kernel::Svc::MemoryPermission perm, std::mt19937_64& generate_random);
|
||||
void Finalize();
|
||||
Result Initialize(Kernel::KernelCore& kernel, Kernel::KProcess& process, Kernel::KCodeMemory& code_memory, size_t size, Kernel::Svc::MemoryPermission perm, std::mt19937_64& generate_random);
|
||||
void Finalize(Kernel::KernelCore& kernel);
|
||||
|
||||
size_t GetSize() const {
|
||||
return m_size;
|
||||
@ -39,7 +29,6 @@ public:
|
||||
return m_address;
|
||||
}
|
||||
|
||||
private:
|
||||
Kernel::KCodeMemory* m_code_memory{};
|
||||
size_t m_size{};
|
||||
u64 m_address{};
|
||||
|
||||
@ -610,7 +610,7 @@ Result IApplicationManagerInterface::GetApplicationRecordUpdateSystemEvent(
|
||||
OutCopyHandle<Kernel::KReadableEvent> out_event) {
|
||||
LOG_WARNING(Service_NS, "(STUBBED) called");
|
||||
|
||||
record_update_system_event.Signal();
|
||||
record_update_system_event.Signal(system.Kernel());
|
||||
*out_event = record_update_system_event.GetHandle();
|
||||
|
||||
R_SUCCEED();
|
||||
@ -820,14 +820,14 @@ Result IApplicationManagerInterface::RequestDownloadApplicationControlDataInBack
|
||||
LOG_INFO(Service_NS, "called, control_source={} app={:016X}",
|
||||
control_source, application_id);
|
||||
|
||||
unknown_event.Signal();
|
||||
unknown_event.Signal(system.Kernel());
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
Result IApplicationManagerInterface::Unknown4022(
|
||||
OutCopyHandle<Kernel::KReadableEvent> out_event) {
|
||||
LOG_WARNING(Service_NS, "(STUBBED) called");
|
||||
unknown_event.Signal();
|
||||
unknown_event.Signal(system.Kernel());
|
||||
*out_event = unknown_event.GetHandle();
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
@ -1,3 +1,6 @@
|
||||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
@ -10,22 +13,22 @@ namespace Service {
|
||||
|
||||
Mutex::Mutex(Core::System& system) : m_system(system) {
|
||||
m_event = Kernel::KEvent::Create(system.Kernel());
|
||||
m_event->Initialize(nullptr);
|
||||
m_event->Initialize(system.Kernel(), nullptr);
|
||||
|
||||
// Register the event.
|
||||
Kernel::KEvent::Register(system.Kernel(), m_event);
|
||||
|
||||
ASSERT(R_SUCCEEDED(m_event->Signal()));
|
||||
ASSERT(R_SUCCEEDED(m_event->Signal(system.Kernel())));
|
||||
}
|
||||
|
||||
Mutex::~Mutex() {
|
||||
m_event->GetReadableEvent().Close();
|
||||
m_event->Close();
|
||||
m_event->GetReadableEvent().Close(m_system.Kernel());
|
||||
m_event->Close(m_system.Kernel());
|
||||
}
|
||||
|
||||
void Mutex::lock() {
|
||||
// Infinitely retry until we successfully clear the event.
|
||||
while (R_FAILED(m_event->GetReadableEvent().Reset())) {
|
||||
while (R_FAILED(m_event->GetReadableEvent().Reset(m_system.Kernel()))) {
|
||||
s32 index;
|
||||
Kernel::KSynchronizationObject* obj = &m_event->GetReadableEvent();
|
||||
|
||||
@ -40,7 +43,7 @@ void Mutex::lock() {
|
||||
|
||||
void Mutex::unlock() {
|
||||
// Unlock.
|
||||
ASSERT(R_SUCCEEDED(m_event->Signal()));
|
||||
ASSERT(R_SUCCEEDED(m_event->Signal(m_system.Kernel())));
|
||||
}
|
||||
|
||||
} // namespace Service
|
||||
|
||||
@ -1,3 +1,6 @@
|
||||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
@ -25,19 +28,15 @@ constexpr u64 NO_PROCESS_FOUND_PID{0};
|
||||
using ProcessList = std::list<Kernel::KScopedAutoObject<Kernel::KProcess>>;
|
||||
|
||||
template <typename F>
|
||||
Kernel::KScopedAutoObject<Kernel::KProcess> SearchProcessList(ProcessList& process_list,
|
||||
F&& predicate) {
|
||||
const auto iter = std::find_if(process_list.begin(), process_list.end(), predicate);
|
||||
|
||||
if (iter == process_list.end()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return iter->GetPointerUnsafe();
|
||||
Kernel::KScopedAutoObject<Kernel::KProcess> SearchProcessList(Kernel::KernelCore& kernel, ProcessList& process_list, F&& predicate) {
|
||||
auto const it = std::find_if(process_list.begin(), process_list.end(), predicate);
|
||||
if (it == process_list.end())
|
||||
return {kernel, nullptr};
|
||||
return {kernel, it->GetPointerUnsafe()};
|
||||
}
|
||||
|
||||
void GetApplicationPidGeneric(HLERequestContext& ctx, ProcessList& process_list) {
|
||||
auto process = SearchProcessList(process_list, [](auto& p) { return p->IsApplication(); });
|
||||
void GetApplicationPidGeneric(Kernel::KernelCore& kernel, HLERequestContext& ctx, ProcessList& process_list) {
|
||||
auto process = SearchProcessList(kernel, process_list, [](auto& p) { return p->IsApplication(); });
|
||||
|
||||
IPC::ResponseBuilder rb{ctx, 4};
|
||||
rb.Push(ResultSuccess);
|
||||
@ -105,7 +104,7 @@ private:
|
||||
LOG_DEBUG(Service_PM, "called, program_id={:016X}", program_id);
|
||||
|
||||
auto list = kernel.GetProcessList();
|
||||
auto process = SearchProcessList(
|
||||
auto process = SearchProcessList(system.Kernel(),
|
||||
list, [program_id](auto& p) { return p->GetProgramId() == program_id; });
|
||||
|
||||
if (process.IsNull()) {
|
||||
@ -122,7 +121,7 @@ private:
|
||||
void GetApplicationProcessId(HLERequestContext& ctx) {
|
||||
LOG_DEBUG(Service_PM, "called");
|
||||
auto list = kernel.GetProcessList();
|
||||
GetApplicationPidGeneric(ctx, list);
|
||||
GetApplicationPidGeneric(system.Kernel(), ctx, list);
|
||||
}
|
||||
|
||||
void AtmosphereGetProcessInfo(HLERequestContext& ctx) {
|
||||
@ -134,7 +133,7 @@ private:
|
||||
LOG_WARNING(Service_PM, "(Partial Implementation) called, pid={:016X}", pid);
|
||||
|
||||
auto list = kernel.GetProcessList();
|
||||
auto process = SearchProcessList(list, [pid](auto& p) { return p->GetProcessId() == pid; });
|
||||
auto process = SearchProcessList(system.Kernel(), list, [pid](auto& p) { return p->GetProcessId() == pid; });
|
||||
|
||||
if (process.IsNull()) {
|
||||
IPC::ResponseBuilder rb{ctx, 2};
|
||||
@ -188,7 +187,7 @@ private:
|
||||
LOG_DEBUG(Service_PM, "called, process_id={:016X}", process_id);
|
||||
|
||||
auto list = kernel.GetProcessList();
|
||||
auto process = SearchProcessList(
|
||||
auto process = SearchProcessList(system.Kernel(),
|
||||
list, [process_id](auto& p) { return p->GetProcessId() == process_id; });
|
||||
|
||||
if (process.IsNull()) {
|
||||
@ -209,7 +208,7 @@ private:
|
||||
LOG_DEBUG(Service_PM, "called, program_id={:016X}", program_id);
|
||||
|
||||
auto list = system.Kernel().GetProcessList();
|
||||
auto process = SearchProcessList(
|
||||
auto process = SearchProcessList(system.Kernel(),
|
||||
list, [program_id](auto& p) { return p->GetProgramId() == program_id; });
|
||||
|
||||
if (process.IsNull()) {
|
||||
@ -249,7 +248,7 @@ private:
|
||||
void GetApplicationProcessIdForShell(HLERequestContext& ctx) {
|
||||
LOG_DEBUG(Service_PM, "called");
|
||||
auto list = kernel.GetProcessList();
|
||||
GetApplicationPidGeneric(ctx, list);
|
||||
GetApplicationPidGeneric(system.Kernel(), ctx, list);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
|
||||
@ -100,7 +100,7 @@ Result IReceiver::ReceiveWithTick(Out<OverlayNotification> out_notification,
|
||||
}
|
||||
}
|
||||
if (!has_messages) {
|
||||
receive_event->Clear();
|
||||
receive_event->Clear(system.Kernel());
|
||||
}
|
||||
|
||||
R_SUCCEED();
|
||||
|
||||
@ -1,3 +1,6 @@
|
||||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
@ -171,7 +174,7 @@ Result StaticService::SetStandardUserSystemClockAutomaticCorrectionEnabled(
|
||||
R_TRY(m_time->m_standard_steady_clock.GetCurrentTimePoint(time_point));
|
||||
|
||||
m_user_system_clock.SetTimePointAndSignal(time_point);
|
||||
m_user_system_clock.GetEvent().Signal();
|
||||
m_user_system_clock.GetEvent().Signal(system.Kernel());
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
|
||||
@ -70,7 +70,7 @@ void Conductor::UnlinkVsyncEvent(u64 display_id, Event* event) {
|
||||
void Conductor::ProcessVsync() {
|
||||
for (auto& [display_id, manager] : m_vsync_managers) {
|
||||
m_container.ComposeOnDisplay(&m_swap_interval, &m_compose_speed_scale, display_id);
|
||||
manager.SignalVsync();
|
||||
manager.SignalVsync(m_system.Kernel());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -232,7 +232,7 @@ AppLoader_DeconstructedRomDirectory::LoadResult AppLoader_DeconstructedRomDirect
|
||||
? ::Settings::values.rng_seed.GetValue() : Common::Random::Random64(0)) << 12) & 0xfff000;
|
||||
|
||||
// Setup the process code layout
|
||||
if (process.LoadFromMetadata(metadata, code_size, fastmem_base, aslr_offset, is_hbl).IsError()) {
|
||||
if (process.LoadFromMetadata(system.Kernel(), metadata, code_size, fastmem_base, aslr_offset, is_hbl).IsError()) {
|
||||
return {ResultStatus::ErrorUnableToParseKernelMetadata, {}};
|
||||
}
|
||||
|
||||
|
||||
@ -93,11 +93,11 @@ AppLoader::LoadResult AppLoader_KIP::Load(Kernel::KProcess& process,
|
||||
? ::Settings::values.rng_seed.GetValue() : Common::Random::Random64(0)) << 12) & 0xfff000;
|
||||
|
||||
// Setup the process code layout
|
||||
if (process.LoadFromMetadata(FileSys::ProgramMetadata::GetDefault(), codeset.memory.size(), 0, aslr_offset, false).IsError()) {
|
||||
if (process.LoadFromMetadata(system.Kernel(), FileSys::ProgramMetadata::GetDefault(), codeset.memory.size(), 0, aslr_offset, false).IsError()) {
|
||||
return {ResultStatus::ErrorNotInitialized, {}};
|
||||
}
|
||||
const VAddr base_address = GetInteger(process.GetEntryPoint());
|
||||
process.LoadModule(std::move(codeset), base_address);
|
||||
process.LoadModule(system.Kernel(), std::move(codeset), base_address);
|
||||
|
||||
LOG_DEBUG(Loader, "loaded module {} @ {:#X}", kip->GetName(), base_address);
|
||||
|
||||
|
||||
@ -247,7 +247,7 @@ static bool LoadNroImpl(Core::System& system, Kernel::KProcess& process,
|
||||
|
||||
// Setup the process code layout
|
||||
if (process
|
||||
.LoadFromMetadata(FileSys::ProgramMetadata::GetDefault(), image_size, fastmem_base, aslr_offset, false)
|
||||
.LoadFromMetadata(system.Kernel(), FileSys::ProgramMetadata::GetDefault(), image_size, fastmem_base, aslr_offset, false)
|
||||
.IsError()) {
|
||||
return false;
|
||||
}
|
||||
@ -263,7 +263,7 @@ static bool LoadNroImpl(Core::System& system, Kernel::KProcess& process,
|
||||
|
||||
// Load codeset for current process
|
||||
codeset.memory = std::move(program_image);
|
||||
process.LoadModule(std::move(codeset), process.GetEntryPoint());
|
||||
process.LoadModule(system.Kernel(), std::move(codeset), process.GetEntryPoint());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -217,7 +217,7 @@ std::optional<VAddr> AppLoader_NSO::LoadModule(Kernel::KProcess& process, Core::
|
||||
}
|
||||
|
||||
// Load codeset for current process
|
||||
process.LoadModule(std::move(codeset), load_base);
|
||||
process.LoadModule(system.Kernel(), std::move(codeset), load_base);
|
||||
return load_base + image_size;
|
||||
}
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
||||
@ -91,17 +91,15 @@ u64 StandardVmCallbacks::HidKeysDown() {
|
||||
}
|
||||
|
||||
void StandardVmCallbacks::PauseProcess() {
|
||||
if (system.ApplicationProcess()->IsSuspended()) {
|
||||
return;
|
||||
if (!system.ApplicationProcess()->IsSuspended()) {
|
||||
system.ApplicationProcess()->SetActivity(system.Kernel(), Kernel::Svc::ProcessActivity::Paused);
|
||||
}
|
||||
system.ApplicationProcess()->SetActivity(Kernel::Svc::ProcessActivity::Paused);
|
||||
}
|
||||
|
||||
void StandardVmCallbacks::ResumeProcess() {
|
||||
if (!system.ApplicationProcess()->IsSuspended()) {
|
||||
return;
|
||||
if (system.ApplicationProcess()->IsSuspended()) {
|
||||
system.ApplicationProcess()->SetActivity(system.Kernel(), Kernel::Svc::ProcessActivity::Runnable);
|
||||
}
|
||||
system.ApplicationProcess()->SetActivity(Kernel::Svc::ProcessActivity::Runnable);
|
||||
}
|
||||
|
||||
void StandardVmCallbacks::DebugLog(u8 id, u64 value) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user