yuzu/src/core/hle/kernel/k_transfer_memory.h

64 lines
1.4 KiB
C++
Raw Normal View History

// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "core/hle/kernel/slab_helpers.h"
#include "core/hle/kernel/svc_types.h"
#include "core/hle/result.h"
union Result;
namespace Core::Memory {
class Memory;
}
namespace Kernel {
class KernelCore;
class KProcess;
class KTransferMemory final
: public KAutoObjectWithSlabHeapAndContainer<KTransferMemory, KAutoObjectWithList> {
KERNEL_AUTOOBJECT_TRAITS(KTransferMemory, KAutoObject);
public:
2023-03-07 16:49:41 +01:00
explicit KTransferMemory(KernelCore& kernel);
~KTransferMemory() override;
Result Initialize(KProcessAddress address, std::size_t size, Svc::MemoryPermission owner_perm);
void Finalize() override;
bool IsInitialized() const override {
2023-03-07 05:08:53 +01:00
return m_is_initialized;
}
uintptr_t GetPostDestroyArgument() const override {
2023-03-07 05:08:53 +01:00
return reinterpret_cast<uintptr_t>(m_owner);
}
static void PostDestroy(uintptr_t arg);
KProcess* GetOwner() const override {
2023-03-07 05:08:53 +01:00
return m_owner;
}
KProcessAddress GetSourceAddress() const {
2023-03-07 05:08:53 +01:00
return m_address;
}
size_t GetSize() const {
2023-03-07 05:08:53 +01:00
return m_is_initialized ? m_size : 0;
}
private:
2023-03-07 05:08:53 +01:00
KProcess* m_owner{};
KProcessAddress m_address{};
2023-03-07 05:08:53 +01:00
Svc::MemoryPermission m_owner_perm{};
size_t m_size{};
bool m_is_initialized{};
};
} // namespace Kernel