diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2020-09-22 01:50:40 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-09-22 14:50:40 +1000 |
| commit | 6c9565693fd87ae1af81ed63b5fbdde2a5dbecb8 (patch) | |
| tree | f7d87a5e4aff1b3f0b446bbcc710fcb89ffc288f /Ryujinx.HLE/HOS/Ipc/IpcHandler.cs | |
| parent | 5dd6f41ff456c2d9a72d9e6d88c4be851bac1f96 (diff) | |
IPC refactor part 1: Use explicit separate threads to process requests (#1447)
* Changes to allow explicit management of service threads
* Remove now unused code
* Remove ThreadCounter, its no longer needed
* Allow and use separate server per service, also fix exit issues
* New policy change: PTC version now uses PR number
Diffstat (limited to 'Ryujinx.HLE/HOS/Ipc/IpcHandler.cs')
| -rw-r--r-- | Ryujinx.HLE/HOS/Ipc/IpcHandler.cs | 149 |
1 files changed, 0 insertions, 149 deletions
diff --git a/Ryujinx.HLE/HOS/Ipc/IpcHandler.cs b/Ryujinx.HLE/HOS/Ipc/IpcHandler.cs deleted file mode 100644 index 43eb4a4e..00000000 --- a/Ryujinx.HLE/HOS/Ipc/IpcHandler.cs +++ /dev/null @@ -1,149 +0,0 @@ -using Ryujinx.Cpu; -using Ryujinx.HLE.HOS.Kernel.Common; -using Ryujinx.HLE.HOS.Kernel.Ipc; -using Ryujinx.HLE.HOS.Kernel.Process; -using Ryujinx.HLE.HOS.Kernel.Threading; -using System; -using System.IO; - -namespace Ryujinx.HLE.HOS.Ipc -{ - static class IpcHandler - { - public static KernelResult IpcCall( - Switch device, - KProcess process, - MemoryManager memory, - KThread thread, - KClientSession session, - IpcMessage request, - long cmdPtr) - { - IpcMessage response = new IpcMessage(); - - using (MemoryStream raw = new MemoryStream(request.RawData)) - { - BinaryReader reqReader = new BinaryReader(raw); - - if (request.Type == IpcMessageType.Request || - request.Type == IpcMessageType.RequestWithContext) - { - response.Type = IpcMessageType.Response; - - using (MemoryStream resMs = new MemoryStream()) - { - BinaryWriter resWriter = new BinaryWriter(resMs); - - ServiceCtx context = new ServiceCtx( - device, - process, - memory, - thread, - session, - request, - response, - reqReader, - resWriter); - - session.Service.CallMethod(context); - - response.RawData = resMs.ToArray(); - } - } - else if (request.Type == IpcMessageType.Control || - request.Type == IpcMessageType.ControlWithContext) - { - uint magic = (uint)reqReader.ReadUInt64(); - uint cmdId = (uint)reqReader.ReadUInt64(); - - switch (cmdId) - { - case 0: - { - request = FillResponse(response, 0, session.Service.ConvertToDomain()); - - break; - } - - case 3: - { - request = FillResponse(response, 0, 0x1000); - - break; - } - - // TODO: Whats the difference between IpcDuplicateSession/Ex? - case 2: - case 4: - { - int unknown = reqReader.ReadInt32(); - - if (process.HandleTable.GenerateHandle(session, out int handle) != KernelResult.Success) - { - throw new InvalidOperationException("Out of handles!"); - } - - response.HandleDesc = IpcHandleDesc.MakeMove(handle); - - request = FillResponse(response, 0); - - break; - } - - default: throw new NotImplementedException(cmdId.ToString()); - } - } - else if (request.Type == IpcMessageType.CloseSession) - { - // TODO - return KernelResult.PortRemoteClosed; - } - else - { - throw new NotImplementedException(request.Type.ToString()); - } - - memory.Write((ulong)cmdPtr, response.GetBytes(cmdPtr)); - } - - return KernelResult.Success; - } - - private static IpcMessage FillResponse(IpcMessage response, long result, params int[] values) - { - using (MemoryStream ms = new MemoryStream()) - { - BinaryWriter writer = new BinaryWriter(ms); - - foreach (int value in values) - { - writer.Write(value); - } - - return FillResponse(response, result, ms.ToArray()); - } - } - - private static IpcMessage FillResponse(IpcMessage response, long result, byte[] data = null) - { - response.Type = IpcMessageType.Response; - - using (MemoryStream ms = new MemoryStream()) - { - BinaryWriter writer = new BinaryWriter(ms); - - writer.Write(IpcMagic.Sfco); - writer.Write(result); - - if (data != null) - { - writer.Write(data); - } - - response.RawData = ms.ToArray(); - } - - return response; - } - } -} |
