aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall32.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2022-05-03 08:16:31 -0300
committerGitHub <noreply@github.com>2022-05-03 13:16:31 +0200
commit1cbca5eecbb6b7bce94dca864b5cffda4db02d39 (patch)
treeec2149ce096c63bda078b5f912fed7e1a13bf8d0 /Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall32.cs
parent95017b8c66f70406e926b278ecdd6d4ec0a93110 (diff)
Implement code memory syscalls (#2958)1.1.111
* Implement code memory syscalls * Remove owner process validation * Add 32-bit code memory syscalls * Remove unused field
Diffstat (limited to 'Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall32.cs')
-rw-r--r--Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall32.cs60
1 files changed, 47 insertions, 13 deletions
diff --git a/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall32.cs b/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall32.cs
index bf4eee79..27ff8ef7 100644
--- a/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall32.cs
+++ b/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall32.cs
@@ -143,6 +143,26 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return _syscall.CreateTransferMemory(out handle, address, size, permission);
}
+ public KernelResult CreateCodeMemory32([R(1)] uint address, [R(2)] uint size, [R(1)] out int handle)
+ {
+ return _syscall.CreateCodeMemory(address, size, out handle);
+ }
+
+ public KernelResult ControlCodeMemory32(
+ [R(0)] int handle,
+ [R(1)] CodeMemoryOperation op,
+ [R(2)] uint addressLow,
+ [R(3)] uint addressHigh,
+ [R(4)] uint sizeLow,
+ [R(5)] uint sizeHigh,
+ [R(6)] KMemoryPermission permission)
+ {
+ ulong address = addressLow | ((ulong)addressHigh << 32);
+ ulong size = sizeLow | ((ulong)sizeHigh << 32);
+
+ return _syscall.ControlCodeMemory(handle, op, address, size, permission);
+ }
+
public KernelResult MapTransferMemory32([R(0)] int handle, [R(1)] uint address, [R(2)] uint size, [R(3)] KMemoryPermission permission)
{
return _syscall.MapTransferMemory(handle, address, size, permission);
@@ -163,36 +183,50 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return _syscall.UnmapPhysicalMemory(address, size);
}
- public KernelResult MapProcessCodeMemory32([R(0)] int handle, [R(1)] uint srcLow, [R(2)] uint dstLow, [R(3)] uint dstHigh, [R(4)] uint srcHigh, [R(5)] uint sizeLow, [R(6)] uint sizeHigh)
+ public KernelResult SetProcessMemoryPermission32(
+ [R(0)] int handle,
+ [R(1)] uint sizeLow,
+ [R(2)] uint srcLow,
+ [R(3)] uint srcHigh,
+ [R(4)] uint sizeHigh,
+ [R(5)] KMemoryPermission permission)
{
ulong src = srcLow | ((ulong)srcHigh << 32);
- ulong dst = dstLow | ((ulong)dstHigh << 32);
ulong size = sizeLow | ((ulong)sizeHigh << 32);
- return _syscall.MapProcessCodeMemory(handle, dst, src, size);
+ return _syscall.SetProcessMemoryPermission(handle, src, size, permission);
}
- public KernelResult UnmapProcessCodeMemory32([R(0)] int handle, [R(1)] uint srcLow, [R(2)] uint dstLow, [R(3)] uint dstHigh, [R(4)] uint srcHigh, [R(5)] uint sizeLow, [R(6)] uint sizeHigh)
+ public KernelResult MapProcessMemory32([R(0)] uint dst, [R(1)] int handle, [R(2)] uint srcLow, [R(3)] uint srcHigh, [R(4)] uint size)
+ {
+ ulong src = srcLow | ((ulong)srcHigh << 32);
+
+ return _syscall.MapProcessMemory(dst, handle, src, size);
+ }
+
+ public KernelResult UnmapProcessMemory32([R(0)] uint dst, [R(1)] int handle, [R(2)] uint srcLow, [R(3)] uint srcHigh, [R(4)] uint size)
+ {
+ ulong src = srcLow | ((ulong)srcHigh << 32);
+
+ return _syscall.UnmapProcessMemory(dst, handle, src, size);
+ }
+
+ public KernelResult MapProcessCodeMemory32([R(0)] int handle, [R(1)] uint srcLow, [R(2)] uint dstLow, [R(3)] uint dstHigh, [R(4)] uint srcHigh, [R(5)] uint sizeLow, [R(6)] uint sizeHigh)
{
ulong src = srcLow | ((ulong)srcHigh << 32);
ulong dst = dstLow | ((ulong)dstHigh << 32);
ulong size = sizeLow | ((ulong)sizeHigh << 32);
- return _syscall.UnmapProcessCodeMemory(handle, dst, src, size);
+ return _syscall.MapProcessCodeMemory(handle, dst, src, size);
}
- public KernelResult SetProcessMemoryPermission32(
- [R(0)] int handle,
- [R(1)] uint sizeLow,
- [R(2)] uint srcLow,
- [R(3)] uint srcHigh,
- [R(4)] uint sizeHigh,
- [R(5)] KMemoryPermission permission)
+ public KernelResult UnmapProcessCodeMemory32([R(0)] int handle, [R(1)] uint srcLow, [R(2)] uint dstLow, [R(3)] uint dstHigh, [R(4)] uint srcHigh, [R(5)] uint sizeLow, [R(6)] uint sizeHigh)
{
ulong src = srcLow | ((ulong)srcHigh << 32);
+ ulong dst = dstLow | ((ulong)dstHigh << 32);
ulong size = sizeLow | ((ulong)sizeHigh << 32);
- return _syscall.SetProcessMemoryPermission(handle, src, size, permission);
+ return _syscall.UnmapProcessCodeMemory(handle, dst, src, size);
}
// System