diff options
| author | liamwhite <liamwhite@users.noreply.github.com> | 2022-10-14 17:30:11 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-10-14 17:30:11 -0400 |
| commit | 1d3810971453df275ccd0fcdfb9c480a070c30c3 (patch) | |
| tree | d55dcc3f619ea075f55b4085648ffafb7717eed9 /src/core/hle/kernel/svc_wrap.h | |
| parent | 6a9bbb012830d440f049667977c91e14bb925ac8 (diff) | |
| parent | 61a8696510b3bca120f1f0289a3829e3db14834e (diff) | |
Merge pull request #9055 from liamwhite/hbl
Preliminary support for nx-hbloader
Diffstat (limited to 'src/core/hle/kernel/svc_wrap.h')
| -rw-r--r-- | src/core/hle/kernel/svc_wrap.h | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/core/hle/kernel/svc_wrap.h b/src/core/hle/kernel/svc_wrap.h index 4bc49087e..272c54cf7 100644 --- a/src/core/hle/kernel/svc_wrap.h +++ b/src/core/hle/kernel/svc_wrap.h @@ -8,6 +8,7 @@ #include "core/core.h" #include "core/hle/kernel/svc_types.h" #include "core/hle/result.h" +#include "core/memory.h" namespace Kernel { @@ -346,6 +347,37 @@ void SvcWrap64(Core::System& system) { FuncReturn(system, retval); } +// Used by CreateSession +template <Result func(Core::System&, Handle*, Handle*, u32, u64)> +void SvcWrap64(Core::System& system) { + Handle param_1 = 0; + Handle param_2 = 0; + const u32 retval = func(system, ¶m_1, ¶m_2, static_cast<u32>(Param(system, 2)), + static_cast<u32>(Param(system, 3))) + .raw; + + system.CurrentArmInterface().SetReg(1, param_1); + system.CurrentArmInterface().SetReg(2, param_2); + FuncReturn(system, retval); +} + +// Used by ReplyAndReceive +template <Result func(Core::System&, s32*, Handle*, s32, Handle, s64)> +void SvcWrap64(Core::System& system) { + s32 param_1 = 0; + s32 num_handles = static_cast<s32>(Param(system, 2)); + + std::vector<Handle> handles(num_handles); + system.Memory().ReadBlock(Param(system, 1), handles.data(), num_handles * sizeof(Handle)); + + const u32 retval = func(system, ¶m_1, handles.data(), num_handles, + static_cast<s32>(Param(system, 3)), static_cast<s64>(Param(system, 4))) + .raw; + + system.CurrentArmInterface().SetReg(1, param_1); + FuncReturn(system, retval); +} + // Used by WaitForAddress template <Result func(Core::System&, u64, Svc::ArbitrationType, s32, s64)> void SvcWrap64(Core::System& system) { |
