diff options
| author | 2018-01-14 17:15:31 -0500 | |
|---|---|---|
| committer | 2018-01-14 17:20:55 -0500 | |
| commit | 974362bc12c146e255bf7eb77dd9939ed649a483 (patch) | |
| tree | 7abcab89739682ab74193253b0389758a3c2fd64 /src/core/hle/kernel/svc.cpp | |
| parent | kernel: Increase default stack size to 64K. (diff) | |
| download | yuzu-974362bc12c146e255bf7eb77dd9939ed649a483.tar.gz yuzu-974362bc12c146e255bf7eb77dd9939ed649a483.tar.xz yuzu-974362bc12c146e255bf7eb77dd9939ed649a483.zip | |
svc: Implement svcMapSharedMemory.
Diffstat (limited to 'src/core/hle/kernel/svc.cpp')
| -rw-r--r-- | src/core/hle/kernel/svc.cpp | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index eb02dbde3..9c60576c1 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | #include "core/hle/kernel/object_address_table.h" | 17 | #include "core/hle/kernel/object_address_table.h" |
| 18 | #include "core/hle/kernel/process.h" | 18 | #include "core/hle/kernel/process.h" |
| 19 | #include "core/hle/kernel/resource_limit.h" | 19 | #include "core/hle/kernel/resource_limit.h" |
| 20 | #include "core/hle/kernel/shared_memory.h" | ||
| 20 | #include "core/hle/kernel/svc.h" | 21 | #include "core/hle/kernel/svc.h" |
| 21 | #include "core/hle/kernel/svc_wrap.h" | 22 | #include "core/hle/kernel/svc_wrap.h" |
| 22 | #include "core/hle/kernel/sync_object.h" | 23 | #include "core/hle/kernel/sync_object.h" |
| @@ -384,6 +385,37 @@ static u32 GetCurrentProcessorNumber() { | |||
| 384 | return 0; | 385 | return 0; |
| 385 | } | 386 | } |
| 386 | 387 | ||
| 388 | static ResultCode MapSharedMemory(Handle shared_memory_handle, VAddr addr, u64 size, | ||
| 389 | u32 permissions) { | ||
| 390 | LOG_TRACE(Kernel_SVC, | ||
| 391 | "called, shared_memory_handle=0x%08X, addr=0x%llx, size=0x%llx, permissions=0x%08X", | ||
| 392 | shared_memory_handle, addr, size, permissions); | ||
| 393 | |||
| 394 | SharedPtr<SharedMemory> shared_memory = | ||
| 395 | Kernel::g_handle_table.Get<SharedMemory>(shared_memory_handle); | ||
| 396 | if (!shared_memory) { | ||
| 397 | return ERR_INVALID_HANDLE; | ||
| 398 | } | ||
| 399 | |||
| 400 | MemoryPermission permissions_type = static_cast<MemoryPermission>(permissions); | ||
| 401 | switch (permissions_type) { | ||
| 402 | case MemoryPermission::Read: | ||
| 403 | case MemoryPermission::Write: | ||
| 404 | case MemoryPermission::ReadWrite: | ||
| 405 | case MemoryPermission::Execute: | ||
| 406 | case MemoryPermission::ReadExecute: | ||
| 407 | case MemoryPermission::WriteExecute: | ||
| 408 | case MemoryPermission::ReadWriteExecute: | ||
| 409 | case MemoryPermission::DontCare: | ||
| 410 | return shared_memory->Map(Kernel::g_current_process.get(), addr, permissions_type, | ||
| 411 | MemoryPermission::DontCare); | ||
| 412 | default: | ||
| 413 | LOG_ERROR(Kernel_SVC, "unknown permissions=0x%08X", permissions); | ||
| 414 | } | ||
| 415 | |||
| 416 | return RESULT_SUCCESS; | ||
| 417 | } | ||
| 418 | |||
| 387 | /// Query process memory | 419 | /// Query process memory |
| 388 | static ResultCode QueryProcessMemory(MemoryInfo* memory_info, PageInfo* /*page_info*/, | 420 | static ResultCode QueryProcessMemory(MemoryInfo* memory_info, PageInfo* /*page_info*/, |
| 389 | Handle process_handle, u64 addr) { | 421 | Handle process_handle, u64 addr) { |
| @@ -707,7 +739,7 @@ static const FunctionDef SVC_Table[] = { | |||
| 707 | {0x10, SvcWrap<GetCurrentProcessorNumber>, "GetCurrentProcessorNumber"}, | 739 | {0x10, SvcWrap<GetCurrentProcessorNumber>, "GetCurrentProcessorNumber"}, |
| 708 | {0x11, nullptr, "SignalEvent"}, | 740 | {0x11, nullptr, "SignalEvent"}, |
| 709 | {0x12, nullptr, "ClearEvent"}, | 741 | {0x12, nullptr, "ClearEvent"}, |
| 710 | {0x13, nullptr, "MapSharedMemory"}, | 742 | {0x13, SvcWrap<MapSharedMemory>, "MapSharedMemory"}, |
| 711 | {0x14, nullptr, "UnmapSharedMemory"}, | 743 | {0x14, nullptr, "UnmapSharedMemory"}, |
| 712 | {0x15, SvcWrap<CreateTransferMemory>, "CreateTransferMemory"}, | 744 | {0x15, SvcWrap<CreateTransferMemory>, "CreateTransferMemory"}, |
| 713 | {0x16, SvcWrap<CloseHandle>, "CloseHandle"}, | 745 | {0x16, SvcWrap<CloseHandle>, "CloseHandle"}, |