summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/k_light_server_session.h
diff options
context:
space:
mode:
authorliamwhite <liamwhite@users.noreply.github.com>2023-12-10 01:03:50 +0100
committerGitHub <noreply@github.com>2023-12-10 01:03:50 +0100
commit988e557ec81a9f4b883e9089fedd6079f76e07e9 (patch)
tree2c223ebd34794fc8954d09a7f96fee132d749407 /src/core/hle/kernel/k_light_server_session.h
parentMerge pull request #12323 from liamwhite/buffer-format (diff)
parentkernel: implement light IPC (diff)
downloadyuzu-988e557ec81a9f4b883e9089fedd6079f76e07e9.tar
yuzu-988e557ec81a9f4b883e9089fedd6079f76e07e9.tar.gz
yuzu-988e557ec81a9f4b883e9089fedd6079f76e07e9.tar.bz2
yuzu-988e557ec81a9f4b883e9089fedd6079f76e07e9.tar.lz
yuzu-988e557ec81a9f4b883e9089fedd6079f76e07e9.tar.xz
yuzu-988e557ec81a9f4b883e9089fedd6079f76e07e9.tar.zst
yuzu-988e557ec81a9f4b883e9089fedd6079f76e07e9.zip
Diffstat (limited to 'src/core/hle/kernel/k_light_server_session.h')
-rw-r--r--src/core/hle/kernel/k_light_server_session.h49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/core/hle/kernel/k_light_server_session.h b/src/core/hle/kernel/k_light_server_session.h
new file mode 100644
index 000000000..8eca3eab6
--- /dev/null
+++ b/src/core/hle/kernel/k_light_server_session.h
@@ -0,0 +1,49 @@
+// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "core/hle/kernel/k_auto_object.h"
+#include "core/hle/kernel/k_thread.h"
+#include "core/hle/result.h"
+
+namespace Kernel {
+
+class KLightSession;
+
+class KLightServerSession final : public KAutoObject,
+ public Common::IntrusiveListBaseNode<KLightServerSession> {
+ KERNEL_AUTOOBJECT_TRAITS(KLightServerSession, KAutoObject);
+
+private:
+ KLightSession* m_parent{};
+ KThread::WaiterList m_request_list{};
+ KThread* m_current_request{};
+ u64 m_server_thread_id{std::numeric_limits<u64>::max()};
+ KThread* m_server_thread{};
+
+public:
+ explicit KLightServerSession(KernelCore& kernel);
+ ~KLightServerSession();
+
+ void Initialize(KLightSession* parent) {
+ // Set member variables. */
+ m_parent = parent;
+ }
+
+ virtual void Destroy() override;
+
+ constexpr const KLightSession* GetParent() const {
+ return m_parent;
+ }
+
+ Result OnRequest(KThread* request_thread);
+ Result ReplyAndReceive(u32* data);
+
+ void OnClientClosed();
+
+private:
+ void CleanupRequests();
+};
+
+} // namespace Kernel