aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.HLE/HOS/Kernel
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.HLE/HOS/Kernel')
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Common/IKFutureSchedulerObject.cs2
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Common/KAutoObject.cs2
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Common/KResourceLimit.cs8
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Common/KSynchronizationObject.cs2
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Common/KSystemControl.cs8
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Common/KTimeManager.cs8
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Common/KernelInit.cs26
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Common/KernelTransfer.cs4
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Common/LimitableResource.cs12
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Common/MemoryArrange.cs4
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Common/MemorySize.cs (renamed from src/Ryujinx.HLE/HOS/Kernel/Common/MemroySize.cs)4
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Common/MersenneTwister.cs16
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Ipc/ChannelState.cs4
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Ipc/KBufferDescriptor.cs14
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Ipc/KBufferDescriptorTable.cs40
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Ipc/KClientPort.cs10
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Ipc/KClientSession.cs12
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Ipc/KLightClientSession.cs4
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Ipc/KLightServerSession.cs4
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Ipc/KLightSession.cs2
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Ipc/KPort.cs8
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Ipc/KServerPort.cs6
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Ipc/KServerSession.cs147
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Ipc/KSession.cs4
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Ipc/KSessionRequest.cs12
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/KernelConstants.cs2
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/KernelStatic.cs16
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Memory/AddressSpaceType.cs8
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Memory/DramMemoryMap.cs4
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Memory/KCodeMemory.cs2
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryBlock.cs2
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryBlockSlabManager.cs4
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryInfo.cs38
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryRegionManager.cs2
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Memory/KPageBitmap.cs4
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Memory/KPageHeap.cs26
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Memory/KPageList.cs10
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Memory/KPageNode.cs4
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTable.cs10
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs90
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Memory/KScopedPageList.cs2
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Memory/KSharedMemory.cs2
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Memory/KSlabHeap.cs4
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Memory/KTransferMemory.cs2
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Memory/MemoryAttribute.cs12
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Memory/MemoryPermission.cs16
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Memory/MemoryRegion.cs8
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Memory/MemoryState.cs78
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Process/CapabilityExtensions.cs2
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Process/CapabilityType.cs22
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Process/HleProcessDebugger.cs46
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Process/KContextIdManager.cs10
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Process/KHandleEntry.cs6
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Process/KHandleTable.cs27
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs41
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs236
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Process/KTlsPageInfo.cs2
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Process/KTlsPageManager.cs8
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Process/ProcessCreationFlags.cs4
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Process/ProcessCreationInfo.cs2
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Process/ProcessExecutionContext.cs5
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Process/ProcessState.cs16
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Process/ProcessTamperInfo.cs12
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/CodeMemoryOperation.cs4
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/InfoType.cs2
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/MemoryInfo.cs8
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall.cs223
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/SyscallHandler.cs2
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/ThreadContext.cs6
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Threading/ArbitrationType.cs6
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Threading/KAddressArbiter.cs42
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Threading/KConditionVariable.cs2
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Threading/KCriticalSection.cs2
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Threading/KEvent.cs4
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Threading/KPriorityQueue.cs4
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Threading/KReadableEvent.cs7
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Threading/KScheduler.cs24
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Threading/KSynchronization.cs10
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs8
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Threading/KWritableEvent.cs2
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Threading/SignalType.cs4
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Threading/ThreadSchedState.cs22
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Threading/ThreadType.cs4
83 files changed, 833 insertions, 701 deletions
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Common/IKFutureSchedulerObject.cs b/src/Ryujinx.HLE/HOS/Kernel/Common/IKFutureSchedulerObject.cs
index 473683ff..1550c9bf 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Common/IKFutureSchedulerObject.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Common/IKFutureSchedulerObject.cs
@@ -4,4 +4,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
{
void TimeUp();
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Common/KAutoObject.cs b/src/Ryujinx.HLE/HOS/Kernel/Common/KAutoObject.cs
index 424bf788..e5dd3d17 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Common/KAutoObject.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Common/KAutoObject.cs
@@ -70,4 +70,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
{
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Common/KResourceLimit.cs b/src/Ryujinx.HLE/HOS/Kernel/Common/KResourceLimit.cs
index b1a602f1..3f16f8c2 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Common/KResourceLimit.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Common/KResourceLimit.cs
@@ -22,10 +22,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
public KResourceLimit(KernelContext context) : base(context)
{
- _current = new long[(int)LimitableResource.Count];
- _limit = new long[(int)LimitableResource.Count];
+ _current = new long[(int)LimitableResource.Count];
+ _limit = new long[(int)LimitableResource.Count];
_current2 = new long[(int)LimitableResource.Count];
- _peak = new long[(int)LimitableResource.Count];
+ _peak = new long[(int)LimitableResource.Count];
_lock = new object();
@@ -185,4 +185,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
return (int)resource;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Common/KSynchronizationObject.cs b/src/Ryujinx.HLE/HOS/Kernel/Common/KSynchronizationObject.cs
index ddc0069d..7e725e74 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Common/KSynchronizationObject.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Common/KSynchronizationObject.cs
@@ -32,4 +32,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
return false;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Common/KSystemControl.cs b/src/Ryujinx.HLE/HOS/Kernel/Common/KSystemControl.cs
index 8a727c30..10f0b6f7 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Common/KSystemControl.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Common/KSystemControl.cs
@@ -30,7 +30,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
MemoryArrange.MemoryArrange4GiBAppletDev => 2048 * MiB,
MemoryArrange.MemoryArrange6GiB or
MemoryArrange.MemoryArrange8GiB => 4916 * MiB,
- _ => throw new ArgumentException($"Invalid memory arrange \"{arrange}\".")
+ _ => throw new ArgumentException($"Invalid memory arrange \"{arrange}\"."),
};
}
@@ -44,7 +44,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
MemoryArrange.MemoryArrange6GiB => 562 * MiB,
MemoryArrange.MemoryArrange6GiBAppletDev or
MemoryArrange.MemoryArrange8GiB => 2193 * MiB,
- _ => throw new ArgumentException($"Invalid memory arrange \"{arrange}\".")
+ _ => throw new ArgumentException($"Invalid memory arrange \"{arrange}\"."),
};
}
@@ -71,8 +71,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
MemorySize.MemorySize4GiB => 4 * GiB,
MemorySize.MemorySize6GiB => 6 * GiB,
MemorySize.MemorySize8GiB => 8 * GiB,
- _ => throw new ArgumentException($"Invalid memory size \"{size}\".")
+ _ => throw new ArgumentException($"Invalid memory size \"{size}\"."),
};
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Common/KTimeManager.cs b/src/Ryujinx.HLE/HOS/Kernel/Common/KTimeManager.cs
index c0cd9ce9..499bc2c6 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Common/KTimeManager.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Common/KTimeManager.cs
@@ -36,9 +36,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
_waitingObjects = new List<WaitingObject>();
_keepRunning = true;
- Thread work = new Thread(WaitAndCheckScheduledObjects)
+ Thread work = new(WaitAndCheckScheduledObjects)
{
- Name = "HLE.TimeManager"
+ Name = "HLE.TimeManager",
};
work.Start();
@@ -83,7 +83,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
private void WaitAndCheckScheduledObjects()
{
- SpinWait spinWait = new SpinWait();
+ SpinWait spinWait = new();
WaitingObject next;
using (_waitEvent = new AutoResetEvent(false))
@@ -215,4 +215,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
_waitEvent?.Set();
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Common/KernelInit.cs b/src/Ryujinx.HLE/HOS/Kernel/Common/KernelInit.cs
index efa2a480..8021d8da 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Common/KernelInit.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Common/KernelInit.cs
@@ -9,20 +9,20 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
private readonly struct MemoryRegion
{
public ulong Address { get; }
- public ulong Size { get; }
+ public ulong Size { get; }
public ulong EndAddress => Address + Size;
public MemoryRegion(ulong address, ulong size)
{
Address = address;
- Size = size;
+ Size = size;
}
}
public static void InitializeResourceLimit(KResourceLimit resourceLimit, MemorySize size)
{
- void EnsureSuccess(Result result)
+ static void EnsureSuccess(Result result)
{
if (result != Result.Success)
{
@@ -32,11 +32,11 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
ulong ramSize = KSystemControl.GetDramSize(size);
- EnsureSuccess(resourceLimit.SetLimitValue(LimitableResource.Memory, (long)ramSize));
- EnsureSuccess(resourceLimit.SetLimitValue(LimitableResource.Thread, 800));
- EnsureSuccess(resourceLimit.SetLimitValue(LimitableResource.Event, 700));
+ EnsureSuccess(resourceLimit.SetLimitValue(LimitableResource.Memory, (long)ramSize));
+ EnsureSuccess(resourceLimit.SetLimitValue(LimitableResource.Thread, 800));
+ EnsureSuccess(resourceLimit.SetLimitValue(LimitableResource.Event, 700));
EnsureSuccess(resourceLimit.SetLimitValue(LimitableResource.TransferMemory, 200));
- EnsureSuccess(resourceLimit.SetLimitValue(LimitableResource.Session, 900));
+ EnsureSuccess(resourceLimit.SetLimitValue(LimitableResource.Session, 900));
if (!resourceLimit.Reserve(LimitableResource.Memory, 0) ||
!resourceLimit.Reserve(LimitableResource.Memory, 0x60000))
@@ -47,9 +47,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
public static KMemoryRegionManager[] GetMemoryRegions(MemorySize size, MemoryArrange arrange)
{
- ulong poolEnd = KSystemControl.GetDramEndAddress(size);
+ ulong poolEnd = KSystemControl.GetDramEndAddress(size);
ulong applicationPoolSize = KSystemControl.GetApplicationPoolSize(arrange);
- ulong appletPoolSize = KSystemControl.GetAppletPoolSize(arrange);
+ ulong appletPoolSize = KSystemControl.GetAppletPoolSize(arrange);
MemoryRegion servicePool;
MemoryRegion nvServicesPool;
@@ -63,7 +63,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
ulong nvServicesPoolEnd = applicationPool.Address - appletPoolSize;
nvServicesPool = new MemoryRegion(nvServicesPoolEnd - nvServicesPoolSize, nvServicesPoolSize);
- appletPool = new MemoryRegion(nvServicesPoolEnd, appletPoolSize);
+ appletPool = new MemoryRegion(nvServicesPoolEnd, appletPoolSize);
// Note: There is an extra region used by the kernel, however
// since we are doing HLE we are not going to use that memory, so give all
@@ -72,12 +72,12 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
servicePool = new MemoryRegion(DramMemoryMap.SlabHeapEnd, servicePoolSize);
- return new KMemoryRegionManager[]
+ return new[]
{
GetMemoryRegion(applicationPool),
GetMemoryRegion(appletPool),
GetMemoryRegion(servicePool),
- GetMemoryRegion(nvServicesPool)
+ GetMemoryRegion(nvServicesPool),
};
}
@@ -86,4 +86,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
return new KMemoryRegionManager(region.Address, region.Size, region.EndAddress);
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Common/KernelTransfer.cs b/src/Ryujinx.HLE/HOS/Kernel/Common/KernelTransfer.cs
index cbc276c5..082d25ff 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Common/KernelTransfer.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Common/KernelTransfer.cs
@@ -56,7 +56,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
return false;
}
- public static bool KernelToUser<T>(ulong address, T value) where T: unmanaged
+ public static bool KernelToUser<T>(ulong address, T value) where T : unmanaged
{
KProcess currentProcess = KernelStatic.GetCurrentProcess();
@@ -70,4 +70,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
return false;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Common/LimitableResource.cs b/src/Ryujinx.HLE/HOS/Kernel/Common/LimitableResource.cs
index 2e6a3e45..8655e61c 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Common/LimitableResource.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Common/LimitableResource.cs
@@ -2,12 +2,12 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
{
enum LimitableResource : byte
{
- Memory = 0,
- Thread = 1,
- Event = 2,
+ Memory = 0,
+ Thread = 1,
+ Event = 2,
TransferMemory = 3,
- Session = 4,
+ Session = 4,
- Count = 5
+ Count = 5,
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Common/MemoryArrange.cs b/src/Ryujinx.HLE/HOS/Kernel/Common/MemoryArrange.cs
index d2bcfd62..2c88d8b3 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Common/MemoryArrange.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Common/MemoryArrange.cs
@@ -7,6 +7,6 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
MemoryArrange4GiBSystemDev,
MemoryArrange6GiB,
MemoryArrange6GiBAppletDev,
- MemoryArrange8GiB
+ MemoryArrange8GiB,
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Common/MemroySize.cs b/src/Ryujinx.HLE/HOS/Kernel/Common/MemorySize.cs
index 159385b6..7cc34a72 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Common/MemroySize.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Common/MemorySize.cs
@@ -4,6 +4,6 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
{
MemorySize4GiB = 0,
MemorySize6GiB = 1,
- MemorySize8GiB = 2
+ MemorySize8GiB = 2,
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Common/MersenneTwister.cs b/src/Ryujinx.HLE/HOS/Kernel/Common/MersenneTwister.cs
index 4c99f425..9f078b10 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Common/MersenneTwister.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Common/MersenneTwister.cs
@@ -5,7 +5,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
class MersenneTwister
{
private int _index;
- private uint[] _mt;
+ private readonly uint[] _mt;
public MersenneTwister(uint seed)
{
@@ -46,12 +46,12 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
// If Range is already power of 2, subtract one to use log2(Range) directly.
int rangeLog2 = nextRangeLog2 - (BitOperations.IsPow2(range) ? 1 : 0);
- int parts = rangeLog2 > 32 ? 2 : 1;
+ int parts = rangeLog2 > 32 ? 2 : 1;
int bitsPerPart = rangeLog2 / parts;
int fullParts = parts - (rangeLog2 - parts * bitsPerPart);
- uint mask = 0xffffffffu >> (32 - bitsPerPart);
+ uint mask = 0xffffffffu >> (32 - bitsPerPart);
uint maskPlus1 = 0xffffffffu >> (31 - bitsPerPart);
long randomNumber;
@@ -66,9 +66,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
}
private long GenRandomNumber(
- int parts,
- int fullParts,
- int bitsPerPart,
+ int parts,
+ int fullParts,
+ int bitsPerPart,
uint mask,
uint maskPlus1)
{
@@ -79,13 +79,13 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
for (; part < fullParts; part++)
{
randomNumber <<= bitsPerPart;
- randomNumber |= GenRandomNumber() & mask;
+ randomNumber |= GenRandomNumber() & mask;
}
for (; part < parts; part++)
{
randomNumber <<= bitsPerPart + 1;
- randomNumber |= GenRandomNumber() & maskPlus1;
+ randomNumber |= GenRandomNumber() & maskPlus1;
}
return randomNumber;
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Ipc/ChannelState.cs b/src/Ryujinx.HLE/HOS/Kernel/Ipc/ChannelState.cs
index 4827384e..3a943f94 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Ipc/ChannelState.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Ipc/ChannelState.cs
@@ -5,6 +5,6 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
NotInitialized,
Open,
ClientDisconnected,
- ServerDisconnected
+ ServerDisconnected,
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KBufferDescriptor.cs b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KBufferDescriptor.cs
index e28244d4..5fa9cbe7 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KBufferDescriptor.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KBufferDescriptor.cs
@@ -4,17 +4,17 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
{
class KBufferDescriptor
{
- public ulong ClientAddress { get; }
- public ulong ServerAddress { get; }
- public ulong Size { get; }
- public MemoryState State { get; }
+ public ulong ClientAddress { get; }
+ public ulong ServerAddress { get; }
+ public ulong Size { get; }
+ public MemoryState State { get; }
public KBufferDescriptor(ulong src, ulong dst, ulong size, MemoryState state)
{
ClientAddress = src;
ServerAddress = dst;
- Size = size;
- State = state;
+ Size = size;
+ State = state;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KBufferDescriptorTable.cs b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KBufferDescriptorTable.cs
index 593d2c9d..373899b7 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KBufferDescriptorTable.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KBufferDescriptorTable.cs
@@ -9,14 +9,14 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
{
private const int MaxInternalBuffersCount = 8;
- private List<KBufferDescriptor> _sendBufferDescriptors;
- private List<KBufferDescriptor> _receiveBufferDescriptors;
- private List<KBufferDescriptor> _exchangeBufferDescriptors;
+ private readonly List<KBufferDescriptor> _sendBufferDescriptors;
+ private readonly List<KBufferDescriptor> _receiveBufferDescriptors;
+ private readonly List<KBufferDescriptor> _exchangeBufferDescriptors;
public KBufferDescriptorTable()
{
- _sendBufferDescriptors = new List<KBufferDescriptor>(MaxInternalBuffersCount);
- _receiveBufferDescriptors = new List<KBufferDescriptor>(MaxInternalBuffersCount);
+ _sendBufferDescriptors = new List<KBufferDescriptor>(MaxInternalBuffersCount);
+ _receiveBufferDescriptors = new List<KBufferDescriptor>(MaxInternalBuffersCount);
_exchangeBufferDescriptors = new List<KBufferDescriptor>(MaxInternalBuffersCount);
}
@@ -35,7 +35,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
return Add(_exchangeBufferDescriptors, src, dst, size, state);
}
- private Result Add(List<KBufferDescriptor> list, ulong src, ulong dst, ulong size, MemoryState state)
+ private static Result Add(List<KBufferDescriptor> list, ulong src, ulong dst, ulong size, MemoryState state)
{
if (list.Count < MaxInternalBuffersCount)
{
@@ -59,7 +59,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
return CopyToClient(memoryManager, _exchangeBufferDescriptors);
}
- private Result CopyToClient(KPageTableBase memoryManager, List<KBufferDescriptor> list)
+ private static Result CopyToClient(KPageTableBase memoryManager, List<KBufferDescriptor> list)
{
foreach (KBufferDescriptor desc in list)
{
@@ -67,11 +67,17 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
switch (desc.State)
{
- case MemoryState.IpcBuffer0: stateMask = MemoryState.IpcSendAllowedType0; break;
- case MemoryState.IpcBuffer1: stateMask = MemoryState.IpcSendAllowedType1; break;
- case MemoryState.IpcBuffer3: stateMask = MemoryState.IpcSendAllowedType3; break;
-
- default: return KernelResult.InvalidCombination;
+ case MemoryState.IpcBuffer0:
+ stateMask = MemoryState.IpcSendAllowedType0;
+ break;
+ case MemoryState.IpcBuffer1:
+ stateMask = MemoryState.IpcSendAllowedType1;
+ break;
+ case MemoryState.IpcBuffer3:
+ stateMask = MemoryState.IpcSendAllowedType3;
+ break;
+ default:
+ return KernelResult.InvalidCombination;
}
MemoryAttribute attributeMask = MemoryAttribute.Borrowed | MemoryAttribute.Uncached;
@@ -82,7 +88,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
}
ulong clientAddrTruncated = BitUtils.AlignDown<ulong>(desc.ClientAddress, KPageTableBase.PageSize);
- ulong clientAddrRounded = BitUtils.AlignUp<ulong>(desc.ClientAddress, KPageTableBase.PageSize);
+ ulong clientAddrRounded = BitUtils.AlignUp<ulong>(desc.ClientAddress, KPageTableBase.PageSize);
// Check if address is not aligned, in this case we need to perform 2 copies.
if (clientAddrTruncated != clientAddrRounded)
@@ -114,7 +120,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
ulong serverEndAddr = desc.ServerAddress + desc.Size;
ulong clientEndAddrTruncated = BitUtils.AlignDown<ulong>(clientEndAddr, (ulong)KPageTableBase.PageSize);
- ulong clientEndAddrRounded = BitUtils.AlignUp<ulong>(clientEndAddr, KPageTableBase.PageSize);
+ ulong clientEndAddrRounded = BitUtils.AlignUp<ulong>(clientEndAddr, KPageTableBase.PageSize);
ulong serverEndAddrTruncated = BitUtils.AlignDown<ulong>(serverEndAddr, (ulong)KPageTableBase.PageSize);
if (clientEndAddrTruncated < clientEndAddrRounded &&
@@ -159,7 +165,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
return UnmapServer(memoryManager, _exchangeBufferDescriptors);
}
- private Result UnmapServer(KPageTableBase memoryManager, List<KBufferDescriptor> list)
+ private static Result UnmapServer(KPageTableBase memoryManager, List<KBufferDescriptor> list)
{
foreach (KBufferDescriptor descriptor in list)
{
@@ -196,7 +202,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
return RestoreClient(memoryManager, _exchangeBufferDescriptors);
}
- private Result RestoreClient(KPageTableBase memoryManager, List<KBufferDescriptor> list)
+ private static Result RestoreClient(KPageTableBase memoryManager, List<KBufferDescriptor> list)
{
foreach (KBufferDescriptor descriptor in list)
{
@@ -214,4 +220,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
return Result.Success;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KClientPort.cs b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KClientPort.cs
index eb7c5a41..6355fb6e 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KClientPort.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KClientPort.cs
@@ -17,7 +17,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
public KClientPort(KernelContext context, KPort parent, int maxSessions) : base(context)
{
_maxSessions = maxSessions;
- _parent = parent;
+ _parent = parent;
}
public Result Connect(out KClientSession clientSession)
@@ -39,7 +39,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
return KernelResult.SessionCountExceeded;
}
- KSession session = new KSession(KernelContext, this);
+ KSession session = new(KernelContext, this);
Result result = _parent.EnqueueIncomingSession(session.ServerSession);
@@ -75,7 +75,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
return KernelResult.SessionCountExceeded;
}
- KLightSession session = new KLightSession(KernelContext);
+ KLightSession session = new(KernelContext);
Result result = _parent.EnqueueIncomingLightSession(session.ServerSession);
@@ -133,7 +133,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
{
KAutoObject foundObj = FindNamedObject(context, name);
- if (!(foundObj is KClientPort))
+ if (foundObj is not KClientPort)
{
return KernelResult.NotFound;
}
@@ -141,4 +141,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
return KAutoObject.RemoveName(context, name);
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KClientSession.cs b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KClientSession.cs
index a24bcc31..385f0902 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KClientSession.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KClientSession.cs
@@ -9,7 +9,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
{
public KProcess CreatorProcess { get; }
- private KSession _parent;
+ private readonly KSession _parent;
public ChannelState State { get; set; }
@@ -17,7 +17,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
public KClientSession(KernelContext context, KSession parent, KClientPort parentPort) : base(context)
{
- _parent = parent;
+ _parent = parent;
ParentPort = parentPort;
parentPort?.IncrementReferenceCount();
@@ -32,11 +32,11 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
{
KThread currentThread = KernelStatic.GetCurrentThread();
- KSessionRequest request = new KSessionRequest(currentThread, customCmdBuffAddr, customCmdBuffSize);
+ KSessionRequest request = new(currentThread, customCmdBuffAddr, customCmdBuffSize);
KernelContext.CriticalSection.Enter();
- currentThread.SignaledObj = null;
+ currentThread.SignaledObj = null;
currentThread.ObjSyncResult = Result.Success;
Result result = _parent.ServerSession.EnqueueRequest(request);
@@ -55,7 +55,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
{
KThread currentThread = KernelStatic.GetCurrentThread();
- KSessionRequest request = new KSessionRequest(currentThread, customCmdBuffAddr, customCmdBuffSize, asyncEvent);
+ KSessionRequest request = new(currentThread, customCmdBuffAddr, customCmdBuffSize, asyncEvent);
KernelContext.CriticalSection.Enter();
@@ -81,4 +81,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
_parent.DecrementReferenceCount();
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KLightClientSession.cs b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KLightClientSession.cs
index 27a9732b..1ff37282 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KLightClientSession.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KLightClientSession.cs
@@ -4,11 +4,13 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
{
class KLightClientSession : KAutoObject
{
+#pragma warning disable IDE0052 // Remove unread private member
private readonly KLightSession _parent;
+#pragma warning restore IDE0052
public KLightClientSession(KernelContext context, KLightSession parent) : base(context)
{
_parent = parent;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KLightServerSession.cs b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KLightServerSession.cs
index 0edbba6c..c355409e 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KLightServerSession.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KLightServerSession.cs
@@ -4,11 +4,13 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
{
class KLightServerSession : KAutoObject
{
+#pragma warning disable IDE0052 // Remove unread private member
private readonly KLightSession _parent;
+#pragma warning restore IDE0052
public KLightServerSession(KernelContext context, KLightSession parent) : base(context)
{
_parent = parent;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KLightSession.cs b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KLightSession.cs
index 3abb1ab0..16158a70 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KLightSession.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KLightSession.cs
@@ -13,4 +13,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
ClientSession = new KLightClientSession(context, this);
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KPort.cs b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KPort.cs
index 93f0f34c..84ebcbc3 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KPort.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KPort.cs
@@ -8,9 +8,11 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
public KServerPort ServerPort { get; }
public KClientPort ClientPort { get; }
- private string _name;
+#pragma warning disable IDE0052 // Remove unread private member
+ private readonly string _name;
+#pragma warning restore IDE0052
- private ChannelState _state;
+ private readonly ChannelState _state;
public bool IsLight { get; private set; }
@@ -69,4 +71,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
return result;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KServerPort.cs b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KServerPort.cs
index 21a3919c..08efa8d9 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KServerPort.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KServerPort.cs
@@ -5,7 +5,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
{
class KServerPort : KSynchronizationObject
{
- private readonly LinkedList<KServerSession> _incomingConnections;
+ private readonly LinkedList<KServerSession> _incomingConnections;
private readonly LinkedList<KLightServerSession> _lightIncomingConnections;
private readonly KPort _parent;
@@ -16,7 +16,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
{
_parent = parent;
- _incomingConnections = new LinkedList<KServerSession>();
+ _incomingConnections = new LinkedList<KServerSession>();
_lightIncomingConnections = new LinkedList<KLightServerSession>();
}
@@ -84,4 +84,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
}
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KServerSession.cs b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KServerSession.cs
index 86469c03..7e41a3f3 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KServerSession.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KServerSession.cs
@@ -10,19 +10,18 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
{
class KServerSession : KSynchronizationObject
{
- private static readonly MemoryState[] IpcMemoryStates = new MemoryState[]
- {
+ private static readonly MemoryState[] _ipcMemoryStates = {
MemoryState.IpcBuffer3,
MemoryState.IpcBuffer0,
MemoryState.IpcBuffer1,
- (MemoryState)0xfffce5d4 //This is invalid, shouldn't be accessed.
+ (MemoryState)0xfffce5d4, //This is invalid, shouldn't be accessed.
};
private readonly struct Message
{
- public ulong Address { get; }
- public ulong Size { get; }
- public bool IsCustom { get; }
+ public ulong Address { get; }
+ public ulong Size { get; }
+ public bool IsCustom { get; }
public Message(KThread thread, ulong customCmdBuffAddress, ulong customCmdBuffSize)
{
@@ -31,19 +30,20 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
if (IsCustom)
{
Address = customCmdBuffAddress;
- Size = customCmdBuffSize;
+ Size = customCmdBuffSize;
}
else
{
Address = thread.TlsAddress;
- Size = 0x100;
+ Size = 0x100;
}
}
public Message(KSessionRequest request) : this(
request.ClientThread,
request.CustomCmdBuffAddr,
- request.CustomCmdBuffSize) { }
+ request.CustomCmdBuffSize)
+ { }
}
private readonly struct MessageHeader
@@ -52,18 +52,18 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
public uint Word1 { get; }
public uint Word2 { get; }
- public uint PointerBuffersCount { get; }
- public uint SendBuffersCount { get; }
- public uint ReceiveBuffersCount { get; }
+ public uint PointerBuffersCount { get; }
+ public uint SendBuffersCount { get; }
+ public uint ReceiveBuffersCount { get; }
public uint ExchangeBuffersCount { get; }
public uint RawDataSizeInWords { get; }
public uint ReceiveListType { get; }
- public uint MessageSizeInWords { get; }
+ public uint MessageSizeInWords { get; }
public uint ReceiveListOffsetInWords { get; }
- public uint ReceiveListOffset { get; }
+ public uint ReceiveListOffset { get; }
public bool HasHandles { get; }
@@ -101,14 +101,14 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
MoveHandlesCount = 0;
}
- PointerBuffersCount = (word0 >> 16) & 0xf;
- SendBuffersCount = (word0 >> 20) & 0xf;
- ReceiveBuffersCount = (word0 >> 24) & 0xf;
- ExchangeBuffersCount = word0 >> 28;
+ PointerBuffersCount = (word0 >> 16) & 0xf;
+ SendBuffersCount = (word0 >> 20) & 0xf;
+ ReceiveBuffersCount = (word0 >> 24) & 0xf;
+ ExchangeBuffersCount = word0 >> 28;
- uint pointerDescSizeInWords = PointerBuffersCount * 2;
- uint sendDescSizeInWords = SendBuffersCount * 3;
- uint receiveDescSizeInWords = ReceiveBuffersCount * 3;
+ uint pointerDescSizeInWords = PointerBuffersCount * 2;
+ uint sendDescSizeInWords = SendBuffersCount * 3;
+ uint receiveDescSizeInWords = ReceiveBuffersCount * 3;
uint exchangeDescSizeInWords = ExchangeBuffersCount * 3;
RawDataSizeInWords = word1 & 0x3ff;
@@ -119,12 +119,12 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
uint paddingSizeInWords = HasHandles ? 3u : 2u;
- MessageSizeInWords = pointerDescSizeInWords +
- sendDescSizeInWords +
- receiveDescSizeInWords +
+ MessageSizeInWords = pointerDescSizeInWords +
+ sendDescSizeInWords +
+ receiveDescSizeInWords +
exchangeDescSizeInWords +
- RawDataSizeInWords +
- paddingSizeInWords +
+ RawDataSizeInWords +
+ paddingSizeInWords +
handleDescSizeInWords;
if (ReceiveListOffsetInWords == 0)
@@ -140,25 +140,25 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
{
public uint ReceiveIndex { get; }
- public uint BufferSize { get; }
+ public uint BufferSize { get; }
public ulong BufferAddress { get; set; }
public PointerBufferDesc(ulong dword)
{
ReceiveIndex = (uint)dword & 0xf;
- BufferSize = (uint)dword >> 16;
+ BufferSize = (uint)dword >> 16;
- BufferAddress = (dword >> 2) & 0x70;
+ BufferAddress = (dword >> 2) & 0x70;
BufferAddress |= (dword >> 12) & 0xf;
BufferAddress = (BufferAddress << 32) | (dword >> 32);
}
- public ulong Pack()
+ public readonly ulong Pack()
{
ulong dword = (ReceiveIndex & 0xf) | ((BufferSize & 0xffff) << 16);
- dword |= BufferAddress << 32;
+ dword |= BufferAddress << 32;
dword |= (BufferAddress >> 20) & 0xf000;
dword |= (BufferAddress >> 30) & 0xffc0;
@@ -166,9 +166,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
}
}
- private KSession _parent;
+ private readonly KSession _parent;
- private LinkedList<KSessionRequest> _requests;
+ private readonly LinkedList<KSessionRequest> _requests;
private KSessionRequest _activeRequest;
@@ -208,7 +208,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
public Result Receive(ulong customCmdBuffAddr = 0, ulong customCmdBuffSize = 0)
{
- KThread serverThread = KernelStatic.GetCurrentThread();
+ KThread serverThread = KernelStatic.GetCurrentThread();
KProcess serverProcess = serverThread.Owner;
KernelContext.CriticalSection.Enter();
@@ -234,7 +234,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
return KernelResult.PortRemoteClosed;
}
- KThread clientThread = request.ClientThread;
+ KThread clientThread = request.ClientThread;
KProcess clientProcess = clientThread.Owner;
KernelContext.CriticalSection.Leave();
@@ -243,8 +243,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
request.ServerProcess = serverProcess;
- Message clientMsg = new Message(request);
- Message serverMsg = new Message(serverThread, customCmdBuffAddr, customCmdBuffSize);
+ Message clientMsg = new(request);
+ Message serverMsg = new(serverThread, customCmdBuffAddr, customCmdBuffSize);
MessageHeader clientHeader = GetClientMessageHeader(clientProcess, clientMsg);
MessageHeader serverHeader = GetServerMessageHeader(serverMsg);
@@ -399,7 +399,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
{
ulong pointerDesc = clientProcess.CpuMemory.Read<ulong>(clientMsg.Address + offset * 4);
- PointerBufferDesc descriptor = new PointerBufferDesc(pointerDesc);
+ PointerBufferDesc descriptor = new(pointerDesc);
if (descriptor.BufferSize != 0)
{
@@ -409,7 +409,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
serverHeader.ReceiveListType,
clientHeader.MessageSizeInWords,
receiveList,
- ref recvListDstOffset,
+ ref recvListDstOffset,
out ulong recvListBufferAddress);
if (clientResult != Result.Success)
@@ -450,7 +450,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
// Copy send, receive and exchange buffers.
uint totalBuffersCount =
- clientHeader.SendBuffersCount +
+ clientHeader.SendBuffersCount +
clientHeader.ReceiveBuffersCount +
clientHeader.ExchangeBuffersCount;
@@ -462,11 +462,11 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
uint descWord1 = clientProcess.CpuMemory.Read<uint>(clientDescAddress + 4);
uint descWord2 = clientProcess.CpuMemory.Read<uint>(clientDescAddress + 8);
- bool isSendDesc = index < clientHeader.SendBuffersCount;
+ bool isSendDesc = index < clientHeader.SendBuffersCount;
bool isExchangeDesc = index >= clientHeader.SendBuffersCount + clientHeader.ReceiveBuffersCount;
bool notReceiveDesc = isSendDesc || isExchangeDesc;
- bool isReceiveDesc = !notReceiveDesc;
+ bool isReceiveDesc = !notReceiveDesc;
KMemoryPermission permission = index >= clientHeader.SendBuffersCount
? KMemoryPermission.ReadAndWrite
@@ -482,12 +482,12 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
{
ulong bufferAddress;
- bufferAddress = descWord2 >> 28;
+ bufferAddress = descWord2 >> 28;
bufferAddress |= ((descWord2 >> 2) & 7) << 4;
bufferAddress = (bufferAddress << 32) | descWord1;
- MemoryState state = IpcMemoryStates[(descWord2 + 1) & 3];
+ MemoryState state = _ipcMemoryStates[(descWord2 + 1) & 3];
clientResult = serverProcess.MemoryManager.MapBufferFromClientProcess(
bufferSize,
@@ -533,7 +533,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
descWord2 |= sizeHigh4 << 24;
descWord2 |= (uint)(dstAddress >> 34) & 0x3ffffffc;
- descWord2 |= (uint)(dstAddress >> 4) & 0xf0000000;
+ descWord2 |= (uint)(dstAddress >> 4) & 0xf0000000;
ulong serverDescAddress = serverMsg.Address + offset * 4;
@@ -586,7 +586,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
public Result Reply(ulong customCmdBuffAddr = 0, ulong customCmdBuffSize = 0)
{
- KThread serverThread = KernelStatic.GetCurrentThread();
+ KThread serverThread = KernelStatic.GetCurrentThread();
KProcess serverProcess = serverThread.Owner;
KernelContext.CriticalSection.Enter();
@@ -609,11 +609,11 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
KernelContext.CriticalSection.Leave();
- KThread clientThread = request.ClientThread;
+ KThread clientThread = request.ClientThread;
KProcess clientProcess = clientThread.Owner;
- Message clientMsg = new Message(request);
- Message serverMsg = new Message(serverThread, customCmdBuffAddr, customCmdBuffSize);
+ Message clientMsg = new(request);
+ Message serverMsg = new(serverThread, customCmdBuffAddr, customCmdBuffSize);
MessageHeader clientHeader = GetClientMessageHeader(clientProcess, clientMsg);
MessageHeader serverHeader = GetServerMessageHeader(serverMsg);
@@ -664,8 +664,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
return KernelResult.CmdBufferTooSmall;
}
- if (serverHeader.SendBuffersCount != 0 ||
- serverHeader.ReceiveBuffersCount != 0 ||
+ if (serverHeader.SendBuffersCount != 0 ||
+ serverHeader.ReceiveBuffersCount != 0 ||
serverHeader.ExchangeBuffersCount != 0)
{
CleanUpForError();
@@ -761,7 +761,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
{
ulong pointerDesc = serverProcess.CpuMemory.Read<ulong>(serverMsg.Address + offset * 4);
- PointerBufferDesc descriptor = new PointerBufferDesc(pointerDesc);
+ PointerBufferDesc descriptor = new(pointerDesc);
ulong recvListBufferAddress = 0;
@@ -817,7 +817,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
// Set send, receive and exchange buffer descriptors to zero.
uint totalBuffersCount =
- serverHeader.SendBuffersCount +
+ serverHeader.SendBuffersCount +
serverHeader.ReceiveBuffersCount +
serverHeader.ExchangeBuffersCount;
@@ -868,7 +868,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
return serverResult;
}
- private MessageHeader GetClientMessageHeader(KProcess clientProcess, Message clientMsg)
+ private static MessageHeader GetClientMessageHeader(KProcess clientProcess, Message clientMsg)
{
uint word0 = clientProcess.CpuMemory.Read<uint>(clientMsg.Address + 0);
uint word1 = clientProcess.CpuMemory.Read<uint>(clientMsg.Address + 4);
@@ -877,7 +877,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
return new MessageHeader(word0, word1, word2);
}
- private MessageHeader GetServerMessageHeader(Message serverMsg)
+ private static MessageHeader GetServerMessageHeader(Message serverMsg)
{
KProcess currentProcess = KernelStatic.GetCurrentProcess();
@@ -888,7 +888,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
return new MessageHeader(word0, word1, word2);
}
- private Result GetCopyObjectHandle(KThread srcThread, KProcess dstProcess, int srcHandle, out int dstHandle)
+ private static Result GetCopyObjectHandle(KThread srcThread, KProcess dstProcess, int srcHandle, out int dstHandle)
{
dstHandle = 0;
@@ -919,7 +919,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
}
}
- private Result GetMoveObjectHandle(KProcess srcProcess, KProcess dstProcess, int srcHandle, out int dstHandle)
+ private static Result GetMoveObjectHandle(KProcess srcProcess, KProcess dstProcess, int srcHandle, out int dstHandle)
{
dstHandle = 0;
@@ -939,7 +939,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
}
}
- private ulong[] GetReceiveList(KProcess ownerProcess, Message message, uint recvListType, uint recvListOffset)
+ private static ulong[] GetReceiveList(KProcess ownerProcess, Message message, uint recvListType, uint recvListOffset)
{
int recvListSize = 0;
@@ -964,16 +964,17 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
return receiveList;
}
- private Result GetReceiveListAddress(
+ private static Result GetReceiveListAddress(
PointerBufferDesc descriptor,
- Message message,
- uint recvListType,
- uint messageSizeInWords,
- ulong[] receiveList,
- ref uint dstOffset,
- out ulong address)
+ Message message,
+ uint recvListType,
+ uint messageSizeInWords,
+ ulong[] receiveList,
+ ref uint dstOffset,
+ out ulong address)
{
- ulong recvListBufferAddress = address = 0;
+ ulong recvListBufferAddress;
+ address = 0;
if (recvListType == 0)
{
@@ -987,7 +988,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
if (recvListType == 1)
{
recvListBaseAddr = message.Address + messageSizeInWords * 4;
- recvListEndAddr = message.Address + message.Size;
+ recvListEndAddr = message.Address + message.Size;
}
else /* if (recvListType == 2) */
{
@@ -1012,7 +1013,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
dstOffset = (uint)endAddress - (uint)recvListBaseAddr;
if (recvListBufferAddress + descriptor.BufferSize <= recvListBufferAddress ||
- recvListBufferAddress + descriptor.BufferSize > recvListEndAddr)
+ recvListBufferAddress + descriptor.BufferSize > recvListEndAddr)
{
return KernelResult.OutOfResource;
}
@@ -1041,7 +1042,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
return Result.Success;
}
- private void CloseAllHandles(Message message, MessageHeader header, KProcess process)
+ private static void CloseAllHandles(Message message, MessageHeader header, KProcess process)
{
if (header.HasHandles)
{
@@ -1202,7 +1203,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
}
}
- private void SendResultToAsyncRequestClient(KSessionRequest request, Result result)
+ private static void SendResultToAsyncRequestClient(KSessionRequest request, Result result)
{
KProcess clientProcess = request.ClientThread.Owner;
@@ -1232,15 +1233,15 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
KernelContext.CriticalSection.Leave();
}
- private void WakeAndSetResult(KThread thread, Result result, KSynchronizationObject signaledObj = null)
+ private static void WakeAndSetResult(KThread thread, Result result, KSynchronizationObject signaledObj = null)
{
if ((thread.SchedFlags & ThreadSchedState.LowMask) == ThreadSchedState.Paused)
{
- thread.SignaledObj = signaledObj;
+ thread.SignaledObj = signaledObj;
thread.ObjSyncResult = result;
thread.Reschedule(ThreadSchedState.Running);
}
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KSession.cs b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KSession.cs
index 13cf4b51..6659d414 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KSession.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KSession.cs
@@ -8,7 +8,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
public KServerSession ServerSession { get; }
public KClientSession ClientSession { get; }
- private bool _hasBeenInitialized;
+ private readonly bool _hasBeenInitialized;
public KSession(KernelContext context, KClientPort parentPort = null) : base(context)
{
@@ -51,4 +51,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
}
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KSessionRequest.cs b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KSessionRequest.cs
index 31ddfc9c..bc3eef71 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KSessionRequest.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KSessionRequest.cs
@@ -17,17 +17,17 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
public ulong CustomCmdBuffSize { get; }
public KSessionRequest(
- KThread clientThread,
- ulong customCmdBuffAddr,
- ulong customCmdBuffSize,
+ KThread clientThread,
+ ulong customCmdBuffAddr,
+ ulong customCmdBuffSize,
KWritableEvent asyncEvent = null)
{
- ClientThread = clientThread;
+ ClientThread = clientThread;
CustomCmdBuffAddr = customCmdBuffAddr;
CustomCmdBuffSize = customCmdBuffSize;
- AsyncEvent = asyncEvent;
+ AsyncEvent = asyncEvent;
BufferDescriptorTable = new KBufferDescriptorTable();
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/KernelConstants.cs b/src/Ryujinx.HLE/HOS/Kernel/KernelConstants.cs
index 28db750c..3dbaec18 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/KernelConstants.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/KernelConstants.cs
@@ -17,4 +17,4 @@ namespace Ryujinx.HLE.HOS.Kernel
public const ulong CounterFrequency = 19200000;
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/KernelStatic.cs b/src/Ryujinx.HLE/HOS/Kernel/KernelStatic.cs
index c66f4b57..2234a8c4 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/KernelStatic.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/KernelStatic.cs
@@ -10,10 +10,10 @@ namespace Ryujinx.HLE.HOS.Kernel
static class KernelStatic
{
[ThreadStatic]
- private static KernelContext Context;
+ private static KernelContext _context;
[ThreadStatic]
- private static KThread CurrentThread;
+ private static KThread _currentThread;
public static Result StartInitialProcess(
KernelContext context,
@@ -22,7 +22,7 @@ namespace Ryujinx.HLE.HOS.Kernel
int mainThreadPriority,
ThreadStart customThreadStart)
{
- KProcess process = new KProcess(context);
+ KProcess process = new(context);
Result result = process.Initialize(
creationInfo,
@@ -46,13 +46,13 @@ namespace Ryujinx.HLE.HOS.Kernel
internal static void SetKernelContext(KernelContext context, KThread thread)
{
- Context = context;
- CurrentThread = thread;
+ _context = context;
+ _currentThread = thread;
}
internal static KThread GetCurrentThread()
{
- return CurrentThread;
+ return _currentThread;
}
internal static KProcess GetCurrentProcess()
@@ -62,7 +62,7 @@ namespace Ryujinx.HLE.HOS.Kernel
internal static KProcess GetProcessByPid(ulong pid)
{
- if (Context.Processes.TryGetValue(pid, out KProcess process))
+ if (_context.Processes.TryGetValue(pid, out KProcess process))
{
return process;
}
@@ -70,4 +70,4 @@ namespace Ryujinx.HLE.HOS.Kernel
return null;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/AddressSpaceType.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/AddressSpaceType.cs
index 8395c577..8dfa4303 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Memory/AddressSpaceType.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/AddressSpaceType.cs
@@ -2,9 +2,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
{
enum AddressSpaceType
{
- Addr32Bits = 0,
- Addr36Bits = 1,
+ Addr32Bits = 0,
+ Addr36Bits = 1,
Addr32BitsNoMap = 2,
- Addr39Bits = 3
+ Addr39Bits = 3,
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/DramMemoryMap.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/DramMemoryMap.cs
index 4941d5b7..e7af2963 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Memory/DramMemoryMap.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/DramMemoryMap.cs
@@ -8,11 +8,11 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
public const ulong SlabHeapBase = KernelReserveBase + 0x85000;
public const ulong SlapHeapSize = 0xa21000;
- public const ulong SlabHeapEnd = SlabHeapBase + SlapHeapSize;
+ public const ulong SlabHeapEnd = SlabHeapBase + SlapHeapSize;
public static bool IsHeapPhysicalAddress(ulong address)
{
return address >= SlabHeapEnd;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KCodeMemory.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KCodeMemory.cs
index 11474e49..c725501b 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KCodeMemory.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KCodeMemory.cs
@@ -166,4 +166,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
Owner.DecrementReferenceCount();
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryBlock.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryBlock.cs
index e082105b..d2c4aadf 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryBlock.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryBlock.cs
@@ -153,4 +153,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
}
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryBlockSlabManager.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryBlockSlabManager.cs
index 8732b507..b4f56699 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryBlockSlabManager.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryBlockSlabManager.cs
@@ -2,7 +2,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
{
class KMemoryBlockSlabManager
{
- private ulong _capacityElements;
+ private readonly ulong _capacityElements;
public int Count { get; set; }
@@ -16,4 +16,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
return (ulong)(Count + count) <= _capacityElements;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryInfo.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryInfo.cs
index af070ac2..4db484d0 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryInfo.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryInfo.cs
@@ -3,34 +3,34 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
class KMemoryInfo
{
public ulong Address { get; }
- public ulong Size { get; }
+ public ulong Size { get; }
- public MemoryState State { get; }
- public KMemoryPermission Permission { get; }
- public MemoryAttribute Attribute { get; }
+ public MemoryState State { get; }
+ public KMemoryPermission Permission { get; }
+ public MemoryAttribute Attribute { get; }
public KMemoryPermission SourcePermission { get; }
- public int IpcRefCount { get; }
+ public int IpcRefCount { get; }
public int DeviceRefCount { get; }
public KMemoryInfo(
- ulong address,
- ulong size,
- MemoryState state,
+ ulong address,
+ ulong size,
+ MemoryState state,
KMemoryPermission permission,
- MemoryAttribute attribute,
+ MemoryAttribute attribute,
KMemoryPermission sourcePermission,
- int ipcRefCount,
- int deviceRefCount)
+ int ipcRefCount,
+ int deviceRefCount)
{
- Address = address;
- Size = size;
- State = state;
- Permission = permission;
- Attribute = attribute;
+ Address = address;
+ Size = size;
+ State = state;
+ Permission = permission;
+ Attribute = attribute;
SourcePermission = sourcePermission;
- IpcRefCount = ipcRefCount;
- DeviceRefCount = deviceRefCount;
+ IpcRefCount = ipcRefCount;
+ DeviceRefCount = deviceRefCount;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryRegionManager.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryRegionManager.cs
index 4596b15d..2eff616c 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryRegionManager.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryRegionManager.cs
@@ -239,4 +239,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
return (EndAddr - address) / KPageTableBase.PageSize;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageBitmap.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageBitmap.cs
index fa090b02..e0f9df48 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageBitmap.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageBitmap.cs
@@ -224,7 +224,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
{
while (depth >= 0)
{
- int ind = (int)(offset / UInt64BitSize);
+ int ind = (int)(offset / UInt64BitSize);
int which = (int)(offset % UInt64BitSize);
ulong mask = 1UL << which;
@@ -247,7 +247,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
{
while (depth >= 0)
{
- int ind = (int)(offset / UInt64BitSize);
+ int ind = (int)(offset / UInt64BitSize);
int which = (int)(offset % UInt64BitSize);
ulong mask = 1UL << which;
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageHeap.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageHeap.cs
index c3586ed7..635dcced 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageHeap.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageHeap.cs
@@ -7,7 +7,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
{
private class Block
{
- private KPageBitmap _bitmap = new KPageBitmap();
+ private readonly KPageBitmap _bitmap = new();
private ulong _heapAddress;
private ulong _endOffset;
@@ -29,8 +29,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
? 1UL << nextBlockShift
: 1UL << blockShift;
- address = BitUtils.AlignDown(address, align);
- endAddress = BitUtils.AlignUp (endAddress, align);
+ address = BitUtils.AlignDown(address, align);
+ endAddress = BitUtils.AlignUp(endAddress, align);
_heapAddress = address;
_endOffset = (endAddress - address) / (1UL << blockShift);
@@ -84,11 +84,13 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
}
}
- private static readonly int[] _memoryBlockPageShifts = new int[] { 12, 16, 21, 22, 25, 29, 30 };
+ private static readonly int[] _memoryBlockPageShifts = { 12, 16, 21, 22, 25, 29, 30 };
+#pragma warning disable IDE0052 // Remove unread private member
private readonly ulong _heapAddress;
private readonly ulong _heapSize;
private ulong _usedSize;
+#pragma warning restore IDE0052
private readonly int _blocksCount;
private readonly Block[] _blocks;
@@ -175,19 +177,19 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
int bigIndex = _blocksCount - 1;
- ulong start = address;
- ulong end = address + pagesCount * KPageTableBase.PageSize;
+ ulong start = address;
+ ulong end = address + pagesCount * KPageTableBase.PageSize;
ulong beforeStart = start;
- ulong beforeEnd = start;
- ulong afterStart = end;
- ulong afterEnd = end;
+ ulong beforeEnd = start;
+ ulong afterStart = end;
+ ulong afterEnd = end;
while (bigIndex >= 0)
{
ulong blockSize = _blocks[bigIndex].Size;
- ulong bigStart = BitUtils.AlignUp (start, blockSize);
- ulong bigEnd = BitUtils.AlignDown(end, blockSize);
+ ulong bigStart = BitUtils.AlignUp(start, blockSize);
+ ulong bigEnd = BitUtils.AlignDown(end, blockSize);
if (bigStart < bigEnd)
{
@@ -196,7 +198,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
FreeBlock(block, bigIndex);
}
- beforeEnd = bigStart;
+ beforeEnd = bigStart;
afterStart = bigEnd;
break;
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageList.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageList.cs
index 3149faa9..60514824 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageList.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageList.cs
@@ -23,7 +23,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
if (lastNode.Address + lastNode.PagesCount * KPageTableBase.PageSize == address)
{
- address = lastNode.Address;
+ address = lastNode.Address;
pagesCount += lastNode.PagesCount;
Nodes.RemoveLast();
@@ -50,18 +50,18 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
public bool IsEqual(KPageList other)
{
- LinkedListNode<KPageNode> thisNode = Nodes.First;
+ LinkedListNode<KPageNode> thisNode = Nodes.First;
LinkedListNode<KPageNode> otherNode = other.Nodes.First;
while (thisNode != null && otherNode != null)
{
- if (thisNode.Value.Address != otherNode.Value.Address ||
+ if (thisNode.Value.Address != otherNode.Value.Address ||
thisNode.Value.PagesCount != otherNode.Value.PagesCount)
{
return false;
}
- thisNode = thisNode.Next;
+ thisNode = thisNode.Next;
otherNode = otherNode.Next;
}
@@ -94,4 +94,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
return GetEnumerator();
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageNode.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageNode.cs
index ada41687..395c8c83 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageNode.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageNode.cs
@@ -7,8 +7,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
public KPageNode(ulong address, ulong pagesCount)
{
- Address = address;
+ Address = address;
PagesCount = pagesCount;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTable.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTable.cs
index 119034c1..dcfc8f4f 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTable.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTable.cs
@@ -43,7 +43,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
/// <inheritdoc/>
protected override Result MapMemory(ulong src, ulong dst, ulong pagesCount, KMemoryPermission oldSrcPermission, KMemoryPermission newDstPermission)
{
- KPageList pageList = new KPageList();
+ KPageList pageList = new();
GetPhysicalRegions(src, pagesCount * PageSize, pageList);
Result result = Reprotect(src, pagesCount, KMemoryPermission.None);
@@ -69,8 +69,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
{
ulong size = pagesCount * PageSize;
- KPageList srcPageList = new KPageList();
- KPageList dstPageList = new KPageList();
+ KPageList srcPageList = new();
+ KPageList dstPageList = new();
GetPhysicalRegions(src, size, srcPageList);
GetPhysicalRegions(dst, size, dstPageList);
@@ -180,7 +180,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
/// <inheritdoc/>
protected override Result Unmap(ulong address, ulong pagesCount)
{
- KPageList pagesToClose = new KPageList();
+ KPageList pagesToClose = new();
var regions = _cpuMemory.GetPhysicalRegions(address, pagesCount * PageSize);
@@ -226,4 +226,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
_cpuMemory.Write(va, data);
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs
index 6746a0a7..2b00f802 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs
@@ -12,14 +12,13 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
{
abstract class KPageTableBase
{
- private static readonly int[] MappingUnitSizes = new int[]
- {
+ private static readonly int[] _mappingUnitSizes = {
0x1000,
0x10000,
0x200000,
0x400000,
0x2000000,
- 0x40000000
+ 0x40000000,
};
private const ulong RegionAlignment = 0x200000;
@@ -58,7 +57,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
public ulong AslrRegionStart { get; private set; }
public ulong AslrRegionEnd { get; private set; }
+#pragma warning disable IDE0052 // Remove unread private member
private ulong _heapCapacity;
+#pragma warning restore IDE0052
public ulong PhysicalMemoryUsage { get; private set; }
@@ -67,7 +68,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
private MemoryRegion _memRegion;
private bool _allocateFromBack;
- private bool _isKernel;
+ private readonly bool _isKernel;
private bool _aslrEnabled;
@@ -77,10 +78,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
private MersenneTwister _randomNumberGenerator;
- private MemoryFillValue _heapFillValue;
- private MemoryFillValue _ipcFillValue;
+ private readonly MemoryFillValue _heapFillValue;
+ private readonly MemoryFillValue _ipcFillValue;
- private ulong _reservedAddressSpaceSize;
+ private readonly ulong _reservedAddressSpaceSize;
public KPageTableBase(KernelContext context, ulong reservedAddressSpaceSize)
{
@@ -96,7 +97,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
_reservedAddressSpaceSize = reservedAddressSpaceSize;
}
- private static readonly int[] AddrSpaceSizes = new int[] { 32, 36, 32, 39 };
+ private static readonly int[] _addrSpaceSizes = { 32, 36, 32, 39 };
public Result InitializeForProcess(
AddressSpaceType addrSpaceType,
@@ -109,13 +110,13 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
{
if ((uint)addrSpaceType > (uint)AddressSpaceType.Addr39Bits)
{
- throw new ArgumentException(nameof(addrSpaceType));
+ throw new ArgumentException($"AddressSpaceType bigger than {(uint)AddressSpaceType.Addr39Bits}: {(uint)addrSpaceType}", nameof(addrSpaceType));
}
_contextId = Context.ContextIdManager.GetId();
ulong addrSpaceBase = 0;
- ulong addrSpaceSize = 1UL << AddrSpaceSizes[(int)addrSpaceType];
+ ulong addrSpaceSize = 1UL << _addrSpaceSizes[(int)addrSpaceType];
Result result = CreateUserAddressSpace(
addrSpaceType,
@@ -157,10 +158,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
{
ulong endAddr = address + size;
- Region aliasRegion = new Region();
- Region heapRegion = new Region();
- Region stackRegion = new Region();
- Region tlsIoRegion = new Region();
+ Region aliasRegion = new();
+ Region heapRegion = new();
+ Region stackRegion = new();
+ Region tlsIoRegion = new();
ulong codeRegionSize;
ulong stackAndTlsIoStart;
@@ -238,8 +239,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
stackAndTlsIoEnd = 0;
}
break;
-
- default: throw new ArgumentException(nameof(addrSpaceType));
+ default:
+ throw new ArgumentException($"AddressSpaceType bigger than {(uint)AddressSpaceType.Addr39Bits}: {(uint)addrSpaceType}", nameof(addrSpaceType));
}
CodeRegionEnd = CodeRegionStart + codeRegionSize;
@@ -374,10 +375,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
private long GetRandomValue(long min, long max)
{
- if (_randomNumberGenerator == null)
- {
- _randomNumberGenerator = new MersenneTwister(0);
- }
+ _randomNumberGenerator ??= new MersenneTwister(0);
return _randomNumberGenerator.GenRandomNumber(min, max);
}
@@ -442,7 +440,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
lock (_blockManager)
{
- KPageList currentPageList = new KPageList();
+ KPageList currentPageList = new();
GetPhysicalRegions(address, size, currentPageList);
@@ -486,13 +484,13 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
}
}
- public Result MapNormalMemory(long address, long size, KMemoryPermission permission)
+ public static Result MapNormalMemory(long address, long size, KMemoryPermission permission)
{
// TODO.
return Result.Success;
}
- public Result MapIoMemory(long address, long size, KMemoryPermission permission)
+ public static Result MapIoMemory(long address, long size, KMemoryPermission permission)
{
// TODO.
return Result.Success;
@@ -1174,8 +1172,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
return KernelResult.InvalidMemState;
}
- KPageList srcPageList = new KPageList();
- KPageList dstPageList = new KPageList();
+ KPageList srcPageList = new();
+ KPageList dstPageList = new();
srcPageTable.GetPhysicalRegions(src, size, srcPageList);
GetPhysicalRegions(dst, size, dstPageList);
@@ -1681,11 +1679,17 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
switch (state)
{
- case MemoryState.IpcBuffer0: stateMask = MemoryState.IpcSendAllowedType0; break;
- case MemoryState.IpcBuffer1: stateMask = MemoryState.IpcSendAllowedType1; break;
- case MemoryState.IpcBuffer3: stateMask = MemoryState.IpcSendAllowedType3; break;
-
- default: return KernelResult.InvalidCombination;
+ case MemoryState.IpcBuffer0:
+ stateMask = MemoryState.IpcSendAllowedType0;
+ break;
+ case MemoryState.IpcBuffer1:
+ stateMask = MemoryState.IpcSendAllowedType1;
+ break;
+ case MemoryState.IpcBuffer3:
+ stateMask = MemoryState.IpcSendAllowedType3;
+ break;
+ default:
+ return KernelResult.InvalidCombination;
}
KMemoryPermission permissionMask = permission == KMemoryPermission.ReadAndWrite
@@ -1822,9 +1826,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
ulong va = 0;
- for (int unit = MappingUnitSizes.Length - 1; unit >= 0 && va == 0; unit--)
+ for (int unit = _mappingUnitSizes.Length - 1; unit >= 0 && va == 0; unit--)
{
- int alignment = MappingUnitSizes[unit];
+ int alignment = _mappingUnitSizes[unit];
va = AllocateVa(AliasRegionStart, regionPagesCount, neededPagesCount, alignment);
}
@@ -1937,7 +1941,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
if (srcPageTable.Supports4KBPages)
{
- KPageList pageList = new KPageList();
+ KPageList pageList = new();
srcPageTable.GetPhysicalRegions(addressRounded, alignedSize, pageList);
result = MapPages(currentVa, pageList, permission, MemoryMapFlags.None);
@@ -2075,11 +2079,17 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
switch (state)
{
- case MemoryState.IpcBuffer0: stateMask = MemoryState.IpcSendAllowedType0; break;
- case MemoryState.IpcBuffer1: stateMask = MemoryState.IpcSendAllowedType1; break;
- case MemoryState.IpcBuffer3: stateMask = MemoryState.IpcSendAllowedType3; break;
-
- default: return KernelResult.InvalidCombination;
+ case MemoryState.IpcBuffer0:
+ stateMask = MemoryState.IpcSendAllowedType0;
+ break;
+ case MemoryState.IpcBuffer1:
+ stateMask = MemoryState.IpcSendAllowedType1;
+ break;
+ case MemoryState.IpcBuffer3:
+ stateMask = MemoryState.IpcSendAllowedType3;
+ break;
+ default:
+ return KernelResult.InvalidCombination;
}
MemoryAttribute attributeMask =
@@ -2392,7 +2402,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
if (pageList != null)
{
- KPageList currentPageList = new KPageList();
+ KPageList currentPageList = new();
GetPhysicalRegions(address, pagesCount * PageSize, currentPageList);
@@ -3050,4 +3060,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
/// <exception cref="Ryujinx.Memory.InvalidMemoryRegionException">Throw for unhandled invalid or unmapped memory accesses</exception>
protected abstract void Write(ulong va, ReadOnlySpan<byte> data);
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KScopedPageList.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KScopedPageList.cs
index a0c19f9c..498e6f8c 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KScopedPageList.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KScopedPageList.cs
@@ -19,7 +19,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
_pageList = null;
}
- public void Dispose()
+ public readonly void Dispose()
{
_pageList?.DecrementPagesReferenceCount(_manager);
}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KSharedMemory.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KSharedMemory.cs
index 5ec3cd72..e302ee44 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KSharedMemory.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KSharedMemory.cs
@@ -72,4 +72,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
return memoryManager.UnmapPages(address, _pageList, MemoryState.SharedMemory);
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KSlabHeap.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KSlabHeap.cs
index 9051e84c..cd8c2e47 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KSlabHeap.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KSlabHeap.cs
@@ -4,7 +4,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
{
class KSlabHeap
{
- private LinkedList<ulong> _items;
+ private readonly LinkedList<ulong> _items;
public KSlabHeap(ulong pa, ulong itemSize, ulong size)
{
@@ -47,4 +47,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
}
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KTransferMemory.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KTransferMemory.cs
index b2449598..9f64532e 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KTransferMemory.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KTransferMemory.cs
@@ -127,4 +127,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
}
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/MemoryAttribute.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/MemoryAttribute.cs
index 42407ffe..36b1ec8c 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Memory/MemoryAttribute.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/MemoryAttribute.cs
@@ -3,20 +3,20 @@ using System;
namespace Ryujinx.HLE.HOS.Kernel.Memory
{
[Flags]
- enum MemoryAttribute : byte
+ enum MemoryAttribute : byte
{
None = 0,
Mask = 0xff,
- Borrowed = 1 << 0,
- IpcMapped = 1 << 1,
+ Borrowed = 1 << 0,
+ IpcMapped = 1 << 1,
DeviceMapped = 1 << 2,
- Uncached = 1 << 3,
+ Uncached = 1 << 3,
IpcAndDeviceMapped = IpcMapped | DeviceMapped,
BorrowedAndIpcMapped = Borrowed | IpcMapped,
- DeviceMappedAndUncached = DeviceMapped | Uncached
+ DeviceMappedAndUncached = DeviceMapped | Uncached,
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/MemoryPermission.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/MemoryPermission.cs
index 563b817d..068cdbb8 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Memory/MemoryPermission.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/MemoryPermission.cs
@@ -5,16 +5,16 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
[Flags]
enum KMemoryPermission : uint
{
- None = 0,
+ None = 0,
UserMask = Read | Write | Execute,
- Mask = uint.MaxValue,
+ Mask = uint.MaxValue,
- Read = 1 << 0,
- Write = 1 << 1,
- Execute = 1 << 2,
+ Read = 1 << 0,
+ Write = 1 << 1,
+ Execute = 1 << 2,
DontCare = 1 << 28,
- ReadAndWrite = Read | Write,
- ReadAndExecute = Read | Execute
+ ReadAndWrite = Read | Write,
+ ReadAndExecute = Read | Execute,
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/MemoryRegion.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/MemoryRegion.cs
index ad719bde..18784bf9 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Memory/MemoryRegion.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/MemoryRegion.cs
@@ -3,8 +3,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
enum MemoryRegion
{
Application = 0,
- Applet = 1,
- Service = 2,
- NvServices = 3
+ Applet = 1,
+ Service = 2,
+ NvServices = 3,
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/MemoryState.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/MemoryState.cs
index d3b61780..273b58e5 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Memory/MemoryState.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/MemoryState.cs
@@ -5,46 +5,46 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
[Flags]
enum MemoryState : uint
{
- Unmapped = 0x00000000,
- Io = 0x00002001,
- Normal = 0x00042002,
- CodeStatic = 0x00DC7E03,
- CodeMutable = 0x03FEBD04,
- Heap = 0x037EBD05,
- SharedMemory = 0x00402006,
- ModCodeStatic = 0x00DD7E08,
- ModCodeMutable = 0x03FFBD09,
- IpcBuffer0 = 0x005C3C0A,
- Stack = 0x005C3C0B,
- ThreadLocal = 0x0040200C,
+ Unmapped = 0x00000000,
+ Io = 0x00002001,
+ Normal = 0x00042002,
+ CodeStatic = 0x00DC7E03,
+ CodeMutable = 0x03FEBD04,
+ Heap = 0x037EBD05,
+ SharedMemory = 0x00402006,
+ ModCodeStatic = 0x00DD7E08,
+ ModCodeMutable = 0x03FFBD09,
+ IpcBuffer0 = 0x005C3C0A,
+ Stack = 0x005C3C0B,
+ ThreadLocal = 0x0040200C,
TransferMemoryIsolated = 0x015C3C0D,
- TransferMemory = 0x005C380E,
- ProcessMemory = 0x0040380F,
- Reserved = 0x00000010,
- IpcBuffer1 = 0x005C3811,
- IpcBuffer3 = 0x004C2812,
- KernelStack = 0x00002013,
- CodeReadOnly = 0x00402214,
- CodeWritable = 0x00402015,
- UserMask = 0xff,
- Mask = 0xffffffff,
+ TransferMemory = 0x005C380E,
+ ProcessMemory = 0x0040380F,
+ Reserved = 0x00000010,
+ IpcBuffer1 = 0x005C3811,
+ IpcBuffer3 = 0x004C2812,
+ KernelStack = 0x00002013,
+ CodeReadOnly = 0x00402214,
+ CodeWritable = 0x00402015,
+ UserMask = 0xff,
+ Mask = 0xffffffff,
- PermissionChangeAllowed = 1 << 8,
+ PermissionChangeAllowed = 1 << 8,
ForceReadWritableByDebugSyscalls = 1 << 9,
- IpcSendAllowedType0 = 1 << 10,
- IpcSendAllowedType3 = 1 << 11,
- IpcSendAllowedType1 = 1 << 12,
- ProcessPermissionChangeAllowed = 1 << 14,
- MapAllowed = 1 << 15,
- UnmapProcessCodeMemoryAllowed = 1 << 16,
- TransferMemoryAllowed = 1 << 17,
- QueryPhysicalAddressAllowed = 1 << 18,
- MapDeviceAllowed = 1 << 19,
- MapDeviceAlignedAllowed = 1 << 20,
- IpcBufferAllowed = 1 << 21,
- IsPoolAllocated = 1 << 22,
- MapProcessAllowed = 1 << 23,
- AttributeChangeAllowed = 1 << 24,
- CodeMemoryAllowed = 1 << 25
+ IpcSendAllowedType0 = 1 << 10,
+ IpcSendAllowedType3 = 1 << 11,
+ IpcSendAllowedType1 = 1 << 12,
+ ProcessPermissionChangeAllowed = 1 << 14,
+ MapAllowed = 1 << 15,
+ UnmapProcessCodeMemoryAllowed = 1 << 16,
+ TransferMemoryAllowed = 1 << 17,
+ QueryPhysicalAddressAllowed = 1 << 18,
+ MapDeviceAllowed = 1 << 19,
+ MapDeviceAlignedAllowed = 1 << 20,
+ IpcBufferAllowed = 1 << 21,
+ IsPoolAllocated = 1 << 22,
+ MapProcessAllowed = 1 << 23,
+ AttributeChangeAllowed = 1 << 24,
+ CodeMemoryAllowed = 1 << 25,
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Process/CapabilityExtensions.cs b/src/Ryujinx.HLE/HOS/Kernel/Process/CapabilityExtensions.cs
index 66d56fe3..dd133ee1 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Process/CapabilityExtensions.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Process/CapabilityExtensions.cs
@@ -19,4 +19,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
return (uint)BitOperations.TrailingZeroCount(type.GetFlag());
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Process/CapabilityType.cs b/src/Ryujinx.HLE/HOS/Kernel/Process/CapabilityType.cs
index 51d92316..9812eea0 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Process/CapabilityType.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Process/CapabilityType.cs
@@ -2,18 +2,18 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
{
enum CapabilityType : uint
{
- CorePriority = (1u << 3) - 1,
- SyscallMask = (1u << 4) - 1,
- MapRange = (1u << 6) - 1,
- MapIoPage = (1u << 7) - 1,
- MapRegion = (1u << 10) - 1,
+ CorePriority = (1u << 3) - 1,
+ SyscallMask = (1u << 4) - 1,
+ MapRange = (1u << 6) - 1,
+ MapIoPage = (1u << 7) - 1,
+ MapRegion = (1u << 10) - 1,
InterruptPair = (1u << 11) - 1,
- ProgramType = (1u << 13) - 1,
+ ProgramType = (1u << 13) - 1,
KernelVersion = (1u << 14) - 1,
- HandleTable = (1u << 15) - 1,
- DebugFlags = (1u << 16) - 1,
+ HandleTable = (1u << 15) - 1,
+ DebugFlags = (1u << 16) - 1,
- Invalid = 0u,
- Padding = ~0u
+ Invalid = 0u,
+ Padding = ~0u,
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Process/HleProcessDebugger.cs b/src/Ryujinx.HLE/HOS/Kernel/Process/HleProcessDebugger.cs
index 8fee5c0d..cbfef588 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Process/HleProcessDebugger.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Process/HleProcessDebugger.cs
@@ -14,7 +14,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
{
private const int Mod0 = 'M' << 0 | 'O' << 8 | 'D' << 16 | '0' << 24;
- private KProcess _owner;
+ private readonly KProcess _owner;
private class Image
{
@@ -27,12 +27,12 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
public Image(ulong baseAddress, ulong size, ElfSymbol[] symbols)
{
BaseAddress = baseAddress;
- Size = size;
- Symbols = symbols;
+ Size = size;
+ Symbols = symbols;
}
}
- private List<Image> _images;
+ private readonly List<Image> _images;
private int _loaded;
@@ -49,7 +49,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
var context = thread.Context;
- StringBuilder trace = new StringBuilder();
+ StringBuilder trace = new();
trace.AppendLine($"Process: {_owner.Name}, PID: {_owner.Pid}");
@@ -111,7 +111,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
var context = thread.Context;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new();
string GetReg(int x)
{
@@ -145,11 +145,11 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
return sb.ToString();
}
- private bool TryGetSubName(Image image, ulong address, out ElfSymbol symbol)
+ private static bool TryGetSubName(Image image, ulong address, out ElfSymbol symbol)
{
address -= image.BaseAddress;
- int left = 0;
+ int left = 0;
int right = image.Symbols.Length - 1;
while (left <= right)
@@ -190,9 +190,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
public ulong Offset;
public ulong SubOffset;
- public string ImageDisplay => $"{ImageName}:0x{Offset:x4}";
- public string SubDisplay => SubOffset == 0 ? SubName : $"{SubName}:0x{SubOffset:x4}";
- public string SpDisplay => SubOffset == 0 ? "SP" : $"SP:-0x{SubOffset:x4}";
+ public readonly string ImageDisplay => $"{ImageName}:0x{Offset:x4}";
+ public readonly string SubDisplay => SubOffset == 0 ? SubName : $"{SubName}:0x{SubOffset:x4}";
+ public readonly string SpDisplay => SubOffset == 0 ? "SP" : $"SP:-0x{SubOffset:x4}";
}
private bool AnalyzePointer(out PointerInfo info, ulong address, KThread thread)
@@ -324,7 +324,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
private void ScanMemoryForTextSegments()
{
ulong oldAddress = 0;
- ulong address = 0;
+ ulong address = 0;
while (address >= oldAddress)
{
@@ -355,7 +355,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
return;
}
- Dictionary<ElfDynamicTag, ulong> dynamic = new Dictionary<ElfDynamicTag, ulong>();
+ Dictionary<ElfDynamicTag, ulong> dynamic = new();
int mod0Magic = memory.Read<int>(mod0Offset + 0x0);
@@ -364,12 +364,12 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
return;
}
- ulong dynamicOffset = memory.Read<uint>(mod0Offset + 0x4) + mod0Offset;
- ulong bssStartOffset = memory.Read<uint>(mod0Offset + 0x8) + mod0Offset;
- ulong bssEndOffset = memory.Read<uint>(mod0Offset + 0xc) + mod0Offset;
+ ulong dynamicOffset = memory.Read<uint>(mod0Offset + 0x4) + mod0Offset;
+ ulong bssStartOffset = memory.Read<uint>(mod0Offset + 0x8) + mod0Offset;
+ ulong bssEndOffset = memory.Read<uint>(mod0Offset + 0xc) + mod0Offset;
ulong ehHdrStartOffset = memory.Read<uint>(mod0Offset + 0x10) + mod0Offset;
- ulong ehHdrEndOffset = memory.Read<uint>(mod0Offset + 0x14) + mod0Offset;
- ulong modObjOffset = memory.Read<uint>(mod0Offset + 0x18) + mod0Offset;
+ ulong ehHdrEndOffset = memory.Read<uint>(mod0Offset + 0x14) + mod0Offset;
+ ulong modObjOffset = memory.Read<uint>(mod0Offset + 0x18) + mod0Offset;
bool isAArch32 = memory.Read<ulong>(dynamicOffset) > 0xFFFFFFFF || memory.Read<ulong>(dynamicOffset + 0x10) > 0xFFFFFFFF;
@@ -381,14 +381,14 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
if (isAArch32)
{
tagVal = memory.Read<uint>(dynamicOffset + 0);
- value = memory.Read<uint>(dynamicOffset + 4);
+ value = memory.Read<uint>(dynamicOffset + 4);
dynamicOffset += 0x8;
}
else
{
tagVal = memory.Read<ulong>(dynamicOffset + 0);
- value = memory.Read<ulong>(dynamicOffset + 8);
+ value = memory.Read<ulong>(dynamicOffset + 8);
dynamicOffset += 0x10;
}
@@ -413,7 +413,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
ulong strTblAddr = textOffset + strTab;
ulong symTblAddr = textOffset + symTab;
- List<ElfSymbol> symbols = new List<ElfSymbol>();
+ List<ElfSymbol> symbols = new();
while (symTblAddr < strTblAddr)
{
@@ -430,7 +430,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
}
}
- private ElfSymbol GetSymbol64(IVirtualMemoryManager memory, ulong address, ulong strTblAddr)
+ private static ElfSymbol GetSymbol64(IVirtualMemoryManager memory, ulong address, ulong strTblAddr)
{
ElfSymbol64 sym = memory.Read<ElfSymbol64>(address);
@@ -446,7 +446,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
return new ElfSymbol(name, sym.Info, sym.Other, sym.SectionIndex, sym.ValueAddress, sym.Size);
}
- private ElfSymbol GetSymbol32(IVirtualMemoryManager memory, ulong address, ulong strTblAddr)
+ private static ElfSymbol GetSymbol32(IVirtualMemoryManager memory, ulong address, ulong strTblAddr)
{
ElfSymbol32 sym = memory.Read<ElfSymbol32>(address);
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Process/KContextIdManager.cs b/src/Ryujinx.HLE/HOS/Kernel/Process/KContextIdManager.cs
index 104fe578..32a75132 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Process/KContextIdManager.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Process/KContextIdManager.cs
@@ -7,7 +7,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
{
private const int IdMasksCount = 8;
- private int[] _idMasks;
+ private readonly int[] _idMasks;
private int _nextFreeBitHint;
@@ -67,17 +67,17 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
private bool TestBit(int bit)
{
- return (_idMasks[_nextFreeBitHint / 32] & (1 << (_nextFreeBitHint & 31))) != 0;
+ return (_idMasks[bit / 32] & (1 << (bit & 31))) != 0;
}
private void SetBit(int bit)
{
- _idMasks[_nextFreeBitHint / 32] |= (1 << (_nextFreeBitHint & 31));
+ _idMasks[bit / 32] |= (1 << (bit & 31));
}
private void ClearBit(int bit)
{
- _idMasks[_nextFreeBitHint / 32] &= ~(1 << (_nextFreeBitHint & 31));
+ _idMasks[bit / 32] &= ~(1 << (bit & 31));
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Process/KHandleEntry.cs b/src/Ryujinx.HLE/HOS/Kernel/Process/KHandleEntry.cs
index b5ca9b5e..c80423b7 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Process/KHandleEntry.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Process/KHandleEntry.cs
@@ -8,12 +8,12 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
public int Index { get; private set; }
- public ushort HandleId { get; set; }
- public KAutoObject Obj { get; set; }
+ public ushort HandleId { get; set; }
+ public KAutoObject Obj { get; set; }
public KHandleEntry(int index)
{
Index = index;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Process/KHandleTable.cs b/src/Ryujinx.HLE/HOS/Kernel/Process/KHandleTable.cs
index 6dd7e5b7..21ea6bb2 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Process/KHandleTable.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Process/KHandleTable.cs
@@ -7,11 +7,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
{
class KHandleTable
{
- public const int SelfThreadHandle = (0x1ffff << 15) | 0;
+ public const int SelfThreadHandle = (0x1ffff << 15) | 0;
public const int SelfProcessHandle = (0x1ffff << 15) | 1;
- private readonly KernelContext _context;
-
private KHandleEntry[] _table;
private KHandleEntry _tableHead;
@@ -23,11 +21,6 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
private ushort _idCounter;
- public KHandleTable(KernelContext context)
- {
- _context = context;
- }
-
public Result Initialize(uint size)
{
if (size > 1024)
@@ -81,7 +74,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
_nextFreeEntry = entry.Next;
- entry.Obj = obj;
+ entry.Obj = obj;
entry.HandleId = _idCounter;
_activeSlotsCount++;
@@ -143,7 +136,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
{
KHandleEntry entry = _table[index];
- entry.Obj = null;
+ entry.Obj = null;
entry.Next = _nextFreeEntry;
_nextFreeEntry = entry;
@@ -154,14 +147,14 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
public void SetReservedHandleObj(int handle, KAutoObject obj)
{
- int index = (handle >> 0) & 0x7fff;
+ int index = (handle >> 0) & 0x7fff;
int handleId = (handle >> 15);
lock (_table)
{
KHandleEntry entry = _table[index];
- entry.Obj = obj;
+ entry.Obj = obj;
entry.HandleId = (ushort)handleId;
obj.IncrementReferenceCount();
@@ -177,7 +170,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
return false;
}
- int index = (handle >> 0) & 0x7fff;
+ int index = (handle >> 0) & 0x7fff;
int handleId = (handle >> 15);
KAutoObject obj = null;
@@ -192,7 +185,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
if ((obj = entry.Obj) != null && entry.HandleId == handleId)
{
- entry.Obj = null;
+ entry.Obj = null;
entry.Next = _nextFreeEntry;
_nextFreeEntry = entry;
@@ -214,7 +207,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
public T GetObject<T>(int handle) where T : KAutoObject
{
- int index = (handle >> 0) & 0x7fff;
+ int index = (handle >> 0) & 0x7fff;
int handleId = (handle >> 15);
lock (_table)
@@ -273,7 +266,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
}
entry.Obj.DecrementReferenceCount();
- entry.Obj = null;
+ entry.Obj = null;
entry.Next = _nextFreeEntry;
_nextFreeEntry = entry;
@@ -282,4 +275,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
}
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs b/src/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs
index c284243a..6008548b 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs
@@ -27,8 +27,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
public KPageTableBase MemoryManager { get; private set; }
- private SortedDictionary<ulong, KTlsPageInfo> _fullTlsPages;
- private SortedDictionary<ulong, KTlsPageInfo> _freeTlsPages;
+ private readonly SortedDictionary<ulong, KTlsPageInfo> _fullTlsPages;
+ private readonly SortedDictionary<ulong, KTlsPageInfo> _freeTlsPages;
public int DefaultCpuCore { get; set; }
@@ -66,19 +66,17 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
public bool IsApplication { get; private set; }
public ulong Pid { get; private set; }
- private long _creationTimestamp;
private ulong _entrypoint;
private ThreadStart _customThreadStart;
private ulong _imageSize;
private ulong _mainThreadStackSize;
private ulong _memoryUsageCapacity;
- private int _version;
public KHandleTable HandleTable { get; private set; }
public ulong UserExceptionContextAddress { get; private set; }
- private LinkedList<KThread> _threads;
+ private readonly LinkedList<KThread> _threads;
public bool IsPaused { get; private set; }
@@ -107,7 +105,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
PinnedThreads = new KThread[KScheduler.CpuCoresCount];
// TODO: Remove once we no longer need to initialize it externally.
- HandleTable = new KHandleTable(context);
+ HandleTable = new KHandleTable();
_threads = new LinkedList<KThread>();
@@ -347,10 +345,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
State = ProcessState.Created;
- _creationTimestamp = PerformanceCounter.ElapsedMilliseconds;
-
Flags = creationInfo.Flags;
- _version = creationInfo.Version;
TitleId = creationInfo.TitleId;
_entrypoint = creationInfo.CodeAddress;
_imageSize = (ulong)creationInfo.CodePagesCount * KPageTableBase.PageSize;
@@ -370,8 +365,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
MemoryManager.AliasRegionEnd -
MemoryManager.AliasRegionStart;
break;
-
- default: throw new InvalidOperationException($"Invalid MMU flags value 0x{Flags:x2}.");
+ default:
+ throw new InvalidOperationException($"Invalid MMU flags value 0x{Flags:x2}.");
}
GenerateRandomEntropy();
@@ -476,9 +471,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
Result result = Result.Success;
- KTlsPageInfo pageInfo;
- if (_fullTlsPages.TryGetValue(tlsPageAddr, out pageInfo))
+ if (_fullTlsPages.TryGetValue(tlsPageAddr, out KTlsPageInfo pageInfo))
{
// TLS page was full, free slot and move to free pages tree.
_fullTlsPages.Remove(tlsPageAddr);
@@ -525,10 +519,12 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
return result;
}
+#pragma warning disable CA1822 // Mark member as static
private void GenerateRandomEntropy()
{
// TODO.
}
+#pragma warning restore CA1822
public Result Start(int mainThreadPriority, ulong stackSize)
{
@@ -549,7 +545,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
if (_mainThreadStackSize != 0)
{
- throw new InvalidOperationException("Trying to start a process with a invalid state!");
+ throw new InvalidOperationException("Trying to start a process with an invalid state!");
}
ulong stackSizeRounded = BitUtils.AlignUp<ulong>(stackSize, KPageTableBase.PageSize);
@@ -648,7 +644,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
return result;
}
- HandleTable = new KHandleTable(KernelContext);
+ HandleTable = new KHandleTable();
result = HandleTable.Initialize(Capabilities.HandleTableSize);
@@ -1018,22 +1014,19 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
}
}
- private void SignalExitToDebugTerminated()
+ private static void SignalExitToDebugTerminated()
{
// TODO: Debug events.
}
- private void SignalExitToDebugExited()
+ private static void SignalExitToDebugExited()
{
// TODO: Debug events.
}
private void SignalExit()
{
- if (ResourceLimit != null)
- {
- ResourceLimit.Release(LimitableResource.Memory, GetMemoryUsage());
- }
+ ResourceLimit?.Release(LimitableResource.Memory, GetMemoryUsage());
KernelContext.CriticalSection.Enter();
@@ -1075,7 +1068,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
ProcessCreationFlags.AddressSpace64BitDeprecated => 36,
ProcessCreationFlags.AddressSpace32BitWithoutAlias => 32,
ProcessCreationFlags.AddressSpace64Bit => 39,
- _ => 39
+ _ => 39,
};
bool for64Bit = flags.HasFlag(ProcessCreationFlags.Is64Bit);
@@ -1184,10 +1177,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
}
}
- public bool IsExceptionUserThread(KThread thread)
+ public static bool IsExceptionUserThread(KThread thread)
{
// TODO
return false;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs b/src/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs
index c99e3112..314aadf3 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs
@@ -11,13 +11,13 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
public byte[] SvcAccessMask { get; }
public byte[] IrqAccessMask { get; }
- public ulong AllowedCpuCoresMask { get; private set; }
+ public ulong AllowedCpuCoresMask { get; private set; }
public ulong AllowedThreadPriosMask { get; private set; }
- public uint DebuggingFlags { get; private set; }
- public uint HandleTableSize { get; private set; }
+ public uint DebuggingFlags { get; private set; }
+ public uint HandleTableSize { get; private set; }
public uint KernelReleaseVersion { get; private set; }
- public uint ApplicationType { get; private set; }
+ public uint ApplicationType { get; private set; }
public KProcessCapabilities()
{
@@ -28,10 +28,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
public Result InitializeForKernel(ReadOnlySpan<uint> capabilities, KPageTableBase memoryManager)
{
- AllowedCpuCoresMask = 0xf;
+ AllowedCpuCoresMask = 0xf;
AllowedThreadPriosMask = ulong.MaxValue;
- DebuggingFlags &= ~3u;
- KernelReleaseVersion = KProcess.KernelVersionPacked;
+ DebuggingFlags &= ~3u;
+ KernelReleaseVersion = KProcess.KernelVersionPacked;
return Parse(capabilities, memoryManager);
}
@@ -86,7 +86,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
}
long address = ((long)prevCap << 5) & 0xffffff000;
- long size = ((long)cap << 5) & 0xfffff000;
+ long size = ((long)cap << 5) & 0xfffff000;
if (((ulong)(address + size - 1) >> 36) != 0)
{
@@ -101,11 +101,11 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
if ((cap >> 31) != 0)
{
- result = memoryManager.MapNormalMemory(address, size, perm);
+ result = KPageTableBase.MapNormalMemory(address, size, perm);
}
else
{
- result = memoryManager.MapIoMemory(address, size, perm);
+ result = KPageTableBase.MapIoMemory(address, size, perm);
}
if (result != Result.Success)
@@ -144,168 +144,168 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
switch (code)
{
case CapabilityType.CorePriority:
- {
- if (AllowedCpuCoresMask != 0 || AllowedThreadPriosMask != 0)
{
- return KernelResult.InvalidCapability;
- }
+ if (AllowedCpuCoresMask != 0 || AllowedThreadPriosMask != 0)
+ {
+ return KernelResult.InvalidCapability;
+ }
- uint lowestCpuCore = (cap >> 16) & 0xff;
- uint highestCpuCore = (cap >> 24) & 0xff;
+ uint lowestCpuCore = (cap >> 16) & 0xff;
+ uint highestCpuCore = (cap >> 24) & 0xff;
- if (lowestCpuCore > highestCpuCore)
- {
- return KernelResult.InvalidCombination;
- }
+ if (lowestCpuCore > highestCpuCore)
+ {
+ return KernelResult.InvalidCombination;
+ }
- uint highestThreadPrio = (cap >> 4) & 0x3f;
- uint lowestThreadPrio = (cap >> 10) & 0x3f;
+ uint highestThreadPrio = (cap >> 4) & 0x3f;
+ uint lowestThreadPrio = (cap >> 10) & 0x3f;
- if (lowestThreadPrio > highestThreadPrio)
- {
- return KernelResult.InvalidCombination;
- }
+ if (lowestThreadPrio > highestThreadPrio)
+ {
+ return KernelResult.InvalidCombination;
+ }
- if (highestCpuCore >= KScheduler.CpuCoresCount)
- {
- return KernelResult.InvalidCpuCore;
- }
+ if (highestCpuCore >= KScheduler.CpuCoresCount)
+ {
+ return KernelResult.InvalidCpuCore;
+ }
- AllowedCpuCoresMask = GetMaskFromMinMax(lowestCpuCore, highestCpuCore);
- AllowedThreadPriosMask = GetMaskFromMinMax(lowestThreadPrio, highestThreadPrio);
+ AllowedCpuCoresMask = GetMaskFromMinMax(lowestCpuCore, highestCpuCore);
+ AllowedThreadPriosMask = GetMaskFromMinMax(lowestThreadPrio, highestThreadPrio);
- break;
- }
+ break;
+ }
case CapabilityType.SyscallMask:
- {
- int slot = ((int)cap >> 29) & 7;
+ {
+ int slot = ((int)cap >> 29) & 7;
- int svcSlotMask = 1 << slot;
+ int svcSlotMask = 1 << slot;
- if ((mask1 & svcSlotMask) != 0)
- {
- return KernelResult.InvalidCombination;
- }
+ if ((mask1 & svcSlotMask) != 0)
+ {
+ return KernelResult.InvalidCombination;
+ }
- mask1 |= svcSlotMask;
+ mask1 |= svcSlotMask;
- uint svcMask = (cap >> 5) & 0xffffff;
+ uint svcMask = (cap >> 5) & 0xffffff;
- int baseSvc = slot * 24;
+ int baseSvc = slot * 24;
- for (int index = 0; index < 24; index++)
- {
- if (((svcMask >> index) & 1) == 0)
+ for (int index = 0; index < 24; index++)
{
- continue;
- }
+ if (((svcMask >> index) & 1) == 0)
+ {
+ continue;
+ }
- int svcId = baseSvc + index;
+ int svcId = baseSvc + index;
- if (svcId >= KernelConstants.SupervisorCallCount)
- {
- return KernelResult.MaximumExceeded;
+ if (svcId >= KernelConstants.SupervisorCallCount)
+ {
+ return KernelResult.MaximumExceeded;
+ }
+
+ SvcAccessMask[svcId / 8] |= (byte)(1 << (svcId & 7));
}
- SvcAccessMask[svcId / 8] |= (byte)(1 << (svcId & 7));
+ break;
}
- break;
- }
-
case CapabilityType.MapIoPage:
- {
- long address = ((long)cap << 4) & 0xffffff000;
+ {
+ long address = ((long)cap << 4) & 0xffffff000;
- memoryManager.MapIoMemory(address, KPageTableBase.PageSize, KMemoryPermission.ReadAndWrite);
+ KPageTableBase.MapIoMemory(address, KPageTableBase.PageSize, KMemoryPermission.ReadAndWrite);
- break;
- }
+ break;
+ }
case CapabilityType.MapRegion:
- {
- // TODO: Implement capabilities for MapRegion
+ {
+ // TODO: Implement capabilities for MapRegion
- break;
- }
+ break;
+ }
case CapabilityType.InterruptPair:
- {
- // TODO: GIC distributor check.
- int irq0 = ((int)cap >> 12) & 0x3ff;
- int irq1 = ((int)cap >> 22) & 0x3ff;
-
- if (irq0 != 0x3ff)
{
- IrqAccessMask[irq0 / 8] |= (byte)(1 << (irq0 & 7));
- }
+ // TODO: GIC distributor check.
+ int irq0 = ((int)cap >> 12) & 0x3ff;
+ int irq1 = ((int)cap >> 22) & 0x3ff;
- if (irq1 != 0x3ff)
- {
- IrqAccessMask[irq1 / 8] |= (byte)(1 << (irq1 & 7));
- }
+ if (irq0 != 0x3ff)
+ {
+ IrqAccessMask[irq0 / 8] |= (byte)(1 << (irq0 & 7));
+ }
- break;
- }
+ if (irq1 != 0x3ff)
+ {
+ IrqAccessMask[irq1 / 8] |= (byte)(1 << (irq1 & 7));
+ }
- case CapabilityType.ProgramType:
- {
- uint applicationType = (cap >> 14);
+ break;
+ }
- if (applicationType > 7)
+ case CapabilityType.ProgramType:
{
- return KernelResult.ReservedValue;
- }
+ uint applicationType = (cap >> 14);
+
+ if (applicationType > 7)
+ {
+ return KernelResult.ReservedValue;
+ }
- ApplicationType = applicationType;
+ ApplicationType = applicationType;
- break;
- }
+ break;
+ }
case CapabilityType.KernelVersion:
- {
- // Note: This check is bugged on kernel too, we are just replicating the bug here.
- if ((KernelReleaseVersion >> 17) != 0 || cap < 0x80000)
{
- return KernelResult.ReservedValue;
- }
+ // Note: This check is bugged on kernel too, we are just replicating the bug here.
+ if ((KernelReleaseVersion >> 17) != 0 || cap < 0x80000)
+ {
+ return KernelResult.ReservedValue;
+ }
- KernelReleaseVersion = cap;
+ KernelReleaseVersion = cap;
- break;
- }
+ break;
+ }
case CapabilityType.HandleTable:
- {
- uint handleTableSize = cap >> 26;
-
- if (handleTableSize > 0x3ff)
{
- return KernelResult.ReservedValue;
- }
+ uint handleTableSize = cap >> 26;
+
+ if (handleTableSize > 0x3ff)
+ {
+ return KernelResult.ReservedValue;
+ }
- HandleTableSize = handleTableSize;
+ HandleTableSize = handleTableSize;
- break;
- }
+ break;
+ }
case CapabilityType.DebugFlags:
- {
- uint debuggingFlags = cap >> 19;
-
- if (debuggingFlags > 3)
{
- return KernelResult.ReservedValue;
- }
+ uint debuggingFlags = cap >> 19;
- DebuggingFlags &= ~3u;
- DebuggingFlags |= debuggingFlags;
+ if (debuggingFlags > 3)
+ {
+ return KernelResult.ReservedValue;
+ }
- break;
- }
+ DebuggingFlags &= ~3u;
+ DebuggingFlags |= debuggingFlags;
- default: return KernelResult.InvalidCapability;
+ break;
+ }
+ default:
+ return KernelResult.InvalidCapability;
}
return Result.Success;
@@ -325,4 +325,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
return mask << (int)min;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Process/KTlsPageInfo.cs b/src/Ryujinx.HLE/HOS/Kernel/Process/KTlsPageInfo.cs
index f55e3c10..7fcd87b6 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Process/KTlsPageInfo.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Process/KTlsPageInfo.cs
@@ -74,4 +74,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
_isSlotFree[(address - PageVirtualAddress) / TlsEntrySize] = true;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Process/KTlsPageManager.cs b/src/Ryujinx.HLE/HOS/Kernel/Process/KTlsPageManager.cs
index 0fde495c..279fa13e 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Process/KTlsPageManager.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Process/KTlsPageManager.cs
@@ -7,14 +7,14 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
{
private const int TlsEntrySize = 0x200;
- private long _pagePosition;
+ private readonly long _pagePosition;
private int _usedSlots;
- private bool[] _slots;
+ private readonly bool[] _slots;
public bool IsEmpty => _usedSlots == 0;
- public bool IsFull => _usedSlots == _slots.Length;
+ public bool IsFull => _usedSlots == _slots.Length;
public KTlsPageManager(long pagePosition)
{
@@ -58,4 +58,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
_usedSlots--;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Process/ProcessCreationFlags.cs b/src/Ryujinx.HLE/HOS/Kernel/Process/ProcessCreationFlags.cs
index a79978ac..c68190d6 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Process/ProcessCreationFlags.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Process/ProcessCreationFlags.cs
@@ -1,8 +1,10 @@
using System;
+using System.Diagnostics.CodeAnalysis;
namespace Ryujinx.HLE.HOS.Kernel.Process
{
[Flags]
+ [SuppressMessage("Design", "CA1069: Enums values should not be duplicated")]
enum ProcessCreationFlags
{
Is64Bit = 1 << 0,
@@ -36,6 +38,6 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
IsApplication |
DeprecatedUseSecureMemory |
PoolPartitionMask |
- OptimizeMemoryAllocation
+ OptimizeMemoryAllocation,
}
}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Process/ProcessCreationInfo.cs b/src/Ryujinx.HLE/HOS/Kernel/Process/ProcessCreationInfo.cs
index c05bb574..b5e5c29b 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Process/ProcessCreationInfo.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Process/ProcessCreationInfo.cs
@@ -34,4 +34,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
SystemResourcePagesCount = systemResourcePagesCount;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Process/ProcessExecutionContext.cs b/src/Ryujinx.HLE/HOS/Kernel/Process/ProcessExecutionContext.cs
index 77fcdf33..b8118fbb 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Process/ProcessExecutionContext.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Process/ProcessExecutionContext.cs
@@ -7,9 +7,6 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
{
public ulong Pc => 0UL;
- public ulong CntfrqEl0 { get; set; }
- public ulong CntpctEl0 => 0UL;
-
public long TpidrEl0 { get; set; }
public long TpidrroEl0 { get; set; }
@@ -43,4 +40,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
{
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Process/ProcessState.cs b/src/Ryujinx.HLE/HOS/Kernel/Process/ProcessState.cs
index 5ef3077e..e6c7e33e 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Process/ProcessState.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Process/ProcessState.cs
@@ -2,13 +2,13 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
{
enum ProcessState : byte
{
- Created = 0,
+ Created = 0,
CreatedAttached = 1,
- Started = 2,
- Crashed = 3,
- Attached = 4,
- Exiting = 5,
- Exited = 6,
- DebugSuspended = 7
+ Started = 2,
+ Crashed = 3,
+ Attached = 4,
+ Exiting = 5,
+ Exited = 6,
+ DebugSuspended = 7,
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Process/ProcessTamperInfo.cs b/src/Ryujinx.HLE/HOS/Kernel/Process/ProcessTamperInfo.cs
index 4cf67172..8eafd96c 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Process/ProcessTamperInfo.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Process/ProcessTamperInfo.cs
@@ -13,12 +13,12 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
public ProcessTamperInfo(KProcess process, IEnumerable<string> buildIds, IEnumerable<ulong> codeAddresses, ulong heapAddress, ulong aliasAddress, ulong aslrAddress)
{
- Process = process;
- BuildIds = buildIds;
+ Process = process;
+ BuildIds = buildIds;
CodeAddresses = codeAddresses;
- HeapAddress = heapAddress;
- AliasAddress = aliasAddress;
- AslrAddress = aslrAddress;
+ HeapAddress = heapAddress;
+ AliasAddress = aliasAddress;
+ AslrAddress = aslrAddress;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/CodeMemoryOperation.cs b/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/CodeMemoryOperation.cs
index 511ee99a..09e159a8 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/CodeMemoryOperation.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/CodeMemoryOperation.cs
@@ -5,6 +5,6 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
Map,
MapToOwner,
Unmap,
- UnmapFromOwner
+ UnmapFromOwner,
};
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/InfoType.cs b/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/InfoType.cs
index 3cf7ba74..2ca0d03a 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/InfoType.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/InfoType.cs
@@ -29,6 +29,6 @@
IsApplication,
FreeThreadCount,
ThreadTickCount,
- MesosphereCurrentProcess = 65001
+ MesosphereCurrentProcess = 65001,
}
}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/MemoryInfo.cs b/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/MemoryInfo.cs
index a71cce1f..c900781e 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/MemoryInfo.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/MemoryInfo.cs
@@ -11,9 +11,9 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
public KMemoryPermission Permission;
public int IpcRefCount;
public int DeviceRefCount;
-#pragma warning disable CS0414
- private int _padding;
-#pragma warning restore CS0414
+#pragma warning disable CS0414, IDE0052 // Remove unread private member
+ private readonly int _padding;
+#pragma warning restore CS0414, IDE0052
public MemoryInfo(
ulong address,
@@ -34,4 +34,4 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
_padding = 0;
}
}
-} \ No newline at end of file
+}
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
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/SyscallHandler.cs b/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/SyscallHandler.cs
index 710bac94..72f90642 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/SyscallHandler.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/SyscallHandler.cs
@@ -41,4 +41,4 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
currentThread.HandlePostSyscall();
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/ThreadContext.cs b/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/ThreadContext.cs
index b524406a..fd1b41e3 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/ThreadContext.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/ThreadContext.cs
@@ -11,9 +11,9 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
public ulong Sp;
public ulong Pc;
public uint Pstate;
-#pragma warning disable CS0169
- private uint _padding;
-#pragma warning restore CS0169
+#pragma warning disable CS0169, IDE0051 // Remove unused private member
+ private readonly uint _padding;
+#pragma warning restore CS0169, IDE0051
public Array32<V128> FpuRegisters;
public uint Fpcr;
public uint Fpsr;
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Threading/ArbitrationType.cs b/src/Ryujinx.HLE/HOS/Kernel/Threading/ArbitrationType.cs
index 89c1bf1f..ddcf0202 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Threading/ArbitrationType.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Threading/ArbitrationType.cs
@@ -2,8 +2,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
{
enum ArbitrationType
{
- WaitIfLessThan = 0,
+ WaitIfLessThan = 0,
DecrementAndWaitIfLessThan = 1,
- WaitIfEqual = 2
+ WaitIfEqual = 2,
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Threading/KAddressArbiter.cs b/src/Ryujinx.HLE/HOS/Kernel/Threading/KAddressArbiter.cs
index 57fbabd5..f6b9a112 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Threading/KAddressArbiter.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Threading/KAddressArbiter.cs
@@ -38,7 +38,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
return KernelResult.ThreadTerminating;
}
- currentThread.SignaledObj = null;
+ currentThread.SignaledObj = null;
currentThread.ObjSyncResult = Result.Success;
KProcess currentProcess = KernelStatic.GetCurrentProcess();
@@ -66,7 +66,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
return KernelResult.InvalidHandle;
}
- currentThread.MutexAddress = mutexAddress;
+ currentThread.MutexAddress = mutexAddress;
currentThread.ThreadHandleForUserMutex = requesterHandle;
mutexOwner.AddMutexWaiter(currentThread);
@@ -76,10 +76,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
_context.CriticalSection.Leave();
_context.CriticalSection.Enter();
- if (currentThread.MutexOwner != null)
- {
- currentThread.MutexOwner.RemoveMutexWaiter(currentThread);
- }
+ currentThread.MutexOwner?.RemoveMutexWaiter(currentThread);
_context.CriticalSection.Leave();
@@ -103,7 +100,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
if (result != Result.Success && newOwnerThread != null)
{
- newOwnerThread.SignaledObj = null;
+ newOwnerThread.SignaledObj = null;
newOwnerThread.ObjSyncResult = result;
}
@@ -118,7 +115,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
KThread currentThread = KernelStatic.GetCurrentThread();
- currentThread.SignaledObj = null;
+ currentThread.SignaledObj = null;
currentThread.ObjSyncResult = KernelResult.TimedOut;
if (currentThread.TerminationRequested)
@@ -139,9 +136,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
return KernelResult.InvalidMemState;
}
- currentThread.MutexAddress = mutexAddress;
+ currentThread.MutexAddress = mutexAddress;
currentThread.ThreadHandleForUserMutex = threadHandle;
- currentThread.CondVarAddress = condVarAddress;
+ currentThread.CondVarAddress = condVarAddress;
_condVarThreads.Add(currentThread);
@@ -164,10 +161,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
_context.CriticalSection.Enter();
- if (currentThread.MutexOwner != null)
- {
- currentThread.MutexOwner.RemoveMutexWaiter(currentThread);
- }
+ currentThread.MutexOwner?.RemoveMutexWaiter(currentThread);
_condVarThreads.Remove(currentThread);
@@ -176,7 +170,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
return currentThread.ObjSyncResult;
}
- private (int, KThread) MutexUnlock(KThread currentThread, ulong mutexAddress)
+ private static (int, KThread) MutexUnlock(KThread currentThread, ulong mutexAddress)
{
KThread newOwnerThread = currentThread.RelinquishMutex(mutexAddress, out int count);
@@ -191,7 +185,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
mutexValue |= HasListenersMask;
}
- newOwnerThread.SignaledObj = null;
+ newOwnerThread.SignaledObj = null;
newOwnerThread.ObjSyncResult = Result.Success;
newOwnerThread.ReleaseAndResume();
@@ -223,7 +217,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
if (!currentProcess.CpuMemory.IsMapped(address))
{
// Invalid address.
- requester.SignaledObj = null;
+ requester.SignaledObj = null;
requester.ObjSyncResult = KernelResult.InvalidMemState;
return;
@@ -253,7 +247,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
if (mutexValue == 0)
{
// We now own the mutex.
- requester.SignaledObj = null;
+ requester.SignaledObj = null;
requester.ObjSyncResult = Result.Success;
requester.ReleaseAndResume();
@@ -273,7 +267,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
else
{
// Invalid mutex owner.
- requester.SignaledObj = null;
+ requester.SignaledObj = null;
requester.ObjSyncResult = KernelResult.InvalidHandle;
requester.ReleaseAndResume();
@@ -293,7 +287,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
return KernelResult.ThreadTerminating;
}
- currentThread.SignaledObj = null;
+ currentThread.SignaledObj = null;
currentThread.ObjSyncResult = KernelResult.TimedOut;
if (!KernelTransfer.UserToKernel(out int currentValue, address))
@@ -312,7 +306,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
return KernelResult.TimedOut;
}
- currentThread.MutexAddress = address;
+ currentThread.MutexAddress = address;
currentThread.WaitingInArbitration = true;
_arbiterThreads.Add(currentThread);
@@ -363,7 +357,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
return KernelResult.ThreadTerminating;
}
- currentThread.SignaledObj = null;
+ currentThread.SignaledObj = null;
currentThread.ObjSyncResult = KernelResult.TimedOut;
KProcess currentProcess = KernelStatic.GetCurrentProcess();
@@ -389,7 +383,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
return KernelResult.TimedOut;
}
- currentThread.MutexAddress = address;
+ currentThread.MutexAddress = address;
currentThread.WaitingInArbitration = true;
_arbiterThreads.Add(currentThread);
@@ -551,7 +545,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
{
static void RemoveArbiterThread(KThread thread)
{
- thread.SignaledObj = null;
+ thread.SignaledObj = null;
thread.ObjSyncResult = Result.Success;
thread.ReleaseAndResume();
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Threading/KConditionVariable.cs b/src/Ryujinx.HLE/HOS/Kernel/Threading/KConditionVariable.cs
index 891e632f..c6aa984c 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Threading/KConditionVariable.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Threading/KConditionVariable.cs
@@ -67,4 +67,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
context.CriticalSection.Leave();
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Threading/KCriticalSection.cs b/src/Ryujinx.HLE/HOS/Kernel/Threading/KCriticalSection.cs
index 1d61f2f0..3d674488 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Threading/KCriticalSection.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Threading/KCriticalSection.cs
@@ -61,4 +61,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
}
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Threading/KEvent.cs b/src/Ryujinx.HLE/HOS/Kernel/Threading/KEvent.cs
index da3e217b..65169d03 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Threading/KEvent.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Threading/KEvent.cs
@@ -7,8 +7,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
public KEvent(KernelContext context)
{
- ReadableEvent = new KReadableEvent(context, this);
+ ReadableEvent = new KReadableEvent(context);
WritableEvent = new KWritableEvent(context, this);
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Threading/KPriorityQueue.cs b/src/Ryujinx.HLE/HOS/Kernel/Threading/KPriorityQueue.cs
index 14fba704..1608db09 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Threading/KPriorityQueue.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Threading/KPriorityQueue.cs
@@ -68,7 +68,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
_prioMask &= ~(1L << _prio);
}
- public KThread Current => _node?.Value;
+ public readonly KThread Current => _node?.Value;
public bool MoveNext()
{
@@ -283,4 +283,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
return _scheduledThreadsPerPrioPerCore[prio][core];
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Threading/KReadableEvent.cs b/src/Ryujinx.HLE/HOS/Kernel/Threading/KReadableEvent.cs
index d9e7befa..6ed61f5a 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Threading/KReadableEvent.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Threading/KReadableEvent.cs
@@ -5,13 +5,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
{
class KReadableEvent : KSynchronizationObject
{
- private readonly KEvent _parent;
-
private bool _signaled;
- public KReadableEvent(KernelContext context, KEvent parent) : base(context)
+ public KReadableEvent(KernelContext context) : base(context)
{
- _parent = parent;
}
public override void Signal()
@@ -62,4 +59,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
return _signaled;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Threading/KScheduler.cs b/src/Ryujinx.HLE/HOS/Kernel/Threading/KScheduler.cs
index b9de7d9c..905c61d6 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Threading/KScheduler.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Threading/KScheduler.cs
@@ -9,11 +9,11 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
partial class KScheduler : IDisposable
{
public const int PrioritiesCount = 64;
- public const int CpuCoresCount = 4;
+ public const int CpuCoresCount = 4;
private const int RoundRobinTimeQuantumMs = 10;
- private static readonly int[] PreemptionPriorities = new int[] { 59, 59, 59, 63 };
+ private static readonly int[] _preemptionPriorities = { 59, 59, 59, 63 };
private static readonly int[] _srcCoresHighestPrioThreads = new int[CpuCoresCount];
@@ -59,7 +59,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
private KThread CreateIdleThread(KernelContext context, int cpuCore)
{
- KThread idleThread = new KThread(context);
+ KThread idleThread = new(context);
idleThread.Initialize(0UL, 0UL, 0UL, PrioritiesCount, cpuCore, null, ThreadType.Dummy, IdleThreadLoop);
@@ -95,7 +95,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
{
KThread candidate = thread.Owner.PinnedThreads[core];
- if (candidate.KernelWaitersCount == 0 && !thread.Owner.IsExceptionUserThread(candidate))
+ if (candidate.KernelWaitersCount == 0 && !KProcess.IsExceptionUserThread(candidate))
{
if (candidate.SchedFlags == ThreadSchedState.Running)
{
@@ -378,10 +378,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
currentThread.AddCpuTime(ticksDelta);
- if (currentProcess != null)
- {
- currentProcess.AddCpuTime(ticksDelta);
- }
+ currentProcess?.AddCpuTime(ticksDelta);
LastContextSwitchTime = currentTicks;
@@ -411,7 +408,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
for (int core = 0; core < CpuCoresCount; core++)
{
- RotateScheduledQueue(context, core, PreemptionPriorities[core]);
+ RotateScheduledQueue(context, core, _preemptionPriorities[core]);
}
context.CriticalSection.Leave();
@@ -431,7 +428,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
nextThread = context.PriorityQueue.Reschedule(prio, core, selectedThread);
}
- static KThread FirstSuitableCandidateOrDefault(KernelContext context, int core, KThread selectedThread, KThread nextThread, Predicate< KThread> predicate)
+ static KThread FirstSuitableCandidateOrDefault(KernelContext context, int core, KThread selectedThread, KThread nextThread, Predicate<KThread> predicate)
{
foreach (KThread suggested in context.PriorityQueue.SuggestedThreads(core))
{
@@ -651,11 +648,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
// Ensure that the idle thread is not blocked and can exit.
lock (_idleInterruptEventLock)
{
- if (_idleInterruptEvent != null)
- {
- _idleInterruptEvent.Set();
- }
+ _idleInterruptEvent?.Set();
}
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Threading/KSynchronization.cs b/src/Ryujinx.HLE/HOS/Kernel/Threading/KSynchronization.cs
index 9c196810..b1af06b0 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Threading/KSynchronization.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Threading/KSynchronization.cs
@@ -8,7 +8,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
{
class KSynchronization
{
- private KernelContext _context;
+ private readonly KernelContext _context;
public KSynchronization(KernelContext context)
{
@@ -68,8 +68,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
syncNodes[index] = syncObjs[index].AddWaitingThread(currentThread);
}
- currentThread.WaitingSync = true;
- currentThread.SignaledObj = null;
+ currentThread.WaitingSync = true;
+ currentThread.SignaledObj = null;
currentThread.ObjSyncResult = result;
currentThread.Reschedule(ThreadSchedState.Paused);
@@ -126,7 +126,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
if ((thread.SchedFlags & ThreadSchedState.LowMask) == ThreadSchedState.Paused)
{
- thread.SignaledObj = syncObj;
+ thread.SignaledObj = syncObj;
thread.ObjSyncResult = Result.Success;
thread.Reschedule(ThreadSchedState.Running);
@@ -139,4 +139,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
_context.CriticalSection.Leave();
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs b/src/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs
index 78bd577e..12383fb8 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs
@@ -68,10 +68,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
public LinkedListNode<KThread> ProcessListNode { get; set; }
- private LinkedList<KThread> _mutexWaiters;
+ private readonly LinkedList<KThread> _mutexWaiters;
private LinkedListNode<KThread> _mutexWaiterNode;
- private LinkedList<KThread> _pinnedWaiters;
+ private readonly LinkedList<KThread> _pinnedWaiters;
public KThread MutexOwner { get; private set; }
@@ -659,7 +659,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
const int MaxRegistersAArch32 = 15;
const int MaxFpuRegistersAArch32 = 16;
- ThreadContext context = new ThreadContext();
+ ThreadContext context = new();
if (Owner.Flags.HasFlag(ProcessCreationFlags.Is64Bit))
{
@@ -1433,4 +1433,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
Owner.CpuMemory.Write<ushort>(_tlsAddress + TlsUserInterruptFlagOffset, 0);
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Threading/KWritableEvent.cs b/src/Ryujinx.HLE/HOS/Kernel/Threading/KWritableEvent.cs
index b46122be..fd65361a 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Threading/KWritableEvent.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Threading/KWritableEvent.cs
@@ -22,4 +22,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
return _parent.ReadableEvent.Clear();
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Threading/SignalType.cs b/src/Ryujinx.HLE/HOS/Kernel/Threading/SignalType.cs
index e72b719b..9f257d98 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Threading/SignalType.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Threading/SignalType.cs
@@ -2,8 +2,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
{
enum SignalType
{
- Signal = 0,
+ Signal = 0,
SignalAndIncrementIfEqual = 1,
- SignalAndModifyIfEqual = 2
+ SignalAndModifyIfEqual = 2,
}
}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Threading/ThreadSchedState.cs b/src/Ryujinx.HLE/HOS/Kernel/Threading/ThreadSchedState.cs
index 1d09e021..eca412d0 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Threading/ThreadSchedState.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Threading/ThreadSchedState.cs
@@ -5,19 +5,19 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
[Flags]
enum ThreadSchedState : ushort
{
- LowMask = 0xf,
- HighMask = 0xfff0,
+ LowMask = 0xf,
+ HighMask = 0xfff0,
ForcePauseMask = 0x1f0,
- ProcessPauseFlag = 1 << 4,
- ThreadPauseFlag = 1 << 5,
+ ProcessPauseFlag = 1 << 4,
+ ThreadPauseFlag = 1 << 5,
ProcessDebugPauseFlag = 1 << 6,
- BacktracePauseFlag = 1 << 7,
- KernelInitPauseFlag = 1 << 8,
+ BacktracePauseFlag = 1 << 7,
+ KernelInitPauseFlag = 1 << 8,
- None = 0,
- Paused = 1,
- Running = 2,
- TerminationPending = 3
+ None = 0,
+ Paused = 1,
+ Running = 2,
+ TerminationPending = 3,
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Threading/ThreadType.cs b/src/Ryujinx.HLE/HOS/Kernel/Threading/ThreadType.cs
index 0b44b57f..83093570 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Threading/ThreadType.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Threading/ThreadType.cs
@@ -5,6 +5,6 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
Dummy,
Kernel,
Kernel2,
- User
+ User,
}
-} \ No newline at end of file
+}