From 9821bfcb8e6be2e220ae757d65d47cd478e8bfc8 Mon Sep 17 00:00:00 2001
From: purpasmart96 <purpasmart96@users.noreply.github.com>
Date: Wed, 12 Nov 2014 13:13:08 -0800
Subject: [PATCH] Add more services and some fixes, along with more "override"
 in the service's headers

---
 src/core/CMakeLists.txt           | 12 +++++++
 src/core/hle/service/ac_u.cpp     |  6 ++--
 src/core/hle/service/ac_u.h       |  2 +-
 src/core/hle/service/am_net.cpp   | 47 ++++++++++++++++++++++++
 src/core/hle/service/am_net.h     | 27 ++++++++++++++
 src/core/hle/service/cfg_i.cpp    | 59 +++++++++++++++++++++++++++++++
 src/core/hle/service/cfg_i.h      | 27 ++++++++++++++
 src/core/hle/service/cfg_u.h      |  2 +-
 src/core/hle/service/csnd_snd.cpp | 39 ++++++++++++++++++++
 src/core/hle/service/csnd_snd.h   | 27 ++++++++++++++
 src/core/hle/service/dsp_dsp.cpp  |  4 +--
 src/core/hle/service/dsp_dsp.h    |  2 +-
 src/core/hle/service/err_f.h      |  2 +-
 src/core/hle/service/frd_u.h      |  2 +-
 src/core/hle/service/ir_rst.cpp   | 36 +++++++++++++++++++
 src/core/hle/service/ir_rst.h     | 27 ++++++++++++++
 src/core/hle/service/ir_u.cpp     | 45 +++++++++++++++++++++++
 src/core/hle/service/ir_u.h       | 27 ++++++++++++++
 src/core/hle/service/mic_u.h      |  2 +-
 src/core/hle/service/nwm_uds.h    |  2 +-
 src/core/hle/service/pm_app.cpp   | 35 ++++++++++++++++++
 src/core/hle/service/pm_app.h     | 27 ++++++++++++++
 src/core/hle/service/ptm_u.cpp    |  6 ++--
 src/core/hle/service/ptm_u.h      |  2 +-
 src/core/hle/service/service.cpp  | 12 +++++++
 src/core/hle/service/soc_u.h      |  2 +-
 26 files changed, 464 insertions(+), 17 deletions(-)
 create mode 100644 src/core/hle/service/am_net.cpp
 create mode 100644 src/core/hle/service/am_net.h
 create mode 100644 src/core/hle/service/cfg_i.cpp
 create mode 100644 src/core/hle/service/cfg_i.h
 create mode 100644 src/core/hle/service/csnd_snd.cpp
 create mode 100644 src/core/hle/service/csnd_snd.h
 create mode 100644 src/core/hle/service/ir_rst.cpp
 create mode 100644 src/core/hle/service/ir_rst.h
 create mode 100644 src/core/hle/service/ir_u.cpp
 create mode 100644 src/core/hle/service/ir_u.h
 create mode 100644 src/core/hle/service/pm_app.cpp
 create mode 100644 src/core/hle/service/pm_app.h

diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 2315cc791..b3bfbca9e 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -31,18 +31,24 @@ set(SRCS
             hle/kernel/shared_memory.cpp
             hle/kernel/thread.cpp
             hle/service/ac_u.cpp
+            hle/service/am_net.cpp
             hle/service/apt_u.cpp
             hle/service/boss_u.cpp
+            hle/service/cfg_i.cpp
             hle/service/cfg_u.cpp
+            hle/service/csnd_snd.cpp
             hle/service/dsp_dsp.cpp
             hle/service/err_f.cpp
             hle/service/fs_user.cpp
             hle/service/frd_u.cpp
             hle/service/gsp_gpu.cpp
             hle/service/hid_user.cpp
+            hle/service/ir_rst.cpp
+            hle/service/ir_u.cpp
             hle/service/mic_u.cpp
             hle/service/ndm_u.cpp
             hle/service/nwm_uds.cpp
+            hle/service/pm_app.cpp
             hle/service/ptm_u.cpp
             hle/service/service.cpp
             hle/service/soc_u.cpp
@@ -103,18 +109,24 @@ set(HEADERS
             hle/kernel/shared_memory.h
             hle/kernel/thread.h
             hle/service/ac_u.h
+            hle/service/am_net.h
             hle/service/apt_u.h
             hle/service/boss_u.h
+            hle/service/cfg_i.h
             hle/service/cfg_u.h
+            hle/service/csnd_snd.h
             hle/service/dsp_dsp.h
             hle/service/err_f.h
             hle/service/fs_user.h
             hle/service/frd_u.h
             hle/service/gsp_gpu.h
             hle/service/hid_user.h
+            hle/service/ir_rst.h
+            hle/service/ir_u.h
             hle/service/mic_u.h
             hle/service/ndm_u.h
             hle/service/nwm_uds.h
+            hle/service/pm_app.h
             hle/service/ptm_u.h
             hle/service/service.h
             hle/service/soc_u.h
diff --git a/src/core/hle/service/ac_u.cpp b/src/core/hle/service/ac_u.cpp
index b39603bdf..9af96f6b8 100644
--- a/src/core/hle/service/ac_u.cpp
+++ b/src/core/hle/service/ac_u.cpp
@@ -22,12 +22,12 @@ const Interface::FunctionInfo FunctionTable[] = {
     {0x000E0042, nullptr,               "GetCurrentAPInfo"},
     {0x00100042, nullptr,               "GetCurrentNZoneInfo"},
     {0x00110042, nullptr,               "GetNZoneApNumService"},
-    {0x00240042, nullptr,               "AddDenyApType "},
-    {0x00270002, nullptr,               "GetInfraPriority "},
+    {0x00240042, nullptr,               "AddDenyApType"},
+    {0x00270002, nullptr,               "GetInfraPriority"},
     {0x002D0082, nullptr,               "SetRequestEulaVersion"},
     {0x00300004, nullptr,               "RegisterDisconnectEvent"},
     {0x003C0042, nullptr,               "GetAPSSIDList"},
-    {0x003E0042, nullptr,               "IsConnected "},
+    {0x003E0042, nullptr,               "IsConnected"},
     {0x00400042, nullptr,               "SetClientVersion"},
 };
 
diff --git a/src/core/hle/service/ac_u.h b/src/core/hle/service/ac_u.h
index 8509a793e..c91b28353 100644
--- a/src/core/hle/service/ac_u.h
+++ b/src/core/hle/service/ac_u.h
@@ -21,7 +21,7 @@ public:
      * Gets the string port name used by CTROS for the service
      * @return Port name of service
      */
-    std::string GetPortName() const {
+    std::string GetPortName() const override {
         return "ac:u";
     }
 };
diff --git a/src/core/hle/service/am_net.cpp b/src/core/hle/service/am_net.cpp
new file mode 100644
index 000000000..403cac353
--- /dev/null
+++ b/src/core/hle/service/am_net.cpp
@@ -0,0 +1,47 @@
+// Copyright 2014 Citra Emulator Project
+// Licensed under GPLv2
+// Refer to the license.txt file included.
+
+#include "common/log.h"
+#include "core/hle/hle.h"
+#include "core/hle/service/am_net.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Namespace AM_NET
+
+namespace AM_NET {
+
+const Interface::FunctionInfo FunctionTable[] = {
+    {0x08010000, nullptr,               "OpenTicket"},
+    {0x08020002, nullptr,               "TicketAbortInstall"},
+    {0x08030002, nullptr,               "TicketFinalizeInstall"},
+    {0x08040100, nullptr,               "InstallTitleBegin"},
+    {0x08050000, nullptr,               "InstallTitleAbort"},
+    {0x080600C0, nullptr,               "InstallTitleResume"},
+    {0x08070000, nullptr,               "InstallTitleAbortTMD"},
+    {0x08080000, nullptr,               "InstallTitleFinish"},
+    {0x080A0000, nullptr,               "OpenTMD"},
+    {0x080B0002, nullptr,               "TMDAbortInstall"},
+    {0x080C0042, nullptr,               "TMDFinalizeInstall"},
+    {0x080E0040, nullptr,               "OpenContentCreate"},
+    {0x080F0002, nullptr,               "ContentAbortInstall"},
+    {0x08100040, nullptr,               "OpenContentResume"},
+    {0x08120002, nullptr,               "ContentFinalizeInstall"},
+    {0x08130000, nullptr,               "GetTotalContents"},
+    {0x08140042, nullptr,               "GetContentIndexes"},
+    {0x08150044, nullptr,               "GetContentsInfo"},
+    {0x08190108, nullptr,               "Unknown"},
+    {0x081B00C2, nullptr,               "InstallTitlesFinish"},
+};
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Interface class
+
+Interface::Interface() {
+    Register(FunctionTable, ARRAY_SIZE(FunctionTable));
+}
+
+Interface::~Interface() {
+}
+
+} // namespace
diff --git a/src/core/hle/service/am_net.h b/src/core/hle/service/am_net.h
new file mode 100644
index 000000000..4816e1697
--- /dev/null
+++ b/src/core/hle/service/am_net.h
@@ -0,0 +1,27 @@
+// Copyright 2014 Citra Emulator Project
+// Licensed under GPLv2
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include "core/hle/service/service.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Namespace AM_NET
+
+namespace AM_NET {
+
+class Interface : public Service::Interface {
+public:
+    Interface();
+    ~Interface();
+    /**
+     * Gets the string port name used by CTROS for the service
+     * @return Port name of service
+     */
+    std::string GetPortName() const override {
+        return "am:net";
+    }
+};
+
+} // namespace
diff --git a/src/core/hle/service/cfg_i.cpp b/src/core/hle/service/cfg_i.cpp
new file mode 100644
index 000000000..88d13d459
--- /dev/null
+++ b/src/core/hle/service/cfg_i.cpp
@@ -0,0 +1,59 @@
+// Copyright 2014 Citra Emulator Project
+// Licensed under GPLv2
+// Refer to the license.txt file included.
+
+#include "common/log.h"
+#include "core/hle/hle.h"
+#include "core/hle/service/cfg_i.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Namespace CFG_I
+
+namespace CFG_I {
+
+const Interface::FunctionInfo FunctionTable[] = {
+    {0x04010082, nullptr,               "GetConfigInfoBlk8"},
+    {0x04020082, nullptr,               "GetConfigInfoBlk4"},
+    {0x04030000, nullptr,               "UpdateConfigNANDSavegame"},
+    {0x04040042, nullptr,               "GetLocalFriendCodeSeedData"},
+    {0x04050000, nullptr,               "GetLocalFriendCodeSeed"},
+    {0x04060000, nullptr,               "SecureInfoGetRegion"},
+    {0x04070000, nullptr,               "SecureInfoGetByte101"},
+    {0x04080042, nullptr,               "SecureInfoGetSerialNo"},
+    {0x04090000, nullptr,               "UpdateConfigBlk00040003"},
+    {0x08010082, nullptr,               "GetConfigInfoBlk8"},
+    {0x08020082, nullptr,               "GetConfigInfoBlk4"},
+    {0x08030000, nullptr,               "UpdateConfigNANDSavegame"},
+    {0x080400C2, nullptr,               "CreateConfigInfoBlk"},
+    {0x08050000, nullptr,               "DeleteConfigNANDSavefile"},
+    {0x08060000, nullptr,               "FormatConfig"},
+    {0x08070000, nullptr,               "Unknown"},
+    {0x08080000, nullptr,               "UpdateConfigBlk1"},
+    {0x08090000, nullptr,               "UpdateConfigBlk2"},
+    {0x080A0000, nullptr,               "UpdateConfigBlk3"},
+    {0x080B0082, nullptr,               "SetGetLocalFriendCodeSeedData"},
+    {0x080C0042, nullptr,               "SetLocalFriendCodeSeedSignature"},
+    {0x080D0000, nullptr,               "DeleteCreateNANDLocalFriendCodeSeed"},
+    {0x080E0000, nullptr,               "VerifySigLocalFriendCodeSeed"},
+    {0x080F0042, nullptr,               "GetLocalFriendCodeSeedData"},
+    {0x08100000, nullptr,               "GetLocalFriendCodeSeed"},
+    {0x08110084, nullptr,               "SetSecureInfo"},
+    {0x08120000, nullptr,               "DeleteCreateNANDSecureInfo"},
+    {0x08130000, nullptr,               "VerifySigSecureInfo"},
+    {0x08140042, nullptr,               "SecureInfoGetData"},
+    {0x08150042, nullptr,               "SecureInfoGetSignature"},
+    {0x08160000, nullptr,               "SecureInfoGetRegion"},
+    {0x08170000, nullptr,               "SecureInfoGetByte101"},
+    {0x08180042, nullptr,               "SecureInfoGetSerialNo"},
+};
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Interface class
+
+Interface::Interface() {
+    Register(FunctionTable, ARRAY_SIZE(FunctionTable));
+}
+
+Interface::~Interface() {
+}
+
+} // namespace
diff --git a/src/core/hle/service/cfg_i.h b/src/core/hle/service/cfg_i.h
new file mode 100644
index 000000000..fe343c968
--- /dev/null
+++ b/src/core/hle/service/cfg_i.h
@@ -0,0 +1,27 @@
+// Copyright 2014 Citra Emulator Project
+// Licensed under GPLv2
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include "core/hle/service/service.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Namespace CFG_I
+
+namespace CFG_I {
+
+class Interface : public Service::Interface {
+public:
+    Interface();
+    ~Interface();
+    /**
+     * Gets the string port name used by CTROS for the service
+     * @return Port name of service
+     */
+    std::string GetPortName() const override {
+        return "cfg:i";
+    }
+};
+
+} // namespace
diff --git a/src/core/hle/service/cfg_u.h b/src/core/hle/service/cfg_u.h
index 7525bd7c6..8075d19a8 100644
--- a/src/core/hle/service/cfg_u.h
+++ b/src/core/hle/service/cfg_u.h
@@ -19,7 +19,7 @@ public:
      * Gets the string port name used by CTROS for the service
      * @return Port name of service
      */
-    std::string GetPortName() const {
+    std::string GetPortName() const override {
         return "cfg:u";
     }
 };
diff --git a/src/core/hle/service/csnd_snd.cpp b/src/core/hle/service/csnd_snd.cpp
new file mode 100644
index 000000000..6e59a9bf3
--- /dev/null
+++ b/src/core/hle/service/csnd_snd.cpp
@@ -0,0 +1,39 @@
+// Copyright 2014 Citra Emulator Project
+// Licensed under GPLv2
+// Refer to the license.txt file included.
+
+#include "common/log.h"
+#include "core/hle/hle.h"
+#include "core/hle/service/csnd_snd.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Namespace CSND_SND
+
+namespace CSND_SND {
+
+const Interface::FunctionInfo FunctionTable[] = {
+    {0x00010140, nullptr,               "Initialize"},
+    {0x00020000, nullptr,               "Shutdown"},
+    {0x00030040, nullptr,               "Unknown"},
+    {0x00040080, nullptr,               "Unknown"},
+    {0x00050000, nullptr,               "Unknown"},
+    {0x00060000, nullptr,               "Unknown"},
+    {0x00070000, nullptr,               "Unknown"},
+    {0x00080040, nullptr,               "Unknown"},
+    {0x00090082, nullptr,               "FlushDCache"},
+    {0x000A0082, nullptr,               "StoreDCache"},
+    {0x000B0082, nullptr,               "InvalidateDCache"},
+    {0x000C0000, nullptr,               "Unknown"},
+};
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Interface class
+
+Interface::Interface() {
+    Register(FunctionTable, ARRAY_SIZE(FunctionTable));
+}
+
+Interface::~Interface() {
+}
+
+} // namespace
diff --git a/src/core/hle/service/csnd_snd.h b/src/core/hle/service/csnd_snd.h
new file mode 100644
index 000000000..31cc85b07
--- /dev/null
+++ b/src/core/hle/service/csnd_snd.h
@@ -0,0 +1,27 @@
+// Copyright 2014 Citra Emulator Project
+// Licensed under GPLv2
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include "core/hle/service/service.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Namespace CSND_SND
+
+namespace CSND_SND {
+
+class Interface : public Service::Interface {
+public:
+    Interface();
+    ~Interface();
+    /**
+     * Gets the string port name used by CTROS for the service
+     * @return Port name of service
+     */
+    std::string GetPortName() const override {
+        return "csnd:SND";
+    }
+};
+
+} // namespace
diff --git a/src/core/hle/service/dsp_dsp.cpp b/src/core/hle/service/dsp_dsp.cpp
index 9e84ac938..bbcf26f61 100644
--- a/src/core/hle/service/dsp_dsp.cpp
+++ b/src/core/hle/service/dsp_dsp.cpp
@@ -26,12 +26,12 @@ const Interface::FunctionInfo FunctionTable[] = {
     {0x001100C2, nullptr,               "LoadComponent"},
     {0x00120000, nullptr,               "UnloadComponent"},
     {0x00130082, nullptr,               "FlushDataCache"},
-    {0x00140082, nullptr,               "InvalidateDCache "},
+    {0x00140082, nullptr,               "InvalidateDCache"},
     {0x00150082, nullptr,               "RegisterInterruptEvents"},
     {0x00160000, nullptr,               "GetSemaphoreEventHandle"},
     {0x00170040, nullptr,               "SetSemaphoreMask"},
     {0x00180040, nullptr,               "GetPhysicalAddress"},
-    {0x00190040, nullptr,               "GetVirtualAddress" },
+    {0x00190040, nullptr,               "GetVirtualAddress"},
     {0x001A0042, nullptr,               "SetIirFilterI2S1_cmd1"},
     {0x001B0042, nullptr,               "SetIirFilterI2S1_cmd2"},
     {0x001C0082, nullptr,               "SetIirFilterEQ"},
diff --git a/src/core/hle/service/dsp_dsp.h b/src/core/hle/service/dsp_dsp.h
index c439ed266..c4ce44245 100644
--- a/src/core/hle/service/dsp_dsp.h
+++ b/src/core/hle/service/dsp_dsp.h
@@ -19,7 +19,7 @@ public:
      * Gets the string port name used by CTROS for the service
      * @return Port name of service
      */
-    std::string GetPortName() const {
+    std::string GetPortName() const override {
         return "dsp:DSP";
     }
 };
diff --git a/src/core/hle/service/err_f.h b/src/core/hle/service/err_f.h
index 8b636b96c..6d7141c1b 100644
--- a/src/core/hle/service/err_f.h
+++ b/src/core/hle/service/err_f.h
@@ -19,7 +19,7 @@ namespace ERR_F {
          * Gets the string port name used by CTROS for the service
          * @return Port name of service
          */
-        std::string GetPortName() const {
+        std::string GetPortName() const override {
             return "err:f";
         }
     };
diff --git a/src/core/hle/service/frd_u.h b/src/core/hle/service/frd_u.h
index 9df8a815a..4020c6664 100644
--- a/src/core/hle/service/frd_u.h
+++ b/src/core/hle/service/frd_u.h
@@ -19,7 +19,7 @@ namespace FRD_U {
          * Gets the string port name used by CTROS for the service
          * @return Port name of service
          */
-        std::string GetPortName() const {
+        std::string GetPortName() const override {
             return "frd:u";
         }
     };
diff --git a/src/core/hle/service/ir_rst.cpp b/src/core/hle/service/ir_rst.cpp
new file mode 100644
index 000000000..be15db231
--- /dev/null
+++ b/src/core/hle/service/ir_rst.cpp
@@ -0,0 +1,36 @@
+// Copyright 2014 Citra Emulator Project
+// Licensed under GPLv2
+// Refer to the license.txt file included.
+
+#include "common/log.h"
+#include "core/hle/hle.h"
+#include "core/hle/service/ir_rst.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Namespace IR_RST
+
+namespace IR_RST {
+
+const Interface::FunctionInfo FunctionTable[] = {
+    {0x00010000, nullptr,                 "GetHandles"},
+    {0x00020080, nullptr,                 "Initialize"},
+    {0x00030000, nullptr,                 "Shutdown"},
+    {0x00040000, nullptr,                 "Unknown"},
+    {0x00050000, nullptr,                 "Unknown"},
+    {0x00060000, nullptr,                 "Unknown"},
+    {0x00070080, nullptr,                 "Unknown"},
+    {0x00080000, nullptr,                 "Unknown"},
+    {0x00090000, nullptr,                 "Unknown"},
+};
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Interface class
+
+Interface::Interface() {
+    Register(FunctionTable, ARRAY_SIZE(FunctionTable));
+}
+
+Interface::~Interface() {
+}
+
+} // namespace
diff --git a/src/core/hle/service/ir_rst.h b/src/core/hle/service/ir_rst.h
new file mode 100644
index 000000000..73effd7e3
--- /dev/null
+++ b/src/core/hle/service/ir_rst.h
@@ -0,0 +1,27 @@
+// Copyright 2014 Citra Emulator Project
+// Licensed under GPLv2
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include "core/hle/service/service.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Namespace IR_RST 
+
+namespace IR_RST {
+
+class Interface : public Service::Interface {
+public:
+    Interface();
+    ~Interface();
+    /**
+     * Gets the string port name used by CTROS for the service
+     * @return Port name of service
+     */
+    std::string GetPortName() const override {
+        return "ir:rst";
+    }
+};
+
+} // namespace
diff --git a/src/core/hle/service/ir_u.cpp b/src/core/hle/service/ir_u.cpp
new file mode 100644
index 000000000..aa9db6f6d
--- /dev/null
+++ b/src/core/hle/service/ir_u.cpp
@@ -0,0 +1,45 @@
+// Copyright 2014 Citra Emulator Project
+// Licensed under GPLv2
+// Refer to the license.txt file included.
+
+#include "common/log.h"
+#include "core/hle/hle.h"
+#include "core/hle/service/ir_u.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Namespace IR_U
+
+namespace IR_U {
+
+const Interface::FunctionInfo FunctionTable[] = {
+    {0x00010000, nullptr,                 "Initialize"},
+    {0x00020000, nullptr,                 "Shutdown"},
+    {0x00030042, nullptr,                 "StartSendTransfer"},
+    {0x00040000, nullptr,                 "WaitSendTransfer"},
+    {0x000500C2, nullptr,                 "StartRecvTransfer"},
+    {0x00060000, nullptr,                 "WaitRecvTransfer"},
+    {0x00070080, nullptr,                 "GetRecvTransferCount"},
+    {0x00080000, nullptr,                 "GetSendState"},
+    {0x00090040, nullptr,                 "SetBitRate"},
+    {0x000A0000, nullptr,                 "GetBitRate"},
+    {0x000B0040, nullptr,                 "SetIRLEDState"},
+    {0x000C0000, nullptr,                 "GetIRLEDRecvState"},
+    {0x000D0000, nullptr,                 "GetSendFinishedEvent"},
+    {0x000E0000, nullptr,                 "GetRecvFinishedEvent"},
+    {0x000F0000, nullptr,                 "GetTransferState"},
+    {0x00100000, nullptr,                 "GetErrorStatus"},
+    {0x00110040, nullptr,                 "SetSleepModeActive"},
+    {0x00120040, nullptr,                 "SetSleepModeState"},
+};
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Interface class
+
+Interface::Interface() {
+    Register(FunctionTable, ARRAY_SIZE(FunctionTable));
+}
+
+Interface::~Interface() {
+}
+
+} // namespace
diff --git a/src/core/hle/service/ir_u.h b/src/core/hle/service/ir_u.h
new file mode 100644
index 000000000..86d98d079
--- /dev/null
+++ b/src/core/hle/service/ir_u.h
@@ -0,0 +1,27 @@
+// Copyright 2014 Citra Emulator Project
+// Licensed under GPLv2
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include "core/hle/service/service.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Namespace IR_U
+
+namespace IR_U {
+
+class Interface : public Service::Interface {
+public:
+    Interface();
+    ~Interface();
+    /**
+     * Gets the string port name used by CTROS for the service
+     * @return Port name of service
+     */
+    std::string GetPortName() const override {
+        return "ir:u";
+    }
+};
+
+} // namespace
diff --git a/src/core/hle/service/mic_u.h b/src/core/hle/service/mic_u.h
index 72ba048ef..2a495f3a9 100644
--- a/src/core/hle/service/mic_u.h
+++ b/src/core/hle/service/mic_u.h
@@ -21,7 +21,7 @@ public:
      * Gets the string port name used by CTROS for the service
      * @return Port name of service
      */
-    std::string GetPortName() const {
+    std::string GetPortName() const override {
         return "mic:u";
     }
 };
diff --git a/src/core/hle/service/nwm_uds.h b/src/core/hle/service/nwm_uds.h
index a956ca812..69d2c2002 100644
--- a/src/core/hle/service/nwm_uds.h
+++ b/src/core/hle/service/nwm_uds.h
@@ -21,7 +21,7 @@ public:
      * Gets the string port name used by CTROS for the service
      * @return Port name of service
      */
-    std::string GetPortName() const {
+    std::string GetPortName() const override {
         return "nwm:UDS";
     }
 };
diff --git a/src/core/hle/service/pm_app.cpp b/src/core/hle/service/pm_app.cpp
new file mode 100644
index 000000000..90e9b1bfa
--- /dev/null
+++ b/src/core/hle/service/pm_app.cpp
@@ -0,0 +1,35 @@
+// Copyright 2014 Citra Emulator Project
+// Licensed under GPLv2
+// Refer to the license.txt file included.
+
+#include "common/log.h"
+#include "core/hle/hle.h"
+#include "core/hle/service/pm_app.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Namespace PM_APP
+
+namespace PM_APP {
+
+const Interface::FunctionInfo FunctionTable[] = {
+    {0x00010140, nullptr,                 "LaunchTitle"},
+    {0x00020082, nullptr,                 "LaunchFIRMSetParams"},
+    {0x00030080, nullptr,                 "TerminateProcesse"},
+    {0x00040100, nullptr,                 "TerminateProcessTID"},
+    {0x000500C0, nullptr,                 "TerminateProcessTID_unknown"},
+    {0x00070042, nullptr,                 "GetFIRMLaunchParams"},
+    {0x00080100, nullptr,                 "GetTitleExheaderFlags"},
+    {0x00090042, nullptr,                 "SetFIRMLaunchParams"},
+};
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Interface class
+
+Interface::Interface() {
+    Register(FunctionTable, ARRAY_SIZE(FunctionTable));
+}
+
+Interface::~Interface() {
+}
+
+} // namespace
diff --git a/src/core/hle/service/pm_app.h b/src/core/hle/service/pm_app.h
new file mode 100644
index 000000000..28c38f582
--- /dev/null
+++ b/src/core/hle/service/pm_app.h
@@ -0,0 +1,27 @@
+// Copyright 2014 Citra Emulator Project
+// Licensed under GPLv2
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include "core/hle/service/service.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Namespace PM_APP
+
+namespace PM_APP {
+
+class Interface : public Service::Interface {
+public:
+    Interface();
+    ~Interface();
+    /**
+     * Gets the string port name used by CTROS for the service
+     * @return Port name of service
+     */
+    std::string GetPortName() const override {
+        return "pm:app";
+    }
+};
+
+} // namespace
diff --git a/src/core/hle/service/ptm_u.cpp b/src/core/hle/service/ptm_u.cpp
index f6a14d509..d9122dbbc 100644
--- a/src/core/hle/service/ptm_u.cpp
+++ b/src/core/hle/service/ptm_u.cpp
@@ -17,13 +17,13 @@ const Interface::FunctionInfo FunctionTable[] = {
     {0x00030000, nullptr,               "GetRtcAlarm"},
     {0x00040000, nullptr,               "CancelRtcAlarm"},
     {0x00050000, nullptr,               "GetAdapterState"},
-    {0x00060000, nullptr,               "GetShellState "},
+    {0x00060000, nullptr,               "GetShellState"},
     {0x00070000, nullptr,               "GetBatteryLevel"},
     {0x00080000, nullptr,               "GetBatteryChargeState"},
     {0x00090000, nullptr,               "GetPedometerState"},
     {0x000A0042, nullptr,               "GetStepHistoryEntry"},
-    {0x000B00C2, nullptr,               "GetStepHistory "},
-    {0x000C0000, nullptr,               "GetTotalStepCount "},
+    {0x000B00C2, nullptr,               "GetStepHistory"},
+    {0x000C0000, nullptr,               "GetTotalStepCount"},
     {0x000D0040, nullptr,               "SetPedometerRecordingMode"},
     {0x000E0000, nullptr,               "GetPedometerRecordingMode"},
     {0x000F0084, nullptr,               "GetStepHistoryAll"},
diff --git a/src/core/hle/service/ptm_u.h b/src/core/hle/service/ptm_u.h
index 82749fa39..f8d9f57be 100644
--- a/src/core/hle/service/ptm_u.h
+++ b/src/core/hle/service/ptm_u.h
@@ -21,7 +21,7 @@ public:
      * Gets the string port name used by CTROS for the service
      * @return Port name of service
      */
-    std::string GetPortName() const {
+    std::string GetPortName() const override {
         return "ptm:u";
     }
 };
diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp
index 5906e2060..abc8d5edb 100644
--- a/src/core/hle/service/service.cpp
+++ b/src/core/hle/service/service.cpp
@@ -7,18 +7,24 @@
 
 #include "core/hle/service/service.h"
 #include "core/hle/service/ac_u.h"
+#include "core/hle/service/am_net.h"
 #include "core/hle/service/apt_u.h"
 #include "core/hle/service/boss_u.h"
+#include "core/hle/service/cfg_i.h"
 #include "core/hle/service/cfg_u.h"
+#include "core/hle/service/csnd_snd.h"
 #include "core/hle/service/dsp_dsp.h"
 #include "core/hle/service/err_f.h"
 #include "core/hle/service/fs_user.h"
 #include "core/hle/service/frd_u.h"
 #include "core/hle/service/gsp_gpu.h"
 #include "core/hle/service/hid_user.h"
+#include "core/hle/service/ir_rst.h"
+#include "core/hle/service/ir_u.h"
 #include "core/hle/service/mic_u.h"
 #include "core/hle/service/ndm_u.h"
 #include "core/hle/service/nwm_uds.h"
+#include "core/hle/service/pm_app.h"
 #include "core/hle/service/ptm_u.h"
 #include "core/hle/service/soc_u.h"
 #include "core/hle/service/srv.h"
@@ -78,18 +84,24 @@ void Init() {
 
     g_manager->AddService(new SRV::Interface);
     g_manager->AddService(new AC_U::Interface);
+    g_manager->AddService(new AM_NET::Interface);
     g_manager->AddService(new APT_U::Interface);
     g_manager->AddService(new BOSS_U::Interface);
+    g_manager->AddService(new CFG_I::Interface);
     g_manager->AddService(new CFG_U::Interface);
+    g_manager->AddService(new CSND_SND::Interface);
     g_manager->AddService(new DSP_DSP::Interface);
     g_manager->AddService(new ERR_F::Interface);
     g_manager->AddService(new FRD_U::Interface);
     g_manager->AddService(new FS_User::Interface);
     g_manager->AddService(new GSP_GPU::Interface);
     g_manager->AddService(new HID_User::Interface);
+    g_manager->AddService(new IR_RST::Interface);
+    g_manager->AddService(new IR_U::Interface);
     g_manager->AddService(new MIC_U::Interface);
     g_manager->AddService(new NDM_U::Interface);
     g_manager->AddService(new NWM_UDS::Interface);
+    g_manager->AddService(new PM_APP::Interface);
     g_manager->AddService(new PTM_U::Interface);
     g_manager->AddService(new SOC_U::Interface);
     g_manager->AddService(new SSL_C::Interface);
diff --git a/src/core/hle/service/soc_u.h b/src/core/hle/service/soc_u.h
index e27a2b1fe..d5590a683 100644
--- a/src/core/hle/service/soc_u.h
+++ b/src/core/hle/service/soc_u.h
@@ -19,7 +19,7 @@ public:
      * Gets the string port name used by CTROS for the service
      * @return Port name of service
      */
-    std::string GetPortName() const {
+    std::string GetPortName() const override {
         return "soc:U";
     }
 };