summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/kernel.h
diff options
context:
space:
mode:
authorGravatar bunnei2022-11-03 21:45:56 -0700
committerGravatar GitHub2022-11-03 21:45:56 -0700
commit37de88040c1999fed639004fb7200cabb8a5f9c0 (patch)
tree561f8439eb8cabd5f254701aaac05f728cdd1ade /src/core/hle/kernel/kernel.h
parentMerge pull request #9154 from liamwhite/new-fb (diff)
parentsm:: avoid excessive port recreation (diff)
downloadyuzu-37de88040c1999fed639004fb7200cabb8a5f9c0.tar.gz
yuzu-37de88040c1999fed639004fb7200cabb8a5f9c0.tar.xz
yuzu-37de88040c1999fed639004fb7200cabb8a5f9c0.zip
Merge pull request #9135 from liamwhite/service-thread-event
kernel: invert session request handling flow
Diffstat (limited to 'src/core/hle/kernel/kernel.h')
-rw-r--r--src/core/hle/kernel/kernel.h15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h
index 266be2bc4..4ae6b3923 100644
--- a/src/core/hle/kernel/kernel.h
+++ b/src/core/hle/kernel/kernel.h
@@ -45,6 +45,7 @@ class KPort;
45class KProcess; 45class KProcess;
46class KResourceLimit; 46class KResourceLimit;
47class KScheduler; 47class KScheduler;
48class KServerPort;
48class KServerSession; 49class KServerSession;
49class KSession; 50class KSession;
50class KSessionRequest; 51class KSessionRequest;
@@ -63,6 +64,8 @@ class TimeManager;
63using ServiceInterfaceFactory = 64using ServiceInterfaceFactory =
64 std::function<KClientPort&(Service::SM::ServiceManager&, Core::System&)>; 65 std::function<KClientPort&(Service::SM::ServiceManager&, Core::System&)>;
65 66
67using ServiceInterfaceHandlerFn = std::function<void(Service::SM::ServiceManager&, KServerPort*)>;
68
66namespace Init { 69namespace Init {
67struct KSlabResourceCounts; 70struct KSlabResourceCounts;
68} 71}
@@ -192,16 +195,14 @@ public:
192 /// Registers a named HLE service, passing a factory used to open a port to that service. 195 /// Registers a named HLE service, passing a factory used to open a port to that service.
193 void RegisterNamedService(std::string name, ServiceInterfaceFactory&& factory); 196 void RegisterNamedService(std::string name, ServiceInterfaceFactory&& factory);
194 197
198 /// Registers a setup function for the named HLE service.
199 void RegisterInterfaceForNamedService(std::string name, ServiceInterfaceHandlerFn&& handler);
200
195 /// Opens a port to a service previously registered with RegisterNamedService. 201 /// Opens a port to a service previously registered with RegisterNamedService.
196 KClientPort* CreateNamedServicePort(std::string name); 202 KClientPort* CreateNamedServicePort(std::string name);
197 203
198 /// Registers a server session or port with the gobal emulation state, to be freed on shutdown. 204 /// Accepts a session on a port created by CreateNamedServicePort.
199 /// This is necessary because we do not emulate processes for HLE sessions and ports. 205 void RegisterNamedServiceHandler(std::string name, KServerPort* server_port);
200 void RegisterServerObject(KAutoObject* server_object);
201
202 /// Unregisters a server session or port previously registered with RegisterServerSession when
203 /// it was destroyed during the current emulation session.
204 void UnregisterServerObject(KAutoObject* server_object);
205 206
206 /// Registers all kernel objects with the global emulation state, this is purely for tracking 207 /// Registers all kernel objects with the global emulation state, this is purely for tracking
207 /// leaks after emulation has been shutdown. 208 /// leaks after emulation has been shutdown.