summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2022-03-11 09:18:35 +0100
committerbunnei <bunneidev@gmail.com>2022-03-15 02:14:53 +0100
commit08434842b3ea935e4a3b492c18140aff2de2e7ae (patch)
tree411596886be4f047ff48c44c11da13512c622333
parentcore: hle: kernel: k_thread: Ensure host Fiber is freed. (diff)
downloadyuzu-08434842b3ea935e4a3b492c18140aff2de2e7ae.tar
yuzu-08434842b3ea935e4a3b492c18140aff2de2e7ae.tar.gz
yuzu-08434842b3ea935e4a3b492c18140aff2de2e7ae.tar.bz2
yuzu-08434842b3ea935e4a3b492c18140aff2de2e7ae.tar.lz
yuzu-08434842b3ea935e4a3b492c18140aff2de2e7ae.tar.xz
yuzu-08434842b3ea935e4a3b492c18140aff2de2e7ae.tar.zst
yuzu-08434842b3ea935e4a3b492c18140aff2de2e7ae.zip
-rw-r--r--src/core/CMakeLists.txt1
-rw-r--r--src/core/hle/kernel/k_page_buffer.h34
2 files changed, 35 insertions, 0 deletions
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 5db6a1b3a..43be5e652 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -207,6 +207,7 @@ add_library(core STATIC
hle/kernel/k_memory_region.h
hle/kernel/k_memory_region_type.h
hle/kernel/k_page_bitmap.h
+ hle/kernel/k_page_buffer.h
hle/kernel/k_page_heap.cpp
hle/kernel/k_page_heap.h
hle/kernel/k_page_linked_list.h
diff --git a/src/core/hle/kernel/k_page_buffer.h b/src/core/hle/kernel/k_page_buffer.h
new file mode 100644
index 000000000..0a9451228
--- /dev/null
+++ b/src/core/hle/kernel/k_page_buffer.h
@@ -0,0 +1,34 @@
+// Copyright 2022 yuzu Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include <array>
+
+#include "common/alignment.h"
+#include "common/assert.h"
+#include "common/common_types.h"
+#include "core/core.h"
+#include "core/device_memory.h"
+#include "core/hle/kernel/memory_types.h"
+
+namespace Kernel {
+
+class KPageBuffer final : public KSlabAllocated<KPageBuffer> {
+public:
+ KPageBuffer() = default;
+
+ static KPageBuffer* FromPhysicalAddress(Core::System& system, PAddr phys_addr) {
+ ASSERT(Common::IsAligned(phys_addr, PageSize));
+ return reinterpret_cast<KPageBuffer*>(system.DeviceMemory().GetPointer(phys_addr));
+ }
+
+private:
+ [[maybe_unused]] alignas(PageSize) std::array<u8, PageSize> m_buffer{};
+};
+
+static_assert(sizeof(KPageBuffer) == PageSize);
+static_assert(alignof(KPageBuffer) == PageSize);
+
+} // namespace Kernel