aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall.cs')
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall.cs223
1 files changed, 180 insertions, 43 deletions
diff --git a/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall.cs b/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall.cs
index 3163c348..82632f44 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall.cs
@@ -91,7 +91,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
KHandleTable handleTable = KernelStatic.GetCurrentProcess().HandleTable;
- KProcess process = new KProcess(_context);
+ KProcess process = new(_context);
using var _ = new OnScopeExit(process.DecrementReferenceCount);
@@ -117,7 +117,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
ProcessCreationFlags.PoolPartitionApplet => MemoryRegion.Applet,
ProcessCreationFlags.PoolPartitionSystem => MemoryRegion.Service,
ProcessCreationFlags.PoolPartitionSystemNonSecure => MemoryRegion.NvServices,
- _ => MemoryRegion.NvServices
+ _ => MemoryRegion.NvServices,
};
Result result = process.Initialize(
@@ -138,6 +138,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return handleTable.GenerateHandle(process, out handle);
}
+#pragma warning disable CA1822 // Mark member as static
public Result StartProcess(int handle, int priority, int cpuCore, ulong mainThreadStackSize)
{
KProcess process = KernelStatic.GetCurrentProcess().HandleTable.GetObject<KProcess>(handle);
@@ -170,14 +171,17 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return Result.Success;
}
+#pragma warning restore CA1822
[Svc(0x5f)]
+#pragma warning disable CA1822 // Mark member as static
public Result FlushProcessDataCache(int processHandle, ulong address, ulong size)
{
// FIXME: This needs to be implemented as ARMv7 doesn't have any way to do cache maintenance operations on EL0.
// As we don't support (and don't actually need) to flush the cache, this is stubbed.
return Result.Success;
}
+#pragma warning restore CA1822
// IPC
@@ -251,6 +255,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
}
[Svc(0x22)]
+#pragma warning disable CA1822 // Mark member as static
public Result SendSyncRequestWithUserBuffer(
[PointerSized] ulong messagePtr,
[PointerSized] ulong messageSize,
@@ -300,6 +305,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return result;
}
+#pragma warning restore CA1822
[Svc(0x23)]
public Result SendAsyncRequestWithUserBuffer(
@@ -351,7 +357,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
}
else
{
- KEvent doneEvent = new KEvent(_context);
+ KEvent doneEvent = new(_context);
result = currentProcess.HandleTable.GenerateHandle(doneEvent.ReadableEvent, out doneEventHandle);
@@ -408,7 +414,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
if (isLight)
{
- KLightSession session = new KLightSession(_context);
+ KLightSession session = new(_context);
result = currentProcess.HandleTable.GenerateHandle(session.ServerSession, out serverSessionHandle);
@@ -429,7 +435,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
}
else
{
- KSession session = new KSession(_context);
+ KSession session = new(_context);
result = currentProcess.HandleTable.GenerateHandle(session.ServerSession, out serverSessionHandle);
@@ -745,7 +751,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return KernelResult.MaximumExceeded;
}
- KPort port = new KPort(_context, maxSessions, isLight, name);
+ KPort port = new(_context, maxSessions, isLight, name);
KProcess currentProcess = KernelStatic.GetCurrentProcess();
@@ -798,7 +804,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return KAutoObject.RemoveName(_context, name);
}
- KPort port = new KPort(_context, maxSessions, false, null);
+ KPort port = new(_context, maxSessions, false, null);
KProcess currentProcess = KernelStatic.GetCurrentProcess();
@@ -889,6 +895,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
}
[Svc(2)]
+#pragma warning disable CA1822 // Mark member as static
public Result SetMemoryPermission([PointerSized] ulong address, [PointerSized] ulong size, KMemoryPermission permission)
{
if (!PageAligned(address))
@@ -920,8 +927,10 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return currentProcess.MemoryManager.SetMemoryPermission(address, size, permission);
}
+#pragma warning restore CA1822
[Svc(3)]
+#pragma warning disable CA1822 // Mark member as static
public Result SetMemoryAttribute(
[PointerSized] ulong address,
[PointerSized] ulong size,
@@ -961,8 +970,10 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return result;
}
+#pragma warning restore CA1822
[Svc(4)]
+#pragma warning disable CA1822 // Mark member as static
public Result MapMemory([PointerSized] ulong dst, [PointerSized] ulong src, [PointerSized] ulong size)
{
if (!PageAligned(src | dst))
@@ -998,8 +1009,10 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return process.MemoryManager.Map(dst, src, size);
}
+#pragma warning restore CA1822
[Svc(5)]
+#pragma warning disable CA1822 // Mark member as static
public Result UnmapMemory([PointerSized] ulong dst, [PointerSized] ulong src, [PointerSized] ulong size)
{
if (!PageAligned(src | dst))
@@ -1035,6 +1048,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return process.MemoryManager.Unmap(dst, src, size);
}
+#pragma warning restore CA1822
[Svc(6)]
public Result QueryMemory([PointerSized] ulong infoPtr, [PointerSized] out ulong pageInfo, [PointerSized] ulong address)
@@ -1051,6 +1065,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return result;
}
+#pragma warning disable CA1822 // Mark member as static
public Result QueryMemory(out MemoryInfo info, out ulong pageInfo, ulong address)
{
KProcess process = KernelStatic.GetCurrentProcess();
@@ -1070,8 +1085,10 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return Result.Success;
}
+#pragma warning restore CA1822
[Svc(0x13)]
+#pragma warning disable CA1822 // Mark member as static
public Result MapSharedMemory(int handle, [PointerSized] ulong address, [PointerSized] ulong size, KMemoryPermission permission)
{
if (!PageAligned(address))
@@ -1117,8 +1134,10 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
currentProcess,
permission);
}
+#pragma warning restore CA1822
[Svc(0x14)]
+#pragma warning disable CA1822 // Mark member as static
public Result UnmapSharedMemory(int handle, [PointerSized] ulong address, [PointerSized] ulong size)
{
if (!PageAligned(address))
@@ -1158,6 +1177,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
size,
currentProcess);
}
+#pragma warning restore CA1822
[Svc(0x15)]
public Result CreateTransferMemory(out int handle, [PointerSized] ulong address, [PointerSized] ulong size, KMemoryPermission permission)
@@ -1205,7 +1225,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return KernelResult.InvalidMemState;
}
- KTransferMemory transferMemory = new KTransferMemory(_context);
+ KTransferMemory transferMemory = new(_context);
Result result = transferMemory.Initialize(address, size, permission);
@@ -1224,6 +1244,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
}
[Svc(0x51)]
+#pragma warning disable CA1822 // Mark member as static
public Result MapTransferMemory(int handle, [PointerSized] ulong address, [PointerSized] ulong size, KMemoryPermission permission)
{
if (!PageAligned(address))
@@ -1269,8 +1290,10 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
currentProcess,
permission);
}
+#pragma warning restore CA1822
[Svc(0x52)]
+#pragma warning disable CA1822 // Mark member as static
public Result UnmapTransferMemory(int handle, [PointerSized] ulong address, [PointerSized] ulong size)
{
if (!PageAligned(address))
@@ -1310,8 +1333,10 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
size,
currentProcess);
}
+#pragma warning restore CA1822
[Svc(0x2c)]
+#pragma warning disable CA1822 // Mark member as static
public Result MapPhysicalMemory([PointerSized] ulong address, [PointerSized] ulong size)
{
if (!PageAligned(address))
@@ -1346,8 +1371,10 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return process.MemoryManager.MapPhysicalMemory(address, size);
}
+#pragma warning restore CA1822
[Svc(0x2d)]
+#pragma warning disable CA1822 // Mark member as static
public Result UnmapPhysicalMemory([PointerSized] ulong address, [PointerSized] ulong size)
{
if (!PageAligned(address))
@@ -1382,6 +1409,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return process.MemoryManager.UnmapPhysicalMemory(address, size);
}
+#pragma warning restore CA1822
[Svc(0x4b)]
public Result CreateCodeMemory(out int handle, [PointerSized] ulong address, [PointerSized] ulong size)
@@ -1403,7 +1431,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return KernelResult.InvalidMemState;
}
- KCodeMemory codeMemory = new KCodeMemory(_context);
+ KCodeMemory codeMemory = new(_context);
using var _ = new OnScopeExit(codeMemory.DecrementReferenceCount);
@@ -1425,6 +1453,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
}
[Svc(0x4c)]
+#pragma warning disable CA1822 // Mark member as static
public Result ControlCodeMemory(
int handle,
CodeMemoryOperation op,
@@ -1498,11 +1527,14 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return codeMemory.UnmapFromOwner(address, size);
- default: return KernelResult.InvalidEnumValue;
+ default:
+ return KernelResult.InvalidEnumValue;
}
}
+#pragma warning restore CA1822
[Svc(0x73)]
+#pragma warning disable CA1822 // Mark member as static
public Result SetProcessMemoryPermission(
int handle,
[PointerSized] ulong src,
@@ -1543,8 +1575,10 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return targetProcess.MemoryManager.SetProcessMemoryPermission(src, size, permission);
}
+#pragma warning restore CA1822
[Svc(0x74)]
+#pragma warning disable CA1822 // Mark member as static
public Result MapProcessMemory(
[PointerSized] ulong dst,
int handle,
@@ -1580,7 +1614,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return KernelResult.InvalidMemRange;
}
- KPageList pageList = new KPageList();
+ KPageList pageList = new();
Result result = srcProcess.MemoryManager.GetPagesIfStateEquals(
src,
@@ -1600,8 +1634,10 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return dstProcess.MemoryManager.MapPages(dst, pageList, MemoryState.ProcessMemory, KMemoryPermission.ReadAndWrite);
}
+#pragma warning restore CA1822
[Svc(0x75)]
+#pragma warning disable CA1822 // Mark member as static
public Result UnmapProcessMemory(
[PointerSized] ulong dst,
int handle,
@@ -1646,8 +1682,10 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return Result.Success;
}
+#pragma warning restore CA1822
[Svc(0x77)]
+#pragma warning disable CA1822 // Mark member as static
public Result MapProcessCodeMemory(int handle, ulong dst, ulong src, ulong size)
{
if (!PageAligned(dst) || !PageAligned(src))
@@ -1684,8 +1722,10 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return targetProcess.MemoryManager.MapProcessCodeMemory(dst, src, size);
}
+#pragma warning restore CA1822
[Svc(0x78)]
+#pragma warning disable CA1822 // Mark member as static
public Result UnmapProcessCodeMemory(int handle, ulong dst, ulong src, ulong size)
{
if (!PageAligned(dst) || !PageAligned(src))
@@ -1722,6 +1762,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return targetProcess.MemoryManager.UnmapProcessCodeMemory(dst, src, size);
}
+#pragma warning restore CA1822
private static bool PageAligned(ulong address)
{
@@ -1731,6 +1772,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
// System
[Svc(0x7b)]
+#pragma warning disable CA1822 // Mark member as static
public Result TerminateProcess(int handle)
{
KProcess process = KernelStatic.GetCurrentProcess();
@@ -1759,12 +1801,15 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return result;
}
+#pragma warning restore CA1822
[Svc(7)]
+#pragma warning disable CA1822 // Mark member as static
public void ExitProcess()
{
KernelStatic.GetCurrentProcess().TerminateCurrentProcess();
}
+#pragma warning restore CA1822
[Svc(0x11)]
public Result SignalEvent(int handle)
@@ -1857,6 +1902,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
}
[Svc(0x26)]
+#pragma warning disable CA1822 // Mark member as static
public void Break(ulong reason)
{
KThread currentThread = KernelStatic.GetCurrentThread();
@@ -1882,8 +1928,10 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
Logger.Debug?.Print(LogClass.KernelSvc, "Debugger triggered.");
}
}
+#pragma warning restore CA1822
[Svc(0x27)]
+#pragma warning disable CA1822 // Mark member as static
public void OutputDebugString([PointerSized] ulong strPtr, [PointerSized] ulong size)
{
KProcess process = KernelStatic.GetCurrentProcess();
@@ -1892,6 +1940,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
Logger.Warning?.Print(LogClass.KernelSvc, str);
}
+#pragma warning restore CA1822
[Svc(0x29)]
public Result GetInfo(out ulong value, InfoType id, int handle, long subId)
@@ -1937,33 +1986,56 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
switch (id)
{
- case InfoType.CoreMask: value = process.Capabilities.AllowedCpuCoresMask; break;
- case InfoType.PriorityMask: value = process.Capabilities.AllowedThreadPriosMask; break;
+ case InfoType.CoreMask:
+ value = process.Capabilities.AllowedCpuCoresMask;
+ break;
+ case InfoType.PriorityMask:
+ value = process.Capabilities.AllowedThreadPriosMask;
+ break;
- case InfoType.AliasRegionAddress: value = process.MemoryManager.AliasRegionStart; break;
+ case InfoType.AliasRegionAddress:
+ value = process.MemoryManager.AliasRegionStart;
+ break;
case InfoType.AliasRegionSize:
value = (process.MemoryManager.AliasRegionEnd -
- process.MemoryManager.AliasRegionStart); break;
+ process.MemoryManager.AliasRegionStart);
+ break;
- case InfoType.HeapRegionAddress: value = process.MemoryManager.HeapRegionStart; break;
+ case InfoType.HeapRegionAddress:
+ value = process.MemoryManager.HeapRegionStart;
+ break;
case InfoType.HeapRegionSize:
value = (process.MemoryManager.HeapRegionEnd -
- process.MemoryManager.HeapRegionStart); break;
+ process.MemoryManager.HeapRegionStart);
+ break;
- case InfoType.TotalMemorySize: value = process.GetMemoryCapacity(); break;
+ case InfoType.TotalMemorySize:
+ value = process.GetMemoryCapacity();
+ break;
- case InfoType.UsedMemorySize: value = process.GetMemoryUsage(); break;
+ case InfoType.UsedMemorySize:
+ value = process.GetMemoryUsage();
+ break;
- case InfoType.AslrRegionAddress: value = process.MemoryManager.GetAddrSpaceBaseAddr(); break;
+ case InfoType.AslrRegionAddress:
+ value = process.MemoryManager.GetAddrSpaceBaseAddr();
+ break;
- case InfoType.AslrRegionSize: value = process.MemoryManager.GetAddrSpaceSize(); break;
+ case InfoType.AslrRegionSize:
+ value = process.MemoryManager.GetAddrSpaceSize();
+ break;
- case InfoType.StackRegionAddress: value = process.MemoryManager.StackRegionStart; break;
+ case InfoType.StackRegionAddress:
+ value = process.MemoryManager.StackRegionStart;
+ break;
case InfoType.StackRegionSize:
value = (process.MemoryManager.StackRegionEnd -
- process.MemoryManager.StackRegionStart); break;
+ process.MemoryManager.StackRegionStart);
+ break;
- case InfoType.SystemResourceSizeTotal: value = process.PersonalMmHeapPagesCount * KPageTableBase.PageSize; break;
+ case InfoType.SystemResourceSizeTotal:
+ value = process.PersonalMmHeapPagesCount * KPageTableBase.PageSize;
+ break;
case InfoType.SystemResourceSizeUsed:
if (process.PersonalMmHeapPagesCount != 0)
@@ -1973,15 +2045,25 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
break;
- case InfoType.ProgramId: value = process.TitleId; break;
+ case InfoType.ProgramId:
+ value = process.TitleId;
+ break;
- case InfoType.UserExceptionContextAddress: value = process.UserExceptionContextAddress; break;
+ case InfoType.UserExceptionContextAddress:
+ value = process.UserExceptionContextAddress;
+ break;
- case InfoType.TotalNonSystemMemorySize: value = process.GetMemoryCapacityWithoutPersonalMmHeap(); break;
+ case InfoType.TotalNonSystemMemorySize:
+ value = process.GetMemoryCapacityWithoutPersonalMmHeap();
+ break;
- case InfoType.UsedNonSystemMemorySize: value = process.GetMemoryUsageWithoutPersonalMmHeap(); break;
+ case InfoType.UsedNonSystemMemorySize:
+ value = process.GetMemoryUsageWithoutPersonalMmHeap();
+ break;
- case InfoType.IsApplication: value = process.IsApplication ? 1UL : 0UL; break;
+ case InfoType.IsApplication:
+ value = process.IsApplication ? 1UL : 0UL;
+ break;
case InfoType.FreeThreadCount:
if (process.ResourceLimit != null)
@@ -2160,7 +2242,8 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
break;
}
- default: return KernelResult.InvalidEnumValue;
+ default:
+ return KernelResult.InvalidEnumValue;
}
return Result.Success;
@@ -2169,7 +2252,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
[Svc(0x45)]
public Result CreateEvent(out int wEventHandle, out int rEventHandle)
{
- KEvent Event = new KEvent(_context);
+ KEvent Event = new(_context);
KProcess process = KernelStatic.GetCurrentProcess();
@@ -2269,7 +2352,9 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
switch (id)
{
// Memory region capacity.
- case 0: value = (long)region.Size; break;
+ case 0:
+ value = (long)region.Size;
+ break;
// Memory region free space.
case 1:
@@ -2291,8 +2376,12 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
switch (subId)
{
- case 0: value = _context.PrivilegedProcessLowestId; break;
- case 1: value = _context.PrivilegedProcessHighestId; break;
+ case 0:
+ value = _context.PrivilegedProcessLowestId;
+ break;
+ case 1:
+ value = _context.PrivilegedProcessHighestId;
+ break;
}
}
@@ -2300,6 +2389,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
}
[Svc(0x30)]
+#pragma warning disable CA1822 // Mark member as static
public Result GetResourceLimitLimitValue(out long limitValue, int handle, LimitableResource resource)
{
limitValue = 0;
@@ -2320,8 +2410,10 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return Result.Success;
}
+#pragma warning restore CA1822
[Svc(0x31)]
+#pragma warning disable CA1822 // Mark member as static
public Result GetResourceLimitCurrentValue(out long limitValue, int handle, LimitableResource resource)
{
limitValue = 0;
@@ -2342,8 +2434,10 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return Result.Success;
}
+#pragma warning restore CA1822
[Svc(0x37)]
+#pragma warning disable CA1822 // Mark member as static
public Result GetResourceLimitPeakValue(out long peak, int handle, LimitableResource resource)
{
peak = 0;
@@ -2364,11 +2458,12 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return Result.Success;
}
+#pragma warning restore CA1822
[Svc(0x7d)]
public Result CreateResourceLimit(out int handle)
{
- KResourceLimit limit = new KResourceLimit(_context);
+ KResourceLimit limit = new(_context);
KProcess process = KernelStatic.GetCurrentProcess();
@@ -2376,6 +2471,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
}
[Svc(0x7e)]
+#pragma warning disable CA1822 // Mark member as static
public Result SetResourceLimitLimitValue(int handle, LimitableResource resource, long limitValue)
{
if (resource >= LimitableResource.Count)
@@ -2392,6 +2488,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return resourceLimit.SetLimitValue(resource, limitValue);
}
+#pragma warning restore CA1822
// Thread
@@ -2443,7 +2540,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return KernelResult.ResLimitExceeded;
}
- KThread thread = new KThread(_context);
+ KThread thread = new(_context);
Result result = currentProcess.InitializeThread(
thread,
@@ -2471,6 +2568,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
}
[Svc(9)]
+#pragma warning disable CA1822 // Mark member as static
public Result StartThread(int handle)
{
KProcess process = KernelStatic.GetCurrentProcess();
@@ -2497,14 +2595,17 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return KernelResult.InvalidHandle;
}
}
+#pragma warning restore CA1822
[Svc(0xa)]
+#pragma warning disable CA1822 // Mark member as static
public void ExitThread()
{
KThread currentThread = KernelStatic.GetCurrentThread();
currentThread.Exit();
}
+#pragma warning restore CA1822
[Svc(0xb)]
public void SleepThread(long timeout)
@@ -2513,9 +2614,15 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
{
switch (timeout)
{
- case 0: KScheduler.Yield(_context); break;
- case -1: KScheduler.YieldWithLoadBalancing(_context); break;
- case -2: KScheduler.YieldToAnyThread(_context); break;
+ case 0:
+ KScheduler.Yield(_context);
+ break;
+ case -1:
+ KScheduler.YieldWithLoadBalancing(_context);
+ break;
+ case -2:
+ KScheduler.YieldToAnyThread(_context);
+ break;
}
}
else
@@ -2525,6 +2632,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
}
[Svc(0xc)]
+#pragma warning disable CA1822 // Mark member as static
public Result GetThreadPriority(out int priority, int handle)
{
KProcess process = KernelStatic.GetCurrentProcess();
@@ -2544,8 +2652,10 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return KernelResult.InvalidHandle;
}
}
+#pragma warning restore CA1822
[Svc(0xd)]
+#pragma warning disable CA1822 // Mark member as static
public Result SetThreadPriority(int handle, int priority)
{
// TODO: NPDM check.
@@ -2563,8 +2673,10 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return Result.Success;
}
+#pragma warning restore CA1822
[Svc(0xe)]
+#pragma warning disable CA1822 // Mark member as static
public Result GetThreadCoreMask(out int preferredCore, out ulong affinityMask, int handle)
{
KProcess process = KernelStatic.GetCurrentProcess();
@@ -2586,8 +2698,10 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return KernelResult.InvalidHandle;
}
}
+#pragma warning restore CA1822
[Svc(0xf)]
+#pragma warning disable CA1822 // Mark member as static
public Result SetThreadCoreMask(int handle, int preferredCore, ulong affinityMask)
{
KProcess currentProcess = KernelStatic.GetCurrentProcess();
@@ -2635,14 +2749,18 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return thread.SetCoreAndAffinityMask(preferredCore, affinityMask);
}
+#pragma warning restore CA1822
[Svc(0x10)]
+#pragma warning disable CA1822 // Mark member as static
public int GetCurrentProcessorNumber()
{
return KernelStatic.GetCurrentThread().CurrentCore;
}
+#pragma warning restore CA1822
[Svc(0x25)]
+#pragma warning disable CA1822 // Mark member as static
public Result GetThreadId(out ulong threadUid, int handle)
{
KProcess process = KernelStatic.GetCurrentProcess();
@@ -2662,8 +2780,10 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return KernelResult.InvalidHandle;
}
}
+#pragma warning restore CA1822
[Svc(0x32)]
+#pragma warning disable CA1822 // Mark member as static
public Result SetThreadActivity(int handle, bool pause)
{
KProcess process = KernelStatic.GetCurrentProcess();
@@ -2687,8 +2807,10 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return thread.SetActivity(pause);
}
+#pragma warning restore CA1822
[Svc(0x33)]
+#pragma warning disable CA1822 // Mark member as static
public Result GetThreadContext3([PointerSized] ulong address, int handle)
{
KProcess currentProcess = KernelStatic.GetCurrentProcess();
@@ -2722,6 +2844,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return result;
}
+#pragma warning restore CA1822
// Thread synchronization
@@ -2758,7 +2881,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return KernelResult.UserCopyFailed;
}
- Span<int> handles = new Span<int>(currentThread.WaitSyncHandles).Slice(0, handlesCount);
+ Span<int> handles = new Span<int>(currentThread.WaitSyncHandles)[..handlesCount];
if (!KernelTransfer.UserToKernelArray(handlesPtr, handles))
{
@@ -2782,7 +2905,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
KThread currentThread = KernelStatic.GetCurrentThread();
- var syncObjs = new Span<KSynchronizationObject>(currentThread.WaitSyncObjects).Slice(0, handles.Length);
+ var syncObjs = new Span<KSynchronizationObject>(currentThread.WaitSyncObjects)[..handles.Length];
if (handles.Length != 0)
{
@@ -2854,6 +2977,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
}
[Svc(0x1a)]
+#pragma warning disable CA1822 // Mark member as static
public Result ArbitrateLock(int ownerHandle, [PointerSized] ulong mutexAddress, int requesterHandle)
{
if (IsPointingInsideKernel(mutexAddress))
@@ -2870,8 +2994,10 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return currentProcess.AddressArbiter.ArbitrateLock(ownerHandle, mutexAddress, requesterHandle);
}
+#pragma warning restore CA1822
[Svc(0x1b)]
+#pragma warning disable CA1822 // Mark member as static
public Result ArbitrateUnlock([PointerSized] ulong mutexAddress)
{
if (IsPointingInsideKernel(mutexAddress))
@@ -2888,8 +3014,10 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return currentProcess.AddressArbiter.ArbitrateUnlock(mutexAddress);
}
+#pragma warning restore CA1822
[Svc(0x1c)]
+#pragma warning disable CA1822 // Mark member as static
public Result WaitProcessWideKeyAtomic(
[PointerSized] ulong mutexAddress,
[PointerSized] ulong condVarAddress,
@@ -2919,8 +3047,10 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
handle,
timeout);
}
+#pragma warning restore CA1822
[Svc(0x1d)]
+#pragma warning disable CA1822 // Mark member as static
public Result SignalProcessWideKey([PointerSized] ulong address, int count)
{
KProcess currentProcess = KernelStatic.GetCurrentProcess();
@@ -2929,8 +3059,10 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return Result.Success;
}
+#pragma warning restore CA1822
[Svc(0x34)]
+#pragma warning disable CA1822 // Mark member as static
public Result WaitForAddress([PointerSized] ulong address, ArbitrationType type, int value, long timeout)
{
if (IsPointingInsideKernel(address))
@@ -2961,8 +3093,10 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
_ => KernelResult.InvalidEnumValue,
};
}
+#pragma warning restore CA1822
[Svc(0x35)]
+#pragma warning disable CA1822 // Mark member as static
public Result SignalToAddress([PointerSized] ulong address, SignalType type, int value, int count)
{
if (IsPointingInsideKernel(address))
@@ -2985,17 +3119,20 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
=> currentProcess.AddressArbiter.SignalAndIncrementIfEqual(address, value, count),
SignalType.SignalAndModifyIfEqual
=> currentProcess.AddressArbiter.SignalAndModifyIfEqual(address, value, count),
- _ => KernelResult.InvalidEnumValue
+ _ => KernelResult.InvalidEnumValue,
};
}
+#pragma warning restore CA1822
[Svc(0x36)]
+#pragma warning disable CA1822 // Mark member as static
public Result SynchronizePreemptionState()
{
KernelStatic.GetCurrentThread().SynchronizePreemptionState();
return Result.Success;
}
+#pragma warning restore CA1822
private static bool IsPointingInsideKernel(ulong address)
{
@@ -3007,4 +3144,4 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
return (address & 3) != 0;
}
}
-} \ No newline at end of file
+}