aboutsummaryrefslogtreecommitdiff
path: root/src/core/hle/service/mm/mm_u.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/hle/service/mm/mm_u.cpp')
-rw-r--r--src/core/hle/service/mm/mm_u.cpp273
1 files changed, 138 insertions, 135 deletions
diff --git a/src/core/hle/service/mm/mm_u.cpp b/src/core/hle/service/mm/mm_u.cpp
index 8fa2341ffb..a5195da061 100644
--- a/src/core/hle/service/mm/mm_u.cpp
+++ b/src/core/hle/service/mm/mm_u.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
+// SPDX-License-Identifier: GPL-3.0-or-later
+
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -7,43 +10,43 @@
#include "core/hle/service/server_manager.h"
#include "core/hle/service/sm/sm.h"
-#include <vector>
-
+#include <vector>
+
namespace Service::MM {
-enum class Module : u32 {
- CPU = 0,
- GPU = 1,
- EMC = 2,
- SYS_BUS = 3,
- M_SELECT = 4,
- NVDEC = 5,
- NVENC = 6,
- NVJPG = 7,
- TEST = 8
-};
-
-class Session {
-public:
- Session(Module module_, u32 request_id_, bool is_auto_clear_event_) {
- this->module = module_;
- this->request_id = request_id_;
- this->is_auto_clear_event = is_auto_clear_event_;
- this->min = 0;
- this->max = -1;
- };
-
-public:
- Module module;
- u32 request_id, min;
- s32 max;
- bool is_auto_clear_event;
-
- void SetAndWait(u32 min_, s32 max_) {
- this->min = min_;
- this->max = max_;
- }
-};
-
+enum class Module : u32 {
+ CPU = 0,
+ GPU = 1,
+ EMC = 2,
+ SYS_BUS = 3,
+ M_SELECT = 4,
+ NVDEC = 5,
+ NVENC = 6,
+ NVJPG = 7,
+ TEST = 8
+};
+
+class Session {
+public:
+ Session(Module module_, u32 request_id_, bool is_auto_clear_event_) {
+ this->module = module_;
+ this->request_id = request_id_;
+ this->is_auto_clear_event = is_auto_clear_event_;
+ this->min = 0;
+ this->max = -1;
+ };
+
+public:
+ Module module;
+ u32 request_id, min;
+ s32 max;
+ bool is_auto_clear_event;
+
+ void SetAndWait(u32 min_, s32 max_) {
+ this->min = min_;
+ this->max = max_;
+ }
+};
+
class MM_U final : public ServiceFramework<MM_U> {
public:
explicit MM_U(Core::System& system_) : ServiceFramework{system_, "mm:u"} {
@@ -65,53 +68,53 @@ public:
private:
void InitializeOld(HLERequestContext& ctx) {
- LOG_DEBUG(Service_MM, "(STUBBED) called");
-
- IPC::RequestParser rp{ctx};
- const auto module = rp.PopEnum<Module>();
- rp.Pop<u32>();
- const auto event_clear_mode = rp.Pop<u32>();
-
- const bool is_auto_clear_event = event_clear_mode == 1;
-
- sessions.push_back({module, request_id++, is_auto_clear_event});
-
+ LOG_DEBUG(Service_MM, "(STUBBED) called");
+
+ IPC::RequestParser rp{ctx};
+ const auto module = rp.PopEnum<Module>();
+ rp.Pop<u32>();
+ const auto event_clear_mode = rp.Pop<u32>();
+
+ const bool is_auto_clear_event = event_clear_mode == 1;
+
+ sessions.push_back({module, request_id++, is_auto_clear_event});
+
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(ResultSuccess);
}
void FinalizeOld(HLERequestContext& ctx) {
- LOG_DEBUG(Service_MM, "(STUBBED) called");
-
- IPC::RequestParser rp{ctx};
- const auto module = rp.PopEnum<Module>();
-
- for (auto it = sessions.begin(); it != sessions.end(); ++it) {
- if (it->module == module) {
- sessions.erase(it);
- break;
- }
- }
+ LOG_DEBUG(Service_MM, "(STUBBED) called");
+
+ IPC::RequestParser rp{ctx};
+ const auto module = rp.PopEnum<Module>();
+
+ for (auto it = sessions.begin(); it != sessions.end(); ++it) {
+ if (it->module == module) {
+ sessions.erase(it);
+ break;
+ }
+ }
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(ResultSuccess);
}
void SetAndWaitOld(HLERequestContext& ctx) {
- LOG_DEBUG(Service_MM, "(STUBBED) called");
-
+ LOG_DEBUG(Service_MM, "(STUBBED) called");
+
IPC::RequestParser rp{ctx};
- const auto module = rp.PopEnum<Module>();
- const auto min = rp.Pop<u32>();
- const auto max = rp.Pop<s32>();
-
- for (auto& session : sessions) {
- if (session.module == module) {
- session.SetAndWait(min, max);
- break;
- }
- }
-
+ const auto module = rp.PopEnum<Module>();
+ const auto min = rp.Pop<u32>();
+ const auto max = rp.Pop<s32>();
+
+ for (auto& session : sessions) {
+ if (session.module == module) {
+ session.SetAndWait(min, max);
+ break;
+ }
+ }
+
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(ResultSuccess);
}
@@ -119,72 +122,72 @@ private:
void GetOld(HLERequestContext& ctx) {
LOG_DEBUG(Service_MM, "(STUBBED) called");
- IPC::RequestParser rp{ctx};
- const auto module = rp.PopEnum<Module>();
-
- for (const auto& session : sessions) {
- if (session.module == module) {
- IPC::ResponseBuilder rb{ctx, 2};
- rb.Push(ResultSuccess);
- rb.Push(session.min);
- return;
- }
- }
-
+ IPC::RequestParser rp{ctx};
+ const auto module = rp.PopEnum<Module>();
+
+ for (const auto& session : sessions) {
+ if (session.module == module) {
+ IPC::ResponseBuilder rb{ctx, 2};
+ rb.Push(ResultSuccess);
+ rb.Push(session.min);
+ return;
+ }
+ }
+
IPC::ResponseBuilder rb{ctx, 3};
rb.Push(ResultSuccess);
- rb.Push<u32>(0);
+ rb.Push<u32>(0);
}
void Initialize(HLERequestContext& ctx) {
- LOG_DEBUG(Service_MM, "(STUBBED) called");
-
- IPC::RequestParser rp{ctx};
- const auto module = rp.PopEnum<Module>();
- rp.Pop<u32>();
- const auto event_clear_mode = rp.Pop<u32>();
-
- const bool is_auto_clear_event = event_clear_mode == 1;
-
- sessions.push_back({module, request_id++, is_auto_clear_event});
+ LOG_DEBUG(Service_MM, "(STUBBED) called");
+
+ IPC::RequestParser rp{ctx};
+ const auto module = rp.PopEnum<Module>();
+ rp.Pop<u32>();
+ const auto event_clear_mode = rp.Pop<u32>();
+
+ const bool is_auto_clear_event = event_clear_mode == 1;
+
+ sessions.push_back({module, request_id++, is_auto_clear_event});
IPC::ResponseBuilder rb{ctx, 3};
rb.Push(ResultSuccess);
- rb.Push(request_id - 1);
+ rb.Push(request_id - 1);
}
void Finalize(HLERequestContext& ctx) {
- LOG_DEBUG(Service_MM, "(STUBBED) called");
-
- IPC::RequestParser rp{ctx};
- const auto id = rp.Pop<u32>();
-
- for (auto it = sessions.begin(); it != sessions.end(); ++it) {
- if (it->request_id == id) {
- sessions.erase(it);
- break;
- }
- }
-
+ LOG_DEBUG(Service_MM, "(STUBBED) called");
+
+ IPC::RequestParser rp{ctx};
+ const auto id = rp.Pop<u32>();
+
+ for (auto it = sessions.begin(); it != sessions.end(); ++it) {
+ if (it->request_id == id) {
+ sessions.erase(it);
+ break;
+ }
+ }
+
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(ResultSuccess);
}
void SetAndWait(HLERequestContext& ctx) {
- LOG_DEBUG(Service_MM, "(STUBBED) called");
-
+ LOG_DEBUG(Service_MM, "(STUBBED) called");
+
IPC::RequestParser rp{ctx};
- const auto id = rp.Pop<u32>();
- const auto min = rp.Pop<u32>();
- const auto max = rp.Pop<s32>();
-
- for (auto& session : sessions) {
- if (session.request_id == id) {
- session.SetAndWait(min, max);
- break;
- }
- }
-
+ const auto id = rp.Pop<u32>();
+ const auto min = rp.Pop<u32>();
+ const auto max = rp.Pop<s32>();
+
+ for (auto& session : sessions) {
+ if (session.request_id == id) {
+ session.SetAndWait(min, max);
+ break;
+ }
+ }
+
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(ResultSuccess);
}
@@ -192,25 +195,25 @@ private:
void Get(HLERequestContext& ctx) {
LOG_DEBUG(Service_MM, "(STUBBED) called");
- IPC::RequestParser rp{ctx};
- const auto id = rp.Pop<u32>();
-
- for (const auto& session : sessions) {
- if (session.request_id == id) {
- IPC::ResponseBuilder rb{ctx, 3};
- rb.Push(ResultSuccess);
- rb.Push(session.min);
- return;
- }
- }
-
+ IPC::RequestParser rp{ctx};
+ const auto id = rp.Pop<u32>();
+
+ for (const auto& session : sessions) {
+ if (session.request_id == id) {
+ IPC::ResponseBuilder rb{ctx, 3};
+ rb.Push(ResultSuccess);
+ rb.Push(session.min);
+ return;
+ }
+ }
+
IPC::ResponseBuilder rb{ctx, 3};
rb.Push(ResultSuccess);
- rb.Push<u32>(0);
+ rb.Push<u32>(0);
}
- std::vector<Session> sessions;
- u32 request_id{1};
+ std::vector<Session> sessions;
+ u32 request_id{1};
};
void LoopProcess(Core::System& system) {