summaryrefslogtreecommitdiff
path: root/src/core/hle/service/service.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/hle/service/service.cpp')
-rw-r--r--src/core/hle/service/service.cpp130
1 files changed, 55 insertions, 75 deletions
diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp
index 355196fd3..e0979ea5d 100644
--- a/src/core/hle/service/service.cpp
+++ b/src/core/hle/service/service.cpp
@@ -54,96 +54,76 @@
54 54
55namespace Service { 55namespace Service {
56 56
57Manager* g_manager = nullptr; ///< Service manager 57std::unordered_map<std::string, Kernel::SharedPtr<Interface>> g_kernel_named_ports;
58std::unordered_map<std::string, Kernel::SharedPtr<Interface>> g_srv_services;
58 59
59//////////////////////////////////////////////////////////////////////////////////////////////////// 60////////////////////////////////////////////////////////////////////////////////////////////////////
60// Service Manager class 61// Module interface
61
62void Manager::AddService(Interface* service) {
63 // TOOD(yuriks): Fix error reporting
64 m_port_map[service->GetPortName()] = Kernel::g_handle_table.Create(service).ValueOr(INVALID_HANDLE);
65 m_services.push_back(service);
66}
67
68void Manager::DeleteService(const std::string& port_name) {
69 Interface* service = FetchFromPortName(port_name);
70 m_services.erase(std::remove(m_services.begin(), m_services.end(), service), m_services.end());
71 m_port_map.erase(port_name);
72}
73 62
74Interface* Manager::FetchFromHandle(Handle handle) { 63static void AddNamedPort(Interface* interface) {
75 // TODO(yuriks): This function is very suspicious and should probably be exterminated. 64 g_kernel_named_ports.emplace(interface->GetPortName(), interface);
76 return Kernel::g_handle_table.Get<Interface>(handle).get();
77} 65}
78 66
79Interface* Manager::FetchFromPortName(const std::string& port_name) { 67static void AddService(Interface* interface) {
80 auto itr = m_port_map.find(port_name); 68 g_srv_services.emplace(interface->GetPortName(), interface);
81 if (itr == m_port_map.end()) {
82 return nullptr;
83 }
84 return FetchFromHandle(itr->second);
85} 69}
86 70
87
88////////////////////////////////////////////////////////////////////////////////////////////////////
89// Module interface
90
91/// Initialize ServiceManager 71/// Initialize ServiceManager
92void Init() { 72void Init() {
93 g_manager = new Manager; 73 AddNamedPort(new SRV::Interface);
94 74
95 g_manager->AddService(new SRV::Interface); 75 AddService(new AC_U::Interface);
96 g_manager->AddService(new AC_U::Interface); 76 AddService(new ACT_U::Interface);
97 g_manager->AddService(new ACT_U::Interface); 77 AddService(new AM_APP::Interface);
98 g_manager->AddService(new AM_APP::Interface); 78 AddService(new AM_NET::Interface);
99 g_manager->AddService(new AM_NET::Interface); 79 AddService(new AM_SYS::Interface);
100 g_manager->AddService(new AM_SYS::Interface); 80 AddService(new APT_A::Interface);
101 g_manager->AddService(new APT_A::Interface); 81 AddService(new APT_S::Interface);
102 g_manager->AddService(new APT_S::Interface); 82 AddService(new APT_U::Interface);
103 g_manager->AddService(new APT_U::Interface); 83 AddService(new BOSS_P::Interface);
104 g_manager->AddService(new BOSS_P::Interface); 84 AddService(new BOSS_U::Interface);
105 g_manager->AddService(new BOSS_U::Interface); 85 AddService(new CAM_U::Interface);
106 g_manager->AddService(new CAM_U::Interface); 86 AddService(new CECD_S::Interface);
107 g_manager->AddService(new CECD_S::Interface); 87 AddService(new CECD_U::Interface);
108 g_manager->AddService(new CECD_U::Interface); 88 AddService(new CFG_I::Interface);
109 g_manager->AddService(new CFG_I::Interface); 89 AddService(new CFG_S::Interface);
110 g_manager->AddService(new CFG_S::Interface); 90 AddService(new CFG_U::Interface);
111 g_manager->AddService(new CFG_U::Interface); 91 AddService(new CSND_SND::Interface);
112 g_manager->AddService(new CSND_SND::Interface); 92 AddService(new DSP_DSP::Interface);
113 g_manager->AddService(new DSP_DSP::Interface); 93 AddService(new ERR_F::Interface);
114 g_manager->AddService(new ERR_F::Interface); 94 AddService(new FRD_A::Interface);
115 g_manager->AddService(new FRD_A::Interface); 95 AddService(new FRD_U::Interface);
116 g_manager->AddService(new FRD_U::Interface); 96 AddService(new FS::FSUserInterface);
117 g_manager->AddService(new FS::FSUserInterface); 97 AddService(new GSP_GPU::Interface);
118 g_manager->AddService(new GSP_GPU::Interface); 98 AddService(new GSP_LCD::Interface);
119 g_manager->AddService(new GSP_LCD::Interface); 99 AddService(new HID_User::Interface);
120 g_manager->AddService(new HID_User::Interface); 100 AddService(new HID_SPVR::Interface);
121 g_manager->AddService(new HID_SPVR::Interface); 101 AddService(new HTTP_C::Interface);
122 g_manager->AddService(new HTTP_C::Interface); 102 AddService(new IR_RST::Interface);
123 g_manager->AddService(new IR_RST::Interface); 103 AddService(new IR_U::Interface);
124 g_manager->AddService(new IR_U::Interface); 104 AddService(new LDR_RO::Interface);
125 g_manager->AddService(new LDR_RO::Interface); 105 AddService(new MIC_U::Interface);
126 g_manager->AddService(new MIC_U::Interface); 106 AddService(new NDM_U::Interface);
127 g_manager->AddService(new NDM_U::Interface); 107 AddService(new NEWS_S::Interface);
128 g_manager->AddService(new NEWS_S::Interface); 108 AddService(new NEWS_U::Interface);
129 g_manager->AddService(new NEWS_U::Interface); 109 AddService(new NIM_AOC::Interface);
130 g_manager->AddService(new NIM_AOC::Interface); 110 AddService(new NS_S::Interface);
131 g_manager->AddService(new NS_S::Interface); 111 AddService(new NWM_UDS::Interface);
132 g_manager->AddService(new NWM_UDS::Interface); 112 AddService(new PM_APP::Interface);
133 g_manager->AddService(new PM_APP::Interface); 113 AddService(new PTM_PLAY::Interface);
134 g_manager->AddService(new PTM_PLAY::Interface); 114 AddService(new PTM_U::Interface);
135 g_manager->AddService(new PTM_U::Interface); 115 AddService(new PTM_SYSM::Interface);
136 g_manager->AddService(new PTM_SYSM::Interface); 116 AddService(new SOC_U::Interface);
137 g_manager->AddService(new SOC_U::Interface); 117 AddService(new SSL_C::Interface);
138 g_manager->AddService(new SSL_C::Interface); 118 AddService(new Y2R_U::Interface);
139 g_manager->AddService(new Y2R_U::Interface);
140 119
141 LOG_DEBUG(Service, "initialized OK"); 120 LOG_DEBUG(Service, "initialized OK");
142} 121}
143 122
144/// Shutdown ServiceManager 123/// Shutdown ServiceManager
145void Shutdown() { 124void Shutdown() {
146 delete g_manager; 125 g_srv_services.clear();
126 g_kernel_named_ports.clear();
147 LOG_DEBUG(Service, "shutdown OK"); 127 LOG_DEBUG(Service, "shutdown OK");
148} 128}
149 129