Merge pull request #3138 from wwylele/ipc-mapped-buffer

Kernel/IPC: Implement MappedBuffer translation for HLE services that use the HLERequestContext architecture.
This commit is contained in:
Weiyi Wang
2017-12-03 11:33:48 +02:00
committed by GitHub
7 changed files with 319 additions and 125 deletions

View File

@@ -606,7 +606,7 @@ void DeleteContents(Service::Interface* self) {
u8 media_type = rp.Pop<u8>();
u64 title_id = rp.Pop<u64>();
u32 content_count = rp.Pop<u32>();
VAddr content_ids_in = rp.PopMappedBuffer();
VAddr content_ids_in = rp.PopMappedBuffer(nullptr);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
rb.Push(RESULT_SUCCESS);
@@ -620,7 +620,7 @@ void GetProgramList(Service::Interface* self) {
u32 count = rp.Pop<u32>();
u8 media_type = rp.Pop<u8>();
VAddr title_ids_output_pointer = rp.PopMappedBuffer();
VAddr title_ids_output_pointer = rp.PopMappedBuffer(nullptr);
if (!Memory::IsValidVirtualAddress(title_ids_output_pointer) || media_type > 2) {
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
@@ -765,7 +765,7 @@ void ListDataTitleTicketInfos(Service::Interface* self) {
u32 ticket_count = rp.Pop<u32>();
u64 title_id = rp.Pop<u64>();
u32 start_index = rp.Pop<u32>();
VAddr ticket_info_out = rp.PopMappedBuffer();
VAddr ticket_info_out = rp.PopMappedBuffer(nullptr);
VAddr ticket_info_write = ticket_info_out;
for (u32 i = 0; i < ticket_count; i++) {
@@ -840,7 +840,7 @@ void GetTicketList(Service::Interface* self) {
IPC::RequestParser rp(Kernel::GetCommandBuffer(), 9, 2, 2); // 0x00090082
u32 ticket_list_count = rp.Pop<u32>();
u32 ticket_index = rp.Pop<u32>();
VAddr ticket_tids_out = rp.PopMappedBuffer();
VAddr ticket_tids_out = rp.PopMappedBuffer(nullptr);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS);