diff options
author | bunnei <bunneidev@gmail.com> | 2021-04-17 09:52:53 +0200 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2021-05-06 01:40:51 +0200 |
commit | c7d8b7421cd6bdb64410bbb0094ce540f0280c27 (patch) | |
tree | 0b24ec86f194395fac5f5688a6e14fc5dec0b7dd /src/core/hle/kernel/k_transfer_memory.cpp | |
parent | hle: kernel: Migrate KSession, KClientSession, and KServerSession to KAutoObject. (diff) | |
download | yuzu-c7d8b7421cd6bdb64410bbb0094ce540f0280c27.tar yuzu-c7d8b7421cd6bdb64410bbb0094ce540f0280c27.tar.gz yuzu-c7d8b7421cd6bdb64410bbb0094ce540f0280c27.tar.bz2 yuzu-c7d8b7421cd6bdb64410bbb0094ce540f0280c27.tar.lz yuzu-c7d8b7421cd6bdb64410bbb0094ce540f0280c27.tar.xz yuzu-c7d8b7421cd6bdb64410bbb0094ce540f0280c27.tar.zst yuzu-c7d8b7421cd6bdb64410bbb0094ce540f0280c27.zip |
Diffstat (limited to '')
-rw-r--r-- | src/core/hle/kernel/k_transfer_memory.cpp | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/core/hle/kernel/k_transfer_memory.cpp b/src/core/hle/kernel/k_transfer_memory.cpp new file mode 100644 index 000000000..09c067f95 --- /dev/null +++ b/src/core/hle/kernel/k_transfer_memory.cpp @@ -0,0 +1,45 @@ +// Copyright 2021 yuzu emulator team +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "core/hle/kernel/k_resource_limit.h" +#include "core/hle/kernel/k_transfer_memory.h" +#include "core/hle/kernel/kernel.h" +#include "core/hle/kernel/process.h" + +namespace Kernel { + +KTransferMemory::KTransferMemory(KernelCore& kernel) + : KAutoObjectWithSlabHeapAndContainer{kernel} {} + +KTransferMemory::~KTransferMemory() = default; + +ResultCode KTransferMemory::Initialize(VAddr address_, std::size_t size_, + Svc::MemoryPermission owner_perm_) { + // Set members. + owner = kernel.CurrentProcess(); + + // TODO(bunnei): Lock for transfer memory + + // Set remaining tracking members. + owner->Open(); + owner_perm = owner_perm_; + address = address_; + size = size_; + is_initialized = true; + + return RESULT_SUCCESS; +} + +void KTransferMemory::Finalize() { + // Perform inherited finalization. + KAutoObjectWithSlabHeapAndContainer<KTransferMemory, KAutoObjectWithList>::Finalize(); +} + +void KTransferMemory::PostDestroy(uintptr_t arg) { + Process* owner = reinterpret_cast<Process*>(arg); + owner->GetResourceLimit()->Release(LimitableResource::TransferMemory, 1); + owner->Close(); +} + +} // namespace Kernel |