diff options
| author | 2018-01-19 16:35:25 -0800 | |
|---|---|---|
| committer | 2018-01-19 19:35:25 -0500 | |
| commit | 0b6da0c1abaa34a082b627dfe909b6651d8b6fee (patch) | |
| tree | a1aa6aeee7e4b435a9d6673b6b829c0e16aedca2 | |
| parent | Fixes some cast warnings, partial port of citra #3064 (#106) (diff) | |
| download | yuzu-0b6da0c1abaa34a082b627dfe909b6651d8b6fee.tar.gz yuzu-0b6da0c1abaa34a082b627dfe909b6651d8b6fee.tar.xz yuzu-0b6da0c1abaa34a082b627dfe909b6651d8b6fee.zip | |
Added CreateSharedMemory & UNIMPLEMENTED() for non existent services. (#113)
* Added svcCreateSharedMemory
* Services which are not implemented now throw UNIMPLEMENTED()
* clang-format
* changed perms to u32
* removed camelcase
Diffstat (limited to '')
| -rw-r--r-- | src/core/hle/kernel/svc.cpp | 14 | ||||
| -rw-r--r-- | src/core/hle/kernel/svc_wrap.h | 9 | ||||
| -rw-r--r-- | src/core/hle/service/sm/sm.cpp | 1 |
3 files changed, 23 insertions, 1 deletions
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index 339374aff..d267b6c2e 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp | |||
| @@ -737,6 +737,18 @@ static ResultCode SetThreadCoreMask(u64, u64, u64) { | |||
| 737 | return RESULT_SUCCESS; | 737 | return RESULT_SUCCESS; |
| 738 | } | 738 | } |
| 739 | 739 | ||
| 740 | static ResultCode CreateSharedMemory(Handle* handle, u64 sz, u32 local_permissions, | ||
| 741 | u32 remote_permissions) { | ||
| 742 | LOG_TRACE(Kernel_SVC, "called, sz=0x%llx, localPerms=0x%08x, remotePerms=0x%08x", sz, | ||
| 743 | local_permissions, remote_permissions); | ||
| 744 | auto sharedMemHandle = SharedMemory::Create( | ||
| 745 | g_handle_table.Get<Process>(KernelHandle::CurrentProcess), sz, | ||
| 746 | (Kernel::MemoryPermission)local_permissions, (Kernel::MemoryPermission)remote_permissions); | ||
| 747 | |||
| 748 | CASCADE_RESULT(*handle, g_handle_table.Create(sharedMemHandle)); | ||
| 749 | return RESULT_SUCCESS; | ||
| 750 | } | ||
| 751 | |||
| 740 | namespace { | 752 | namespace { |
| 741 | struct FunctionDef { | 753 | struct FunctionDef { |
| 742 | using Func = void(); | 754 | using Func = void(); |
| @@ -828,7 +840,7 @@ static const FunctionDef SVC_Table[] = { | |||
| 828 | {0x4D, nullptr, "SleepSystem"}, | 840 | {0x4D, nullptr, "SleepSystem"}, |
| 829 | {0x4E, nullptr, "ReadWriteRegister"}, | 841 | {0x4E, nullptr, "ReadWriteRegister"}, |
| 830 | {0x4F, nullptr, "SetProcessActivity"}, | 842 | {0x4F, nullptr, "SetProcessActivity"}, |
| 831 | {0x50, nullptr, "CreateSharedMemory"}, | 843 | {0x50, SvcWrap<CreateSharedMemory>, "CreateSharedMemory"}, |
| 832 | {0x51, nullptr, "MapTransferMemory"}, | 844 | {0x51, nullptr, "MapTransferMemory"}, |
| 833 | {0x52, nullptr, "UnmapTransferMemory"}, | 845 | {0x52, nullptr, "UnmapTransferMemory"}, |
| 834 | {0x53, nullptr, "CreateInterruptEvent"}, | 846 | {0x53, nullptr, "CreateInterruptEvent"}, |
diff --git a/src/core/hle/kernel/svc_wrap.h b/src/core/hle/kernel/svc_wrap.h index fd7054bbd..7a165d8dc 100644 --- a/src/core/hle/kernel/svc_wrap.h +++ b/src/core/hle/kernel/svc_wrap.h | |||
| @@ -145,6 +145,15 @@ void SvcWrap() { | |||
| 145 | FuncReturn(retval); | 145 | FuncReturn(retval); |
| 146 | } | 146 | } |
| 147 | 147 | ||
| 148 | template <ResultCode func(Handle*, u64, u32, u32)> | ||
| 149 | void SvcWrap() { | ||
| 150 | u32 param_1 = 0; | ||
| 151 | u32 retval = | ||
| 152 | func(¶m_1, PARAM(1), (u32)(PARAM(2) & 0xFFFFFFFF), (u32)(PARAM(3) & 0xFFFFFFFF)).raw; | ||
| 153 | Core::CPU().SetReg(1, param_1); | ||
| 154 | FuncReturn(retval); | ||
| 155 | } | ||
| 156 | |||
| 148 | //////////////////////////////////////////////////////////////////////////////////////////////////// | 157 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
| 149 | // Function wrappers that return type u32 | 158 | // Function wrappers that return type u32 |
| 150 | 159 | ||
diff --git a/src/core/hle/service/sm/sm.cpp b/src/core/hle/service/sm/sm.cpp index f3bffac54..c4078f02f 100644 --- a/src/core/hle/service/sm/sm.cpp +++ b/src/core/hle/service/sm/sm.cpp | |||
| @@ -103,6 +103,7 @@ void SM::GetService(Kernel::HLERequestContext& ctx) { | |||
| 103 | rb.Push(client_port.Code()); | 103 | rb.Push(client_port.Code()); |
| 104 | LOG_ERROR(Service_SM, "called service=%s -> error 0x%08X", name.c_str(), | 104 | LOG_ERROR(Service_SM, "called service=%s -> error 0x%08X", name.c_str(), |
| 105 | client_port.Code().raw); | 105 | client_port.Code().raw); |
| 106 | UNIMPLEMENTED(); | ||
| 106 | return; | 107 | return; |
| 107 | } | 108 | } |
| 108 | 109 | ||