diff options
author | bunnei <bunneidev@gmail.com> | 2017-10-15 04:18:42 +0200 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2017-10-15 04:18:42 +0200 |
commit | 960a1416de3780e91855d9389c4534acf8c061df (patch) | |
tree | 6b373fed639eb39098ba33e6247893919005a2c8 /src/core/hle/service/service.h | |
parent | nso: Add a log for loading submodules. (diff) | |
download | yuzu-960a1416de3780e91855d9389c4534acf8c061df.tar yuzu-960a1416de3780e91855d9389c4534acf8c061df.tar.gz yuzu-960a1416de3780e91855d9389c4534acf8c061df.tar.bz2 yuzu-960a1416de3780e91855d9389c4534acf8c061df.tar.lz yuzu-960a1416de3780e91855d9389c4534acf8c061df.tar.xz yuzu-960a1416de3780e91855d9389c4534acf8c061df.tar.zst yuzu-960a1416de3780e91855d9389c4534acf8c061df.zip |
Diffstat (limited to '')
-rw-r--r-- | src/core/hle/service/service.h | 84 |
1 files changed, 4 insertions, 80 deletions
diff --git a/src/core/hle/service/service.h b/src/core/hle/service/service.h index 281ff99bb..07bc8589a 100644 --- a/src/core/hle/service/service.h +++ b/src/core/hle/service/service.h @@ -20,6 +20,7 @@ namespace Kernel { class ClientPort; class ServerPort; class ServerSession; +class HLERequestContext; } namespace Service { @@ -33,83 +34,6 @@ static const int kMaxPortSize = 8; ///< Maximum size of a port name (8 character static const u32 DefaultMaxSessions = 10; /** - * Framework for implementing HLE service handlers which dispatch incoming SyncRequests based on a - * table mapping header ids to handler functions. - * - * @deprecated Use ServiceFramework for new services instead. It allows services to be stateful and - * is more extensible going forward. - */ -class Interface : public Kernel::SessionRequestHandler { -public: - /** - * Creates an HLE interface with the specified max sessions. - * @param max_sessions Maximum number of sessions that can be - * connected to this service at the same time. - */ - Interface(u32 max_sessions = DefaultMaxSessions); - - virtual ~Interface(); - - std::string GetName() const { - return GetPortName(); - } - - virtual void SetVersion(u32 raw_version) { - version.raw = raw_version; - } - - /** - * Gets the maximum allowed number of sessions that can be connected to this service - * at the same time. - * @returns The maximum number of connections allowed. - */ - u32 GetMaxSessions() const { - return max_sessions; - } - - typedef void (*Function)(Interface*); - - struct FunctionInfo { - u32 id; - Function func; - const char* name; - }; - - /** - * Gets the string name used by CTROS for a service - * @return Port name of service - */ - virtual std::string GetPortName() const { - return "[UNKNOWN SERVICE PORT]"; - } - -protected: - void HandleSyncRequest(Kernel::SharedPtr<Kernel::ServerSession> server_session) override; - - /** - * Registers the functions in the service - */ - template <size_t N> - inline void Register(const FunctionInfo (&functions)[N]) { - Register(functions, N); - } - - void Register(const FunctionInfo* functions, size_t n); - - union { - u32 raw; - BitField<0, 8, u32> major; - BitField<8, 8, u32> minor; - BitField<16, 8, u32> build; - BitField<24, 8, u32> revision; - } version = {}; - -private: - u32 max_sessions; ///< Maximum number of concurrent sessions that this service can handle. - boost::container::flat_map<u32, FunctionInfo> m_functions; -}; - -/** * This is an non-templated base of ServiceFramework to reduce code bloat and compilation times, it * is not meant to be used directly. * @@ -135,6 +59,8 @@ public: /// Creates a port pair and registers it on the kernel's global port registry. void InstallAsNamedPort(); + void InvokeRequest(Kernel::HLERequestContext& ctx); + void HandleSyncRequest(Kernel::SharedPtr<Kernel::ServerSession> server_session) override; protected: @@ -159,7 +85,7 @@ private: ~ServiceFrameworkBase(); void RegisterHandlersBase(const FunctionInfoBase* functions, size_t n); - void ReportUnimplementedFunction(u32* cmd_buf, const FunctionInfoBase* info); + void ReportUnimplementedFunction(Kernel::HLERequestContext& ctx, const FunctionInfoBase* info); /// Identifier string used to connect to the service. std::string service_name; @@ -260,7 +186,5 @@ extern std::unordered_map<std::string, Kernel::SharedPtr<Kernel::ClientPort>> g_ /// Adds a port to the named port table void AddNamedPort(std::string name, Kernel::SharedPtr<Kernel::ClientPort> port); -/// Adds a service to the services table -void AddService(Interface* interface_); } // namespace |