[Ryujinx.HLE] Address dotnet-format issues (#5380)
* dotnet format style --severity info Some changes were manually reverted. * dotnet format analyzers --serverity info Some changes have been minimally adapted. * Restore a few unused methods and variables * Silence dotnet format IDE0060 warnings * Silence dotnet format IDE0052 warnings * Address or silence dotnet format IDE1006 warnings * Address dotnet format CA1816 warnings * Address or silence dotnet format CA2208 warnings * Address or silence dotnet format CA1806 and a few CA1854 warnings * Address dotnet format CA2211 warnings * Address dotnet format CA1822 warnings * Address or silence dotnet format CA1069 warnings * Make dotnet format succeed in style mode * Address or silence dotnet format CA2211 warnings * Address review comments * Address dotnet format CA2208 warnings properly * Make ProcessResult readonly * Address most dotnet format whitespace warnings * Apply dotnet format whitespace formatting A few of them have been manually reverted and the corresponding warning was silenced * Add previously silenced warnings back I have no clue how these disappeared * Revert formatting changes for while and for-loops * Format if-blocks correctly * Run dotnet format style after rebase * Run dotnet format whitespace after rebase * Run dotnet format style after rebase * Run dotnet format analyzers after rebase * Run dotnet format after rebase and remove unused usings - analyzers - style - whitespace * Disable 'prefer switch expression' rule * Add comments to disabled warnings * Fix a few disabled warnings * Fix naming rule violation, Convert shader properties to auto-property and convert values to const * Simplify properties and array initialization, Use const when possible, Remove trailing commas * Start working on disabled warnings * Fix and silence a few dotnet-format warnings again * Run dotnet format after rebase * Use using declaration instead of block syntax * Address IDE0251 warnings * Address a few disabled IDE0060 warnings * Silence IDE0060 in .editorconfig * Revert "Simplify properties and array initialization, Use const when possible, Remove trailing commas" This reverts commit 9462e4136c0a2100dc28b20cf9542e06790aa67e. * dotnet format whitespace after rebase * First dotnet format pass * Fix naming rule violations * Fix typo * Add trailing commas, use targeted new and use array initializer * Fix build issues * Fix remaining build issues * Remove SuppressMessage for CA1069 where possible * Address dotnet format issues * Address formatting issues Co-authored-by: Ac_K <acoustik666@gmail.com> * Add GetHashCode implementation for RenderingSurfaceInfo * Explicitly silence CA1822 for every affected method in Syscall * Address formatting issues in Demangler.cs * Address review feedback Co-authored-by: Ac_K <acoustik666@gmail.com> * Revert marking service methods as static * Next dotnet format pass * Address review feedback --------- Co-authored-by: Ac_K <acoustik666@gmail.com>
This commit is contained in:
parent
fec8291c17
commit
326749498b
1015 changed files with 8173 additions and 7615 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue