From 0d62f30b00fbfe598573ea8fd433bd64d7be3e5f Mon Sep 17 00:00:00 2001 From: bunnei Date: Fri, 5 Feb 2021 23:14:31 -0800 Subject: hle: kernel: Rename SharedMemory to KSharedMemory. --- src/core/hle/kernel/k_shared_memory.h | 87 +++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 src/core/hle/kernel/k_shared_memory.h (limited to 'src/core/hle/kernel/k_shared_memory.h') diff --git a/src/core/hle/kernel/k_shared_memory.h b/src/core/hle/kernel/k_shared_memory.h new file mode 100644 index 000000000..4d1354415 --- /dev/null +++ b/src/core/hle/kernel/k_shared_memory.h @@ -0,0 +1,87 @@ +// Copyright 2014 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include +#include + +#include "common/common_types.h" +#include "core/device_memory.h" +#include "core/hle/kernel/memory/memory_block.h" +#include "core/hle/kernel/memory/page_linked_list.h" +#include "core/hle/kernel/object.h" +#include "core/hle/kernel/process.h" +#include "core/hle/result.h" + +namespace Kernel { + +class KernelCore; + +class KSharedMemory final : public Object { +public: + explicit KSharedMemory(KernelCore& kernel, Core::DeviceMemory& device_memory); + ~KSharedMemory() override; + + static std::shared_ptr Create( + KernelCore& kernel, Core::DeviceMemory& device_memory, Process* owner_process, + Memory::PageLinkedList&& page_list, Memory::MemoryPermission owner_permission, + Memory::MemoryPermission user_permission, PAddr physical_address, std::size_t size, + std::string name); + + std::string GetTypeName() const override { + return "SharedMemory"; + } + + std::string GetName() const override { + return name; + } + + static constexpr HandleType HANDLE_TYPE = HandleType::SharedMemory; + HandleType GetHandleType() const override { + return HANDLE_TYPE; + } + + /** + * Maps a shared memory block to an address in the target process' address space + * @param target_process Process on which to map the memory block + * @param address Address in system memory to map shared memory block to + * @param size Size of the shared memory block to map + * @param permissions Memory block map permissions (specified by SVC field) + */ + ResultCode Map(Process& target_process, VAddr address, std::size_t size, + Memory::MemoryPermission permissions); + + /** + * Gets a pointer to the shared memory block + * @param offset Offset from the start of the shared memory block to get pointer + * @return A pointer to the shared memory block from the specified offset + */ + u8* GetPointer(std::size_t offset = 0) { + return device_memory.GetPointer(physical_address + offset); + } + + /** + * Gets a pointer to the shared memory block + * @param offset Offset from the start of the shared memory block to get pointer + * @return A pointer to the shared memory block from the specified offset + */ + const u8* GetPointer(std::size_t offset = 0) const { + return device_memory.GetPointer(physical_address + offset); + } + + void Finalize() override {} + +private: + Core::DeviceMemory& device_memory; + Process* owner_process{}; + Memory::PageLinkedList page_list; + Memory::MemoryPermission owner_permission{}; + Memory::MemoryPermission user_permission{}; + PAddr physical_address{}; + std::size_t size{}; + std::string name; +}; + +} // namespace Kernel -- cgit v1.2.3