summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/svc_wrap.h
diff options
context:
space:
mode:
authorliamwhite <liamwhite@users.noreply.github.com>2022-10-14 23:30:11 +0200
committerGitHub <noreply@github.com>2022-10-14 23:30:11 +0200
commit1d3810971453df275ccd0fcdfb9c480a070c30c3 (patch)
treed55dcc3f619ea075f55b4085648ffafb7717eed9 /src/core/hle/kernel/svc_wrap.h
parentMerge pull request #9069 from german77/sdl2 (diff)
parentk_server_session: preliminary support for userspace server sessions (diff)
downloadyuzu-1d3810971453df275ccd0fcdfb9c480a070c30c3.tar
yuzu-1d3810971453df275ccd0fcdfb9c480a070c30c3.tar.gz
yuzu-1d3810971453df275ccd0fcdfb9c480a070c30c3.tar.bz2
yuzu-1d3810971453df275ccd0fcdfb9c480a070c30c3.tar.lz
yuzu-1d3810971453df275ccd0fcdfb9c480a070c30c3.tar.xz
yuzu-1d3810971453df275ccd0fcdfb9c480a070c30c3.tar.zst
yuzu-1d3810971453df275ccd0fcdfb9c480a070c30c3.zip
Diffstat (limited to 'src/core/hle/kernel/svc_wrap.h')
-rw-r--r--src/core/hle/kernel/svc_wrap.h32
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, &param_1, &param_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, &param_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) {