aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.HLE/HOS/Services/Ro
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.HLE/HOS/Services/Ro')
-rw-r--r--src/Ryujinx.HLE/HOS/Services/Ro/IRoInterface.cs52
-rw-r--r--src/Ryujinx.HLE/HOS/Services/Ro/ResultCode.cs30
-rw-r--r--src/Ryujinx.HLE/HOS/Services/Ro/Types/NroInfo.cs38
-rw-r--r--src/Ryujinx.HLE/HOS/Services/Ro/Types/NrrInfo.cs12
4 files changed, 65 insertions, 67 deletions
diff --git a/src/Ryujinx.HLE/HOS/Services/Ro/IRoInterface.cs b/src/Ryujinx.HLE/HOS/Services/Ro/IRoInterface.cs
index 966adcff..3f31fe9f 100644
--- a/src/Ryujinx.HLE/HOS/Services/Ro/IRoInterface.cs
+++ b/src/Ryujinx.HLE/HOS/Services/Ro/IRoInterface.cs
@@ -18,16 +18,16 @@ namespace Ryujinx.HLE.HOS.Services.Ro
[Service("ro:1")] // 7.0.0+
class IRoInterface : DisposableIpcService
{
- private const int MaxNrr = 0x40;
- private const int MaxNro = 0x40;
- private const int MaxMapRetries = 0x200;
+ private const int MaxNrr = 0x40;
+ private const int MaxNro = 0x40;
+ private const int MaxMapRetries = 0x200;
private const int GuardPagesSize = 0x4000;
private const uint NrrMagic = 0x3052524E;
private const uint NroMagic = 0x304F524E;
- private List<NrrInfo> _nrrInfos;
- private List<NroInfo> _nroInfos;
+ private readonly List<NrrInfo> _nrrInfos;
+ private readonly List<NroInfo> _nroInfos;
private KProcess _owner;
private IVirtualMemoryManager _ownerMm;
@@ -36,8 +36,8 @@ namespace Ryujinx.HLE.HOS.Services.Ro
{
_nrrInfos = new List<NrrInfo>(MaxNrr);
_nroInfos = new List<NroInfo>(MaxNro);
- _owner = null;
- _ownerMm = null;
+ _owner = null;
+ _ownerMm = null;
}
private ResultCode ParseNrr(out NrrInfo nrrInfo, ServiceCtx context, ulong nrrAddress, ulong nrrSize)
@@ -64,7 +64,7 @@ namespace Ryujinx.HLE.HOS.Services.Ro
return ResultCode.InvalidSize;
}
- List<byte[]> hashes = new List<byte[]>();
+ List<byte[]> hashes = new();
for (int i = 0; i < header.HashesCount; i++)
{
@@ -130,7 +130,7 @@ namespace Ryujinx.HLE.HOS.Services.Ro
return ResultCode.InvalidAddress;
}
- uint magic = _owner.CpuMemory.Read<uint>(nroAddress + 0x10);
+ uint magic = _owner.CpuMemory.Read<uint>(nroAddress + 0x10);
uint nroFileSize = _owner.CpuMemory.Read<uint>(nroAddress + 0x18);
if (magic != NroMagic || nroSize != nroFileSize)
@@ -142,7 +142,7 @@ namespace Ryujinx.HLE.HOS.Services.Ro
_owner.CpuMemory.Read(nroAddress, nroData);
- MemoryStream stream = new MemoryStream(nroData);
+ MemoryStream stream = new(nroData);
byte[] nroHash = SHA256.HashData(stream);
@@ -158,19 +158,19 @@ namespace Ryujinx.HLE.HOS.Services.Ro
stream.Position = 0;
- NroExecutable nro = new NroExecutable(stream.AsStorage(), nroAddress, bssAddress);
+ NroExecutable nro = new(stream.AsStorage(), nroAddress, bssAddress);
// Check if everything is page align.
if ((nro.Text.Length & 0xFFF) != 0 || (nro.Ro.Length & 0xFFF) != 0 ||
- (nro.Data.Length & 0xFFF) != 0 || (nro.BssSize & 0xFFF) != 0)
+ (nro.Data.Length & 0xFFF) != 0 || (nro.BssSize & 0xFFF) != 0)
{
return ResultCode.InvalidNro;
}
// Check if everything is contiguous.
- if (nro.RoOffset != nro.TextOffset + nro.Text.Length ||
- nro.DataOffset != nro.RoOffset + nro.Ro.Length ||
- nroFileSize != nro.DataOffset + nro.Data.Length)
+ if (nro.RoOffset != nro.TextOffset + nro.Text.Length ||
+ nro.DataOffset != nro.RoOffset + nro.Ro.Length ||
+ nroFileSize != nro.DataOffset + nro.Data.Length)
{
return ResultCode.InvalidNro;
}
@@ -316,7 +316,7 @@ namespace Ryujinx.HLE.HOS.Services.Ro
private Result SetNroMemoryPermissions(KProcess process, IExecutable relocatableObject, ulong baseAddress)
{
ulong textStart = baseAddress + relocatableObject.TextOffset;
- ulong roStart = baseAddress + relocatableObject.RoOffset;
+ ulong roStart = baseAddress + relocatableObject.RoOffset;
ulong dataStart = baseAddress + relocatableObject.DataOffset;
ulong bssStart = dataStart + (ulong)relocatableObject.Data.Length;
@@ -324,7 +324,7 @@ namespace Ryujinx.HLE.HOS.Services.Ro
ulong bssEnd = BitUtils.AlignUp<ulong>(bssStart + relocatableObject.BssSize, KPageTableBase.PageSize);
process.CpuMemory.Write(textStart, relocatableObject.Text);
- process.CpuMemory.Write(roStart, relocatableObject.Ro);
+ process.CpuMemory.Write(roStart, relocatableObject.Ro);
process.CpuMemory.Write(dataStart, relocatableObject.Data);
MemoryHelper.FillWithZeros(process.CpuMemory, bssStart, (int)(bssEnd - bssStart));
@@ -381,9 +381,9 @@ namespace Ryujinx.HLE.HOS.Services.Ro
private ResultCode UnmapNroFromInfo(NroInfo info)
{
ulong textSize = (ulong)info.Executable.Text.Length;
- ulong roSize = (ulong)info.Executable.Ro.Length;
+ ulong roSize = (ulong)info.Executable.Ro.Length;
ulong dataSize = (ulong)info.Executable.Data.Length;
- ulong bssSize = (ulong)info.Executable.BssSize;
+ ulong bssSize = (ulong)info.Executable.BssSize;
Result result = Result.Success;
@@ -434,17 +434,16 @@ namespace Ryujinx.HLE.HOS.Services.Ro
context.RequestData.ReadUInt64();
ulong nroHeapAddress = context.RequestData.ReadUInt64();
- ulong nroSize = context.RequestData.ReadUInt64();
+ ulong nroSize = context.RequestData.ReadUInt64();
ulong bssHeapAddress = context.RequestData.ReadUInt64();
- ulong bssSize = context.RequestData.ReadUInt64();
+ ulong bssSize = context.RequestData.ReadUInt64();
ulong nroMappedAddress = 0;
if (result == ResultCode.Success)
{
- NroInfo info;
- result = ParseNro(out info, context, nroHeapAddress, nroSize, bssHeapAddress, bssSize);
+ result = ParseNro(out NroInfo info, context, nroHeapAddress, nroSize, bssHeapAddress, bssSize);
if (result == ResultCode.Success)
{
@@ -503,12 +502,11 @@ namespace Ryujinx.HLE.HOS.Services.Ro
context.RequestData.ReadUInt64();
ulong nrrAddress = context.RequestData.ReadUInt64();
- ulong nrrSize = context.RequestData.ReadUInt64();
+ ulong nrrSize = context.RequestData.ReadUInt64();
if (result == ResultCode.Success)
{
- NrrInfo info;
- result = ParseNrr(out info, context, nrrAddress, nrrSize);
+ result = ParseNrr(out NrrInfo info, context, nrrAddress, nrrSize);
if (result == ResultCode.Success)
{
@@ -599,4 +597,4 @@ namespace Ryujinx.HLE.HOS.Services.Ro
}
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Services/Ro/ResultCode.cs b/src/Ryujinx.HLE/HOS/Services/Ro/ResultCode.cs
index 92bb5502..1e31e576 100644
--- a/src/Ryujinx.HLE/HOS/Services/Ro/ResultCode.cs
+++ b/src/Ryujinx.HLE/HOS/Services/Ro/ResultCode.cs
@@ -2,26 +2,26 @@
{
enum ResultCode
{
- ModuleId = 22,
+ ModuleId = 22,
ErrorCodeShift = 9,
Success = 0,
InsufficientAddressSpace = (2 << ErrorCodeShift) | ModuleId,
- AlreadyLoaded = (3 << ErrorCodeShift) | ModuleId,
- InvalidNro = (4 << ErrorCodeShift) | ModuleId,
- InvalidNrr = (6 << ErrorCodeShift) | ModuleId,
- TooManyNro = (7 << ErrorCodeShift) | ModuleId,
- TooManyNrr = (8 << ErrorCodeShift) | ModuleId,
- NotAuthorized = (9 << ErrorCodeShift) | ModuleId,
+ AlreadyLoaded = (3 << ErrorCodeShift) | ModuleId,
+ InvalidNro = (4 << ErrorCodeShift) | ModuleId,
+ InvalidNrr = (6 << ErrorCodeShift) | ModuleId,
+ TooManyNro = (7 << ErrorCodeShift) | ModuleId,
+ TooManyNrr = (8 << ErrorCodeShift) | ModuleId,
+ NotAuthorized = (9 << ErrorCodeShift) | ModuleId,
- InvalidNrrType = (10 << ErrorCodeShift) | ModuleId,
+ InvalidNrrType = (10 << ErrorCodeShift) | ModuleId,
- InvalidAddress = (1025 << ErrorCodeShift) | ModuleId,
- InvalidSize = (1026 << ErrorCodeShift) | ModuleId,
- NotLoaded = (1028 << ErrorCodeShift) | ModuleId,
- NotRegistered = (1029 << ErrorCodeShift) | ModuleId,
- InvalidSession = (1030 << ErrorCodeShift) | ModuleId,
- InvalidProcess = (1031 << ErrorCodeShift) | ModuleId,
+ InvalidAddress = (1025 << ErrorCodeShift) | ModuleId,
+ InvalidSize = (1026 << ErrorCodeShift) | ModuleId,
+ NotLoaded = (1028 << ErrorCodeShift) | ModuleId,
+ NotRegistered = (1029 << ErrorCodeShift) | ModuleId,
+ InvalidSession = (1030 << ErrorCodeShift) | ModuleId,
+ InvalidProcess = (1031 << ErrorCodeShift) | ModuleId,
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Services/Ro/Types/NroInfo.cs b/src/Ryujinx.HLE/HOS/Services/Ro/Types/NroInfo.cs
index 45daf1bd..fd4947c6 100644
--- a/src/Ryujinx.HLE/HOS/Services/Ro/Types/NroInfo.cs
+++ b/src/Ryujinx.HLE/HOS/Services/Ro/Types/NroInfo.cs
@@ -6,30 +6,30 @@ namespace Ryujinx.HLE.HOS.Services.Ro
{
public NroExecutable Executable { get; private set; }
- public byte[] Hash { get; private set; }
- public ulong NroAddress { get; private set; }
- public ulong NroSize { get; private set; }
- public ulong BssAddress { get; private set; }
- public ulong BssSize { get; private set; }
- public ulong TotalSize { get; private set; }
- public ulong NroMappedAddress { get; set; }
+ public byte[] Hash { get; private set; }
+ public ulong NroAddress { get; private set; }
+ public ulong NroSize { get; private set; }
+ public ulong BssAddress { get; private set; }
+ public ulong BssSize { get; private set; }
+ public ulong TotalSize { get; private set; }
+ public ulong NroMappedAddress { get; set; }
public NroInfo(
- NroExecutable executable,
- byte[] hash,
- ulong nroAddress,
- ulong nroSize,
- ulong bssAddress,
- ulong bssSize,
- ulong totalSize)
+ NroExecutable executable,
+ byte[] hash,
+ ulong nroAddress,
+ ulong nroSize,
+ ulong bssAddress,
+ ulong bssSize,
+ ulong totalSize)
{
Executable = executable;
- Hash = hash;
+ Hash = hash;
NroAddress = nroAddress;
- NroSize = nroSize;
+ NroSize = nroSize;
BssAddress = bssAddress;
- BssSize = bssSize;
- TotalSize = totalSize;
+ BssSize = bssSize;
+ TotalSize = totalSize;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.HLE/HOS/Services/Ro/Types/NrrInfo.cs b/src/Ryujinx.HLE/HOS/Services/Ro/Types/NrrInfo.cs
index 45c34f1c..b322c06e 100644
--- a/src/Ryujinx.HLE/HOS/Services/Ro/Types/NrrInfo.cs
+++ b/src/Ryujinx.HLE/HOS/Services/Ro/Types/NrrInfo.cs
@@ -4,15 +4,15 @@ namespace Ryujinx.HLE.HOS.Services.Ro
{
class NrrInfo
{
- public NrrHeader Header { get; private set; }
- public List<byte[]> Hashes { get; private set; }
- public ulong NrrAddress { get; private set; }
+ public NrrHeader Header { get; private set; }
+ public List<byte[]> Hashes { get; private set; }
+ public ulong NrrAddress { get; private set; }
public NrrInfo(ulong nrrAddress, NrrHeader header, List<byte[]> hashes)
{
NrrAddress = nrrAddress;
- Header = header;
- Hashes = hashes;
+ Header = header;
+ Hashes = hashes;
}
}
-} \ No newline at end of file
+}