yuzu-emu
/
yuzu
Archived
1
0
Fork 0

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
This commit is contained in:
David 2018-01-19 16:35:25 -08:00 committed by bunnei
parent dd62f125c3
commit 0b6da0c1ab
3 changed files with 23 additions and 1 deletions

View File

@ -737,6 +737,18 @@ static ResultCode SetThreadCoreMask(u64, u64, u64) {
return RESULT_SUCCESS; return RESULT_SUCCESS;
} }
static ResultCode CreateSharedMemory(Handle* handle, u64 sz, u32 local_permissions,
u32 remote_permissions) {
LOG_TRACE(Kernel_SVC, "called, sz=0x%llx, localPerms=0x%08x, remotePerms=0x%08x", sz,
local_permissions, remote_permissions);
auto sharedMemHandle = SharedMemory::Create(
g_handle_table.Get<Process>(KernelHandle::CurrentProcess), sz,
(Kernel::MemoryPermission)local_permissions, (Kernel::MemoryPermission)remote_permissions);
CASCADE_RESULT(*handle, g_handle_table.Create(sharedMemHandle));
return RESULT_SUCCESS;
}
namespace { namespace {
struct FunctionDef { struct FunctionDef {
using Func = void(); using Func = void();
@ -828,7 +840,7 @@ static const FunctionDef SVC_Table[] = {
{0x4D, nullptr, "SleepSystem"}, {0x4D, nullptr, "SleepSystem"},
{0x4E, nullptr, "ReadWriteRegister"}, {0x4E, nullptr, "ReadWriteRegister"},
{0x4F, nullptr, "SetProcessActivity"}, {0x4F, nullptr, "SetProcessActivity"},
{0x50, nullptr, "CreateSharedMemory"}, {0x50, SvcWrap<CreateSharedMemory>, "CreateSharedMemory"},
{0x51, nullptr, "MapTransferMemory"}, {0x51, nullptr, "MapTransferMemory"},
{0x52, nullptr, "UnmapTransferMemory"}, {0x52, nullptr, "UnmapTransferMemory"},
{0x53, nullptr, "CreateInterruptEvent"}, {0x53, nullptr, "CreateInterruptEvent"},

View File

@ -145,6 +145,15 @@ void SvcWrap() {
FuncReturn(retval); FuncReturn(retval);
} }
template <ResultCode func(Handle*, u64, u32, u32)>
void SvcWrap() {
u32 param_1 = 0;
u32 retval =
func(&param_1, PARAM(1), (u32)(PARAM(2) & 0xFFFFFFFF), (u32)(PARAM(3) & 0xFFFFFFFF)).raw;
Core::CPU().SetReg(1, param_1);
FuncReturn(retval);
}
//////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Function wrappers that return type u32 // Function wrappers that return type u32

View File

@ -103,6 +103,7 @@ void SM::GetService(Kernel::HLERequestContext& ctx) {
rb.Push(client_port.Code()); rb.Push(client_port.Code());
LOG_ERROR(Service_SM, "called service=%s -> error 0x%08X", name.c_str(), LOG_ERROR(Service_SM, "called service=%s -> error 0x%08X", name.c_str(),
client_port.Code().raw); client_port.Code().raw);
UNIMPLEMENTED();
return; return;
} }