summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/svc.cpp
diff options
context:
space:
mode:
authorGravatar bunnei2018-01-14 17:15:31 -0500
committerGravatar bunnei2018-01-14 17:20:55 -0500
commit974362bc12c146e255bf7eb77dd9939ed649a483 (patch)
tree7abcab89739682ab74193253b0389758a3c2fd64 /src/core/hle/kernel/svc.cpp
parentkernel: Increase default stack size to 64K. (diff)
downloadyuzu-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.cpp34
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
388static 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
388static ResultCode QueryProcessMemory(MemoryInfo* memory_info, PageInfo* /*page_info*/, 420static 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"},