From 08831eecf77cedd3c4192ebab5a9c485fb15d51e Mon Sep 17 00:00:00 2001 From: gdkchan <gab.dark.100@gmail.com> Date: Wed, 4 Jan 2023 19:15:45 -0300 Subject: IPC refactor part 3+4: New server HIPC message processor (#4188) * IPC refactor part 3 + 4: New server HIPC message processor with source generator based serialization * Make types match on calls to AlignUp/AlignDown * Formatting * Address some PR feedback * Move BitfieldExtensions to Ryujinx.Common.Utilities and consolidate implementations * Rename Reader/Writer to SpanReader/SpanWriter and move to Ryujinx.Common.Memory * Implement EventType * Address more PR feedback * Log request processing errors since they are not normal * Rename waitable to multiwait and add missing lock * PR feedback * Ac_K PR feedback --- .../HOS/Kernel/Ipc/KBufferDescriptorTable.cs | 62 +++++++++++----------- 1 file changed, 31 insertions(+), 31 deletions(-) (limited to 'Ryujinx.HLE/HOS/Kernel/Ipc/KBufferDescriptorTable.cs') diff --git a/Ryujinx.HLE/HOS/Kernel/Ipc/KBufferDescriptorTable.cs b/Ryujinx.HLE/HOS/Kernel/Ipc/KBufferDescriptorTable.cs index 5726299b..593d2c9d 100644 --- a/Ryujinx.HLE/HOS/Kernel/Ipc/KBufferDescriptorTable.cs +++ b/Ryujinx.HLE/HOS/Kernel/Ipc/KBufferDescriptorTable.cs @@ -1,6 +1,6 @@ using Ryujinx.Common; -using Ryujinx.HLE.HOS.Kernel.Common; using Ryujinx.HLE.HOS.Kernel.Memory; +using Ryujinx.Horizon.Common; using System.Collections.Generic; namespace Ryujinx.HLE.HOS.Kernel.Ipc @@ -20,38 +20,38 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc _exchangeBufferDescriptors = new List<KBufferDescriptor>(MaxInternalBuffersCount); } - public KernelResult AddSendBuffer(ulong src, ulong dst, ulong size, MemoryState state) + public Result AddSendBuffer(ulong src, ulong dst, ulong size, MemoryState state) { return Add(_sendBufferDescriptors, src, dst, size, state); } - public KernelResult AddReceiveBuffer(ulong src, ulong dst, ulong size, MemoryState state) + public Result AddReceiveBuffer(ulong src, ulong dst, ulong size, MemoryState state) { return Add(_receiveBufferDescriptors, src, dst, size, state); } - public KernelResult AddExchangeBuffer(ulong src, ulong dst, ulong size, MemoryState state) + public Result AddExchangeBuffer(ulong src, ulong dst, ulong size, MemoryState state) { return Add(_exchangeBufferDescriptors, src, dst, size, state); } - private KernelResult Add(List<KBufferDescriptor> list, ulong src, ulong dst, ulong size, MemoryState state) + private Result Add(List<KBufferDescriptor> list, ulong src, ulong dst, ulong size, MemoryState state) { if (list.Count < MaxInternalBuffersCount) { list.Add(new KBufferDescriptor(src, dst, size, state)); - return KernelResult.Success; + return Result.Success; } return KernelResult.OutOfMemory; } - public KernelResult CopyBuffersToClient(KPageTableBase memoryManager) + public Result CopyBuffersToClient(KPageTableBase memoryManager) { - KernelResult result = CopyToClient(memoryManager, _receiveBufferDescriptors); + Result result = CopyToClient(memoryManager, _receiveBufferDescriptors); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } @@ -59,7 +59,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc return CopyToClient(memoryManager, _exchangeBufferDescriptors); } - private KernelResult CopyToClient(KPageTableBase memoryManager, List<KBufferDescriptor> list) + private Result CopyToClient(KPageTableBase memoryManager, List<KBufferDescriptor> list) { foreach (KBufferDescriptor desc in list) { @@ -94,7 +94,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc copySize = desc.Size; } - KernelResult result = memoryManager.CopyDataFromCurrentProcess( + Result result = memoryManager.CopyDataFromCurrentProcess( desc.ClientAddress, copySize, stateMask, @@ -104,7 +104,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc MemoryAttribute.None, desc.ServerAddress); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } @@ -120,7 +120,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc if (clientEndAddrTruncated < clientEndAddrRounded && (clientAddrTruncated == clientAddrRounded || clientAddrTruncated < clientEndAddrTruncated)) { - KernelResult result = memoryManager.CopyDataFromCurrentProcess( + Result result = memoryManager.CopyDataFromCurrentProcess( clientEndAddrTruncated, clientEndAddr - clientEndAddrTruncated, stateMask, @@ -130,28 +130,28 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc MemoryAttribute.None, serverEndAddrTruncated); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } } } - return KernelResult.Success; + return Result.Success; } - public KernelResult UnmapServerBuffers(KPageTableBase memoryManager) + public Result UnmapServerBuffers(KPageTableBase memoryManager) { - KernelResult result = UnmapServer(memoryManager, _sendBufferDescriptors); + Result result = UnmapServer(memoryManager, _sendBufferDescriptors); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } result = UnmapServer(memoryManager, _receiveBufferDescriptors); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } @@ -159,36 +159,36 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc return UnmapServer(memoryManager, _exchangeBufferDescriptors); } - private KernelResult UnmapServer(KPageTableBase memoryManager, List<KBufferDescriptor> list) + private Result UnmapServer(KPageTableBase memoryManager, List<KBufferDescriptor> list) { foreach (KBufferDescriptor descriptor in list) { - KernelResult result = memoryManager.UnmapNoAttributeIfStateEquals( + Result result = memoryManager.UnmapNoAttributeIfStateEquals( descriptor.ServerAddress, descriptor.Size, descriptor.State); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } } - return KernelResult.Success; + return Result.Success; } - public KernelResult RestoreClientBuffers(KPageTableBase memoryManager) + public Result RestoreClientBuffers(KPageTableBase memoryManager) { - KernelResult result = RestoreClient(memoryManager, _sendBufferDescriptors); + Result result = RestoreClient(memoryManager, _sendBufferDescriptors); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } result = RestoreClient(memoryManager, _receiveBufferDescriptors); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } @@ -196,22 +196,22 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc return RestoreClient(memoryManager, _exchangeBufferDescriptors); } - private KernelResult RestoreClient(KPageTableBase memoryManager, List<KBufferDescriptor> list) + private Result RestoreClient(KPageTableBase memoryManager, List<KBufferDescriptor> list) { foreach (KBufferDescriptor descriptor in list) { - KernelResult result = memoryManager.UnmapIpcRestorePermission( + Result result = memoryManager.UnmapIpcRestorePermission( descriptor.ClientAddress, descriptor.Size, descriptor.State); - if (result != KernelResult.Success) + if (result != Result.Success) { return result; } } - return KernelResult.Success; + return Result.Success; } } } \ No newline at end of file -- cgit v1.2.3-70-g09d2