Initial support for the new 12.x IPC system (#2182)

* Rename CommandAttribute as CommandHIpcAttribute to prepare for 12.x changes

* Implement inital support for TIPC and adds SM command ids

* *Ipc to *ipc

* Missed a ref in last commit...

* CommandAttributeTIpc to CommandAttributeTipc

* Addresses comment and fixes some bugs around

TIPC doesn't have any padding requirements as buffer C isn't a thing
Fix for RegisterService inverting two argument only on TIPC
This commit is contained in:
Mary 2021-04-14 00:01:24 +02:00 committed by GitHub
parent faa654dbaf
commit 0746b83edf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
132 changed files with 1077 additions and 951 deletions

View file

@ -18,24 +18,28 @@ namespace Ryujinx.HLE.Exceptions
public ServiceCtx Context { get; }
public IpcMessage Request { get; }
public ServiceNotImplementedException(IpcService service, ServiceCtx context)
: this(service, context, "The service call is not implemented.")
private bool _isTipcCommand;
public ServiceNotImplementedException(IpcService service, ServiceCtx context, bool isTipcCommand)
: this(service, context, "The service call is not implemented.", isTipcCommand)
{ }
public ServiceNotImplementedException(IpcService service, ServiceCtx context, string message)
public ServiceNotImplementedException(IpcService service, ServiceCtx context, string message, bool isTipcCommand)
: base(message)
{
Service = service;
Context = context;
Request = context.Request;
_isTipcCommand = isTipcCommand;
}
public ServiceNotImplementedException(IpcService service, ServiceCtx context, string message, Exception inner)
public ServiceNotImplementedException(IpcService service, ServiceCtx context, string message, Exception inner, bool isTipcCommand)
: base(message, inner)
{
Service = service;
Context = context;
Request = context.Request;
_isTipcCommand = isTipcCommand;
}
protected ServiceNotImplementedException(SerializationInfo info, StreamingContext context)
@ -62,7 +66,7 @@ namespace Ryujinx.HLE.Exceptions
if (callingType != null && callingMethod != null)
{
var ipcCommands = Service.Commands;
var ipcCommands = _isTipcCommand ? Service.TipcCommands : Service.HipcCommands;
// Find the handler for the method called
var ipcHandler = ipcCommands.FirstOrDefault(x => x.Value == callingMethod);