From 34aac48e023babfde0ade34eda44bb06f43de9ef Mon Sep 17 00:00:00 2001 From: David Marcec Date: Tue, 16 Jan 2018 03:00:24 -0800 Subject: [PATCH] SetThreadCoreMask stub, acc:u0, fatal:u, nvdrv:a->nvdrv, DuplicateSessionEx --- src/core/hle/kernel/svc.cpp | 7 +++++- src/core/hle/kernel/svc_wrap.h | 5 ++++ src/core/hle/service/acc/acc.cpp | 31 +++++++++++++++++++++++++ src/core/hle/service/acc/acc.h | 23 ++++++++++++++++++ src/core/hle/service/fatal/fatal.cpp | 31 +++++++++++++++++++++++++ src/core/hle/service/fatal/fatal.h | 23 ++++++++++++++++++ src/core/hle/service/nvdrv/nvdrv_a.cpp | 3 ++- src/core/hle/service/service.cpp | 4 ++++ src/core/hle/service/sm/controller.cpp | 2 +- src/core/hle/service/vi/vi_m.cpp | 32 +++++++++++++------------- 10 files changed, 142 insertions(+), 19 deletions(-) create mode 100644 src/core/hle/service/acc/acc.cpp create mode 100644 src/core/hle/service/acc/acc.h create mode 100644 src/core/hle/service/fatal/fatal.cpp create mode 100644 src/core/hle/service/fatal/fatal.h diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index 9a81e43616..d832a07d28 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp @@ -724,6 +724,11 @@ static ResultCode MapPhysicalMemory(VAddr addr, u64 size) { return RESULT_SUCCESS; } +static ResultCode SetThreadCoreMask(u32 in0, u64 in1) { + LOG_WARNING(Kernel_SVC, "(STUBBED) called in0 0x%llx in1 0x%llx", in0, in1); + return RESULT_SUCCESS; +} + namespace { struct FunctionDef { using Func = void(); @@ -750,7 +755,7 @@ static const FunctionDef SVC_Table[] = { {0x0C, SvcWrap, "GetThreadPriority"}, {0x0D, SvcWrap, "SetThreadPriority"}, {0x0E, nullptr, "GetThreadCoreMask"}, - {0x0F, nullptr, "SetThreadCoreMask"}, + {0x0F, SvcWrap, "SetThreadCoreMask"}, {0x10, SvcWrap, "GetCurrentProcessorNumber"}, {0x11, nullptr, "SignalEvent"}, {0x12, nullptr, "ClearEvent"}, diff --git a/src/core/hle/kernel/svc_wrap.h b/src/core/hle/kernel/svc_wrap.h index 4e19a3d64a..34e2f91046 100644 --- a/src/core/hle/kernel/svc_wrap.h +++ b/src/core/hle/kernel/svc_wrap.h @@ -174,6 +174,11 @@ void SvcWrap() { func(PARAM(0), PARAM(1)); } +template +void SvcWrap() { + func(PARAM(0), PARAM(1)); +} + template void SvcWrap() { func((s64)PARAM(0)); diff --git a/src/core/hle/service/acc/acc.cpp b/src/core/hle/service/acc/acc.cpp new file mode 100644 index 0000000000..1c32ca0d30 --- /dev/null +++ b/src/core/hle/service/acc/acc.cpp @@ -0,0 +1,31 @@ +// Copyright 2018 yuzu emulator team +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "common/logging/log.h" +#include "core/hle/ipc_helpers.h" +#include "core/hle/service/acc/acc.h" + +namespace Service { +namespace Account { + +void InstallInterfaces(SM::ServiceManager& service_manager) { + std::make_shared()->InstallAsService(service_manager); +} + +Acc_U0::Acc_U0() : ServiceFramework("acc:u0") { + static const FunctionInfo functions[] = { + {100, &Acc_U0::InitializeApplicationInfo, "InitializeApplicationInfo" }, + }; + RegisterHandlers(functions); +} + +void Acc_U0::InitializeApplicationInfo(Kernel::HLERequestContext& ctx) { + LOG_WARNING(Service, "(STUBBED) called"); + IPC::RequestBuilder rb{ ctx, 2 }; + rb.Push(RESULT_SUCCESS); +} + + +} +} \ No newline at end of file diff --git a/src/core/hle/service/acc/acc.h b/src/core/hle/service/acc/acc.h new file mode 100644 index 0000000000..b5e68d26de --- /dev/null +++ b/src/core/hle/service/acc/acc.h @@ -0,0 +1,23 @@ +// Copyright 2018 yuzu emulator team +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "core/hle/kernel/hle_ipc.h" +#include "core/hle/service/service.h" + +namespace Service { +namespace Account { + +void InstallInterfaces(SM::ServiceManager& service_manager); + + +class Acc_U0 final : public ServiceFramework { +public: + Acc_U0(); + ~Acc_U0() = default; +private: + void InitializeApplicationInfo(Kernel::HLERequestContext& ctx); +}; + +} +} \ No newline at end of file diff --git a/src/core/hle/service/fatal/fatal.cpp b/src/core/hle/service/fatal/fatal.cpp new file mode 100644 index 0000000000..ad6f134bd4 --- /dev/null +++ b/src/core/hle/service/fatal/fatal.cpp @@ -0,0 +1,31 @@ +// Copyright 2018 yuzu emulator team +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "common/logging/log.h" +#include "core/hle/ipc_helpers.h" +#include "core/hle/service/fatal/fatal.h" + +namespace Service { +namespace Fatal { + +void InstallInterfaces(SM::ServiceManager& service_manager) { + std::make_shared()->InstallAsService(service_manager); +} + +Fatal_U::Fatal_U() : ServiceFramework("fatal:u") { + static const FunctionInfo functions[] = { + { 2, &Fatal_U::TransitionToFatalError, "TransitionToFatalError" }, + }; + RegisterHandlers(functions); +} + +void Fatal_U::TransitionToFatalError(Kernel::HLERequestContext& ctx) { + LOG_WARNING(Service, "(STUBBED) called"); + IPC::RequestBuilder rb{ ctx, 2 }; + rb.Push(RESULT_SUCCESS); +} + + +} +} \ No newline at end of file diff --git a/src/core/hle/service/fatal/fatal.h b/src/core/hle/service/fatal/fatal.h new file mode 100644 index 0000000000..f828bdef27 --- /dev/null +++ b/src/core/hle/service/fatal/fatal.h @@ -0,0 +1,23 @@ +// Copyright 2018 yuzu emulator team +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "core/hle/kernel/hle_ipc.h" +#include "core/hle/service/service.h" + +namespace Service { +namespace Fatal { + +void InstallInterfaces(SM::ServiceManager& service_manager); + + +class Fatal_U final : public ServiceFramework { +public: + Fatal_U(); + ~Fatal_U() = default; +private: + void TransitionToFatalError(Kernel::HLERequestContext& ctx); +}; + + } +} \ No newline at end of file diff --git a/src/core/hle/service/nvdrv/nvdrv_a.cpp b/src/core/hle/service/nvdrv/nvdrv_a.cpp index 84d89cb493..0c9a2da33c 100644 --- a/src/core/hle/service/nvdrv/nvdrv_a.cpp +++ b/src/core/hle/service/nvdrv/nvdrv_a.cpp @@ -30,6 +30,7 @@ void NVDRV_A::Open(Kernel::HLERequestContext& ctx) { rb.Push(RESULT_SUCCESS); rb.Push(fd); rb.Push(0); + LOG_WARNING(Service, "Opened!!!"); } void NVDRV_A::Ioctl(Kernel::HLERequestContext& ctx) { @@ -66,7 +67,7 @@ void NVDRV_A::Initialize(Kernel::HLERequestContext& ctx) { rb.Push(0); } -NVDRV_A::NVDRV_A() : ServiceFramework("nvdrv:a") { +NVDRV_A::NVDRV_A() : ServiceFramework("nvdrv") { static const FunctionInfo functions[] = { {0, &NVDRV_A::Open, "Open"}, {1, &NVDRV_A::Ioctl, "Ioctl"}, diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp index 02d4346601..dc5c79911a 100644 --- a/src/core/hle/service/service.cpp +++ b/src/core/hle/service/service.cpp @@ -14,10 +14,12 @@ #include "core/hle/kernel/process.h" #include "core/hle/kernel/server_port.h" #include "core/hle/kernel/thread.h" +#include "core/hle/service/acc/acc.h" #include "core/hle/service/am/am.h" #include "core/hle/service/aoc/aoc_u.h" #include "core/hle/service/apm/apm.h" #include "core/hle/service/audio/audio.h" +#include "core/hle/service/fatal/fatal.h" #include "core/hle/service/hid/hid.h" #include "core/hle/service/lm/lm.h" #include "core/hle/service/nvdrv/nvdrv.h" @@ -164,10 +166,12 @@ void Init() { SM::g_service_manager = std::make_shared(); SM::ServiceManager::InstallInterfaces(SM::g_service_manager); + Account::InstallInterfaces(*SM::g_service_manager); AM::InstallInterfaces(*SM::g_service_manager); AOC::InstallInterfaces(*SM::g_service_manager); APM::InstallInterfaces(*SM::g_service_manager); Audio::InstallInterfaces(*SM::g_service_manager); + Fatal::InstallInterfaces(*SM::g_service_manager); HID::InstallInterfaces(*SM::g_service_manager); LM::InstallInterfaces(*SM::g_service_manager); NVDRV::InstallInterfaces(*SM::g_service_manager); diff --git a/src/core/hle/service/sm/controller.cpp b/src/core/hle/service/sm/controller.cpp index e8f5d0e4a2..27e4ee62dd 100644 --- a/src/core/hle/service/sm/controller.cpp +++ b/src/core/hle/service/sm/controller.cpp @@ -46,7 +46,7 @@ Controller::Controller() : ServiceFramework("IpcController") { {0x00000001, nullptr, "ConvertDomainToSession"}, {0x00000002, &Controller::DuplicateSession, "DuplicateSession"}, {0x00000003, &Controller::QueryPointerBufferSize, "QueryPointerBufferSize"}, - {0x00000004, nullptr, "DuplicateSessionEx"}, + {0x00000004, &Controller::DuplicateSession, "DuplicateSessionEx"}, }; RegisterHandlers(functions); } diff --git a/src/core/hle/service/vi/vi_m.cpp b/src/core/hle/service/vi/vi_m.cpp index 1a5a28b0d8..7821824a09 100644 --- a/src/core/hle/service/vi/vi_m.cpp +++ b/src/core/hle/service/vi/vi_m.cpp @@ -8,23 +8,23 @@ #include "core/hle/service/vi/vi_m.h" namespace Service { -namespace VI { + namespace VI { -void VI_M::GetDisplayService(Kernel::HLERequestContext& ctx) { - LOG_WARNING(Service, "(STUBBED) called"); + void VI_M::GetDisplayService(Kernel::HLERequestContext& ctx) { + LOG_WARNING(Service, "(STUBBED) called"); - IPC::RequestBuilder rb{ctx, 2, 0, 0, 1}; - rb.PushIpcInterface(nv_flinger); -} + IPC::RequestBuilder rb{ ctx, 2, 0, 0, 1 }; + rb.PushIpcInterface(nv_flinger); + } -VI_M::VI_M() : ServiceFramework("vi:m") { - static const FunctionInfo functions[] = { - {2, &VI_M::GetDisplayService, "GetDisplayService"}, - {3, nullptr, "GetDisplayServiceWithProxyNameExchange"}, - }; - RegisterHandlers(functions); - nv_flinger = std::make_shared(); -} + VI_M::VI_M() : ServiceFramework("vi:m") { + static const FunctionInfo functions[] = { + { 2, &VI_M::GetDisplayService, "GetDisplayService" }, + { 3, nullptr, "GetDisplayServiceWithProxyNameExchange" }, + }; + RegisterHandlers(functions); + nv_flinger = std::make_shared(); + } -} // namespace VI -} // namespace Service + } // namespace VI +} // namespace Service \ No newline at end of file