summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYuri Kunde Schlesner <yuriks@yuriks.net>2017-06-05 22:25:22 -0700
committerYuri Kunde Schlesner <yuriks@yuriks.net>2017-06-06 02:57:04 -0700
commite5a59ef27c6a1fc66dfcbc63c84ad14dc73c54ae (patch)
tree82feb44406f4767d3c0bd401b016dc446ae06097 /src
parent1eee09f36458bbb98212e05cb549cc43a995f03b (diff)
Service/sm: Use an actual semaphore for the notification semaphore
An Event was used way back then when we didn't have proper working semaphores. Our Semaphore implementation is good enough now.
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/service/sm/srv.cpp17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/core/hle/service/sm/srv.cpp b/src/core/hle/service/sm/srv.cpp
index 9d7a83597..d6946c734 100644
--- a/src/core/hle/service/sm/srv.cpp
+++ b/src/core/hle/service/sm/srv.cpp
@@ -7,14 +7,16 @@
#include "common/common_types.h"
#include "common/logging/log.h"
#include "core/hle/kernel/client_session.h"
-#include "core/hle/kernel/event.h"
+#include "core/hle/kernel/semaphore.h"
#include "core/hle/kernel/server_session.h"
#include "core/hle/service/sm/srv.h"
namespace Service {
namespace SM {
-static Kernel::SharedPtr<Kernel::Event> event_handle;
+constexpr int MAX_PENDING_NOTIFICATIONS = 16;
+
+static Kernel::SharedPtr<Kernel::Semaphore> notification_semaphore;
/**
* SRV::RegisterClient service function
@@ -51,14 +53,13 @@ static void RegisterClient(Interface* self) {
static void EnableNotification(Interface* self) {
u32* cmd_buff = Kernel::GetCommandBuffer();
- // TODO(bunnei): Change to a semaphore once these have been implemented
- event_handle = Kernel::Event::Create(Kernel::ResetType::OneShot, "SRV:Event");
- event_handle->Clear();
+ notification_semaphore =
+ Kernel::Semaphore::Create(0, MAX_PENDING_NOTIFICATIONS, "SRV:Notification").Unwrap();
cmd_buff[0] = IPC::MakeHeader(0x2, 0x1, 0x2); // 0x20042
cmd_buff[1] = RESULT_SUCCESS.raw; // No error
cmd_buff[2] = IPC::CopyHandleDesc(1);
- cmd_buff[3] = Kernel::g_handle_table.Create(event_handle).MoveFrom();
+ cmd_buff[3] = Kernel::g_handle_table.Create(notification_semaphore).MoveFrom();
LOG_WARNING(Service_SRV, "(STUBBED) called");
}
@@ -177,11 +178,11 @@ const Interface::FunctionInfo FunctionTable[] = {
SRV::SRV() {
Register(FunctionTable);
- event_handle = nullptr;
+ notification_semaphore = nullptr;
}
SRV::~SRV() {
- event_handle = nullptr;
+ notification_semaphore = nullptr;
}
} // namespace SM