aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Ipc
diff options
context:
space:
mode:
authorTSR Berry <20988865+TSRBerry@users.noreply.github.com>2023-04-08 01:22:00 +0200
committerMary <thog@protonmail.com>2023-04-27 23:51:14 +0200
commitcee712105850ac3385cd0091a923438167433f9f (patch)
tree4a5274b21d8b7f938c0d0ce18736d3f2993b11b1 /Ryujinx.HLE/HOS/Ipc
parentcd124bda587ef09668a971fa1cac1c3f0cfc9f21 (diff)
Move solution and projects to src
Diffstat (limited to 'Ryujinx.HLE/HOS/Ipc')
-rw-r--r--Ryujinx.HLE/HOS/Ipc/IpcBuffDesc.cs27
-rw-r--r--Ryujinx.HLE/HOS/Ipc/IpcHandleDesc.cs93
-rw-r--r--Ryujinx.HLE/HOS/Ipc/IpcMagic.cs8
-rw-r--r--Ryujinx.HLE/HOS/Ipc/IpcMessage.cs283
-rw-r--r--Ryujinx.HLE/HOS/Ipc/IpcMessageType.cs13
-rw-r--r--Ryujinx.HLE/HOS/Ipc/IpcPtrBuffDesc.cs58
-rw-r--r--Ryujinx.HLE/HOS/Ipc/IpcRecvListBuffDesc.cs23
-rw-r--r--Ryujinx.HLE/HOS/Ipc/ServiceProcessRequest.cs4
8 files changed, 0 insertions, 509 deletions
diff --git a/Ryujinx.HLE/HOS/Ipc/IpcBuffDesc.cs b/Ryujinx.HLE/HOS/Ipc/IpcBuffDesc.cs
deleted file mode 100644
index b61d5697..00000000
--- a/Ryujinx.HLE/HOS/Ipc/IpcBuffDesc.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using System.IO;
-
-namespace Ryujinx.HLE.HOS.Ipc
-{
- struct IpcBuffDesc
- {
- public ulong Position { get; private set; }
- public ulong Size { get; private set; }
- public byte Flags { get; private set; }
-
- public IpcBuffDesc(BinaryReader reader)
- {
- ulong word0 = reader.ReadUInt32();
- ulong word1 = reader.ReadUInt32();
- ulong word2 = reader.ReadUInt32();
-
- Position = word1;
- Position |= (word2 << 4) & 0x0f00000000;
- Position |= (word2 << 34) & 0x7000000000;
-
- Size = word0;
- Size |= (word2 << 8) & 0xf00000000;
-
- Flags = (byte)(word2 & 3);
- }
- }
-} \ No newline at end of file
diff --git a/Ryujinx.HLE/HOS/Ipc/IpcHandleDesc.cs b/Ryujinx.HLE/HOS/Ipc/IpcHandleDesc.cs
deleted file mode 100644
index c7ef7e9c..00000000
--- a/Ryujinx.HLE/HOS/Ipc/IpcHandleDesc.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-using Microsoft.IO;
-using Ryujinx.Common;
-using Ryujinx.Common.Memory;
-using System;
-using System.IO;
-
-namespace Ryujinx.HLE.HOS.Ipc
-{
- class IpcHandleDesc
- {
- public bool HasPId { get; private set; }
-
- public ulong PId { get; private set; }
-
- public int[] ToCopy { get; private set; }
- public int[] ToMove { get; private set; }
-
- public IpcHandleDesc(BinaryReader reader)
- {
- int word = reader.ReadInt32();
-
- HasPId = (word & 1) != 0;
-
- PId = HasPId ? reader.ReadUInt64() : 0;
-
- int toCopySize = (word >> 1) & 0xf;
- int[] toCopy = toCopySize == 0 ? Array.Empty<int>() : new int[toCopySize];
-
- for (int index = 0; index < toCopy.Length; index++)
- {
- toCopy[index] = reader.ReadInt32();
- }
-
- ToCopy = toCopy;
-
- int toMoveSize = (word >> 5) & 0xf;
- int[] toMove = toMoveSize == 0 ? Array.Empty<int>() : new int[toMoveSize];
-
- for (int index = 0; index < toMove.Length; index++)
- {
- toMove[index] = reader.ReadInt32();
- }
-
- ToMove = toMove;
- }
-
- public IpcHandleDesc(int[] copy, int[] move)
- {
- ToCopy = copy ?? throw new ArgumentNullException(nameof(copy));
- ToMove = move ?? throw new ArgumentNullException(nameof(move));
- }
-
- public IpcHandleDesc(int[] copy, int[] move, ulong pId) : this(copy, move)
- {
- PId = pId;
-
- HasPId = true;
- }
-
- public static IpcHandleDesc MakeCopy(params int[] handles)
- {
- return new IpcHandleDesc(handles, Array.Empty<int>());
- }
-
- public static IpcHandleDesc MakeMove(params int[] handles)
- {
- return new IpcHandleDesc(Array.Empty<int>(), handles);
- }
-
- public RecyclableMemoryStream GetStream()
- {
- RecyclableMemoryStream ms = MemoryStreamManager.Shared.GetStream();
-
- int word = HasPId ? 1 : 0;
-
- word |= (ToCopy.Length & 0xf) << 1;
- word |= (ToMove.Length & 0xf) << 5;
-
- ms.Write(word);
-
- if (HasPId)
- {
- ms.Write(PId);
- }
-
- ms.Write(ToCopy);
- ms.Write(ToMove);
-
- ms.Position = 0;
- return ms;
- }
- }
-} \ No newline at end of file
diff --git a/Ryujinx.HLE/HOS/Ipc/IpcMagic.cs b/Ryujinx.HLE/HOS/Ipc/IpcMagic.cs
deleted file mode 100644
index 72770b90..00000000
--- a/Ryujinx.HLE/HOS/Ipc/IpcMagic.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Ryujinx.HLE.HOS.Ipc
-{
- abstract class IpcMagic
- {
- public const long Sfci = 'S' << 0 | 'F' << 8 | 'C' << 16 | 'I' << 24;
- public const long Sfco = 'S' << 0 | 'F' << 8 | 'C' << 16 | 'O' << 24;
- }
-} \ No newline at end of file
diff --git a/Ryujinx.HLE/HOS/Ipc/IpcMessage.cs b/Ryujinx.HLE/HOS/Ipc/IpcMessage.cs
deleted file mode 100644
index 21630c42..00000000
--- a/Ryujinx.HLE/HOS/Ipc/IpcMessage.cs
+++ /dev/null
@@ -1,283 +0,0 @@
-using Microsoft.IO;
-using Ryujinx.Common;
-using Ryujinx.Common.Memory;
-using System;
-using System.Buffers;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-
-namespace Ryujinx.HLE.HOS.Ipc
-{
- class IpcMessage
- {
- public IpcMessageType Type { get; set; }
-
- public IpcHandleDesc HandleDesc { get; set; }
-
- public List<IpcPtrBuffDesc> PtrBuff { get; private set; }
- public List<IpcBuffDesc> SendBuff { get; private set; }
- public List<IpcBuffDesc> ReceiveBuff { get; private set; }
- public List<IpcBuffDesc> ExchangeBuff { get; private set; }
- public List<IpcRecvListBuffDesc> RecvListBuff { get; private set; }
-
- public List<int> ObjectIds { get; private set; }
-
- public byte[] RawData { get; set; }
-
- public IpcMessage()
- {
- PtrBuff = new List<IpcPtrBuffDesc>(0);
- SendBuff = new List<IpcBuffDesc>(0);
- ReceiveBuff = new List<IpcBuffDesc>(0);
- ExchangeBuff = new List<IpcBuffDesc>(0);
- RecvListBuff = new List<IpcRecvListBuffDesc>(0);
-
- ObjectIds = new List<int>(0);
- }
-
- public IpcMessage(ReadOnlySpan<byte> data, long cmdPtr)
- {
- using (RecyclableMemoryStream ms = MemoryStreamManager.Shared.GetStream(data))
- {
- BinaryReader reader = new BinaryReader(ms);
-
- int word0 = reader.ReadInt32();
- int word1 = reader.ReadInt32();
-
- Type = (IpcMessageType)(word0 & 0xffff);
-
- int ptrBuffCount = (word0 >> 16) & 0xf;
- int sendBuffCount = (word0 >> 20) & 0xf;
- int recvBuffCount = (word0 >> 24) & 0xf;
- int xchgBuffCount = (word0 >> 28) & 0xf;
-
- int rawDataSize = (word1 >> 0) & 0x3ff;
- int recvListFlags = (word1 >> 10) & 0xf;
- bool hndDescEnable = ((word1 >> 31) & 0x1) != 0;
-
- if (hndDescEnable)
- {
- HandleDesc = new IpcHandleDesc(reader);
- }
-
- PtrBuff = new List<IpcPtrBuffDesc>(ptrBuffCount);
-
- for (int index = 0; index < ptrBuffCount; index++)
- {
- PtrBuff.Add(new IpcPtrBuffDesc(reader));
- }
-
- static List<IpcBuffDesc> ReadBuff(BinaryReader reader, int count)
- {
- List<IpcBuffDesc> buff = new List<IpcBuffDesc>(count);
-
- for (int index = 0; index < count; index++)
- {
- buff.Add(new IpcBuffDesc(reader));
- }
-
- return buff;
- }
-
- SendBuff = ReadBuff(reader, sendBuffCount);
- ReceiveBuff = ReadBuff(reader, recvBuffCount);
- ExchangeBuff = ReadBuff(reader, xchgBuffCount);
-
- rawDataSize *= 4;
-
- long recvListPos = reader.BaseStream.Position + rawDataSize;
-
- // Only CMIF has the padding requirements.
- if (Type < IpcMessageType.TipcCloseSession)
- {
- long pad0 = GetPadSize16(reader.BaseStream.Position + cmdPtr);
-
- if (rawDataSize != 0)
- {
- rawDataSize -= (int)pad0;
- }
-
- reader.BaseStream.Seek(pad0, SeekOrigin.Current);
- }
-
- int recvListCount = recvListFlags - 2;
-
- if (recvListCount == 0)
- {
- recvListCount = 1;
- }
- else if (recvListCount < 0)
- {
- recvListCount = 0;
- }
-
- RawData = reader.ReadBytes(rawDataSize);
-
- reader.BaseStream.Seek(recvListPos, SeekOrigin.Begin);
-
- RecvListBuff = new List<IpcRecvListBuffDesc>(recvListCount);
-
- for (int index = 0; index < recvListCount; index++)
- {
- RecvListBuff.Add(new IpcRecvListBuffDesc(reader.ReadUInt64()));
- }
-
- ObjectIds = new List<int>(0);
- }
- }
-
- public RecyclableMemoryStream GetStream(long cmdPtr, ulong recvListAddr)
- {
- RecyclableMemoryStream ms = MemoryStreamManager.Shared.GetStream();
-
- int word0;
- int word1;
-
- word0 = (int)Type;
- word0 |= (PtrBuff.Count & 0xf) << 16;
- word0 |= (SendBuff.Count & 0xf) << 20;
- word0 |= (ReceiveBuff.Count & 0xf) << 24;
- word0 |= (ExchangeBuff.Count & 0xf) << 28;
-
- using RecyclableMemoryStream handleDataStream = HandleDesc?.GetStream();
-
- int dataLength = RawData?.Length ?? 0;
-
- dataLength = (dataLength + 3) & ~3;
-
- int rawLength = dataLength;
-
- int pad0 = (int)GetPadSize16(cmdPtr + 8 + (handleDataStream?.Length ?? 0) + PtrBuff.Count * 8);
-
- // Apparently, padding after Raw Data is 16 bytes, however when there is
- // padding before Raw Data too, we need to subtract the size of this padding.
- // This is the weirdest padding I've seen so far...
- int pad1 = 0x10 - pad0;
-
- dataLength = (dataLength + pad0 + pad1) / 4;
-
- word1 = (dataLength & 0x3ff) | (2 << 10);
-
- if (HandleDesc != null)
- {
- word1 |= 1 << 31;
- }
-
- ms.Write(word0);
- ms.Write(word1);
-
- if (handleDataStream != null)
- {
- ms.Write(handleDataStream);
- }
-
- foreach (IpcPtrBuffDesc ptrBuffDesc in PtrBuff)
- {
- ms.Write(ptrBuffDesc.GetWord0());
- ms.Write(ptrBuffDesc.GetWord1());
- }
-
- ms.WriteByte(0, pad0);
-
- if (RawData != null)
- {
- ms.Write(RawData);
- ms.WriteByte(0, rawLength - RawData.Length);
- }
-
- ms.WriteByte(0, pad1);
-
- ms.Write(recvListAddr);
-
- ms.Position = 0;
-
- return ms;
- }
-
- public RecyclableMemoryStream GetStreamTipc()
- {
- Debug.Assert(PtrBuff.Count == 0);
-
- RecyclableMemoryStream ms = MemoryStreamManager.Shared.GetStream();
-
- int word0;
- int word1;
-
- word0 = (int)Type;
- word0 |= (SendBuff.Count & 0xf) << 20;
- word0 |= (ReceiveBuff.Count & 0xf) << 24;
- word0 |= (ExchangeBuff.Count & 0xf) << 28;
-
- using RecyclableMemoryStream handleDataStream = HandleDesc?.GetStream();
-
- int dataLength = RawData?.Length ?? 0;
-
- dataLength = ((dataLength + 3) & ~3) / 4;
-
- word1 = (dataLength & 0x3ff);
-
- if (HandleDesc != null)
- {
- word1 |= 1 << 31;
- }
-
- ms.Write(word0);
- ms.Write(word1);
-
- if (handleDataStream != null)
- {
- ms.Write(handleDataStream);
- }
-
- if (RawData != null)
- {
- ms.Write(RawData);
- }
-
- return ms;
- }
-
- private long GetPadSize16(long position)
- {
- if ((position & 0xf) != 0)
- {
- return 0x10 - (position & 0xf);
- }
-
- return 0;
- }
-
- // ReSharper disable once InconsistentNaming
- public (ulong Position, ulong Size) GetBufferType0x21(int index = 0)
- {
- if (PtrBuff.Count > index && PtrBuff[index].Position != 0)
- {
- return (PtrBuff[index].Position, PtrBuff[index].Size);
- }
-
- if (SendBuff.Count > index)
- {
- return (SendBuff[index].Position, SendBuff[index].Size);
- }
-
- return (0, 0);
- }
-
- // ReSharper disable once InconsistentNaming
- public (ulong Position, ulong Size) GetBufferType0x22(int index = 0)
- {
- if (RecvListBuff.Count > index && RecvListBuff[index].Position != 0)
- {
- return (RecvListBuff[index].Position, RecvListBuff[index].Size);
- }
-
- if (ReceiveBuff.Count > index)
- {
- return (ReceiveBuff[index].Position, ReceiveBuff[index].Size);
- }
-
- return (0, 0);
- }
- }
-}
diff --git a/Ryujinx.HLE/HOS/Ipc/IpcMessageType.cs b/Ryujinx.HLE/HOS/Ipc/IpcMessageType.cs
deleted file mode 100644
index 1c862248..00000000
--- a/Ryujinx.HLE/HOS/Ipc/IpcMessageType.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-namespace Ryujinx.HLE.HOS.Ipc
-{
- enum IpcMessageType
- {
- CmifResponse = 0,
- CmifCloseSession = 2,
- CmifRequest = 4,
- CmifControl = 5,
- CmifRequestWithContext = 6,
- CmifControlWithContext = 7,
- TipcCloseSession = 0xF
- }
-} \ No newline at end of file
diff --git a/Ryujinx.HLE/HOS/Ipc/IpcPtrBuffDesc.cs b/Ryujinx.HLE/HOS/Ipc/IpcPtrBuffDesc.cs
deleted file mode 100644
index 05798fe1..00000000
--- a/Ryujinx.HLE/HOS/Ipc/IpcPtrBuffDesc.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-using System.IO;
-
-namespace Ryujinx.HLE.HOS.Ipc
-{
- struct IpcPtrBuffDesc
- {
- public ulong Position { get; private set; }
- public uint Index { get; private set; }
- public ulong Size { get; private set; }
-
- public IpcPtrBuffDesc(ulong position, uint index, ulong size)
- {
- Position = position;
- Index = index;
- Size = size;
- }
-
- public IpcPtrBuffDesc(BinaryReader reader)
- {
- ulong word0 = reader.ReadUInt32();
- ulong word1 = reader.ReadUInt32();
-
- Position = word1;
- Position |= (word0 << 20) & 0x0f00000000;
- Position |= (word0 << 30) & 0x7000000000;
-
- Index = ((uint)word0 >> 0) & 0x03f;
- Index |= ((uint)word0 >> 3) & 0x1c0;
-
- Size = (ushort)(word0 >> 16);
- }
-
- public IpcPtrBuffDesc WithSize(ulong size)
- {
- return new IpcPtrBuffDesc(Position, Index, size);
- }
-
- public uint GetWord0()
- {
- uint word0;
-
- word0 = (uint)((Position & 0x0f00000000) >> 20);
- word0 |= (uint)((Position & 0x7000000000) >> 30);
-
- word0 |= (Index & 0x03f) << 0;
- word0 |= (Index & 0x1c0) << 3;
-
- word0 |= (uint)Size << 16;
-
- return word0;
- }
-
- public uint GetWord1()
- {
- return (uint)Position;
- }
- }
-} \ No newline at end of file
diff --git a/Ryujinx.HLE/HOS/Ipc/IpcRecvListBuffDesc.cs b/Ryujinx.HLE/HOS/Ipc/IpcRecvListBuffDesc.cs
deleted file mode 100644
index bcc9d8f8..00000000
--- a/Ryujinx.HLE/HOS/Ipc/IpcRecvListBuffDesc.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using System.IO;
-
-namespace Ryujinx.HLE.HOS.Ipc
-{
- struct IpcRecvListBuffDesc
- {
- public ulong Position { get; private set; }
- public ulong Size { get; private set; }
-
- public IpcRecvListBuffDesc(ulong position, ulong size)
- {
- Position = position;
- Size = size;
- }
-
- public IpcRecvListBuffDesc(ulong packedValue)
- {
- Position = packedValue & 0xffffffffffff;
-
- Size = (ushort)(packedValue >> 48);
- }
- }
-} \ No newline at end of file
diff --git a/Ryujinx.HLE/HOS/Ipc/ServiceProcessRequest.cs b/Ryujinx.HLE/HOS/Ipc/ServiceProcessRequest.cs
deleted file mode 100644
index b3aaa219..00000000
--- a/Ryujinx.HLE/HOS/Ipc/ServiceProcessRequest.cs
+++ /dev/null
@@ -1,4 +0,0 @@
-namespace Ryujinx.HLE.HOS.Ipc
-{
- delegate long ServiceProcessRequest(ServiceCtx context);
-} \ No newline at end of file