diff options
Diffstat (limited to 'Ryujinx.HLE/HOS/Services/Vi/IHOSBinderDriver.cs')
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Vi/IHOSBinderDriver.cs | 53 |
1 files changed, 24 insertions, 29 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Vi/IHOSBinderDriver.cs b/Ryujinx.HLE/HOS/Services/Vi/IHOSBinderDriver.cs index adcedf4e..5583326f 100644 --- a/Ryujinx.HLE/HOS/Services/Vi/IHOSBinderDriver.cs +++ b/Ryujinx.HLE/HOS/Services/Vi/IHOSBinderDriver.cs @@ -4,30 +4,17 @@ using Ryujinx.HLE.HOS.Kernel.Common; using Ryujinx.HLE.HOS.Kernel.Threading; using Ryujinx.HLE.HOS.Services.Android; using System; -using System.Collections.Generic; namespace Ryujinx.HLE.HOS.Services.Vi { - class IhosBinderDriver : IpcService, IDisposable + class IHOSBinderDriver : IpcService, IDisposable { - private Dictionary<int, ServiceProcessRequest> _commands; - - public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => _commands; - private KEvent _binderEvent; private NvFlinger _flinger; - public IhosBinderDriver(Horizon system, IGalRenderer renderer) + public IHOSBinderDriver(Horizon system, IGalRenderer renderer) { - _commands = new Dictionary<int, ServiceProcessRequest> - { - { 0, TransactParcel }, - { 1, AdjustRefcount }, - { 2, GetNativeHandle }, - { 3, TransactParcelAuto } - }; - _binderEvent = new KEvent(system); _binderEvent.ReadableEvent.Signal(); @@ -35,6 +22,8 @@ namespace Ryujinx.HLE.HOS.Services.Vi _flinger = new NvFlinger(renderer, _binderEvent); } + [Command(0)] + // TransactParcel(s32, u32, u32, buffer<unknown, 5, 0>) -> buffer<unknown, 6, 0> public long TransactParcel(ServiceCtx context) { int id = context.RequestData.ReadInt32(); @@ -50,20 +39,8 @@ namespace Ryujinx.HLE.HOS.Services.Vi return _flinger.ProcessParcelRequest(context, data, code); } - public long TransactParcelAuto(ServiceCtx context) - { - int id = context.RequestData.ReadInt32(); - int code = context.RequestData.ReadInt32(); - - (long dataPos, long dataSize) = context.Request.GetBufferType0x21(); - - byte[] data = context.Memory.ReadBytes(dataPos, dataSize); - - data = Parcel.GetParcelData(data); - - return _flinger.ProcessParcelRequest(context, data, code); - } - + [Command(1)] + // AdjustRefcount(s32, s32, s32) public long AdjustRefcount(ServiceCtx context) { int id = context.RequestData.ReadInt32(); @@ -73,6 +50,8 @@ namespace Ryujinx.HLE.HOS.Services.Vi return 0; } + [Command(2)] + // GetNativeHandle(s32, s32) -> handle<copy> public long GetNativeHandle(ServiceCtx context) { int id = context.RequestData.ReadInt32(); @@ -88,6 +67,22 @@ namespace Ryujinx.HLE.HOS.Services.Vi return 0; } + [Command(3)] // 3.0.0+ + // TransactParcelAuto(s32, u32, u32, buffer<unknown, 21, 0>) -> buffer<unknown, 22, 0> + public long TransactParcelAuto(ServiceCtx context) + { + int id = context.RequestData.ReadInt32(); + int code = context.RequestData.ReadInt32(); + + (long dataPos, long dataSize) = context.Request.GetBufferType0x21(); + + byte[] data = context.Memory.ReadBytes(dataPos, dataSize); + + data = Parcel.GetParcelData(data); + + return _flinger.ProcessParcelRequest(context, data, code); + } + public void Dispose() { Dispose(true); |
