diff options
author | liamwhite <liamwhite@users.noreply.github.com> | 2023-12-16 17:46:51 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-16 17:46:51 +0100 |
commit | b8f83aa4bf13f6783e31f190d530ef7be527bf49 (patch) | |
tree | 952d90666b0d253dce28742197d053d1db213eeb /src/core/hle/service/hid/controllers/shared_memory_holder.cpp | |
parent | ssl: fix output byte buffer size issue (#12372) (diff) | |
parent | core: Make sure npad is initialized (diff) | |
download | yuzu-b8f83aa4bf13f6783e31f190d530ef7be527bf49.tar yuzu-b8f83aa4bf13f6783e31f190d530ef7be527bf49.tar.gz yuzu-b8f83aa4bf13f6783e31f190d530ef7be527bf49.tar.bz2 yuzu-b8f83aa4bf13f6783e31f190d530ef7be527bf49.tar.lz yuzu-b8f83aa4bf13f6783e31f190d530ef7be527bf49.tar.xz yuzu-b8f83aa4bf13f6783e31f190d530ef7be527bf49.tar.zst yuzu-b8f83aa4bf13f6783e31f190d530ef7be527bf49.zip |
Diffstat (limited to 'src/core/hle/service/hid/controllers/shared_memory_holder.cpp')
-rw-r--r-- | src/core/hle/service/hid/controllers/shared_memory_holder.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/core/hle/service/hid/controllers/shared_memory_holder.cpp b/src/core/hle/service/hid/controllers/shared_memory_holder.cpp new file mode 100644 index 000000000..51581188e --- /dev/null +++ b/src/core/hle/service/hid/controllers/shared_memory_holder.cpp @@ -0,0 +1,53 @@ +// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "core/core.h" +#include "core/hle/kernel/k_shared_memory.h" +#include "core/hle/service/hid/controllers/shared_memory_format.h" +#include "core/hle/service/hid/controllers/shared_memory_holder.h" +#include "core/hle/service/hid/errors.h" + +namespace Service::HID { +SharedMemoryHolder::SharedMemoryHolder() {} + +SharedMemoryHolder::~SharedMemoryHolder() { + Finalize(); +} + +Result SharedMemoryHolder::Initialize(Core::System& system) { + shared_memory = Kernel::KSharedMemory::Create(system.Kernel()); + const Result result = shared_memory->Initialize( + system.DeviceMemory(), nullptr, Kernel::Svc::MemoryPermission::None, + Kernel::Svc::MemoryPermission::Read, sizeof(SharedMemoryFormat)); + if (result.IsError()) { + return result; + } + Kernel::KSharedMemory::Register(system.Kernel(), shared_memory); + + is_created = true; + is_mapped = true; + address = std::construct_at(reinterpret_cast<SharedMemoryFormat*>(shared_memory->GetPointer())); + return ResultSuccess; +} + +void SharedMemoryHolder::Finalize() { + if (address != nullptr) { + shared_memory->Close(); + } + is_created = false; + is_mapped = false; + address = nullptr; +} + +bool SharedMemoryHolder::IsMapped() { + return is_mapped; +} + +SharedMemoryFormat* SharedMemoryHolder::GetAddress() { + return address; +} + +Kernel::KSharedMemory* SharedMemoryHolder::GetHandle() { + return shared_memory; +} +} // namespace Service::HID |