From 72132cd97e407281c1e000e822605e93ab8c6ede Mon Sep 17 00:00:00 2001
From: wheremyfoodat <gponiris2004@gmail.com>
Date: Sat, 15 Oct 2022 23:19:28 +0300
Subject: [PATCH] [Kernel] Register CreateMutex in the SVC table

---
 include/kernel/kernel.hpp   | 1 +
 src/core/kernel/kernel.cpp  | 1 +
 src/core/kernel/threads.cpp | 7 +++++++
 3 files changed, 9 insertions(+)

diff --git a/include/kernel/kernel.hpp b/include/kernel/kernel.hpp
index a1e60404..f16a5cce 100644
--- a/include/kernel/kernel.hpp
+++ b/include/kernel/kernel.hpp
@@ -82,6 +82,7 @@ class Kernel {
 	void clearEvent();
 	void createAddressArbiter();
 	void createEvent();
+	void createMutex();
 	void createThread();
 	void controlMemory();
 	void duplicateHandle();
diff --git a/src/core/kernel/kernel.cpp b/src/core/kernel/kernel.cpp
index 66289da0..6cfc9ccd 100644
--- a/src/core/kernel/kernel.cpp
+++ b/src/core/kernel/kernel.cpp
@@ -24,6 +24,7 @@ void Kernel::serviceSVC(u32 svc) {
 		case 0x02: queryMemory(); break;
 		case 0x08: createThread(); break;
 		case 0x0A: svcSleepThread(); break;
+		case 0x13: createMutex(); break;
 		case 0x14: releaseMutex(); break;
 		case 0x17: createEvent(); break;
 		case 0x18: signalEvent(); break;
diff --git a/src/core/kernel/threads.cpp b/src/core/kernel/threads.cpp
index 7db8c3bf..8712c5af 100644
--- a/src/core/kernel/threads.cpp
+++ b/src/core/kernel/threads.cpp
@@ -213,6 +213,13 @@ void Kernel::getThreadID() {
 	regs[1] = thread->getData<Thread>()->index;
 }
 
+void Kernel::createMutex() {
+	bool locked = regs[1] != 0;
+	Helpers::panic("CreateMutex (initially locked: %s)\n", locked ? "yes" : "no");
+
+	regs[0] = SVCResult::Success;
+}
+
 void Kernel::releaseMutex() {
 	const Handle handle = regs[0];