diff options
| author | 2021-02-12 17:02:51 -0800 | |
|---|---|---|
| committer | 2021-02-18 16:16:25 -0800 | |
| commit | 65e0178cc09299550aee949d7b89e211017bddee (patch) | |
| tree | 97abf71a48320fc5628b4946d793191f2fb9dbb0 /src/core/hle/kernel/svc.cpp | |
| parent | hle: kernel: Migrate SlabHeap to KSlabHeap. (diff) | |
| download | yuzu-65e0178cc09299550aee949d7b89e211017bddee.tar.gz yuzu-65e0178cc09299550aee949d7b89e211017bddee.tar.xz yuzu-65e0178cc09299550aee949d7b89e211017bddee.zip | |
hle: kernel: Migrate to KMemoryBlock, KMemoryBlockManager, and others.
Diffstat (limited to 'src/core/hle/kernel/svc.cpp')
| -rw-r--r-- | src/core/hle/kernel/svc.cpp | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index 12cfdcf2c..4ffd65d33 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | #include "core/hle/kernel/k_address_arbiter.h" | 27 | #include "core/hle/kernel/k_address_arbiter.h" |
| 28 | #include "core/hle/kernel/k_condition_variable.h" | 28 | #include "core/hle/kernel/k_condition_variable.h" |
| 29 | #include "core/hle/kernel/k_event.h" | 29 | #include "core/hle/kernel/k_event.h" |
| 30 | #include "core/hle/kernel/k_memory_block.h" | ||
| 30 | #include "core/hle/kernel/k_memory_layout.h" | 31 | #include "core/hle/kernel/k_memory_layout.h" |
| 31 | #include "core/hle/kernel/k_readable_event.h" | 32 | #include "core/hle/kernel/k_readable_event.h" |
| 32 | #include "core/hle/kernel/k_resource_limit.h" | 33 | #include "core/hle/kernel/k_resource_limit.h" |
| @@ -38,7 +39,6 @@ | |||
| 38 | #include "core/hle/kernel/k_thread.h" | 39 | #include "core/hle/kernel/k_thread.h" |
| 39 | #include "core/hle/kernel/k_writable_event.h" | 40 | #include "core/hle/kernel/k_writable_event.h" |
| 40 | #include "core/hle/kernel/kernel.h" | 41 | #include "core/hle/kernel/kernel.h" |
| 41 | #include "core/hle/kernel/memory/memory_block.h" | ||
| 42 | #include "core/hle/kernel/memory/page_table.h" | 42 | #include "core/hle/kernel/memory/page_table.h" |
| 43 | #include "core/hle/kernel/physical_core.h" | 43 | #include "core/hle/kernel/physical_core.h" |
| 44 | #include "core/hle/kernel/process.h" | 44 | #include "core/hle/kernel/process.h" |
| @@ -230,9 +230,9 @@ static ResultCode SetMemoryAttribute(Core::System& system, VAddr address, u64 si | |||
| 230 | return ResultInvalidCurrentMemory; | 230 | return ResultInvalidCurrentMemory; |
| 231 | } | 231 | } |
| 232 | 232 | ||
| 233 | const auto attributes{static_cast<Memory::MemoryAttribute>(mask | attribute)}; | 233 | const auto attributes{static_cast<MemoryAttribute>(mask | attribute)}; |
| 234 | if (attributes != static_cast<Memory::MemoryAttribute>(mask) || | 234 | if (attributes != static_cast<MemoryAttribute>(mask) || |
| 235 | (attributes | Memory::MemoryAttribute::Uncached) != Memory::MemoryAttribute::Uncached) { | 235 | (attributes | MemoryAttribute::Uncached) != MemoryAttribute::Uncached) { |
| 236 | LOG_ERROR(Kernel_SVC, | 236 | LOG_ERROR(Kernel_SVC, |
| 237 | "Memory attribute doesn't match the given mask (Attribute: 0x{:X}, Mask: {:X}", | 237 | "Memory attribute doesn't match the given mask (Attribute: 0x{:X}, Mask: {:X}", |
| 238 | attribute, mask); | 238 | attribute, mask); |
| @@ -241,8 +241,8 @@ static ResultCode SetMemoryAttribute(Core::System& system, VAddr address, u64 si | |||
| 241 | 241 | ||
| 242 | auto& page_table{system.Kernel().CurrentProcess()->PageTable()}; | 242 | auto& page_table{system.Kernel().CurrentProcess()->PageTable()}; |
| 243 | 243 | ||
| 244 | return page_table.SetMemoryAttribute(address, size, static_cast<Memory::MemoryAttribute>(mask), | 244 | return page_table.SetMemoryAttribute(address, size, static_cast<KMemoryAttribute>(mask), |
| 245 | static_cast<Memory::MemoryAttribute>(attribute)); | 245 | static_cast<KMemoryAttribute>(attribute)); |
| 246 | } | 246 | } |
| 247 | 247 | ||
| 248 | static ResultCode SetMemoryAttribute32(Core::System& system, u32 address, u32 size, u32 mask, | 248 | static ResultCode SetMemoryAttribute32(Core::System& system, u32 address, u32 size, u32 mask, |
| @@ -1231,9 +1231,8 @@ static ResultCode MapSharedMemory(Core::System& system, Handle shared_memory_han | |||
| 1231 | return ResultInvalidCurrentMemory; | 1231 | return ResultInvalidCurrentMemory; |
| 1232 | } | 1232 | } |
| 1233 | 1233 | ||
| 1234 | const auto permission_type = static_cast<Memory::MemoryPermission>(permissions); | 1234 | const auto permission_type = static_cast<MemoryPermission>(permissions); |
| 1235 | if ((permission_type | Memory::MemoryPermission::Write) != | 1235 | if ((permission_type | MemoryPermission::Write) != MemoryPermission::ReadWrite) { |
| 1236 | Memory::MemoryPermission::ReadAndWrite) { | ||
| 1237 | LOG_ERROR(Kernel_SVC, "Expected Read or ReadWrite permission but got permissions=0x{:08X}", | 1236 | LOG_ERROR(Kernel_SVC, "Expected Read or ReadWrite permission but got permissions=0x{:08X}", |
| 1238 | permissions); | 1237 | permissions); |
| 1239 | return ResultInvalidMemoryPermissions; | 1238 | return ResultInvalidMemoryPermissions; |
| @@ -1273,7 +1272,8 @@ static ResultCode MapSharedMemory(Core::System& system, Handle shared_memory_han | |||
| 1273 | return ResultInvalidHandle; | 1272 | return ResultInvalidHandle; |
| 1274 | } | 1273 | } |
| 1275 | 1274 | ||
| 1276 | return shared_memory->Map(*current_process, addr, size, permission_type); | 1275 | return shared_memory->Map(*current_process, addr, size, |
| 1276 | static_cast<KMemoryPermission>(permission_type)); | ||
| 1277 | } | 1277 | } |
| 1278 | 1278 | ||
| 1279 | static ResultCode MapSharedMemory32(Core::System& system, Handle shared_memory_handle, u32 addr, | 1279 | static ResultCode MapSharedMemory32(Core::System& system, Handle shared_memory_handle, u32 addr, |
| @@ -1886,9 +1886,8 @@ static ResultCode CreateTransferMemory(Core::System& system, Handle* handle, VAd | |||
| 1886 | return ResultInvalidCurrentMemory; | 1886 | return ResultInvalidCurrentMemory; |
| 1887 | } | 1887 | } |
| 1888 | 1888 | ||
| 1889 | const auto perms{static_cast<Memory::MemoryPermission>(permissions)}; | 1889 | const auto perms{static_cast<MemoryPermission>(permissions)}; |
| 1890 | if (perms > Memory::MemoryPermission::ReadAndWrite || | 1890 | if (perms > MemoryPermission::ReadWrite || perms == MemoryPermission::Write) { |
| 1891 | perms == Memory::MemoryPermission::Write) { | ||
| 1892 | LOG_ERROR(Kernel_SVC, "Invalid memory permissions for transfer memory! (perms={:08X})", | 1891 | LOG_ERROR(Kernel_SVC, "Invalid memory permissions for transfer memory! (perms={:08X})", |
| 1893 | permissions); | 1892 | permissions); |
| 1894 | return ResultInvalidMemoryPermissions; | 1893 | return ResultInvalidMemoryPermissions; |
| @@ -1902,7 +1901,8 @@ static ResultCode CreateTransferMemory(Core::System& system, Handle* handle, VAd | |||
| 1902 | LOG_ERROR(Kernel_SVC, "Could not reserve a new transfer memory"); | 1901 | LOG_ERROR(Kernel_SVC, "Could not reserve a new transfer memory"); |
| 1903 | return ResultResourceLimitedExceeded; | 1902 | return ResultResourceLimitedExceeded; |
| 1904 | } | 1903 | } |
| 1905 | auto transfer_mem_handle = TransferMemory::Create(kernel, system.Memory(), addr, size, perms); | 1904 | auto transfer_mem_handle = TransferMemory::Create(kernel, system.Memory(), addr, size, |
| 1905 | static_cast<KMemoryPermission>(perms)); | ||
| 1906 | 1906 | ||
| 1907 | if (const auto reserve_result{transfer_mem_handle->Reserve()}; reserve_result.IsError()) { | 1907 | if (const auto reserve_result{transfer_mem_handle->Reserve()}; reserve_result.IsError()) { |
| 1908 | return reserve_result; | 1908 | return reserve_result; |