summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/k_transfer_memory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/hle/kernel/k_transfer_memory.cpp')
-rw-r--r--src/core/hle/kernel/k_transfer_memory.cpp45
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