Create a single guest process per IPC message processor (#1769)
This commit is contained in:
parent
bc11443621
commit
f7617cae12
10 changed files with 30 additions and 9 deletions
|
@ -14,6 +14,7 @@ using Ryujinx.HLE.HOS.Kernel;
|
||||||
using Ryujinx.HLE.HOS.Kernel.Memory;
|
using Ryujinx.HLE.HOS.Kernel.Memory;
|
||||||
using Ryujinx.HLE.HOS.Kernel.Process;
|
using Ryujinx.HLE.HOS.Kernel.Process;
|
||||||
using Ryujinx.HLE.HOS.Kernel.Threading;
|
using Ryujinx.HLE.HOS.Kernel.Threading;
|
||||||
|
using Ryujinx.HLE.HOS.Services;
|
||||||
using Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.SystemAppletProxy;
|
using Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.SystemAppletProxy;
|
||||||
using Ryujinx.HLE.HOS.Services.Apm;
|
using Ryujinx.HLE.HOS.Services.Apm;
|
||||||
using Ryujinx.HLE.HOS.Services.Arp;
|
using Ryujinx.HLE.HOS.Services.Arp;
|
||||||
|
@ -58,6 +59,16 @@ namespace Ryujinx.HLE.HOS
|
||||||
|
|
||||||
internal AppletStateMgr AppletState { get; private set; }
|
internal AppletStateMgr AppletState { get; private set; }
|
||||||
|
|
||||||
|
internal ServerBase BsdServer { get; private set; }
|
||||||
|
internal ServerBase AudRenServer { get; private set; }
|
||||||
|
internal ServerBase AudOutServer { get; private set; }
|
||||||
|
internal ServerBase HidServer { get; private set; }
|
||||||
|
internal ServerBase NvDrvServer { get; private set; }
|
||||||
|
internal ServerBase TimeServer { get; private set; }
|
||||||
|
internal ServerBase ViServer { get; private set; }
|
||||||
|
internal ServerBase ViServerM { get; private set; }
|
||||||
|
internal ServerBase ViServerS { get; private set; }
|
||||||
|
|
||||||
internal KSharedMemory HidSharedMem { get; private set; }
|
internal KSharedMemory HidSharedMem { get; private set; }
|
||||||
internal KSharedMemory FontSharedMem { get; private set; }
|
internal KSharedMemory FontSharedMem { get; private set; }
|
||||||
internal KSharedMemory IirsSharedMem { get; private set; }
|
internal KSharedMemory IirsSharedMem { get; private set; }
|
||||||
|
@ -230,6 +241,16 @@ namespace Ryujinx.HLE.HOS
|
||||||
// only then doing connections to SM is safe.
|
// only then doing connections to SM is safe.
|
||||||
sm.Server.InitDone.WaitOne();
|
sm.Server.InitDone.WaitOne();
|
||||||
sm.Server.InitDone.Dispose();
|
sm.Server.InitDone.Dispose();
|
||||||
|
|
||||||
|
BsdServer = new ServerBase(KernelContext, "BsdServer");
|
||||||
|
AudRenServer = new ServerBase(KernelContext, "AudioRendererServer");
|
||||||
|
AudOutServer = new ServerBase(KernelContext, "AudioOutServer");
|
||||||
|
HidServer = new ServerBase(KernelContext, "HidServer");
|
||||||
|
NvDrvServer = new ServerBase(KernelContext, "NvservicesServer");
|
||||||
|
TimeServer = new ServerBase(KernelContext, "TimeServer");
|
||||||
|
ViServer = new ServerBase(KernelContext, "ViServerU");
|
||||||
|
ViServerM = new ServerBase(KernelContext, "ViServerM");
|
||||||
|
ViServerS = new ServerBase(KernelContext, "ViServerS");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LoadKip(string kipPath)
|
public void LoadKip(string kipPath)
|
||||||
|
|
|
@ -16,7 +16,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
||||||
|
|
||||||
public AudioRendererManagerServer(ServiceCtx context) : this(context, new AudioRendererManager(context.Device.System.AudioRendererManager, context.Device.System.AudioDeviceSessionRegistry)) { }
|
public AudioRendererManagerServer(ServiceCtx context) : this(context, new AudioRendererManager(context.Device.System.AudioRendererManager, context.Device.System.AudioDeviceSessionRegistry)) { }
|
||||||
|
|
||||||
public AudioRendererManagerServer(ServiceCtx context, IAudioRendererManager impl) : base(new ServerBase(context.Device.System.KernelContext, "AudioRendererServer"))
|
public AudioRendererManagerServer(ServiceCtx context, IAudioRendererManager impl) : base(context.Device.System.AudRenServer)
|
||||||
{
|
{
|
||||||
_impl = impl;
|
_impl = impl;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
||||||
private const int DefaultSampleRate = 48000;
|
private const int DefaultSampleRate = 48000;
|
||||||
private const int DefaultChannelsCount = 2;
|
private const int DefaultChannelsCount = 2;
|
||||||
|
|
||||||
public IAudioOutManager(ServiceCtx context) : base(new ServerBase(context.Device.System.KernelContext, "AudioOutServer")) { }
|
public IAudioOutManager(ServiceCtx context) : base(context.Device.System.AudOutServer) { }
|
||||||
|
|
||||||
[Command(0)]
|
[Command(0)]
|
||||||
// ListAudioOuts() -> (u32 count, buffer<bytes, 6>)
|
// ListAudioOuts() -> (u32 count, buffer<bytes, 6>)
|
||||||
|
|
|
@ -35,7 +35,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
||||||
private HidAccelerometerParameters _accelerometerParams;
|
private HidAccelerometerParameters _accelerometerParams;
|
||||||
private HidVibrationValue _vibrationValue;
|
private HidVibrationValue _vibrationValue;
|
||||||
|
|
||||||
public IHidServer(ServiceCtx context) : base(new ServerBase(context.Device.System.KernelContext, "HidServer"))
|
public IHidServer(ServiceCtx context) : base(context.Device.System.HidServer)
|
||||||
{
|
{
|
||||||
_xpadIdEvent = new KEvent(context.Device.System.KernelContext);
|
_xpadIdEvent = new KEvent(context.Device.System.KernelContext);
|
||||||
_palmaOperationCompleteEvent = new KEvent(context.Device.System.KernelContext);
|
_palmaOperationCompleteEvent = new KEvent(context.Device.System.KernelContext);
|
||||||
|
|
|
@ -46,7 +46,7 @@ namespace Ryujinx.HLE.HOS.Services.Nv
|
||||||
|
|
||||||
private bool _transferMemInitialized = false;
|
private bool _transferMemInitialized = false;
|
||||||
|
|
||||||
public INvDrvServices(ServiceCtx context) : base(new ServerBase(context.Device.System.KernelContext, "NvservicesServer"))
|
public INvDrvServices(ServiceCtx context) : base(context.Device.System.NvDrvServer)
|
||||||
{
|
{
|
||||||
_owner = 0;
|
_owner = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -102,7 +102,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd
|
||||||
|
|
||||||
private List<BsdSocket> _sockets = new List<BsdSocket>();
|
private List<BsdSocket> _sockets = new List<BsdSocket>();
|
||||||
|
|
||||||
public IClient(ServiceCtx context, bool isPrivileged) : base(new ServerBase(context.Device.System.KernelContext, "BsdServer"))
|
public IClient(ServiceCtx context, bool isPrivileged) : base(context.Device.System.BsdServer)
|
||||||
{
|
{
|
||||||
_isPrivileged = isPrivileged;
|
_isPrivileged = isPrivileged;
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@ namespace Ryujinx.HLE.HOS.Services.Time
|
||||||
private IStaticServiceForPsc _inner;
|
private IStaticServiceForPsc _inner;
|
||||||
private TimePermissions _permissions;
|
private TimePermissions _permissions;
|
||||||
|
|
||||||
public IStaticServiceForGlue(ServiceCtx context, TimePermissions permissions) : base(new ServerBase(context.Device.System.KernelContext, "TimeServer"))
|
public IStaticServiceForGlue(ServiceCtx context, TimePermissions permissions) : base(context.Device.System.TimeServer)
|
||||||
{
|
{
|
||||||
_permissions = permissions;
|
_permissions = permissions;
|
||||||
_inner = new IStaticServiceForPsc(context, permissions);
|
_inner = new IStaticServiceForPsc(context, permissions);
|
||||||
|
|
|
@ -5,7 +5,7 @@ namespace Ryujinx.HLE.HOS.Services.Vi
|
||||||
[Service("vi:u")]
|
[Service("vi:u")]
|
||||||
class IApplicationRootService : IpcService
|
class IApplicationRootService : IpcService
|
||||||
{
|
{
|
||||||
public IApplicationRootService(ServiceCtx context) : base(new ServerBase(context.Device.System.KernelContext, "ViServerU")) { }
|
public IApplicationRootService(ServiceCtx context) : base(context.Device.System.ViServer) { }
|
||||||
|
|
||||||
[Command(0)]
|
[Command(0)]
|
||||||
// GetDisplayService(u32) -> object<nn::visrv::sf::IApplicationDisplayService>
|
// GetDisplayService(u32) -> object<nn::visrv::sf::IApplicationDisplayService>
|
||||||
|
|
|
@ -6,7 +6,7 @@ namespace Ryujinx.HLE.HOS.Services.Vi
|
||||||
class IManagerRootService : IpcService
|
class IManagerRootService : IpcService
|
||||||
{
|
{
|
||||||
// vi:u/m/s aren't on 3 separate threads but we can't put them together with the current ServerBase
|
// vi:u/m/s aren't on 3 separate threads but we can't put them together with the current ServerBase
|
||||||
public IManagerRootService(ServiceCtx context) : base(new ServerBase(context.Device.System.KernelContext, "ViServerM")) { }
|
public IManagerRootService(ServiceCtx context) : base(context.Device.System.ViServerM) { }
|
||||||
|
|
||||||
[Command(2)]
|
[Command(2)]
|
||||||
// GetDisplayService(u32) -> object<nn::visrv::sf::IApplicationDisplayService>
|
// GetDisplayService(u32) -> object<nn::visrv::sf::IApplicationDisplayService>
|
||||||
|
|
|
@ -6,7 +6,7 @@ namespace Ryujinx.HLE.HOS.Services.Vi
|
||||||
class ISystemRootService : IpcService
|
class ISystemRootService : IpcService
|
||||||
{
|
{
|
||||||
// vi:u/m/s aren't on 3 separate threads but we can't put them together with the current ServerBase
|
// vi:u/m/s aren't on 3 separate threads but we can't put them together with the current ServerBase
|
||||||
public ISystemRootService(ServiceCtx context) : base(new ServerBase(context.Device.System.KernelContext, "ViServerS")) { }
|
public ISystemRootService(ServiceCtx context) : base(context.Device.System.ViServerS) { }
|
||||||
|
|
||||||
[Command(1)]
|
[Command(1)]
|
||||||
// GetDisplayService(u32) -> object<nn::visrv::sf::IApplicationDisplayService>
|
// GetDisplayService(u32) -> object<nn::visrv::sf::IApplicationDisplayService>
|
||||||
|
|
Reference in a new issue