mirror of
https://git.ryujinx.app/ryubing/ryujinx.git
synced 2026-05-02 11:25:46 +00:00
Make Cmif commands in HLE use virtual method invocation instead of reflection
# Conflicts: # src/Ryujinx.HLE/HOS/Services/IpcService.cs
This commit is contained in:
@@ -7,7 +7,7 @@
|
|||||||
<Target Name="PostBuildTarget" AfterTargets="AfterBuild">
|
<Target Name="PostBuildTarget" AfterTargets="AfterBuild">
|
||||||
<Message Text="Running Validation Project" Importance="high" />
|
<Message Text="Running Validation Project" Importance="high" />
|
||||||
|
|
||||||
<Exec WorkingDirectory="$(ProjectDir)bin\Debug\$(TargetFramework)\"
|
<Exec WorkingDirectory="$(OutDir)"
|
||||||
Command="dotnet Ryujinx.BuildValidationTasks.dll "$(ProjectDir)..\..\\""
|
Command="dotnet Ryujinx.BuildValidationTasks.dll "$(ProjectDir)..\..\\""
|
||||||
ConsoleToMsBuild="true"
|
ConsoleToMsBuild="true"
|
||||||
Condition="'$(RuntimeIdentifier)' == ''"
|
Condition="'$(RuntimeIdentifier)' == ''"
|
||||||
|
|||||||
118
src/Ryujinx.HLE.Generators/IpcCommandGenerator.cs
Normal file
118
src/Ryujinx.HLE.Generators/IpcCommandGenerator.cs
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
using Microsoft.CodeAnalysis;
|
||||||
|
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Collections.Immutable;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
|
namespace Ryujinx.HLE.Generators
|
||||||
|
{
|
||||||
|
[Generator]
|
||||||
|
public class IpcCommandGenerator : IIncrementalGenerator
|
||||||
|
{
|
||||||
|
private sealed class CommandData
|
||||||
|
{
|
||||||
|
public required string Namespace { get; init; }
|
||||||
|
public required string TypeName { get; init; }
|
||||||
|
public required string MethodName { get; init; }
|
||||||
|
public required ImmutableArray<int> CommandIds { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
private sealed class ServiceData
|
||||||
|
{
|
||||||
|
public required string Namespace { get; init; }
|
||||||
|
public required string TypeName { get; init; }
|
||||||
|
public required ImmutableArray<CommandData> CmifCommands { get; init; }
|
||||||
|
public required ImmutableArray<CommandData> TipcCommands { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Initialize(IncrementalGeneratorInitializationContext context)
|
||||||
|
{
|
||||||
|
var predicate = (SyntaxNode node, CancellationToken _) => node is MethodDeclarationSyntax;
|
||||||
|
var transform = (GeneratorAttributeSyntaxContext ctx, CancellationToken _) =>
|
||||||
|
{
|
||||||
|
var target = (IMethodSymbol)ctx.TargetSymbol;
|
||||||
|
return new CommandData
|
||||||
|
{
|
||||||
|
Namespace = target.ContainingType.ContainingNamespace?.ToDisplayString(),
|
||||||
|
TypeName = target.ContainingType.Name,
|
||||||
|
MethodName = target.Name,
|
||||||
|
CommandIds = ctx.Attributes.Select(attr => (int)attr.ConstructorArguments[0].Value!).ToImmutableArray(),
|
||||||
|
};
|
||||||
|
};
|
||||||
|
var cmifCommands =
|
||||||
|
context.SyntaxProvider.ForAttributeWithMetadataName("Ryujinx.HLE.HOS.Services.CommandCmifAttribute",
|
||||||
|
predicate,
|
||||||
|
transform
|
||||||
|
);
|
||||||
|
var tipcCommands =
|
||||||
|
context.SyntaxProvider.ForAttributeWithMetadataName("Ryujinx.HLE.HOS.Services.CommandTipcAttribute",
|
||||||
|
predicate,
|
||||||
|
transform
|
||||||
|
);
|
||||||
|
|
||||||
|
var allCommands = cmifCommands.Collect().Combine(tipcCommands.Collect());
|
||||||
|
|
||||||
|
var types = allCommands.SelectMany((commands, _) =>
|
||||||
|
{
|
||||||
|
var cmif = commands.Left.ToLookup(c => (c.Namespace, c.TypeName));
|
||||||
|
var tipc = commands.Right.ToLookup(c => (c.Namespace, c.TypeName));
|
||||||
|
|
||||||
|
var builder = ImmutableArray.CreateBuilder<ServiceData>();
|
||||||
|
|
||||||
|
foreach (var type in cmif.Select(c => c.Key).Union(tipc.Select(t => t.Key)))
|
||||||
|
{
|
||||||
|
builder.Add(new ServiceData
|
||||||
|
{
|
||||||
|
Namespace = type.Namespace,
|
||||||
|
TypeName = type.TypeName,
|
||||||
|
CmifCommands = cmif.Contains(type) ? cmif[type].ToImmutableArray() : [],
|
||||||
|
TipcCommands = tipc.Contains(type) ? tipc[type].ToImmutableArray() : [],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return builder.DrainToImmutable();
|
||||||
|
});
|
||||||
|
|
||||||
|
context.RegisterSourceOutput(types, (ctx, data) =>
|
||||||
|
{
|
||||||
|
var generator = new CodeGenerator();
|
||||||
|
|
||||||
|
generator.AppendLine("using Ryujinx.HLE.HOS;");
|
||||||
|
generator.AppendLine("using RC = global::Ryujinx.HLE.HOS.ResultCode;");
|
||||||
|
|
||||||
|
generator.EnterScope($"namespace {data.Namespace}");
|
||||||
|
generator.EnterScope($"partial class {data.TypeName}");
|
||||||
|
|
||||||
|
generator.EnterScope("protected override RC InvokeCmifMethod(int id, ServiceCtx context)");
|
||||||
|
generator.EnterScope("switch (id)");
|
||||||
|
foreach (var command in data.CmifCommands)
|
||||||
|
{
|
||||||
|
generator.AppendLine($"case {string.Join(" or ", command.CommandIds)}:");
|
||||||
|
generator.IncreaseIndentation();
|
||||||
|
generator.AppendLine($"LogInvoke(\"{command.MethodName}\");");
|
||||||
|
generator.AppendLine($"return (RC){command.MethodName}(context);");
|
||||||
|
generator.DecreaseIndentation();
|
||||||
|
}
|
||||||
|
generator.AppendLine("default: return base.InvokeCmifMethod(id, context);");
|
||||||
|
generator.LeaveScope();
|
||||||
|
generator.LeaveScope();
|
||||||
|
|
||||||
|
generator.EnterScope("public override int CmifCommandIdByMethodName(string name)");
|
||||||
|
generator.EnterScope("return name switch");
|
||||||
|
foreach (var command in data.CmifCommands)
|
||||||
|
{
|
||||||
|
// just return the first command with this name
|
||||||
|
generator.AppendLine($"\"{command.MethodName}\" => {command.CommandIds[0]},");
|
||||||
|
}
|
||||||
|
generator.AppendLine("_ => base.CmifCommandIdByMethodName(name),");
|
||||||
|
generator.LeaveScope(";");
|
||||||
|
generator.LeaveScope();
|
||||||
|
|
||||||
|
generator.LeaveScope();
|
||||||
|
generator.LeaveScope();
|
||||||
|
|
||||||
|
ctx.AddSource($"{data.Namespace}.{data.TypeName}.g.cs", generator.ToString());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,6 +7,7 @@ using System.Collections.Generic;
|
|||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace Ryujinx.HLE.Exceptions
|
namespace Ryujinx.HLE.Exceptions
|
||||||
@@ -17,22 +18,22 @@ namespace Ryujinx.HLE.Exceptions
|
|||||||
public IpcService Service { get; }
|
public IpcService Service { get; }
|
||||||
public ServiceCtx Context { get; }
|
public ServiceCtx Context { get; }
|
||||||
public IpcMessage Request { get; }
|
public IpcMessage Request { get; }
|
||||||
|
private string MethodName { get; }
|
||||||
|
|
||||||
public ServiceNotImplementedException(IpcService service, ServiceCtx context)
|
public ServiceNotImplementedException(IpcService service, ServiceCtx context, string message = "The service call is not implemented.", [CallerMemberName] string methodName = null) : base(message)
|
||||||
: this(service, context, "The service call is not implemented.") { }
|
|
||||||
|
|
||||||
public ServiceNotImplementedException(IpcService service, ServiceCtx context, string message) : base(message)
|
|
||||||
{
|
{
|
||||||
Service = service;
|
Service = service;
|
||||||
Context = context;
|
Context = context;
|
||||||
Request = context.Request;
|
Request = context.Request;
|
||||||
|
MethodName = methodName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ServiceNotImplementedException(IpcService service, ServiceCtx context, string message, Exception inner) : base(message, inner)
|
public ServiceNotImplementedException(IpcService service, ServiceCtx context, string message, Exception inner, [CallerMemberName] string methodName = null) : base(message, inner)
|
||||||
{
|
{
|
||||||
Service = service;
|
Service = service;
|
||||||
Context = context;
|
Context = context;
|
||||||
Request = context.Request;
|
Request = context.Request;
|
||||||
|
MethodName = methodName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Message
|
public override string Message
|
||||||
@@ -47,25 +48,12 @@ namespace Ryujinx.HLE.Exceptions
|
|||||||
{
|
{
|
||||||
StringBuilder sb = new();
|
StringBuilder sb = new();
|
||||||
|
|
||||||
// Print the IPC command details (service name, command ID, and handler)
|
var commandId = Request.Type > IpcMessageType.TipcCloseSession
|
||||||
(Type callingType, MethodBase callingMethod) = WalkStackTrace(new StackTrace(this));
|
? -1 // TODO: tipc name
|
||||||
|
: Service.CmifCommandIdByMethodName(MethodName);
|
||||||
|
|
||||||
if (callingType != null && callingMethod != null)
|
sb.AppendLine($"Service Command: {Service.GetType().FullName}: {commandId} ({MethodName})");
|
||||||
{
|
sb.AppendLine();
|
||||||
// If the type is past 0xF, we are using TIPC
|
|
||||||
IReadOnlyDictionary<int, MethodInfo> ipcCommands = Request.Type > IpcMessageType.TipcCloseSession ? Service.TipcCommands : Service.CmifCommands;
|
|
||||||
|
|
||||||
// Find the handler for the method called
|
|
||||||
KeyValuePair<int, MethodInfo> ipcHandler = ipcCommands.FirstOrDefault(x => x.Value == callingMethod);
|
|
||||||
int ipcCommandId = ipcHandler.Key;
|
|
||||||
MethodInfo ipcMethod = ipcHandler.Value;
|
|
||||||
|
|
||||||
if (ipcMethod != null)
|
|
||||||
{
|
|
||||||
sb.AppendLine($"Service Command: {Service.GetType().FullName}: {ipcCommandId} ({ipcMethod.Name})");
|
|
||||||
sb.AppendLine();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sb.AppendLine("Guest Stack Trace:");
|
sb.AppendLine("Guest Stack Trace:");
|
||||||
sb.AppendLine(Context.Thread.GetGuestStackTrace());
|
sb.AppendLine(Context.Thread.GetGuestStackTrace());
|
||||||
@@ -137,26 +125,5 @@ namespace Ryujinx.HLE.Exceptions
|
|||||||
|
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static (Type, MethodBase) WalkStackTrace(StackTrace trace)
|
|
||||||
{
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
StackFrame frame;
|
|
||||||
|
|
||||||
// Find the IIpcService method that threw this exception
|
|
||||||
while ((frame = trace.GetFrame(i++)) != null)
|
|
||||||
{
|
|
||||||
MethodBase method = frame.GetMethod();
|
|
||||||
Type declType = method.DeclaringType;
|
|
||||||
|
|
||||||
if (typeof(IpcService).IsAssignableFrom(declType))
|
|
||||||
{
|
|
||||||
return (declType, method);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return (null, null);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Account.Acc.AccountService
|
namespace Ryujinx.HLE.HOS.Services.Account.Acc.AccountService
|
||||||
{
|
{
|
||||||
class IManagerForApplication : IpcService
|
partial class IManagerForApplication : IpcService
|
||||||
{
|
{
|
||||||
private readonly ManagerServer _managerServer;
|
private readonly ManagerServer _managerServer;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Account.Acc.AccountService
|
namespace Ryujinx.HLE.HOS.Services.Account.Acc.AccountService
|
||||||
{
|
{
|
||||||
class IManagerForSystemService : IpcService
|
partial class IManagerForSystemService : IpcService
|
||||||
{
|
{
|
||||||
private readonly ManagerServer _managerServer;
|
private readonly ManagerServer _managerServer;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Account.Acc.AccountService
|
namespace Ryujinx.HLE.HOS.Services.Account.Acc.AccountService
|
||||||
{
|
{
|
||||||
class IProfile : IpcService
|
partial class IProfile : IpcService
|
||||||
{
|
{
|
||||||
private readonly ProfileServer _profileServer;
|
private readonly ProfileServer _profileServer;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Account.Acc.AccountService
|
namespace Ryujinx.HLE.HOS.Services.Account.Acc.AccountService
|
||||||
{
|
{
|
||||||
class IProfileEditor : IpcService
|
partial class IProfileEditor : IpcService
|
||||||
{
|
{
|
||||||
private readonly ProfileServer _profileServer;
|
private readonly ProfileServer _profileServer;
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ using Ryujinx.HLE.HOS.Services.Account.Acc.AccountService;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
||||||
{
|
{
|
||||||
[Service("acc:su", AccountServiceFlag.Administrator)] // Max Sessions: 8
|
[Service("acc:su", AccountServiceFlag.Administrator)] // Max Sessions: 8
|
||||||
class IAccountServiceForAdministrator : IpcService
|
partial class IAccountServiceForAdministrator : IpcService
|
||||||
{
|
{
|
||||||
private readonly ApplicationServiceServer _applicationServiceServer;
|
private readonly ApplicationServiceServer _applicationServiceServer;
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ using Ryujinx.HLE.HOS.Services.Arp;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
||||||
{
|
{
|
||||||
[Service("acc:u0", AccountServiceFlag.Application)] // Max Sessions: 4
|
[Service("acc:u0", AccountServiceFlag.Application)] // Max Sessions: 4
|
||||||
class IAccountServiceForApplication : IpcService
|
partial class IAccountServiceForApplication : IpcService
|
||||||
{
|
{
|
||||||
private readonly ApplicationServiceServer _applicationServiceServer;
|
private readonly ApplicationServiceServer _applicationServiceServer;
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ using Ryujinx.HLE.HOS.Services.Account.Acc.AccountService;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
||||||
{
|
{
|
||||||
[Service("acc:u1", AccountServiceFlag.SystemService)] // Max Sessions: 16
|
[Service("acc:u1", AccountServiceFlag.SystemService)] // Max Sessions: 16
|
||||||
class IAccountServiceForSystemService : IpcService
|
partial class IAccountServiceForSystemService : IpcService
|
||||||
{
|
{
|
||||||
private readonly ApplicationServiceServer _applicationServiceServer;
|
private readonly ApplicationServiceServer _applicationServiceServer;
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ using System;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
||||||
{
|
{
|
||||||
class IAsyncContext : IpcService
|
partial class IAsyncContext : IpcService
|
||||||
{
|
{
|
||||||
protected AsyncExecution AsyncExecution;
|
protected AsyncExecution AsyncExecution;
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ using Ryujinx.HLE.HOS.Services.Account.Acc.AsyncContext;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
||||||
{
|
{
|
||||||
class IAsyncNetworkServiceLicenseKindContext : IAsyncContext
|
partial class IAsyncNetworkServiceLicenseKindContext : IAsyncContext
|
||||||
{
|
{
|
||||||
private readonly NetworkServiceLicenseKind? _serviceLicenseKind;
|
private readonly NetworkServiceLicenseKind? _serviceLicenseKind;
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ using Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.SystemA
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService
|
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService
|
||||||
{
|
{
|
||||||
class ILibraryAppletProxy : IpcService
|
partial class ILibraryAppletProxy : IpcService
|
||||||
{
|
{
|
||||||
private readonly ulong _pid;
|
private readonly ulong _pid;
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ using Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.SystemA
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService
|
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService
|
||||||
{
|
{
|
||||||
class ISystemAppletProxy : IpcService
|
partial class ISystemAppletProxy : IpcService
|
||||||
{
|
{
|
||||||
private readonly ulong _pid;
|
private readonly ulong _pid;
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ using System;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.LibraryAppletCreator
|
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.LibraryAppletCreator
|
||||||
{
|
{
|
||||||
class ILibraryAppletAccessor : DisposableIpcService
|
partial class ILibraryAppletAccessor : DisposableIpcService
|
||||||
{
|
{
|
||||||
private readonly KernelContext _kernelContext;
|
private readonly KernelContext _kernelContext;
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ using System;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.LibraryAppletProxy
|
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.LibraryAppletProxy
|
||||||
{
|
{
|
||||||
class ILibraryAppletSelfAccessor : IpcService
|
partial class ILibraryAppletSelfAccessor : IpcService
|
||||||
{
|
{
|
||||||
private readonly AppletStandalone _appletStandalone = new();
|
private readonly AppletStandalone _appletStandalone = new();
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ using Ryujinx.Common;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.LibraryAppletProxy
|
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.LibraryAppletProxy
|
||||||
{
|
{
|
||||||
class IProcessWindingController : IpcService
|
partial class IProcessWindingController : IpcService
|
||||||
{
|
{
|
||||||
public IProcessWindingController() { }
|
public IProcessWindingController() { }
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ using Ryujinx.Common.Logging;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.SystemAppletProxy
|
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.SystemAppletProxy
|
||||||
{
|
{
|
||||||
class IAudioController : IpcService
|
partial class IAudioController : IpcService
|
||||||
{
|
{
|
||||||
public IAudioController() { }
|
public IAudioController() { }
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ using System;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.SystemAppletProxy
|
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.SystemAppletProxy
|
||||||
{
|
{
|
||||||
class ICommonStateGetter : DisposableIpcService
|
partial class ICommonStateGetter : DisposableIpcService
|
||||||
{
|
{
|
||||||
private readonly ServiceCtx _context;
|
private readonly ServiceCtx _context;
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ using System;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.SystemAppletProxy
|
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.SystemAppletProxy
|
||||||
{
|
{
|
||||||
class IDisplayController : IpcService
|
partial class IDisplayController : IpcService
|
||||||
{
|
{
|
||||||
private readonly KTransferMemory _transferMem;
|
private readonly KTransferMemory _transferMem;
|
||||||
private bool _lastApplicationCaptureBufferAcquired;
|
private bool _lastApplicationCaptureBufferAcquired;
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ using System;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.SystemAppletProxy
|
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.SystemAppletProxy
|
||||||
{
|
{
|
||||||
class IHomeMenuFunctions : IpcService
|
partial class IHomeMenuFunctions : IpcService
|
||||||
{
|
{
|
||||||
private readonly KEvent _channelEvent;
|
private readonly KEvent _channelEvent;
|
||||||
private int _channelEventHandle;
|
private int _channelEventHandle;
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ using Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Library
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.SystemAppletProxy
|
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.SystemAppletProxy
|
||||||
{
|
{
|
||||||
class ILibraryAppletCreator : IpcService
|
partial class ILibraryAppletCreator : IpcService
|
||||||
{
|
{
|
||||||
public ILibraryAppletCreator() { }
|
public ILibraryAppletCreator() { }
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ using System.Threading;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.SystemAppletProxy
|
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.SystemAppletProxy
|
||||||
{
|
{
|
||||||
class ISelfController : IpcService
|
partial class ISelfController : IpcService
|
||||||
{
|
{
|
||||||
private readonly ulong _pid;
|
private readonly ulong _pid;
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ using Ryujinx.Common.Logging;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.SystemAppletProxy
|
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.SystemAppletProxy
|
||||||
{
|
{
|
||||||
class IWindowController : IpcService
|
partial class IWindowController : IpcService
|
||||||
{
|
{
|
||||||
private readonly ulong _pid;
|
private readonly ulong _pid;
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ using Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE
|
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE
|
||||||
{
|
{
|
||||||
[Service("appletAE")]
|
[Service("appletAE")]
|
||||||
class IAllSystemAppletProxiesService : IpcService
|
partial class IAllSystemAppletProxiesService : IpcService
|
||||||
{
|
{
|
||||||
public IAllSystemAppletProxiesService(ServiceCtx context) { }
|
public IAllSystemAppletProxiesService(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE
|
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE
|
||||||
{
|
{
|
||||||
class IStorage : IpcService
|
partial class IStorage : IpcService
|
||||||
{
|
{
|
||||||
public bool IsReadOnly { get; private set; }
|
public bool IsReadOnly { get; private set; }
|
||||||
public byte[] Data { get; private set; }
|
public byte[] Data { get; private set; }
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ using System;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE
|
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE
|
||||||
{
|
{
|
||||||
class IStorageAccessor : IpcService
|
partial class IStorageAccessor : IpcService
|
||||||
{
|
{
|
||||||
private readonly IStorage _storage;
|
private readonly IStorage _storage;
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ using ApplicationId = LibHac.Ncm.ApplicationId;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.ApplicationProxy
|
namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.ApplicationProxy
|
||||||
{
|
{
|
||||||
class IApplicationFunctions : IpcService
|
partial class IApplicationFunctions : IpcService
|
||||||
{
|
{
|
||||||
private long _defaultSaveDataSize = 200000000;
|
private long _defaultSaveDataSize = 200000000;
|
||||||
private long _defaultJournalSaveDataSize = 200000000;
|
private long _defaultJournalSaveDataSize = 200000000;
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ using Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.ApplicationPr
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService
|
namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService
|
||||||
{
|
{
|
||||||
class IApplicationProxy : IpcService
|
partial class IApplicationProxy : IpcService
|
||||||
{
|
{
|
||||||
private readonly ulong _pid;
|
private readonly ulong _pid;
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ using Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Am
|
namespace Ryujinx.HLE.HOS.Services.Am
|
||||||
{
|
{
|
||||||
[Service("appletOE")]
|
[Service("appletOE")]
|
||||||
class IApplicationProxyService : IpcService
|
partial class IApplicationProxyService : IpcService
|
||||||
{
|
{
|
||||||
public IApplicationProxyService(ServiceCtx context) { }
|
public IApplicationProxyService(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Apm
|
namespace Ryujinx.HLE.HOS.Services.Apm
|
||||||
{
|
{
|
||||||
abstract class IManager : IpcService
|
abstract partial class IManager : IpcService
|
||||||
{
|
{
|
||||||
public IManager(ServiceCtx context) { }
|
public IManager(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ namespace Ryujinx.HLE.HOS.Services.Apm
|
|||||||
// NOTE: This service doesn’t exist anymore after firmware 7.0.1. But some outdated homebrew still uses it.
|
// NOTE: This service doesn’t exist anymore after firmware 7.0.1. But some outdated homebrew still uses it.
|
||||||
|
|
||||||
[Service("apm:p")] // 1.0.0-7.0.1
|
[Service("apm:p")] // 1.0.0-7.0.1
|
||||||
class IManagerPrivileged : IpcService
|
partial class IManagerPrivileged : IpcService
|
||||||
{
|
{
|
||||||
public IManagerPrivileged(ServiceCtx context) { }
|
public IManagerPrivileged(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Apm
|
namespace Ryujinx.HLE.HOS.Services.Apm
|
||||||
{
|
{
|
||||||
abstract class ISession : IpcService
|
abstract partial class ISession : IpcService
|
||||||
{
|
{
|
||||||
public ISession(ServiceCtx context) { }
|
public ISession(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Apm
|
namespace Ryujinx.HLE.HOS.Services.Apm
|
||||||
{
|
{
|
||||||
abstract class ISystemManager : IpcService
|
abstract partial class ISystemManager : IpcService
|
||||||
{
|
{
|
||||||
public ISystemManager(ServiceCtx context) { }
|
public ISystemManager(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ using System;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Bluetooth
|
namespace Ryujinx.HLE.HOS.Services.Bluetooth
|
||||||
{
|
{
|
||||||
[Service("btdrv")]
|
[Service("btdrv")]
|
||||||
class IBluetoothDriver : IpcService
|
partial class IBluetoothDriver : IpcService
|
||||||
{
|
{
|
||||||
#pragma warning disable CS0414, IDE0052 // Remove unread private member
|
#pragma warning disable CS0414, IDE0052 // Remove unread private member
|
||||||
private string _unknownLowEnergy;
|
private string _unknownLowEnergy;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ using Ryujinx.HLE.HOS.Services.Settings;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Bluetooth
|
namespace Ryujinx.HLE.HOS.Services.Bluetooth
|
||||||
{
|
{
|
||||||
[Service("bt")]
|
[Service("bt")]
|
||||||
class IBluetoothUser : IpcService
|
partial class IBluetoothUser : IpcService
|
||||||
{
|
{
|
||||||
public IBluetoothUser(ServiceCtx context) { }
|
public IBluetoothUser(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ using Ryujinx.Horizon.Common;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.BluetoothManager.BtmUser
|
namespace Ryujinx.HLE.HOS.Services.BluetoothManager.BtmUser
|
||||||
{
|
{
|
||||||
class IBtmUserCore : IpcService
|
partial class IBtmUserCore : IpcService
|
||||||
{
|
{
|
||||||
public KEvent _bleScanEvent;
|
public KEvent _bleScanEvent;
|
||||||
public int _bleScanEventHandle;
|
public int _bleScanEventHandle;
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ using Ryujinx.HLE.HOS.Services.BluetoothManager.BtmUser;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.BluetoothManager
|
namespace Ryujinx.HLE.HOS.Services.BluetoothManager
|
||||||
{
|
{
|
||||||
[Service("btm:u")] // 5.0.0+
|
[Service("btm:u")] // 5.0.0+
|
||||||
class IBtmUser : IpcService
|
partial class IBtmUser : IpcService
|
||||||
{
|
{
|
||||||
public IBtmUser(ServiceCtx context) { }
|
public IBtmUser(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ using Ryujinx.HLE.HOS.Services.Caps.Types;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Caps
|
namespace Ryujinx.HLE.HOS.Services.Caps
|
||||||
{
|
{
|
||||||
[Service("caps:u")]
|
[Service("caps:u")]
|
||||||
class IAlbumApplicationService : IpcService
|
partial class IAlbumApplicationService : IpcService
|
||||||
{
|
{
|
||||||
public IAlbumApplicationService(ServiceCtx context) { }
|
public IAlbumApplicationService(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Caps
|
namespace Ryujinx.HLE.HOS.Services.Caps
|
||||||
{
|
{
|
||||||
[Service("caps:c")]
|
[Service("caps:c")]
|
||||||
class IAlbumControlService : IpcService
|
partial class IAlbumControlService : IpcService
|
||||||
{
|
{
|
||||||
public IAlbumControlService(ServiceCtx context) { }
|
public IAlbumControlService(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ using Ryujinx.HLE.HOS.Services.Caps.Types;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Caps
|
namespace Ryujinx.HLE.HOS.Services.Caps
|
||||||
{
|
{
|
||||||
[Service("caps:su")] // 6.0.0+
|
[Service("caps:su")] // 6.0.0+
|
||||||
class IScreenShotApplicationService : IpcService
|
partial class IScreenShotApplicationService : IpcService
|
||||||
{
|
{
|
||||||
public IScreenShotApplicationService(ServiceCtx context) { }
|
public IScreenShotApplicationService(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ using Ryujinx.Horizon.Common;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Ectx
|
namespace Ryujinx.HLE.HOS.Services.Ectx
|
||||||
{
|
{
|
||||||
class IContextRegistrar : DisposableIpcService
|
partial class IContextRegistrar : DisposableIpcService
|
||||||
{
|
{
|
||||||
public IContextRegistrar(ServiceCtx context) { }
|
public IContextRegistrar(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Ectx
|
namespace Ryujinx.HLE.HOS.Services.Ectx
|
||||||
{
|
{
|
||||||
[Service("ectx:aw")] // 11.0.0+
|
[Service("ectx:aw")] // 11.0.0+
|
||||||
class IWriterForApplication : IpcService
|
partial class IWriterForApplication : IpcService
|
||||||
{
|
{
|
||||||
public IWriterForApplication(ServiceCtx context) { }
|
public IWriterForApplication(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ using System.Text;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Fatal
|
namespace Ryujinx.HLE.HOS.Services.Fatal
|
||||||
{
|
{
|
||||||
[Service("fatal:u")]
|
[Service("fatal:u")]
|
||||||
class IService : IpcService
|
partial class IService : IpcService
|
||||||
{
|
{
|
||||||
public IService(ServiceCtx context) { }
|
public IService(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ using Ryujinx.Memory;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy
|
namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy
|
||||||
{
|
{
|
||||||
class IDirectory : DisposableIpcService
|
partial class IDirectory : DisposableIpcService
|
||||||
{
|
{
|
||||||
private SharedRef<LibHac.FsSrv.Sf.IDirectory> _baseDirectory;
|
private SharedRef<LibHac.FsSrv.Sf.IDirectory> _baseDirectory;
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ using Ryujinx.Memory;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy
|
namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy
|
||||||
{
|
{
|
||||||
class IFile : DisposableIpcService
|
partial class IFile : DisposableIpcService
|
||||||
{
|
{
|
||||||
private SharedRef<LibHac.FsSrv.Sf.IFile> _baseFile;
|
private SharedRef<LibHac.FsSrv.Sf.IFile> _baseFile;
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ using Path = LibHac.FsSrv.Sf.Path;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy
|
namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy
|
||||||
{
|
{
|
||||||
class IFileSystem : DisposableIpcService
|
partial class IFileSystem : DisposableIpcService
|
||||||
{
|
{
|
||||||
private SharedRef<LibHac.FsSrv.Sf.IFileSystem> _fileSystem;
|
private SharedRef<LibHac.FsSrv.Sf.IFileSystem> _fileSystem;
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ using System.Threading;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy
|
namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy
|
||||||
{
|
{
|
||||||
class IStorage : DisposableIpcService
|
partial class IStorage : DisposableIpcService
|
||||||
{
|
{
|
||||||
private SharedRef<LibHac.FsSrv.Sf.IStorage> _baseStorage;
|
private SharedRef<LibHac.FsSrv.Sf.IStorage> _baseStorage;
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ using GameCardHandle = System.UInt32;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Fs
|
namespace Ryujinx.HLE.HOS.Services.Fs
|
||||||
{
|
{
|
||||||
class IDeviceOperator : DisposableIpcService
|
partial class IDeviceOperator : DisposableIpcService
|
||||||
{
|
{
|
||||||
private SharedRef<LibHac.FsSrv.Sf.IDeviceOperator> _baseOperator;
|
private SharedRef<LibHac.FsSrv.Sf.IDeviceOperator> _baseOperator;
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ using IStorage = LibHac.FsSrv.Sf.IStorage;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Fs
|
namespace Ryujinx.HLE.HOS.Services.Fs
|
||||||
{
|
{
|
||||||
[Service("fsp-srv")]
|
[Service("fsp-srv")]
|
||||||
class IFileSystemProxy : DisposableIpcService
|
partial class IFileSystemProxy : DisposableIpcService
|
||||||
{
|
{
|
||||||
private SharedRef<LibHac.FsSrv.Sf.IFileSystemProxy> _baseFileSystemProxy;
|
private SharedRef<LibHac.FsSrv.Sf.IFileSystemProxy> _baseFileSystemProxy;
|
||||||
private ulong _pid;
|
private ulong _pid;
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ using Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Fs
|
namespace Ryujinx.HLE.HOS.Services.Fs
|
||||||
{
|
{
|
||||||
class IMultiCommitManager : DisposableIpcService // 6.0.0+
|
partial class IMultiCommitManager : DisposableIpcService // 6.0.0+
|
||||||
{
|
{
|
||||||
private SharedRef<LibHac.FsSrv.Sf.IMultiCommitManager> _baseCommitManager;
|
private SharedRef<LibHac.FsSrv.Sf.IMultiCommitManager> _baseCommitManager;
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ using Ryujinx.Memory;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Fs
|
namespace Ryujinx.HLE.HOS.Services.Fs
|
||||||
{
|
{
|
||||||
class ISaveDataInfoReader : DisposableIpcService
|
partial class ISaveDataInfoReader : DisposableIpcService
|
||||||
{
|
{
|
||||||
private SharedRef<LibHac.FsSrv.Sf.ISaveDataInfoReader> _baseReader;
|
private SharedRef<LibHac.FsSrv.Sf.ISaveDataInfoReader> _baseReader;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Hid.HidServer
|
namespace Ryujinx.HLE.HOS.Services.Hid.HidServer
|
||||||
{
|
{
|
||||||
class IActiveApplicationDeviceList : IpcService
|
partial class IActiveApplicationDeviceList : IpcService
|
||||||
{
|
{
|
||||||
public IActiveApplicationDeviceList() { }
|
public IActiveApplicationDeviceList() { }
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ using System;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Hid.HidServer
|
namespace Ryujinx.HLE.HOS.Services.Hid.HidServer
|
||||||
{
|
{
|
||||||
class IAppletResource : IpcService
|
partial class IAppletResource : IpcService
|
||||||
{
|
{
|
||||||
private readonly KSharedMemory _hidSharedMem;
|
private readonly KSharedMemory _hidSharedMem;
|
||||||
private int _hidSharedMemHandle;
|
private int _hidSharedMemHandle;
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ using System.Runtime.InteropServices;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Hid
|
namespace Ryujinx.HLE.HOS.Services.Hid
|
||||||
{
|
{
|
||||||
[Service("hid")]
|
[Service("hid")]
|
||||||
class IHidServer : IpcService
|
partial class IHidServer : IpcService
|
||||||
{
|
{
|
||||||
private readonly KEvent _xpadIdEvent;
|
private readonly KEvent _xpadIdEvent;
|
||||||
private readonly KEvent _palmaOperationCompleteEvent;
|
private readonly KEvent _palmaOperationCompleteEvent;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ using Ryujinx.HLE.HOS.Services.Hid.Types;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Hid
|
namespace Ryujinx.HLE.HOS.Services.Hid
|
||||||
{
|
{
|
||||||
[Service("hid:sys")]
|
[Service("hid:sys")]
|
||||||
class IHidSystemServer : IpcService
|
partial class IHidSystemServer : IpcService
|
||||||
{
|
{
|
||||||
public IHidSystemServer(ServiceCtx context) { }
|
public IHidSystemServer(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ using Ryujinx.Common.Logging;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Hid
|
namespace Ryujinx.HLE.HOS.Services.Hid
|
||||||
{
|
{
|
||||||
[Service("hidbus")]
|
[Service("hidbus")]
|
||||||
class IHidbusServer : IpcService
|
partial class IHidbusServer : IpcService
|
||||||
{
|
{
|
||||||
public IHidbusServer(ServiceCtx context) { }
|
public IHidbusServer(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ using System;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Hid.Irs
|
namespace Ryujinx.HLE.HOS.Services.Hid.Irs
|
||||||
{
|
{
|
||||||
[Service("irs")]
|
[Service("irs")]
|
||||||
class IIrSensorServer : IpcService
|
partial class IIrSensorServer : IpcService
|
||||||
{
|
{
|
||||||
private int _irsensorSharedMemoryHandle = 0;
|
private int _irsensorSharedMemoryHandle = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -13,8 +13,6 @@ namespace Ryujinx.HLE.HOS.Services
|
|||||||
{
|
{
|
||||||
abstract partial class IpcService
|
abstract partial class IpcService
|
||||||
{
|
{
|
||||||
|
|
||||||
public IReadOnlyDictionary<int, MethodInfo> CmifCommands { get; }
|
|
||||||
public IReadOnlyDictionary<int, MethodInfo> TipcCommands { get; }
|
public IReadOnlyDictionary<int, MethodInfo> TipcCommands { get; }
|
||||||
|
|
||||||
public ServerBase Server { get; private set; }
|
public ServerBase Server { get; private set; }
|
||||||
@@ -24,30 +22,11 @@ namespace Ryujinx.HLE.HOS.Services
|
|||||||
private int _selfId;
|
private int _selfId;
|
||||||
private bool _isDomain;
|
private bool _isDomain;
|
||||||
|
|
||||||
// cache array so we don't recreate it all the time
|
public IpcService(ServerBase server = null)
|
||||||
private object[] _parameters = [null];
|
|
||||||
|
|
||||||
public IpcService(ServerBase server = null, bool registerTipc = false)
|
|
||||||
{
|
{
|
||||||
Stopwatch sw = Stopwatch.StartNew();
|
if (true)
|
||||||
|
|
||||||
CmifCommands = GetType()
|
|
||||||
.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public)
|
|
||||||
.SelectMany(methodInfo => methodInfo.GetCustomAttributes<CommandCmifAttribute>()
|
|
||||||
.Select(command => (command.Id, methodInfo)))
|
|
||||||
.ToDictionary(command => command.Id, command => command.methodInfo);
|
|
||||||
|
|
||||||
sw.Stop();
|
|
||||||
|
|
||||||
Logger.Debug?.Print(
|
|
||||||
LogClass.Emulation,
|
|
||||||
$"{CmifCommands.Count} Cmif commands loaded in {sw.ElapsedTicks} ticks ({Stopwatch.Frequency} tps).",
|
|
||||||
GetType().AsPrettyString()
|
|
||||||
);
|
|
||||||
|
|
||||||
if (registerTipc)
|
|
||||||
{
|
{
|
||||||
sw.Start();
|
var sw = Stopwatch.StartNew();
|
||||||
|
|
||||||
TipcCommands = GetType()
|
TipcCommands = GetType()
|
||||||
.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public)
|
.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public)
|
||||||
@@ -88,6 +67,29 @@ namespace Ryujinx.HLE.HOS.Services
|
|||||||
_isDomain = false;
|
_isDomain = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected virtual ResultCode InvokeCmifMethod(int id, ServiceCtx context)
|
||||||
|
{
|
||||||
|
if (!context.Device.Configuration.IgnoreMissingServices)
|
||||||
|
{
|
||||||
|
string dbgMessage = $"{this.GetType().FullName}: {id}";
|
||||||
|
|
||||||
|
throw new ServiceNotImplementedException(this, context, dbgMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
string serviceName = (this is not DummyService dummyService)
|
||||||
|
? this.GetType().FullName
|
||||||
|
: dummyService.ServiceName;
|
||||||
|
|
||||||
|
Logger.Warning?.Print(LogClass.KernelIpc, $"Missing service {serviceName}: {id} ignored");
|
||||||
|
|
||||||
|
return ResultCode.Success;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void LogInvoke(string name)
|
||||||
|
=> Logger.Trace?.Print(LogClass.KernelIpc, $"{this.GetType().Name}: {name}");
|
||||||
|
|
||||||
|
public virtual int CmifCommandIdByMethodName(string name) => -1;
|
||||||
|
|
||||||
public void CallCmifMethod(ServiceCtx context)
|
public void CallCmifMethod(ServiceCtx context)
|
||||||
{
|
{
|
||||||
IpcService service = this;
|
IpcService service = this;
|
||||||
@@ -138,52 +140,26 @@ namespace Ryujinx.HLE.HOS.Services
|
|||||||
#pragma warning restore IDE0059
|
#pragma warning restore IDE0059
|
||||||
int commandId = (int)context.RequestData.ReadInt64();
|
int commandId = (int)context.RequestData.ReadInt64();
|
||||||
|
|
||||||
bool serviceExists = service.CmifCommands.TryGetValue(commandId, out MethodInfo processRequest);
|
context.ResponseData.BaseStream.Seek(_isDomain ? 0x20 : 0x10, SeekOrigin.Begin);
|
||||||
|
|
||||||
if (context.Device.Configuration.IgnoreMissingServices || serviceExists)
|
ResultCode result = service.InvokeCmifMethod(commandId, context);
|
||||||
|
|
||||||
|
if (_isDomain)
|
||||||
{
|
{
|
||||||
ResultCode result = ResultCode.Success;
|
foreach (int id in context.Response.ObjectIds)
|
||||||
|
|
||||||
context.ResponseData.BaseStream.Seek(_isDomain ? 0x20 : 0x10, SeekOrigin.Begin);
|
|
||||||
|
|
||||||
if (serviceExists)
|
|
||||||
{
|
{
|
||||||
Logger.Trace?.Print(LogClass.KernelIpc, $"{service.GetType().Name}: {processRequest.Name}");
|
context.ResponseData.Write(id);
|
||||||
|
|
||||||
_parameters[0] = context;
|
|
||||||
|
|
||||||
result = (ResultCode)processRequest.Invoke(service, _parameters);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
string serviceName = (service is not DummyService dummyService) ? service.GetType().FullName : dummyService.ServiceName;
|
|
||||||
|
|
||||||
Logger.Warning?.Print(LogClass.KernelIpc, $"Missing service {serviceName}: {commandId} ignored");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_isDomain)
|
context.ResponseData.BaseStream.Seek(0, SeekOrigin.Begin);
|
||||||
{
|
|
||||||
foreach (int id in context.Response.ObjectIds)
|
|
||||||
{
|
|
||||||
context.ResponseData.Write(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
context.ResponseData.BaseStream.Seek(0, SeekOrigin.Begin);
|
context.ResponseData.Write(context.Response.ObjectIds.Count);
|
||||||
|
|
||||||
context.ResponseData.Write(context.Response.ObjectIds.Count);
|
|
||||||
}
|
|
||||||
|
|
||||||
context.ResponseData.BaseStream.Seek(_isDomain ? 0x10 : 0, SeekOrigin.Begin);
|
|
||||||
|
|
||||||
context.ResponseData.Write(IpcMagic.Sfco);
|
|
||||||
context.ResponseData.Write((long)result);
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
string dbgMessage = $"{service.GetType().FullName}: {commandId}";
|
|
||||||
|
|
||||||
throw new ServiceNotImplementedException(service, context, dbgMessage);
|
context.ResponseData.BaseStream.Seek(_isDomain ? 0x10 : 0, SeekOrigin.Begin);
|
||||||
}
|
|
||||||
|
context.ResponseData.Write(IpcMagic.Sfco);
|
||||||
|
context.ResponseData.Write((long)result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CallTipcMethod(ServiceCtx context)
|
public void CallTipcMethod(ServiceCtx context)
|
||||||
@@ -202,9 +178,7 @@ namespace Ryujinx.HLE.HOS.Services
|
|||||||
{
|
{
|
||||||
Logger.Debug?.Print(LogClass.KernelIpc, $"{GetType().Name}: {processRequest.Name}");
|
Logger.Debug?.Print(LogClass.KernelIpc, $"{GetType().Name}: {processRequest.Name}");
|
||||||
|
|
||||||
_parameters[0] = context;
|
result = (ResultCode)processRequest.Invoke(this, [context]);
|
||||||
|
|
||||||
result = (ResultCode)processRequest.Invoke(this, _parameters);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Ldn
|
namespace Ryujinx.HLE.HOS.Services.Ldn
|
||||||
{
|
{
|
||||||
[Service("ldn:u")]
|
[Service("ldn:u")]
|
||||||
class IUserServiceCreator : IpcService
|
partial class IUserServiceCreator : IpcService
|
||||||
{
|
{
|
||||||
public IUserServiceCreator(ServiceCtx context) : base(context.Device.System.LdnServer) { }
|
public IUserServiceCreator(ServiceCtx context) : base(context.Device.System.LdnServer) { }
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.Lp2p
|
|||||||
{
|
{
|
||||||
[Service("lp2p:app")] // 9.0.0+
|
[Service("lp2p:app")] // 9.0.0+
|
||||||
[Service("lp2p:sys")] // 9.0.0+
|
[Service("lp2p:sys")] // 9.0.0+
|
||||||
class IServiceCreator : IpcService
|
partial class IServiceCreator : IpcService
|
||||||
{
|
{
|
||||||
public IServiceCreator(ServiceCtx context) { }
|
public IServiceCreator(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ using Ryujinx.Common.Logging;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Ldn.Lp2p
|
namespace Ryujinx.HLE.HOS.Services.Ldn.Lp2p
|
||||||
{
|
{
|
||||||
class ISfService : IpcService
|
partial class ISfService : IpcService
|
||||||
{
|
{
|
||||||
public ISfService(ServiceCtx context) { }
|
public ISfService(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ using System;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Ldn.Lp2p
|
namespace Ryujinx.HLE.HOS.Services.Ldn.Lp2p
|
||||||
{
|
{
|
||||||
class ISfServiceMonitor : IpcService
|
partial class ISfServiceMonitor : IpcService
|
||||||
{
|
{
|
||||||
private readonly KEvent _stateChangeEvent;
|
private readonly KEvent _stateChangeEvent;
|
||||||
private readonly KEvent _jointEvent;
|
private readonly KEvent _jointEvent;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ using Ryujinx.Common.Logging;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator
|
namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator
|
||||||
{
|
{
|
||||||
class IClientProcessMonitor : DisposableIpcService
|
partial class IClientProcessMonitor : DisposableIpcService
|
||||||
{
|
{
|
||||||
public IClientProcessMonitor(ServiceCtx context) { }
|
public IClientProcessMonitor(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ using System.Runtime.InteropServices;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator
|
namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator
|
||||||
{
|
{
|
||||||
class IUserLocalCommunicationService : IpcService, IDisposable
|
partial class IUserLocalCommunicationService : IpcService, IDisposable
|
||||||
{
|
{
|
||||||
public INetworkClient NetworkClient { get; private set; }
|
public INetworkClient NetworkClient { get; private set; }
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ using Ryujinx.Common.Logging;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Mii
|
namespace Ryujinx.HLE.HOS.Services.Mii
|
||||||
{
|
{
|
||||||
[Service("miiimg")] // 5.0.0+
|
[Service("miiimg")] // 5.0.0+
|
||||||
class IImageDatabaseService : IpcService
|
partial class IImageDatabaseService : IpcService
|
||||||
{
|
{
|
||||||
private uint _imageCount;
|
private uint _imageCount;
|
||||||
private bool _isDirty;
|
private bool _isDirty;
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ namespace Ryujinx.HLE.HOS.Services.Mii
|
|||||||
{
|
{
|
||||||
[Service("mii:e", true)]
|
[Service("mii:e", true)]
|
||||||
[Service("mii:u", false)]
|
[Service("mii:u", false)]
|
||||||
class IStaticService : IpcService
|
partial class IStaticService : IpcService
|
||||||
{
|
{
|
||||||
private readonly DatabaseImpl _databaseImpl;
|
private readonly DatabaseImpl _databaseImpl;
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ using System.Runtime.InteropServices;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Mii.StaticService
|
namespace Ryujinx.HLE.HOS.Services.Mii.StaticService
|
||||||
{
|
{
|
||||||
abstract class IDatabaseService : IpcService
|
abstract partial class IDatabaseService : IpcService
|
||||||
{
|
{
|
||||||
[CommandCmif(0)]
|
[CommandCmif(0)]
|
||||||
// IsUpdated(SourceFlag flag) -> bool
|
// IsUpdated(SourceFlag flag) -> bool
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ using Ryujinx.HLE.HOS.Services.Account.Acc;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Mnpp
|
namespace Ryujinx.HLE.HOS.Services.Mnpp
|
||||||
{
|
{
|
||||||
[Service("mnpp:app")] // 13.0.0+
|
[Service("mnpp:app")] // 13.0.0+
|
||||||
class IServiceForApplication : IpcService
|
partial class IServiceForApplication : IpcService
|
||||||
{
|
{
|
||||||
public IServiceForApplication(ServiceCtx context) { }
|
public IServiceForApplication(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ using Ryujinx.HLE.HOS.Services.Ncm.Lr.LocationResolverManager;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Ncm.Lr
|
namespace Ryujinx.HLE.HOS.Services.Ncm.Lr
|
||||||
{
|
{
|
||||||
[Service("lr")]
|
[Service("lr")]
|
||||||
class ILocationResolverManager : IpcService
|
partial class ILocationResolverManager : IpcService
|
||||||
{
|
{
|
||||||
public ILocationResolverManager(ServiceCtx context) { }
|
public ILocationResolverManager(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ using static Ryujinx.HLE.Utilities.StringUtils;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Ncm.Lr.LocationResolverManager
|
namespace Ryujinx.HLE.HOS.Services.Ncm.Lr.LocationResolverManager
|
||||||
{
|
{
|
||||||
class ILocationResolver : IpcService
|
partial class ILocationResolver : IpcService
|
||||||
{
|
{
|
||||||
private readonly StorageId _storageId;
|
private readonly StorageId _storageId;
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ using Ryujinx.HLE.HOS.Services.Nfc.NfcManager;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Nfc
|
namespace Ryujinx.HLE.HOS.Services.Nfc
|
||||||
{
|
{
|
||||||
[Service("nfc:sys")]
|
[Service("nfc:sys")]
|
||||||
class ISystemManager : IpcService
|
partial class ISystemManager : IpcService
|
||||||
{
|
{
|
||||||
public ISystemManager(ServiceCtx context) { }
|
public ISystemManager(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ using Ryujinx.HLE.HOS.Services.Nfc.NfcManager;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Nfc
|
namespace Ryujinx.HLE.HOS.Services.Nfc
|
||||||
{
|
{
|
||||||
[Service("nfc:user")]
|
[Service("nfc:user")]
|
||||||
class IUserManager : IpcService
|
partial class IUserManager : IpcService
|
||||||
{
|
{
|
||||||
public IUserManager(ServiceCtx context) { }
|
public IUserManager(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ using Ryujinx.Common.Logging;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Nfc.NfcManager
|
namespace Ryujinx.HLE.HOS.Services.Nfc.NfcManager
|
||||||
{
|
{
|
||||||
class INfc : IpcService
|
partial class INfc : IpcService
|
||||||
{
|
{
|
||||||
private readonly NfcPermissionLevel _permissionLevel;
|
private readonly NfcPermissionLevel _permissionLevel;
|
||||||
private State _state;
|
private State _state;
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ using Ryujinx.HLE.HOS.Services.Nfc.Nfp.NfpManager;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Nfc.Nfp
|
namespace Ryujinx.HLE.HOS.Services.Nfc.Nfp
|
||||||
{
|
{
|
||||||
[Service("nfp:dbg")]
|
[Service("nfp:dbg")]
|
||||||
class IAmManager : IpcService
|
partial class IAmManager : IpcService
|
||||||
{
|
{
|
||||||
public IAmManager(ServiceCtx context) { }
|
public IAmManager(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ using Ryujinx.HLE.HOS.Services.Nfc.Nfp.NfpManager;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Nfc.Nfp
|
namespace Ryujinx.HLE.HOS.Services.Nfc.Nfp
|
||||||
{
|
{
|
||||||
[Service("nfp:sys")]
|
[Service("nfp:sys")]
|
||||||
class ISystemManager : IpcService
|
partial class ISystemManager : IpcService
|
||||||
{
|
{
|
||||||
public ISystemManager(ServiceCtx context) { }
|
public ISystemManager(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ using Ryujinx.HLE.HOS.Services.Nfc.Nfp.NfpManager;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Nfc.Nfp
|
namespace Ryujinx.HLE.HOS.Services.Nfc.Nfp
|
||||||
{
|
{
|
||||||
[Service("nfp:user")]
|
[Service("nfp:user")]
|
||||||
class IUserManager : IpcService
|
partial class IUserManager : IpcService
|
||||||
{
|
{
|
||||||
public IUserManager(ServiceCtx context) { }
|
public IUserManager(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Nfc.Nfp
|
namespace Ryujinx.HLE.HOS.Services.Nfc.Nfp
|
||||||
{
|
{
|
||||||
class INfp : IpcService
|
partial class INfp : IpcService
|
||||||
{
|
{
|
||||||
#pragma warning disable IDE0052 // Remove unread private member
|
#pragma warning disable IDE0052 // Remove unread private member
|
||||||
private ulong _appletResourceUserId;
|
private ulong _appletResourceUserId;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Ngct
|
namespace Ryujinx.HLE.HOS.Services.Ngct
|
||||||
{
|
{
|
||||||
[Service("ngct:u")] // 9.0.0+
|
[Service("ngct:u")] // 9.0.0+
|
||||||
class IService : IpcService
|
partial class IService : IpcService
|
||||||
{
|
{
|
||||||
public IService(ServiceCtx context) { }
|
public IService(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Ngct
|
namespace Ryujinx.HLE.HOS.Services.Ngct
|
||||||
{
|
{
|
||||||
[Service("ngct:s")] // 9.0.0+
|
[Service("ngct:s")] // 9.0.0+
|
||||||
class IServiceWithManagementApi : IpcService
|
partial class IServiceWithManagementApi : IpcService
|
||||||
{
|
{
|
||||||
public IServiceWithManagementApi(ServiceCtx context) { }
|
public IServiceWithManagementApi(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ namespace Ryujinx.HLE.HOS.Services.Nifm
|
|||||||
[Service("nifm:a")] // Max sessions: 2
|
[Service("nifm:a")] // Max sessions: 2
|
||||||
[Service("nifm:s")] // Max sessions: 16
|
[Service("nifm:s")] // Max sessions: 16
|
||||||
[Service("nifm:u")] // Max sessions: 5
|
[Service("nifm:u")] // Max sessions: 5
|
||||||
class IStaticService : IpcService
|
partial class IStaticService : IpcService
|
||||||
{
|
{
|
||||||
public IStaticService(ServiceCtx context) { }
|
public IStaticService(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ using System.Runtime.CompilerServices;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Nifm.StaticService
|
namespace Ryujinx.HLE.HOS.Services.Nifm.StaticService
|
||||||
{
|
{
|
||||||
class IGeneralService : DisposableIpcService
|
partial class IGeneralService : DisposableIpcService
|
||||||
{
|
{
|
||||||
private readonly GeneralServiceDetail _generalServiceDetail;
|
private readonly GeneralServiceDetail _generalServiceDetail;
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ using System;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Nifm.StaticService
|
namespace Ryujinx.HLE.HOS.Services.Nifm.StaticService
|
||||||
{
|
{
|
||||||
class IRequest : IpcService
|
partial class IRequest : IpcService
|
||||||
{
|
{
|
||||||
private enum RequestState
|
private enum RequestState
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ using Ryujinx.HLE.HOS.Services.Nim.ShopServiceAccessServerInterface.ShopServiceA
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Nim.ShopServiceAccessServerInterface
|
namespace Ryujinx.HLE.HOS.Services.Nim.ShopServiceAccessServerInterface
|
||||||
{
|
{
|
||||||
class IShopServiceAccessServer : IpcService
|
partial class IShopServiceAccessServer : IpcService
|
||||||
{
|
{
|
||||||
public IShopServiceAccessServer() { }
|
public IShopServiceAccessServer() { }
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ using Ryujinx.HLE.HOS.Services.Nim.ShopServiceAccessServerInterface;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Nim
|
namespace Ryujinx.HLE.HOS.Services.Nim
|
||||||
{
|
{
|
||||||
[Service("nim:eca")] // 5.0.0+
|
[Service("nim:eca")] // 5.0.0+
|
||||||
class IShopServiceAccessServerInterface : IpcService
|
partial class IShopServiceAccessServerInterface : IpcService
|
||||||
{
|
{
|
||||||
public IShopServiceAccessServerInterface(ServiceCtx context) { }
|
public IShopServiceAccessServerInterface(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ using System;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Nim.ShopServiceAccessServerInterface.ShopServiceAccessServer
|
namespace Ryujinx.HLE.HOS.Services.Nim.ShopServiceAccessServerInterface.ShopServiceAccessServer
|
||||||
{
|
{
|
||||||
class IShopServiceAccessor : IpcService
|
partial class IShopServiceAccessor : IpcService
|
||||||
{
|
{
|
||||||
private readonly KEvent _event;
|
private readonly KEvent _event;
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ using Ryujinx.HLE.HOS.Services.Nim.Ntc.StaticService;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Nim.Ntc
|
namespace Ryujinx.HLE.HOS.Services.Nim.Ntc
|
||||||
{
|
{
|
||||||
[Service("ntc")]
|
[Service("ntc")]
|
||||||
class IStaticService : IpcService
|
partial class IStaticService : IpcService
|
||||||
{
|
{
|
||||||
public IStaticService(ServiceCtx context) { }
|
public IStaticService(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ using System;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Nim.Ntc.StaticService
|
namespace Ryujinx.HLE.HOS.Services.Nim.Ntc.StaticService
|
||||||
{
|
{
|
||||||
class IEnsureNetworkClockAvailabilityService : IpcService
|
partial class IEnsureNetworkClockAvailabilityService : IpcService
|
||||||
{
|
{
|
||||||
private readonly KEvent _finishNotificationEvent;
|
private readonly KEvent _finishNotificationEvent;
|
||||||
private ResultCode _taskResultCode;
|
private ResultCode _taskResultCode;
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ using System.Collections.Generic;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Ns.Aoc
|
namespace Ryujinx.HLE.HOS.Services.Ns.Aoc
|
||||||
{
|
{
|
||||||
[Service("aoc:u")]
|
[Service("aoc:u")]
|
||||||
class IAddOnContentManager : IpcService
|
partial class IAddOnContentManager : IpcService
|
||||||
{
|
{
|
||||||
private readonly KEvent _addOnContentListChangedEvent;
|
private readonly KEvent _addOnContentListChangedEvent;
|
||||||
private int _addOnContentListChangedEventHandle;
|
private int _addOnContentListChangedEventHandle;
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ using System;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Ns.Aoc
|
namespace Ryujinx.HLE.HOS.Services.Ns.Aoc
|
||||||
{
|
{
|
||||||
class IPurchaseEventManager : IpcService
|
partial class IPurchaseEventManager : IpcService
|
||||||
{
|
{
|
||||||
private readonly KEvent _purchasedEvent;
|
private readonly KEvent _purchasedEvent;
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ using Ryujinx.Common.Utilities;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Ns
|
namespace Ryujinx.HLE.HOS.Services.Ns
|
||||||
{
|
{
|
||||||
[Service("ns:am")]
|
[Service("ns:am")]
|
||||||
class IApplicationManagerInterface : IpcService
|
partial class IApplicationManagerInterface : IpcService
|
||||||
{
|
{
|
||||||
public IApplicationManagerInterface(ServiceCtx context) { }
|
public IApplicationManagerInterface(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ using LibHac.Ns;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Ns
|
namespace Ryujinx.HLE.HOS.Services.Ns
|
||||||
{
|
{
|
||||||
class IReadOnlyApplicationControlDataInterface : IpcService
|
partial class IReadOnlyApplicationControlDataInterface : IpcService
|
||||||
{
|
{
|
||||||
public IReadOnlyApplicationControlDataInterface(ServiceCtx context) { }
|
public IReadOnlyApplicationControlDataInterface(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ namespace Ryujinx.HLE.HOS.Services.Ns
|
|||||||
[Service("ns:rid")]
|
[Service("ns:rid")]
|
||||||
[Service("ns:rt")]
|
[Service("ns:rt")]
|
||||||
[Service("ns:web")]
|
[Service("ns:web")]
|
||||||
class IServiceGetterInterface : IpcService
|
partial class IServiceGetterInterface : IpcService
|
||||||
{
|
{
|
||||||
public IServiceGetterInterface(ServiceCtx context) { }
|
public IServiceGetterInterface(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ namespace Ryujinx.HLE.HOS.Services.Nv
|
|||||||
[Service("nvdrv:a")]
|
[Service("nvdrv:a")]
|
||||||
[Service("nvdrv:s")]
|
[Service("nvdrv:s")]
|
||||||
[Service("nvdrv:t")]
|
[Service("nvdrv:t")]
|
||||||
class INvDrvServices : IpcService
|
partial class INvDrvServices : IpcService
|
||||||
{
|
{
|
||||||
private static readonly List<string> _deviceFileDebugRegistry =
|
private static readonly List<string> _deviceFileDebugRegistry =
|
||||||
[
|
[
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ using System.Collections.Generic;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Olsc
|
namespace Ryujinx.HLE.HOS.Services.Olsc
|
||||||
{
|
{
|
||||||
[Service("olsc:u")] // 10.0.0+
|
[Service("olsc:u")] // 10.0.0+
|
||||||
class IOlscServiceForApplication : IpcService
|
partial class IOlscServiceForApplication : IpcService
|
||||||
{
|
{
|
||||||
private bool _initialized;
|
private bool _initialized;
|
||||||
private Dictionary<UserId, bool> _saveDataBackupSettingDatabase;
|
private Dictionary<UserId, bool> _saveDataBackupSettingDatabase;
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ namespace Ryujinx.HLE.HOS.Services.Pctl
|
|||||||
[Service("pctl:a", 0x83BE)]
|
[Service("pctl:a", 0x83BE)]
|
||||||
[Service("pctl:r", 0x8040)]
|
[Service("pctl:r", 0x8040)]
|
||||||
[Service("pctl:s", 0x838E)]
|
[Service("pctl:s", 0x838E)]
|
||||||
class IParentalControlServiceFactory : IpcService
|
partial class IParentalControlServiceFactory : IpcService
|
||||||
{
|
{
|
||||||
private readonly int _permissionFlag;
|
private readonly int _permissionFlag;
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ using static LibHac.Ns.ApplicationControlProperty;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Pctl.ParentalControlServiceFactory
|
namespace Ryujinx.HLE.HOS.Services.Pctl.ParentalControlServiceFactory
|
||||||
{
|
{
|
||||||
class IParentalControlService : IpcService
|
partial class IParentalControlService : IpcService
|
||||||
{
|
{
|
||||||
private readonly ulong _pid;
|
private readonly ulong _pid;
|
||||||
private readonly int _permissionFlag;
|
private readonly int _permissionFlag;
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ using System;
|
|||||||
namespace Ryujinx.HLE.HOS.Services.Pcv.Bpc
|
namespace Ryujinx.HLE.HOS.Services.Pcv.Bpc
|
||||||
{
|
{
|
||||||
[Service("bpc:r")] // 1.0.0 - 8.1.0
|
[Service("bpc:r")] // 1.0.0 - 8.1.0
|
||||||
class IRtcManager : IpcService
|
partial class IRtcManager : IpcService
|
||||||
{
|
{
|
||||||
public IRtcManager(ServiceCtx context) { }
|
public IRtcManager(ServiceCtx context) { }
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ using System.Linq;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Pcv.Clkrst.ClkrstManager
|
namespace Ryujinx.HLE.HOS.Services.Pcv.Clkrst.ClkrstManager
|
||||||
{
|
{
|
||||||
class IClkrstSession : IpcService
|
partial class IClkrstSession : IpcService
|
||||||
{
|
{
|
||||||
private readonly DeviceCode _deviceCode;
|
private readonly DeviceCode _deviceCode;
|
||||||
#pragma warning disable IDE0052 // Remove unread private member
|
#pragma warning disable IDE0052 // Remove unread private member
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ namespace Ryujinx.HLE.HOS.Services.Pcv.Clkrst
|
|||||||
{
|
{
|
||||||
[Service("clkrst")] // 8.0.0+
|
[Service("clkrst")] // 8.0.0+
|
||||||
[Service("clkrst:i")] // 8.0.0+
|
[Service("clkrst:i")] // 8.0.0+
|
||||||
class IClkrstManager : IpcService
|
partial class IClkrstManager : IpcService
|
||||||
{
|
{
|
||||||
private int _moduleStateTableEventHandle = 0;
|
private int _moduleStateTableEventHandle = 0;
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user