diff options
author | bunnei <bunneidev@gmail.com> | 2021-05-16 07:30:21 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-16 07:30:21 +0200 |
commit | 5a2b15bf75318987d773a2bc69bd6224a28b7939 (patch) | |
tree | f213f5b011410022e8e98f7c3905d16d575ed413 /src/core/hle/service/service.h | |
parent | Merge pull request #6289 from ameerj/oob-blit (diff) | |
parent | common: tree: Avoid a nullptr dereference. (diff) | |
download | yuzu-5a2b15bf75318987d773a2bc69bd6224a28b7939.tar yuzu-5a2b15bf75318987d773a2bc69bd6224a28b7939.tar.gz yuzu-5a2b15bf75318987d773a2bc69bd6224a28b7939.tar.bz2 yuzu-5a2b15bf75318987d773a2bc69bd6224a28b7939.tar.lz yuzu-5a2b15bf75318987d773a2bc69bd6224a28b7939.tar.xz yuzu-5a2b15bf75318987d773a2bc69bd6224a28b7939.tar.zst yuzu-5a2b15bf75318987d773a2bc69bd6224a28b7939.zip |
Diffstat (limited to 'src/core/hle/service/service.h')
-rw-r--r-- | src/core/hle/service/service.h | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/src/core/hle/service/service.h b/src/core/hle/service/service.h index 884951428..3dfb0740a 100644 --- a/src/core/hle/service/service.h +++ b/src/core/hle/service/service.h @@ -21,7 +21,9 @@ class System; namespace Kernel { class HLERequestContext; -} +class KClientPort; +class KServerSession; +} // namespace Kernel namespace Service { @@ -64,12 +66,19 @@ public: /// Creates a port pair and registers this service with the given ServiceManager. void InstallAsService(SM::ServiceManager& service_manager); - /// Creates a port pair and registers it on the kernel's global port registry. - void InstallAsNamedPort(Kernel::KernelCore& kernel); - /// Invokes a service request routine. + + /// Invokes a service request routine using the HIPC protocol. void InvokeRequest(Kernel::HLERequestContext& ctx); + + /// Invokes a service request routine using the HIPC protocol. + void InvokeRequestTipc(Kernel::HLERequestContext& ctx); + + /// Creates a port pair and registers it on the kernel's global port registry. + Kernel::KClientPort& CreatePort(Kernel::KernelCore& kernel); + /// Handles a synchronization request for the service. - ResultCode HandleSyncRequest(Kernel::HLERequestContext& context) override; + ResultCode HandleSyncRequest(Kernel::KServerSession& session, + Kernel::HLERequestContext& context) override; protected: /// Member-function pointer type of SyncRequest handlers. @@ -102,6 +111,7 @@ private: ~ServiceFrameworkBase() override; void RegisterHandlersBase(const FunctionInfoBase* functions, std::size_t n); + void RegisterHandlersBaseTipc(const FunctionInfoBase* functions, std::size_t n); void ReportUnimplementedFunction(Kernel::HLERequestContext& ctx, const FunctionInfoBase* info); /// Identifier string used to connect to the service. @@ -116,6 +126,7 @@ private: /// Function used to safely up-cast pointers to the derived class before invoking a handler. InvokerFn* handler_invoker; boost::container::flat_map<u32, FunctionInfoBase> handlers; + boost::container::flat_map<u32, FunctionInfoBase> handlers_tipc; /// Used to gain exclusive access to the service members, e.g. from CoreTiming thread. Common::SpinLock lock_service; @@ -183,6 +194,20 @@ protected: RegisterHandlersBase(functions, n); } + /// Registers handlers in the service. + template <std::size_t N> + void RegisterHandlersTipc(const FunctionInfo (&functions)[N]) { + RegisterHandlersTipc(functions, N); + } + + /** + * Registers handlers in the service. Usually prefer using the other RegisterHandlers + * overload in order to avoid needing to specify the array size. + */ + void RegisterHandlersTipc(const FunctionInfo* functions, std::size_t n) { + RegisterHandlersBaseTipc(functions, n); + } + private: /** * This function is used to allow invocation of pointers to handlers stored in the base class |