diff options
author | Subv <subv2112@gmail.com> | 2016-04-18 04:07:52 +0200 |
---|---|---|
committer | Subv <subv2112@gmail.com> | 2016-05-13 03:00:32 +0200 |
commit | 1bd0cf542ff8db1cda572c4d92462643296af121 (patch) | |
tree | 8004faa76770c076e2d84d51a64c6419f796a477 /src/core/hle/kernel/shared_memory.h | |
parent | Kernel/SVC: Fixed the register order for svcCreateMemoryBlock. (diff) | |
download | yuzu-1bd0cf542ff8db1cda572c4d92462643296af121.tar yuzu-1bd0cf542ff8db1cda572c4d92462643296af121.tar.gz yuzu-1bd0cf542ff8db1cda572c4d92462643296af121.tar.bz2 yuzu-1bd0cf542ff8db1cda572c4d92462643296af121.tar.lz yuzu-1bd0cf542ff8db1cda572c4d92462643296af121.tar.xz yuzu-1bd0cf542ff8db1cda572c4d92462643296af121.tar.zst yuzu-1bd0cf542ff8db1cda572c4d92462643296af121.zip |
Diffstat (limited to '')
-rw-r--r-- | src/core/hle/kernel/shared_memory.h | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/src/core/hle/kernel/shared_memory.h b/src/core/hle/kernel/shared_memory.h index b51049ad0..b442cb764 100644 --- a/src/core/hle/kernel/shared_memory.h +++ b/src/core/hle/kernel/shared_memory.h @@ -9,6 +9,7 @@ #include "common/common_types.h" #include "core/hle/kernel/kernel.h" +#include "core/hle/kernel/process.h" #include "core/hle/result.h" namespace Kernel { @@ -30,13 +31,16 @@ class SharedMemory final : public Object { public: /** * Creates a shared memory object + * @param owner_process Process that created this shared memory object. * @param size Size of the memory block. Must be page-aligned. * @param permissions Permission restrictions applied to the process which created the block. * @param other_permissions Permission restrictions applied to other processes mapping the block. + * @param address The address from which to map the Shared Memory. + * @param region If the address is 0, the shared memory will be allocated in this region of the linear heap. * @param name Optional object name, used for debugging purposes. */ - static SharedPtr<SharedMemory> Create(u32 size, MemoryPermission permissions, - MemoryPermission other_permissions, std::string name = "Unknown"); + static SharedPtr<SharedMemory> Create(SharedPtr<Process> owner_process, u32 size, MemoryPermission permissions, + MemoryPermission other_permissions, VAddr address = 0, MemoryRegion region = MemoryRegion::BASE, std::string name = "Unknown"); std::string GetTypeName() const override { return "SharedMemory"; } std::string GetName() const override { return name; } @@ -45,19 +49,21 @@ public: HandleType GetHandleType() const override { return HANDLE_TYPE; } /** - * Maps a shared memory block to an address in system memory + * 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 permissions Memory block map permissions (specified by SVC field) * @param other_permissions Memory block map other permissions (specified by SVC field) */ - ResultCode Map(VAddr address, MemoryPermission permissions, MemoryPermission other_permissions); + ResultCode Map(Process* target_process, VAddr address, MemoryPermission permissions, MemoryPermission other_permissions); /** * Unmaps a shared memory block from the specified address in system memory + * @param target_process Process from which to umap the memory block. * @param address Address in system memory where the shared memory block is mapped * @return Result code of the unmap operation */ - ResultCode Unmap(VAddr address); + ResultCode Unmap(Process* target_process, VAddr address); /** * Gets a pointer to the shared memory block @@ -66,10 +72,16 @@ public: */ u8* GetPointer(u32 offset = 0); - /// Address of shared memory block in the process. + /// Process that created this shared memory block. + SharedPtr<Process> owner_process; + /// Address of shared memory block in the owner process if specified. VAddr base_address; - /// Fixed address to allow mapping to. Used for blocks created from the linear heap. - VAddr fixed_address; + /// Physical address of the shared memory block in the linear heap if no address was specified during creation. + PAddr linear_heap_phys_address; + /// Backing memory for this shared memory block. + std::shared_ptr<std::vector<u8>> backing_block; + /// Offset into the backing block for this shared memory. + u32 backing_block_offset; /// Size of the memory block. Page-aligned. u32 size; /// Permission restrictions applied to the process which created the block. |