summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar JamePeng2016-04-09 03:44:00 +0800
committerGravatar bunnei2016-04-08 15:44:00 -0400
commit9045c57d6f88b8c828e325e8db75b19c4b4097bc (patch)
tree3c477193bd461487fe1ff05eb5539d6ac46485b4
parentcecd:u: stub GetCecStateAbbreviated (#1648) (diff)
downloadyuzu-9045c57d6f88b8c828e325e8db75b19c4b4097bc.tar.gz
yuzu-9045c57d6f88b8c828e325e8db75b19c4b4097bc.tar.xz
yuzu-9045c57d6f88b8c828e325e8db75b19c4b4097bc.zip
update the code of AM service! (#1623)
-rw-r--r--src/core/hle/service/am/am.cpp140
-rw-r--r--src/core/hle/service/am/am.h126
-rw-r--r--src/core/hle/service/am/am_app.cpp16
-rw-r--r--src/core/hle/service/am/am_net.cpp18
-rw-r--r--src/core/hle/service/am/am_sys.cpp22
-rw-r--r--src/core/hle/service/am/am_u.cpp18
6 files changed, 289 insertions, 51 deletions
diff --git a/src/core/hle/service/am/am.cpp b/src/core/hle/service/am/am.cpp
index 06be9940e..9591522e5 100644
--- a/src/core/hle/service/am/am.cpp
+++ b/src/core/hle/service/am/am.cpp
@@ -2,6 +2,8 @@
2// Licensed under GPLv2 or any later version 2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#include <cinttypes>
6
5#include "common/logging/log.h" 7#include "common/logging/log.h"
6 8
7#include "core/hle/service/service.h" 9#include "core/hle/service/service.h"
@@ -9,30 +11,119 @@
9#include "core/hle/service/am/am_app.h" 11#include "core/hle/service/am/am_app.h"
10#include "core/hle/service/am/am_net.h" 12#include "core/hle/service/am/am_net.h"
11#include "core/hle/service/am/am_sys.h" 13#include "core/hle/service/am/am_sys.h"
14#include "core/hle/service/am/am_u.h"
12 15
13namespace Service { 16namespace Service {
14namespace AM { 17namespace AM {
15 18
16void TitleIDListGetTotal(Service::Interface* self) { 19static std::array<u32, 3> am_content_count = { 0, 0, 0 };
20static std::array<u32, 3> am_titles_count = { 0, 0, 0 };
21static std::array<u32, 3> am_titles_list_count = { 0, 0, 0 };
22static u32 am_ticket_count = 0;
23static u32 am_ticket_list_count = 0;
24
25void GetTitleCount(Service::Interface* self) {
17 u32* cmd_buff = Kernel::GetCommandBuffer(); 26 u32* cmd_buff = Kernel::GetCommandBuffer();
27
18 u32 media_type = cmd_buff[1] & 0xFF; 28 u32 media_type = cmd_buff[1] & 0xFF;
19 29
20 cmd_buff[1] = RESULT_SUCCESS.raw; 30 cmd_buff[1] = RESULT_SUCCESS.raw;
21 cmd_buff[2] = 0; 31 cmd_buff[2] = am_titles_count[media_type];
32 LOG_WARNING(Service_AM, "(STUBBED) media_type=%u, title_count=0x%08x", media_type, am_titles_count[media_type]);
33}
34
35void FindContentInfos(Service::Interface* self) {
36 u32* cmd_buff = Kernel::GetCommandBuffer();
37
38 u32 media_type = cmd_buff[1] & 0xFF;
39 u64 title_id = (static_cast<u64>(cmd_buff[3]) << 32) | cmd_buff[2];
40 u32 content_ids_pointer = cmd_buff[6];
41 u32 content_info_pointer = cmd_buff[8];
42
43 am_content_count[media_type] = cmd_buff[4];
22 44
23 LOG_WARNING(Service_AM, "(STUBBED) media_type %u", media_type); 45 cmd_buff[1] = RESULT_SUCCESS.raw;
46 LOG_WARNING(Service_AM, "(STUBBED) media_type=%u, title_id=0x%016lx, content_cound=%u, content_ids_pointer=0x%08x, content_info_pointer=0x%08x",
47 media_type, title_id, am_content_count[media_type], content_ids_pointer, content_info_pointer);
24} 48}
25 49
26void GetTitleIDList(Service::Interface* self) { 50void ListContentInfos(Service::Interface* self) {
27 u32* cmd_buff = Kernel::GetCommandBuffer(); 51 u32* cmd_buff = Kernel::GetCommandBuffer();
28 u32 num_titles = cmd_buff[1]; 52
29 u32 media_type = cmd_buff[2] & 0xFF; 53 u32 media_type = cmd_buff[2] & 0xFF;
30 u32 addr = cmd_buff[4]; 54 u64 title_id = (static_cast<u64>(cmd_buff[4]) << 32) | cmd_buff[3];
55 u32 start_index = cmd_buff[5];
56 u32 content_info_pointer = cmd_buff[7];
57
58 am_content_count[media_type] = cmd_buff[1];
31 59
32 cmd_buff[1] = RESULT_SUCCESS.raw; 60 cmd_buff[1] = RESULT_SUCCESS.raw;
33 cmd_buff[2] = 0; 61 cmd_buff[2] = am_content_count[media_type];
62 LOG_WARNING(Service_AM, "(STUBBED) media_type=%u, content_count=%u, title_id=0x%016" PRIx64 ", start_index=0x%08x, content_info_pointer=0x%08X",
63 media_type, am_content_count[media_type], title_id, start_index, content_info_pointer);
64}
65
66void DeleteContents(Service::Interface* self) {
67 u32* cmd_buff = Kernel::GetCommandBuffer();
68
69 u32 media_type = cmd_buff[1] & 0xFF;
70 u64 title_id = (static_cast<u64>(cmd_buff[3]) << 32) | cmd_buff[2];
71 u32 content_ids_pointer = cmd_buff[6];
34 72
35 LOG_WARNING(Service_AM, "(STUBBED) Requested %u titles from media type %u. Address=0x%08X", num_titles, media_type, addr); 73 am_content_count[media_type] = cmd_buff[4];
74
75 cmd_buff[1] = RESULT_SUCCESS.raw;
76 LOG_WARNING(Service_AM, "(STUBBED) media_type=%u, title_id=0x%016" PRIx64 ", content_count=%u, content_ids_pointer=0x%08x",
77 media_type, title_id, am_content_count[media_type], content_ids_pointer);
78}
79
80void GetTitleList(Service::Interface* self) {
81 u32* cmd_buff = Kernel::GetCommandBuffer();
82
83 u32 media_type = cmd_buff[2] & 0xFF;
84 u32 title_ids_output_pointer = cmd_buff[4];
85
86 am_titles_list_count[media_type] = cmd_buff[1];
87
88 cmd_buff[1] = RESULT_SUCCESS.raw;
89 cmd_buff[2] = am_titles_list_count[media_type];
90 LOG_WARNING(Service_AM, "(STUBBED) media_type=%u, titles_list_count=0x%08X, title_ids_output_pointer=0x%08X",
91 media_type, am_titles_list_count[media_type], title_ids_output_pointer);
92}
93
94void GetTitleInfo(Service::Interface* self) {
95 u32* cmd_buff = Kernel::GetCommandBuffer();
96
97 u32 media_type = cmd_buff[1] & 0xFF;
98 u32 title_id_list_pointer = cmd_buff[4];
99 u32 title_list_pointer = cmd_buff[6];
100
101 am_titles_count[media_type] = cmd_buff[2];
102
103 cmd_buff[1] = RESULT_SUCCESS.raw;
104 LOG_WARNING(Service_AM, "(STUBBED) media_type=%u, total_titles=0x%08X, title_id_list_pointer=0x%08X, title_list_pointer=0x%08X",
105 media_type, am_titles_count[media_type], title_id_list_pointer, title_list_pointer);
106}
107
108void GetDataTitleInfos(Service::Interface* self) {
109 GetTitleInfo(self);
110
111 LOG_WARNING(Service_AM, "(STUBBED) called");
112}
113
114void ListDataTitleTicketInfos(Service::Interface* self) {
115 u32* cmd_buff = Kernel::GetCommandBuffer();
116
117 u64 title_id = (static_cast<u64>(cmd_buff[3]) << 32) | cmd_buff[2];
118 u32 start_index = cmd_buff[4];
119 u32 ticket_info_pointer = cmd_buff[6];
120
121 am_ticket_count = cmd_buff[1];
122
123 cmd_buff[1] = RESULT_SUCCESS.raw;
124 cmd_buff[2] = am_ticket_count;
125 LOG_WARNING(Service_AM, "(STUBBED) ticket_count=0x%08X, title_id=0x%016" PRIx64 ", start_index=0x%08X, ticket_info_pointer=0x%08X",
126 am_ticket_count, title_id, start_index, ticket_info_pointer);
36} 127}
37 128
38void GetNumContentInfos(Service::Interface* self) { 129void GetNumContentInfos(Service::Interface* self) {
@@ -40,16 +131,47 @@ void GetNumContentInfos(Service::Interface* self) {
40 131
41 cmd_buff[1] = RESULT_SUCCESS.raw; 132 cmd_buff[1] = RESULT_SUCCESS.raw;
42 cmd_buff[2] = 1; // Number of content infos plus one 133 cmd_buff[2] = 1; // Number of content infos plus one
43
44 LOG_WARNING(Service_AM, "(STUBBED) called"); 134 LOG_WARNING(Service_AM, "(STUBBED) called");
45} 135}
46 136
137void DeleteTicket(Service::Interface* self) {
138 u32* cmd_buff = Kernel::GetCommandBuffer();
139
140 u64 title_id = (static_cast<u64>(cmd_buff[2]) << 32) | cmd_buff[1];
141
142 cmd_buff[1] = RESULT_SUCCESS.raw;
143 LOG_WARNING(Service_AM, "(STUBBED) called title_id=0x%016" PRIx64 "",title_id);
144}
145
146void GetTicketCount(Service::Interface* self) {
147 u32* cmd_buff = Kernel::GetCommandBuffer();
148
149 cmd_buff[1] = RESULT_SUCCESS.raw;
150 cmd_buff[2] = am_ticket_count;
151 LOG_WARNING(Service_AM, "(STUBBED) called ticket_count=0x%08x",am_ticket_count);
152}
153
154void GetTicketList(Service::Interface* self) {
155 u32* cmd_buff = Kernel::GetCommandBuffer();
156
157 u32 num_of_skip = cmd_buff[2];
158 u32 ticket_list_pointer = cmd_buff[4];
159
160 am_ticket_list_count = cmd_buff[1];
161
162 cmd_buff[1] = RESULT_SUCCESS.raw;
163 cmd_buff[2] = am_ticket_list_count;
164 LOG_WARNING(Service_AM, "(STUBBED) ticket_list_count=0x%08x, num_of_skip=0x%08x, ticket_list_pointer=0x%08x",
165 am_ticket_list_count, num_of_skip, ticket_list_pointer);
166}
167
47void Init() { 168void Init() {
48 using namespace Kernel; 169 using namespace Kernel;
49 170
50 AddService(new AM_APP_Interface); 171 AddService(new AM_APP_Interface);
51 AddService(new AM_NET_Interface); 172 AddService(new AM_NET_Interface);
52 AddService(new AM_SYS_Interface); 173 AddService(new AM_SYS_Interface);
174 AddService(new AM_U_Interface);
53} 175}
54 176
55void Shutdown() { 177void Shutdown() {
diff --git a/src/core/hle/service/am/am.h b/src/core/hle/service/am/am.h
index 15e63bc7b..5676cdd5f 100644
--- a/src/core/hle/service/am/am.h
+++ b/src/core/hle/service/am/am.h
@@ -11,7 +11,7 @@ class Interface;
11namespace AM { 11namespace AM {
12 12
13/** 13/**
14 * AM::TitleIDListGetTotal service function 14 * AM::GetTitleCount service function
15 * Gets the number of installed titles in the requested media type 15 * Gets the number of installed titles in the requested media type
16 * Inputs: 16 * Inputs:
17 * 0 : Command header (0x00010040) 17 * 0 : Command header (0x00010040)
@@ -20,36 +20,140 @@ namespace AM {
20 * 1 : Result, 0 on success, otherwise error code 20 * 1 : Result, 0 on success, otherwise error code
21 * 2 : The number of titles in the requested media type 21 * 2 : The number of titles in the requested media type
22 */ 22 */
23void TitleIDListGetTotal(Service::Interface* self); 23void GetTitleCount(Service::Interface* self);
24 24
25/** 25/**
26 * AM::GetTitleIDList service function 26 * AM::FindContentInfos service function
27 * Inputs:
28 * 1 : MediaType
29 * 2-3 : u64, Title ID
30 * 4 : Content count
31 * 6 : Content IDs pointer
32 * 8 : Content Infos pointer
33 * Outputs:
34 * 1 : Result, 0 on success, otherwise error code
35 */
36void FindContentInfos(Service::Interface* self);
37
38/**
39 * AM::ListContentInfos service function
40 * Inputs:
41 * 1 : Content count
42 * 2 : MediaType
43 * 3-4 : u64, Title ID
44 * 5 : Start Index
45 * 7 : Content Infos pointer
46 * Outputs:
47 * 1 : Result, 0 on success, otherwise error code
48 * 2 : Number of content infos returned
49 */
50void ListContentInfos(Service::Interface* self);
51
52/**
53 * AM::DeleteContents service function
54 * Inputs:
55 * 1 : MediaType
56 * 2-3 : u64, Title ID
57 * 4 : Content count
58 * 6 : Content IDs pointer
59 * Outputs:
60 * 1 : Result, 0 on success, otherwise error code
61 */
62void DeleteContents(Service::Interface* self);
63
64/**
65 * AM::GetTitleList service function
27 * Loads information about the desired number of titles from the desired media type into an array 66 * Loads information about the desired number of titles from the desired media type into an array
28 * Inputs: 67 * Inputs:
29 * 0 : Command header (0x00020082) 68 * 1 : Title count
30 * 1 : The maximum number of titles to load
31 * 2 : Media type to load the titles from 69 * 2 : Media type to load the titles from
32 * 3 : Descriptor of the output buffer pointer 70 * 4 : Title IDs output pointer
33 * 4 : Address of the output buffer
34 * Outputs: 71 * Outputs:
35 * 1 : Result, 0 on success, otherwise error code 72 * 1 : Result, 0 on success, otherwise error code
36 * 2 : The number of titles loaded from the requested media type 73 * 2 : The number of titles loaded from the requested media type
37 */ 74 */
38void GetTitleIDList(Service::Interface* self); 75void GetTitleList(Service::Interface* self);
76
77/**
78 * AM::GetTitleInfo service function
79 * Inputs:
80 * 1 : u8 Mediatype
81 * 2 : Total titles
82 * 4 : TitleIDList pointer
83 * 6 : TitleList pointer
84 * Outputs:
85 * 1 : Result, 0 on success, otherwise error code
86 */
87void GetTitleInfo(Service::Interface* self);
88
89/**
90 * AM::GetDataTitleInfos service function
91 * Wrapper for AM::GetTitleInfo
92 * Inputs:
93 * 1 : u8 Mediatype
94 * 2 : Total titles
95 * 4 : TitleIDList pointer
96 * 6 : TitleList pointer
97 * Outputs:
98 * 1 : Result, 0 on success, otherwise error code
99 */
100void GetDataTitleInfos(Service::Interface* self);
101
102/**
103 * AM::ListDataTitleTicketInfos service function
104 * Inputs:
105 * 1 : Ticket count
106 * 2-3 : u64, Title ID
107 * 4 : Start Index?
108 * 5 : (TicketCount * 24) << 8 | 0x4
109 * 6 : Ticket Infos pointer
110 * Outputs:
111 * 1 : Result, 0 on success, otherwise error code
112 * 2 : Number of ticket infos returned
113 */
114void ListDataTitleTicketInfos(Service::Interface* self);
39 115
40/** 116/**
41 * AM::GetNumContentInfos service function 117 * AM::GetNumContentInfos service function
42 * Inputs: 118 * Inputs:
43 * 0 : Command header (0x100100C0) 119 * 0 : Command header (0x100100C0)
44 * 1 : Unknown 120 * 1 : MediaType
45 * 2 : Unknown 121 * 2-3 : u64, Title ID
46 * 3 : Unknown
47 * Outputs: 122 * Outputs:
48 * 1 : Result, 0 on success, otherwise error code 123 * 1 : Result, 0 on success, otherwise error code
49 * 2 : Number of content infos plus one 124 * 2 : Number of content infos plus one
50 */ 125 */
51void GetNumContentInfos(Service::Interface* self); 126void GetNumContentInfos(Service::Interface* self);
52 127
128/**
129 * AM::DeleteTicket service function
130 * Inputs:
131 * 1-2 : u64, Title ID
132 * Outputs:
133 * 1 : Result, 0 on success, otherwise error code
134 */
135void DeleteTicket(Service::Interface* self);
136
137/**
138 * AM::GetTicketCount service function
139 * Outputs:
140 * 1 : Result, 0 on success, otherwise error code
141 * 2 : Total titles
142 */
143void GetTicketCount(Service::Interface* self);
144
145/**
146 * AM::GetTicketList service function
147 * Inputs:
148 * 1 : Number of TicketList
149 * 2 : Number to skip
150 * 4 : TicketList pointer
151 * Outputs:
152 * 1 : Result, 0 on success, otherwise error code
153 * 2 : Total TicketList
154 */
155void GetTicketList(Service::Interface* self);
156
53/// Initialize AM service 157/// Initialize AM service
54void Init(); 158void Init();
55 159
diff --git a/src/core/hle/service/am/am_app.cpp b/src/core/hle/service/am/am_app.cpp
index 16c76a1eb..d27b3defd 100644
--- a/src/core/hle/service/am/am_app.cpp
+++ b/src/core/hle/service/am/am_app.cpp
@@ -9,14 +9,14 @@ namespace Service {
9namespace AM { 9namespace AM {
10 10
11const Interface::FunctionInfo FunctionTable[] = { 11const Interface::FunctionInfo FunctionTable[] = {
12 {0x100100C0, GetNumContentInfos, "GetNumContentInfos"}, 12 {0x100100C0, GetNumContentInfos, "GetNumContentInfos"},
13 {0x10020104, nullptr, "FindContentInfos"}, 13 {0x10020104, FindContentInfos, "FindContentInfos"},
14 {0x10030142, nullptr, "ListContentInfos"}, 14 {0x10030142, ListContentInfos, "ListContentInfos"},
15 {0x10040102, nullptr, "DeleteContents"}, 15 {0x10040102, DeleteContents, "DeleteContents"},
16 {0x10050084, nullptr, "GetDataTitleInfos"}, 16 {0x10050084, GetDataTitleInfos, "GetDataTitleInfos"},
17 {0x10070102, nullptr, "ListDataTitleTicketInfos"}, 17 {0x10070102, ListDataTitleTicketInfos, "ListDataTitleTicketInfos"},
18 {0x100900C0, nullptr, "IsDataTitleInUse"}, 18 {0x100900C0, nullptr, "IsDataTitleInUse"},
19 {0x100A0000, nullptr, "IsExternalTitleDatabaseInitialized"}, 19 {0x100A0000, nullptr, "IsExternalTitleDatabaseInitialized"},
20}; 20};
21 21
22AM_APP_Interface::AM_APP_Interface() { 22AM_APP_Interface::AM_APP_Interface() {
diff --git a/src/core/hle/service/am/am_net.cpp b/src/core/hle/service/am/am_net.cpp
index 065e04118..e75755245 100644
--- a/src/core/hle/service/am/am_net.cpp
+++ b/src/core/hle/service/am/am_net.cpp
@@ -9,16 +9,20 @@ namespace Service {
9namespace AM { 9namespace AM {
10 10
11const Interface::FunctionInfo FunctionTable[] = { 11const Interface::FunctionInfo FunctionTable[] = {
12 {0x00010040, TitleIDListGetTotal, "TitleIDListGetTotal"}, 12 {0x00010040, GetTitleCount, "GetTitleCount"},
13 {0x00020082, GetTitleIDList, "GetTitleIDList"}, 13 {0x00020082, GetTitleList, "GetTitleList"},
14 {0x00030084, nullptr, "ListTitles"}, 14 {0x00030084, GetTitleInfo, "GetTitleInfo"},
15 {0x000400C0, nullptr, "DeleteApplicationTitle"}, 15 {0x000400C0, nullptr, "DeleteApplicationTitle"},
16 {0x000500C0, nullptr, "GetTitleProductCode"}, 16 {0x000500C0, nullptr, "GetTitleProductCode"},
17 {0x00080000, nullptr, "TitleIDListGetTotal3"}, 17 {0x000600C0, nullptr, "GetTitleExtDataId"},
18 {0x00090082, nullptr, "GetTitleIDList3"}, 18 {0x00070080, DeleteTicket, "DeleteTicket"},
19 {0x00080000, GetTicketCount, "GetTicketCount"},
20 {0x00090082, GetTicketList, "GetTicketList"},
19 {0x000A0000, nullptr, "GetDeviceID"}, 21 {0x000A0000, nullptr, "GetDeviceID"},
20 {0x000D0084, nullptr, "ListTitles2"}, 22 {0x000D0084, nullptr, "GetPendingTitleInfo"},
21 {0x00140040, nullptr, "FinishInstallToMedia"}, 23 {0x000E00C0, nullptr, "DeletePendingTitle"},
24 {0x00140040, nullptr, "FinalizePendingTitles"},
25 {0x00150040, nullptr, "DeleteAllPendingTitles"},
22 {0x00180080, nullptr, "InitializeTitleDatabase"}, 26 {0x00180080, nullptr, "InitializeTitleDatabase"},
23 {0x00190040, nullptr, "ReloadDBS"}, 27 {0x00190040, nullptr, "ReloadDBS"},
24 {0x001A00C0, nullptr, "GetDSiWareExportSize"}, 28 {0x001A00C0, nullptr, "GetDSiWareExportSize"},
diff --git a/src/core/hle/service/am/am_sys.cpp b/src/core/hle/service/am/am_sys.cpp
index e38812297..8bad5e1c9 100644
--- a/src/core/hle/service/am/am_sys.cpp
+++ b/src/core/hle/service/am/am_sys.cpp
@@ -9,23 +9,27 @@ namespace Service {
9namespace AM { 9namespace AM {
10 10
11const Interface::FunctionInfo FunctionTable[] = { 11const Interface::FunctionInfo FunctionTable[] = {
12 {0x00010040, TitleIDListGetTotal, "TitleIDListGetTotal"}, 12 {0x00010040, GetTitleCount, "GetTitleCount"},
13 {0x00020082, GetTitleIDList, "GetTitleIDList"}, 13 {0x00020082, GetTitleList, "GetTitleList"},
14 {0x00030084, nullptr, "ListTitles"}, 14 {0x00030084, GetTitleInfo, "GetTitleInfo"},
15 {0x000400C0, nullptr, "DeleteApplicationTitle"}, 15 {0x000400C0, nullptr, "DeleteApplicationTitle"},
16 {0x000500C0, nullptr, "GetTitleProductCode"}, 16 {0x000500C0, nullptr, "GetTitleProductCode"},
17 {0x00080000, nullptr, "TitleIDListGetTotal3"}, 17 {0x000600C0, nullptr, "GetTitleExtDataId"},
18 {0x00090082, nullptr, "GetTitleIDList3"}, 18 {0x00070080, DeleteTicket, "DeleteTicket"},
19 {0x00080000, GetTicketCount, "GetTicketCount"},
20 {0x00090082, GetTicketList, "GetTicketList"},
19 {0x000A0000, nullptr, "GetDeviceID"}, 21 {0x000A0000, nullptr, "GetDeviceID"},
20 {0x000D0084, nullptr, "ListTitles2"}, 22 {0x000D0084, nullptr, "GetPendingTitleInfo"},
21 {0x00140040, nullptr, "FinishInstallToMedia"}, 23 {0x000E00C0, nullptr, "DeletePendingTitle"},
24 {0x00140040, nullptr, "FinalizePendingTitles"},
25 {0x00150040, nullptr, "DeleteAllPendingTitles"},
22 {0x00180080, nullptr, "InitializeTitleDatabase"}, 26 {0x00180080, nullptr, "InitializeTitleDatabase"},
23 {0x00190040, nullptr, "ReloadDBS"}, 27 {0x00190040, nullptr, "ReloadDBS"},
24 {0x001A00C0, nullptr, "GetDSiWareExportSize"}, 28 {0x001A00C0, nullptr, "GetDSiWareExportSize"},
25 {0x001B0144, nullptr, "ExportDSiWare"}, 29 {0x001B0144, nullptr, "ExportDSiWare"},
26 {0x001C0084, nullptr, "ImportDSiWare"}, 30 {0x001C0084, nullptr, "ImportDSiWare"},
27 {0x00230080, nullptr, "TitleIDListGetTotal2"}, 31 {0x00230080, nullptr, "GetPendingTitleCount"},
28 {0x002400C2, nullptr, "GetTitleIDList2"} 32 {0x002400C2, nullptr, "GetPendingTitleList"}
29}; 33};
30 34
31AM_SYS_Interface::AM_SYS_Interface() { 35AM_SYS_Interface::AM_SYS_Interface() {
diff --git a/src/core/hle/service/am/am_u.cpp b/src/core/hle/service/am/am_u.cpp
index c0392b754..d583dd9e6 100644
--- a/src/core/hle/service/am/am_u.cpp
+++ b/src/core/hle/service/am/am_u.cpp
@@ -9,16 +9,20 @@ namespace Service {
9namespace AM { 9namespace AM {
10 10
11const Interface::FunctionInfo FunctionTable[] = { 11const Interface::FunctionInfo FunctionTable[] = {
12 {0x00010040, TitleIDListGetTotal, "TitleIDListGetTotal"}, 12 {0x00010040, GetTitleCount, "GetTitleCount"},
13 {0x00020082, GetTitleIDList, "GetTitleIDList"}, 13 {0x00020082, GetTitleList, "GetTitleList"},
14 {0x00030084, nullptr, "ListTitles"}, 14 {0x00030084, GetTitleInfo, "GetTitleInfo"},
15 {0x000400C0, nullptr, "DeleteApplicationTitle"}, 15 {0x000400C0, nullptr, "DeleteApplicationTitle"},
16 {0x000500C0, nullptr, "GetTitleProductCode"}, 16 {0x000500C0, nullptr, "GetTitleProductCode"},
17 {0x00080000, nullptr, "TitleIDListGetTotal3"}, 17 {0x000600C0, nullptr, "GetTitleExtDataId"},
18 {0x00090082, nullptr, "GetTitleIDList3"}, 18 {0x00070080, DeleteTicket, "DeleteTicket"},
19 {0x00080000, GetTicketCount, "GetTicketCount"},
20 {0x00090082, GetTicketList, "GetTicketList"},
19 {0x000A0000, nullptr, "GetDeviceID"}, 21 {0x000A0000, nullptr, "GetDeviceID"},
20 {0x000D0084, nullptr, "ListTitles2"}, 22 {0x000D0084, nullptr, "GetPendingTitleInfo"},
21 {0x00140040, nullptr, "FinishInstallToMedia"}, 23 {0x000E00C0, nullptr, "DeletePendingTitle"},
24 {0x00140040, nullptr, "FinalizePendingTitles"},
25 {0x00150040, nullptr, "DeleteAllPendingTitles"},
22 {0x00180080, nullptr, "InitializeTitleDatabase"}, 26 {0x00180080, nullptr, "InitializeTitleDatabase"},
23 {0x00190040, nullptr, "ReloadDBS"}, 27 {0x00190040, nullptr, "ReloadDBS"},
24 {0x001A00C0, nullptr, "GetDSiWareExportSize"}, 28 {0x001A00C0, nullptr, "GetDSiWareExportSize"},