From ad48ebb2c857c93efd5e37fad700a058c6bdeac9 Mon Sep 17 00:00:00 2001
From: bunnei <bunneidev@gmail.com>
Date: Thu, 26 Mar 2020 21:13:46 -0400
Subject: [PATCH] core: kernel: Add svc_types header to include SVC-specific
 types.

---
 src/core/CMakeLists.txt         |  1 +
 src/core/hle/kernel/svc.cpp     |  1 +
 src/core/hle/kernel/svc_types.h | 68 +++++++++++++++++++++++++++++++++
 3 files changed, 70 insertions(+)
 create mode 100644 src/core/hle/kernel/svc_types.h

diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index c15d9f52f3..1ea2432831 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -178,6 +178,7 @@ add_library(core STATIC
     hle/kernel/shared_memory.h
     hle/kernel/svc.cpp
     hle/kernel/svc.h
+    hle/kernel/svc_types.h
     hle/kernel/svc_wrap.h
     hle/kernel/synchronization_object.cpp
     hle/kernel/synchronization_object.h
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp
index 7b24cfc8b7..abd5790971 100644
--- a/src/core/hle/kernel/svc.cpp
+++ b/src/core/hle/kernel/svc.cpp
@@ -31,6 +31,7 @@
 #include "core/hle/kernel/scheduler.h"
 #include "core/hle/kernel/shared_memory.h"
 #include "core/hle/kernel/svc.h"
+#include "core/hle/kernel/svc_types.h"
 #include "core/hle/kernel/svc_wrap.h"
 #include "core/hle/kernel/synchronization.h"
 #include "core/hle/kernel/thread.h"
diff --git a/src/core/hle/kernel/svc_types.h b/src/core/hle/kernel/svc_types.h
new file mode 100644
index 0000000000..986724beb9
--- /dev/null
+++ b/src/core/hle/kernel/svc_types.h
@@ -0,0 +1,68 @@
+// Copyright 2020 yuzu emulator team
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include "common/common_funcs.h"
+#include "common/common_types.h"
+
+namespace Kernel::Svc {
+
+enum class MemoryState : u32 {
+    Free = 0x00,
+    Io = 0x01,
+    Static = 0x02,
+    Code = 0x03,
+    CodeData = 0x04,
+    Normal = 0x05,
+    Shared = 0x06,
+    Alias = 0x07,
+    AliasCode = 0x08,
+    AliasCodeData = 0x09,
+    Ipc = 0x0A,
+    Stack = 0x0B,
+    ThreadLocal = 0x0C,
+    Transfered = 0x0D,
+    SharedTransfered = 0x0E,
+    SharedCode = 0x0F,
+    Inaccessible = 0x10,
+    NonSecureIpc = 0x11,
+    NonDeviceIpc = 0x12,
+    Kernel = 0x13,
+    GeneratedCode = 0x14,
+    CodeOut = 0x15,
+};
+DECLARE_ENUM_FLAG_OPERATORS(MemoryState);
+
+enum class MemoryAttribute : u32 {
+    Locked = (1 << 0),
+    IpcLocked = (1 << 1),
+    DeviceShared = (1 << 2),
+    Uncached = (1 << 3),
+};
+DECLARE_ENUM_FLAG_OPERATORS(MemoryAttribute);
+
+enum class MemoryPermission : u32 {
+    None = (0 << 0),
+    Read = (1 << 0),
+    Write = (1 << 1),
+    Execute = (1 << 2),
+    ReadWrite = Read | Write,
+    ReadExecute = Read | Execute,
+    DontCare = (1 << 28),
+};
+DECLARE_ENUM_FLAG_OPERATORS(MemoryPermission);
+
+struct MemoryInfo {
+    u64 addr{};
+    u64 size{};
+    MemoryState state{};
+    MemoryAttribute attr{};
+    MemoryPermission perm{};
+    u32 ipc_refcount{};
+    u32 device_refcount{};
+    u32 padding{};
+};
+
+} // namespace Kernel::Svc