[Ryujinx.HLE] Address dotnet-format issues (#5380)
* dotnet format style --severity info Some changes were manually reverted. * dotnet format analyzers --serverity info Some changes have been minimally adapted. * Restore a few unused methods and variables * Silence dotnet format IDE0060 warnings * Silence dotnet format IDE0052 warnings * Address or silence dotnet format IDE1006 warnings * Address dotnet format CA1816 warnings * Address or silence dotnet format CA2208 warnings * Address or silence dotnet format CA1806 and a few CA1854 warnings * Address dotnet format CA2211 warnings * Address dotnet format CA1822 warnings * Address or silence dotnet format CA1069 warnings * Make dotnet format succeed in style mode * Address or silence dotnet format CA2211 warnings * Address review comments * Address dotnet format CA2208 warnings properly * Make ProcessResult readonly * Address most dotnet format whitespace warnings * Apply dotnet format whitespace formatting A few of them have been manually reverted and the corresponding warning was silenced * Add previously silenced warnings back I have no clue how these disappeared * Revert formatting changes for while and for-loops * Format if-blocks correctly * Run dotnet format style after rebase * Run dotnet format whitespace after rebase * Run dotnet format style after rebase * Run dotnet format analyzers after rebase * Run dotnet format after rebase and remove unused usings - analyzers - style - whitespace * Disable 'prefer switch expression' rule * Add comments to disabled warnings * Fix a few disabled warnings * Fix naming rule violation, Convert shader properties to auto-property and convert values to const * Simplify properties and array initialization, Use const when possible, Remove trailing commas * Start working on disabled warnings * Fix and silence a few dotnet-format warnings again * Run dotnet format after rebase * Use using declaration instead of block syntax * Address IDE0251 warnings * Address a few disabled IDE0060 warnings * Silence IDE0060 in .editorconfig * Revert "Simplify properties and array initialization, Use const when possible, Remove trailing commas" This reverts commit 9462e4136c0a2100dc28b20cf9542e06790aa67e. * dotnet format whitespace after rebase * First dotnet format pass * Fix naming rule violations * Fix typo * Add trailing commas, use targeted new and use array initializer * Fix build issues * Fix remaining build issues * Remove SuppressMessage for CA1069 where possible * Address dotnet format issues * Address formatting issues Co-authored-by: Ac_K <acoustik666@gmail.com> * Add GetHashCode implementation for RenderingSurfaceInfo * Explicitly silence CA1822 for every affected method in Syscall * Address formatting issues in Demangler.cs * Address review feedback Co-authored-by: Ac_K <acoustik666@gmail.com> * Revert marking service methods as static * Next dotnet format pass * Address review feedback --------- Co-authored-by: Ac_K <acoustik666@gmail.com>
This commit is contained in:
parent
fec8291c17
commit
326749498b
1015 changed files with 8173 additions and 7615 deletions
|
@ -5,6 +5,6 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
|
|||
NotInitialized,
|
||||
Open,
|
||||
ClientDisconnected,
|
||||
ServerDisconnected
|
||||
ServerDisconnected,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,4 +13,4 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
|
|||
ClientSession = new KLightClientSession(context, this);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue