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

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

70 lines
1.6 KiB
C++
Raw Normal View History

// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
2023-10-05 04:15:10 +02:00
#include <optional>
#include "core/hle/kernel/k_page_group.h"
#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;
}
2023-10-05 04:15:10 +02:00
size_t GetSize() const;
Result Map(KProcessAddress address, size_t size, Svc::MemoryPermission map_perm);
Result Unmap(KProcessAddress address, size_t size);
private:
2023-10-05 04:15:10 +02:00
std::optional<KPageGroup> m_page_group{};
2023-03-07 05:08:53 +01:00
KProcess* m_owner{};
KProcessAddress m_address{};
2023-10-05 04:15:10 +02:00
KLightLock m_lock;
2023-03-07 05:08:53 +01:00
Svc::MemoryPermission m_owner_perm{};
bool m_is_initialized{};
2023-10-05 04:15:10 +02:00
bool m_is_mapped{};
};
} // namespace Kernel