diff options
Diffstat (limited to 'Ryujinx.HLE/HOS/Kernel/Memory')
-rw-r--r-- | Ryujinx.HLE/HOS/Kernel/Memory/KCodeMemory.cs | 43 | ||||
-rw-r--r-- | Ryujinx.HLE/HOS/Kernel/Memory/KMemoryBlockManager.cs | 6 | ||||
-rw-r--r-- | Ryujinx.HLE/HOS/Kernel/Memory/KMemoryRegionManager.cs | 18 | ||||
-rw-r--r-- | Ryujinx.HLE/HOS/Kernel/Memory/KPageList.cs | 6 | ||||
-rw-r--r-- | Ryujinx.HLE/HOS/Kernel/Memory/KPageTable.cs | 46 | ||||
-rw-r--r-- | Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs | 261 | ||||
-rw-r--r-- | Ryujinx.HLE/HOS/Kernel/Memory/KSharedMemory.cs | 5 | ||||
-rw-r--r-- | Ryujinx.HLE/HOS/Kernel/Memory/KTransferMemory.cs | 21 |
8 files changed, 205 insertions, 201 deletions
diff --git a/Ryujinx.HLE/HOS/Kernel/Memory/KCodeMemory.cs b/Ryujinx.HLE/HOS/Kernel/Memory/KCodeMemory.cs index 05cf4a4f..11474e49 100644 --- a/Ryujinx.HLE/HOS/Kernel/Memory/KCodeMemory.cs +++ b/Ryujinx.HLE/HOS/Kernel/Memory/KCodeMemory.cs @@ -1,6 +1,7 @@ using Ryujinx.Common; using Ryujinx.HLE.HOS.Kernel.Common; using Ryujinx.HLE.HOS.Kernel.Process; +using Ryujinx.Horizon.Common; using System; using System.Diagnostics; @@ -21,13 +22,13 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory _lock = new object(); } - public KernelResult Initialize(ulong address, ulong size) + public Result Initialize(ulong address, ulong size) { Owner = KernelStatic.GetCurrentProcess(); - KernelResult result = Owner.MemoryManager.BorrowCodeMemory(_pageList, address, size); + Result result = Owner.MemoryManager.BorrowCodeMemory(_pageList, address, size); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } @@ -39,10 +40,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory _isMapped = false; _isOwnerMapped = false; - return KernelResult.Success; + return Result.Success; } - public KernelResult Map(ulong address, ulong size, KMemoryPermission perm) + public Result Map(ulong address, ulong size, KMemoryPermission perm) { if (_pageList.GetPagesCount() != BitUtils.DivRoundUp<ulong>(size, (ulong)KPageTableBase.PageSize)) { @@ -58,9 +59,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory KProcess process = KernelStatic.GetCurrentProcess(); - KernelResult result = process.MemoryManager.MapPages(address, _pageList, MemoryState.CodeWritable, KMemoryPermission.ReadAndWrite); + Result result = process.MemoryManager.MapPages(address, _pageList, MemoryState.CodeWritable, KMemoryPermission.ReadAndWrite); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } @@ -68,10 +69,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory _isMapped = true; } - return KernelResult.Success; + return Result.Success; } - public KernelResult MapToOwner(ulong address, ulong size, KMemoryPermission permission) + public Result MapToOwner(ulong address, ulong size, KMemoryPermission permission) { if (_pageList.GetPagesCount() != BitUtils.DivRoundUp<ulong>(size, (ulong)KPageTableBase.PageSize)) { @@ -87,9 +88,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory Debug.Assert(permission == KMemoryPermission.Read || permission == KMemoryPermission.ReadAndExecute); - KernelResult result = Owner.MemoryManager.MapPages(address, _pageList, MemoryState.CodeReadOnly, permission); + Result result = Owner.MemoryManager.MapPages(address, _pageList, MemoryState.CodeReadOnly, permission); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } @@ -97,10 +98,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory _isOwnerMapped = true; } - return KernelResult.Success; + return Result.Success; } - public KernelResult Unmap(ulong address, ulong size) + public Result Unmap(ulong address, ulong size) { if (_pageList.GetPagesCount() != BitUtils.DivRoundUp<ulong>(size, (ulong)KPageTableBase.PageSize)) { @@ -111,9 +112,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory { KProcess process = KernelStatic.GetCurrentProcess(); - KernelResult result = process.MemoryManager.UnmapPages(address, _pageList, MemoryState.CodeWritable); + Result result = process.MemoryManager.UnmapPages(address, _pageList, MemoryState.CodeWritable); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } @@ -123,10 +124,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory _isMapped = false; } - return KernelResult.Success; + return Result.Success; } - public KernelResult UnmapFromOwner(ulong address, ulong size) + public Result UnmapFromOwner(ulong address, ulong size) { if (_pageList.GetPagesCount() != BitUtils.DivRoundUp<ulong>(size, KPageTableBase.PageSize)) { @@ -135,9 +136,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory lock (_lock) { - KernelResult result = Owner.MemoryManager.UnmapPages(address, _pageList, MemoryState.CodeReadOnly); + Result result = Owner.MemoryManager.UnmapPages(address, _pageList, MemoryState.CodeReadOnly); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } @@ -147,7 +148,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory _isOwnerMapped = false; } - return KernelResult.Success; + return Result.Success; } protected override void Destroy() @@ -156,7 +157,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory { ulong size = _pageList.GetPagesCount() * KPageTableBase.PageSize; - if (Owner.MemoryManager.UnborrowCodeMemory(_address, size, _pageList) != KernelResult.Success) + if (Owner.MemoryManager.UnborrowCodeMemory(_address, size, _pageList) != Result.Success) { throw new InvalidOperationException("Unexpected failure restoring transfer memory attributes."); } diff --git a/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryBlockManager.cs b/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryBlockManager.cs index 9cfdfda3..e9146aeb 100644 --- a/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryBlockManager.cs +++ b/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryBlockManager.cs @@ -1,5 +1,5 @@ using Ryujinx.Common.Collections; -using Ryujinx.HLE.HOS.Kernel.Common; +using Ryujinx.Horizon.Common; using System.Diagnostics; namespace Ryujinx.HLE.HOS.Kernel.Memory @@ -22,7 +22,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory _blockTree = new IntrusiveRedBlackTree<KMemoryBlock>(); } - public KernelResult Initialize(ulong addrSpaceStart, ulong addrSpaceEnd, KMemoryBlockSlabManager slabManager) + public Result Initialize(ulong addrSpaceStart, ulong addrSpaceEnd, KMemoryBlockSlabManager slabManager) { _slabManager = slabManager; _addrSpaceStart = addrSpaceStart; @@ -43,7 +43,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory KMemoryPermission.None, MemoryAttribute.None)); - return KernelResult.Success; + return Result.Success; } public void InsertBlock( diff --git a/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryRegionManager.cs b/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryRegionManager.cs index 43d48946..5e6273b8 100644 --- a/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryRegionManager.cs +++ b/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryRegionManager.cs @@ -1,4 +1,4 @@ -using Ryujinx.HLE.HOS.Kernel.Common; +using Ryujinx.Horizon.Common; using System.Diagnostics; namespace Ryujinx.HLE.HOS.Kernel.Memory @@ -25,20 +25,20 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory _pageHeap.UpdateUsedSize(); } - public KernelResult AllocatePages(out KPageList pageList, ulong pagesCount) + public Result AllocatePages(out KPageList pageList, ulong pagesCount) { if (pagesCount == 0) { pageList = new KPageList(); - return KernelResult.Success; + return Result.Success; } lock (_pageHeap) { - KernelResult result = AllocatePagesImpl(out pageList, pagesCount, false); + Result result = AllocatePagesImpl(out pageList, pagesCount, false); - if (result == KernelResult.Success) + if (result == Result.Success) { foreach (var node in pageList) { @@ -71,7 +71,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory } } - private KernelResult AllocatePagesImpl(out KPageList pageList, ulong pagesCount, bool random) + private Result AllocatePagesImpl(out KPageList pageList, ulong pagesCount, bool random) { pageList = new KPageList(); @@ -95,9 +95,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory break; } - KernelResult result = pageList.AddRange(allocatedBlock, pagesPerAlloc); + Result result = pageList.AddRange(allocatedBlock, pagesPerAlloc); - if (result != KernelResult.Success) + if (result != Result.Success) { FreePages(pageList); _pageHeap.Free(allocatedBlock, pagesPerAlloc); @@ -116,7 +116,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory return KernelResult.OutOfMemory; } - return KernelResult.Success; + return Result.Success; } private ulong AllocatePagesContiguousImpl(ulong pagesCount, ulong alignPages, bool random) diff --git a/Ryujinx.HLE/HOS/Kernel/Memory/KPageList.cs b/Ryujinx.HLE/HOS/Kernel/Memory/KPageList.cs index 7f2f1ba6..3149faa9 100644 --- a/Ryujinx.HLE/HOS/Kernel/Memory/KPageList.cs +++ b/Ryujinx.HLE/HOS/Kernel/Memory/KPageList.cs @@ -1,4 +1,4 @@ -using Ryujinx.HLE.HOS.Kernel.Common; +using Ryujinx.Horizon.Common; using System.Collections; using System.Collections.Generic; @@ -13,7 +13,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory Nodes = new LinkedList<KPageNode>(); } - public KernelResult AddRange(ulong address, ulong pagesCount) + public Result AddRange(ulong address, ulong pagesCount) { if (pagesCount != 0) { @@ -33,7 +33,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory Nodes.AddLast(new KPageNode(address, pagesCount)); } - return KernelResult.Success; + return Result.Success; } public ulong GetPagesCount() diff --git a/Ryujinx.HLE/HOS/Kernel/Memory/KPageTable.cs b/Ryujinx.HLE/HOS/Kernel/Memory/KPageTable.cs index 9d521231..9b7c99ba 100644 --- a/Ryujinx.HLE/HOS/Kernel/Memory/KPageTable.cs +++ b/Ryujinx.HLE/HOS/Kernel/Memory/KPageTable.cs @@ -1,4 +1,4 @@ -using Ryujinx.HLE.HOS.Kernel.Common; +using Ryujinx.Horizon.Common; using Ryujinx.Memory; using System; using System.Diagnostics; @@ -31,31 +31,31 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory } /// <inheritdoc/> - protected override KernelResult MapMemory(ulong src, ulong dst, ulong pagesCount, KMemoryPermission oldSrcPermission, KMemoryPermission newDstPermission) + protected override Result MapMemory(ulong src, ulong dst, ulong pagesCount, KMemoryPermission oldSrcPermission, KMemoryPermission newDstPermission) { KPageList pageList = new KPageList(); GetPhysicalRegions(src, pagesCount * PageSize, pageList); - KernelResult result = Reprotect(src, pagesCount, KMemoryPermission.None); + Result result = Reprotect(src, pagesCount, KMemoryPermission.None); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } result = MapPages(dst, pageList, newDstPermission, false, 0); - if (result != KernelResult.Success) + if (result != Result.Success) { - KernelResult reprotectResult = Reprotect(src, pagesCount, oldSrcPermission); - Debug.Assert(reprotectResult == KernelResult.Success); + Result reprotectResult = Reprotect(src, pagesCount, oldSrcPermission); + Debug.Assert(reprotectResult == Result.Success); } return result; } /// <inheritdoc/> - protected override KernelResult UnmapMemory(ulong dst, ulong src, ulong pagesCount, KMemoryPermission oldDstPermission, KMemoryPermission newSrcPermission) + protected override Result UnmapMemory(ulong dst, ulong src, ulong pagesCount, KMemoryPermission oldDstPermission, KMemoryPermission newSrcPermission) { ulong size = pagesCount * PageSize; @@ -70,26 +70,26 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory return KernelResult.InvalidMemRange; } - KernelResult result = Unmap(dst, pagesCount); + Result result = Unmap(dst, pagesCount); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } result = Reprotect(src, pagesCount, newSrcPermission); - if (result != KernelResult.Success) + if (result != Result.Success) { - KernelResult mapResult = MapPages(dst, dstPageList, oldDstPermission, false, 0); - Debug.Assert(mapResult == KernelResult.Success); + Result mapResult = MapPages(dst, dstPageList, oldDstPermission, false, 0); + Debug.Assert(mapResult == Result.Success); } return result; } /// <inheritdoc/> - protected override KernelResult MapPages(ulong dstVa, ulong pagesCount, ulong srcPa, KMemoryPermission permission, bool shouldFillPages, byte fillValue) + protected override Result MapPages(ulong dstVa, ulong pagesCount, ulong srcPa, KMemoryPermission permission, bool shouldFillPages, byte fillValue) { ulong size = pagesCount * PageSize; @@ -107,11 +107,11 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory _cpuMemory.Fill(dstVa, size, fillValue); } - return KernelResult.Success; + return Result.Success; } /// <inheritdoc/> - protected override KernelResult MapPages(ulong address, KPageList pageList, KMemoryPermission permission, bool shouldFillPages, byte fillValue) + protected override Result MapPages(ulong address, KPageList pageList, KMemoryPermission permission, bool shouldFillPages, byte fillValue) { using var scopedPageList = new KScopedPageList(Context.MemoryManager, pageList); @@ -136,11 +136,11 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory scopedPageList.SignalSuccess(); - return KernelResult.Success; + return Result.Success; } /// <inheritdoc/> - protected override KernelResult Unmap(ulong address, ulong pagesCount) + protected override Result Unmap(ulong address, ulong pagesCount) { KPageList pagesToClose = new KPageList(); @@ -159,21 +159,21 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory pagesToClose.DecrementPagesReferenceCount(Context.MemoryManager); - return KernelResult.Success; + return Result.Success; } /// <inheritdoc/> - protected override KernelResult Reprotect(ulong address, ulong pagesCount, KMemoryPermission permission) + protected override Result Reprotect(ulong address, ulong pagesCount, KMemoryPermission permission) { // TODO. - return KernelResult.Success; + return Result.Success; } /// <inheritdoc/> - protected override KernelResult ReprotectWithAttributes(ulong address, ulong pagesCount, KMemoryPermission permission) + protected override Result ReprotectWithAttributes(ulong address, ulong pagesCount, KMemoryPermission permission) { // TODO. - return KernelResult.Success; + return Result.Success; } /// <inheritdoc/> diff --git a/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs b/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs index 2c94cba2..e19e22c8 100644 --- a/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs +++ b/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs @@ -1,6 +1,7 @@ using Ryujinx.Common; using Ryujinx.HLE.HOS.Kernel.Common; using Ryujinx.HLE.HOS.Kernel.Process; +using Ryujinx.Horizon.Common; using System; using System.Collections.Generic; using System.Diagnostics; @@ -88,7 +89,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory private static readonly int[] AddrSpaceSizes = new int[] { 32, 36, 32, 39 }; - public KernelResult InitializeForProcess( + public Result InitializeForProcess( AddressSpaceType addrSpaceType, bool aslrEnabled, bool aslrDisabled, @@ -107,7 +108,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory ulong addrSpaceBase = 0; ulong addrSpaceSize = 1UL << AddrSpaceSizes[(int)addrSpaceType]; - KernelResult result = CreateUserAddressSpace( + Result result = CreateUserAddressSpace( addrSpaceType, aslrEnabled, aslrDisabled, @@ -118,7 +119,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory size, slabManager); - if (result != KernelResult.Success) + if (result != Result.Success) { Context.ContextIdManager.PutId(_contextId); } @@ -134,7 +135,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory public ulong AslrOffset; } - private KernelResult CreateUserAddressSpace( + private Result CreateUserAddressSpace( AddressSpaceType addrSpaceType, bool aslrEnabled, bool aslrDisabled, @@ -342,7 +343,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory } } - public KernelResult MapPages(ulong address, KPageList pageList, MemoryState state, KMemoryPermission permission) + public Result MapPages(ulong address, KPageList pageList, MemoryState state, KMemoryPermission permission) { ulong pagesCount = pageList.GetPagesCount(); @@ -365,9 +366,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory return KernelResult.OutOfResource; } - KernelResult result = MapPages(address, pageList, permission); + Result result = MapPages(address, pageList, permission); - if (result == KernelResult.Success) + if (result == Result.Success) { _blockManager.InsertBlock(address, pagesCount, state, permission); } @@ -376,7 +377,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory } } - public KernelResult UnmapPages(ulong address, KPageList pageList, MemoryState stateExpected) + public Result UnmapPages(ulong address, KPageList pageList, MemoryState stateExpected) { ulong pagesCount = pageList.GetPagesCount(); ulong size = pagesCount * PageSize; @@ -430,9 +431,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory return KernelResult.OutOfResource; } - KernelResult result = Unmap(address, pagesCount); + Result result = Unmap(address, pagesCount); - if (result == KernelResult.Success) + if (result == Result.Success) { _blockManager.InsertBlock(address, pagesCount, MemoryState.Unmapped); } @@ -446,19 +447,19 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory } } - public KernelResult MapNormalMemory(long address, long size, KMemoryPermission permission) + public Result MapNormalMemory(long address, long size, KMemoryPermission permission) { // TODO. - return KernelResult.Success; + return Result.Success; } - public KernelResult MapIoMemory(long address, long size, KMemoryPermission permission) + public Result MapIoMemory(long address, long size, KMemoryPermission permission) { // TODO. - return KernelResult.Success; + return Result.Success; } - public KernelResult MapPages( + public Result MapPages( ulong pagesCount, int alignment, ulong srcPa, @@ -497,7 +498,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory return KernelResult.OutOfResource; } - KernelResult result; + Result result; if (paIsValid) { @@ -508,7 +509,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory result = AllocateAndMapPages(address, pagesCount, permission); } - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } @@ -516,10 +517,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory _blockManager.InsertBlock(address, pagesCount, state, permission); } - return KernelResult.Success; + return Result.Success; } - public KernelResult MapPages(ulong address, ulong pagesCount, MemoryState state, KMemoryPermission permission) + public Result MapPages(ulong address, ulong pagesCount, MemoryState state, KMemoryPermission permission) { ulong size = pagesCount * PageSize; @@ -540,9 +541,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory return KernelResult.OutOfResource; } - KernelResult result = AllocateAndMapPages(address, pagesCount, permission); + Result result = AllocateAndMapPages(address, pagesCount, permission); - if (result == KernelResult.Success) + if (result == Result.Success) { _blockManager.InsertBlock(address, pagesCount, state, permission); } @@ -551,13 +552,13 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory } } - private KernelResult AllocateAndMapPages(ulong address, ulong pagesCount, KMemoryPermission permission) + private Result AllocateAndMapPages(ulong address, ulong pagesCount, KMemoryPermission permission) { KMemoryRegionManager region = GetMemoryRegionManager(); - KernelResult result = region.AllocatePages(out KPageList pageList, pagesCount); + Result result = region.AllocatePages(out KPageList pageList, pagesCount); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } @@ -567,7 +568,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory return MapPages(address, pageList, permission); } - public KernelResult MapProcessCodeMemory(ulong dst, ulong src, ulong size) + public Result MapProcessCodeMemory(ulong dst, ulong src, ulong size) { lock (_blockManager) { @@ -596,12 +597,12 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory ulong pagesCount = size / PageSize; - KernelResult result = MapMemory(src, dst, pagesCount, permission, KMemoryPermission.None); + Result result = MapMemory(src, dst, pagesCount, permission, KMemoryPermission.None); _blockManager.InsertBlock(src, pagesCount, state, KMemoryPermission.None, MemoryAttribute.Borrowed); _blockManager.InsertBlock(dst, pagesCount, MemoryState.ModCodeStatic); - return KernelResult.Success; + return Result.Success; } else { @@ -610,7 +611,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory } } - public KernelResult UnmapProcessCodeMemory(ulong dst, ulong src, ulong size) + public Result UnmapProcessCodeMemory(ulong dst, ulong src, ulong size) { lock (_blockManager) { @@ -656,9 +657,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory { ulong pagesCount = size / PageSize; - KernelResult result = Unmap(dst, pagesCount); + Result result = Unmap(dst, pagesCount); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } @@ -673,7 +674,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory _blockManager.InsertBlock(dst, pagesCount, MemoryState.Unmapped); _blockManager.InsertBlock(src, pagesCount, MemoryState.Heap, KMemoryPermission.ReadAndWrite); - return KernelResult.Success; + return Result.Success; } else { @@ -682,7 +683,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory } } - public KernelResult SetHeapSize(ulong size, out ulong address) + public Result SetHeapSize(ulong size, out ulong address) { address = 0; @@ -712,7 +713,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory KMemoryRegionManager region = GetMemoryRegionManager(); - KernelResult result = region.AllocatePages(out KPageList pageList, pagesCount); + Result result = region.AllocatePages(out KPageList pageList, pagesCount); using var _ = new OnScopeExit(() => pageList.DecrementPagesReferenceCount(Context.MemoryManager)); @@ -724,7 +725,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory } } - if (result != KernelResult.Success) + if (result != Result.Success) { CleanUpForError(); @@ -747,7 +748,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory result = MapPages(_currentHeapAddr, pageList, KMemoryPermission.ReadAndWrite, true, (byte)_heapFillValue); - if (result != KernelResult.Success) + if (result != Result.Success) { CleanUpForError(); @@ -786,9 +787,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory ulong pagesCount = sizeDelta / PageSize; - KernelResult result = Unmap(freeAddr, pagesCount); + Result result = Unmap(freeAddr, pagesCount); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } @@ -803,10 +804,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory address = HeapRegionStart; - return KernelResult.Success; + return Result.Success; } - public KernelResult SetMemoryPermission(ulong address, ulong size, KMemoryPermission permission) + public Result SetMemoryPermission(ulong address, ulong size, KMemoryPermission permission) { lock (_blockManager) { @@ -833,9 +834,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory ulong pagesCount = size / PageSize; - KernelResult result = Reprotect(address, pagesCount, permission); + Result result = Reprotect(address, pagesCount, permission); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } @@ -843,7 +844,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory _blockManager.InsertBlock(address, pagesCount, oldState, permission); } - return KernelResult.Success; + return Result.Success; } else { @@ -865,17 +866,17 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory return _currentHeapAddr - HeapRegionStart; } - public KernelResult SetHeapCapacity(ulong capacity) + public Result SetHeapCapacity(ulong capacity) { lock (_blockManager) { _heapCapacity = capacity; } - return KernelResult.Success; + return Result.Success; } - public KernelResult SetMemoryAttribute( + public Result SetMemoryAttribute( ulong address, ulong size, MemoryAttribute attributeMask, @@ -909,7 +910,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory _blockManager.InsertBlock(address, pagesCount, state, permission, attribute); - return KernelResult.Success; + return Result.Success; } else { @@ -942,7 +943,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory } } - public KernelResult Map(ulong dst, ulong src, ulong size) + public Result Map(ulong dst, ulong src, ulong size) { bool success; @@ -973,9 +974,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory ulong pagesCount = size / PageSize; - KernelResult result = MapMemory(src, dst, pagesCount, KMemoryPermission.ReadAndWrite, KMemoryPermission.ReadAndWrite); + Result result = MapMemory(src, dst, pagesCount, KMemoryPermission.ReadAndWrite, KMemoryPermission.ReadAndWrite); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } @@ -983,7 +984,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory _blockManager.InsertBlock(src, pagesCount, srcState, KMemoryPermission.None, MemoryAttribute.Borrowed); _blockManager.InsertBlock(dst, pagesCount, MemoryState.Stack, KMemoryPermission.ReadAndWrite); - return KernelResult.Success; + return Result.Success; } else { @@ -992,7 +993,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory } } - public KernelResult UnmapForKernel(ulong address, ulong pagesCount, MemoryState stateExpected) + public Result UnmapForKernel(ulong address, ulong pagesCount, MemoryState stateExpected) { ulong size = pagesCount * PageSize; @@ -1017,14 +1018,14 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory return KernelResult.OutOfResource; } - KernelResult result = Unmap(address, pagesCount); + Result result = Unmap(address, pagesCount); - if (result == KernelResult.Success) + if (result == Result.Success) { _blockManager.InsertBlock(address, pagesCount, MemoryState.Unmapped); } - return KernelResult.Success; + return Result.Success; } else { @@ -1033,7 +1034,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory } } - public KernelResult Unmap(ulong dst, ulong src, ulong size) + public Result Unmap(ulong dst, ulong src, ulong size) { bool success; @@ -1076,9 +1077,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory ulong pagesCount = size / PageSize; - KernelResult result = UnmapMemory(dst, src, pagesCount, dstPermission, KMemoryPermission.ReadAndWrite); + Result result = UnmapMemory(dst, src, pagesCount, dstPermission, KMemoryPermission.ReadAndWrite); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } @@ -1086,7 +1087,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory _blockManager.InsertBlock(src, pagesCount, srcState, KMemoryPermission.ReadAndWrite); _blockManager.InsertBlock(dst, pagesCount, MemoryState.Unmapped); - return KernelResult.Success; + return Result.Success; } else { @@ -1095,7 +1096,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory } } - public KernelResult UnmapProcessMemory(ulong dst, ulong size, KPageTableBase srcPageTable, ulong src) + public Result UnmapProcessMemory(ulong dst, ulong size, KPageTableBase srcPageTable, ulong src) { lock (_blockManager) { @@ -1153,20 +1154,20 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory ulong pagesCount = size / PageSize; - KernelResult result = Unmap(dst, pagesCount); + Result result = Unmap(dst, pagesCount); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } _blockManager.InsertBlock(dst, pagesCount, MemoryState.Unmapped); - return KernelResult.Success; + return Result.Success; } } - public KernelResult SetProcessMemoryPermission(ulong address, ulong size, KMemoryPermission permission) + public Result SetProcessMemoryPermission(ulong address, ulong size, KMemoryPermission permission) { lock (_blockManager) { @@ -1213,7 +1214,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory ulong pagesCount = size / PageSize; - KernelResult result; + Result result; if ((oldPermission & KMemoryPermission.Execute) != 0) { @@ -1224,7 +1225,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory result = Reprotect(address, pagesCount, permission); } - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } @@ -1232,7 +1233,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory _blockManager.InsertBlock(address, pagesCount, newState, permission); } - return KernelResult.Success; + return Result.Success; } else { @@ -1241,7 +1242,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory } } - public KernelResult MapPhysicalMemory(ulong address, ulong size) + public Result MapPhysicalMemory(ulong address, ulong size) { ulong endAddr = address + size; @@ -1259,7 +1260,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory if (mappedSize == size) { - return KernelResult.Success; + return Result.Success; } ulong remainingSize = size - mappedSize; @@ -1276,7 +1277,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory KMemoryRegionManager region = GetMemoryRegionManager(); - KernelResult result = region.AllocatePages(out KPageList pageList, remainingPages); + Result result = region.AllocatePages(out KPageList pageList, remainingPages); using var _ = new OnScopeExit(() => pageList.DecrementPagesReferenceCount(Context.MemoryManager)); @@ -1285,7 +1286,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory currentProcess.ResourceLimit?.Release(LimitableResource.Memory, remainingSize); } - if (result != KernelResult.Success) + if (result != Result.Success) { CleanUpForError(); @@ -1357,10 +1358,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory MemoryAttribute.None); } - return KernelResult.Success; + return Result.Success; } - public KernelResult UnmapPhysicalMemory(ulong address, ulong size) + public Result UnmapPhysicalMemory(ulong address, ulong size) { ulong endAddr = address + size; @@ -1391,7 +1392,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory if (heapMappedSize == 0) { - return KernelResult.Success; + return Result.Success; } if (!_slabManager.CanAllocate(MaxBlocksNeededForInsertion)) @@ -1400,7 +1401,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory } // Try to unmap all the heap mapped memory inside range. - KernelResult result = KernelResult.Success; + Result result = Result.Success; foreach (KMemoryInfo info in IterateOverRange(address, endAddr)) { @@ -1416,11 +1417,11 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory // The kernel would attempt to remap if this fails, but we don't because: // - The implementation may not support remapping if memory aliasing is not supported on the platform. // - Unmap can't ever fail here anyway. - Debug.Assert(result == KernelResult.Success); + Debug.Assert(result == Result.Success); } } - if (result == KernelResult.Success) + if (result == Result.Success) { PhysicalMemoryUsage -= heapMappedSize; @@ -1437,7 +1438,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory } } - public KernelResult CopyDataToCurrentProcess( + public Result CopyDataToCurrentProcess( ulong dst, ulong size, ulong src, @@ -1460,7 +1461,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory toServer: true); } - public KernelResult CopyDataFromCurrentProcess( + public Result CopyDataFromCurrentProcess( ulong dst, ulong size, MemoryState stateMask, @@ -1483,7 +1484,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory toServer: false); } - private KernelResult CopyDataFromOrToCurrentProcess( + private Result CopyDataFromOrToCurrentProcess( ulong size, ulong clientAddress, ulong serverAddress, @@ -1543,7 +1544,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory size -= copySize; } - return KernelResult.Success; + return Result.Success; } else { @@ -1552,7 +1553,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory } } - public KernelResult MapBufferFromClientProcess( + public Result MapBufferFromClientProcess( ulong size, ulong src, KPageTableBase srcPageTable, @@ -1567,14 +1568,14 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory { lock (_blockManager) { - KernelResult result = srcPageTable.ReprotectClientProcess( + Result result = srcPageTable.ReprotectClientProcess( src, size, permission, state, out int blocksNeeded); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } @@ -1590,7 +1591,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory result = MapPagesFromClientProcess(size, src, permission, state, srcPageTable, send, out ulong va); - if (result != KernelResult.Success) + if (result != Result.Success) { if (srcMapEndAddr > srcMapAddress) { @@ -1613,10 +1614,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory } } - return KernelResult.Success; + return Result.Success; } - private KernelResult ReprotectClientProcess( + private Result ReprotectClientProcess( ulong address, ulong size, KMemoryPermission permission, @@ -1689,8 +1690,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory ulong blockPagesCount = blockSize / PageSize; - KernelResult reprotectResult = Reprotect(blockAddress, blockPagesCount, info.Permission); - Debug.Assert(reprotectResult == KernelResult.Success); + Result reprotectResult = Reprotect(blockAddress, blockPagesCount, info.Permission); + Debug.Assert(reprotectResult == Result.Success); } } } @@ -1699,7 +1700,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory SignalMemoryTracking(addressTruncated, endAddrRounded - addressTruncated, false); // Reprotect the aligned pages range on the client to make them inaccessible from the client process. - KernelResult result; + Result result; if (addressRounded < endAddrTruncated) { @@ -1736,7 +1737,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory { result = Reprotect(blockAddress, blockPagesCount, permissionMask); - if (result != KernelResult.Success) + if (result != Result.Success) { CleanUpForError(); @@ -1748,10 +1749,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory } } - return KernelResult.Success; + return Result.Success; } - private KernelResult MapPagesFromClientProcess( + private Result MapPagesFromClientProcess( ulong size, ulong address, KMemoryPermission permission, @@ -1877,9 +1878,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory Context.Memory.Fill(GetDramAddressFromPa(firstPageFillAddress), unusedSizeAfter, (byte)_ipcFillValue); } - KernelResult result = MapPages(currentVa, 1, dstFirstPagePa, permission); + Result result = MapPages(currentVa, 1, dstFirstPagePa, permission); - if (result != KernelResult.Success) + if (result != Result.Success) { CleanUpForError(); @@ -1896,9 +1897,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory KPageList pageList = new KPageList(); srcPageTable.GetPhysicalRegions(addressRounded, alignedSize, pageList); - KernelResult result = MapPages(currentVa, pageList, permission); + Result result = MapPages(currentVa, pageList, permission); - if (result != KernelResult.Success) + if (result != Result.Success) { CleanUpForError(); @@ -1931,9 +1932,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory Context.Memory.Fill(GetDramAddressFromPa(lastPageFillAddr), unusedSizeAfter, (byte)_ipcFillValue); - KernelResult result = MapPages(currentVa, 1, dstLastPagePa, permission); + Result result = MapPages(currentVa, 1, dstLastPagePa, permission); - if (result != KernelResult.Success) + if (result != Result.Success) { CleanUpForError(); @@ -1945,10 +1946,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory dst = va + (address - addressTruncated); - return KernelResult.Success; + return Result.Success; } - public KernelResult UnmapNoAttributeIfStateEquals(ulong address, ulong size, MemoryState state) + public Result UnmapNoAttributeIfStateEquals(ulong address, ulong size, MemoryState state) { if (AddrSpaceStart > address) { @@ -1990,9 +1991,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory ulong pagesCount = (endAddrRounded - addressTruncated) / PageSize; - KernelResult result = Unmap(addressTruncated, pagesCount); + Result result = Unmap(addressTruncated, pagesCount); - if (result == KernelResult.Success) + if (result == Result.Success) { _blockManager.InsertBlock(addressTruncated, pagesCount, MemoryState.Unmapped); } @@ -2006,7 +2007,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory } } - public KernelResult UnmapIpcRestorePermission(ulong address, ulong size, MemoryState state) + public Result UnmapIpcRestorePermission(ulong address, ulong size, MemoryState state) { ulong endAddr = address + size; @@ -2019,7 +2020,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory if (pagesCount == 0) { - return KernelResult.Success; + return Result.Success; } MemoryState stateMask; @@ -2069,9 +2070,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory ulong blockPagesCount = blockSize / PageSize; - KernelResult result = Reprotect(blockAddress, blockPagesCount, info.SourcePermission); + Result result = Reprotect(blockAddress, blockPagesCount, info.SourcePermission); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } @@ -2080,7 +2081,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory _blockManager.InsertBlock(addressRounded, pagesCount, RestoreIpcMappingPermissions); - return KernelResult.Success; + return Result.Success; } } @@ -2094,7 +2095,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory block.RestoreIpcMappingPermission(); } - public KernelResult GetPagesIfStateEquals( + public Result GetPagesIfStateEquals( ulong address, ulong size, MemoryState stateMask, @@ -2128,7 +2129,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory { GetPhysicalRegions(address, size, pageList); - return KernelResult.Success; + return Result.Success; } else { @@ -2137,7 +2138,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory } } - public KernelResult BorrowIpcBuffer(ulong address, ulong size) + public Result BorrowIpcBuffer(ulong address, ulong size) { return SetAttributesAndChangePermission( address, @@ -2152,7 +2153,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory MemoryAttribute.Borrowed); } - public KernelResult BorrowTransferMemory(KPageList pageList, ulong address, ulong size, KMemoryPermission permission) + public Result BorrowTransferMemory(KPageList pageList, ulong address, ulong size, KMemoryPermission permission) { return SetAttributesAndChangePermission( address, @@ -2168,7 +2169,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory pageList); } - public KernelResult BorrowCodeMemory(KPageList pageList, ulong address, ulong size) + public Result BorrowCodeMemory(KPageList pageList, ulong address, ulong size) { return SetAttributesAndChangePermission( address, @@ -2184,7 +2185,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory pageList); } - private KernelResult SetAttributesAndChangePermission( + private Result SetAttributesAndChangePermission( ulong address, ulong size, MemoryState stateMask, @@ -2237,9 +2238,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory if (newPermission != oldPermission) { - KernelResult result = Reprotect(address, pagesCount, newPermission); + Result result = Reprotect(address, pagesCount, newPermission); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } @@ -2249,7 +2250,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory _blockManager.InsertBlock(address, pagesCount, oldState, newPermission, newAttribute); - return KernelResult.Success; + return Result.Success; } else { @@ -2258,7 +2259,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory } } - public KernelResult UnborrowIpcBuffer(ulong address, ulong size) + public Result UnborrowIpcBuffer(ulong address, ulong size) { return ClearAttributesAndChangePermission( address, @@ -2273,7 +2274,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory MemoryAttribute.Borrowed); } - public KernelResult UnborrowTransferMemory(ulong address, ulong size, KPageList pageList) + public Result UnborrowTransferMemory(ulong address, ulong size, KPageList pageList) { return ClearAttributesAndChangePermission( address, @@ -2289,7 +2290,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory pageList); } - public KernelResult UnborrowCodeMemory(ulong address, ulong size, KPageList pageList) + public Result UnborrowCodeMemory(ulong address, ulong size, KPageList pageList) { return ClearAttributesAndChangePermission( address, @@ -2305,7 +2306,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory pageList); } - private KernelResult ClearAttributesAndChangePermission( + private Result ClearAttributesAndChangePermission( ulong address, ulong size, MemoryState stateMask, @@ -2365,9 +2366,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory if (newPermission != oldPermission) { - KernelResult result = Reprotect(address, pagesCount, newPermission); + Result result = Reprotect(address, pagesCount, newPermission); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } @@ -2377,7 +2378,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory _blockManager.InsertBlock(address, pagesCount, oldState, newPermission, newAttribute); - return KernelResult.Success; + return Result.Success; } else { @@ -2915,7 +2916,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory /// <param name="oldSrcPermission">Current protection of the source memory region</param> /// <param name="newDstPermission">Desired protection for the destination memory region</param> /// <returns>Result of the mapping operation</returns> - protected abstract KernelResult MapMemory(ulong src, ulong dst, ulong pagesCount, KMemoryPermission oldSrcPermission, KMemoryPermission newDstPermission); + protected abstract Result MapMemory(ulong src, ulong dst, ulong pagesCount, KMemoryPermission oldSrcPermission, KMemoryPermission newDstPermission); /// <summary> /// Unmaps a region of memory that was previously mapped with <see cref="MapMemory"/>. @@ -2926,7 +2927,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory /// <param name="oldDstPermission">Current protection of the destination memory region</param> /// <param name="newSrcPermission">Desired protection of the source memory region</param> /// <returns>Result of the unmapping operation</returns> - protected abstract KernelResult UnmapMemory(ulong dst, ulong src, ulong pagesCount, KMemoryPermission oldDstPermission, KMemoryPermission newSrcPermission); + protected abstract Result UnmapMemory(ulong dst, ulong src, ulong pagesCount, KMemoryPermission oldDstPermission, KMemoryPermission newSrcPermission); /// <summary> /// Maps a region of memory into the specified physical memory region. @@ -2938,7 +2939,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory /// <param name="shouldFillPages">Indicate if the pages should be filled with the <paramref name="fillValue"/> value</param> /// <param name="fillValue">The value used to fill pages when <paramref name="shouldFillPages"/> is set to true</param> /// <returns>Result of the mapping operation</returns> - protected abstract KernelResult MapPages(ulong dstVa, ulong pagesCount, ulong srcPa, KMemoryPermission permission, bool shouldFillPages = false, byte fillValue = 0); + protected abstract Result MapPages(ulong dstVa, ulong pagesCount, ulong srcPa, KMemoryPermission permission, bool shouldFillPages = false, byte fillValue = 0); /// <summary> /// Maps a region of memory into the specified physical memory region. @@ -2949,7 +2950,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory /// <param name="shouldFillPages">Indicate if the pages should be filled with the <paramref name="fillValue"/> value</param> /// <param name="fillValue">The value used to fill pages when <paramref name="shouldFillPages"/> is set to true</param> /// <returns>Result of the mapping operation</returns> - protected abstract KernelResult MapPages(ulong address, KPageList pageList, KMemoryPermission permission, bool shouldFillPages = false, byte fillValue = 0); + protected abstract Result MapPages(ulong address, KPageList pageList, KMemoryPermission permission, bool shouldFillPages = false, byte fillValue = 0); /// <summary> /// Unmaps a region of memory that was previously mapped with one of the page mapping methods. @@ -2957,7 +2958,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory /// <param name="address">Virtual address of the region to unmap</param> /// <param name="pagesCount">Number of pages to unmap</param> /// <returns>Result of the unmapping operation</returns> - protected abstract KernelResult Unmap(ulong address, ulong pagesCount); + protected abstract Result Unmap(ulong address, ulong pagesCount); /// <summary> /// Changes the permissions of a given virtual memory region. @@ -2966,7 +2967,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory /// <param name="pagesCount">Number of pages to have their permissions changed</param> /// <param name="permission">New permission</param> /// <returns>Result of the permission change operation</returns> - protected abstract KernelResult Reprotect(ulong address, ulong pagesCount, KMemoryPermission permission); + protected abstract Result Reprotect(ulong address, ulong pagesCount, KMemoryPermission permission); /// <summary> /// Changes the permissions of a given virtual memory region. @@ -2975,7 +2976,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory /// <param name="pagesCount">Number of pages to have their permissions changed</param> /// <param name="permission">New permission</param> /// <returns>Result of the permission change operation</returns> - protected abstract KernelResult ReprotectWithAttributes(ulong address, ulong pagesCount, KMemoryPermission permission); + protected abstract Result ReprotectWithAttributes(ulong address, ulong pagesCount, KMemoryPermission permission); /// <summary> /// Alerts the memory tracking that a given region has been read from or written to. diff --git a/Ryujinx.HLE/HOS/Kernel/Memory/KSharedMemory.cs b/Ryujinx.HLE/HOS/Kernel/Memory/KSharedMemory.cs index 3af62750..2dbaf3cd 100644 --- a/Ryujinx.HLE/HOS/Kernel/Memory/KSharedMemory.cs +++ b/Ryujinx.HLE/HOS/Kernel/Memory/KSharedMemory.cs @@ -1,6 +1,7 @@ using Ryujinx.Common; using Ryujinx.HLE.HOS.Kernel.Common; using Ryujinx.HLE.HOS.Kernel.Process; +using Ryujinx.Horizon.Common; namespace Ryujinx.HLE.HOS.Kernel.Memory { @@ -26,7 +27,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory _userPermission = userPermission; } - public KernelResult MapIntoProcess( + public Result MapIntoProcess( KPageTableBase memoryManager, ulong address, ulong size, @@ -50,7 +51,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory return memoryManager.MapPages(address, _pageList, MemoryState.SharedMemory, permission); } - public KernelResult UnmapFromProcess(KPageTableBase memoryManager, ulong address, ulong size, KProcess process) + public Result UnmapFromProcess(KPageTableBase memoryManager, ulong address, ulong size, KProcess process) { if (_pageList.GetPagesCount() != BitUtils.DivRoundUp<ulong>(size, KPageTableBase.PageSize)) { diff --git a/Ryujinx.HLE/HOS/Kernel/Memory/KTransferMemory.cs b/Ryujinx.HLE/HOS/Kernel/Memory/KTransferMemory.cs index 2888efb8..b2449598 100644 --- a/Ryujinx.HLE/HOS/Kernel/Memory/KTransferMemory.cs +++ b/Ryujinx.HLE/HOS/Kernel/Memory/KTransferMemory.cs @@ -1,6 +1,7 @@ using Ryujinx.Common; using Ryujinx.HLE.HOS.Kernel.Common; using Ryujinx.HLE.HOS.Kernel.Process; +using Ryujinx.Horizon.Common; using System; namespace Ryujinx.HLE.HOS.Kernel.Memory @@ -36,15 +37,15 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory _isMapped = false; } - public KernelResult Initialize(ulong address, ulong size, KMemoryPermission permission) + public Result Initialize(ulong address, ulong size, KMemoryPermission permission) { KProcess creator = KernelStatic.GetCurrentProcess(); _creator = creator; - KernelResult result = creator.MemoryManager.BorrowTransferMemory(_pageList, address, size, permission); + Result result = creator.MemoryManager.BorrowTransferMemory(_pageList, address, size, permission); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } @@ -60,7 +61,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory return result; } - public KernelResult MapIntoProcess( + public Result MapIntoProcess( KPageTableBase memoryManager, ulong address, ulong size, @@ -79,9 +80,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory MemoryState state = Permission == KMemoryPermission.None ? MemoryState.TransferMemoryIsolated : MemoryState.TransferMemory; - KernelResult result = memoryManager.MapPages(address, _pageList, state, KMemoryPermission.ReadAndWrite); + Result result = memoryManager.MapPages(address, _pageList, state, KMemoryPermission.ReadAndWrite); - if (result == KernelResult.Success) + if (result == Result.Success) { _isMapped = true; } @@ -89,7 +90,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory return result; } - public KernelResult UnmapFromProcess( + public Result UnmapFromProcess( KPageTableBase memoryManager, ulong address, ulong size, @@ -102,9 +103,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory MemoryState state = Permission == KMemoryPermission.None ? MemoryState.TransferMemoryIsolated : MemoryState.TransferMemory; - KernelResult result = memoryManager.UnmapPages(address, _pageList, state); + Result result = memoryManager.UnmapPages(address, _pageList, state); - if (result == KernelResult.Success) + if (result == Result.Success) { _isMapped = false; } @@ -116,7 +117,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory { if (_hasBeenInitialized) { - if (!_isMapped && _creator.MemoryManager.UnborrowTransferMemory(Address, Size, _pageList) != KernelResult.Success) + if (!_isMapped && _creator.MemoryManager.UnborrowTransferMemory(Address, Size, _pageList) != Result.Success) { throw new InvalidOperationException("Unexpected failure restoring transfer memory attributes."); } |