summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/k_shared_memory.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/hle/kernel/k_shared_memory.h')
-rw-r--r--src/core/hle/kernel/k_shared_memory.h69
1 files changed, 36 insertions, 33 deletions
diff --git a/src/core/hle/kernel/k_shared_memory.h b/src/core/hle/kernel/k_shared_memory.h
index 016e34be5..553a56327 100644
--- a/src/core/hle/kernel/k_shared_memory.h
+++ b/src/core/hle/kernel/k_shared_memory.h
@@ -11,47 +11,44 @@
#include "core/device_memory.h"
#include "core/hle/kernel/k_memory_block.h"
#include "core/hle/kernel/k_page_linked_list.h"
-#include "core/hle/kernel/object.h"
-#include "core/hle/kernel/process.h"
+#include "core/hle/kernel/k_process.h"
+#include "core/hle/kernel/slab_helpers.h"
#include "core/hle/result.h"
namespace Kernel {
class KernelCore;
-class KSharedMemory final : public Object {
+class KSharedMemory final
+ : public KAutoObjectWithSlabHeapAndContainer<KSharedMemory, KAutoObjectWithList> {
+ KERNEL_AUTOOBJECT_TRAITS(KSharedMemory, KAutoObject);
+
public:
- explicit KSharedMemory(KernelCore& kernel, Core::DeviceMemory& device_memory);
+ explicit KSharedMemory(KernelCore& kernel_);
~KSharedMemory() override;
- static std::shared_ptr<KSharedMemory> Create(
- KernelCore& kernel, Core::DeviceMemory& device_memory, Process* owner_process,
- KPageLinkedList&& page_list, KMemoryPermission owner_permission,
- KMemoryPermission 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;
- }
+ ResultCode Initialize(Core::DeviceMemory& device_memory_, KProcess* owner_process_,
+ KPageLinkedList&& page_list_, Svc::MemoryPermission owner_permission_,
+ Svc::MemoryPermission user_permission_, PAddr physical_address_,
+ std::size_t size_, std::string name_);
/**
* 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 map_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,
- KMemoryPermission permissions);
+ ResultCode Map(KProcess& target_process, VAddr address, std::size_t map_size,
+ Svc::MemoryPermission permissions);
+
+ /**
+ * Unmaps a shared memory block from an address in the target process' address space
+ * @param target_process Process on which to unmap the memory block
+ * @param address Address in system memory to unmap shared memory block
+ * @param unmap_size Size of the shared memory block to unmap
+ */
+ ResultCode Unmap(KProcess& target_process, VAddr address, std::size_t unmap_size);
/**
* Gets a pointer to the shared memory block
@@ -59,7 +56,7 @@ public:
* @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);
+ return device_memory->GetPointer(physical_address + offset);
}
/**
@@ -68,20 +65,26 @@ public:
* @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);
+ return device_memory->GetPointer(physical_address + offset);
}
- void Finalize() override {}
+ virtual void Finalize() override;
+
+ virtual bool IsInitialized() const override {
+ return is_initialized;
+ }
+ static void PostDestroy([[maybe_unused]] uintptr_t arg) {}
private:
- Core::DeviceMemory& device_memory;
- Process* owner_process{};
+ Core::DeviceMemory* device_memory;
+ KProcess* owner_process{};
KPageLinkedList page_list;
- KMemoryPermission owner_permission{};
- KMemoryPermission user_permission{};
+ Svc::MemoryPermission owner_permission{};
+ Svc::MemoryPermission user_permission{};
PAddr physical_address{};
std::size_t size{};
- std::string name;
+ KResourceLimit* resource_limit{};
+ bool is_initialized{};
};
} // namespace Kernel