diff options
Diffstat (limited to 'src/Ryujinx.HLE/HOS/Services/Ro')
-rw-r--r-- | src/Ryujinx.HLE/HOS/Services/Ro/IRoInterface.cs | 52 | ||||
-rw-r--r-- | src/Ryujinx.HLE/HOS/Services/Ro/ResultCode.cs | 30 | ||||
-rw-r--r-- | src/Ryujinx.HLE/HOS/Services/Ro/Types/NroInfo.cs | 38 | ||||
-rw-r--r-- | src/Ryujinx.HLE/HOS/Services/Ro/Types/NrrInfo.cs | 12 |
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 +} |