diff options
| author | 2018-11-26 17:06:13 +1100 | |
|---|---|---|
| committer | 2018-11-26 17:06:13 +1100 | |
| commit | a2cc3b10bb6115b17d980fdb83ed5c561835eb3b (patch) | |
| tree | e802627fe23c3ad043c86bcf757d15d902127766 | |
| parent | Merge pull request #1800 from encounter/svcgetinfo (diff) | |
| download | yuzu-a2cc3b10bb6115b17d980fdb83ed5c561835eb3b.tar.gz yuzu-a2cc3b10bb6115b17d980fdb83ed5c561835eb3b.tar.xz yuzu-a2cc3b10bb6115b17d980fdb83ed5c561835eb3b.zip | |
Changed logging to be "Log before execution", Added more error logging, all services should now log on some level
51 files changed, 726 insertions, 374 deletions
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index f287f7c97..775afccf6 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp | |||
| @@ -69,37 +69,45 @@ bool IsInsideNewMapRegion(const VMManager& vm, VAddr address, u64 size) { | |||
| 69 | ResultCode MapUnmapMemorySanityChecks(const VMManager& vm_manager, VAddr dst_addr, VAddr src_addr, | 69 | ResultCode MapUnmapMemorySanityChecks(const VMManager& vm_manager, VAddr dst_addr, VAddr src_addr, |
| 70 | u64 size) { | 70 | u64 size) { |
| 71 | if (!Common::Is4KBAligned(dst_addr) || !Common::Is4KBAligned(src_addr)) { | 71 | if (!Common::Is4KBAligned(dst_addr) || !Common::Is4KBAligned(src_addr)) { |
| 72 | LOG_ERROR(Kernel_SVC, "Invalid address"); | ||
| 72 | return ERR_INVALID_ADDRESS; | 73 | return ERR_INVALID_ADDRESS; |
| 73 | } | 74 | } |
| 74 | 75 | ||
| 75 | if (size == 0 || !Common::Is4KBAligned(size)) { | 76 | if (size == 0 || !Common::Is4KBAligned(size)) { |
| 77 | LOG_ERROR(Kernel_SVC, "Invalid size"); | ||
| 76 | return ERR_INVALID_SIZE; | 78 | return ERR_INVALID_SIZE; |
| 77 | } | 79 | } |
| 78 | 80 | ||
| 79 | if (!IsValidAddressRange(dst_addr, size)) { | 81 | if (!IsValidAddressRange(dst_addr, size)) { |
| 82 | LOG_ERROR(Kernel_SVC, "size is out of range"); | ||
| 80 | return ERR_INVALID_ADDRESS_STATE; | 83 | return ERR_INVALID_ADDRESS_STATE; |
| 81 | } | 84 | } |
| 82 | 85 | ||
| 83 | if (!IsValidAddressRange(src_addr, size)) { | 86 | if (!IsValidAddressRange(src_addr, size)) { |
| 87 | LOG_ERROR(Kernel_SVC, "size is out of range"); | ||
| 84 | return ERR_INVALID_ADDRESS_STATE; | 88 | return ERR_INVALID_ADDRESS_STATE; |
| 85 | } | 89 | } |
| 86 | 90 | ||
| 87 | if (!IsInsideAddressSpace(vm_manager, src_addr, size)) { | 91 | if (!IsInsideAddressSpace(vm_manager, src_addr, size)) { |
| 92 | LOG_ERROR(Kernel_SVC, "Region is out of the address space"); | ||
| 88 | return ERR_INVALID_ADDRESS_STATE; | 93 | return ERR_INVALID_ADDRESS_STATE; |
| 89 | } | 94 | } |
| 90 | 95 | ||
| 91 | if (!IsInsideNewMapRegion(vm_manager, dst_addr, size)) { | 96 | if (!IsInsideNewMapRegion(vm_manager, dst_addr, size)) { |
| 97 | LOG_ERROR(Kernel_SVC, "Region is out of the address space"); | ||
| 92 | return ERR_INVALID_MEMORY_RANGE; | 98 | return ERR_INVALID_MEMORY_RANGE; |
| 93 | } | 99 | } |
| 94 | 100 | ||
| 95 | const VAddr dst_end_address = dst_addr + size; | 101 | const VAddr dst_end_address = dst_addr + size; |
| 96 | if (dst_end_address > vm_manager.GetHeapRegionBaseAddress() && | 102 | if (dst_end_address > vm_manager.GetHeapRegionBaseAddress() && |
| 97 | vm_manager.GetHeapRegionEndAddress() > dst_addr) { | 103 | vm_manager.GetHeapRegionEndAddress() > dst_addr) { |
| 104 | LOG_ERROR(Kernel_SVC, "Region is not in the correct address space"); | ||
| 98 | return ERR_INVALID_MEMORY_RANGE; | 105 | return ERR_INVALID_MEMORY_RANGE; |
| 99 | } | 106 | } |
| 100 | 107 | ||
| 101 | if (dst_end_address > vm_manager.GetMapRegionBaseAddress() && | 108 | if (dst_end_address > vm_manager.GetMapRegionBaseAddress() && |
| 102 | vm_manager.GetMapRegionEndAddress() > dst_addr) { | 109 | vm_manager.GetMapRegionEndAddress() > dst_addr) { |
| 110 | LOG_ERROR(Kernel_SVC, "Region is not in the correct address space"); | ||
| 103 | return ERR_INVALID_MEMORY_RANGE; | 111 | return ERR_INVALID_MEMORY_RANGE; |
| 104 | } | 112 | } |
| 105 | 113 | ||
| @@ -113,6 +121,7 @@ static ResultCode SetHeapSize(VAddr* heap_addr, u64 heap_size) { | |||
| 113 | 121 | ||
| 114 | // Size must be a multiple of 0x200000 (2MB) and be equal to or less than 4GB. | 122 | // Size must be a multiple of 0x200000 (2MB) and be equal to or less than 4GB. |
| 115 | if ((heap_size & 0xFFFFFFFE001FFFFF) != 0) { | 123 | if ((heap_size & 0xFFFFFFFE001FFFFF) != 0) { |
| 124 | LOG_ERROR(Kernel_SVC, "Invalid heap size"); | ||
| 116 | return ERR_INVALID_SIZE; | 125 | return ERR_INVALID_SIZE; |
| 117 | } | 126 | } |
| 118 | 127 | ||
| @@ -127,20 +136,24 @@ static ResultCode SetMemoryPermission(VAddr addr, u64 size, u32 prot) { | |||
| 127 | LOG_TRACE(Kernel_SVC, "called, addr=0x{:X}, size=0x{:X}, prot=0x{:X}", addr, size, prot); | 136 | LOG_TRACE(Kernel_SVC, "called, addr=0x{:X}, size=0x{:X}, prot=0x{:X}", addr, size, prot); |
| 128 | 137 | ||
| 129 | if (!Common::Is4KBAligned(addr)) { | 138 | if (!Common::Is4KBAligned(addr)) { |
| 139 | LOG_ERROR(Kernel_SVC, "Address is not aligned"); | ||
| 130 | return ERR_INVALID_ADDRESS; | 140 | return ERR_INVALID_ADDRESS; |
| 131 | } | 141 | } |
| 132 | 142 | ||
| 133 | if (size == 0 || !Common::Is4KBAligned(size)) { | 143 | if (size == 0 || !Common::Is4KBAligned(size)) { |
| 144 | LOG_ERROR(Kernel_SVC, "Invalid size"); | ||
| 134 | return ERR_INVALID_SIZE; | 145 | return ERR_INVALID_SIZE; |
| 135 | } | 146 | } |
| 136 | 147 | ||
| 137 | if (!IsValidAddressRange(addr, size)) { | 148 | if (!IsValidAddressRange(addr, size)) { |
| 149 | LOG_ERROR(Kernel_SVC, "Region is out of the address space"); | ||
| 138 | return ERR_INVALID_ADDRESS_STATE; | 150 | return ERR_INVALID_ADDRESS_STATE; |
| 139 | } | 151 | } |
| 140 | 152 | ||
| 141 | const auto permission = static_cast<MemoryPermission>(prot); | 153 | const auto permission = static_cast<MemoryPermission>(prot); |
| 142 | if (permission != MemoryPermission::None && permission != MemoryPermission::Read && | 154 | if (permission != MemoryPermission::None && permission != MemoryPermission::Read && |
| 143 | permission != MemoryPermission::ReadWrite) { | 155 | permission != MemoryPermission::ReadWrite) { |
| 156 | LOG_ERROR(Kernel_SVC, "Incorrect memory permissions"); | ||
| 144 | return ERR_INVALID_MEMORY_PERMISSIONS; | 157 | return ERR_INVALID_MEMORY_PERMISSIONS; |
| 145 | } | 158 | } |
| 146 | 159 | ||
| @@ -148,11 +161,13 @@ static ResultCode SetMemoryPermission(VAddr addr, u64 size, u32 prot) { | |||
| 148 | auto& vm_manager = current_process->VMManager(); | 161 | auto& vm_manager = current_process->VMManager(); |
| 149 | 162 | ||
| 150 | if (!IsInsideAddressSpace(vm_manager, addr, size)) { | 163 | if (!IsInsideAddressSpace(vm_manager, addr, size)) { |
| 164 | LOG_ERROR(Kernel_SVC, "Region is not inside the address space"); | ||
| 151 | return ERR_INVALID_ADDRESS_STATE; | 165 | return ERR_INVALID_ADDRESS_STATE; |
| 152 | } | 166 | } |
| 153 | 167 | ||
| 154 | const VMManager::VMAHandle iter = vm_manager.FindVMA(addr); | 168 | const VMManager::VMAHandle iter = vm_manager.FindVMA(addr); |
| 155 | if (iter == vm_manager.vma_map.end()) { | 169 | if (iter == vm_manager.vma_map.end()) { |
| 170 | LOG_ERROR(Kernel_SVC, "Unable to find VMA"); | ||
| 156 | return ERR_INVALID_ADDRESS_STATE; | 171 | return ERR_INVALID_ADDRESS_STATE; |
| 157 | } | 172 | } |
| 158 | 173 | ||
| @@ -182,6 +197,7 @@ static ResultCode MapMemory(VAddr dst_addr, VAddr src_addr, u64 size) { | |||
| 182 | 197 | ||
| 183 | const auto result = MapUnmapMemorySanityChecks(vm_manager, dst_addr, src_addr, size); | 198 | const auto result = MapUnmapMemorySanityChecks(vm_manager, dst_addr, src_addr, size); |
| 184 | if (result != RESULT_SUCCESS) { | 199 | if (result != RESULT_SUCCESS) { |
| 200 | LOG_ERROR(Kernel_SVC, "Map Memory failed"); | ||
| 185 | return result; | 201 | return result; |
| 186 | } | 202 | } |
| 187 | 203 | ||
| @@ -198,6 +214,7 @@ static ResultCode UnmapMemory(VAddr dst_addr, VAddr src_addr, u64 size) { | |||
| 198 | 214 | ||
| 199 | const auto result = MapUnmapMemorySanityChecks(vm_manager, dst_addr, src_addr, size); | 215 | const auto result = MapUnmapMemorySanityChecks(vm_manager, dst_addr, src_addr, size); |
| 200 | if (result != RESULT_SUCCESS) { | 216 | if (result != RESULT_SUCCESS) { |
| 217 | LOG_ERROR(Kernel_SVC, "UnmapMemory failed"); | ||
| 201 | return result; | 218 | return result; |
| 202 | } | 219 | } |
| 203 | 220 | ||
| @@ -207,6 +224,7 @@ static ResultCode UnmapMemory(VAddr dst_addr, VAddr src_addr, u64 size) { | |||
| 207 | /// Connect to an OS service given the port name, returns the handle to the port to out | 224 | /// Connect to an OS service given the port name, returns the handle to the port to out |
| 208 | static ResultCode ConnectToNamedPort(Handle* out_handle, VAddr port_name_address) { | 225 | static ResultCode ConnectToNamedPort(Handle* out_handle, VAddr port_name_address) { |
| 209 | if (!Memory::IsValidVirtualAddress(port_name_address)) { | 226 | if (!Memory::IsValidVirtualAddress(port_name_address)) { |
| 227 | LOG_ERROR(Kernel_SVC, "Invalid port name address"); | ||
| 210 | return ERR_NOT_FOUND; | 228 | return ERR_NOT_FOUND; |
| 211 | } | 229 | } |
| 212 | 230 | ||
| @@ -214,6 +232,7 @@ static ResultCode ConnectToNamedPort(Handle* out_handle, VAddr port_name_address | |||
| 214 | // Read 1 char beyond the max allowed port name to detect names that are too long. | 232 | // Read 1 char beyond the max allowed port name to detect names that are too long. |
| 215 | std::string port_name = Memory::ReadCString(port_name_address, PortNameMaxLength + 1); | 233 | std::string port_name = Memory::ReadCString(port_name_address, PortNameMaxLength + 1); |
| 216 | if (port_name.size() > PortNameMaxLength) { | 234 | if (port_name.size() > PortNameMaxLength) { |
| 235 | LOG_ERROR(Kernel_SVC, "Port name is too long"); | ||
| 217 | return ERR_OUT_OF_RANGE; | 236 | return ERR_OUT_OF_RANGE; |
| 218 | } | 237 | } |
| 219 | 238 | ||
| @@ -262,6 +281,7 @@ static ResultCode GetThreadId(u32* thread_id, Handle thread_handle) { | |||
| 262 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); | 281 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); |
| 263 | const SharedPtr<Thread> thread = handle_table.Get<Thread>(thread_handle); | 282 | const SharedPtr<Thread> thread = handle_table.Get<Thread>(thread_handle); |
| 264 | if (!thread) { | 283 | if (!thread) { |
| 284 | LOG_ERROR(Kernel_SVC, "Invalid thread handle"); | ||
| 265 | return ERR_INVALID_HANDLE; | 285 | return ERR_INVALID_HANDLE; |
| 266 | } | 286 | } |
| 267 | 287 | ||
| @@ -276,6 +296,7 @@ static ResultCode GetProcessId(u32* process_id, Handle process_handle) { | |||
| 276 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); | 296 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); |
| 277 | const SharedPtr<Process> process = handle_table.Get<Process>(process_handle); | 297 | const SharedPtr<Process> process = handle_table.Get<Process>(process_handle); |
| 278 | if (!process) { | 298 | if (!process) { |
| 299 | LOG_ERROR(Kernel_SVC, "Invalid process"); | ||
| 279 | return ERR_INVALID_HANDLE; | 300 | return ERR_INVALID_HANDLE; |
| 280 | } | 301 | } |
| 281 | 302 | ||
| @@ -305,12 +326,15 @@ static ResultCode WaitSynchronization(Handle* index, VAddr handles_address, u64 | |||
| 305 | LOG_TRACE(Kernel_SVC, "called handles_address=0x{:X}, handle_count={}, nano_seconds={}", | 326 | LOG_TRACE(Kernel_SVC, "called handles_address=0x{:X}, handle_count={}, nano_seconds={}", |
| 306 | handles_address, handle_count, nano_seconds); | 327 | handles_address, handle_count, nano_seconds); |
| 307 | 328 | ||
| 308 | if (!Memory::IsValidVirtualAddress(handles_address)) | 329 | if (!Memory::IsValidVirtualAddress(handles_address)) { |
| 330 | LOG_ERROR(Kernel_SVC, "Invalid handle address"); | ||
| 309 | return ERR_INVALID_POINTER; | 331 | return ERR_INVALID_POINTER; |
| 332 | } | ||
| 310 | 333 | ||
| 311 | static constexpr u64 MaxHandles = 0x40; | 334 | static constexpr u64 MaxHandles = 0x40; |
| 312 | 335 | ||
| 313 | if (handle_count > MaxHandles) { | 336 | if (handle_count > MaxHandles) { |
| 337 | LOG_ERROR(Kernel_SVC, "Handle count is too big"); | ||
| 314 | return ERR_OUT_OF_RANGE; | 338 | return ERR_OUT_OF_RANGE; |
| 315 | } | 339 | } |
| 316 | 340 | ||
| @@ -325,6 +349,7 @@ static ResultCode WaitSynchronization(Handle* index, VAddr handles_address, u64 | |||
| 325 | const auto object = handle_table.Get<WaitObject>(handle); | 349 | const auto object = handle_table.Get<WaitObject>(handle); |
| 326 | 350 | ||
| 327 | if (object == nullptr) { | 351 | if (object == nullptr) { |
| 352 | LOG_ERROR(Kernel_SVC, "Object is a nullptr"); | ||
| 328 | return ERR_INVALID_HANDLE; | 353 | return ERR_INVALID_HANDLE; |
| 329 | } | 354 | } |
| 330 | 355 | ||
| @@ -348,11 +373,13 @@ static ResultCode WaitSynchronization(Handle* index, VAddr handles_address, u64 | |||
| 348 | 373 | ||
| 349 | // If a timeout value of 0 was provided, just return the Timeout error code instead of | 374 | // If a timeout value of 0 was provided, just return the Timeout error code instead of |
| 350 | // suspending the thread. | 375 | // suspending the thread. |
| 351 | if (nano_seconds == 0) | 376 | if (nano_seconds == 0) { |
| 352 | return RESULT_TIMEOUT; | 377 | return RESULT_TIMEOUT; |
| 378 | } | ||
| 353 | 379 | ||
| 354 | for (auto& object : objects) | 380 | for (auto& object : objects) { |
| 355 | object->AddWaitingThread(thread); | 381 | object->AddWaitingThread(thread); |
| 382 | } | ||
| 356 | 383 | ||
| 357 | thread->SetWaitObjects(std::move(objects)); | 384 | thread->SetWaitObjects(std::move(objects)); |
| 358 | thread->SetStatus(ThreadStatus::WaitSynchAny); | 385 | thread->SetStatus(ThreadStatus::WaitSynchAny); |
| @@ -373,6 +400,7 @@ static ResultCode CancelSynchronization(Handle thread_handle) { | |||
| 373 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); | 400 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); |
| 374 | const SharedPtr<Thread> thread = handle_table.Get<Thread>(thread_handle); | 401 | const SharedPtr<Thread> thread = handle_table.Get<Thread>(thread_handle); |
| 375 | if (!thread) { | 402 | if (!thread) { |
| 403 | LOG_ERROR(Kernel_SVC, "Invalid thread handle"); | ||
| 376 | return ERR_INVALID_HANDLE; | 404 | return ERR_INVALID_HANDLE; |
| 377 | } | 405 | } |
| 378 | 406 | ||
| @@ -391,10 +419,12 @@ static ResultCode ArbitrateLock(Handle holding_thread_handle, VAddr mutex_addr, | |||
| 391 | holding_thread_handle, mutex_addr, requesting_thread_handle); | 419 | holding_thread_handle, mutex_addr, requesting_thread_handle); |
| 392 | 420 | ||
| 393 | if (Memory::IsKernelVirtualAddress(mutex_addr)) { | 421 | if (Memory::IsKernelVirtualAddress(mutex_addr)) { |
| 422 | LOG_ERROR(Kernel_SVC, "Invalid mutex address"); | ||
| 394 | return ERR_INVALID_ADDRESS_STATE; | 423 | return ERR_INVALID_ADDRESS_STATE; |
| 395 | } | 424 | } |
| 396 | 425 | ||
| 397 | if (!Common::IsWordAligned(mutex_addr)) { | 426 | if (!Common::IsWordAligned(mutex_addr)) { |
| 427 | LOG_ERROR(Kernel_SVC, "Mutex address is not aligned"); | ||
| 398 | return ERR_INVALID_ADDRESS; | 428 | return ERR_INVALID_ADDRESS; |
| 399 | } | 429 | } |
| 400 | 430 | ||
| @@ -408,10 +438,12 @@ static ResultCode ArbitrateUnlock(VAddr mutex_addr) { | |||
| 408 | LOG_TRACE(Kernel_SVC, "called mutex_addr=0x{:X}", mutex_addr); | 438 | LOG_TRACE(Kernel_SVC, "called mutex_addr=0x{:X}", mutex_addr); |
| 409 | 439 | ||
| 410 | if (Memory::IsKernelVirtualAddress(mutex_addr)) { | 440 | if (Memory::IsKernelVirtualAddress(mutex_addr)) { |
| 441 | LOG_ERROR(Kernel_SVC, "Invalid size"); | ||
| 411 | return ERR_INVALID_ADDRESS_STATE; | 442 | return ERR_INVALID_ADDRESS_STATE; |
| 412 | } | 443 | } |
| 413 | 444 | ||
| 414 | if (!Common::IsWordAligned(mutex_addr)) { | 445 | if (!Common::IsWordAligned(mutex_addr)) { |
| 446 | LOG_ERROR(Kernel_SVC, "Mutex address is not aligned"); | ||
| 415 | return ERR_INVALID_ADDRESS; | 447 | return ERR_INVALID_ADDRESS; |
| 416 | } | 448 | } |
| 417 | 449 | ||
| @@ -602,10 +634,12 @@ static ResultCode GetInfo(u64* result, u64 info_id, u64 handle, u64 info_sub_id) | |||
| 602 | break; | 634 | break; |
| 603 | case GetInfoType::RandomEntropy: | 635 | case GetInfoType::RandomEntropy: |
| 604 | if (handle != 0) { | 636 | if (handle != 0) { |
| 637 | LOG_ERROR(Kernel_SVC, "Non zero handle specified"); | ||
| 605 | return ERR_INVALID_HANDLE; | 638 | return ERR_INVALID_HANDLE; |
| 606 | } | 639 | } |
| 607 | 640 | ||
| 608 | if (info_sub_id >= Process::RANDOM_ENTROPY_SIZE) { | 641 | if (info_sub_id >= Process::RANDOM_ENTROPY_SIZE) { |
| 642 | LOG_ERROR(Kernel_SVC, "Entropy size is too big"); | ||
| 609 | return ERR_INVALID_COMBINATION; | 643 | return ERR_INVALID_COMBINATION; |
| 610 | } | 644 | } |
| 611 | 645 | ||
| @@ -643,12 +677,14 @@ static ResultCode GetInfo(u64* result, u64 info_id, u64 handle, u64 info_sub_id) | |||
| 643 | case GetInfoType::ThreadTickCount: { | 677 | case GetInfoType::ThreadTickCount: { |
| 644 | constexpr u64 num_cpus = 4; | 678 | constexpr u64 num_cpus = 4; |
| 645 | if (info_sub_id != 0xFFFFFFFFFFFFFFFF && info_sub_id >= num_cpus) { | 679 | if (info_sub_id != 0xFFFFFFFFFFFFFFFF && info_sub_id >= num_cpus) { |
| 680 | LOG_ERROR(Kernel_SVC, "Incorrect info_sub_id"); | ||
| 646 | return ERR_INVALID_COMBINATION; | 681 | return ERR_INVALID_COMBINATION; |
| 647 | } | 682 | } |
| 648 | 683 | ||
| 649 | const auto thread = | 684 | const auto thread = |
| 650 | current_process->GetHandleTable().Get<Thread>(static_cast<Handle>(handle)); | 685 | current_process->GetHandleTable().Get<Thread>(static_cast<Handle>(handle)); |
| 651 | if (!thread) { | 686 | if (!thread) { |
| 687 | LOG_ERROR(Kernel_SVC, "Thread is not a valid handle"); | ||
| 652 | return ERR_INVALID_HANDLE; | 688 | return ERR_INVALID_HANDLE; |
| 653 | } | 689 | } |
| 654 | 690 | ||
| @@ -691,14 +727,17 @@ static ResultCode GetThreadContext(VAddr thread_context, Handle handle) { | |||
| 691 | const auto* current_process = Core::CurrentProcess(); | 727 | const auto* current_process = Core::CurrentProcess(); |
| 692 | const SharedPtr<Thread> thread = current_process->GetHandleTable().Get<Thread>(handle); | 728 | const SharedPtr<Thread> thread = current_process->GetHandleTable().Get<Thread>(handle); |
| 693 | if (!thread) { | 729 | if (!thread) { |
| 730 | LOG_ERROR(Kernel_SVC, "Thread is not a valid handle"); | ||
| 694 | return ERR_INVALID_HANDLE; | 731 | return ERR_INVALID_HANDLE; |
| 695 | } | 732 | } |
| 696 | 733 | ||
| 697 | if (thread->GetOwnerProcess() != current_process) { | 734 | if (thread->GetOwnerProcess() != current_process) { |
| 735 | LOG_ERROR(Kernel_SVC, "Thread owner process is not the current process"); | ||
| 698 | return ERR_INVALID_HANDLE; | 736 | return ERR_INVALID_HANDLE; |
| 699 | } | 737 | } |
| 700 | 738 | ||
| 701 | if (thread == GetCurrentThread()) { | 739 | if (thread == GetCurrentThread()) { |
| 740 | LOG_ERROR(Kernel_SVC, "Thread is already registered"); | ||
| 702 | return ERR_ALREADY_REGISTERED; | 741 | return ERR_ALREADY_REGISTERED; |
| 703 | } | 742 | } |
| 704 | 743 | ||
| @@ -719,9 +758,12 @@ static ResultCode GetThreadContext(VAddr thread_context, Handle handle) { | |||
| 719 | 758 | ||
| 720 | /// Gets the priority for the specified thread | 759 | /// Gets the priority for the specified thread |
| 721 | static ResultCode GetThreadPriority(u32* priority, Handle handle) { | 760 | static ResultCode GetThreadPriority(u32* priority, Handle handle) { |
| 761 | LOG_TRACE(Kernel_SVC, "called"); | ||
| 762 | |||
| 722 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); | 763 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); |
| 723 | const SharedPtr<Thread> thread = handle_table.Get<Thread>(handle); | 764 | const SharedPtr<Thread> thread = handle_table.Get<Thread>(handle); |
| 724 | if (!thread) { | 765 | if (!thread) { |
| 766 | LOG_ERROR(Kernel_SVC, "Invalid thread handle"); | ||
| 725 | return ERR_INVALID_HANDLE; | 767 | return ERR_INVALID_HANDLE; |
| 726 | } | 768 | } |
| 727 | 769 | ||
| @@ -731,7 +773,10 @@ static ResultCode GetThreadPriority(u32* priority, Handle handle) { | |||
| 731 | 773 | ||
| 732 | /// Sets the priority for the specified thread | 774 | /// Sets the priority for the specified thread |
| 733 | static ResultCode SetThreadPriority(Handle handle, u32 priority) { | 775 | static ResultCode SetThreadPriority(Handle handle, u32 priority) { |
| 776 | LOG_TRACE(Kernel_SVC, "called"); | ||
| 777 | |||
| 734 | if (priority > THREADPRIO_LOWEST) { | 778 | if (priority > THREADPRIO_LOWEST) { |
| 779 | LOG_ERROR(Kernel_SVC, "Priority is out of range"); | ||
| 735 | return ERR_INVALID_THREAD_PRIORITY; | 780 | return ERR_INVALID_THREAD_PRIORITY; |
| 736 | } | 781 | } |
| 737 | 782 | ||
| @@ -739,6 +784,7 @@ static ResultCode SetThreadPriority(Handle handle, u32 priority) { | |||
| 739 | 784 | ||
| 740 | SharedPtr<Thread> thread = current_process->GetHandleTable().Get<Thread>(handle); | 785 | SharedPtr<Thread> thread = current_process->GetHandleTable().Get<Thread>(handle); |
| 741 | if (!thread) { | 786 | if (!thread) { |
| 787 | LOG_ERROR(Kernel_SVC, "Invalid thread handle"); | ||
| 742 | return ERR_INVALID_HANDLE; | 788 | return ERR_INVALID_HANDLE; |
| 743 | } | 789 | } |
| 744 | 790 | ||
| @@ -761,14 +807,17 @@ static ResultCode MapSharedMemory(Handle shared_memory_handle, VAddr addr, u64 s | |||
| 761 | shared_memory_handle, addr, size, permissions); | 807 | shared_memory_handle, addr, size, permissions); |
| 762 | 808 | ||
| 763 | if (!Common::Is4KBAligned(addr)) { | 809 | if (!Common::Is4KBAligned(addr)) { |
| 810 | LOG_ERROR(Kernel_SVC, "Address is not aligned"); | ||
| 764 | return ERR_INVALID_ADDRESS; | 811 | return ERR_INVALID_ADDRESS; |
| 765 | } | 812 | } |
| 766 | 813 | ||
| 767 | if (size == 0 || !Common::Is4KBAligned(size)) { | 814 | if (size == 0 || !Common::Is4KBAligned(size)) { |
| 815 | LOG_ERROR(Kernel_SVC, "Invalid size"); | ||
| 768 | return ERR_INVALID_SIZE; | 816 | return ERR_INVALID_SIZE; |
| 769 | } | 817 | } |
| 770 | 818 | ||
| 771 | if (!IsValidAddressRange(addr, size)) { | 819 | if (!IsValidAddressRange(addr, size)) { |
| 820 | LOG_ERROR(Kernel_SVC, "Region is not in the address space"); | ||
| 772 | return ERR_INVALID_ADDRESS_STATE; | 821 | return ERR_INVALID_ADDRESS_STATE; |
| 773 | } | 822 | } |
| 774 | 823 | ||
| @@ -782,11 +831,13 @@ static ResultCode MapSharedMemory(Handle shared_memory_handle, VAddr addr, u64 s | |||
| 782 | auto* const current_process = Core::CurrentProcess(); | 831 | auto* const current_process = Core::CurrentProcess(); |
| 783 | auto shared_memory = current_process->GetHandleTable().Get<SharedMemory>(shared_memory_handle); | 832 | auto shared_memory = current_process->GetHandleTable().Get<SharedMemory>(shared_memory_handle); |
| 784 | if (!shared_memory) { | 833 | if (!shared_memory) { |
| 834 | LOG_ERROR(Kernel_SVC, "Invalid shared memory handle"); | ||
| 785 | return ERR_INVALID_HANDLE; | 835 | return ERR_INVALID_HANDLE; |
| 786 | } | 836 | } |
| 787 | 837 | ||
| 788 | const auto& vm_manager = current_process->VMManager(); | 838 | const auto& vm_manager = current_process->VMManager(); |
| 789 | if (!vm_manager.IsWithinASLRRegion(addr, size)) { | 839 | if (!vm_manager.IsWithinASLRRegion(addr, size)) { |
| 840 | LOG_ERROR(Kernel_SVC, "Region is not within the ASLR region"); | ||
| 790 | return ERR_INVALID_MEMORY_RANGE; | 841 | return ERR_INVALID_MEMORY_RANGE; |
| 791 | } | 842 | } |
| 792 | 843 | ||
| @@ -798,25 +849,30 @@ static ResultCode UnmapSharedMemory(Handle shared_memory_handle, VAddr addr, u64 | |||
| 798 | shared_memory_handle, addr, size); | 849 | shared_memory_handle, addr, size); |
| 799 | 850 | ||
| 800 | if (!Common::Is4KBAligned(addr)) { | 851 | if (!Common::Is4KBAligned(addr)) { |
| 852 | LOG_ERROR(Kernel_SVC, "Address is not aligned"); | ||
| 801 | return ERR_INVALID_ADDRESS; | 853 | return ERR_INVALID_ADDRESS; |
| 802 | } | 854 | } |
| 803 | 855 | ||
| 804 | if (size == 0 || !Common::Is4KBAligned(size)) { | 856 | if (size == 0 || !Common::Is4KBAligned(size)) { |
| 857 | LOG_ERROR(Kernel_SVC, "Size is invalid"); | ||
| 805 | return ERR_INVALID_SIZE; | 858 | return ERR_INVALID_SIZE; |
| 806 | } | 859 | } |
| 807 | 860 | ||
| 808 | if (!IsValidAddressRange(addr, size)) { | 861 | if (!IsValidAddressRange(addr, size)) { |
| 862 | LOG_ERROR(Kernel_SVC, "Region is not in the valid address range"); | ||
| 809 | return ERR_INVALID_ADDRESS_STATE; | 863 | return ERR_INVALID_ADDRESS_STATE; |
| 810 | } | 864 | } |
| 811 | 865 | ||
| 812 | auto* const current_process = Core::CurrentProcess(); | 866 | auto* const current_process = Core::CurrentProcess(); |
| 813 | auto shared_memory = current_process->GetHandleTable().Get<SharedMemory>(shared_memory_handle); | 867 | auto shared_memory = current_process->GetHandleTable().Get<SharedMemory>(shared_memory_handle); |
| 814 | if (!shared_memory) { | 868 | if (!shared_memory) { |
| 869 | LOG_ERROR(Kernel_SVC, "Shared memory is an invalid handle"); | ||
| 815 | return ERR_INVALID_HANDLE; | 870 | return ERR_INVALID_HANDLE; |
| 816 | } | 871 | } |
| 817 | 872 | ||
| 818 | const auto& vm_manager = current_process->VMManager(); | 873 | const auto& vm_manager = current_process->VMManager(); |
| 819 | if (!vm_manager.IsWithinASLRRegion(addr, size)) { | 874 | if (!vm_manager.IsWithinASLRRegion(addr, size)) { |
| 875 | LOG_ERROR(Kernel_SVC, "Region is not within the ASLR region"); | ||
| 820 | return ERR_INVALID_MEMORY_RANGE; | 876 | return ERR_INVALID_MEMORY_RANGE; |
| 821 | } | 877 | } |
| 822 | 878 | ||
| @@ -826,9 +882,11 @@ static ResultCode UnmapSharedMemory(Handle shared_memory_handle, VAddr addr, u64 | |||
| 826 | /// Query process memory | 882 | /// Query process memory |
| 827 | static ResultCode QueryProcessMemory(MemoryInfo* memory_info, PageInfo* /*page_info*/, | 883 | static ResultCode QueryProcessMemory(MemoryInfo* memory_info, PageInfo* /*page_info*/, |
| 828 | Handle process_handle, u64 addr) { | 884 | Handle process_handle, u64 addr) { |
| 885 | LOG_TRACE(Kernel_SVC, "called process=0x{:08X} addr={:X}", process_handle, addr); | ||
| 829 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); | 886 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); |
| 830 | SharedPtr<Process> process = handle_table.Get<Process>(process_handle); | 887 | SharedPtr<Process> process = handle_table.Get<Process>(process_handle); |
| 831 | if (!process) { | 888 | if (!process) { |
| 889 | LOG_ERROR(Kernel_SVC, "Invalid process handle"); | ||
| 832 | return ERR_INVALID_HANDLE; | 890 | return ERR_INVALID_HANDLE; |
| 833 | } | 891 | } |
| 834 | auto vma = process->VMManager().FindVMA(addr); | 892 | auto vma = process->VMManager().FindVMA(addr); |
| @@ -844,8 +902,6 @@ static ResultCode QueryProcessMemory(MemoryInfo* memory_info, PageInfo* /*page_i | |||
| 844 | memory_info->size = vma->second.size; | 902 | memory_info->size = vma->second.size; |
| 845 | memory_info->type = static_cast<u32>(vma->second.meminfo_state); | 903 | memory_info->type = static_cast<u32>(vma->second.meminfo_state); |
| 846 | } | 904 | } |
| 847 | |||
| 848 | LOG_TRACE(Kernel_SVC, "called process=0x{:08X} addr={:X}", process_handle, addr); | ||
| 849 | return RESULT_SUCCESS; | 905 | return RESULT_SUCCESS; |
| 850 | } | 906 | } |
| 851 | 907 | ||
| @@ -874,7 +930,13 @@ static void ExitProcess() { | |||
| 874 | /// Creates a new thread | 930 | /// Creates a new thread |
| 875 | static ResultCode CreateThread(Handle* out_handle, VAddr entry_point, u64 arg, VAddr stack_top, | 931 | static ResultCode CreateThread(Handle* out_handle, VAddr entry_point, u64 arg, VAddr stack_top, |
| 876 | u32 priority, s32 processor_id) { | 932 | u32 priority, s32 processor_id) { |
| 933 | LOG_TRACE(Kernel_SVC, | ||
| 934 | "called entrypoint=0x{:08X} ({}), arg=0x{:08X}, stacktop=0x{:08X}, " | ||
| 935 | "threadpriority=0x{:08X}, processorid=0x{:08X} : created handle=0x{:08X}", | ||
| 936 | entry_point, name, arg, stack_top, priority, processor_id, *out_handle); | ||
| 937 | |||
| 877 | if (priority > THREADPRIO_LOWEST) { | 938 | if (priority > THREADPRIO_LOWEST) { |
| 939 | LOG_ERROR(Kernel_SVC, "Invalid thread priority"); | ||
| 878 | return ERR_INVALID_THREAD_PRIORITY; | 940 | return ERR_INVALID_THREAD_PRIORITY; |
| 879 | } | 941 | } |
| 880 | 942 | ||
| @@ -905,6 +967,8 @@ static ResultCode CreateThread(Handle* out_handle, VAddr entry_point, u64 arg, V | |||
| 905 | 967 | ||
| 906 | const auto new_guest_handle = current_process->GetHandleTable().Create(thread); | 968 | const auto new_guest_handle = current_process->GetHandleTable().Create(thread); |
| 907 | if (new_guest_handle.Failed()) { | 969 | if (new_guest_handle.Failed()) { |
| 970 | LOG_ERROR(Kernel_SVC, "Failed to create handle with error=0x{:X}", | ||
| 971 | new_guest_handle.Code().raw); | ||
| 908 | return new_guest_handle.Code(); | 972 | return new_guest_handle.Code(); |
| 909 | } | 973 | } |
| 910 | thread->SetGuestHandle(*new_guest_handle); | 974 | thread->SetGuestHandle(*new_guest_handle); |
| @@ -912,11 +976,6 @@ static ResultCode CreateThread(Handle* out_handle, VAddr entry_point, u64 arg, V | |||
| 912 | 976 | ||
| 913 | Core::System::GetInstance().CpuCore(thread->GetProcessorID()).PrepareReschedule(); | 977 | Core::System::GetInstance().CpuCore(thread->GetProcessorID()).PrepareReschedule(); |
| 914 | 978 | ||
| 915 | LOG_TRACE(Kernel_SVC, | ||
| 916 | "called entrypoint=0x{:08X} ({}), arg=0x{:08X}, stacktop=0x{:08X}, " | ||
| 917 | "threadpriority=0x{:08X}, processorid=0x{:08X} : created handle=0x{:08X}", | ||
| 918 | entry_point, name, arg, stack_top, priority, processor_id, *out_handle); | ||
| 919 | |||
| 920 | return RESULT_SUCCESS; | 979 | return RESULT_SUCCESS; |
| 921 | } | 980 | } |
| 922 | 981 | ||
| @@ -927,6 +986,7 @@ static ResultCode StartThread(Handle thread_handle) { | |||
| 927 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); | 986 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); |
| 928 | const SharedPtr<Thread> thread = handle_table.Get<Thread>(thread_handle); | 987 | const SharedPtr<Thread> thread = handle_table.Get<Thread>(thread_handle); |
| 929 | if (!thread) { | 988 | if (!thread) { |
| 989 | LOG_ERROR(Kernel_SVC, "Thread is an invalid handle"); | ||
| 930 | return ERR_INVALID_HANDLE; | 990 | return ERR_INVALID_HANDLE; |
| 931 | } | 991 | } |
| 932 | 992 | ||
| @@ -1106,10 +1166,12 @@ static ResultCode WaitForAddress(VAddr address, u32 type, s32 value, s64 timeout | |||
| 1106 | address, type, value, timeout); | 1166 | address, type, value, timeout); |
| 1107 | // If the passed address is a kernel virtual address, return invalid memory state. | 1167 | // If the passed address is a kernel virtual address, return invalid memory state. |
| 1108 | if (Memory::IsKernelVirtualAddress(address)) { | 1168 | if (Memory::IsKernelVirtualAddress(address)) { |
| 1169 | LOG_ERROR(Kernel_SVC, "Address is a kernel virtual address"); | ||
| 1109 | return ERR_INVALID_ADDRESS_STATE; | 1170 | return ERR_INVALID_ADDRESS_STATE; |
| 1110 | } | 1171 | } |
| 1111 | // If the address is not properly aligned to 4 bytes, return invalid address. | 1172 | // If the address is not properly aligned to 4 bytes, return invalid address. |
| 1112 | if (address % sizeof(u32) != 0) { | 1173 | if (address % sizeof(u32) != 0) { |
| 1174 | LOG_ERROR(Kernel_SVC, "Address is not aligned"); | ||
| 1113 | return ERR_INVALID_ADDRESS; | 1175 | return ERR_INVALID_ADDRESS; |
| 1114 | } | 1176 | } |
| 1115 | 1177 | ||
| @@ -1121,6 +1183,7 @@ static ResultCode WaitForAddress(VAddr address, u32 type, s32 value, s64 timeout | |||
| 1121 | case AddressArbiter::ArbitrationType::WaitIfEqual: | 1183 | case AddressArbiter::ArbitrationType::WaitIfEqual: |
| 1122 | return AddressArbiter::WaitForAddressIfEqual(address, value, timeout); | 1184 | return AddressArbiter::WaitForAddressIfEqual(address, value, timeout); |
| 1123 | default: | 1185 | default: |
| 1186 | LOG_ERROR(Kernel_SVC, "Invalid arbitration type"); | ||
| 1124 | return ERR_INVALID_ENUM_VALUE; | 1187 | return ERR_INVALID_ENUM_VALUE; |
| 1125 | } | 1188 | } |
| 1126 | } | 1189 | } |
| @@ -1131,10 +1194,12 @@ static ResultCode SignalToAddress(VAddr address, u32 type, s32 value, s32 num_to | |||
| 1131 | address, type, value, num_to_wake); | 1194 | address, type, value, num_to_wake); |
| 1132 | // If the passed address is a kernel virtual address, return invalid memory state. | 1195 | // If the passed address is a kernel virtual address, return invalid memory state. |
| 1133 | if (Memory::IsKernelVirtualAddress(address)) { | 1196 | if (Memory::IsKernelVirtualAddress(address)) { |
| 1197 | LOG_ERROR(Kernel_SVC, "Address is a kernel virtual address"); | ||
| 1134 | return ERR_INVALID_ADDRESS_STATE; | 1198 | return ERR_INVALID_ADDRESS_STATE; |
| 1135 | } | 1199 | } |
| 1136 | // If the address is not properly aligned to 4 bytes, return invalid address. | 1200 | // If the address is not properly aligned to 4 bytes, return invalid address. |
| 1137 | if (address % sizeof(u32) != 0) { | 1201 | if (address % sizeof(u32) != 0) { |
| 1202 | LOG_ERROR(Kernel_SVC, "Address is not aligned"); | ||
| 1138 | return ERR_INVALID_ADDRESS; | 1203 | return ERR_INVALID_ADDRESS; |
| 1139 | } | 1204 | } |
| 1140 | 1205 | ||
| @@ -1147,12 +1212,15 @@ static ResultCode SignalToAddress(VAddr address, u32 type, s32 value, s32 num_to | |||
| 1147 | return AddressArbiter::ModifyByWaitingCountAndSignalToAddressIfEqual(address, value, | 1212 | return AddressArbiter::ModifyByWaitingCountAndSignalToAddressIfEqual(address, value, |
| 1148 | num_to_wake); | 1213 | num_to_wake); |
| 1149 | default: | 1214 | default: |
| 1215 | LOG_ERROR(Kernel_SVC, "Invalid arbitration type"); | ||
| 1150 | return ERR_INVALID_ENUM_VALUE; | 1216 | return ERR_INVALID_ENUM_VALUE; |
| 1151 | } | 1217 | } |
| 1152 | } | 1218 | } |
| 1153 | 1219 | ||
| 1154 | /// This returns the total CPU ticks elapsed since the CPU was powered-on | 1220 | /// This returns the total CPU ticks elapsed since the CPU was powered-on |
| 1155 | static u64 GetSystemTick() { | 1221 | static u64 GetSystemTick() { |
| 1222 | LOG_TRACE(Kernel_SVC, "called"); | ||
| 1223 | |||
| 1156 | const u64 result{CoreTiming::GetTicks()}; | 1224 | const u64 result{CoreTiming::GetTicks()}; |
| 1157 | 1225 | ||
| 1158 | // Advance time to defeat dumb games that busy-wait for the frame to end. | 1226 | // Advance time to defeat dumb games that busy-wait for the frame to end. |
| @@ -1226,6 +1294,7 @@ static ResultCode GetThreadCoreMask(Handle thread_handle, u32* core, u64* mask) | |||
| 1226 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); | 1294 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); |
| 1227 | const SharedPtr<Thread> thread = handle_table.Get<Thread>(thread_handle); | 1295 | const SharedPtr<Thread> thread = handle_table.Get<Thread>(thread_handle); |
| 1228 | if (!thread) { | 1296 | if (!thread) { |
| 1297 | LOG_ERROR(Kernel_SVC, "Thread is an invalid handle"); | ||
| 1229 | return ERR_INVALID_HANDLE; | 1298 | return ERR_INVALID_HANDLE; |
| 1230 | } | 1299 | } |
| 1231 | 1300 | ||
| @@ -1236,12 +1305,13 @@ static ResultCode GetThreadCoreMask(Handle thread_handle, u32* core, u64* mask) | |||
| 1236 | } | 1305 | } |
| 1237 | 1306 | ||
| 1238 | static ResultCode SetThreadCoreMask(Handle thread_handle, u32 core, u64 mask) { | 1307 | static ResultCode SetThreadCoreMask(Handle thread_handle, u32 core, u64 mask) { |
| 1239 | LOG_DEBUG(Kernel_SVC, "called, handle=0x{:08X}, mask=0x{:16X}, core=0x{:X}", thread_handle, | 1308 | LOG_DEBUG(Kernel_SVC, "called, handle=0x{:08X}, mask=0x{:016X}, core=0x{:X}", thread_handle, |
| 1240 | mask, core); | 1309 | mask, core); |
| 1241 | 1310 | ||
| 1242 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); | 1311 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); |
| 1243 | const SharedPtr<Thread> thread = handle_table.Get<Thread>(thread_handle); | 1312 | const SharedPtr<Thread> thread = handle_table.Get<Thread>(thread_handle); |
| 1244 | if (!thread) { | 1313 | if (!thread) { |
| 1314 | LOG_ERROR(Kernel_SVC, "Thread is an invalid handle"); | ||
| 1245 | return ERR_INVALID_HANDLE; | 1315 | return ERR_INVALID_HANDLE; |
| 1246 | } | 1316 | } |
| 1247 | 1317 | ||
| @@ -1256,6 +1326,7 @@ static ResultCode SetThreadCoreMask(Handle thread_handle, u32 core, u64 mask) { | |||
| 1256 | } | 1326 | } |
| 1257 | 1327 | ||
| 1258 | if (mask == 0) { | 1328 | if (mask == 0) { |
| 1329 | LOG_ERROR(Kernel_SVC, "Mask is 0"); | ||
| 1259 | return ERR_INVALID_COMBINATION; | 1330 | return ERR_INVALID_COMBINATION; |
| 1260 | } | 1331 | } |
| 1261 | 1332 | ||
| @@ -1265,11 +1336,13 @@ static ResultCode SetThreadCoreMask(Handle thread_handle, u32 core, u64 mask) { | |||
| 1265 | if (core == OnlyChangeMask) { | 1336 | if (core == OnlyChangeMask) { |
| 1266 | core = thread->GetIdealCore(); | 1337 | core = thread->GetIdealCore(); |
| 1267 | } else if (core >= Core::NUM_CPU_CORES && core != static_cast<u32>(-1)) { | 1338 | } else if (core >= Core::NUM_CPU_CORES && core != static_cast<u32>(-1)) { |
| 1339 | LOG_ERROR(Kernel_SVC, "Invalid processor ID specified"); | ||
| 1268 | return ERR_INVALID_PROCESSOR_ID; | 1340 | return ERR_INVALID_PROCESSOR_ID; |
| 1269 | } | 1341 | } |
| 1270 | 1342 | ||
| 1271 | // Error out if the input core isn't enabled in the input mask. | 1343 | // Error out if the input core isn't enabled in the input mask. |
| 1272 | if (core < Core::NUM_CPU_CORES && (mask & (1ull << core)) == 0) { | 1344 | if (core < Core::NUM_CPU_CORES && (mask & (1ull << core)) == 0) { |
| 1345 | LOG_ERROR(Kernel_SVC, "Invalid core and mask"); | ||
| 1273 | return ERR_INVALID_COMBINATION; | 1346 | return ERR_INVALID_COMBINATION; |
| 1274 | } | 1347 | } |
| 1275 | 1348 | ||
| @@ -1286,17 +1359,20 @@ static ResultCode CreateSharedMemory(Handle* handle, u64 size, u32 local_permiss | |||
| 1286 | // Size must be a multiple of 4KB and be less than or equal to | 1359 | // Size must be a multiple of 4KB and be less than or equal to |
| 1287 | // approx. 8 GB (actually (1GB - 512B) * 8) | 1360 | // approx. 8 GB (actually (1GB - 512B) * 8) |
| 1288 | if (size == 0 || (size & 0xFFFFFFFE00000FFF) != 0) { | 1361 | if (size == 0 || (size & 0xFFFFFFFE00000FFF) != 0) { |
| 1362 | LOG_ERROR(Kernel_SVC, "Invalid size"); | ||
| 1289 | return ERR_INVALID_SIZE; | 1363 | return ERR_INVALID_SIZE; |
| 1290 | } | 1364 | } |
| 1291 | 1365 | ||
| 1292 | const auto local_perms = static_cast<MemoryPermission>(local_permissions); | 1366 | const auto local_perms = static_cast<MemoryPermission>(local_permissions); |
| 1293 | if (local_perms != MemoryPermission::Read && local_perms != MemoryPermission::ReadWrite) { | 1367 | if (local_perms != MemoryPermission::Read && local_perms != MemoryPermission::ReadWrite) { |
| 1368 | LOG_ERROR(Kernel_SVC, "Invalid memory permissions"); | ||
| 1294 | return ERR_INVALID_MEMORY_PERMISSIONS; | 1369 | return ERR_INVALID_MEMORY_PERMISSIONS; |
| 1295 | } | 1370 | } |
| 1296 | 1371 | ||
| 1297 | const auto remote_perms = static_cast<MemoryPermission>(remote_permissions); | 1372 | const auto remote_perms = static_cast<MemoryPermission>(remote_permissions); |
| 1298 | if (remote_perms != MemoryPermission::Read && remote_perms != MemoryPermission::ReadWrite && | 1373 | if (remote_perms != MemoryPermission::Read && remote_perms != MemoryPermission::ReadWrite && |
| 1299 | remote_perms != MemoryPermission::DontCare) { | 1374 | remote_perms != MemoryPermission::DontCare) { |
| 1375 | LOG_ERROR(Kernel_SVC, "Invalid memory permissions"); | ||
| 1300 | return ERR_INVALID_MEMORY_PERMISSIONS; | 1376 | return ERR_INVALID_MEMORY_PERMISSIONS; |
| 1301 | } | 1377 | } |
| 1302 | 1378 | ||
| @@ -1316,6 +1392,7 @@ static ResultCode ClearEvent(Handle handle) { | |||
| 1316 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); | 1392 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); |
| 1317 | SharedPtr<Event> evt = handle_table.Get<Event>(handle); | 1393 | SharedPtr<Event> evt = handle_table.Get<Event>(handle); |
| 1318 | if (evt == nullptr) { | 1394 | if (evt == nullptr) { |
| 1395 | LOG_ERROR(Kernel_SVC, "Invalid event handle"); | ||
| 1319 | return ERR_INVALID_HANDLE; | 1396 | return ERR_INVALID_HANDLE; |
| 1320 | } | 1397 | } |
| 1321 | 1398 | ||
| @@ -1334,11 +1411,13 @@ static ResultCode GetProcessInfo(u64* out, Handle process_handle, u32 type) { | |||
| 1334 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); | 1411 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); |
| 1335 | const auto process = handle_table.Get<Process>(process_handle); | 1412 | const auto process = handle_table.Get<Process>(process_handle); |
| 1336 | if (!process) { | 1413 | if (!process) { |
| 1414 | LOG_ERROR(Kernel_SVC, "Invalid process handle"); | ||
| 1337 | return ERR_INVALID_HANDLE; | 1415 | return ERR_INVALID_HANDLE; |
| 1338 | } | 1416 | } |
| 1339 | 1417 | ||
| 1340 | const auto info_type = static_cast<InfoType>(type); | 1418 | const auto info_type = static_cast<InfoType>(type); |
| 1341 | if (info_type != InfoType::Status) { | 1419 | if (info_type != InfoType::Status) { |
| 1420 | LOG_ERROR(Kernel_SVC, "Info type is not status"); | ||
| 1342 | return ERR_INVALID_ENUM_VALUE; | 1421 | return ERR_INVALID_ENUM_VALUE; |
| 1343 | } | 1422 | } |
| 1344 | 1423 | ||
diff --git a/src/core/hle/service/acc/acc.cpp b/src/core/hle/service/acc/acc.cpp index c629f9357..caabe5849 100644 --- a/src/core/hle/service/acc/acc.cpp +++ b/src/core/hle/service/acc/acc.cpp | |||
| @@ -216,10 +216,11 @@ void Module::Interface::GetLastOpenedUser(Kernel::HLERequestContext& ctx) { | |||
| 216 | void Module::Interface::GetProfile(Kernel::HLERequestContext& ctx) { | 216 | void Module::Interface::GetProfile(Kernel::HLERequestContext& ctx) { |
| 217 | IPC::RequestParser rp{ctx}; | 217 | IPC::RequestParser rp{ctx}; |
| 218 | UUID user_id = rp.PopRaw<UUID>(); | 218 | UUID user_id = rp.PopRaw<UUID>(); |
| 219 | LOG_DEBUG(Service_ACC, "called user_id={}", user_id.Format()); | ||
| 220 | |||
| 219 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 221 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 220 | rb.Push(RESULT_SUCCESS); | 222 | rb.Push(RESULT_SUCCESS); |
| 221 | rb.PushIpcInterface<IProfile>(user_id, *profile_manager); | 223 | rb.PushIpcInterface<IProfile>(user_id, *profile_manager); |
| 222 | LOG_DEBUG(Service_ACC, "called user_id={}", user_id.Format()); | ||
| 223 | } | 224 | } |
| 224 | 225 | ||
| 225 | void Module::Interface::IsUserRegistrationRequestPermitted(Kernel::HLERequestContext& ctx) { | 226 | void Module::Interface::IsUserRegistrationRequestPermitted(Kernel::HLERequestContext& ctx) { |
| @@ -236,10 +237,10 @@ void Module::Interface::InitializeApplicationInfo(Kernel::HLERequestContext& ctx | |||
| 236 | } | 237 | } |
| 237 | 238 | ||
| 238 | void Module::Interface::GetBaasAccountManagerForApplication(Kernel::HLERequestContext& ctx) { | 239 | void Module::Interface::GetBaasAccountManagerForApplication(Kernel::HLERequestContext& ctx) { |
| 240 | LOG_DEBUG(Service_ACC, "called"); | ||
| 239 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 241 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 240 | rb.Push(RESULT_SUCCESS); | 242 | rb.Push(RESULT_SUCCESS); |
| 241 | rb.PushIpcInterface<IManagerForApplication>(); | 243 | rb.PushIpcInterface<IManagerForApplication>(); |
| 242 | LOG_DEBUG(Service_ACC, "called"); | ||
| 243 | } | 244 | } |
| 244 | 245 | ||
| 245 | void Module::Interface::TrySelectUserWithoutInteraction(Kernel::HLERequestContext& ctx) { | 246 | void Module::Interface::TrySelectUserWithoutInteraction(Kernel::HLERequestContext& ctx) { |
diff --git a/src/core/hle/service/am/am.cpp b/src/core/hle/service/am/am.cpp index 4f17b52f9..0bd52b602 100644 --- a/src/core/hle/service/am/am.cpp +++ b/src/core/hle/service/am/am.cpp | |||
| @@ -217,6 +217,7 @@ ISelfController::~ISelfController() = default; | |||
| 217 | void ISelfController::SetFocusHandlingMode(Kernel::HLERequestContext& ctx) { | 217 | void ISelfController::SetFocusHandlingMode(Kernel::HLERequestContext& ctx) { |
| 218 | // Takes 3 input u8s with each field located immediately after the previous | 218 | // Takes 3 input u8s with each field located immediately after the previous |
| 219 | // u8, these are bool flags. No output. | 219 | // u8, these are bool flags. No output. |
| 220 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 220 | 221 | ||
| 221 | IPC::RequestParser rp{ctx}; | 222 | IPC::RequestParser rp{ctx}; |
| 222 | 223 | ||
| @@ -229,44 +230,40 @@ void ISelfController::SetFocusHandlingMode(Kernel::HLERequestContext& ctx) { | |||
| 229 | 230 | ||
| 230 | IPC::ResponseBuilder rb{ctx, 2}; | 231 | IPC::ResponseBuilder rb{ctx, 2}; |
| 231 | rb.Push(RESULT_SUCCESS); | 232 | rb.Push(RESULT_SUCCESS); |
| 232 | |||
| 233 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 234 | } | 233 | } |
| 235 | 234 | ||
| 236 | void ISelfController::SetRestartMessageEnabled(Kernel::HLERequestContext& ctx) { | 235 | void ISelfController::SetRestartMessageEnabled(Kernel::HLERequestContext& ctx) { |
| 236 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 237 | |||
| 237 | IPC::ResponseBuilder rb{ctx, 2}; | 238 | IPC::ResponseBuilder rb{ctx, 2}; |
| 238 | rb.Push(RESULT_SUCCESS); | 239 | rb.Push(RESULT_SUCCESS); |
| 239 | |||
| 240 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 241 | } | 240 | } |
| 242 | 241 | ||
| 243 | void ISelfController::SetPerformanceModeChangedNotification(Kernel::HLERequestContext& ctx) { | 242 | void ISelfController::SetPerformanceModeChangedNotification(Kernel::HLERequestContext& ctx) { |
| 244 | IPC::RequestParser rp{ctx}; | 243 | IPC::RequestParser rp{ctx}; |
| 245 | 244 | ||
| 246 | bool flag = rp.Pop<bool>(); | 245 | bool flag = rp.Pop<bool>(); |
| 246 | LOG_WARNING(Service_AM, "(STUBBED) called flag={}", flag); | ||
| 247 | 247 | ||
| 248 | IPC::ResponseBuilder rb{ctx, 2}; | 248 | IPC::ResponseBuilder rb{ctx, 2}; |
| 249 | rb.Push(RESULT_SUCCESS); | 249 | rb.Push(RESULT_SUCCESS); |
| 250 | |||
| 251 | LOG_WARNING(Service_AM, "(STUBBED) called flag={}", flag); | ||
| 252 | } | 250 | } |
| 253 | 251 | ||
| 254 | void ISelfController::SetScreenShotPermission(Kernel::HLERequestContext& ctx) { | 252 | void ISelfController::SetScreenShotPermission(Kernel::HLERequestContext& ctx) { |
| 253 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 254 | |||
| 255 | IPC::ResponseBuilder rb{ctx, 2}; | 255 | IPC::ResponseBuilder rb{ctx, 2}; |
| 256 | rb.Push(RESULT_SUCCESS); | 256 | rb.Push(RESULT_SUCCESS); |
| 257 | |||
| 258 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 259 | } | 257 | } |
| 260 | 258 | ||
| 261 | void ISelfController::SetOperationModeChangedNotification(Kernel::HLERequestContext& ctx) { | 259 | void ISelfController::SetOperationModeChangedNotification(Kernel::HLERequestContext& ctx) { |
| 262 | IPC::RequestParser rp{ctx}; | 260 | IPC::RequestParser rp{ctx}; |
| 263 | 261 | ||
| 264 | bool flag = rp.Pop<bool>(); | 262 | bool flag = rp.Pop<bool>(); |
| 263 | LOG_WARNING(Service_AM, "(STUBBED) called flag={}", flag); | ||
| 265 | 264 | ||
| 266 | IPC::ResponseBuilder rb{ctx, 2}; | 265 | IPC::ResponseBuilder rb{ctx, 2}; |
| 267 | rb.Push(RESULT_SUCCESS); | 266 | rb.Push(RESULT_SUCCESS); |
| 268 | |||
| 269 | LOG_WARNING(Service_AM, "(STUBBED) called flag={}", flag); | ||
| 270 | } | 267 | } |
| 271 | 268 | ||
| 272 | void ISelfController::SetOutOfFocusSuspendingEnabled(Kernel::HLERequestContext& ctx) { | 269 | void ISelfController::SetOutOfFocusSuspendingEnabled(Kernel::HLERequestContext& ctx) { |
| @@ -275,45 +272,45 @@ void ISelfController::SetOutOfFocusSuspendingEnabled(Kernel::HLERequestContext& | |||
| 275 | IPC::RequestParser rp{ctx}; | 272 | IPC::RequestParser rp{ctx}; |
| 276 | 273 | ||
| 277 | bool enabled = rp.Pop<bool>(); | 274 | bool enabled = rp.Pop<bool>(); |
| 275 | LOG_WARNING(Service_AM, "(STUBBED) called enabled={}", enabled); | ||
| 278 | 276 | ||
| 279 | IPC::ResponseBuilder rb{ctx, 2}; | 277 | IPC::ResponseBuilder rb{ctx, 2}; |
| 280 | rb.Push(RESULT_SUCCESS); | 278 | rb.Push(RESULT_SUCCESS); |
| 281 | |||
| 282 | LOG_WARNING(Service_AM, "(STUBBED) called enabled={}", enabled); | ||
| 283 | } | 279 | } |
| 284 | 280 | ||
| 285 | void ISelfController::LockExit(Kernel::HLERequestContext& ctx) { | 281 | void ISelfController::LockExit(Kernel::HLERequestContext& ctx) { |
| 282 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 283 | |||
| 286 | IPC::ResponseBuilder rb{ctx, 2}; | 284 | IPC::ResponseBuilder rb{ctx, 2}; |
| 287 | rb.Push(RESULT_SUCCESS); | 285 | rb.Push(RESULT_SUCCESS); |
| 288 | |||
| 289 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 290 | } | 286 | } |
| 291 | 287 | ||
| 292 | void ISelfController::UnlockExit(Kernel::HLERequestContext& ctx) { | 288 | void ISelfController::UnlockExit(Kernel::HLERequestContext& ctx) { |
| 289 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 290 | |||
| 293 | IPC::ResponseBuilder rb{ctx, 2}; | 291 | IPC::ResponseBuilder rb{ctx, 2}; |
| 294 | rb.Push(RESULT_SUCCESS); | 292 | rb.Push(RESULT_SUCCESS); |
| 295 | |||
| 296 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 297 | } | 293 | } |
| 298 | 294 | ||
| 299 | void ISelfController::GetLibraryAppletLaunchableEvent(Kernel::HLERequestContext& ctx) { | 295 | void ISelfController::GetLibraryAppletLaunchableEvent(Kernel::HLERequestContext& ctx) { |
| 296 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 297 | |||
| 300 | launchable_event->Signal(); | 298 | launchable_event->Signal(); |
| 301 | 299 | ||
| 302 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 300 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 303 | rb.Push(RESULT_SUCCESS); | 301 | rb.Push(RESULT_SUCCESS); |
| 304 | rb.PushCopyObjects(launchable_event); | 302 | rb.PushCopyObjects(launchable_event); |
| 305 | |||
| 306 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 307 | } | 303 | } |
| 308 | 304 | ||
| 309 | void ISelfController::SetScreenShotImageOrientation(Kernel::HLERequestContext& ctx) { | 305 | void ISelfController::SetScreenShotImageOrientation(Kernel::HLERequestContext& ctx) { |
| 306 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 307 | |||
| 310 | IPC::ResponseBuilder rb{ctx, 2}; | 308 | IPC::ResponseBuilder rb{ctx, 2}; |
| 311 | rb.Push(RESULT_SUCCESS); | 309 | rb.Push(RESULT_SUCCESS); |
| 312 | |||
| 313 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 314 | } | 310 | } |
| 315 | 311 | ||
| 316 | void ISelfController::CreateManagedDisplayLayer(Kernel::HLERequestContext& ctx) { | 312 | void ISelfController::CreateManagedDisplayLayer(Kernel::HLERequestContext& ctx) { |
| 313 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 317 | // TODO(Subv): Find out how AM determines the display to use, for now just | 314 | // TODO(Subv): Find out how AM determines the display to use, for now just |
| 318 | // create the layer in the Default display. | 315 | // create the layer in the Default display. |
| 319 | u64 display_id = nvflinger->OpenDisplay("Default"); | 316 | u64 display_id = nvflinger->OpenDisplay("Default"); |
| @@ -322,32 +319,31 @@ void ISelfController::CreateManagedDisplayLayer(Kernel::HLERequestContext& ctx) | |||
| 322 | IPC::ResponseBuilder rb{ctx, 4}; | 319 | IPC::ResponseBuilder rb{ctx, 4}; |
| 323 | rb.Push(RESULT_SUCCESS); | 320 | rb.Push(RESULT_SUCCESS); |
| 324 | rb.Push(layer_id); | 321 | rb.Push(layer_id); |
| 325 | |||
| 326 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 327 | } | 322 | } |
| 328 | 323 | ||
| 329 | void ISelfController::SetHandlesRequestToDisplay(Kernel::HLERequestContext& ctx) { | 324 | void ISelfController::SetHandlesRequestToDisplay(Kernel::HLERequestContext& ctx) { |
| 325 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 326 | |||
| 330 | IPC::ResponseBuilder rb{ctx, 2}; | 327 | IPC::ResponseBuilder rb{ctx, 2}; |
| 331 | rb.Push(RESULT_SUCCESS); | 328 | rb.Push(RESULT_SUCCESS); |
| 332 | |||
| 333 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 334 | } | 329 | } |
| 335 | 330 | ||
| 336 | void ISelfController::SetIdleTimeDetectionExtension(Kernel::HLERequestContext& ctx) { | 331 | void ISelfController::SetIdleTimeDetectionExtension(Kernel::HLERequestContext& ctx) { |
| 337 | IPC::RequestParser rp{ctx}; | 332 | IPC::RequestParser rp{ctx}; |
| 338 | idle_time_detection_extension = rp.Pop<u32>(); | 333 | idle_time_detection_extension = rp.Pop<u32>(); |
| 334 | LOG_WARNING(Service_AM, "(STUBBED) called idle_time_detection_extension={}", | ||
| 335 | idle_time_detection_extension); | ||
| 336 | |||
| 339 | IPC::ResponseBuilder rb{ctx, 2}; | 337 | IPC::ResponseBuilder rb{ctx, 2}; |
| 340 | rb.Push(RESULT_SUCCESS); | 338 | rb.Push(RESULT_SUCCESS); |
| 341 | |||
| 342 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 343 | } | 339 | } |
| 344 | 340 | ||
| 345 | void ISelfController::GetIdleTimeDetectionExtension(Kernel::HLERequestContext& ctx) { | 341 | void ISelfController::GetIdleTimeDetectionExtension(Kernel::HLERequestContext& ctx) { |
| 342 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 343 | |||
| 346 | IPC::ResponseBuilder rb{ctx, 3}; | 344 | IPC::ResponseBuilder rb{ctx, 3}; |
| 347 | rb.Push(RESULT_SUCCESS); | 345 | rb.Push(RESULT_SUCCESS); |
| 348 | rb.Push<u32>(idle_time_detection_extension); | 346 | rb.Push<u32>(idle_time_detection_extension); |
| 349 | |||
| 350 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 351 | } | 347 | } |
| 352 | 348 | ||
| 353 | AppletMessageQueue::AppletMessageQueue() { | 349 | AppletMessageQueue::AppletMessageQueue() { |
| @@ -438,47 +434,49 @@ ICommonStateGetter::ICommonStateGetter(std::shared_ptr<AppletMessageQueue> msg_q | |||
| 438 | ICommonStateGetter::~ICommonStateGetter() = default; | 434 | ICommonStateGetter::~ICommonStateGetter() = default; |
| 439 | 435 | ||
| 440 | void ICommonStateGetter::GetBootMode(Kernel::HLERequestContext& ctx) { | 436 | void ICommonStateGetter::GetBootMode(Kernel::HLERequestContext& ctx) { |
| 437 | LOG_DEBUG(Service_AM, "called"); | ||
| 438 | |||
| 441 | IPC::ResponseBuilder rb{ctx, 3}; | 439 | IPC::ResponseBuilder rb{ctx, 3}; |
| 442 | rb.Push(RESULT_SUCCESS); | 440 | rb.Push(RESULT_SUCCESS); |
| 443 | 441 | ||
| 444 | rb.Push<u8>(static_cast<u8>(Service::PM::SystemBootMode::Normal)); // Normal boot mode | 442 | rb.Push<u8>(static_cast<u8>(Service::PM::SystemBootMode::Normal)); // Normal boot mode |
| 445 | |||
| 446 | LOG_DEBUG(Service_AM, "called"); | ||
| 447 | } | 443 | } |
| 448 | 444 | ||
| 449 | void ICommonStateGetter::GetEventHandle(Kernel::HLERequestContext& ctx) { | 445 | void ICommonStateGetter::GetEventHandle(Kernel::HLERequestContext& ctx) { |
| 446 | LOG_DEBUG(Service_AM, "called"); | ||
| 447 | |||
| 450 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 448 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 451 | rb.Push(RESULT_SUCCESS); | 449 | rb.Push(RESULT_SUCCESS); |
| 452 | rb.PushCopyObjects(msg_queue->GetMesssageRecieveEvent()); | 450 | rb.PushCopyObjects(msg_queue->GetMesssageRecieveEvent()); |
| 453 | |||
| 454 | LOG_DEBUG(Service_AM, "called"); | ||
| 455 | } | 451 | } |
| 456 | 452 | ||
| 457 | void ICommonStateGetter::ReceiveMessage(Kernel::HLERequestContext& ctx) { | 453 | void ICommonStateGetter::ReceiveMessage(Kernel::HLERequestContext& ctx) { |
| 454 | LOG_DEBUG(Service_AM, "called"); | ||
| 455 | |||
| 458 | IPC::ResponseBuilder rb{ctx, 3}; | 456 | IPC::ResponseBuilder rb{ctx, 3}; |
| 459 | rb.Push(RESULT_SUCCESS); | 457 | rb.Push(RESULT_SUCCESS); |
| 460 | rb.PushEnum<AppletMessageQueue::AppletMessage>(msg_queue->PopMessage()); | 458 | rb.PushEnum<AppletMessageQueue::AppletMessage>(msg_queue->PopMessage()); |
| 461 | |||
| 462 | LOG_DEBUG(Service_AM, "called"); | ||
| 463 | } | 459 | } |
| 464 | 460 | ||
| 465 | void ICommonStateGetter::GetCurrentFocusState(Kernel::HLERequestContext& ctx) { | 461 | void ICommonStateGetter::GetCurrentFocusState(Kernel::HLERequestContext& ctx) { |
| 462 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 463 | |||
| 466 | IPC::ResponseBuilder rb{ctx, 3}; | 464 | IPC::ResponseBuilder rb{ctx, 3}; |
| 467 | rb.Push(RESULT_SUCCESS); | 465 | rb.Push(RESULT_SUCCESS); |
| 468 | rb.Push(static_cast<u8>(FocusState::InFocus)); | 466 | rb.Push(static_cast<u8>(FocusState::InFocus)); |
| 469 | |||
| 470 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 471 | } | 467 | } |
| 472 | 468 | ||
| 473 | void ICommonStateGetter::GetDefaultDisplayResolutionChangeEvent(Kernel::HLERequestContext& ctx) { | 469 | void ICommonStateGetter::GetDefaultDisplayResolutionChangeEvent(Kernel::HLERequestContext& ctx) { |
| 470 | LOG_DEBUG(Service_AM, "called"); | ||
| 471 | |||
| 474 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 472 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 475 | rb.Push(RESULT_SUCCESS); | 473 | rb.Push(RESULT_SUCCESS); |
| 476 | rb.PushCopyObjects(msg_queue->GetOperationModeChangedEvent()); | 474 | rb.PushCopyObjects(msg_queue->GetOperationModeChangedEvent()); |
| 477 | |||
| 478 | LOG_DEBUG(Service_AM, "called"); | ||
| 479 | } | 475 | } |
| 480 | 476 | ||
| 481 | void ICommonStateGetter::GetDefaultDisplayResolution(Kernel::HLERequestContext& ctx) { | 477 | void ICommonStateGetter::GetDefaultDisplayResolution(Kernel::HLERequestContext& ctx) { |
| 478 | LOG_DEBUG(Service_AM, "called"); | ||
| 479 | |||
| 482 | IPC::ResponseBuilder rb{ctx, 4}; | 480 | IPC::ResponseBuilder rb{ctx, 4}; |
| 483 | rb.Push(RESULT_SUCCESS); | 481 | rb.Push(RESULT_SUCCESS); |
| 484 | 482 | ||
| @@ -493,8 +491,6 @@ void ICommonStateGetter::GetDefaultDisplayResolution(Kernel::HLERequestContext& | |||
| 493 | rb.Push(static_cast<u32>(Service::VI::DisplayResolution::UndockedHeight) * | 491 | rb.Push(static_cast<u32>(Service::VI::DisplayResolution::UndockedHeight) * |
| 494 | static_cast<u32>(Settings::values.resolution_factor)); | 492 | static_cast<u32>(Settings::values.resolution_factor)); |
| 495 | } | 493 | } |
| 496 | |||
| 497 | LOG_DEBUG(Service_AM, "called"); | ||
| 498 | } | 494 | } |
| 499 | 495 | ||
| 500 | IStorage::IStorage(std::vector<u8> buffer) | 496 | IStorage::IStorage(std::vector<u8> buffer) |
| @@ -517,21 +513,21 @@ const std::vector<u8>& IStorage::GetData() const { | |||
| 517 | 513 | ||
| 518 | void ICommonStateGetter::GetOperationMode(Kernel::HLERequestContext& ctx) { | 514 | void ICommonStateGetter::GetOperationMode(Kernel::HLERequestContext& ctx) { |
| 519 | const bool use_docked_mode{Settings::values.use_docked_mode}; | 515 | const bool use_docked_mode{Settings::values.use_docked_mode}; |
| 516 | LOG_DEBUG(Service_AM, "called, use_docked_mode={}", use_docked_mode); | ||
| 517 | |||
| 520 | IPC::ResponseBuilder rb{ctx, 3}; | 518 | IPC::ResponseBuilder rb{ctx, 3}; |
| 521 | rb.Push(RESULT_SUCCESS); | 519 | rb.Push(RESULT_SUCCESS); |
| 522 | rb.Push(static_cast<u8>(use_docked_mode ? OperationMode::Docked : OperationMode::Handheld)); | 520 | rb.Push(static_cast<u8>(use_docked_mode ? OperationMode::Docked : OperationMode::Handheld)); |
| 523 | |||
| 524 | LOG_DEBUG(Service_AM, "called"); | ||
| 525 | } | 521 | } |
| 526 | 522 | ||
| 527 | void ICommonStateGetter::GetPerformanceMode(Kernel::HLERequestContext& ctx) { | 523 | void ICommonStateGetter::GetPerformanceMode(Kernel::HLERequestContext& ctx) { |
| 528 | const bool use_docked_mode{Settings::values.use_docked_mode}; | 524 | const bool use_docked_mode{Settings::values.use_docked_mode}; |
| 525 | LOG_DEBUG(Service_AM, "called, use_docked_mode={}", use_docked_mode); | ||
| 526 | |||
| 529 | IPC::ResponseBuilder rb{ctx, 3}; | 527 | IPC::ResponseBuilder rb{ctx, 3}; |
| 530 | rb.Push(RESULT_SUCCESS); | 528 | rb.Push(RESULT_SUCCESS); |
| 531 | rb.Push(static_cast<u32>(use_docked_mode ? APM::PerformanceMode::Docked | 529 | rb.Push(static_cast<u32>(use_docked_mode ? APM::PerformanceMode::Docked |
| 532 | : APM::PerformanceMode::Handheld)); | 530 | : APM::PerformanceMode::Handheld)); |
| 533 | |||
| 534 | LOG_DEBUG(Service_AM, "called"); | ||
| 535 | } | 531 | } |
| 536 | 532 | ||
| 537 | class ILibraryAppletAccessor final : public ServiceFramework<ILibraryAppletAccessor> { | 533 | class ILibraryAppletAccessor final : public ServiceFramework<ILibraryAppletAccessor> { |
| @@ -566,32 +562,34 @@ public: | |||
| 566 | 562 | ||
| 567 | private: | 563 | private: |
| 568 | void GetAppletStateChangedEvent(Kernel::HLERequestContext& ctx) { | 564 | void GetAppletStateChangedEvent(Kernel::HLERequestContext& ctx) { |
| 565 | LOG_DEBUG(Service_AM, "called"); | ||
| 566 | |||
| 569 | const auto event = applet->GetBroker().GetStateChangedEvent(); | 567 | const auto event = applet->GetBroker().GetStateChangedEvent(); |
| 570 | event->Signal(); | 568 | event->Signal(); |
| 571 | 569 | ||
| 572 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 570 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 573 | rb.Push(RESULT_SUCCESS); | 571 | rb.Push(RESULT_SUCCESS); |
| 574 | rb.PushCopyObjects(event); | 572 | rb.PushCopyObjects(event); |
| 575 | |||
| 576 | LOG_DEBUG(Service_AM, "called"); | ||
| 577 | } | 573 | } |
| 578 | 574 | ||
| 579 | void IsCompleted(Kernel::HLERequestContext& ctx) { | 575 | void IsCompleted(Kernel::HLERequestContext& ctx) { |
| 576 | LOG_DEBUG(Service_AM, "called"); | ||
| 577 | |||
| 580 | IPC::ResponseBuilder rb{ctx, 3}; | 578 | IPC::ResponseBuilder rb{ctx, 3}; |
| 581 | rb.Push(RESULT_SUCCESS); | 579 | rb.Push(RESULT_SUCCESS); |
| 582 | rb.Push<u32>(applet->TransactionComplete()); | 580 | rb.Push<u32>(applet->TransactionComplete()); |
| 583 | |||
| 584 | LOG_DEBUG(Service_AM, "called"); | ||
| 585 | } | 581 | } |
| 586 | 582 | ||
| 587 | void GetResult(Kernel::HLERequestContext& ctx) { | 583 | void GetResult(Kernel::HLERequestContext& ctx) { |
| 584 | LOG_DEBUG(Service_AM, "called"); | ||
| 585 | |||
| 588 | IPC::ResponseBuilder rb{ctx, 2}; | 586 | IPC::ResponseBuilder rb{ctx, 2}; |
| 589 | rb.Push(applet->GetStatus()); | 587 | rb.Push(applet->GetStatus()); |
| 590 | |||
| 591 | LOG_DEBUG(Service_AM, "called"); | ||
| 592 | } | 588 | } |
| 593 | 589 | ||
| 594 | void Start(Kernel::HLERequestContext& ctx) { | 590 | void Start(Kernel::HLERequestContext& ctx) { |
| 591 | LOG_DEBUG(Service_AM, "called"); | ||
| 592 | |||
| 595 | ASSERT(applet != nullptr); | 593 | ASSERT(applet != nullptr); |
| 596 | 594 | ||
| 597 | applet->Initialize(); | 595 | applet->Initialize(); |
| @@ -599,36 +597,38 @@ private: | |||
| 599 | 597 | ||
| 600 | IPC::ResponseBuilder rb{ctx, 2}; | 598 | IPC::ResponseBuilder rb{ctx, 2}; |
| 601 | rb.Push(RESULT_SUCCESS); | 599 | rb.Push(RESULT_SUCCESS); |
| 602 | |||
| 603 | LOG_DEBUG(Service_AM, "called"); | ||
| 604 | } | 600 | } |
| 605 | 601 | ||
| 606 | void PushInData(Kernel::HLERequestContext& ctx) { | 602 | void PushInData(Kernel::HLERequestContext& ctx) { |
| 603 | LOG_DEBUG(Service_AM, "called"); | ||
| 604 | |||
| 607 | IPC::RequestParser rp{ctx}; | 605 | IPC::RequestParser rp{ctx}; |
| 608 | applet->GetBroker().PushNormalDataFromGame(*rp.PopIpcInterface<IStorage>()); | 606 | applet->GetBroker().PushNormalDataFromGame(*rp.PopIpcInterface<IStorage>()); |
| 609 | 607 | ||
| 610 | IPC::ResponseBuilder rb{ctx, 2}; | 608 | IPC::ResponseBuilder rb{ctx, 2}; |
| 611 | rb.Push(RESULT_SUCCESS); | 609 | rb.Push(RESULT_SUCCESS); |
| 612 | |||
| 613 | LOG_DEBUG(Service_AM, "called"); | ||
| 614 | } | 610 | } |
| 615 | 611 | ||
| 616 | void PopOutData(Kernel::HLERequestContext& ctx) { | 612 | void PopOutData(Kernel::HLERequestContext& ctx) { |
| 613 | LOG_DEBUG(Service_AM, "called"); | ||
| 614 | |||
| 617 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 615 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 618 | 616 | ||
| 619 | const auto storage = applet->GetBroker().PopNormalDataToGame(); | 617 | const auto storage = applet->GetBroker().PopNormalDataToGame(); |
| 620 | if (storage == nullptr) { | 618 | if (storage == nullptr) { |
| 619 | LOG_ERROR(Service_AM, "storage is a nullptr"); | ||
| 620 | |||
| 621 | rb.Push(ERR_NO_DATA_IN_CHANNEL); | 621 | rb.Push(ERR_NO_DATA_IN_CHANNEL); |
| 622 | return; | 622 | return; |
| 623 | } | 623 | } |
| 624 | 624 | ||
| 625 | rb.Push(RESULT_SUCCESS); | 625 | rb.Push(RESULT_SUCCESS); |
| 626 | rb.PushIpcInterface<IStorage>(std::move(*storage)); | 626 | rb.PushIpcInterface<IStorage>(std::move(*storage)); |
| 627 | |||
| 628 | LOG_DEBUG(Service_AM, "called"); | ||
| 629 | } | 627 | } |
| 630 | 628 | ||
| 631 | void PushInteractiveInData(Kernel::HLERequestContext& ctx) { | 629 | void PushInteractiveInData(Kernel::HLERequestContext& ctx) { |
| 630 | LOG_DEBUG(Service_AM, "called"); | ||
| 631 | |||
| 632 | IPC::RequestParser rp{ctx}; | 632 | IPC::RequestParser rp{ctx}; |
| 633 | applet->GetBroker().PushInteractiveDataFromGame(*rp.PopIpcInterface<IStorage>()); | 633 | applet->GetBroker().PushInteractiveDataFromGame(*rp.PopIpcInterface<IStorage>()); |
| 634 | 634 | ||
| @@ -638,51 +638,51 @@ private: | |||
| 638 | 638 | ||
| 639 | IPC::ResponseBuilder rb{ctx, 2}; | 639 | IPC::ResponseBuilder rb{ctx, 2}; |
| 640 | rb.Push(RESULT_SUCCESS); | 640 | rb.Push(RESULT_SUCCESS); |
| 641 | |||
| 642 | LOG_DEBUG(Service_AM, "called"); | ||
| 643 | } | 641 | } |
| 644 | 642 | ||
| 645 | void PopInteractiveOutData(Kernel::HLERequestContext& ctx) { | 643 | void PopInteractiveOutData(Kernel::HLERequestContext& ctx) { |
| 644 | LOG_DEBUG(Service_AM, "called"); | ||
| 645 | |||
| 646 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 646 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 647 | 647 | ||
| 648 | const auto storage = applet->GetBroker().PopInteractiveDataToGame(); | 648 | const auto storage = applet->GetBroker().PopInteractiveDataToGame(); |
| 649 | if (storage == nullptr) { | 649 | if (storage == nullptr) { |
| 650 | LOG_ERROR(Service_AM, "storage is a nullptr"); | ||
| 651 | |||
| 650 | rb.Push(ERR_NO_DATA_IN_CHANNEL); | 652 | rb.Push(ERR_NO_DATA_IN_CHANNEL); |
| 651 | return; | 653 | return; |
| 652 | } | 654 | } |
| 653 | 655 | ||
| 654 | rb.Push(RESULT_SUCCESS); | 656 | rb.Push(RESULT_SUCCESS); |
| 655 | rb.PushIpcInterface<IStorage>(std::move(*storage)); | 657 | rb.PushIpcInterface<IStorage>(std::move(*storage)); |
| 656 | |||
| 657 | LOG_DEBUG(Service_AM, "called"); | ||
| 658 | } | 658 | } |
| 659 | 659 | ||
| 660 | void GetPopOutDataEvent(Kernel::HLERequestContext& ctx) { | 660 | void GetPopOutDataEvent(Kernel::HLERequestContext& ctx) { |
| 661 | LOG_DEBUG(Service_AM, "called"); | ||
| 662 | |||
| 661 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 663 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 662 | rb.Push(RESULT_SUCCESS); | 664 | rb.Push(RESULT_SUCCESS); |
| 663 | rb.PushCopyObjects(applet->GetBroker().GetNormalDataEvent()); | 665 | rb.PushCopyObjects(applet->GetBroker().GetNormalDataEvent()); |
| 664 | |||
| 665 | LOG_DEBUG(Service_AM, "called"); | ||
| 666 | } | 666 | } |
| 667 | 667 | ||
| 668 | void GetPopInteractiveOutDataEvent(Kernel::HLERequestContext& ctx) { | 668 | void GetPopInteractiveOutDataEvent(Kernel::HLERequestContext& ctx) { |
| 669 | LOG_DEBUG(Service_AM, "called"); | ||
| 670 | |||
| 669 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 671 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 670 | rb.Push(RESULT_SUCCESS); | 672 | rb.Push(RESULT_SUCCESS); |
| 671 | rb.PushCopyObjects(applet->GetBroker().GetInteractiveDataEvent()); | 673 | rb.PushCopyObjects(applet->GetBroker().GetInteractiveDataEvent()); |
| 672 | |||
| 673 | LOG_DEBUG(Service_AM, "called"); | ||
| 674 | } | 674 | } |
| 675 | 675 | ||
| 676 | std::shared_ptr<Applets::Applet> applet; | 676 | std::shared_ptr<Applets::Applet> applet; |
| 677 | }; | 677 | }; |
| 678 | 678 | ||
| 679 | void IStorage::Open(Kernel::HLERequestContext& ctx) { | 679 | void IStorage::Open(Kernel::HLERequestContext& ctx) { |
| 680 | LOG_DEBUG(Service_AM, "called"); | ||
| 681 | |||
| 680 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 682 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 681 | 683 | ||
| 682 | rb.Push(RESULT_SUCCESS); | 684 | rb.Push(RESULT_SUCCESS); |
| 683 | rb.PushIpcInterface<IStorageAccessor>(*this); | 685 | rb.PushIpcInterface<IStorageAccessor>(*this); |
| 684 | |||
| 685 | LOG_DEBUG(Service_AM, "called"); | ||
| 686 | } | 686 | } |
| 687 | 687 | ||
| 688 | IStorageAccessor::IStorageAccessor(IStorage& storage) | 688 | IStorageAccessor::IStorageAccessor(IStorage& storage) |
| @@ -701,21 +701,25 @@ IStorageAccessor::IStorageAccessor(IStorage& storage) | |||
| 701 | IStorageAccessor::~IStorageAccessor() = default; | 701 | IStorageAccessor::~IStorageAccessor() = default; |
| 702 | 702 | ||
| 703 | void IStorageAccessor::GetSize(Kernel::HLERequestContext& ctx) { | 703 | void IStorageAccessor::GetSize(Kernel::HLERequestContext& ctx) { |
| 704 | LOG_DEBUG(Service_AM, "called"); | ||
| 705 | |||
| 704 | IPC::ResponseBuilder rb{ctx, 4}; | 706 | IPC::ResponseBuilder rb{ctx, 4}; |
| 705 | 707 | ||
| 706 | rb.Push(RESULT_SUCCESS); | 708 | rb.Push(RESULT_SUCCESS); |
| 707 | rb.Push(static_cast<u64>(backing.buffer.size())); | 709 | rb.Push(static_cast<u64>(backing.buffer.size())); |
| 708 | |||
| 709 | LOG_DEBUG(Service_AM, "called"); | ||
| 710 | } | 710 | } |
| 711 | 711 | ||
| 712 | void IStorageAccessor::Write(Kernel::HLERequestContext& ctx) { | 712 | void IStorageAccessor::Write(Kernel::HLERequestContext& ctx) { |
| 713 | IPC::RequestParser rp{ctx}; | 713 | IPC::RequestParser rp{ctx}; |
| 714 | 714 | ||
| 715 | const u64 offset{rp.Pop<u64>()}; | 715 | const u64 offset{rp.Pop<u64>()}; |
| 716 | LOG_DEBUG(Service_AM, "called, offset={}", offset); | ||
| 717 | |||
| 716 | const std::vector<u8> data{ctx.ReadBuffer()}; | 718 | const std::vector<u8> data{ctx.ReadBuffer()}; |
| 717 | 719 | ||
| 718 | if (data.size() > backing.buffer.size() - offset) { | 720 | if (data.size() > backing.buffer.size() - offset) { |
| 721 | LOG_ERROR(Service_AM, "offset is out of bounds"); | ||
| 722 | |||
| 719 | IPC::ResponseBuilder rb{ctx, 2}; | 723 | IPC::ResponseBuilder rb{ctx, 2}; |
| 720 | rb.Push(ERR_SIZE_OUT_OF_BOUNDS); | 724 | rb.Push(ERR_SIZE_OUT_OF_BOUNDS); |
| 721 | } | 725 | } |
| @@ -724,17 +728,19 @@ void IStorageAccessor::Write(Kernel::HLERequestContext& ctx) { | |||
| 724 | 728 | ||
| 725 | IPC::ResponseBuilder rb{ctx, 2}; | 729 | IPC::ResponseBuilder rb{ctx, 2}; |
| 726 | rb.Push(RESULT_SUCCESS); | 730 | rb.Push(RESULT_SUCCESS); |
| 727 | |||
| 728 | LOG_DEBUG(Service_AM, "called, offset={}", offset); | ||
| 729 | } | 731 | } |
| 730 | 732 | ||
| 731 | void IStorageAccessor::Read(Kernel::HLERequestContext& ctx) { | 733 | void IStorageAccessor::Read(Kernel::HLERequestContext& ctx) { |
| 732 | IPC::RequestParser rp{ctx}; | 734 | IPC::RequestParser rp{ctx}; |
| 733 | 735 | ||
| 734 | const u64 offset{rp.Pop<u64>()}; | 736 | const u64 offset{rp.Pop<u64>()}; |
| 737 | LOG_DEBUG(Service_AM, "called, offset={}", offset); | ||
| 738 | |||
| 735 | const std::size_t size{ctx.GetWriteBufferSize()}; | 739 | const std::size_t size{ctx.GetWriteBufferSize()}; |
| 736 | 740 | ||
| 737 | if (size > backing.buffer.size() - offset) { | 741 | if (size > backing.buffer.size() - offset) { |
| 742 | LOG_ERROR(Service_AM, "offset is out of bounds"); | ||
| 743 | |||
| 738 | IPC::ResponseBuilder rb{ctx, 2}; | 744 | IPC::ResponseBuilder rb{ctx, 2}; |
| 739 | rb.Push(ERR_SIZE_OUT_OF_BOUNDS); | 745 | rb.Push(ERR_SIZE_OUT_OF_BOUNDS); |
| 740 | } | 746 | } |
| @@ -743,8 +749,6 @@ void IStorageAccessor::Read(Kernel::HLERequestContext& ctx) { | |||
| 743 | 749 | ||
| 744 | IPC::ResponseBuilder rb{ctx, 2}; | 750 | IPC::ResponseBuilder rb{ctx, 2}; |
| 745 | rb.Push(RESULT_SUCCESS); | 751 | rb.Push(RESULT_SUCCESS); |
| 746 | |||
| 747 | LOG_DEBUG(Service_AM, "called, offset={}", offset); | ||
| 748 | } | 752 | } |
| 749 | 753 | ||
| 750 | ILibraryAppletCreator::ILibraryAppletCreator() : ServiceFramework("ILibraryAppletCreator") { | 754 | ILibraryAppletCreator::ILibraryAppletCreator() : ServiceFramework("ILibraryAppletCreator") { |
| @@ -783,6 +787,8 @@ void ILibraryAppletCreator::CreateLibraryApplet(Kernel::HLERequestContext& ctx) | |||
| 783 | const auto applet = GetAppletFromId(applet_id); | 787 | const auto applet = GetAppletFromId(applet_id); |
| 784 | 788 | ||
| 785 | if (applet == nullptr) { | 789 | if (applet == nullptr) { |
| 790 | LOG_ERROR(Service_AM, "Applet doesn't exist!"); | ||
| 791 | |||
| 786 | IPC::ResponseBuilder rb{ctx, 2}; | 792 | IPC::ResponseBuilder rb{ctx, 2}; |
| 787 | rb.Push(ResultCode(-1)); | 793 | rb.Push(ResultCode(-1)); |
| 788 | return; | 794 | return; |
| @@ -792,23 +798,23 @@ void ILibraryAppletCreator::CreateLibraryApplet(Kernel::HLERequestContext& ctx) | |||
| 792 | 798 | ||
| 793 | rb.Push(RESULT_SUCCESS); | 799 | rb.Push(RESULT_SUCCESS); |
| 794 | rb.PushIpcInterface<AM::ILibraryAppletAccessor>(applet); | 800 | rb.PushIpcInterface<AM::ILibraryAppletAccessor>(applet); |
| 795 | |||
| 796 | LOG_DEBUG(Service_AM, "called"); | ||
| 797 | } | 801 | } |
| 798 | 802 | ||
| 799 | void ILibraryAppletCreator::CreateStorage(Kernel::HLERequestContext& ctx) { | 803 | void ILibraryAppletCreator::CreateStorage(Kernel::HLERequestContext& ctx) { |
| 800 | IPC::RequestParser rp{ctx}; | 804 | IPC::RequestParser rp{ctx}; |
| 801 | const u64 size{rp.Pop<u64>()}; | 805 | const u64 size{rp.Pop<u64>()}; |
| 806 | LOG_DEBUG(Service_AM, "called, size={}", size); | ||
| 807 | |||
| 802 | std::vector<u8> buffer(size); | 808 | std::vector<u8> buffer(size); |
| 803 | 809 | ||
| 804 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 810 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 805 | rb.Push(RESULT_SUCCESS); | 811 | rb.Push(RESULT_SUCCESS); |
| 806 | rb.PushIpcInterface<AM::IStorage>(std::move(buffer)); | 812 | rb.PushIpcInterface<AM::IStorage>(std::move(buffer)); |
| 807 | |||
| 808 | LOG_DEBUG(Service_AM, "called, size={}", size); | ||
| 809 | } | 813 | } |
| 810 | 814 | ||
| 811 | void ILibraryAppletCreator::CreateTransferMemoryStorage(Kernel::HLERequestContext& ctx) { | 815 | void ILibraryAppletCreator::CreateTransferMemoryStorage(Kernel::HLERequestContext& ctx) { |
| 816 | LOG_DEBUG(Service_AM, "called"); | ||
| 817 | |||
| 812 | IPC::RequestParser rp{ctx}; | 818 | IPC::RequestParser rp{ctx}; |
| 813 | 819 | ||
| 814 | rp.SetCurrentOffset(3); | 820 | rp.SetCurrentOffset(3); |
| @@ -819,6 +825,7 @@ void ILibraryAppletCreator::CreateTransferMemoryStorage(Kernel::HLERequestContex | |||
| 819 | handle); | 825 | handle); |
| 820 | 826 | ||
| 821 | if (shared_mem == nullptr) { | 827 | if (shared_mem == nullptr) { |
| 828 | LOG_ERROR(Service_AM, "shared_mem is a nullpr"); | ||
| 822 | IPC::ResponseBuilder rb{ctx, 2}; | 829 | IPC::ResponseBuilder rb{ctx, 2}; |
| 823 | rb.Push(ResultCode(-1)); | 830 | rb.Push(ResultCode(-1)); |
| 824 | return; | 831 | return; |
| @@ -882,38 +889,45 @@ IApplicationFunctions::IApplicationFunctions() : ServiceFramework("IApplicationF | |||
| 882 | IApplicationFunctions::~IApplicationFunctions() = default; | 889 | IApplicationFunctions::~IApplicationFunctions() = default; |
| 883 | 890 | ||
| 884 | void IApplicationFunctions::EnableApplicationCrashReport(Kernel::HLERequestContext& ctx) { | 891 | void IApplicationFunctions::EnableApplicationCrashReport(Kernel::HLERequestContext& ctx) { |
| 892 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 893 | |||
| 885 | IPC::ResponseBuilder rb{ctx, 2}; | 894 | IPC::ResponseBuilder rb{ctx, 2}; |
| 886 | rb.Push(RESULT_SUCCESS); | 895 | rb.Push(RESULT_SUCCESS); |
| 887 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 888 | } | 896 | } |
| 889 | 897 | ||
| 890 | void IApplicationFunctions::BeginBlockingHomeButtonShortAndLongPressed( | 898 | void IApplicationFunctions::BeginBlockingHomeButtonShortAndLongPressed( |
| 891 | Kernel::HLERequestContext& ctx) { | 899 | Kernel::HLERequestContext& ctx) { |
| 900 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 901 | |||
| 892 | IPC::ResponseBuilder rb{ctx, 2}; | 902 | IPC::ResponseBuilder rb{ctx, 2}; |
| 893 | rb.Push(RESULT_SUCCESS); | 903 | rb.Push(RESULT_SUCCESS); |
| 894 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 895 | } | 904 | } |
| 896 | 905 | ||
| 897 | void IApplicationFunctions::EndBlockingHomeButtonShortAndLongPressed( | 906 | void IApplicationFunctions::EndBlockingHomeButtonShortAndLongPressed( |
| 898 | Kernel::HLERequestContext& ctx) { | 907 | Kernel::HLERequestContext& ctx) { |
| 908 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 909 | |||
| 899 | IPC::ResponseBuilder rb{ctx, 2}; | 910 | IPC::ResponseBuilder rb{ctx, 2}; |
| 900 | rb.Push(RESULT_SUCCESS); | 911 | rb.Push(RESULT_SUCCESS); |
| 901 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 902 | } | 912 | } |
| 903 | 913 | ||
| 904 | void IApplicationFunctions::BeginBlockingHomeButton(Kernel::HLERequestContext& ctx) { | 914 | void IApplicationFunctions::BeginBlockingHomeButton(Kernel::HLERequestContext& ctx) { |
| 915 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 916 | |||
| 905 | IPC::ResponseBuilder rb{ctx, 2}; | 917 | IPC::ResponseBuilder rb{ctx, 2}; |
| 906 | rb.Push(RESULT_SUCCESS); | 918 | rb.Push(RESULT_SUCCESS); |
| 907 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 908 | } | 919 | } |
| 909 | 920 | ||
| 910 | void IApplicationFunctions::EndBlockingHomeButton(Kernel::HLERequestContext& ctx) { | 921 | void IApplicationFunctions::EndBlockingHomeButton(Kernel::HLERequestContext& ctx) { |
| 922 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 923 | |||
| 911 | IPC::ResponseBuilder rb{ctx, 2}; | 924 | IPC::ResponseBuilder rb{ctx, 2}; |
| 912 | rb.Push(RESULT_SUCCESS); | 925 | rb.Push(RESULT_SUCCESS); |
| 913 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 914 | } | 926 | } |
| 915 | 927 | ||
| 916 | void IApplicationFunctions::PopLaunchParameter(Kernel::HLERequestContext& ctx) { | 928 | void IApplicationFunctions::PopLaunchParameter(Kernel::HLERequestContext& ctx) { |
| 929 | LOG_DEBUG(Service_AM, "called"); | ||
| 930 | |||
| 917 | LaunchParameters params{}; | 931 | LaunchParameters params{}; |
| 918 | 932 | ||
| 919 | params.magic = POP_LAUNCH_PARAMETER_MAGIC; | 933 | params.magic = POP_LAUNCH_PARAMETER_MAGIC; |
| @@ -932,21 +946,19 @@ void IApplicationFunctions::PopLaunchParameter(Kernel::HLERequestContext& ctx) { | |||
| 932 | std::memcpy(buffer.data(), ¶ms, buffer.size()); | 946 | std::memcpy(buffer.data(), ¶ms, buffer.size()); |
| 933 | 947 | ||
| 934 | rb.PushIpcInterface<AM::IStorage>(buffer); | 948 | rb.PushIpcInterface<AM::IStorage>(buffer); |
| 935 | |||
| 936 | LOG_DEBUG(Service_AM, "called"); | ||
| 937 | } | 949 | } |
| 938 | 950 | ||
| 939 | void IApplicationFunctions::CreateApplicationAndRequestToStartForQuest( | 951 | void IApplicationFunctions::CreateApplicationAndRequestToStartForQuest( |
| 940 | Kernel::HLERequestContext& ctx) { | 952 | Kernel::HLERequestContext& ctx) { |
| 953 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 954 | |||
| 941 | IPC::ResponseBuilder rb{ctx, 2}; | 955 | IPC::ResponseBuilder rb{ctx, 2}; |
| 942 | rb.Push(RESULT_SUCCESS); | 956 | rb.Push(RESULT_SUCCESS); |
| 943 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 944 | } | 957 | } |
| 945 | 958 | ||
| 946 | void IApplicationFunctions::EnsureSaveData(Kernel::HLERequestContext& ctx) { | 959 | void IApplicationFunctions::EnsureSaveData(Kernel::HLERequestContext& ctx) { |
| 947 | IPC::RequestParser rp{ctx}; | 960 | IPC::RequestParser rp{ctx}; |
| 948 | u128 uid = rp.PopRaw<u128>(); // What does this do? | 961 | u128 uid = rp.PopRaw<u128>(); // What does this do? |
| 949 | |||
| 950 | LOG_WARNING(Service, "(STUBBED) called uid = {:016X}{:016X}", uid[1], uid[0]); | 962 | LOG_WARNING(Service, "(STUBBED) called uid = {:016X}{:016X}", uid[1], uid[0]); |
| 951 | 963 | ||
| 952 | IPC::ResponseBuilder rb{ctx, 4}; | 964 | IPC::ResponseBuilder rb{ctx, 4}; |
| @@ -961,60 +973,62 @@ void IApplicationFunctions::SetTerminateResult(Kernel::HLERequestContext& ctx) { | |||
| 961 | 973 | ||
| 962 | IPC::RequestParser rp{ctx}; | 974 | IPC::RequestParser rp{ctx}; |
| 963 | u32 result = rp.Pop<u32>(); | 975 | u32 result = rp.Pop<u32>(); |
| 976 | LOG_WARNING(Service_AM, "(STUBBED) called, result=0x{:08X}", result); | ||
| 964 | 977 | ||
| 965 | IPC::ResponseBuilder rb{ctx, 2}; | 978 | IPC::ResponseBuilder rb{ctx, 2}; |
| 966 | rb.Push(RESULT_SUCCESS); | 979 | rb.Push(RESULT_SUCCESS); |
| 967 | |||
| 968 | LOG_WARNING(Service_AM, "(STUBBED) called, result=0x{:08X}", result); | ||
| 969 | } | 980 | } |
| 970 | 981 | ||
| 971 | void IApplicationFunctions::GetDisplayVersion(Kernel::HLERequestContext& ctx) { | 982 | void IApplicationFunctions::GetDisplayVersion(Kernel::HLERequestContext& ctx) { |
| 983 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 984 | |||
| 972 | IPC::ResponseBuilder rb{ctx, 6}; | 985 | IPC::ResponseBuilder rb{ctx, 6}; |
| 973 | rb.Push(RESULT_SUCCESS); | 986 | rb.Push(RESULT_SUCCESS); |
| 974 | rb.Push<u64>(1); | 987 | rb.Push<u64>(1); |
| 975 | rb.Push<u64>(0); | 988 | rb.Push<u64>(0); |
| 976 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 977 | } | 989 | } |
| 978 | 990 | ||
| 979 | void IApplicationFunctions::GetDesiredLanguage(Kernel::HLERequestContext& ctx) { | 991 | void IApplicationFunctions::GetDesiredLanguage(Kernel::HLERequestContext& ctx) { |
| 980 | // TODO(bunnei): This should be configurable | 992 | // TODO(bunnei): This should be configurable |
| 993 | LOG_DEBUG(Service_AM, "called"); | ||
| 994 | |||
| 981 | IPC::ResponseBuilder rb{ctx, 4}; | 995 | IPC::ResponseBuilder rb{ctx, 4}; |
| 982 | rb.Push(RESULT_SUCCESS); | 996 | rb.Push(RESULT_SUCCESS); |
| 983 | rb.Push( | 997 | rb.Push( |
| 984 | static_cast<u64>(Service::Set::GetLanguageCodeFromIndex(Settings::values.language_index))); | 998 | static_cast<u64>(Service::Set::GetLanguageCodeFromIndex(Settings::values.language_index))); |
| 985 | LOG_DEBUG(Service_AM, "called"); | ||
| 986 | } | 999 | } |
| 987 | 1000 | ||
| 988 | void IApplicationFunctions::InitializeGamePlayRecording(Kernel::HLERequestContext& ctx) { | 1001 | void IApplicationFunctions::InitializeGamePlayRecording(Kernel::HLERequestContext& ctx) { |
| 1002 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 1003 | |||
| 989 | IPC::ResponseBuilder rb{ctx, 2}; | 1004 | IPC::ResponseBuilder rb{ctx, 2}; |
| 990 | rb.Push(RESULT_SUCCESS); | 1005 | rb.Push(RESULT_SUCCESS); |
| 991 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 992 | } | 1006 | } |
| 993 | 1007 | ||
| 994 | void IApplicationFunctions::SetGamePlayRecordingState(Kernel::HLERequestContext& ctx) { | 1008 | void IApplicationFunctions::SetGamePlayRecordingState(Kernel::HLERequestContext& ctx) { |
| 1009 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 1010 | |||
| 995 | IPC::ResponseBuilder rb{ctx, 2}; | 1011 | IPC::ResponseBuilder rb{ctx, 2}; |
| 996 | rb.Push(RESULT_SUCCESS); | 1012 | rb.Push(RESULT_SUCCESS); |
| 997 | |||
| 998 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 999 | } | 1013 | } |
| 1000 | 1014 | ||
| 1001 | void IApplicationFunctions::NotifyRunning(Kernel::HLERequestContext& ctx) { | 1015 | void IApplicationFunctions::NotifyRunning(Kernel::HLERequestContext& ctx) { |
| 1016 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 1017 | |||
| 1002 | IPC::ResponseBuilder rb{ctx, 3}; | 1018 | IPC::ResponseBuilder rb{ctx, 3}; |
| 1003 | rb.Push(RESULT_SUCCESS); | 1019 | rb.Push(RESULT_SUCCESS); |
| 1004 | rb.Push<u8>(0); // Unknown, seems to be ignored by official processes | 1020 | rb.Push<u8>(0); // Unknown, seems to be ignored by official processes |
| 1005 | |||
| 1006 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 1007 | } | 1021 | } |
| 1008 | 1022 | ||
| 1009 | void IApplicationFunctions::GetPseudoDeviceId(Kernel::HLERequestContext& ctx) { | 1023 | void IApplicationFunctions::GetPseudoDeviceId(Kernel::HLERequestContext& ctx) { |
| 1024 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 1025 | |||
| 1010 | IPC::ResponseBuilder rb{ctx, 6}; | 1026 | IPC::ResponseBuilder rb{ctx, 6}; |
| 1011 | rb.Push(RESULT_SUCCESS); | 1027 | rb.Push(RESULT_SUCCESS); |
| 1012 | 1028 | ||
| 1013 | // Returns a 128-bit UUID | 1029 | // Returns a 128-bit UUID |
| 1014 | rb.Push<u64>(0); | 1030 | rb.Push<u64>(0); |
| 1015 | rb.Push<u64>(0); | 1031 | rb.Push<u64>(0); |
| 1016 | |||
| 1017 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 1018 | } | 1032 | } |
| 1019 | 1033 | ||
| 1020 | void InstallInterfaces(SM::ServiceManager& service_manager, | 1034 | void InstallInterfaces(SM::ServiceManager& service_manager, |
| @@ -1051,9 +1065,10 @@ IHomeMenuFunctions::IHomeMenuFunctions() : ServiceFramework("IHomeMenuFunctions" | |||
| 1051 | IHomeMenuFunctions::~IHomeMenuFunctions() = default; | 1065 | IHomeMenuFunctions::~IHomeMenuFunctions() = default; |
| 1052 | 1066 | ||
| 1053 | void IHomeMenuFunctions::RequestToGetForeground(Kernel::HLERequestContext& ctx) { | 1067 | void IHomeMenuFunctions::RequestToGetForeground(Kernel::HLERequestContext& ctx) { |
| 1068 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 1069 | |||
| 1054 | IPC::ResponseBuilder rb{ctx, 2}; | 1070 | IPC::ResponseBuilder rb{ctx, 2}; |
| 1055 | rb.Push(RESULT_SUCCESS); | 1071 | rb.Push(RESULT_SUCCESS); |
| 1056 | LOG_WARNING(Service_AM, "(STUBBED) called"); | ||
| 1057 | } | 1072 | } |
| 1058 | 1073 | ||
| 1059 | IGlobalStateController::IGlobalStateController() : ServiceFramework("IGlobalStateController") { | 1074 | IGlobalStateController::IGlobalStateController() : ServiceFramework("IGlobalStateController") { |
diff --git a/src/core/hle/service/am/applet_ae.cpp b/src/core/hle/service/am/applet_ae.cpp index ec93e3529..41a573a91 100644 --- a/src/core/hle/service/am/applet_ae.cpp +++ b/src/core/hle/service/am/applet_ae.cpp | |||
| @@ -32,66 +32,75 @@ public: | |||
| 32 | 32 | ||
| 33 | private: | 33 | private: |
| 34 | void GetCommonStateGetter(Kernel::HLERequestContext& ctx) { | 34 | void GetCommonStateGetter(Kernel::HLERequestContext& ctx) { |
| 35 | LOG_DEBUG(Service_AM, "called"); | ||
| 36 | |||
| 35 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 37 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 36 | rb.Push(RESULT_SUCCESS); | 38 | rb.Push(RESULT_SUCCESS); |
| 37 | rb.PushIpcInterface<ICommonStateGetter>(msg_queue); | 39 | rb.PushIpcInterface<ICommonStateGetter>(msg_queue); |
| 38 | LOG_DEBUG(Service_AM, "called"); | ||
| 39 | } | 40 | } |
| 40 | 41 | ||
| 41 | void GetSelfController(Kernel::HLERequestContext& ctx) { | 42 | void GetSelfController(Kernel::HLERequestContext& ctx) { |
| 43 | LOG_DEBUG(Service_AM, "called"); | ||
| 44 | |||
| 42 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 45 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 43 | rb.Push(RESULT_SUCCESS); | 46 | rb.Push(RESULT_SUCCESS); |
| 44 | rb.PushIpcInterface<ISelfController>(nvflinger); | 47 | rb.PushIpcInterface<ISelfController>(nvflinger); |
| 45 | LOG_DEBUG(Service_AM, "called"); | ||
| 46 | } | 48 | } |
| 47 | 49 | ||
| 48 | void GetWindowController(Kernel::HLERequestContext& ctx) { | 50 | void GetWindowController(Kernel::HLERequestContext& ctx) { |
| 51 | LOG_DEBUG(Service_AM, "called"); | ||
| 52 | |||
| 49 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 53 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 50 | rb.Push(RESULT_SUCCESS); | 54 | rb.Push(RESULT_SUCCESS); |
| 51 | rb.PushIpcInterface<IWindowController>(); | 55 | rb.PushIpcInterface<IWindowController>(); |
| 52 | LOG_DEBUG(Service_AM, "called"); | ||
| 53 | } | 56 | } |
| 54 | 57 | ||
| 55 | void GetAudioController(Kernel::HLERequestContext& ctx) { | 58 | void GetAudioController(Kernel::HLERequestContext& ctx) { |
| 59 | LOG_DEBUG(Service_AM, "called"); | ||
| 60 | |||
| 56 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 61 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 57 | rb.Push(RESULT_SUCCESS); | 62 | rb.Push(RESULT_SUCCESS); |
| 58 | rb.PushIpcInterface<IAudioController>(); | 63 | rb.PushIpcInterface<IAudioController>(); |
| 59 | LOG_DEBUG(Service_AM, "called"); | ||
| 60 | } | 64 | } |
| 61 | 65 | ||
| 62 | void GetDisplayController(Kernel::HLERequestContext& ctx) { | 66 | void GetDisplayController(Kernel::HLERequestContext& ctx) { |
| 67 | LOG_DEBUG(Service_AM, "called"); | ||
| 68 | |||
| 63 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 69 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 64 | rb.Push(RESULT_SUCCESS); | 70 | rb.Push(RESULT_SUCCESS); |
| 65 | rb.PushIpcInterface<IDisplayController>(); | 71 | rb.PushIpcInterface<IDisplayController>(); |
| 66 | LOG_DEBUG(Service_AM, "called"); | ||
| 67 | } | 72 | } |
| 68 | 73 | ||
| 69 | void GetProcessWindingController(Kernel::HLERequestContext& ctx) { | 74 | void GetProcessWindingController(Kernel::HLERequestContext& ctx) { |
| 75 | LOG_DEBUG(Service_AM, "called"); | ||
| 76 | |||
| 70 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 77 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 71 | rb.Push(RESULT_SUCCESS); | 78 | rb.Push(RESULT_SUCCESS); |
| 72 | rb.PushIpcInterface<IProcessWindingController>(); | 79 | rb.PushIpcInterface<IProcessWindingController>(); |
| 73 | LOG_DEBUG(Service_AM, "called"); | ||
| 74 | } | 80 | } |
| 75 | 81 | ||
| 76 | void GetDebugFunctions(Kernel::HLERequestContext& ctx) { | 82 | void GetDebugFunctions(Kernel::HLERequestContext& ctx) { |
| 83 | LOG_DEBUG(Service_AM, "called"); | ||
| 84 | |||
| 77 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 85 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 78 | rb.Push(RESULT_SUCCESS); | 86 | rb.Push(RESULT_SUCCESS); |
| 79 | rb.PushIpcInterface<IDebugFunctions>(); | 87 | rb.PushIpcInterface<IDebugFunctions>(); |
| 80 | LOG_DEBUG(Service_AM, "called"); | ||
| 81 | } | 88 | } |
| 82 | 89 | ||
| 83 | void GetLibraryAppletCreator(Kernel::HLERequestContext& ctx) { | 90 | void GetLibraryAppletCreator(Kernel::HLERequestContext& ctx) { |
| 91 | LOG_DEBUG(Service_AM, "called"); | ||
| 92 | |||
| 84 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 93 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 85 | rb.Push(RESULT_SUCCESS); | 94 | rb.Push(RESULT_SUCCESS); |
| 86 | rb.PushIpcInterface<ILibraryAppletCreator>(); | 95 | rb.PushIpcInterface<ILibraryAppletCreator>(); |
| 87 | LOG_DEBUG(Service_AM, "called"); | ||
| 88 | } | 96 | } |
| 89 | 97 | ||
| 90 | void GetApplicationFunctions(Kernel::HLERequestContext& ctx) { | 98 | void GetApplicationFunctions(Kernel::HLERequestContext& ctx) { |
| 99 | LOG_DEBUG(Service_AM, "called"); | ||
| 100 | |||
| 91 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 101 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 92 | rb.Push(RESULT_SUCCESS); | 102 | rb.Push(RESULT_SUCCESS); |
| 93 | rb.PushIpcInterface<IApplicationFunctions>(); | 103 | rb.PushIpcInterface<IApplicationFunctions>(); |
| 94 | LOG_DEBUG(Service_AM, "called"); | ||
| 95 | } | 104 | } |
| 96 | 105 | ||
| 97 | std::shared_ptr<NVFlinger::NVFlinger> nvflinger; | 106 | std::shared_ptr<NVFlinger::NVFlinger> nvflinger; |
| @@ -122,97 +131,110 @@ public: | |||
| 122 | 131 | ||
| 123 | private: | 132 | private: |
| 124 | void GetCommonStateGetter(Kernel::HLERequestContext& ctx) { | 133 | void GetCommonStateGetter(Kernel::HLERequestContext& ctx) { |
| 134 | LOG_DEBUG(Service_AM, "called"); | ||
| 135 | |||
| 125 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 136 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 126 | rb.Push(RESULT_SUCCESS); | 137 | rb.Push(RESULT_SUCCESS); |
| 127 | rb.PushIpcInterface<ICommonStateGetter>(msg_queue); | 138 | rb.PushIpcInterface<ICommonStateGetter>(msg_queue); |
| 128 | LOG_DEBUG(Service_AM, "called"); | ||
| 129 | } | 139 | } |
| 130 | 140 | ||
| 131 | void GetSelfController(Kernel::HLERequestContext& ctx) { | 141 | void GetSelfController(Kernel::HLERequestContext& ctx) { |
| 142 | LOG_DEBUG(Service_AM, "called"); | ||
| 143 | |||
| 132 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 144 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 133 | rb.Push(RESULT_SUCCESS); | 145 | rb.Push(RESULT_SUCCESS); |
| 134 | rb.PushIpcInterface<ISelfController>(nvflinger); | 146 | rb.PushIpcInterface<ISelfController>(nvflinger); |
| 135 | LOG_DEBUG(Service_AM, "called"); | ||
| 136 | } | 147 | } |
| 137 | 148 | ||
| 138 | void GetWindowController(Kernel::HLERequestContext& ctx) { | 149 | void GetWindowController(Kernel::HLERequestContext& ctx) { |
| 150 | LOG_DEBUG(Service_AM, "called"); | ||
| 151 | |||
| 139 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 152 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 140 | rb.Push(RESULT_SUCCESS); | 153 | rb.Push(RESULT_SUCCESS); |
| 141 | rb.PushIpcInterface<IWindowController>(); | 154 | rb.PushIpcInterface<IWindowController>(); |
| 142 | LOG_DEBUG(Service_AM, "called"); | ||
| 143 | } | 155 | } |
| 144 | 156 | ||
| 145 | void GetAudioController(Kernel::HLERequestContext& ctx) { | 157 | void GetAudioController(Kernel::HLERequestContext& ctx) { |
| 158 | LOG_DEBUG(Service_AM, "called"); | ||
| 159 | |||
| 146 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 160 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 147 | rb.Push(RESULT_SUCCESS); | 161 | rb.Push(RESULT_SUCCESS); |
| 148 | rb.PushIpcInterface<IAudioController>(); | 162 | rb.PushIpcInterface<IAudioController>(); |
| 149 | LOG_DEBUG(Service_AM, "called"); | ||
| 150 | } | 163 | } |
| 151 | 164 | ||
| 152 | void GetDisplayController(Kernel::HLERequestContext& ctx) { | 165 | void GetDisplayController(Kernel::HLERequestContext& ctx) { |
| 166 | LOG_DEBUG(Service_AM, "called"); | ||
| 167 | |||
| 153 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 168 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 154 | rb.Push(RESULT_SUCCESS); | 169 | rb.Push(RESULT_SUCCESS); |
| 155 | rb.PushIpcInterface<IDisplayController>(); | 170 | rb.PushIpcInterface<IDisplayController>(); |
| 156 | LOG_DEBUG(Service_AM, "called"); | ||
| 157 | } | 171 | } |
| 158 | 172 | ||
| 159 | void GetDebugFunctions(Kernel::HLERequestContext& ctx) { | 173 | void GetDebugFunctions(Kernel::HLERequestContext& ctx) { |
| 174 | LOG_DEBUG(Service_AM, "called"); | ||
| 175 | |||
| 160 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 176 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 161 | rb.Push(RESULT_SUCCESS); | 177 | rb.Push(RESULT_SUCCESS); |
| 162 | rb.PushIpcInterface<IDebugFunctions>(); | 178 | rb.PushIpcInterface<IDebugFunctions>(); |
| 163 | LOG_DEBUG(Service_AM, "called"); | ||
| 164 | } | 179 | } |
| 165 | 180 | ||
| 166 | void GetLibraryAppletCreator(Kernel::HLERequestContext& ctx) { | 181 | void GetLibraryAppletCreator(Kernel::HLERequestContext& ctx) { |
| 182 | LOG_DEBUG(Service_AM, "called"); | ||
| 183 | |||
| 167 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 184 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 168 | rb.Push(RESULT_SUCCESS); | 185 | rb.Push(RESULT_SUCCESS); |
| 169 | rb.PushIpcInterface<ILibraryAppletCreator>(); | 186 | rb.PushIpcInterface<ILibraryAppletCreator>(); |
| 170 | LOG_DEBUG(Service_AM, "called"); | ||
| 171 | } | 187 | } |
| 172 | 188 | ||
| 173 | void GetHomeMenuFunctions(Kernel::HLERequestContext& ctx) { | 189 | void GetHomeMenuFunctions(Kernel::HLERequestContext& ctx) { |
| 190 | LOG_DEBUG(Service_AM, "called"); | ||
| 191 | |||
| 174 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 192 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 175 | rb.Push(RESULT_SUCCESS); | 193 | rb.Push(RESULT_SUCCESS); |
| 176 | rb.PushIpcInterface<IHomeMenuFunctions>(); | 194 | rb.PushIpcInterface<IHomeMenuFunctions>(); |
| 177 | LOG_DEBUG(Service_AM, "called"); | ||
| 178 | } | 195 | } |
| 179 | 196 | ||
| 180 | void GetGlobalStateController(Kernel::HLERequestContext& ctx) { | 197 | void GetGlobalStateController(Kernel::HLERequestContext& ctx) { |
| 198 | LOG_DEBUG(Service_AM, "called"); | ||
| 199 | |||
| 181 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 200 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 182 | rb.Push(RESULT_SUCCESS); | 201 | rb.Push(RESULT_SUCCESS); |
| 183 | rb.PushIpcInterface<IGlobalStateController>(); | 202 | rb.PushIpcInterface<IGlobalStateController>(); |
| 184 | LOG_DEBUG(Service_AM, "called"); | ||
| 185 | } | 203 | } |
| 186 | 204 | ||
| 187 | void GetApplicationCreator(Kernel::HLERequestContext& ctx) { | 205 | void GetApplicationCreator(Kernel::HLERequestContext& ctx) { |
| 206 | LOG_DEBUG(Service_AM, "called"); | ||
| 207 | |||
| 188 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 208 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 189 | rb.Push(RESULT_SUCCESS); | 209 | rb.Push(RESULT_SUCCESS); |
| 190 | rb.PushIpcInterface<IApplicationCreator>(); | 210 | rb.PushIpcInterface<IApplicationCreator>(); |
| 191 | LOG_DEBUG(Service_AM, "called"); | ||
| 192 | } | 211 | } |
| 193 | std::shared_ptr<NVFlinger::NVFlinger> nvflinger; | 212 | std::shared_ptr<NVFlinger::NVFlinger> nvflinger; |
| 194 | std::shared_ptr<AppletMessageQueue> msg_queue; | 213 | std::shared_ptr<AppletMessageQueue> msg_queue; |
| 195 | }; | 214 | }; |
| 196 | 215 | ||
| 197 | void AppletAE::OpenSystemAppletProxy(Kernel::HLERequestContext& ctx) { | 216 | void AppletAE::OpenSystemAppletProxy(Kernel::HLERequestContext& ctx) { |
| 217 | LOG_DEBUG(Service_AM, "called"); | ||
| 218 | |||
| 198 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 219 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 199 | rb.Push(RESULT_SUCCESS); | 220 | rb.Push(RESULT_SUCCESS); |
| 200 | rb.PushIpcInterface<ISystemAppletProxy>(nvflinger, msg_queue); | 221 | rb.PushIpcInterface<ISystemAppletProxy>(nvflinger, msg_queue); |
| 201 | LOG_DEBUG(Service_AM, "called"); | ||
| 202 | } | 222 | } |
| 203 | 223 | ||
| 204 | void AppletAE::OpenLibraryAppletProxy(Kernel::HLERequestContext& ctx) { | 224 | void AppletAE::OpenLibraryAppletProxy(Kernel::HLERequestContext& ctx) { |
| 225 | LOG_DEBUG(Service_AM, "called"); | ||
| 226 | |||
| 205 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 227 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 206 | rb.Push(RESULT_SUCCESS); | 228 | rb.Push(RESULT_SUCCESS); |
| 207 | rb.PushIpcInterface<ILibraryAppletProxy>(nvflinger, msg_queue); | 229 | rb.PushIpcInterface<ILibraryAppletProxy>(nvflinger, msg_queue); |
| 208 | LOG_DEBUG(Service_AM, "called"); | ||
| 209 | } | 230 | } |
| 210 | 231 | ||
| 211 | void AppletAE::OpenLibraryAppletProxyOld(Kernel::HLERequestContext& ctx) { | 232 | void AppletAE::OpenLibraryAppletProxyOld(Kernel::HLERequestContext& ctx) { |
| 233 | LOG_DEBUG(Service_AM, "called"); | ||
| 234 | |||
| 212 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 235 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 213 | rb.Push(RESULT_SUCCESS); | 236 | rb.Push(RESULT_SUCCESS); |
| 214 | rb.PushIpcInterface<ILibraryAppletProxy>(nvflinger, msg_queue); | 237 | rb.PushIpcInterface<ILibraryAppletProxy>(nvflinger, msg_queue); |
| 215 | LOG_DEBUG(Service_AM, "called"); | ||
| 216 | } | 238 | } |
| 217 | 239 | ||
| 218 | AppletAE::AppletAE(std::shared_ptr<NVFlinger::NVFlinger> nvflinger, | 240 | AppletAE::AppletAE(std::shared_ptr<NVFlinger::NVFlinger> nvflinger, |
diff --git a/src/core/hle/service/am/applet_oe.cpp b/src/core/hle/service/am/applet_oe.cpp index 20c8d5fff..d3a0a1568 100644 --- a/src/core/hle/service/am/applet_oe.cpp +++ b/src/core/hle/service/am/applet_oe.cpp | |||
| @@ -35,59 +35,67 @@ public: | |||
| 35 | 35 | ||
| 36 | private: | 36 | private: |
| 37 | void GetAudioController(Kernel::HLERequestContext& ctx) { | 37 | void GetAudioController(Kernel::HLERequestContext& ctx) { |
| 38 | LOG_DEBUG(Service_AM, "called"); | ||
| 39 | |||
| 38 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 40 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 39 | rb.Push(RESULT_SUCCESS); | 41 | rb.Push(RESULT_SUCCESS); |
| 40 | rb.PushIpcInterface<IAudioController>(); | 42 | rb.PushIpcInterface<IAudioController>(); |
| 41 | LOG_DEBUG(Service_AM, "called"); | ||
| 42 | } | 43 | } |
| 43 | 44 | ||
| 44 | void GetDisplayController(Kernel::HLERequestContext& ctx) { | 45 | void GetDisplayController(Kernel::HLERequestContext& ctx) { |
| 46 | LOG_DEBUG(Service_AM, "called"); | ||
| 47 | |||
| 45 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 48 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 46 | rb.Push(RESULT_SUCCESS); | 49 | rb.Push(RESULT_SUCCESS); |
| 47 | rb.PushIpcInterface<IDisplayController>(); | 50 | rb.PushIpcInterface<IDisplayController>(); |
| 48 | LOG_DEBUG(Service_AM, "called"); | ||
| 49 | } | 51 | } |
| 50 | 52 | ||
| 51 | void GetDebugFunctions(Kernel::HLERequestContext& ctx) { | 53 | void GetDebugFunctions(Kernel::HLERequestContext& ctx) { |
| 54 | LOG_DEBUG(Service_AM, "called"); | ||
| 55 | |||
| 52 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 56 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 53 | rb.Push(RESULT_SUCCESS); | 57 | rb.Push(RESULT_SUCCESS); |
| 54 | rb.PushIpcInterface<IDebugFunctions>(); | 58 | rb.PushIpcInterface<IDebugFunctions>(); |
| 55 | LOG_DEBUG(Service_AM, "called"); | ||
| 56 | } | 59 | } |
| 57 | 60 | ||
| 58 | void GetWindowController(Kernel::HLERequestContext& ctx) { | 61 | void GetWindowController(Kernel::HLERequestContext& ctx) { |
| 62 | LOG_DEBUG(Service_AM, "called"); | ||
| 63 | |||
| 59 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 64 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 60 | rb.Push(RESULT_SUCCESS); | 65 | rb.Push(RESULT_SUCCESS); |
| 61 | rb.PushIpcInterface<IWindowController>(); | 66 | rb.PushIpcInterface<IWindowController>(); |
| 62 | LOG_DEBUG(Service_AM, "called"); | ||
| 63 | } | 67 | } |
| 64 | 68 | ||
| 65 | void GetSelfController(Kernel::HLERequestContext& ctx) { | 69 | void GetSelfController(Kernel::HLERequestContext& ctx) { |
| 70 | LOG_DEBUG(Service_AM, "called"); | ||
| 71 | |||
| 66 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 72 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 67 | rb.Push(RESULT_SUCCESS); | 73 | rb.Push(RESULT_SUCCESS); |
| 68 | rb.PushIpcInterface<ISelfController>(nvflinger); | 74 | rb.PushIpcInterface<ISelfController>(nvflinger); |
| 69 | LOG_DEBUG(Service_AM, "called"); | ||
| 70 | } | 75 | } |
| 71 | 76 | ||
| 72 | void GetCommonStateGetter(Kernel::HLERequestContext& ctx) { | 77 | void GetCommonStateGetter(Kernel::HLERequestContext& ctx) { |
| 78 | LOG_DEBUG(Service_AM, "called"); | ||
| 79 | |||
| 73 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 80 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 74 | rb.Push(RESULT_SUCCESS); | 81 | rb.Push(RESULT_SUCCESS); |
| 75 | rb.PushIpcInterface<ICommonStateGetter>(msg_queue); | 82 | rb.PushIpcInterface<ICommonStateGetter>(msg_queue); |
| 76 | LOG_DEBUG(Service_AM, "called"); | ||
| 77 | } | 83 | } |
| 78 | 84 | ||
| 79 | void GetLibraryAppletCreator(Kernel::HLERequestContext& ctx) { | 85 | void GetLibraryAppletCreator(Kernel::HLERequestContext& ctx) { |
| 86 | LOG_DEBUG(Service_AM, "called"); | ||
| 87 | |||
| 80 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 88 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 81 | rb.Push(RESULT_SUCCESS); | 89 | rb.Push(RESULT_SUCCESS); |
| 82 | rb.PushIpcInterface<ILibraryAppletCreator>(); | 90 | rb.PushIpcInterface<ILibraryAppletCreator>(); |
| 83 | LOG_DEBUG(Service_AM, "called"); | ||
| 84 | } | 91 | } |
| 85 | 92 | ||
| 86 | void GetApplicationFunctions(Kernel::HLERequestContext& ctx) { | 93 | void GetApplicationFunctions(Kernel::HLERequestContext& ctx) { |
| 94 | LOG_DEBUG(Service_AM, "called"); | ||
| 95 | |||
| 87 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 96 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 88 | rb.Push(RESULT_SUCCESS); | 97 | rb.Push(RESULT_SUCCESS); |
| 89 | rb.PushIpcInterface<IApplicationFunctions>(); | 98 | rb.PushIpcInterface<IApplicationFunctions>(); |
| 90 | LOG_DEBUG(Service_AM, "called"); | ||
| 91 | } | 99 | } |
| 92 | 100 | ||
| 93 | std::shared_ptr<NVFlinger::NVFlinger> nvflinger; | 101 | std::shared_ptr<NVFlinger::NVFlinger> nvflinger; |
| @@ -95,10 +103,11 @@ private: | |||
| 95 | }; | 103 | }; |
| 96 | 104 | ||
| 97 | void AppletOE::OpenApplicationProxy(Kernel::HLERequestContext& ctx) { | 105 | void AppletOE::OpenApplicationProxy(Kernel::HLERequestContext& ctx) { |
| 106 | LOG_DEBUG(Service_AM, "called"); | ||
| 107 | |||
| 98 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 108 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 99 | rb.Push(RESULT_SUCCESS); | 109 | rb.Push(RESULT_SUCCESS); |
| 100 | rb.PushIpcInterface<IApplicationProxy>(nvflinger, msg_queue); | 110 | rb.PushIpcInterface<IApplicationProxy>(nvflinger, msg_queue); |
| 101 | LOG_DEBUG(Service_AM, "called"); | ||
| 102 | } | 111 | } |
| 103 | 112 | ||
| 104 | AppletOE::AppletOE(std::shared_ptr<NVFlinger::NVFlinger> nvflinger, | 113 | AppletOE::AppletOE(std::shared_ptr<NVFlinger::NVFlinger> nvflinger, |
diff --git a/src/core/hle/service/aoc/aoc_u.cpp b/src/core/hle/service/aoc/aoc_u.cpp index 54305cf05..bacf19de2 100644 --- a/src/core/hle/service/aoc/aoc_u.cpp +++ b/src/core/hle/service/aoc/aoc_u.cpp | |||
| @@ -68,6 +68,8 @@ AOC_U::AOC_U() : ServiceFramework("aoc:u"), add_on_content(AccumulateAOCTitleIDs | |||
| 68 | AOC_U::~AOC_U() = default; | 68 | AOC_U::~AOC_U() = default; |
| 69 | 69 | ||
| 70 | void AOC_U::CountAddOnContent(Kernel::HLERequestContext& ctx) { | 70 | void AOC_U::CountAddOnContent(Kernel::HLERequestContext& ctx) { |
| 71 | LOG_DEBUG(Service_AOC, "called"); | ||
| 72 | |||
| 71 | IPC::ResponseBuilder rb{ctx, 3}; | 73 | IPC::ResponseBuilder rb{ctx, 3}; |
| 72 | rb.Push(RESULT_SUCCESS); | 74 | rb.Push(RESULT_SUCCESS); |
| 73 | 75 | ||
| @@ -82,6 +84,7 @@ void AOC_U::ListAddOnContent(Kernel::HLERequestContext& ctx) { | |||
| 82 | 84 | ||
| 83 | const auto offset = rp.PopRaw<u32>(); | 85 | const auto offset = rp.PopRaw<u32>(); |
| 84 | auto count = rp.PopRaw<u32>(); | 86 | auto count = rp.PopRaw<u32>(); |
| 87 | LOG_DEBUG(Service_AOC, "called with offset={}, count={}", offset, count); | ||
| 85 | 88 | ||
| 86 | const auto current = Core::System::GetInstance().CurrentProcess()->GetTitleID(); | 89 | const auto current = Core::System::GetInstance().CurrentProcess()->GetTitleID(); |
| 87 | 90 | ||
| @@ -110,6 +113,8 @@ void AOC_U::ListAddOnContent(Kernel::HLERequestContext& ctx) { | |||
| 110 | } | 113 | } |
| 111 | 114 | ||
| 112 | void AOC_U::GetAddOnContentBaseId(Kernel::HLERequestContext& ctx) { | 115 | void AOC_U::GetAddOnContentBaseId(Kernel::HLERequestContext& ctx) { |
| 116 | LOG_DEBUG(Service_AOC, "called"); | ||
| 117 | |||
| 113 | IPC::ResponseBuilder rb{ctx, 4}; | 118 | IPC::ResponseBuilder rb{ctx, 4}; |
| 114 | rb.Push(RESULT_SUCCESS); | 119 | rb.Push(RESULT_SUCCESS); |
| 115 | const auto title_id = Core::System::GetInstance().CurrentProcess()->GetTitleID(); | 120 | const auto title_id = Core::System::GetInstance().CurrentProcess()->GetTitleID(); |
| @@ -128,7 +133,6 @@ void AOC_U::PrepareAddOnContent(Kernel::HLERequestContext& ctx) { | |||
| 128 | IPC::RequestParser rp{ctx}; | 133 | IPC::RequestParser rp{ctx}; |
| 129 | 134 | ||
| 130 | const auto aoc_id = rp.PopRaw<u32>(); | 135 | const auto aoc_id = rp.PopRaw<u32>(); |
| 131 | |||
| 132 | LOG_WARNING(Service_AOC, "(STUBBED) called with aoc_id={:08X}", aoc_id); | 136 | LOG_WARNING(Service_AOC, "(STUBBED) called with aoc_id={:08X}", aoc_id); |
| 133 | 137 | ||
| 134 | IPC::ResponseBuilder rb{ctx, 2}; | 138 | IPC::ResponseBuilder rb{ctx, 2}; |
diff --git a/src/core/hle/service/apm/interface.cpp b/src/core/hle/service/apm/interface.cpp index c22bd3859..fcacbab72 100644 --- a/src/core/hle/service/apm/interface.cpp +++ b/src/core/hle/service/apm/interface.cpp | |||
| @@ -40,24 +40,22 @@ private: | |||
| 40 | 40 | ||
| 41 | auto mode = static_cast<PerformanceMode>(rp.Pop<u32>()); | 41 | auto mode = static_cast<PerformanceMode>(rp.Pop<u32>()); |
| 42 | u32 config = rp.Pop<u32>(); | 42 | u32 config = rp.Pop<u32>(); |
| 43 | LOG_WARNING(Service_APM, "(STUBBED) called mode={} config={}", static_cast<u32>(mode), | ||
| 44 | config); | ||
| 43 | 45 | ||
| 44 | IPC::ResponseBuilder rb{ctx, 2}; | 46 | IPC::ResponseBuilder rb{ctx, 2}; |
| 45 | rb.Push(RESULT_SUCCESS); | 47 | rb.Push(RESULT_SUCCESS); |
| 46 | |||
| 47 | LOG_WARNING(Service_APM, "(STUBBED) called mode={} config={}", static_cast<u32>(mode), | ||
| 48 | config); | ||
| 49 | } | 48 | } |
| 50 | 49 | ||
| 51 | void GetPerformanceConfiguration(Kernel::HLERequestContext& ctx) { | 50 | void GetPerformanceConfiguration(Kernel::HLERequestContext& ctx) { |
| 52 | IPC::RequestParser rp{ctx}; | 51 | IPC::RequestParser rp{ctx}; |
| 53 | 52 | ||
| 54 | auto mode = static_cast<PerformanceMode>(rp.Pop<u32>()); | 53 | auto mode = static_cast<PerformanceMode>(rp.Pop<u32>()); |
| 54 | LOG_WARNING(Service_APM, "(STUBBED) called mode={}", static_cast<u32>(mode)); | ||
| 55 | 55 | ||
| 56 | IPC::ResponseBuilder rb{ctx, 3}; | 56 | IPC::ResponseBuilder rb{ctx, 3}; |
| 57 | rb.Push(RESULT_SUCCESS); | 57 | rb.Push(RESULT_SUCCESS); |
| 58 | rb.Push<u32>(static_cast<u32>(PerformanceConfiguration::Config1)); | 58 | rb.Push<u32>(static_cast<u32>(PerformanceConfiguration::Config1)); |
| 59 | |||
| 60 | LOG_WARNING(Service_APM, "(STUBBED) called mode={}", static_cast<u32>(mode)); | ||
| 61 | } | 59 | } |
| 62 | }; | 60 | }; |
| 63 | 61 | ||
| @@ -73,11 +71,11 @@ APM::APM(std::shared_ptr<Module> apm, const char* name) | |||
| 73 | APM::~APM() = default; | 71 | APM::~APM() = default; |
| 74 | 72 | ||
| 75 | void APM::OpenSession(Kernel::HLERequestContext& ctx) { | 73 | void APM::OpenSession(Kernel::HLERequestContext& ctx) { |
| 74 | LOG_DEBUG(Service_APM, "called"); | ||
| 75 | |||
| 76 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 76 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 77 | rb.Push(RESULT_SUCCESS); | 77 | rb.Push(RESULT_SUCCESS); |
| 78 | rb.PushIpcInterface<ISession>(); | 78 | rb.PushIpcInterface<ISession>(); |
| 79 | |||
| 80 | LOG_DEBUG(Service_APM, "called"); | ||
| 81 | } | 79 | } |
| 82 | 80 | ||
| 83 | APM_Sys::APM_Sys() : ServiceFramework{"apm:sys"} { | 81 | APM_Sys::APM_Sys() : ServiceFramework{"apm:sys"} { |
| @@ -98,11 +96,11 @@ APM_Sys::APM_Sys() : ServiceFramework{"apm:sys"} { | |||
| 98 | APM_Sys::~APM_Sys() = default; | 96 | APM_Sys::~APM_Sys() = default; |
| 99 | 97 | ||
| 100 | void APM_Sys::GetPerformanceEvent(Kernel::HLERequestContext& ctx) { | 98 | void APM_Sys::GetPerformanceEvent(Kernel::HLERequestContext& ctx) { |
| 99 | LOG_DEBUG(Service_APM, "called"); | ||
| 100 | |||
| 101 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 101 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 102 | rb.Push(RESULT_SUCCESS); | 102 | rb.Push(RESULT_SUCCESS); |
| 103 | rb.PushIpcInterface<ISession>(); | 103 | rb.PushIpcInterface<ISession>(); |
| 104 | |||
| 105 | LOG_DEBUG(Service_APM, "called"); | ||
| 106 | } | 104 | } |
| 107 | 105 | ||
| 108 | } // namespace Service::APM | 106 | } // namespace Service::APM |
diff --git a/src/core/hle/service/arp/arp.cpp b/src/core/hle/service/arp/arp.cpp index 358ef2576..e675b0188 100644 --- a/src/core/hle/service/arp/arp.cpp +++ b/src/core/hle/service/arp/arp.cpp | |||
| @@ -59,11 +59,11 @@ public: | |||
| 59 | 59 | ||
| 60 | private: | 60 | private: |
| 61 | void AcquireRegistrar(Kernel::HLERequestContext& ctx) { | 61 | void AcquireRegistrar(Kernel::HLERequestContext& ctx) { |
| 62 | LOG_DEBUG(Service_ARP, "called"); | ||
| 63 | |||
| 62 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 64 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 63 | rb.Push(RESULT_SUCCESS); | 65 | rb.Push(RESULT_SUCCESS); |
| 64 | rb.PushIpcInterface<IRegistrar>(); | 66 | rb.PushIpcInterface<IRegistrar>(); |
| 65 | |||
| 66 | LOG_DEBUG(Service_ARP, "called"); | ||
| 67 | } | 67 | } |
| 68 | }; | 68 | }; |
| 69 | 69 | ||
diff --git a/src/core/hle/service/audio/audout_u.cpp b/src/core/hle/service/audio/audout_u.cpp index 23e1f1165..2ee9bc273 100644 --- a/src/core/hle/service/audio/audout_u.cpp +++ b/src/core/hle/service/audio/audout_u.cpp | |||
| @@ -86,6 +86,7 @@ private: | |||
| 86 | 86 | ||
| 87 | void GetAudioOutState(Kernel::HLERequestContext& ctx) { | 87 | void GetAudioOutState(Kernel::HLERequestContext& ctx) { |
| 88 | LOG_DEBUG(Service_Audio, "called"); | 88 | LOG_DEBUG(Service_Audio, "called"); |
| 89 | |||
| 89 | IPC::ResponseBuilder rb{ctx, 3}; | 90 | IPC::ResponseBuilder rb{ctx, 3}; |
| 90 | rb.Push(RESULT_SUCCESS); | 91 | rb.Push(RESULT_SUCCESS); |
| 91 | rb.Push(static_cast<u32>(stream->IsPlaying() ? AudioState::Started : AudioState::Stopped)); | 92 | rb.Push(static_cast<u32>(stream->IsPlaying() ? AudioState::Started : AudioState::Stopped)); |
| @@ -148,6 +149,7 @@ private: | |||
| 148 | 149 | ||
| 149 | void GetReleasedAudioOutBufferImpl(Kernel::HLERequestContext& ctx) { | 150 | void GetReleasedAudioOutBufferImpl(Kernel::HLERequestContext& ctx) { |
| 150 | LOG_DEBUG(Service_Audio, "called {}", ctx.Description()); | 151 | LOG_DEBUG(Service_Audio, "called {}", ctx.Description()); |
| 152 | |||
| 151 | IPC::RequestParser rp{ctx}; | 153 | IPC::RequestParser rp{ctx}; |
| 152 | const u64 max_count{ctx.GetWriteBufferSize() / sizeof(u64)}; | 154 | const u64 max_count{ctx.GetWriteBufferSize() / sizeof(u64)}; |
| 153 | const auto released_buffers{audio_core.GetTagsAndReleaseBuffers(stream, max_count)}; | 155 | const auto released_buffers{audio_core.GetTagsAndReleaseBuffers(stream, max_count)}; |
| @@ -163,6 +165,7 @@ private: | |||
| 163 | 165 | ||
| 164 | void ContainsAudioOutBuffer(Kernel::HLERequestContext& ctx) { | 166 | void ContainsAudioOutBuffer(Kernel::HLERequestContext& ctx) { |
| 165 | LOG_DEBUG(Service_Audio, "called"); | 167 | LOG_DEBUG(Service_Audio, "called"); |
| 168 | |||
| 166 | IPC::RequestParser rp{ctx}; | 169 | IPC::RequestParser rp{ctx}; |
| 167 | const u64 tag{rp.Pop<u64>()}; | 170 | const u64 tag{rp.Pop<u64>()}; |
| 168 | IPC::ResponseBuilder rb{ctx, 3}; | 171 | IPC::ResponseBuilder rb{ctx, 3}; |
| @@ -172,6 +175,7 @@ private: | |||
| 172 | 175 | ||
| 173 | void GetAudioOutBufferCount(Kernel::HLERequestContext& ctx) { | 176 | void GetAudioOutBufferCount(Kernel::HLERequestContext& ctx) { |
| 174 | LOG_DEBUG(Service_Audio, "called"); | 177 | LOG_DEBUG(Service_Audio, "called"); |
| 178 | |||
| 175 | IPC::ResponseBuilder rb{ctx, 3}; | 179 | IPC::ResponseBuilder rb{ctx, 3}; |
| 176 | rb.Push(RESULT_SUCCESS); | 180 | rb.Push(RESULT_SUCCESS); |
| 177 | rb.Push(static_cast<u32>(stream->GetQueueSize())); | 181 | rb.Push(static_cast<u32>(stream->GetQueueSize())); |
| @@ -189,6 +193,7 @@ private: | |||
| 189 | 193 | ||
| 190 | void AudOutU::ListAudioOutsImpl(Kernel::HLERequestContext& ctx) { | 194 | void AudOutU::ListAudioOutsImpl(Kernel::HLERequestContext& ctx) { |
| 191 | LOG_DEBUG(Service_Audio, "called"); | 195 | LOG_DEBUG(Service_Audio, "called"); |
| 196 | |||
| 192 | IPC::RequestParser rp{ctx}; | 197 | IPC::RequestParser rp{ctx}; |
| 193 | 198 | ||
| 194 | ctx.WriteBuffer(DefaultDevice); | 199 | ctx.WriteBuffer(DefaultDevice); |
diff --git a/src/core/hle/service/audio/audren_u.cpp b/src/core/hle/service/audio/audren_u.cpp index d3ea57ea7..1c418a9bb 100644 --- a/src/core/hle/service/audio/audren_u.cpp +++ b/src/core/hle/service/audio/audren_u.cpp | |||
| @@ -52,74 +52,79 @@ private: | |||
| 52 | } | 52 | } |
| 53 | 53 | ||
| 54 | void GetSampleRate(Kernel::HLERequestContext& ctx) { | 54 | void GetSampleRate(Kernel::HLERequestContext& ctx) { |
| 55 | LOG_DEBUG(Service_Audio, "called"); | ||
| 56 | |||
| 55 | IPC::ResponseBuilder rb{ctx, 3}; | 57 | IPC::ResponseBuilder rb{ctx, 3}; |
| 56 | rb.Push(RESULT_SUCCESS); | 58 | rb.Push(RESULT_SUCCESS); |
| 57 | rb.Push<u32>(renderer->GetSampleRate()); | 59 | rb.Push<u32>(renderer->GetSampleRate()); |
| 58 | LOG_DEBUG(Service_Audio, "called"); | ||
| 59 | } | 60 | } |
| 60 | 61 | ||
| 61 | void GetSampleCount(Kernel::HLERequestContext& ctx) { | 62 | void GetSampleCount(Kernel::HLERequestContext& ctx) { |
| 63 | LOG_DEBUG(Service_Audio, "called"); | ||
| 64 | |||
| 62 | IPC::ResponseBuilder rb{ctx, 3}; | 65 | IPC::ResponseBuilder rb{ctx, 3}; |
| 63 | rb.Push(RESULT_SUCCESS); | 66 | rb.Push(RESULT_SUCCESS); |
| 64 | rb.Push<u32>(renderer->GetSampleCount()); | 67 | rb.Push<u32>(renderer->GetSampleCount()); |
| 65 | LOG_DEBUG(Service_Audio, "called"); | ||
| 66 | } | 68 | } |
| 67 | 69 | ||
| 68 | void GetState(Kernel::HLERequestContext& ctx) { | 70 | void GetState(Kernel::HLERequestContext& ctx) { |
| 71 | LOG_DEBUG(Service_Audio, "called"); | ||
| 72 | |||
| 69 | IPC::ResponseBuilder rb{ctx, 3}; | 73 | IPC::ResponseBuilder rb{ctx, 3}; |
| 70 | rb.Push(RESULT_SUCCESS); | 74 | rb.Push(RESULT_SUCCESS); |
| 71 | rb.Push<u32>(static_cast<u32>(renderer->GetStreamState())); | 75 | rb.Push<u32>(static_cast<u32>(renderer->GetStreamState())); |
| 72 | LOG_DEBUG(Service_Audio, "called"); | ||
| 73 | } | 76 | } |
| 74 | 77 | ||
| 75 | void GetMixBufferCount(Kernel::HLERequestContext& ctx) { | 78 | void GetMixBufferCount(Kernel::HLERequestContext& ctx) { |
| 79 | LOG_DEBUG(Service_Audio, "called"); | ||
| 80 | |||
| 76 | IPC::ResponseBuilder rb{ctx, 3}; | 81 | IPC::ResponseBuilder rb{ctx, 3}; |
| 77 | rb.Push(RESULT_SUCCESS); | 82 | rb.Push(RESULT_SUCCESS); |
| 78 | rb.Push<u32>(renderer->GetMixBufferCount()); | 83 | rb.Push<u32>(renderer->GetMixBufferCount()); |
| 79 | LOG_DEBUG(Service_Audio, "called"); | ||
| 80 | } | 84 | } |
| 81 | 85 | ||
| 82 | void RequestUpdateImpl(Kernel::HLERequestContext& ctx) { | 86 | void RequestUpdateImpl(Kernel::HLERequestContext& ctx) { |
| 87 | LOG_WARNING(Service_Audio, "(STUBBED) called"); | ||
| 88 | |||
| 83 | ctx.WriteBuffer(renderer->UpdateAudioRenderer(ctx.ReadBuffer())); | 89 | ctx.WriteBuffer(renderer->UpdateAudioRenderer(ctx.ReadBuffer())); |
| 84 | IPC::ResponseBuilder rb{ctx, 2}; | 90 | IPC::ResponseBuilder rb{ctx, 2}; |
| 85 | rb.Push(RESULT_SUCCESS); | 91 | rb.Push(RESULT_SUCCESS); |
| 86 | LOG_WARNING(Service_Audio, "(STUBBED) called"); | ||
| 87 | } | 92 | } |
| 88 | 93 | ||
| 89 | void Start(Kernel::HLERequestContext& ctx) { | 94 | void Start(Kernel::HLERequestContext& ctx) { |
| 95 | LOG_WARNING(Service_Audio, "(STUBBED) called"); | ||
| 96 | |||
| 90 | IPC::ResponseBuilder rb{ctx, 2}; | 97 | IPC::ResponseBuilder rb{ctx, 2}; |
| 91 | 98 | ||
| 92 | rb.Push(RESULT_SUCCESS); | 99 | rb.Push(RESULT_SUCCESS); |
| 93 | |||
| 94 | LOG_WARNING(Service_Audio, "(STUBBED) called"); | ||
| 95 | } | 100 | } |
| 96 | 101 | ||
| 97 | void Stop(Kernel::HLERequestContext& ctx) { | 102 | void Stop(Kernel::HLERequestContext& ctx) { |
| 103 | LOG_WARNING(Service_Audio, "(STUBBED) called"); | ||
| 104 | |||
| 98 | IPC::ResponseBuilder rb{ctx, 2}; | 105 | IPC::ResponseBuilder rb{ctx, 2}; |
| 99 | 106 | ||
| 100 | rb.Push(RESULT_SUCCESS); | 107 | rb.Push(RESULT_SUCCESS); |
| 101 | |||
| 102 | LOG_WARNING(Service_Audio, "(STUBBED) called"); | ||
| 103 | } | 108 | } |
| 104 | 109 | ||
| 105 | void QuerySystemEvent(Kernel::HLERequestContext& ctx) { | 110 | void QuerySystemEvent(Kernel::HLERequestContext& ctx) { |
| 111 | LOG_WARNING(Service_Audio, "(STUBBED) called"); | ||
| 112 | |||
| 106 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 113 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 107 | rb.Push(RESULT_SUCCESS); | 114 | rb.Push(RESULT_SUCCESS); |
| 108 | rb.PushCopyObjects(system_event); | 115 | rb.PushCopyObjects(system_event); |
| 109 | |||
| 110 | LOG_WARNING(Service_Audio, "(STUBBED) called"); | ||
| 111 | } | 116 | } |
| 112 | 117 | ||
| 113 | void SetRenderingTimeLimit(Kernel::HLERequestContext& ctx) { | 118 | void SetRenderingTimeLimit(Kernel::HLERequestContext& ctx) { |
| 114 | IPC::RequestParser rp{ctx}; | 119 | IPC::RequestParser rp{ctx}; |
| 115 | rendering_time_limit_percent = rp.Pop<u32>(); | 120 | rendering_time_limit_percent = rp.Pop<u32>(); |
| 121 | LOG_DEBUG(Service_Audio, "called. rendering_time_limit_percent={}", | ||
| 122 | rendering_time_limit_percent); | ||
| 123 | |||
| 116 | ASSERT(rendering_time_limit_percent >= 0 && rendering_time_limit_percent <= 100); | 124 | ASSERT(rendering_time_limit_percent >= 0 && rendering_time_limit_percent <= 100); |
| 117 | 125 | ||
| 118 | IPC::ResponseBuilder rb{ctx, 2}; | 126 | IPC::ResponseBuilder rb{ctx, 2}; |
| 119 | rb.Push(RESULT_SUCCESS); | 127 | rb.Push(RESULT_SUCCESS); |
| 120 | |||
| 121 | LOG_DEBUG(Service_Audio, "called. rendering_time_limit_percent={}", | ||
| 122 | rendering_time_limit_percent); | ||
| 123 | } | 128 | } |
| 124 | 129 | ||
| 125 | void GetRenderingTimeLimit(Kernel::HLERequestContext& ctx) { | 130 | void GetRenderingTimeLimit(Kernel::HLERequestContext& ctx) { |
| @@ -211,6 +216,7 @@ private: | |||
| 211 | 216 | ||
| 212 | void GetActiveChannelCount(Kernel::HLERequestContext& ctx) { | 217 | void GetActiveChannelCount(Kernel::HLERequestContext& ctx) { |
| 213 | LOG_WARNING(Service_Audio, "(STUBBED) called"); | 218 | LOG_WARNING(Service_Audio, "(STUBBED) called"); |
| 219 | |||
| 214 | IPC::ResponseBuilder rb{ctx, 3}; | 220 | IPC::ResponseBuilder rb{ctx, 3}; |
| 215 | rb.Push(RESULT_SUCCESS); | 221 | rb.Push(RESULT_SUCCESS); |
| 216 | rb.Push<u32>(1); | 222 | rb.Push<u32>(1); |
| @@ -235,19 +241,20 @@ AudRenU::AudRenU() : ServiceFramework("audren:u") { | |||
| 235 | AudRenU::~AudRenU() = default; | 241 | AudRenU::~AudRenU() = default; |
| 236 | 242 | ||
| 237 | void AudRenU::OpenAudioRenderer(Kernel::HLERequestContext& ctx) { | 243 | void AudRenU::OpenAudioRenderer(Kernel::HLERequestContext& ctx) { |
| 244 | LOG_DEBUG(Service_Audio, "called"); | ||
| 245 | |||
| 238 | IPC::RequestParser rp{ctx}; | 246 | IPC::RequestParser rp{ctx}; |
| 239 | auto params = rp.PopRaw<AudioCore::AudioRendererParameter>(); | 247 | auto params = rp.PopRaw<AudioCore::AudioRendererParameter>(); |
| 240 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 248 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 241 | 249 | ||
| 242 | rb.Push(RESULT_SUCCESS); | 250 | rb.Push(RESULT_SUCCESS); |
| 243 | rb.PushIpcInterface<Audio::IAudioRenderer>(std::move(params)); | 251 | rb.PushIpcInterface<Audio::IAudioRenderer>(std::move(params)); |
| 244 | |||
| 245 | LOG_DEBUG(Service_Audio, "called"); | ||
| 246 | } | 252 | } |
| 247 | 253 | ||
| 248 | void AudRenU::GetAudioRendererWorkBufferSize(Kernel::HLERequestContext& ctx) { | 254 | void AudRenU::GetAudioRendererWorkBufferSize(Kernel::HLERequestContext& ctx) { |
| 249 | IPC::RequestParser rp{ctx}; | 255 | IPC::RequestParser rp{ctx}; |
| 250 | auto params = rp.PopRaw<AudioCore::AudioRendererParameter>(); | 256 | auto params = rp.PopRaw<AudioCore::AudioRendererParameter>(); |
| 257 | LOG_DEBUG(Service_Audio, "called"); | ||
| 251 | 258 | ||
| 252 | u64 buffer_sz = Common::AlignUp(4 * params.mix_buffer_count, 0x40); | 259 | u64 buffer_sz = Common::AlignUp(4 * params.mix_buffer_count, 0x40); |
| 253 | buffer_sz += params.unknown_c * 1024; | 260 | buffer_sz += params.unknown_c * 1024; |
| @@ -301,26 +308,26 @@ void AudRenU::GetAudioRendererWorkBufferSize(Kernel::HLERequestContext& ctx) { | |||
| 301 | rb.Push(RESULT_SUCCESS); | 308 | rb.Push(RESULT_SUCCESS); |
| 302 | rb.Push<u64>(output_sz); | 309 | rb.Push<u64>(output_sz); |
| 303 | 310 | ||
| 304 | LOG_DEBUG(Service_Audio, "called, buffer_size=0x{:X}", output_sz); | 311 | LOG_DEBUG(Service_Audio, "buffer_size=0x{:X}", output_sz); |
| 305 | } | 312 | } |
| 306 | 313 | ||
| 307 | void AudRenU::GetAudioDevice(Kernel::HLERequestContext& ctx) { | 314 | void AudRenU::GetAudioDevice(Kernel::HLERequestContext& ctx) { |
| 315 | LOG_DEBUG(Service_Audio, "called"); | ||
| 316 | |||
| 308 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 317 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 309 | 318 | ||
| 310 | rb.Push(RESULT_SUCCESS); | 319 | rb.Push(RESULT_SUCCESS); |
| 311 | rb.PushIpcInterface<Audio::IAudioDevice>(); | 320 | rb.PushIpcInterface<Audio::IAudioDevice>(); |
| 312 | |||
| 313 | LOG_DEBUG(Service_Audio, "called"); | ||
| 314 | } | 321 | } |
| 315 | 322 | ||
| 316 | void AudRenU::GetAudioDeviceServiceWithRevisionInfo(Kernel::HLERequestContext& ctx) { | 323 | void AudRenU::GetAudioDeviceServiceWithRevisionInfo(Kernel::HLERequestContext& ctx) { |
| 324 | LOG_WARNING(Service_Audio, "(STUBBED) called"); | ||
| 325 | |||
| 317 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 326 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 318 | 327 | ||
| 319 | rb.Push(RESULT_SUCCESS); | 328 | rb.Push(RESULT_SUCCESS); |
| 320 | rb.PushIpcInterface<Audio::IAudioDevice>(); | 329 | rb.PushIpcInterface<Audio::IAudioDevice>(); // TODO(ogniK): Figure out what is different |
| 321 | 330 | // based on the current revision | |
| 322 | LOG_WARNING(Service_Audio, "(STUBBED) called"); // TODO(ogniK): Figure out what is different | ||
| 323 | // based on the current revision | ||
| 324 | } | 331 | } |
| 325 | 332 | ||
| 326 | bool AudRenU::IsFeatureSupported(AudioFeatures feature, u32_le revision) const { | 333 | bool AudRenU::IsFeatureSupported(AudioFeatures feature, u32_le revision) const { |
diff --git a/src/core/hle/service/audio/hwopus.cpp b/src/core/hle/service/audio/hwopus.cpp index 763e619a4..832159394 100644 --- a/src/core/hle/service/audio/hwopus.cpp +++ b/src/core/hle/service/audio/hwopus.cpp | |||
| @@ -46,10 +46,13 @@ public: | |||
| 46 | 46 | ||
| 47 | private: | 47 | private: |
| 48 | void DecodeInterleaved(Kernel::HLERequestContext& ctx) { | 48 | void DecodeInterleaved(Kernel::HLERequestContext& ctx) { |
| 49 | LOG_DEBUG(Audio, "called"); | ||
| 50 | |||
| 49 | u32 consumed = 0; | 51 | u32 consumed = 0; |
| 50 | u32 sample_count = 0; | 52 | u32 sample_count = 0; |
| 51 | std::vector<opus_int16> samples(ctx.GetWriteBufferSize() / sizeof(opus_int16)); | 53 | std::vector<opus_int16> samples(ctx.GetWriteBufferSize() / sizeof(opus_int16)); |
| 52 | if (!Decoder_DecodeInterleaved(consumed, sample_count, ctx.ReadBuffer(), samples)) { | 54 | if (!Decoder_DecodeInterleaved(consumed, sample_count, ctx.ReadBuffer(), samples)) { |
| 55 | LOG_ERROR(Audio, "Failed to decode opus data"); | ||
| 53 | IPC::ResponseBuilder rb{ctx, 2}; | 56 | IPC::ResponseBuilder rb{ctx, 2}; |
| 54 | // TODO(ogniK): Use correct error code | 57 | // TODO(ogniK): Use correct error code |
| 55 | rb.Push(ResultCode(-1)); | 58 | rb.Push(ResultCode(-1)); |
| @@ -63,12 +66,15 @@ private: | |||
| 63 | } | 66 | } |
| 64 | 67 | ||
| 65 | void DecodeInterleavedWithPerformance(Kernel::HLERequestContext& ctx) { | 68 | void DecodeInterleavedWithPerformance(Kernel::HLERequestContext& ctx) { |
| 69 | LOG_DEBUG(Audio, "called"); | ||
| 70 | |||
| 66 | u32 consumed = 0; | 71 | u32 consumed = 0; |
| 67 | u32 sample_count = 0; | 72 | u32 sample_count = 0; |
| 68 | u64 performance = 0; | 73 | u64 performance = 0; |
| 69 | std::vector<opus_int16> samples(ctx.GetWriteBufferSize() / sizeof(opus_int16)); | 74 | std::vector<opus_int16> samples(ctx.GetWriteBufferSize() / sizeof(opus_int16)); |
| 70 | if (!Decoder_DecodeInterleaved(consumed, sample_count, ctx.ReadBuffer(), samples, | 75 | if (!Decoder_DecodeInterleaved(consumed, sample_count, ctx.ReadBuffer(), samples, |
| 71 | performance)) { | 76 | performance)) { |
| 77 | LOG_ERROR(Audio, "Failed to decode opus data"); | ||
| 72 | IPC::ResponseBuilder rb{ctx, 2}; | 78 | IPC::ResponseBuilder rb{ctx, 2}; |
| 73 | // TODO(ogniK): Use correct error code | 79 | // TODO(ogniK): Use correct error code |
| 74 | rb.Push(ResultCode(-1)); | 80 | rb.Push(ResultCode(-1)); |
| @@ -88,24 +94,31 @@ private: | |||
| 88 | std::optional<std::reference_wrapper<u64>> performance_time = std::nullopt) { | 94 | std::optional<std::reference_wrapper<u64>> performance_time = std::nullopt) { |
| 89 | const auto start_time = std::chrono::high_resolution_clock::now(); | 95 | const auto start_time = std::chrono::high_resolution_clock::now(); |
| 90 | std::size_t raw_output_sz = output.size() * sizeof(opus_int16); | 96 | std::size_t raw_output_sz = output.size() * sizeof(opus_int16); |
| 91 | if (sizeof(OpusHeader) > input.size()) | 97 | if (sizeof(OpusHeader) > input.size()) { |
| 98 | LOG_ERROR(Audio, "Input is smaller than the header size"); | ||
| 92 | return false; | 99 | return false; |
| 100 | } | ||
| 93 | OpusHeader hdr{}; | 101 | OpusHeader hdr{}; |
| 94 | std::memcpy(&hdr, input.data(), sizeof(OpusHeader)); | 102 | std::memcpy(&hdr, input.data(), sizeof(OpusHeader)); |
| 95 | if (sizeof(OpusHeader) + static_cast<u32>(hdr.sz) > input.size()) { | 103 | if (sizeof(OpusHeader) + static_cast<u32>(hdr.sz) > input.size()) { |
| 104 | LOG_ERROR(Audio, "Input does not fit in the opus header size"); | ||
| 96 | return false; | 105 | return false; |
| 97 | } | 106 | } |
| 98 | auto frame = input.data() + sizeof(OpusHeader); | 107 | auto frame = input.data() + sizeof(OpusHeader); |
| 99 | auto decoded_sample_count = opus_packet_get_nb_samples( | 108 | auto decoded_sample_count = opus_packet_get_nb_samples( |
| 100 | frame, static_cast<opus_int32>(input.size() - sizeof(OpusHeader)), | 109 | frame, static_cast<opus_int32>(input.size() - sizeof(OpusHeader)), |
| 101 | static_cast<opus_int32>(sample_rate)); | 110 | static_cast<opus_int32>(sample_rate)); |
| 102 | if (decoded_sample_count * channel_count * sizeof(u16) > raw_output_sz) | 111 | if (decoded_sample_count * channel_count * sizeof(u16) > raw_output_sz) { |
| 112 | LOG_ERROR(Audio, "Decoded data does not fit into the output data"); | ||
| 103 | return false; | 113 | return false; |
| 114 | } | ||
| 104 | auto out_sample_count = | 115 | auto out_sample_count = |
| 105 | opus_decode(decoder.get(), frame, hdr.sz, output.data(), | 116 | opus_decode(decoder.get(), frame, hdr.sz, output.data(), |
| 106 | (static_cast<int>(raw_output_sz / sizeof(s16) / channel_count)), 0); | 117 | (static_cast<int>(raw_output_sz / sizeof(s16) / channel_count)), 0); |
| 107 | if (out_sample_count < 0) | 118 | if (out_sample_count < 0) { |
| 119 | LOG_ERROR(Audio, "Incorrect sample count received from opus_decode"); | ||
| 108 | return false; | 120 | return false; |
| 121 | } | ||
| 109 | const auto end_time = std::chrono::high_resolution_clock::now() - start_time; | 122 | const auto end_time = std::chrono::high_resolution_clock::now() - start_time; |
| 110 | sample_count = out_sample_count; | 123 | sample_count = out_sample_count; |
| 111 | consumed = static_cast<u32>(sizeof(OpusHeader) + hdr.sz); | 124 | consumed = static_cast<u32>(sizeof(OpusHeader) + hdr.sz); |
| @@ -134,14 +147,17 @@ static std::size_t WorkerBufferSize(u32 channel_count) { | |||
| 134 | 147 | ||
| 135 | void HwOpus::GetWorkBufferSize(Kernel::HLERequestContext& ctx) { | 148 | void HwOpus::GetWorkBufferSize(Kernel::HLERequestContext& ctx) { |
| 136 | IPC::RequestParser rp{ctx}; | 149 | IPC::RequestParser rp{ctx}; |
| 137 | auto sample_rate = rp.Pop<u32>(); | 150 | const auto sample_rate = rp.Pop<u32>(); |
| 138 | auto channel_count = rp.Pop<u32>(); | 151 | const auto channel_count = rp.Pop<u32>(); |
| 152 | LOG_DEBUG(Audio, "called with sample_rate={}, channel_count={}", sample_rate, channel_count); | ||
| 153 | |||
| 139 | ASSERT_MSG(sample_rate == 48000 || sample_rate == 24000 || sample_rate == 16000 || | 154 | ASSERT_MSG(sample_rate == 48000 || sample_rate == 24000 || sample_rate == 16000 || |
| 140 | sample_rate == 12000 || sample_rate == 8000, | 155 | sample_rate == 12000 || sample_rate == 8000, |
| 141 | "Invalid sample rate"); | 156 | "Invalid sample rate"); |
| 142 | ASSERT_MSG(channel_count == 1 || channel_count == 2, "Invalid channel count"); | 157 | ASSERT_MSG(channel_count == 1 || channel_count == 2, "Invalid channel count"); |
| 143 | u32 worker_buffer_sz = static_cast<u32>(WorkerBufferSize(channel_count)); | 158 | |
| 144 | LOG_DEBUG(Audio, "called worker_buffer_sz={}", worker_buffer_sz); | 159 | const u32 worker_buffer_sz = static_cast<u32>(WorkerBufferSize(channel_count)); |
| 160 | LOG_DEBUG(Audio, "worker_buffer_sz={}", worker_buffer_sz); | ||
| 145 | 161 | ||
| 146 | IPC::ResponseBuilder rb{ctx, 3}; | 162 | IPC::ResponseBuilder rb{ctx, 3}; |
| 147 | rb.Push(RESULT_SUCCESS); | 163 | rb.Push(RESULT_SUCCESS); |
| @@ -155,6 +171,7 @@ void HwOpus::OpenOpusDecoder(Kernel::HLERequestContext& ctx) { | |||
| 155 | auto buffer_sz = rp.Pop<u32>(); | 171 | auto buffer_sz = rp.Pop<u32>(); |
| 156 | LOG_DEBUG(Audio, "called sample_rate={}, channel_count={}, buffer_size={}", sample_rate, | 172 | LOG_DEBUG(Audio, "called sample_rate={}, channel_count={}, buffer_size={}", sample_rate, |
| 157 | channel_count, buffer_sz); | 173 | channel_count, buffer_sz); |
| 174 | |||
| 158 | ASSERT_MSG(sample_rate == 48000 || sample_rate == 24000 || sample_rate == 16000 || | 175 | ASSERT_MSG(sample_rate == 48000 || sample_rate == 24000 || sample_rate == 16000 || |
| 159 | sample_rate == 12000 || sample_rate == 8000, | 176 | sample_rate == 12000 || sample_rate == 8000, |
| 160 | "Invalid sample rate"); | 177 | "Invalid sample rate"); |
| @@ -165,6 +182,7 @@ void HwOpus::OpenOpusDecoder(Kernel::HLERequestContext& ctx) { | |||
| 165 | std::unique_ptr<OpusDecoder, OpusDeleter> decoder{ | 182 | std::unique_ptr<OpusDecoder, OpusDeleter> decoder{ |
| 166 | static_cast<OpusDecoder*>(operator new(worker_sz))}; | 183 | static_cast<OpusDecoder*>(operator new(worker_sz))}; |
| 167 | if (opus_decoder_init(decoder.get(), sample_rate, channel_count)) { | 184 | if (opus_decoder_init(decoder.get(), sample_rate, channel_count)) { |
| 185 | LOG_ERROR(Audio, "Failed to init opus decoder"); | ||
| 168 | IPC::ResponseBuilder rb{ctx, 2}; | 186 | IPC::ResponseBuilder rb{ctx, 2}; |
| 169 | // TODO(ogniK): Use correct error code | 187 | // TODO(ogniK): Use correct error code |
| 170 | rb.Push(ResultCode(-1)); | 188 | rb.Push(ResultCode(-1)); |
diff --git a/src/core/hle/service/bcat/module.cpp b/src/core/hle/service/bcat/module.cpp index 6e7b795fb..b7bd738fc 100644 --- a/src/core/hle/service/bcat/module.cpp +++ b/src/core/hle/service/bcat/module.cpp | |||
| @@ -33,10 +33,11 @@ public: | |||
| 33 | }; | 33 | }; |
| 34 | 34 | ||
| 35 | void Module::Interface::CreateBcatService(Kernel::HLERequestContext& ctx) { | 35 | void Module::Interface::CreateBcatService(Kernel::HLERequestContext& ctx) { |
| 36 | LOG_DEBUG(Service_BCAT, "called"); | ||
| 37 | |||
| 36 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 38 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 37 | rb.Push(RESULT_SUCCESS); | 39 | rb.Push(RESULT_SUCCESS); |
| 38 | rb.PushIpcInterface<IBcatService>(); | 40 | rb.PushIpcInterface<IBcatService>(); |
| 39 | LOG_DEBUG(Service_BCAT, "called"); | ||
| 40 | } | 41 | } |
| 41 | 42 | ||
| 42 | Module::Interface::Interface(std::shared_ptr<Module> module, const char* name) | 43 | Module::Interface::Interface(std::shared_ptr<Module> module, const char* name) |
diff --git a/src/core/hle/service/btdrv/btdrv.cpp b/src/core/hle/service/btdrv/btdrv.cpp index f3bde6d0d..2eadcdd05 100644 --- a/src/core/hle/service/btdrv/btdrv.cpp +++ b/src/core/hle/service/btdrv/btdrv.cpp | |||
| @@ -34,13 +34,14 @@ public: | |||
| 34 | 34 | ||
| 35 | private: | 35 | private: |
| 36 | void RegisterEvent(Kernel::HLERequestContext& ctx) { | 36 | void RegisterEvent(Kernel::HLERequestContext& ctx) { |
| 37 | LOG_WARNING(Service_BTM, "(STUBBED) called"); | ||
| 38 | |||
| 37 | auto& kernel = Core::System::GetInstance().Kernel(); | 39 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 38 | register_event = | 40 | register_event = |
| 39 | Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "BT:RegisterEvent"); | 41 | Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "BT:RegisterEvent"); |
| 40 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 42 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 41 | rb.Push(RESULT_SUCCESS); | 43 | rb.Push(RESULT_SUCCESS); |
| 42 | rb.PushCopyObjects(register_event); | 44 | rb.PushCopyObjects(register_event); |
| 43 | LOG_WARNING(Service_BTM, "(STUBBED) called"); | ||
| 44 | } | 45 | } |
| 45 | Kernel::SharedPtr<Kernel::Event> register_event; | 46 | Kernel::SharedPtr<Kernel::Event> register_event; |
| 46 | }; | 47 | }; |
diff --git a/src/core/hle/service/btm/btm.cpp b/src/core/hle/service/btm/btm.cpp index a02f6b53a..463a79351 100644 --- a/src/core/hle/service/btm/btm.cpp +++ b/src/core/hle/service/btm/btm.cpp | |||
| @@ -57,40 +57,44 @@ public: | |||
| 57 | 57 | ||
| 58 | private: | 58 | private: |
| 59 | void GetScanEvent(Kernel::HLERequestContext& ctx) { | 59 | void GetScanEvent(Kernel::HLERequestContext& ctx) { |
| 60 | LOG_WARNING(Service_BTM, "(STUBBED) called"); | ||
| 61 | |||
| 60 | auto& kernel = Core::System::GetInstance().Kernel(); | 62 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 61 | scan_event = | 63 | scan_event = |
| 62 | Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "IBtmUserCore:ScanEvent"); | 64 | Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "IBtmUserCore:ScanEvent"); |
| 63 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 65 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 64 | rb.Push(RESULT_SUCCESS); | 66 | rb.Push(RESULT_SUCCESS); |
| 65 | rb.PushCopyObjects(scan_event); | 67 | rb.PushCopyObjects(scan_event); |
| 66 | LOG_WARNING(Service_BTM, "(STUBBED) called"); | ||
| 67 | } | 68 | } |
| 68 | void GetConnectionEvent(Kernel::HLERequestContext& ctx) { | 69 | void GetConnectionEvent(Kernel::HLERequestContext& ctx) { |
| 70 | LOG_WARNING(Service_BTM, "(STUBBED) called"); | ||
| 71 | |||
| 69 | auto& kernel = Core::System::GetInstance().Kernel(); | 72 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 70 | connection_event = Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, | 73 | connection_event = Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, |
| 71 | "IBtmUserCore:ConnectionEvent"); | 74 | "IBtmUserCore:ConnectionEvent"); |
| 72 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 75 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 73 | rb.Push(RESULT_SUCCESS); | 76 | rb.Push(RESULT_SUCCESS); |
| 74 | rb.PushCopyObjects(connection_event); | 77 | rb.PushCopyObjects(connection_event); |
| 75 | LOG_WARNING(Service_BTM, "(STUBBED) called"); | ||
| 76 | } | 78 | } |
| 77 | void GetDiscoveryEvent(Kernel::HLERequestContext& ctx) { | 79 | void GetDiscoveryEvent(Kernel::HLERequestContext& ctx) { |
| 80 | LOG_WARNING(Service_BTM, "(STUBBED) called"); | ||
| 81 | |||
| 78 | auto& kernel = Core::System::GetInstance().Kernel(); | 82 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 79 | service_discovery = | 83 | service_discovery = |
| 80 | Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "IBtmUserCore:Discovery"); | 84 | Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "IBtmUserCore:Discovery"); |
| 81 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 85 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 82 | rb.Push(RESULT_SUCCESS); | 86 | rb.Push(RESULT_SUCCESS); |
| 83 | rb.PushCopyObjects(service_discovery); | 87 | rb.PushCopyObjects(service_discovery); |
| 84 | LOG_WARNING(Service_BTM, "(STUBBED) called"); | ||
| 85 | } | 88 | } |
| 86 | void GetConfigEvent(Kernel::HLERequestContext& ctx) { | 89 | void GetConfigEvent(Kernel::HLERequestContext& ctx) { |
| 90 | LOG_WARNING(Service_BTM, "(STUBBED) called"); | ||
| 91 | |||
| 87 | auto& kernel = Core::System::GetInstance().Kernel(); | 92 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 88 | config_event = | 93 | config_event = |
| 89 | Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "IBtmUserCore:ConfigEvent"); | 94 | Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "IBtmUserCore:ConfigEvent"); |
| 90 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 95 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 91 | rb.Push(RESULT_SUCCESS); | 96 | rb.Push(RESULT_SUCCESS); |
| 92 | rb.PushCopyObjects(config_event); | 97 | rb.PushCopyObjects(config_event); |
| 93 | LOG_WARNING(Service_BTM, "(STUBBED) called"); | ||
| 94 | } | 98 | } |
| 95 | Kernel::SharedPtr<Kernel::Event> scan_event; | 99 | Kernel::SharedPtr<Kernel::Event> scan_event; |
| 96 | Kernel::SharedPtr<Kernel::Event> connection_event; | 100 | Kernel::SharedPtr<Kernel::Event> connection_event; |
| @@ -111,10 +115,11 @@ public: | |||
| 111 | 115 | ||
| 112 | private: | 116 | private: |
| 113 | void GetCoreImpl(Kernel::HLERequestContext& ctx) { | 117 | void GetCoreImpl(Kernel::HLERequestContext& ctx) { |
| 118 | LOG_DEBUG(Service_BTM, "called"); | ||
| 119 | |||
| 114 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 120 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 115 | rb.Push(RESULT_SUCCESS); | 121 | rb.Push(RESULT_SUCCESS); |
| 116 | rb.PushIpcInterface<IBtmUserCore>(); | 122 | rb.PushIpcInterface<IBtmUserCore>(); |
| 117 | LOG_DEBUG(Service_BTM, "called"); | ||
| 118 | } | 123 | } |
| 119 | }; | 124 | }; |
| 120 | 125 | ||
| @@ -209,11 +214,11 @@ public: | |||
| 209 | 214 | ||
| 210 | private: | 215 | private: |
| 211 | void GetCoreImpl(Kernel::HLERequestContext& ctx) { | 216 | void GetCoreImpl(Kernel::HLERequestContext& ctx) { |
| 217 | LOG_DEBUG(Service_BTM, "called"); | ||
| 218 | |||
| 212 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 219 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 213 | rb.Push(RESULT_SUCCESS); | 220 | rb.Push(RESULT_SUCCESS); |
| 214 | rb.PushIpcInterface<IBtmSystemCore>(); | 221 | rb.PushIpcInterface<IBtmSystemCore>(); |
| 215 | |||
| 216 | LOG_DEBUG(Service_BTM, "called"); | ||
| 217 | } | 222 | } |
| 218 | }; | 223 | }; |
| 219 | 224 | ||
diff --git a/src/core/hle/service/fgm/fgm.cpp b/src/core/hle/service/fgm/fgm.cpp index 566fbf924..e461274c1 100644 --- a/src/core/hle/service/fgm/fgm.cpp +++ b/src/core/hle/service/fgm/fgm.cpp | |||
| @@ -42,11 +42,11 @@ public: | |||
| 42 | 42 | ||
| 43 | private: | 43 | private: |
| 44 | void Initialize(Kernel::HLERequestContext& ctx) { | 44 | void Initialize(Kernel::HLERequestContext& ctx) { |
| 45 | LOG_DEBUG(Service_FGM, "called"); | ||
| 46 | |||
| 45 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 47 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 46 | rb.Push(RESULT_SUCCESS); | 48 | rb.Push(RESULT_SUCCESS); |
| 47 | rb.PushIpcInterface<IRequest>(); | 49 | rb.PushIpcInterface<IRequest>(); |
| 48 | |||
| 49 | LOG_DEBUG(Service_FGM, "called"); | ||
| 50 | } | 50 | } |
| 51 | }; | 51 | }; |
| 52 | 52 | ||
diff --git a/src/core/hle/service/filesystem/fsp_srv.cpp b/src/core/hle/service/filesystem/fsp_srv.cpp index 038dc80b1..233cb302f 100644 --- a/src/core/hle/service/filesystem/fsp_srv.cpp +++ b/src/core/hle/service/filesystem/fsp_srv.cpp | |||
| @@ -62,11 +62,13 @@ private: | |||
| 62 | 62 | ||
| 63 | // Error checking | 63 | // Error checking |
| 64 | if (length < 0) { | 64 | if (length < 0) { |
| 65 | LOG_ERROR(Service_FS, "Invalid length provided"); | ||
| 65 | IPC::ResponseBuilder rb{ctx, 2}; | 66 | IPC::ResponseBuilder rb{ctx, 2}; |
| 66 | rb.Push(FileSys::ERROR_INVALID_SIZE); | 67 | rb.Push(FileSys::ERROR_INVALID_SIZE); |
| 67 | return; | 68 | return; |
| 68 | } | 69 | } |
| 69 | if (offset < 0) { | 70 | if (offset < 0) { |
| 71 | LOG_ERROR(Service_FS, "Invalid offset provided"); | ||
| 70 | IPC::ResponseBuilder rb{ctx, 2}; | 72 | IPC::ResponseBuilder rb{ctx, 2}; |
| 71 | rb.Push(FileSys::ERROR_INVALID_OFFSET); | 73 | rb.Push(FileSys::ERROR_INVALID_OFFSET); |
| 72 | return; | 74 | return; |
| @@ -107,11 +109,13 @@ private: | |||
| 107 | 109 | ||
| 108 | // Error checking | 110 | // Error checking |
| 109 | if (length < 0) { | 111 | if (length < 0) { |
| 112 | LOG_ERROR(Service_FS, "Invalid length provided"); | ||
| 110 | IPC::ResponseBuilder rb{ctx, 2}; | 113 | IPC::ResponseBuilder rb{ctx, 2}; |
| 111 | rb.Push(FileSys::ERROR_INVALID_SIZE); | 114 | rb.Push(FileSys::ERROR_INVALID_SIZE); |
| 112 | return; | 115 | return; |
| 113 | } | 116 | } |
| 114 | if (offset < 0) { | 117 | if (offset < 0) { |
| 118 | LOG_ERROR(Service_FS, "Invalid offset provided"); | ||
| 115 | IPC::ResponseBuilder rb{ctx, 2}; | 119 | IPC::ResponseBuilder rb{ctx, 2}; |
| 116 | rb.Push(FileSys::ERROR_INVALID_OFFSET); | 120 | rb.Push(FileSys::ERROR_INVALID_OFFSET); |
| 117 | return; | 121 | return; |
| @@ -138,11 +142,13 @@ private: | |||
| 138 | 142 | ||
| 139 | // Error checking | 143 | // Error checking |
| 140 | if (length < 0) { | 144 | if (length < 0) { |
| 145 | LOG_ERROR(Service_FS, "Invalid length provided"); | ||
| 141 | IPC::ResponseBuilder rb{ctx, 2}; | 146 | IPC::ResponseBuilder rb{ctx, 2}; |
| 142 | rb.Push(FileSys::ERROR_INVALID_SIZE); | 147 | rb.Push(FileSys::ERROR_INVALID_SIZE); |
| 143 | return; | 148 | return; |
| 144 | } | 149 | } |
| 145 | if (offset < 0) { | 150 | if (offset < 0) { |
| 151 | LOG_ERROR(Service_FS, "Invalid offset provided"); | ||
| 146 | IPC::ResponseBuilder rb{ctx, 2}; | 152 | IPC::ResponseBuilder rb{ctx, 2}; |
| 147 | rb.Push(FileSys::ERROR_INVALID_OFFSET); | 153 | rb.Push(FileSys::ERROR_INVALID_OFFSET); |
| 148 | return; | 154 | return; |
| @@ -180,9 +186,10 @@ private: | |||
| 180 | void SetSize(Kernel::HLERequestContext& ctx) { | 186 | void SetSize(Kernel::HLERequestContext& ctx) { |
| 181 | IPC::RequestParser rp{ctx}; | 187 | IPC::RequestParser rp{ctx}; |
| 182 | const u64 size = rp.Pop<u64>(); | 188 | const u64 size = rp.Pop<u64>(); |
| 183 | backend->Resize(size); | ||
| 184 | LOG_DEBUG(Service_FS, "called, size={}", size); | 189 | LOG_DEBUG(Service_FS, "called, size={}", size); |
| 185 | 190 | ||
| 191 | backend->Resize(size); | ||
| 192 | |||
| 186 | IPC::ResponseBuilder rb{ctx, 2}; | 193 | IPC::ResponseBuilder rb{ctx, 2}; |
| 187 | rb.Push(RESULT_SUCCESS); | 194 | rb.Push(RESULT_SUCCESS); |
| 188 | } | 195 | } |
| @@ -465,6 +472,8 @@ public: | |||
| 465 | } | 472 | } |
| 466 | 473 | ||
| 467 | void ReadSaveDataInfo(Kernel::HLERequestContext& ctx) { | 474 | void ReadSaveDataInfo(Kernel::HLERequestContext& ctx) { |
| 475 | LOG_DEBUG(Service_FS, "called"); | ||
| 476 | |||
| 468 | // Calculate how many entries we can fit in the output buffer | 477 | // Calculate how many entries we can fit in the output buffer |
| 469 | const u64 count_entries = ctx.GetWriteBufferSize() / sizeof(SaveDataInfo); | 478 | const u64 count_entries = ctx.GetWriteBufferSize() / sizeof(SaveDataInfo); |
| 470 | 479 | ||
| @@ -703,6 +712,8 @@ void FSP_SRV::OpenFileSystemWithPatch(Kernel::HLERequestContext& ctx) { | |||
| 703 | 712 | ||
| 704 | const auto type = rp.PopRaw<FileSystemType>(); | 713 | const auto type = rp.PopRaw<FileSystemType>(); |
| 705 | const auto title_id = rp.PopRaw<u64>(); | 714 | const auto title_id = rp.PopRaw<u64>(); |
| 715 | LOG_WARNING(Service_FS, "(STUBBED) called with type={}, title_id={:016X}", | ||
| 716 | static_cast<u8>(type), title_id); | ||
| 706 | 717 | ||
| 707 | IPC::ResponseBuilder rb{ctx, 2, 0, 0}; | 718 | IPC::ResponseBuilder rb{ctx, 2, 0, 0}; |
| 708 | rb.Push(ResultCode(-1)); | 719 | rb.Push(ResultCode(-1)); |
| @@ -738,6 +749,7 @@ void FSP_SRV::MountSaveData(Kernel::HLERequestContext& ctx) { | |||
| 738 | auto space_id = rp.PopRaw<FileSys::SaveDataSpaceId>(); | 749 | auto space_id = rp.PopRaw<FileSys::SaveDataSpaceId>(); |
| 739 | auto unk = rp.Pop<u32>(); | 750 | auto unk = rp.Pop<u32>(); |
| 740 | LOG_INFO(Service_FS, "called with unknown={:08X}", unk); | 751 | LOG_INFO(Service_FS, "called with unknown={:08X}", unk); |
| 752 | |||
| 741 | auto save_struct = rp.PopRaw<FileSys::SaveDataDescriptor>(); | 753 | auto save_struct = rp.PopRaw<FileSys::SaveDataDescriptor>(); |
| 742 | 754 | ||
| 743 | auto dir = OpenSaveData(space_id, save_struct); | 755 | auto dir = OpenSaveData(space_id, save_struct); |
| @@ -763,6 +775,7 @@ void FSP_SRV::OpenReadOnlySaveDataFileSystem(Kernel::HLERequestContext& ctx) { | |||
| 763 | void FSP_SRV::OpenSaveDataInfoReaderBySaveDataSpaceId(Kernel::HLERequestContext& ctx) { | 775 | void FSP_SRV::OpenSaveDataInfoReaderBySaveDataSpaceId(Kernel::HLERequestContext& ctx) { |
| 764 | IPC::RequestParser rp{ctx}; | 776 | IPC::RequestParser rp{ctx}; |
| 765 | const auto space = rp.PopRaw<FileSys::SaveDataSpaceId>(); | 777 | const auto space = rp.PopRaw<FileSys::SaveDataSpaceId>(); |
| 778 | LOG_INFO(Service_FS, "called, space={}", static_cast<u8>(space)); | ||
| 766 | 779 | ||
| 767 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 780 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 768 | rb.Push(RESULT_SUCCESS); | 781 | rb.Push(RESULT_SUCCESS); |
diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp index 46604887c..3b624a162 100644 --- a/src/core/hle/service/hid/controllers/npad.cpp +++ b/src/core/hle/service/hid/controllers/npad.cpp | |||
| @@ -524,6 +524,8 @@ void Controller_NPad::SetNpadMode(u32 npad_id, NPadAssignments assignment_mode) | |||
| 524 | 524 | ||
| 525 | void Controller_NPad::VibrateController(const std::vector<u32>& controller_ids, | 525 | void Controller_NPad::VibrateController(const std::vector<u32>& controller_ids, |
| 526 | const std::vector<Vibration>& vibrations) { | 526 | const std::vector<Vibration>& vibrations) { |
| 527 | LOG_WARNING(Service_HID, "(STUBBED) called"); | ||
| 528 | |||
| 527 | if (!can_controllers_vibrate) { | 529 | if (!can_controllers_vibrate) { |
| 528 | return; | 530 | return; |
| 529 | } | 531 | } |
| @@ -533,7 +535,6 @@ void Controller_NPad::VibrateController(const std::vector<u32>& controller_ids, | |||
| 533 | // TODO(ogniK): Vibrate the physical controller | 535 | // TODO(ogniK): Vibrate the physical controller |
| 534 | } | 536 | } |
| 535 | } | 537 | } |
| 536 | LOG_WARNING(Service_HID, "(STUBBED) called"); | ||
| 537 | last_processed_vibration = vibrations.back(); | 538 | last_processed_vibration = vibrations.back(); |
| 538 | } | 539 | } |
| 539 | 540 | ||
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index 7c0dac5dc..46496e9bb 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp | |||
| @@ -124,10 +124,11 @@ public: | |||
| 124 | 124 | ||
| 125 | private: | 125 | private: |
| 126 | void GetSharedMemoryHandle(Kernel::HLERequestContext& ctx) { | 126 | void GetSharedMemoryHandle(Kernel::HLERequestContext& ctx) { |
| 127 | LOG_DEBUG(Service_HID, "called"); | ||
| 128 | |||
| 127 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 129 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 128 | rb.Push(RESULT_SUCCESS); | 130 | rb.Push(RESULT_SUCCESS); |
| 129 | rb.PushCopyObjects(shared_mem); | 131 | rb.PushCopyObjects(shared_mem); |
| 130 | LOG_DEBUG(Service_HID, "called"); | ||
| 131 | } | 132 | } |
| 132 | 133 | ||
| 133 | void UpdateControllers(u64 userdata, int cycles_late) { | 134 | void UpdateControllers(u64 userdata, int cycles_late) { |
| @@ -163,9 +164,10 @@ public: | |||
| 163 | 164 | ||
| 164 | private: | 165 | private: |
| 165 | void ActivateVibrationDevice(Kernel::HLERequestContext& ctx) { | 166 | void ActivateVibrationDevice(Kernel::HLERequestContext& ctx) { |
| 167 | LOG_WARNING(Service_HID, "(STUBBED) called"); | ||
| 168 | |||
| 166 | IPC::ResponseBuilder rb{ctx, 2}; | 169 | IPC::ResponseBuilder rb{ctx, 2}; |
| 167 | rb.Push(RESULT_SUCCESS); | 170 | rb.Push(RESULT_SUCCESS); |
| 168 | LOG_WARNING(Service_HID, "(STUBBED) called"); | ||
| 169 | } | 171 | } |
| 170 | }; | 172 | }; |
| 171 | 173 | ||
| @@ -303,6 +305,8 @@ private: | |||
| 303 | std::shared_ptr<IAppletResource> applet_resource; | 305 | std::shared_ptr<IAppletResource> applet_resource; |
| 304 | 306 | ||
| 305 | void CreateAppletResource(Kernel::HLERequestContext& ctx) { | 307 | void CreateAppletResource(Kernel::HLERequestContext& ctx) { |
| 308 | LOG_DEBUG(Service_HID, "called"); | ||
| 309 | |||
| 306 | if (applet_resource == nullptr) { | 310 | if (applet_resource == nullptr) { |
| 307 | applet_resource = std::make_shared<IAppletResource>(); | 311 | applet_resource = std::make_shared<IAppletResource>(); |
| 308 | } | 312 | } |
| @@ -310,206 +314,228 @@ private: | |||
| 310 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 314 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 311 | rb.Push(RESULT_SUCCESS); | 315 | rb.Push(RESULT_SUCCESS); |
| 312 | rb.PushIpcInterface<IAppletResource>(applet_resource); | 316 | rb.PushIpcInterface<IAppletResource>(applet_resource); |
| 313 | LOG_DEBUG(Service_HID, "called"); | ||
| 314 | } | 317 | } |
| 315 | 318 | ||
| 316 | void ActivateXpad(Kernel::HLERequestContext& ctx) { | 319 | void ActivateXpad(Kernel::HLERequestContext& ctx) { |
| 320 | LOG_DEBUG(Service_HID, "called"); | ||
| 321 | |||
| 317 | applet_resource->ActivateController(HidController::XPad); | 322 | applet_resource->ActivateController(HidController::XPad); |
| 318 | IPC::ResponseBuilder rb{ctx, 2}; | 323 | IPC::ResponseBuilder rb{ctx, 2}; |
| 319 | rb.Push(RESULT_SUCCESS); | 324 | rb.Push(RESULT_SUCCESS); |
| 320 | LOG_DEBUG(Service_HID, "called"); | ||
| 321 | } | 325 | } |
| 322 | 326 | ||
| 323 | void ActivateDebugPad(Kernel::HLERequestContext& ctx) { | 327 | void ActivateDebugPad(Kernel::HLERequestContext& ctx) { |
| 328 | LOG_DEBUG(Service_HID, "called"); | ||
| 329 | |||
| 324 | applet_resource->ActivateController(HidController::DebugPad); | 330 | applet_resource->ActivateController(HidController::DebugPad); |
| 325 | IPC::ResponseBuilder rb{ctx, 2}; | 331 | IPC::ResponseBuilder rb{ctx, 2}; |
| 326 | rb.Push(RESULT_SUCCESS); | 332 | rb.Push(RESULT_SUCCESS); |
| 327 | LOG_DEBUG(Service_HID, "called"); | ||
| 328 | } | 333 | } |
| 329 | 334 | ||
| 330 | void ActivateTouchScreen(Kernel::HLERequestContext& ctx) { | 335 | void ActivateTouchScreen(Kernel::HLERequestContext& ctx) { |
| 336 | LOG_DEBUG(Service_HID, "called"); | ||
| 337 | |||
| 331 | applet_resource->ActivateController(HidController::Touchscreen); | 338 | applet_resource->ActivateController(HidController::Touchscreen); |
| 332 | IPC::ResponseBuilder rb{ctx, 2}; | 339 | IPC::ResponseBuilder rb{ctx, 2}; |
| 333 | rb.Push(RESULT_SUCCESS); | 340 | rb.Push(RESULT_SUCCESS); |
| 334 | LOG_DEBUG(Service_HID, "called"); | ||
| 335 | } | 341 | } |
| 336 | 342 | ||
| 337 | void ActivateMouse(Kernel::HLERequestContext& ctx) { | 343 | void ActivateMouse(Kernel::HLERequestContext& ctx) { |
| 344 | LOG_DEBUG(Service_HID, "called"); | ||
| 345 | |||
| 338 | applet_resource->ActivateController(HidController::Mouse); | 346 | applet_resource->ActivateController(HidController::Mouse); |
| 339 | IPC::ResponseBuilder rb{ctx, 2}; | 347 | IPC::ResponseBuilder rb{ctx, 2}; |
| 340 | rb.Push(RESULT_SUCCESS); | 348 | rb.Push(RESULT_SUCCESS); |
| 341 | LOG_DEBUG(Service_HID, "called"); | ||
| 342 | } | 349 | } |
| 343 | 350 | ||
| 344 | void ActivateKeyboard(Kernel::HLERequestContext& ctx) { | 351 | void ActivateKeyboard(Kernel::HLERequestContext& ctx) { |
| 352 | LOG_DEBUG(Service_HID, "called"); | ||
| 353 | |||
| 345 | applet_resource->ActivateController(HidController::Keyboard); | 354 | applet_resource->ActivateController(HidController::Keyboard); |
| 346 | IPC::ResponseBuilder rb{ctx, 2}; | 355 | IPC::ResponseBuilder rb{ctx, 2}; |
| 347 | rb.Push(RESULT_SUCCESS); | 356 | rb.Push(RESULT_SUCCESS); |
| 348 | LOG_DEBUG(Service_HID, "called"); | ||
| 349 | } | 357 | } |
| 350 | 358 | ||
| 351 | void ActivateGesture(Kernel::HLERequestContext& ctx) { | 359 | void ActivateGesture(Kernel::HLERequestContext& ctx) { |
| 360 | LOG_DEBUG(Service_HID, "called"); | ||
| 361 | |||
| 352 | applet_resource->ActivateController(HidController::Gesture); | 362 | applet_resource->ActivateController(HidController::Gesture); |
| 353 | IPC::ResponseBuilder rb{ctx, 2}; | 363 | IPC::ResponseBuilder rb{ctx, 2}; |
| 354 | rb.Push(RESULT_SUCCESS); | 364 | rb.Push(RESULT_SUCCESS); |
| 355 | LOG_DEBUG(Service_HID, "called"); | ||
| 356 | } | 365 | } |
| 357 | 366 | ||
| 358 | void ActivateNpadWithRevision(Kernel::HLERequestContext& ctx) { | 367 | void ActivateNpadWithRevision(Kernel::HLERequestContext& ctx) { |
| 359 | // Should have no effect with how our npad sets up the data | 368 | // Should have no effect with how our npad sets up the data |
| 369 | LOG_DEBUG(Service_HID, "called"); | ||
| 370 | |||
| 360 | applet_resource->ActivateController(HidController::NPad); | 371 | applet_resource->ActivateController(HidController::NPad); |
| 361 | IPC::ResponseBuilder rb{ctx, 2}; | 372 | IPC::ResponseBuilder rb{ctx, 2}; |
| 362 | rb.Push(RESULT_SUCCESS); | 373 | rb.Push(RESULT_SUCCESS); |
| 363 | LOG_DEBUG(Service_HID, "called"); | ||
| 364 | } | 374 | } |
| 365 | 375 | ||
| 366 | void StartSixAxisSensor(Kernel::HLERequestContext& ctx) { | 376 | void StartSixAxisSensor(Kernel::HLERequestContext& ctx) { |
| 367 | IPC::RequestParser rp{ctx}; | 377 | IPC::RequestParser rp{ctx}; |
| 368 | auto handle = rp.PopRaw<u32>(); | 378 | auto handle = rp.PopRaw<u32>(); |
| 379 | LOG_WARNING(Service_HID, "(STUBBED) called with handle={}", handle); | ||
| 380 | |||
| 369 | IPC::ResponseBuilder rb{ctx, 2}; | 381 | IPC::ResponseBuilder rb{ctx, 2}; |
| 370 | rb.Push(RESULT_SUCCESS); | 382 | rb.Push(RESULT_SUCCESS); |
| 371 | LOG_WARNING(Service_HID, "(STUBBED) called"); | ||
| 372 | } | 383 | } |
| 373 | 384 | ||
| 374 | void SetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx) { | 385 | void SetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx) { |
| 386 | LOG_WARNING(Service_HID, "(STUBBED) called"); | ||
| 387 | |||
| 375 | IPC::ResponseBuilder rb{ctx, 2}; | 388 | IPC::ResponseBuilder rb{ctx, 2}; |
| 376 | rb.Push(RESULT_SUCCESS); | 389 | rb.Push(RESULT_SUCCESS); |
| 377 | LOG_WARNING(Service_HID, "(STUBBED) called"); | ||
| 378 | } | 390 | } |
| 379 | 391 | ||
| 380 | void IsSixAxisSensorAtRest(Kernel::HLERequestContext& ctx) { | 392 | void IsSixAxisSensorAtRest(Kernel::HLERequestContext& ctx) { |
| 393 | LOG_WARNING(Service_HID, "(STUBBED) called"); | ||
| 394 | |||
| 381 | IPC::ResponseBuilder rb{ctx, 3}; | 395 | IPC::ResponseBuilder rb{ctx, 3}; |
| 382 | rb.Push(RESULT_SUCCESS); | 396 | rb.Push(RESULT_SUCCESS); |
| 383 | // TODO (Hexagon12): Properly implement reading gyroscope values from controllers. | 397 | // TODO (Hexagon12): Properly implement reading gyroscope values from controllers. |
| 384 | rb.Push(true); | 398 | rb.Push(true); |
| 385 | LOG_WARNING(Service_HID, "(STUBBED) called"); | ||
| 386 | } | 399 | } |
| 387 | 400 | ||
| 388 | void SetSupportedNpadStyleSet(Kernel::HLERequestContext& ctx) { | 401 | void SetSupportedNpadStyleSet(Kernel::HLERequestContext& ctx) { |
| 389 | IPC::RequestParser rp{ctx}; | 402 | IPC::RequestParser rp{ctx}; |
| 390 | auto supported_styleset = rp.PopRaw<u32>(); | 403 | auto supported_styleset = rp.PopRaw<u32>(); |
| 404 | LOG_DEBUG(Service_HID, "called with supported_styleset={}", supported_styleset); | ||
| 405 | |||
| 391 | applet_resource->GetController<Controller_NPad>(HidController::NPad) | 406 | applet_resource->GetController<Controller_NPad>(HidController::NPad) |
| 392 | .SetSupportedStyleSet({supported_styleset}); | 407 | .SetSupportedStyleSet({supported_styleset}); |
| 393 | 408 | ||
| 394 | IPC::ResponseBuilder rb{ctx, 2}; | 409 | IPC::ResponseBuilder rb{ctx, 2}; |
| 395 | rb.Push(RESULT_SUCCESS); | 410 | rb.Push(RESULT_SUCCESS); |
| 396 | |||
| 397 | LOG_DEBUG(Service_HID, "called"); | ||
| 398 | } | 411 | } |
| 399 | 412 | ||
| 400 | void GetSupportedNpadStyleSet(Kernel::HLERequestContext& ctx) { | 413 | void GetSupportedNpadStyleSet(Kernel::HLERequestContext& ctx) { |
| 414 | LOG_DEBUG(Service_HID, "called"); | ||
| 415 | |||
| 401 | auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | 416 | auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); |
| 402 | 417 | ||
| 403 | IPC::ResponseBuilder rb{ctx, 3}; | 418 | IPC::ResponseBuilder rb{ctx, 3}; |
| 404 | rb.Push(RESULT_SUCCESS); | 419 | rb.Push(RESULT_SUCCESS); |
| 405 | rb.Push<u32>(controller.GetSupportedStyleSet().raw); | 420 | rb.Push<u32>(controller.GetSupportedStyleSet().raw); |
| 406 | LOG_DEBUG(Service_HID, "called"); | ||
| 407 | } | 421 | } |
| 408 | 422 | ||
| 409 | void SetSupportedNpadIdType(Kernel::HLERequestContext& ctx) { | 423 | void SetSupportedNpadIdType(Kernel::HLERequestContext& ctx) { |
| 424 | LOG_DEBUG(Service_HID, "called"); | ||
| 425 | |||
| 410 | applet_resource->GetController<Controller_NPad>(HidController::NPad) | 426 | applet_resource->GetController<Controller_NPad>(HidController::NPad) |
| 411 | .SetSupportedNPadIdTypes(ctx.ReadBuffer().data(), ctx.GetReadBufferSize()); | 427 | .SetSupportedNPadIdTypes(ctx.ReadBuffer().data(), ctx.GetReadBufferSize()); |
| 412 | IPC::ResponseBuilder rb{ctx, 2}; | 428 | IPC::ResponseBuilder rb{ctx, 2}; |
| 413 | rb.Push(RESULT_SUCCESS); | 429 | rb.Push(RESULT_SUCCESS); |
| 414 | LOG_DEBUG(Service_HID, "called"); | ||
| 415 | } | 430 | } |
| 416 | 431 | ||
| 417 | void ActivateNpad(Kernel::HLERequestContext& ctx) { | 432 | void ActivateNpad(Kernel::HLERequestContext& ctx) { |
| 433 | LOG_DEBUG(Service_HID, "called"); | ||
| 434 | |||
| 418 | IPC::ResponseBuilder rb{ctx, 2}; | 435 | IPC::ResponseBuilder rb{ctx, 2}; |
| 419 | rb.Push(RESULT_SUCCESS); | 436 | rb.Push(RESULT_SUCCESS); |
| 420 | applet_resource->ActivateController(HidController::NPad); | 437 | applet_resource->ActivateController(HidController::NPad); |
| 421 | LOG_DEBUG(Service_HID, "called"); | ||
| 422 | } | 438 | } |
| 423 | 439 | ||
| 424 | void AcquireNpadStyleSetUpdateEventHandle(Kernel::HLERequestContext& ctx) { | 440 | void AcquireNpadStyleSetUpdateEventHandle(Kernel::HLERequestContext& ctx) { |
| 425 | IPC::RequestParser rp{ctx}; | 441 | IPC::RequestParser rp{ctx}; |
| 426 | auto npad_id = rp.PopRaw<u32>(); | 442 | auto npad_id = rp.PopRaw<u32>(); |
| 443 | LOG_DEBUG(Service_HID, "called with npad_id={}", npad_id); | ||
| 444 | |||
| 427 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 445 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 428 | rb.Push(RESULT_SUCCESS); | 446 | rb.Push(RESULT_SUCCESS); |
| 429 | rb.PushCopyObjects(applet_resource->GetController<Controller_NPad>(HidController::NPad) | 447 | rb.PushCopyObjects(applet_resource->GetController<Controller_NPad>(HidController::NPad) |
| 430 | .GetStyleSetChangedEvent()); | 448 | .GetStyleSetChangedEvent()); |
| 431 | LOG_DEBUG(Service_HID, "called"); | ||
| 432 | } | 449 | } |
| 433 | 450 | ||
| 434 | void DisconnectNpad(Kernel::HLERequestContext& ctx) { | 451 | void DisconnectNpad(Kernel::HLERequestContext& ctx) { |
| 435 | IPC::RequestParser rp{ctx}; | 452 | IPC::RequestParser rp{ctx}; |
| 436 | auto npad_id = rp.PopRaw<u32>(); | 453 | auto npad_id = rp.PopRaw<u32>(); |
| 454 | LOG_DEBUG(Service_HID, "called with npad_id={}", npad_id); | ||
| 455 | |||
| 437 | applet_resource->GetController<Controller_NPad>(HidController::NPad) | 456 | applet_resource->GetController<Controller_NPad>(HidController::NPad) |
| 438 | .DisconnectNPad(npad_id); | 457 | .DisconnectNPad(npad_id); |
| 439 | IPC::ResponseBuilder rb{ctx, 2}; | 458 | IPC::ResponseBuilder rb{ctx, 2}; |
| 440 | rb.Push(RESULT_SUCCESS); | 459 | rb.Push(RESULT_SUCCESS); |
| 441 | LOG_DEBUG(Service_HID, "called"); | ||
| 442 | } | 460 | } |
| 443 | 461 | ||
| 444 | void GetPlayerLedPattern(Kernel::HLERequestContext& ctx) { | 462 | void GetPlayerLedPattern(Kernel::HLERequestContext& ctx) { |
| 445 | IPC::RequestParser rp{ctx}; | 463 | IPC::RequestParser rp{ctx}; |
| 446 | auto npad_id = rp.PopRaw<u32>(); | 464 | auto npad_id = rp.PopRaw<u32>(); |
| 465 | LOG_DEBUG(Service_HID, "called with npad_id={}", npad_id); | ||
| 466 | |||
| 447 | IPC::ResponseBuilder rb{ctx, 4}; | 467 | IPC::ResponseBuilder rb{ctx, 4}; |
| 448 | rb.Push(RESULT_SUCCESS); | 468 | rb.Push(RESULT_SUCCESS); |
| 449 | rb.PushRaw<u64>(applet_resource->GetController<Controller_NPad>(HidController::NPad) | 469 | rb.PushRaw<u64>(applet_resource->GetController<Controller_NPad>(HidController::NPad) |
| 450 | .GetLedPattern(npad_id) | 470 | .GetLedPattern(npad_id) |
| 451 | .raw); | 471 | .raw); |
| 452 | LOG_DEBUG(Service_HID, "called"); | ||
| 453 | } | 472 | } |
| 454 | 473 | ||
| 455 | void SetNpadJoyHoldType(Kernel::HLERequestContext& ctx) { | 474 | void SetNpadJoyHoldType(Kernel::HLERequestContext& ctx) { |
| 456 | auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||
| 457 | IPC::RequestParser rp{ctx}; | 475 | IPC::RequestParser rp{ctx}; |
| 458 | const auto hold_type = rp.PopRaw<u64>(); | 476 | const auto hold_type = rp.PopRaw<u64>(); |
| 477 | LOG_DEBUG(Service_HID, "called with hold_type={}", hold_type); | ||
| 478 | |||
| 479 | auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||
| 459 | controller.SetHoldType(Controller_NPad::NpadHoldType{hold_type}); | 480 | controller.SetHoldType(Controller_NPad::NpadHoldType{hold_type}); |
| 460 | 481 | ||
| 461 | IPC::ResponseBuilder rb{ctx, 2}; | 482 | IPC::ResponseBuilder rb{ctx, 2}; |
| 462 | rb.Push(RESULT_SUCCESS); | 483 | rb.Push(RESULT_SUCCESS); |
| 463 | LOG_DEBUG(Service_HID, "called"); | ||
| 464 | } | 484 | } |
| 465 | 485 | ||
| 466 | void GetNpadJoyHoldType(Kernel::HLERequestContext& ctx) { | 486 | void GetNpadJoyHoldType(Kernel::HLERequestContext& ctx) { |
| 487 | LOG_DEBUG(Service_HID, "called"); | ||
| 488 | |||
| 467 | const auto& controller = | 489 | const auto& controller = |
| 468 | applet_resource->GetController<Controller_NPad>(HidController::NPad); | 490 | applet_resource->GetController<Controller_NPad>(HidController::NPad); |
| 469 | IPC::ResponseBuilder rb{ctx, 4}; | 491 | IPC::ResponseBuilder rb{ctx, 4}; |
| 470 | rb.Push(RESULT_SUCCESS); | 492 | rb.Push(RESULT_SUCCESS); |
| 471 | rb.Push<u64>(static_cast<u64>(controller.GetHoldType())); | 493 | rb.Push<u64>(static_cast<u64>(controller.GetHoldType())); |
| 472 | LOG_DEBUG(Service_HID, "called"); | ||
| 473 | } | 494 | } |
| 474 | 495 | ||
| 475 | void SetNpadJoyAssignmentModeSingleByDefault(Kernel::HLERequestContext& ctx) { | 496 | void SetNpadJoyAssignmentModeSingleByDefault(Kernel::HLERequestContext& ctx) { |
| 476 | IPC::RequestParser rp{ctx}; | 497 | IPC::RequestParser rp{ctx}; |
| 477 | auto npad_id = rp.PopRaw<u32>(); | 498 | auto npad_id = rp.PopRaw<u32>(); |
| 499 | LOG_WARNING(Service_HID, "(STUBBED) called with npad_id={}", npad_id); | ||
| 500 | |||
| 478 | IPC::ResponseBuilder rb{ctx, 2}; | 501 | IPC::ResponseBuilder rb{ctx, 2}; |
| 479 | rb.Push(RESULT_SUCCESS); | 502 | rb.Push(RESULT_SUCCESS); |
| 480 | LOG_WARNING(Service_HID, "(STUBBED) called"); | ||
| 481 | } | 503 | } |
| 482 | 504 | ||
| 483 | void BeginPermitVibrationSession(Kernel::HLERequestContext& ctx) { | 505 | void BeginPermitVibrationSession(Kernel::HLERequestContext& ctx) { |
| 506 | LOG_DEBUG(Service_HID, "called"); | ||
| 507 | |||
| 484 | applet_resource->GetController<Controller_NPad>(HidController::NPad) | 508 | applet_resource->GetController<Controller_NPad>(HidController::NPad) |
| 485 | .SetVibrationEnabled(true); | 509 | .SetVibrationEnabled(true); |
| 486 | IPC::ResponseBuilder rb{ctx, 2}; | 510 | IPC::ResponseBuilder rb{ctx, 2}; |
| 487 | rb.Push(RESULT_SUCCESS); | 511 | rb.Push(RESULT_SUCCESS); |
| 488 | LOG_DEBUG(Service_HID, "called"); | ||
| 489 | } | 512 | } |
| 490 | 513 | ||
| 491 | void EndPermitVibrationSession(Kernel::HLERequestContext& ctx) { | 514 | void EndPermitVibrationSession(Kernel::HLERequestContext& ctx) { |
| 515 | LOG_DEBUG(Service_HID, "called"); | ||
| 516 | |||
| 492 | applet_resource->GetController<Controller_NPad>(HidController::NPad) | 517 | applet_resource->GetController<Controller_NPad>(HidController::NPad) |
| 493 | .SetVibrationEnabled(false); | 518 | .SetVibrationEnabled(false); |
| 494 | IPC::ResponseBuilder rb{ctx, 2}; | 519 | IPC::ResponseBuilder rb{ctx, 2}; |
| 495 | rb.Push(RESULT_SUCCESS); | 520 | rb.Push(RESULT_SUCCESS); |
| 496 | LOG_DEBUG(Service_HID, "called"); | ||
| 497 | } | 521 | } |
| 498 | 522 | ||
| 499 | void SendVibrationValue(Kernel::HLERequestContext& ctx) { | 523 | void SendVibrationValue(Kernel::HLERequestContext& ctx) { |
| 500 | IPC::RequestParser rp{ctx}; | 524 | IPC::RequestParser rp{ctx}; |
| 501 | const auto controller_id = rp.PopRaw<u32>(); | 525 | const auto controller_id = rp.PopRaw<u32>(); |
| 502 | const auto vibration_values = rp.PopRaw<Controller_NPad::Vibration>(); | 526 | const auto vibration_values = rp.PopRaw<Controller_NPad::Vibration>(); |
| 527 | LOG_DEBUG(Service_HID, "called with controller_id={}", controller_id); | ||
| 503 | 528 | ||
| 504 | IPC::ResponseBuilder rb{ctx, 2}; | 529 | IPC::ResponseBuilder rb{ctx, 2}; |
| 505 | rb.Push(RESULT_SUCCESS); | 530 | rb.Push(RESULT_SUCCESS); |
| 506 | 531 | ||
| 507 | applet_resource->GetController<Controller_NPad>(HidController::NPad) | 532 | applet_resource->GetController<Controller_NPad>(HidController::NPad) |
| 508 | .VibrateController({controller_id}, {vibration_values}); | 533 | .VibrateController({controller_id}, {vibration_values}); |
| 509 | LOG_DEBUG(Service_HID, "called"); | ||
| 510 | } | 534 | } |
| 511 | 535 | ||
| 512 | void SendVibrationValues(Kernel::HLERequestContext& ctx) { | 536 | void SendVibrationValues(Kernel::HLERequestContext& ctx) { |
| 537 | LOG_DEBUG(Service_HID, "called"); | ||
| 538 | |||
| 513 | const auto controllers = ctx.ReadBuffer(0); | 539 | const auto controllers = ctx.ReadBuffer(0); |
| 514 | const auto vibrations = ctx.ReadBuffer(1); | 540 | const auto vibrations = ctx.ReadBuffer(1); |
| 515 | 541 | ||
| @@ -527,86 +553,96 @@ private: | |||
| 527 | 553 | ||
| 528 | IPC::ResponseBuilder rb{ctx, 2}; | 554 | IPC::ResponseBuilder rb{ctx, 2}; |
| 529 | rb.Push(RESULT_SUCCESS); | 555 | rb.Push(RESULT_SUCCESS); |
| 530 | LOG_DEBUG(Service_HID, "called"); | ||
| 531 | } | 556 | } |
| 532 | 557 | ||
| 533 | void GetActualVibrationValue(Kernel::HLERequestContext& ctx) { | 558 | void GetActualVibrationValue(Kernel::HLERequestContext& ctx) { |
| 559 | LOG_DEBUG(Service_HID, "called"); | ||
| 560 | |||
| 534 | IPC::ResponseBuilder rb{ctx, 6}; | 561 | IPC::ResponseBuilder rb{ctx, 6}; |
| 535 | rb.Push(RESULT_SUCCESS); | 562 | rb.Push(RESULT_SUCCESS); |
| 536 | rb.PushRaw<Controller_NPad::Vibration>( | 563 | rb.PushRaw<Controller_NPad::Vibration>( |
| 537 | applet_resource->GetController<Controller_NPad>(HidController::NPad) | 564 | applet_resource->GetController<Controller_NPad>(HidController::NPad) |
| 538 | .GetLastVibration()); | 565 | .GetLastVibration()); |
| 539 | LOG_DEBUG(Service_HID, "called"); | ||
| 540 | } | 566 | } |
| 541 | 567 | ||
| 542 | void SetNpadJoyAssignmentModeDual(Kernel::HLERequestContext& ctx) { | 568 | void SetNpadJoyAssignmentModeDual(Kernel::HLERequestContext& ctx) { |
| 543 | IPC::RequestParser rp{ctx}; | 569 | IPC::RequestParser rp{ctx}; |
| 544 | const auto npad_id = rp.PopRaw<u32>(); | 570 | const auto npad_id = rp.PopRaw<u32>(); |
| 571 | LOG_DEBUG(Service_HID, "called with npad_id={}", npad_id); | ||
| 572 | |||
| 545 | auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | 573 | auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); |
| 546 | controller.SetNpadMode(npad_id, Controller_NPad::NPadAssignments::Dual); | 574 | controller.SetNpadMode(npad_id, Controller_NPad::NPadAssignments::Dual); |
| 547 | 575 | ||
| 548 | IPC::ResponseBuilder rb{ctx, 2}; | 576 | IPC::ResponseBuilder rb{ctx, 2}; |
| 549 | rb.Push(RESULT_SUCCESS); | 577 | rb.Push(RESULT_SUCCESS); |
| 550 | LOG_DEBUG(Service_HID, "called"); | ||
| 551 | } | 578 | } |
| 552 | 579 | ||
| 553 | void MergeSingleJoyAsDualJoy(Kernel::HLERequestContext& ctx) { | 580 | void MergeSingleJoyAsDualJoy(Kernel::HLERequestContext& ctx) { |
| 581 | LOG_WARNING(Service_HID, "(STUBBED) called"); | ||
| 582 | |||
| 554 | IPC::ResponseBuilder rb{ctx, 2}; | 583 | IPC::ResponseBuilder rb{ctx, 2}; |
| 555 | rb.Push(RESULT_SUCCESS); | 584 | rb.Push(RESULT_SUCCESS); |
| 556 | LOG_WARNING(Service_HID, "(STUBBED) called"); | ||
| 557 | } | 585 | } |
| 558 | 586 | ||
| 559 | void SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx) { | 587 | void SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx) { |
| 560 | IPC::RequestParser rp{ctx}; | 588 | IPC::RequestParser rp{ctx}; |
| 561 | auto mode = rp.PopRaw<u32>(); | 589 | auto mode = rp.PopRaw<u32>(); |
| 590 | LOG_WARNING(Service_HID, "(STUBBED) called with mode={}", mode); | ||
| 591 | |||
| 562 | IPC::ResponseBuilder rb{ctx, 2}; | 592 | IPC::ResponseBuilder rb{ctx, 2}; |
| 563 | rb.Push(RESULT_SUCCESS); | 593 | rb.Push(RESULT_SUCCESS); |
| 564 | LOG_WARNING(Service_HID, "(STUBBED) called"); | ||
| 565 | } | 594 | } |
| 566 | 595 | ||
| 567 | void GetVibrationDeviceInfo(Kernel::HLERequestContext& ctx) { | 596 | void GetVibrationDeviceInfo(Kernel::HLERequestContext& ctx) { |
| 597 | LOG_DEBUG(Service_HID, "called"); | ||
| 598 | |||
| 568 | IPC::ResponseBuilder rb{ctx, 4}; | 599 | IPC::ResponseBuilder rb{ctx, 4}; |
| 569 | rb.Push(RESULT_SUCCESS); | 600 | rb.Push(RESULT_SUCCESS); |
| 570 | rb.Push<u32>(1); | 601 | rb.Push<u32>(1); |
| 571 | rb.Push<u32>(0); | 602 | rb.Push<u32>(0); |
| 572 | LOG_DEBUG(Service_HID, "called"); | ||
| 573 | } | 603 | } |
| 574 | 604 | ||
| 575 | void CreateActiveVibrationDeviceList(Kernel::HLERequestContext& ctx) { | 605 | void CreateActiveVibrationDeviceList(Kernel::HLERequestContext& ctx) { |
| 606 | LOG_DEBUG(Service_HID, "called"); | ||
| 607 | |||
| 576 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 608 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 577 | rb.Push(RESULT_SUCCESS); | 609 | rb.Push(RESULT_SUCCESS); |
| 578 | rb.PushIpcInterface<IActiveVibrationDeviceList>(); | 610 | rb.PushIpcInterface<IActiveVibrationDeviceList>(); |
| 579 | LOG_DEBUG(Service_HID, "called"); | ||
| 580 | } | 611 | } |
| 581 | 612 | ||
| 582 | void ActivateConsoleSixAxisSensor(Kernel::HLERequestContext& ctx) { | 613 | void ActivateConsoleSixAxisSensor(Kernel::HLERequestContext& ctx) { |
| 614 | LOG_WARNING(Service_HID, "(STUBBED) called"); | ||
| 615 | |||
| 583 | IPC::ResponseBuilder rb{ctx, 2}; | 616 | IPC::ResponseBuilder rb{ctx, 2}; |
| 584 | rb.Push(RESULT_SUCCESS); | 617 | rb.Push(RESULT_SUCCESS); |
| 585 | LOG_WARNING(Service_HID, "(STUBBED) called"); | ||
| 586 | } | 618 | } |
| 587 | 619 | ||
| 588 | void StartConsoleSixAxisSensor(Kernel::HLERequestContext& ctx) { | 620 | void StartConsoleSixAxisSensor(Kernel::HLERequestContext& ctx) { |
| 621 | LOG_WARNING(Service_HID, "(STUBBED) called"); | ||
| 622 | |||
| 589 | IPC::ResponseBuilder rb{ctx, 2}; | 623 | IPC::ResponseBuilder rb{ctx, 2}; |
| 590 | rb.Push(RESULT_SUCCESS); | 624 | rb.Push(RESULT_SUCCESS); |
| 591 | LOG_WARNING(Service_HID, "(STUBBED) called"); | ||
| 592 | } | 625 | } |
| 593 | 626 | ||
| 594 | void StopSixAxisSensor(Kernel::HLERequestContext& ctx) { | 627 | void StopSixAxisSensor(Kernel::HLERequestContext& ctx) { |
| 628 | LOG_WARNING(Service_HID, "(STUBBED) called"); | ||
| 629 | |||
| 595 | IPC::ResponseBuilder rb{ctx, 2}; | 630 | IPC::ResponseBuilder rb{ctx, 2}; |
| 596 | rb.Push(RESULT_SUCCESS); | 631 | rb.Push(RESULT_SUCCESS); |
| 597 | LOG_WARNING(Service_HID, "(STUBBED) called"); | ||
| 598 | } | 632 | } |
| 599 | 633 | ||
| 600 | void SetIsPalmaAllConnectable(Kernel::HLERequestContext& ctx) { | 634 | void SetIsPalmaAllConnectable(Kernel::HLERequestContext& ctx) { |
| 635 | LOG_WARNING(Service_HID, "(STUBBED) called"); | ||
| 636 | |||
| 601 | IPC::ResponseBuilder rb{ctx, 2}; | 637 | IPC::ResponseBuilder rb{ctx, 2}; |
| 602 | rb.Push(RESULT_SUCCESS); | 638 | rb.Push(RESULT_SUCCESS); |
| 603 | LOG_WARNING(Service_HID, "(STUBBED) called"); | ||
| 604 | } | 639 | } |
| 605 | 640 | ||
| 606 | void SetPalmaBoostMode(Kernel::HLERequestContext& ctx) { | 641 | void SetPalmaBoostMode(Kernel::HLERequestContext& ctx) { |
| 642 | LOG_WARNING(Service_HID, "(STUBBED) called"); | ||
| 643 | |||
| 607 | IPC::ResponseBuilder rb{ctx, 2}; | 644 | IPC::ResponseBuilder rb{ctx, 2}; |
| 608 | rb.Push(RESULT_SUCCESS); | 645 | rb.Push(RESULT_SUCCESS); |
| 609 | LOG_WARNING(Service_HID, "(STUBBED) called"); | ||
| 610 | } | 646 | } |
| 611 | }; | 647 | }; |
| 612 | 648 | ||
diff --git a/src/core/hle/service/hid/irs.cpp b/src/core/hle/service/hid/irs.cpp index 872e3c344..3c7f8b1ee 100644 --- a/src/core/hle/service/hid/irs.cpp +++ b/src/core/hle/service/hid/irs.cpp | |||
| @@ -44,115 +44,133 @@ IRS::IRS() : ServiceFramework{"irs"} { | |||
| 44 | } | 44 | } |
| 45 | 45 | ||
| 46 | void IRS::ActivateIrsensor(Kernel::HLERequestContext& ctx) { | 46 | void IRS::ActivateIrsensor(Kernel::HLERequestContext& ctx) { |
| 47 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 48 | |||
| 47 | IPC::ResponseBuilder rb{ctx, 2}; | 49 | IPC::ResponseBuilder rb{ctx, 2}; |
| 48 | rb.Push(RESULT_SUCCESS); | 50 | rb.Push(RESULT_SUCCESS); |
| 49 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 50 | } | 51 | } |
| 51 | 52 | ||
| 52 | void IRS::DeactivateIrsensor(Kernel::HLERequestContext& ctx) { | 53 | void IRS::DeactivateIrsensor(Kernel::HLERequestContext& ctx) { |
| 54 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 55 | |||
| 53 | IPC::ResponseBuilder rb{ctx, 2}; | 56 | IPC::ResponseBuilder rb{ctx, 2}; |
| 54 | rb.Push(RESULT_SUCCESS); | 57 | rb.Push(RESULT_SUCCESS); |
| 55 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 56 | } | 58 | } |
| 57 | 59 | ||
| 58 | void IRS::GetIrsensorSharedMemoryHandle(Kernel::HLERequestContext& ctx) { | 60 | void IRS::GetIrsensorSharedMemoryHandle(Kernel::HLERequestContext& ctx) { |
| 61 | LOG_DEBUG(Service_IRS, "called"); | ||
| 62 | |||
| 59 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 63 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 60 | rb.Push(RESULT_SUCCESS); | 64 | rb.Push(RESULT_SUCCESS); |
| 61 | rb.PushCopyObjects(shared_mem); | 65 | rb.PushCopyObjects(shared_mem); |
| 62 | LOG_DEBUG(Service_IRS, "called"); | ||
| 63 | } | 66 | } |
| 64 | 67 | ||
| 65 | void IRS::StopImageProcessor(Kernel::HLERequestContext& ctx) { | 68 | void IRS::StopImageProcessor(Kernel::HLERequestContext& ctx) { |
| 69 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 70 | |||
| 66 | IPC::ResponseBuilder rb{ctx, 2}; | 71 | IPC::ResponseBuilder rb{ctx, 2}; |
| 67 | rb.Push(RESULT_SUCCESS); | 72 | rb.Push(RESULT_SUCCESS); |
| 68 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 69 | } | 73 | } |
| 70 | 74 | ||
| 71 | void IRS::RunMomentProcessor(Kernel::HLERequestContext& ctx) { | 75 | void IRS::RunMomentProcessor(Kernel::HLERequestContext& ctx) { |
| 76 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 77 | |||
| 72 | IPC::ResponseBuilder rb{ctx, 2}; | 78 | IPC::ResponseBuilder rb{ctx, 2}; |
| 73 | rb.Push(RESULT_SUCCESS); | 79 | rb.Push(RESULT_SUCCESS); |
| 74 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 75 | } | 80 | } |
| 76 | 81 | ||
| 77 | void IRS::RunClusteringProcessor(Kernel::HLERequestContext& ctx) { | 82 | void IRS::RunClusteringProcessor(Kernel::HLERequestContext& ctx) { |
| 83 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 84 | |||
| 78 | IPC::ResponseBuilder rb{ctx, 2}; | 85 | IPC::ResponseBuilder rb{ctx, 2}; |
| 79 | rb.Push(RESULT_SUCCESS); | 86 | rb.Push(RESULT_SUCCESS); |
| 80 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 81 | } | 87 | } |
| 82 | 88 | ||
| 83 | void IRS::RunImageTransferProcessor(Kernel::HLERequestContext& ctx) { | 89 | void IRS::RunImageTransferProcessor(Kernel::HLERequestContext& ctx) { |
| 90 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 91 | |||
| 84 | IPC::ResponseBuilder rb{ctx, 2}; | 92 | IPC::ResponseBuilder rb{ctx, 2}; |
| 85 | rb.Push(RESULT_SUCCESS); | 93 | rb.Push(RESULT_SUCCESS); |
| 86 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 87 | } | 94 | } |
| 88 | 95 | ||
| 89 | void IRS::GetImageTransferProcessorState(Kernel::HLERequestContext& ctx) { | 96 | void IRS::GetImageTransferProcessorState(Kernel::HLERequestContext& ctx) { |
| 97 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 98 | |||
| 90 | IPC::ResponseBuilder rb{ctx, 5}; | 99 | IPC::ResponseBuilder rb{ctx, 5}; |
| 91 | rb.Push(RESULT_SUCCESS); | 100 | rb.Push(RESULT_SUCCESS); |
| 92 | rb.PushRaw<u64>(CoreTiming::GetTicks()); | 101 | rb.PushRaw<u64>(CoreTiming::GetTicks()); |
| 93 | rb.PushRaw<u32>(0); | 102 | rb.PushRaw<u32>(0); |
| 94 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 95 | } | 103 | } |
| 96 | 104 | ||
| 97 | void IRS::RunTeraPluginProcessor(Kernel::HLERequestContext& ctx) { | 105 | void IRS::RunTeraPluginProcessor(Kernel::HLERequestContext& ctx) { |
| 106 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 107 | |||
| 98 | IPC::ResponseBuilder rb{ctx, 2}; | 108 | IPC::ResponseBuilder rb{ctx, 2}; |
| 99 | rb.Push(RESULT_SUCCESS); | 109 | rb.Push(RESULT_SUCCESS); |
| 100 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 101 | } | 110 | } |
| 102 | 111 | ||
| 103 | void IRS::GetNpadIrCameraHandle(Kernel::HLERequestContext& ctx) { | 112 | void IRS::GetNpadIrCameraHandle(Kernel::HLERequestContext& ctx) { |
| 113 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 114 | |||
| 104 | IPC::ResponseBuilder rb{ctx, 3}; | 115 | IPC::ResponseBuilder rb{ctx, 3}; |
| 105 | rb.Push(RESULT_SUCCESS); | 116 | rb.Push(RESULT_SUCCESS); |
| 106 | rb.PushRaw<u32>(device_handle); | 117 | rb.PushRaw<u32>(device_handle); |
| 107 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 108 | } | 118 | } |
| 109 | 119 | ||
| 110 | void IRS::RunPointingProcessor(Kernel::HLERequestContext& ctx) { | 120 | void IRS::RunPointingProcessor(Kernel::HLERequestContext& ctx) { |
| 121 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 122 | |||
| 111 | IPC::ResponseBuilder rb{ctx, 2}; | 123 | IPC::ResponseBuilder rb{ctx, 2}; |
| 112 | rb.Push(RESULT_SUCCESS); | 124 | rb.Push(RESULT_SUCCESS); |
| 113 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 114 | } | 125 | } |
| 115 | 126 | ||
| 116 | void IRS::SuspendImageProcessor(Kernel::HLERequestContext& ctx) { | 127 | void IRS::SuspendImageProcessor(Kernel::HLERequestContext& ctx) { |
| 128 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 129 | |||
| 117 | IPC::ResponseBuilder rb{ctx, 2}; | 130 | IPC::ResponseBuilder rb{ctx, 2}; |
| 118 | rb.Push(RESULT_SUCCESS); | 131 | rb.Push(RESULT_SUCCESS); |
| 119 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 120 | } | 132 | } |
| 121 | 133 | ||
| 122 | void IRS::CheckFirmwareVersion(Kernel::HLERequestContext& ctx) { | 134 | void IRS::CheckFirmwareVersion(Kernel::HLERequestContext& ctx) { |
| 135 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 136 | |||
| 123 | IPC::ResponseBuilder rb{ctx, 2}; | 137 | IPC::ResponseBuilder rb{ctx, 2}; |
| 124 | rb.Push(RESULT_SUCCESS); | 138 | rb.Push(RESULT_SUCCESS); |
| 125 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 126 | } | 139 | } |
| 127 | 140 | ||
| 128 | void IRS::SetFunctionLevel(Kernel::HLERequestContext& ctx) { | 141 | void IRS::SetFunctionLevel(Kernel::HLERequestContext& ctx) { |
| 142 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 143 | |||
| 129 | IPC::ResponseBuilder rb{ctx, 2}; | 144 | IPC::ResponseBuilder rb{ctx, 2}; |
| 130 | rb.Push(RESULT_SUCCESS); | 145 | rb.Push(RESULT_SUCCESS); |
| 131 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 132 | } | 146 | } |
| 133 | 147 | ||
| 134 | void IRS::RunImageTransferExProcessor(Kernel::HLERequestContext& ctx) { | 148 | void IRS::RunImageTransferExProcessor(Kernel::HLERequestContext& ctx) { |
| 149 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 150 | |||
| 135 | IPC::ResponseBuilder rb{ctx, 2}; | 151 | IPC::ResponseBuilder rb{ctx, 2}; |
| 136 | rb.Push(RESULT_SUCCESS); | 152 | rb.Push(RESULT_SUCCESS); |
| 137 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 138 | } | 153 | } |
| 139 | 154 | ||
| 140 | void IRS::RunIrLedProcessor(Kernel::HLERequestContext& ctx) { | 155 | void IRS::RunIrLedProcessor(Kernel::HLERequestContext& ctx) { |
| 156 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 157 | |||
| 141 | IPC::ResponseBuilder rb{ctx, 2}; | 158 | IPC::ResponseBuilder rb{ctx, 2}; |
| 142 | rb.Push(RESULT_SUCCESS); | 159 | rb.Push(RESULT_SUCCESS); |
| 143 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 144 | } | 160 | } |
| 145 | 161 | ||
| 146 | void IRS::StopImageProcessorAsync(Kernel::HLERequestContext& ctx) { | 162 | void IRS::StopImageProcessorAsync(Kernel::HLERequestContext& ctx) { |
| 163 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 164 | |||
| 147 | IPC::ResponseBuilder rb{ctx, 2}; | 165 | IPC::ResponseBuilder rb{ctx, 2}; |
| 148 | rb.Push(RESULT_SUCCESS); | 166 | rb.Push(RESULT_SUCCESS); |
| 149 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 150 | } | 167 | } |
| 151 | 168 | ||
| 152 | void IRS::ActivateIrsensorWithFunctionLevel(Kernel::HLERequestContext& ctx) { | 169 | void IRS::ActivateIrsensorWithFunctionLevel(Kernel::HLERequestContext& ctx) { |
| 170 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 171 | |||
| 153 | IPC::ResponseBuilder rb{ctx, 2}; | 172 | IPC::ResponseBuilder rb{ctx, 2}; |
| 154 | rb.Push(RESULT_SUCCESS); | 173 | rb.Push(RESULT_SUCCESS); |
| 155 | LOG_WARNING(Service_IRS, "(STUBBED) called"); | ||
| 156 | } | 174 | } |
| 157 | 175 | ||
| 158 | IRS::~IRS() = default; | 176 | IRS::~IRS() = default; |
diff --git a/src/core/hle/service/lbl/lbl.cpp b/src/core/hle/service/lbl/lbl.cpp index 164c57e18..e8f9f2d29 100644 --- a/src/core/hle/service/lbl/lbl.cpp +++ b/src/core/hle/service/lbl/lbl.cpp | |||
| @@ -55,29 +55,29 @@ public: | |||
| 55 | 55 | ||
| 56 | private: | 56 | private: |
| 57 | void EnableVrMode(Kernel::HLERequestContext& ctx) { | 57 | void EnableVrMode(Kernel::HLERequestContext& ctx) { |
| 58 | LOG_DEBUG(Service_LBL, "called"); | ||
| 59 | |||
| 58 | IPC::ResponseBuilder rb{ctx, 2}; | 60 | IPC::ResponseBuilder rb{ctx, 2}; |
| 59 | rb.Push(RESULT_SUCCESS); | 61 | rb.Push(RESULT_SUCCESS); |
| 60 | 62 | ||
| 61 | vr_mode_enabled = true; | 63 | vr_mode_enabled = true; |
| 62 | |||
| 63 | LOG_DEBUG(Service_LBL, "called"); | ||
| 64 | } | 64 | } |
| 65 | 65 | ||
| 66 | void DisableVrMode(Kernel::HLERequestContext& ctx) { | 66 | void DisableVrMode(Kernel::HLERequestContext& ctx) { |
| 67 | LOG_DEBUG(Service_LBL, "called"); | ||
| 68 | |||
| 67 | IPC::ResponseBuilder rb{ctx, 2}; | 69 | IPC::ResponseBuilder rb{ctx, 2}; |
| 68 | rb.Push(RESULT_SUCCESS); | 70 | rb.Push(RESULT_SUCCESS); |
| 69 | 71 | ||
| 70 | vr_mode_enabled = false; | 72 | vr_mode_enabled = false; |
| 71 | |||
| 72 | LOG_DEBUG(Service_LBL, "called"); | ||
| 73 | } | 73 | } |
| 74 | 74 | ||
| 75 | void IsVrModeEnabled(Kernel::HLERequestContext& ctx) { | 75 | void IsVrModeEnabled(Kernel::HLERequestContext& ctx) { |
| 76 | LOG_DEBUG(Service_LBL, "called"); | ||
| 77 | |||
| 76 | IPC::ResponseBuilder rb{ctx, 3}; | 78 | IPC::ResponseBuilder rb{ctx, 3}; |
| 77 | rb.Push(RESULT_SUCCESS); | 79 | rb.Push(RESULT_SUCCESS); |
| 78 | rb.Push(vr_mode_enabled); | 80 | rb.Push(vr_mode_enabled); |
| 79 | |||
| 80 | LOG_DEBUG(Service_LBL, "called"); | ||
| 81 | } | 81 | } |
| 82 | 82 | ||
| 83 | bool vr_mode_enabled = false; | 83 | bool vr_mode_enabled = false; |
diff --git a/src/core/hle/service/ldn/ldn.cpp b/src/core/hle/service/ldn/ldn.cpp index 167f2c66a..e250595e3 100644 --- a/src/core/hle/service/ldn/ldn.cpp +++ b/src/core/hle/service/ldn/ldn.cpp | |||
| @@ -44,11 +44,11 @@ public: | |||
| 44 | } | 44 | } |
| 45 | 45 | ||
| 46 | void CreateMonitorService(Kernel::HLERequestContext& ctx) { | 46 | void CreateMonitorService(Kernel::HLERequestContext& ctx) { |
| 47 | LOG_DEBUG(Service_LDN, "called"); | ||
| 48 | |||
| 47 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 49 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 48 | rb.Push(RESULT_SUCCESS); | 50 | rb.Push(RESULT_SUCCESS); |
| 49 | rb.PushIpcInterface<IMonitorService>(); | 51 | rb.PushIpcInterface<IMonitorService>(); |
| 50 | |||
| 51 | LOG_DEBUG(Service_LDN, "called"); | ||
| 52 | } | 52 | } |
| 53 | }; | 53 | }; |
| 54 | 54 | ||
| @@ -104,11 +104,11 @@ public: | |||
| 104 | } | 104 | } |
| 105 | 105 | ||
| 106 | void CreateSystemLocalCommunicationService(Kernel::HLERequestContext& ctx) { | 106 | void CreateSystemLocalCommunicationService(Kernel::HLERequestContext& ctx) { |
| 107 | LOG_DEBUG(Service_LDN, "called"); | ||
| 108 | |||
| 107 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 109 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 108 | rb.Push(RESULT_SUCCESS); | 110 | rb.Push(RESULT_SUCCESS); |
| 109 | rb.PushIpcInterface<ILocalCommunicationService>("ISystemLocalCommunicationService"); | 111 | rb.PushIpcInterface<ILocalCommunicationService>("ISystemLocalCommunicationService"); |
| 110 | |||
| 111 | LOG_DEBUG(Service_LDN, "called"); | ||
| 112 | } | 112 | } |
| 113 | }; | 113 | }; |
| 114 | 114 | ||
| @@ -125,11 +125,11 @@ public: | |||
| 125 | } | 125 | } |
| 126 | 126 | ||
| 127 | void CreateUserLocalCommunicationService(Kernel::HLERequestContext& ctx) { | 127 | void CreateUserLocalCommunicationService(Kernel::HLERequestContext& ctx) { |
| 128 | LOG_DEBUG(Service_LDN, "called"); | ||
| 129 | |||
| 128 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 130 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 129 | rb.Push(RESULT_SUCCESS); | 131 | rb.Push(RESULT_SUCCESS); |
| 130 | rb.PushIpcInterface<ILocalCommunicationService>("IUserLocalCommunicationService"); | 132 | rb.PushIpcInterface<ILocalCommunicationService>("IUserLocalCommunicationService"); |
| 131 | |||
| 132 | LOG_DEBUG(Service_LDN, "called"); | ||
| 133 | } | 133 | } |
| 134 | }; | 134 | }; |
| 135 | 135 | ||
diff --git a/src/core/hle/service/ldr/ldr.cpp b/src/core/hle/service/ldr/ldr.cpp index 7a9d0d0dd..ca119dd3a 100644 --- a/src/core/hle/service/ldr/ldr.cpp +++ b/src/core/hle/service/ldr/ldr.cpp | |||
| @@ -97,6 +97,8 @@ public: | |||
| 97 | rp.Skip(2, false); | 97 | rp.Skip(2, false); |
| 98 | const VAddr nrr_addr{rp.Pop<VAddr>()}; | 98 | const VAddr nrr_addr{rp.Pop<VAddr>()}; |
| 99 | const u64 nrr_size{rp.Pop<u64>()}; | 99 | const u64 nrr_size{rp.Pop<u64>()}; |
| 100 | LOG_DEBUG(Service_LDR, "called with nrr_addr={:016X}, nrr_size={:016X}", nrr_addr, | ||
| 101 | nrr_size); | ||
| 100 | 102 | ||
| 101 | if (!initialized) { | 103 | if (!initialized) { |
| 102 | LOG_ERROR(Service_LDR, "LDR:RO not initialized before use!"); | 104 | LOG_ERROR(Service_LDR, "LDR:RO not initialized before use!"); |
| @@ -189,6 +191,7 @@ public: | |||
| 189 | IPC::RequestParser rp{ctx}; | 191 | IPC::RequestParser rp{ctx}; |
| 190 | rp.Skip(2, false); | 192 | rp.Skip(2, false); |
| 191 | const auto nrr_addr{rp.Pop<VAddr>()}; | 193 | const auto nrr_addr{rp.Pop<VAddr>()}; |
| 194 | LOG_DEBUG(Service_LDR, "called with nrr_addr={:016X}", nrr_addr); | ||
| 192 | 195 | ||
| 193 | if (!Common::Is4KBAligned(nrr_addr)) { | 196 | if (!Common::Is4KBAligned(nrr_addr)) { |
| 194 | LOG_ERROR(Service_LDR, "NRR Address has invalid alignment (actual {:016X})!", nrr_addr); | 197 | LOG_ERROR(Service_LDR, "NRR Address has invalid alignment (actual {:016X})!", nrr_addr); |
| @@ -219,6 +222,10 @@ public: | |||
| 219 | const u64 nro_size{rp.Pop<u64>()}; | 222 | const u64 nro_size{rp.Pop<u64>()}; |
| 220 | const VAddr bss_addr{rp.Pop<VAddr>()}; | 223 | const VAddr bss_addr{rp.Pop<VAddr>()}; |
| 221 | const u64 bss_size{rp.Pop<u64>()}; | 224 | const u64 bss_size{rp.Pop<u64>()}; |
| 225 | LOG_DEBUG( | ||
| 226 | Service_LDR, | ||
| 227 | "called with nro_addr={:016X}, nro_size={:016X}, bss_addr={:016X}, bss_size={:016X}", | ||
| 228 | nro_addr, nro_size, bss_addr, bss_size); | ||
| 222 | 229 | ||
| 223 | if (!initialized) { | 230 | if (!initialized) { |
| 224 | LOG_ERROR(Service_LDR, "LDR:RO not initialized before use!"); | 231 | LOG_ERROR(Service_LDR, "LDR:RO not initialized before use!"); |
| @@ -345,6 +352,8 @@ public: | |||
| 345 | rp.Skip(2, false); | 352 | rp.Skip(2, false); |
| 346 | const VAddr mapped_addr{rp.PopRaw<VAddr>()}; | 353 | const VAddr mapped_addr{rp.PopRaw<VAddr>()}; |
| 347 | const VAddr heap_addr{rp.PopRaw<VAddr>()}; | 354 | const VAddr heap_addr{rp.PopRaw<VAddr>()}; |
| 355 | LOG_DEBUG(Service_LDR, "called with mapped_addr={:016X}, heap_addr={:016X}", mapped_addr, | ||
| 356 | heap_addr); | ||
| 348 | 357 | ||
| 349 | if (!initialized) { | 358 | if (!initialized) { |
| 350 | LOG_ERROR(Service_LDR, "LDR:RO not initialized before use!"); | 359 | LOG_ERROR(Service_LDR, "LDR:RO not initialized before use!"); |
| @@ -393,11 +402,12 @@ public: | |||
| 393 | } | 402 | } |
| 394 | 403 | ||
| 395 | void Initialize(Kernel::HLERequestContext& ctx) { | 404 | void Initialize(Kernel::HLERequestContext& ctx) { |
| 405 | LOG_WARNING(Service_LDR, "(STUBBED) called"); | ||
| 406 | |||
| 396 | initialized = true; | 407 | initialized = true; |
| 397 | 408 | ||
| 398 | IPC::ResponseBuilder rb{ctx, 2}; | 409 | IPC::ResponseBuilder rb{ctx, 2}; |
| 399 | rb.Push(RESULT_SUCCESS); | 410 | rb.Push(RESULT_SUCCESS); |
| 400 | LOG_WARNING(Service_LDR, "(STUBBED) called"); | ||
| 401 | } | 411 | } |
| 402 | 412 | ||
| 403 | private: | 413 | private: |
diff --git a/src/core/hle/service/lm/lm.cpp b/src/core/hle/service/lm/lm.cpp index 4e5fdb16e..1f462e087 100644 --- a/src/core/hle/service/lm/lm.cpp +++ b/src/core/hle/service/lm/lm.cpp | |||
| @@ -209,11 +209,11 @@ public: | |||
| 209 | * 0: ResultCode | 209 | * 0: ResultCode |
| 210 | */ | 210 | */ |
| 211 | void OpenLogger(Kernel::HLERequestContext& ctx) { | 211 | void OpenLogger(Kernel::HLERequestContext& ctx) { |
| 212 | LOG_DEBUG(Service_LM, "called"); | ||
| 213 | |||
| 212 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 214 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 213 | rb.Push(RESULT_SUCCESS); | 215 | rb.Push(RESULT_SUCCESS); |
| 214 | rb.PushIpcInterface<ILogger>(); | 216 | rb.PushIpcInterface<ILogger>(); |
| 215 | |||
| 216 | LOG_DEBUG(Service_LM, "called"); | ||
| 217 | } | 217 | } |
| 218 | }; | 218 | }; |
| 219 | 219 | ||
diff --git a/src/core/hle/service/mm/mm_u.cpp b/src/core/hle/service/mm/mm_u.cpp index e1f17a926..def63dc8a 100644 --- a/src/core/hle/service/mm/mm_u.cpp +++ b/src/core/hle/service/mm/mm_u.cpp | |||
| @@ -31,12 +31,14 @@ public: | |||
| 31 | private: | 31 | private: |
| 32 | void Initialize(Kernel::HLERequestContext& ctx) { | 32 | void Initialize(Kernel::HLERequestContext& ctx) { |
| 33 | LOG_WARNING(Service_MM, "(STUBBED) called"); | 33 | LOG_WARNING(Service_MM, "(STUBBED) called"); |
| 34 | |||
| 34 | IPC::ResponseBuilder rb{ctx, 2}; | 35 | IPC::ResponseBuilder rb{ctx, 2}; |
| 35 | rb.Push(RESULT_SUCCESS); | 36 | rb.Push(RESULT_SUCCESS); |
| 36 | } | 37 | } |
| 37 | 38 | ||
| 38 | void Finalize(Kernel::HLERequestContext& ctx) { | 39 | void Finalize(Kernel::HLERequestContext& ctx) { |
| 39 | LOG_WARNING(Service_MM, "(STUBBED) called"); | 40 | LOG_WARNING(Service_MM, "(STUBBED) called"); |
| 41 | |||
| 40 | IPC::ResponseBuilder rb{ctx, 2}; | 42 | IPC::ResponseBuilder rb{ctx, 2}; |
| 41 | rb.Push(RESULT_SUCCESS); | 43 | rb.Push(RESULT_SUCCESS); |
| 42 | } | 44 | } |
| @@ -45,15 +47,16 @@ private: | |||
| 45 | IPC::RequestParser rp{ctx}; | 47 | IPC::RequestParser rp{ctx}; |
| 46 | min = rp.Pop<u32>(); | 48 | min = rp.Pop<u32>(); |
| 47 | max = rp.Pop<u32>(); | 49 | max = rp.Pop<u32>(); |
| 48 | current = min; | ||
| 49 | |||
| 50 | LOG_WARNING(Service_MM, "(STUBBED) called, min=0x{:X}, max=0x{:X}", min, max); | 50 | LOG_WARNING(Service_MM, "(STUBBED) called, min=0x{:X}, max=0x{:X}", min, max); |
| 51 | |||
| 52 | current = min; | ||
| 51 | IPC::ResponseBuilder rb{ctx, 2}; | 53 | IPC::ResponseBuilder rb{ctx, 2}; |
| 52 | rb.Push(RESULT_SUCCESS); | 54 | rb.Push(RESULT_SUCCESS); |
| 53 | } | 55 | } |
| 54 | 56 | ||
| 55 | void Get(Kernel::HLERequestContext& ctx) { | 57 | void Get(Kernel::HLERequestContext& ctx) { |
| 56 | LOG_WARNING(Service_MM, "(STUBBED) called"); | 58 | LOG_WARNING(Service_MM, "(STUBBED) called"); |
| 59 | |||
| 57 | IPC::ResponseBuilder rb{ctx, 3}; | 60 | IPC::ResponseBuilder rb{ctx, 3}; |
| 58 | rb.Push(RESULT_SUCCESS); | 61 | rb.Push(RESULT_SUCCESS); |
| 59 | rb.Push(current); | 62 | rb.Push(current); |
| @@ -61,6 +64,7 @@ private: | |||
| 61 | 64 | ||
| 62 | void InitializeWithId(Kernel::HLERequestContext& ctx) { | 65 | void InitializeWithId(Kernel::HLERequestContext& ctx) { |
| 63 | LOG_WARNING(Service_MM, "(STUBBED) called"); | 66 | LOG_WARNING(Service_MM, "(STUBBED) called"); |
| 67 | |||
| 64 | IPC::ResponseBuilder rb{ctx, 3}; | 68 | IPC::ResponseBuilder rb{ctx, 3}; |
| 65 | rb.Push(RESULT_SUCCESS); | 69 | rb.Push(RESULT_SUCCESS); |
| 66 | rb.Push<u32>(id); // Any non zero value | 70 | rb.Push<u32>(id); // Any non zero value |
| @@ -68,6 +72,7 @@ private: | |||
| 68 | 72 | ||
| 69 | void FinalizeWithId(Kernel::HLERequestContext& ctx) { | 73 | void FinalizeWithId(Kernel::HLERequestContext& ctx) { |
| 70 | LOG_WARNING(Service_MM, "(STUBBED) called"); | 74 | LOG_WARNING(Service_MM, "(STUBBED) called"); |
| 75 | |||
| 71 | IPC::ResponseBuilder rb{ctx, 2}; | 76 | IPC::ResponseBuilder rb{ctx, 2}; |
| 72 | rb.Push(RESULT_SUCCESS); | 77 | rb.Push(RESULT_SUCCESS); |
| 73 | } | 78 | } |
| @@ -77,16 +82,17 @@ private: | |||
| 77 | u32 input_id = rp.Pop<u32>(); | 82 | u32 input_id = rp.Pop<u32>(); |
| 78 | min = rp.Pop<u32>(); | 83 | min = rp.Pop<u32>(); |
| 79 | max = rp.Pop<u32>(); | 84 | max = rp.Pop<u32>(); |
| 80 | current = min; | ||
| 81 | |||
| 82 | LOG_WARNING(Service_MM, "(STUBBED) called, input_id=0x{:X}, min=0x{:X}, max=0x{:X}", | 85 | LOG_WARNING(Service_MM, "(STUBBED) called, input_id=0x{:X}, min=0x{:X}, max=0x{:X}", |
| 83 | input_id, min, max); | 86 | input_id, min, max); |
| 87 | |||
| 88 | current = min; | ||
| 84 | IPC::ResponseBuilder rb{ctx, 2}; | 89 | IPC::ResponseBuilder rb{ctx, 2}; |
| 85 | rb.Push(RESULT_SUCCESS); | 90 | rb.Push(RESULT_SUCCESS); |
| 86 | } | 91 | } |
| 87 | 92 | ||
| 88 | void GetWithId(Kernel::HLERequestContext& ctx) { | 93 | void GetWithId(Kernel::HLERequestContext& ctx) { |
| 89 | LOG_WARNING(Service_MM, "(STUBBED) called"); | 94 | LOG_WARNING(Service_MM, "(STUBBED) called"); |
| 95 | |||
| 90 | IPC::ResponseBuilder rb{ctx, 3}; | 96 | IPC::ResponseBuilder rb{ctx, 3}; |
| 91 | rb.Push(RESULT_SUCCESS); | 97 | rb.Push(RESULT_SUCCESS); |
| 92 | rb.Push(current); | 98 | rb.Push(current); |
diff --git a/src/core/hle/service/nfc/nfc.cpp b/src/core/hle/service/nfc/nfc.cpp index 30e542542..5c62d42ba 100644 --- a/src/core/hle/service/nfc/nfc.cpp +++ b/src/core/hle/service/nfc/nfc.cpp | |||
| @@ -43,11 +43,11 @@ public: | |||
| 43 | 43 | ||
| 44 | private: | 44 | private: |
| 45 | void CreateAmInterface(Kernel::HLERequestContext& ctx) { | 45 | void CreateAmInterface(Kernel::HLERequestContext& ctx) { |
| 46 | LOG_DEBUG(Service_NFC, "called"); | ||
| 47 | |||
| 46 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 48 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 47 | rb.Push(RESULT_SUCCESS); | 49 | rb.Push(RESULT_SUCCESS); |
| 48 | rb.PushIpcInterface<IAm>(); | 50 | rb.PushIpcInterface<IAm>(); |
| 49 | |||
| 50 | LOG_DEBUG(Service_NFC, "called"); | ||
| 51 | } | 51 | } |
| 52 | }; | 52 | }; |
| 53 | 53 | ||
| @@ -91,11 +91,11 @@ public: | |||
| 91 | 91 | ||
| 92 | private: | 92 | private: |
| 93 | void CreateUserInterface(Kernel::HLERequestContext& ctx) { | 93 | void CreateUserInterface(Kernel::HLERequestContext& ctx) { |
| 94 | LOG_DEBUG(Service_NFC, "called"); | ||
| 95 | |||
| 94 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 96 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 95 | rb.Push(RESULT_SUCCESS); | 97 | rb.Push(RESULT_SUCCESS); |
| 96 | rb.PushIpcInterface<MFIUser>(); | 98 | rb.PushIpcInterface<MFIUser>(); |
| 97 | |||
| 98 | LOG_DEBUG(Service_NFC, "called"); | ||
| 99 | } | 99 | } |
| 100 | }; | 100 | }; |
| 101 | 101 | ||
| @@ -138,19 +138,19 @@ private: | |||
| 138 | }; | 138 | }; |
| 139 | 139 | ||
| 140 | void InitializeOld(Kernel::HLERequestContext& ctx) { | 140 | void InitializeOld(Kernel::HLERequestContext& ctx) { |
| 141 | LOG_DEBUG(Service_NFC, "called"); | ||
| 142 | |||
| 141 | IPC::ResponseBuilder rb{ctx, 2, 0}; | 143 | IPC::ResponseBuilder rb{ctx, 2, 0}; |
| 142 | rb.Push(RESULT_SUCCESS); | 144 | rb.Push(RESULT_SUCCESS); |
| 143 | |||
| 144 | // We don't deal with hardware initialization so we can just stub this. | 145 | // We don't deal with hardware initialization so we can just stub this. |
| 145 | LOG_DEBUG(Service_NFC, "called"); | ||
| 146 | } | 146 | } |
| 147 | 147 | ||
| 148 | void IsNfcEnabledOld(Kernel::HLERequestContext& ctx) { | 148 | void IsNfcEnabledOld(Kernel::HLERequestContext& ctx) { |
| 149 | LOG_DEBUG(Service_NFC, "IsNfcEnabledOld"); | ||
| 150 | |||
| 149 | IPC::ResponseBuilder rb{ctx, 3}; | 151 | IPC::ResponseBuilder rb{ctx, 3}; |
| 150 | rb.Push(RESULT_SUCCESS); | 152 | rb.Push(RESULT_SUCCESS); |
| 151 | rb.PushRaw<u8>(Settings::values.enable_nfc); | 153 | rb.PushRaw<u8>(Settings::values.enable_nfc); |
| 152 | |||
| 153 | LOG_DEBUG(Service_NFC, "IsNfcEnabledOld"); | ||
| 154 | } | 154 | } |
| 155 | 155 | ||
| 156 | void GetStateOld(Kernel::HLERequestContext& ctx) { | 156 | void GetStateOld(Kernel::HLERequestContext& ctx) { |
| @@ -183,11 +183,11 @@ public: | |||
| 183 | 183 | ||
| 184 | private: | 184 | private: |
| 185 | void CreateUserInterface(Kernel::HLERequestContext& ctx) { | 185 | void CreateUserInterface(Kernel::HLERequestContext& ctx) { |
| 186 | LOG_DEBUG(Service_NFC, "called"); | ||
| 187 | |||
| 186 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 188 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 187 | rb.Push(RESULT_SUCCESS); | 189 | rb.Push(RESULT_SUCCESS); |
| 188 | rb.PushIpcInterface<IUser>(); | 190 | rb.PushIpcInterface<IUser>(); |
| 189 | |||
| 190 | LOG_DEBUG(Service_NFC, "called"); | ||
| 191 | } | 191 | } |
| 192 | }; | 192 | }; |
| 193 | 193 | ||
| @@ -241,11 +241,11 @@ public: | |||
| 241 | 241 | ||
| 242 | private: | 242 | private: |
| 243 | void CreateSystemInterface(Kernel::HLERequestContext& ctx) { | 243 | void CreateSystemInterface(Kernel::HLERequestContext& ctx) { |
| 244 | LOG_DEBUG(Service_NFC, "called"); | ||
| 245 | |||
| 244 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 246 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 245 | rb.Push(RESULT_SUCCESS); | 247 | rb.Push(RESULT_SUCCESS); |
| 246 | rb.PushIpcInterface<ISystem>(); | 248 | rb.PushIpcInterface<ISystem>(); |
| 247 | |||
| 248 | LOG_DEBUG(Service_NFC, "called"); | ||
| 249 | } | 249 | } |
| 250 | }; | 250 | }; |
| 251 | 251 | ||
diff --git a/src/core/hle/service/nfp/nfp.cpp b/src/core/hle/service/nfp/nfp.cpp index 1d6e7756f..ff9170c24 100644 --- a/src/core/hle/service/nfp/nfp.cpp +++ b/src/core/hle/service/nfp/nfp.cpp | |||
| @@ -108,30 +108,29 @@ private: | |||
| 108 | static_assert(sizeof(CommonInfo) == 0x40, "CommonInfo is an invalid size"); | 108 | static_assert(sizeof(CommonInfo) == 0x40, "CommonInfo is an invalid size"); |
| 109 | 109 | ||
| 110 | void Initialize(Kernel::HLERequestContext& ctx) { | 110 | void Initialize(Kernel::HLERequestContext& ctx) { |
| 111 | LOG_DEBUG(Service_NFC, "called"); | ||
| 112 | |||
| 111 | IPC::ResponseBuilder rb{ctx, 2, 0}; | 113 | IPC::ResponseBuilder rb{ctx, 2, 0}; |
| 112 | rb.Push(RESULT_SUCCESS); | 114 | rb.Push(RESULT_SUCCESS); |
| 113 | 115 | ||
| 114 | state = State::Initialized; | 116 | state = State::Initialized; |
| 115 | |||
| 116 | LOG_DEBUG(Service_NFC, "called"); | ||
| 117 | } | 117 | } |
| 118 | 118 | ||
| 119 | void GetState(Kernel::HLERequestContext& ctx) { | 119 | void GetState(Kernel::HLERequestContext& ctx) { |
| 120 | LOG_DEBUG(Service_NFC, "called"); | ||
| 121 | |||
| 120 | IPC::ResponseBuilder rb{ctx, 3, 0}; | 122 | IPC::ResponseBuilder rb{ctx, 3, 0}; |
| 121 | rb.Push(RESULT_SUCCESS); | 123 | rb.Push(RESULT_SUCCESS); |
| 122 | rb.PushRaw<u32>(static_cast<u32>(state)); | 124 | rb.PushRaw<u32>(static_cast<u32>(state)); |
| 123 | |||
| 124 | LOG_DEBUG(Service_NFC, "called"); | ||
| 125 | } | 125 | } |
| 126 | 126 | ||
| 127 | void ListDevices(Kernel::HLERequestContext& ctx) { | 127 | void ListDevices(Kernel::HLERequestContext& ctx) { |
| 128 | IPC::RequestParser rp{ctx}; | 128 | IPC::RequestParser rp{ctx}; |
| 129 | const u32 array_size = rp.Pop<u32>(); | 129 | const u32 array_size = rp.Pop<u32>(); |
| 130 | LOG_DEBUG(Service_NFP, "called, array_size={}", array_size); | ||
| 130 | 131 | ||
| 131 | ctx.WriteBuffer(&device_handle, sizeof(device_handle)); | 132 | ctx.WriteBuffer(&device_handle, sizeof(device_handle)); |
| 132 | 133 | ||
| 133 | LOG_DEBUG(Service_NFP, "called, array_size={}", array_size); | ||
| 134 | |||
| 135 | IPC::ResponseBuilder rb{ctx, 3}; | 134 | IPC::ResponseBuilder rb{ctx, 3}; |
| 136 | rb.Push(RESULT_SUCCESS); | 135 | rb.Push(RESULT_SUCCESS); |
| 137 | rb.Push<u32>(1); | 136 | rb.Push<u32>(1); |
| @@ -141,6 +140,7 @@ private: | |||
| 141 | IPC::RequestParser rp{ctx}; | 140 | IPC::RequestParser rp{ctx}; |
| 142 | const u64 dev_handle = rp.Pop<u64>(); | 141 | const u64 dev_handle = rp.Pop<u64>(); |
| 143 | LOG_DEBUG(Service_NFP, "called, dev_handle=0x{:X}", dev_handle); | 142 | LOG_DEBUG(Service_NFP, "called, dev_handle=0x{:X}", dev_handle); |
| 143 | |||
| 144 | IPC::ResponseBuilder rb{ctx, 3}; | 144 | IPC::ResponseBuilder rb{ctx, 3}; |
| 145 | rb.Push(RESULT_SUCCESS); | 145 | rb.Push(RESULT_SUCCESS); |
| 146 | rb.Push<u32>(npad_id); | 146 | rb.Push<u32>(npad_id); |
| @@ -150,6 +150,7 @@ private: | |||
| 150 | IPC::RequestParser rp{ctx}; | 150 | IPC::RequestParser rp{ctx}; |
| 151 | const u64 dev_handle = rp.Pop<u64>(); | 151 | const u64 dev_handle = rp.Pop<u64>(); |
| 152 | LOG_DEBUG(Service_NFP, "called, dev_handle=0x{:X}", dev_handle); | 152 | LOG_DEBUG(Service_NFP, "called, dev_handle=0x{:X}", dev_handle); |
| 153 | |||
| 153 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 154 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 154 | rb.Push(RESULT_SUCCESS); | 155 | rb.Push(RESULT_SUCCESS); |
| 155 | rb.PushCopyObjects(nfp_interface.GetNFCEvent()); | 156 | rb.PushCopyObjects(nfp_interface.GetNFCEvent()); |
| @@ -168,6 +169,7 @@ private: | |||
| 168 | 169 | ||
| 169 | void StopDetection(Kernel::HLERequestContext& ctx) { | 170 | void StopDetection(Kernel::HLERequestContext& ctx) { |
| 170 | LOG_DEBUG(Service_NFP, "called"); | 171 | LOG_DEBUG(Service_NFP, "called"); |
| 172 | |||
| 171 | switch (device_state) { | 173 | switch (device_state) { |
| 172 | case DeviceState::TagFound: | 174 | case DeviceState::TagFound: |
| 173 | case DeviceState::TagNearby: | 175 | case DeviceState::TagNearby: |
| @@ -185,6 +187,7 @@ private: | |||
| 185 | 187 | ||
| 186 | void GetDeviceState(Kernel::HLERequestContext& ctx) { | 188 | void GetDeviceState(Kernel::HLERequestContext& ctx) { |
| 187 | LOG_DEBUG(Service_NFP, "called"); | 189 | LOG_DEBUG(Service_NFP, "called"); |
| 190 | |||
| 188 | auto nfc_event = nfp_interface.GetNFCEvent(); | 191 | auto nfc_event = nfp_interface.GetNFCEvent(); |
| 189 | if (!nfc_event->ShouldWait(Kernel::GetCurrentThread()) && !has_attached_handle) { | 192 | if (!nfc_event->ShouldWait(Kernel::GetCurrentThread()) && !has_attached_handle) { |
| 190 | device_state = DeviceState::TagFound; | 193 | device_state = DeviceState::TagFound; |
| @@ -323,6 +326,7 @@ private: | |||
| 323 | 326 | ||
| 324 | void Module::Interface::CreateUserInterface(Kernel::HLERequestContext& ctx) { | 327 | void Module::Interface::CreateUserInterface(Kernel::HLERequestContext& ctx) { |
| 325 | LOG_DEBUG(Service_NFP, "called"); | 328 | LOG_DEBUG(Service_NFP, "called"); |
| 329 | |||
| 326 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 330 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 327 | rb.Push(RESULT_SUCCESS); | 331 | rb.Push(RESULT_SUCCESS); |
| 328 | rb.PushIpcInterface<IUser>(*this); | 332 | rb.PushIpcInterface<IUser>(*this); |
diff --git a/src/core/hle/service/nifm/nifm.cpp b/src/core/hle/service/nifm/nifm.cpp index 75dcd94a3..dee391201 100644 --- a/src/core/hle/service/nifm/nifm.cpp +++ b/src/core/hle/service/nifm/nifm.cpp | |||
| @@ -63,12 +63,14 @@ public: | |||
| 63 | private: | 63 | private: |
| 64 | void Submit(Kernel::HLERequestContext& ctx) { | 64 | void Submit(Kernel::HLERequestContext& ctx) { |
| 65 | LOG_WARNING(Service_NIFM, "(STUBBED) called"); | 65 | LOG_WARNING(Service_NIFM, "(STUBBED) called"); |
| 66 | |||
| 66 | IPC::ResponseBuilder rb{ctx, 2}; | 67 | IPC::ResponseBuilder rb{ctx, 2}; |
| 67 | rb.Push(RESULT_SUCCESS); | 68 | rb.Push(RESULT_SUCCESS); |
| 68 | } | 69 | } |
| 69 | 70 | ||
| 70 | void GetRequestState(Kernel::HLERequestContext& ctx) { | 71 | void GetRequestState(Kernel::HLERequestContext& ctx) { |
| 71 | LOG_WARNING(Service_NIFM, "(STUBBED) called"); | 72 | LOG_WARNING(Service_NIFM, "(STUBBED) called"); |
| 73 | |||
| 72 | IPC::ResponseBuilder rb{ctx, 3}; | 74 | IPC::ResponseBuilder rb{ctx, 3}; |
| 73 | rb.Push(RESULT_SUCCESS); | 75 | rb.Push(RESULT_SUCCESS); |
| 74 | rb.Push<u32>(0); | 76 | rb.Push<u32>(0); |
| @@ -76,12 +78,14 @@ private: | |||
| 76 | 78 | ||
| 77 | void GetResult(Kernel::HLERequestContext& ctx) { | 79 | void GetResult(Kernel::HLERequestContext& ctx) { |
| 78 | LOG_WARNING(Service_NIFM, "(STUBBED) called"); | 80 | LOG_WARNING(Service_NIFM, "(STUBBED) called"); |
| 81 | |||
| 79 | IPC::ResponseBuilder rb{ctx, 2}; | 82 | IPC::ResponseBuilder rb{ctx, 2}; |
| 80 | rb.Push(RESULT_SUCCESS); | 83 | rb.Push(RESULT_SUCCESS); |
| 81 | } | 84 | } |
| 82 | 85 | ||
| 83 | void GetSystemEventReadableHandles(Kernel::HLERequestContext& ctx) { | 86 | void GetSystemEventReadableHandles(Kernel::HLERequestContext& ctx) { |
| 84 | LOG_WARNING(Service_NIFM, "(STUBBED) called"); | 87 | LOG_WARNING(Service_NIFM, "(STUBBED) called"); |
| 88 | |||
| 85 | IPC::ResponseBuilder rb{ctx, 2, 2}; | 89 | IPC::ResponseBuilder rb{ctx, 2, 2}; |
| 86 | rb.Push(RESULT_SUCCESS); | 90 | rb.Push(RESULT_SUCCESS); |
| 87 | rb.PushCopyObjects(event1, event2); | 91 | rb.PushCopyObjects(event1, event2); |
| @@ -89,12 +93,14 @@ private: | |||
| 89 | 93 | ||
| 90 | void Cancel(Kernel::HLERequestContext& ctx) { | 94 | void Cancel(Kernel::HLERequestContext& ctx) { |
| 91 | LOG_WARNING(Service_NIFM, "(STUBBED) called"); | 95 | LOG_WARNING(Service_NIFM, "(STUBBED) called"); |
| 96 | |||
| 92 | IPC::ResponseBuilder rb{ctx, 2}; | 97 | IPC::ResponseBuilder rb{ctx, 2}; |
| 93 | rb.Push(RESULT_SUCCESS); | 98 | rb.Push(RESULT_SUCCESS); |
| 94 | } | 99 | } |
| 95 | 100 | ||
| 96 | void SetConnectionConfirmationOption(Kernel::HLERequestContext& ctx) { | 101 | void SetConnectionConfirmationOption(Kernel::HLERequestContext& ctx) { |
| 97 | LOG_WARNING(Service_NIFM, "(STUBBED) called"); | 102 | LOG_WARNING(Service_NIFM, "(STUBBED) called"); |
| 103 | |||
| 98 | IPC::ResponseBuilder rb{ctx, 2}; | 104 | IPC::ResponseBuilder rb{ctx, 2}; |
| 99 | rb.Push(RESULT_SUCCESS); | 105 | rb.Push(RESULT_SUCCESS); |
| 100 | } | 106 | } |
| @@ -122,32 +128,36 @@ private: | |||
| 122 | void GetClientId(Kernel::HLERequestContext& ctx) { | 128 | void GetClientId(Kernel::HLERequestContext& ctx) { |
| 123 | static constexpr u32 client_id = 1; | 129 | static constexpr u32 client_id = 1; |
| 124 | LOG_WARNING(Service_NIFM, "(STUBBED) called"); | 130 | LOG_WARNING(Service_NIFM, "(STUBBED) called"); |
| 131 | |||
| 125 | IPC::ResponseBuilder rb{ctx, 4}; | 132 | IPC::ResponseBuilder rb{ctx, 4}; |
| 126 | rb.Push(RESULT_SUCCESS); | 133 | rb.Push(RESULT_SUCCESS); |
| 127 | rb.Push<u64>(client_id); // Client ID needs to be non zero otherwise it's considered invalid | 134 | rb.Push<u64>(client_id); // Client ID needs to be non zero otherwise it's considered invalid |
| 128 | } | 135 | } |
| 129 | void CreateScanRequest(Kernel::HLERequestContext& ctx) { | 136 | void CreateScanRequest(Kernel::HLERequestContext& ctx) { |
| 137 | LOG_DEBUG(Service_NIFM, "called"); | ||
| 138 | |||
| 130 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 139 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 131 | 140 | ||
| 132 | rb.Push(RESULT_SUCCESS); | 141 | rb.Push(RESULT_SUCCESS); |
| 133 | rb.PushIpcInterface<IScanRequest>(); | 142 | rb.PushIpcInterface<IScanRequest>(); |
| 134 | |||
| 135 | LOG_DEBUG(Service_NIFM, "called"); | ||
| 136 | } | 143 | } |
| 137 | void CreateRequest(Kernel::HLERequestContext& ctx) { | 144 | void CreateRequest(Kernel::HLERequestContext& ctx) { |
| 145 | LOG_DEBUG(Service_NIFM, "called"); | ||
| 146 | |||
| 138 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 147 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 139 | 148 | ||
| 140 | rb.Push(RESULT_SUCCESS); | 149 | rb.Push(RESULT_SUCCESS); |
| 141 | rb.PushIpcInterface<IRequest>(); | 150 | rb.PushIpcInterface<IRequest>(); |
| 142 | |||
| 143 | LOG_DEBUG(Service_NIFM, "called"); | ||
| 144 | } | 151 | } |
| 145 | void RemoveNetworkProfile(Kernel::HLERequestContext& ctx) { | 152 | void RemoveNetworkProfile(Kernel::HLERequestContext& ctx) { |
| 146 | LOG_WARNING(Service_NIFM, "(STUBBED) called"); | 153 | LOG_WARNING(Service_NIFM, "(STUBBED) called"); |
| 154 | |||
| 147 | IPC::ResponseBuilder rb{ctx, 2}; | 155 | IPC::ResponseBuilder rb{ctx, 2}; |
| 148 | rb.Push(RESULT_SUCCESS); | 156 | rb.Push(RESULT_SUCCESS); |
| 149 | } | 157 | } |
| 150 | void CreateTemporaryNetworkProfile(Kernel::HLERequestContext& ctx) { | 158 | void CreateTemporaryNetworkProfile(Kernel::HLERequestContext& ctx) { |
| 159 | LOG_DEBUG(Service_NIFM, "called"); | ||
| 160 | |||
| 151 | ASSERT_MSG(ctx.GetReadBufferSize() == 0x17c, "NetworkProfileData is not the correct size"); | 161 | ASSERT_MSG(ctx.GetReadBufferSize() == 0x17c, "NetworkProfileData is not the correct size"); |
| 152 | u128 uuid{}; | 162 | u128 uuid{}; |
| 153 | auto buffer = ctx.ReadBuffer(); | 163 | auto buffer = ctx.ReadBuffer(); |
| @@ -158,23 +168,24 @@ private: | |||
| 158 | rb.Push(RESULT_SUCCESS); | 168 | rb.Push(RESULT_SUCCESS); |
| 159 | rb.PushIpcInterface<INetworkProfile>(); | 169 | rb.PushIpcInterface<INetworkProfile>(); |
| 160 | rb.PushRaw<u128>(uuid); | 170 | rb.PushRaw<u128>(uuid); |
| 161 | |||
| 162 | LOG_DEBUG(Service_NIFM, "called"); | ||
| 163 | } | 171 | } |
| 164 | void IsWirelessCommunicationEnabled(Kernel::HLERequestContext& ctx) { | 172 | void IsWirelessCommunicationEnabled(Kernel::HLERequestContext& ctx) { |
| 165 | LOG_WARNING(Service_NIFM, "(STUBBED) called"); | 173 | LOG_WARNING(Service_NIFM, "(STUBBED) called"); |
| 174 | |||
| 166 | IPC::ResponseBuilder rb{ctx, 3}; | 175 | IPC::ResponseBuilder rb{ctx, 3}; |
| 167 | rb.Push(RESULT_SUCCESS); | 176 | rb.Push(RESULT_SUCCESS); |
| 168 | rb.Push<u8>(0); | 177 | rb.Push<u8>(0); |
| 169 | } | 178 | } |
| 170 | void IsEthernetCommunicationEnabled(Kernel::HLERequestContext& ctx) { | 179 | void IsEthernetCommunicationEnabled(Kernel::HLERequestContext& ctx) { |
| 171 | LOG_WARNING(Service_NIFM, "(STUBBED) called"); | 180 | LOG_WARNING(Service_NIFM, "(STUBBED) called"); |
| 181 | |||
| 172 | IPC::ResponseBuilder rb{ctx, 3}; | 182 | IPC::ResponseBuilder rb{ctx, 3}; |
| 173 | rb.Push(RESULT_SUCCESS); | 183 | rb.Push(RESULT_SUCCESS); |
| 174 | rb.Push<u8>(0); | 184 | rb.Push<u8>(0); |
| 175 | } | 185 | } |
| 176 | void IsAnyInternetRequestAccepted(Kernel::HLERequestContext& ctx) { | 186 | void IsAnyInternetRequestAccepted(Kernel::HLERequestContext& ctx) { |
| 177 | LOG_WARNING(Service_NIFM, "(STUBBED) called"); | 187 | LOG_WARNING(Service_NIFM, "(STUBBED) called"); |
| 188 | |||
| 178 | IPC::ResponseBuilder rb{ctx, 3}; | 189 | IPC::ResponseBuilder rb{ctx, 3}; |
| 179 | rb.Push(RESULT_SUCCESS); | 190 | rb.Push(RESULT_SUCCESS); |
| 180 | rb.Push<u8>(0); | 191 | rb.Push<u8>(0); |
| @@ -235,17 +246,19 @@ public: | |||
| 235 | } | 246 | } |
| 236 | 247 | ||
| 237 | void CreateGeneralServiceOld(Kernel::HLERequestContext& ctx) { | 248 | void CreateGeneralServiceOld(Kernel::HLERequestContext& ctx) { |
| 249 | LOG_DEBUG(Service_NIFM, "called"); | ||
| 250 | |||
| 238 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 251 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 239 | rb.Push(RESULT_SUCCESS); | 252 | rb.Push(RESULT_SUCCESS); |
| 240 | rb.PushIpcInterface<IGeneralService>(); | 253 | rb.PushIpcInterface<IGeneralService>(); |
| 241 | LOG_DEBUG(Service_NIFM, "called"); | ||
| 242 | } | 254 | } |
| 243 | 255 | ||
| 244 | void CreateGeneralService(Kernel::HLERequestContext& ctx) { | 256 | void CreateGeneralService(Kernel::HLERequestContext& ctx) { |
| 257 | LOG_DEBUG(Service_NIFM, "called"); | ||
| 258 | |||
| 245 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 259 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 246 | rb.Push(RESULT_SUCCESS); | 260 | rb.Push(RESULT_SUCCESS); |
| 247 | rb.PushIpcInterface<IGeneralService>(); | 261 | rb.PushIpcInterface<IGeneralService>(); |
| 248 | LOG_DEBUG(Service_NIFM, "called"); | ||
| 249 | } | 262 | } |
| 250 | }; | 263 | }; |
| 251 | 264 | ||
diff --git a/src/core/hle/service/nim/nim.cpp b/src/core/hle/service/nim/nim.cpp index 18091c9bb..1bbccd444 100644 --- a/src/core/hle/service/nim/nim.cpp +++ b/src/core/hle/service/nim/nim.cpp | |||
| @@ -148,47 +148,53 @@ private: | |||
| 148 | 148 | ||
| 149 | void StartTask(Kernel::HLERequestContext& ctx) { | 149 | void StartTask(Kernel::HLERequestContext& ctx) { |
| 150 | // No need to connect to the internet, just finish the task straight away. | 150 | // No need to connect to the internet, just finish the task straight away. |
| 151 | LOG_DEBUG(Service_NIM, "called"); | ||
| 152 | |||
| 151 | finished_event->Signal(); | 153 | finished_event->Signal(); |
| 152 | IPC::ResponseBuilder rb{ctx, 2}; | 154 | IPC::ResponseBuilder rb{ctx, 2}; |
| 153 | rb.Push(RESULT_SUCCESS); | 155 | rb.Push(RESULT_SUCCESS); |
| 154 | LOG_DEBUG(Service_NIM, "called"); | ||
| 155 | } | 156 | } |
| 156 | 157 | ||
| 157 | void GetFinishNotificationEvent(Kernel::HLERequestContext& ctx) { | 158 | void GetFinishNotificationEvent(Kernel::HLERequestContext& ctx) { |
| 159 | LOG_DEBUG(Service_NIM, "called"); | ||
| 160 | |||
| 158 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 161 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 159 | rb.Push(RESULT_SUCCESS); | 162 | rb.Push(RESULT_SUCCESS); |
| 160 | rb.PushCopyObjects(finished_event); | 163 | rb.PushCopyObjects(finished_event); |
| 161 | LOG_DEBUG(Service_NIM, "called"); | ||
| 162 | } | 164 | } |
| 163 | 165 | ||
| 164 | void GetResult(Kernel::HLERequestContext& ctx) { | 166 | void GetResult(Kernel::HLERequestContext& ctx) { |
| 167 | LOG_DEBUG(Service_NIM, "called"); | ||
| 168 | |||
| 165 | IPC::ResponseBuilder rb{ctx, 2}; | 169 | IPC::ResponseBuilder rb{ctx, 2}; |
| 166 | rb.Push(RESULT_SUCCESS); | 170 | rb.Push(RESULT_SUCCESS); |
| 167 | LOG_DEBUG(Service_NIM, "called"); | ||
| 168 | } | 171 | } |
| 169 | 172 | ||
| 170 | void Cancel(Kernel::HLERequestContext& ctx) { | 173 | void Cancel(Kernel::HLERequestContext& ctx) { |
| 174 | LOG_DEBUG(Service_NIM, "called"); | ||
| 175 | |||
| 171 | finished_event->Clear(); | 176 | finished_event->Clear(); |
| 172 | IPC::ResponseBuilder rb{ctx, 2}; | 177 | IPC::ResponseBuilder rb{ctx, 2}; |
| 173 | rb.Push(RESULT_SUCCESS); | 178 | rb.Push(RESULT_SUCCESS); |
| 174 | LOG_DEBUG(Service_NIM, "called"); | ||
| 175 | } | 179 | } |
| 176 | 180 | ||
| 177 | void IsProcessing(Kernel::HLERequestContext& ctx) { | 181 | void IsProcessing(Kernel::HLERequestContext& ctx) { |
| 182 | LOG_DEBUG(Service_NIM, "called"); | ||
| 183 | |||
| 178 | IPC::ResponseBuilder rb{ctx, 3}; | 184 | IPC::ResponseBuilder rb{ctx, 3}; |
| 179 | rb.Push(RESULT_SUCCESS); | 185 | rb.Push(RESULT_SUCCESS); |
| 180 | rb.PushRaw<u32>(0); // We instantly process the request | 186 | rb.PushRaw<u32>(0); // We instantly process the request |
| 181 | LOG_DEBUG(Service_NIM, "called"); | ||
| 182 | } | 187 | } |
| 183 | 188 | ||
| 184 | void GetServerTime(Kernel::HLERequestContext& ctx) { | 189 | void GetServerTime(Kernel::HLERequestContext& ctx) { |
| 190 | LOG_DEBUG(Service_NIM, "called"); | ||
| 191 | |||
| 185 | const s64 server_time{std::chrono::duration_cast<std::chrono::seconds>( | 192 | const s64 server_time{std::chrono::duration_cast<std::chrono::seconds>( |
| 186 | std::chrono::system_clock::now().time_since_epoch()) | 193 | std::chrono::system_clock::now().time_since_epoch()) |
| 187 | .count()}; | 194 | .count()}; |
| 188 | IPC::ResponseBuilder rb{ctx, 4}; | 195 | IPC::ResponseBuilder rb{ctx, 4}; |
| 189 | rb.Push(RESULT_SUCCESS); | 196 | rb.Push(RESULT_SUCCESS); |
| 190 | rb.PushRaw<s64>(server_time); | 197 | rb.PushRaw<s64>(server_time); |
| 191 | LOG_DEBUG(Service_NIM, "called"); | ||
| 192 | } | 198 | } |
| 193 | }; | 199 | }; |
| 194 | 200 | ||
| @@ -208,23 +214,26 @@ public: | |||
| 208 | 214 | ||
| 209 | private: | 215 | private: |
| 210 | void OpenEnsureNetworkClockAvailabilityService(Kernel::HLERequestContext& ctx) { | 216 | void OpenEnsureNetworkClockAvailabilityService(Kernel::HLERequestContext& ctx) { |
| 217 | LOG_DEBUG(Service_NIM, "called"); | ||
| 218 | |||
| 211 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 219 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 212 | rb.Push(RESULT_SUCCESS); | 220 | rb.Push(RESULT_SUCCESS); |
| 213 | rb.PushIpcInterface<IEnsureNetworkClockAvailabilityService>(); | 221 | rb.PushIpcInterface<IEnsureNetworkClockAvailabilityService>(); |
| 214 | LOG_DEBUG(Service_NIM, "called"); | ||
| 215 | } | 222 | } |
| 216 | 223 | ||
| 217 | // TODO(ogniK): Do we need these? | 224 | // TODO(ogniK): Do we need these? |
| 218 | void SuspendAutonomicTimeCorrection(Kernel::HLERequestContext& ctx) { | 225 | void SuspendAutonomicTimeCorrection(Kernel::HLERequestContext& ctx) { |
| 226 | LOG_WARNING(Service_NIM, "(STUBBED) called"); | ||
| 227 | |||
| 219 | IPC::ResponseBuilder rb{ctx, 2}; | 228 | IPC::ResponseBuilder rb{ctx, 2}; |
| 220 | rb.Push(RESULT_SUCCESS); | 229 | rb.Push(RESULT_SUCCESS); |
| 221 | LOG_WARNING(Service_NIM, "(STUBBED) called"); | ||
| 222 | } | 230 | } |
| 223 | 231 | ||
| 224 | void ResumeAutonomicTimeCorrection(Kernel::HLERequestContext& ctx) { | 232 | void ResumeAutonomicTimeCorrection(Kernel::HLERequestContext& ctx) { |
| 233 | LOG_WARNING(Service_NIM, "(STUBBED) called"); | ||
| 234 | |||
| 225 | IPC::ResponseBuilder rb{ctx, 2}; | 235 | IPC::ResponseBuilder rb{ctx, 2}; |
| 226 | rb.Push(RESULT_SUCCESS); | 236 | rb.Push(RESULT_SUCCESS); |
| 227 | LOG_WARNING(Service_NIM, "(STUBBED) called"); | ||
| 228 | } | 237 | } |
| 229 | }; | 238 | }; |
| 230 | 239 | ||
diff --git a/src/core/hle/service/ns/ns.cpp b/src/core/hle/service/ns/ns.cpp index 1d2978f24..2663f56b1 100644 --- a/src/core/hle/service/ns/ns.cpp +++ b/src/core/hle/service/ns/ns.cpp | |||
| @@ -433,11 +433,11 @@ public: | |||
| 433 | private: | 433 | private: |
| 434 | template <typename T> | 434 | template <typename T> |
| 435 | void PushInterface(Kernel::HLERequestContext& ctx) { | 435 | void PushInterface(Kernel::HLERequestContext& ctx) { |
| 436 | LOG_DEBUG(Service_NS, "called"); | ||
| 437 | |||
| 436 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 438 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 437 | rb.Push(RESULT_SUCCESS); | 439 | rb.Push(RESULT_SUCCESS); |
| 438 | rb.PushIpcInterface<T>(); | 440 | rb.PushIpcInterface<T>(); |
| 439 | |||
| 440 | LOG_DEBUG(Service_NS, "called"); | ||
| 441 | } | 441 | } |
| 442 | }; | 442 | }; |
| 443 | 443 | ||
| @@ -526,11 +526,11 @@ public: | |||
| 526 | 526 | ||
| 527 | private: | 527 | private: |
| 528 | void OpenSystemUpdateControl(Kernel::HLERequestContext& ctx) { | 528 | void OpenSystemUpdateControl(Kernel::HLERequestContext& ctx) { |
| 529 | LOG_DEBUG(Service_NS, "called"); | ||
| 530 | |||
| 529 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 531 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 530 | rb.Push(RESULT_SUCCESS); | 532 | rb.Push(RESULT_SUCCESS); |
| 531 | rb.PushIpcInterface<ISystemUpdateControl>(); | 533 | rb.PushIpcInterface<ISystemUpdateControl>(); |
| 532 | |||
| 533 | LOG_DEBUG(Service_NS, "called"); | ||
| 534 | } | 534 | } |
| 535 | }; | 535 | }; |
| 536 | 536 | ||
diff --git a/src/core/hle/service/ns/pl_u.cpp b/src/core/hle/service/ns/pl_u.cpp index 1066bf505..ad176f89d 100644 --- a/src/core/hle/service/ns/pl_u.cpp +++ b/src/core/hle/service/ns/pl_u.cpp | |||
| @@ -281,6 +281,7 @@ void PL_U::RequestLoad(Kernel::HLERequestContext& ctx) { | |||
| 281 | const u32 shared_font_type{rp.Pop<u32>()}; | 281 | const u32 shared_font_type{rp.Pop<u32>()}; |
| 282 | // Games don't call this so all fonts should be loaded | 282 | // Games don't call this so all fonts should be loaded |
| 283 | LOG_DEBUG(Service_NS, "called, shared_font_type={}", shared_font_type); | 283 | LOG_DEBUG(Service_NS, "called, shared_font_type={}", shared_font_type); |
| 284 | |||
| 284 | IPC::ResponseBuilder rb{ctx, 2}; | 285 | IPC::ResponseBuilder rb{ctx, 2}; |
| 285 | rb.Push(RESULT_SUCCESS); | 286 | rb.Push(RESULT_SUCCESS); |
| 286 | } | 287 | } |
| @@ -288,8 +289,8 @@ void PL_U::RequestLoad(Kernel::HLERequestContext& ctx) { | |||
| 288 | void PL_U::GetLoadState(Kernel::HLERequestContext& ctx) { | 289 | void PL_U::GetLoadState(Kernel::HLERequestContext& ctx) { |
| 289 | IPC::RequestParser rp{ctx}; | 290 | IPC::RequestParser rp{ctx}; |
| 290 | const u32 font_id{rp.Pop<u32>()}; | 291 | const u32 font_id{rp.Pop<u32>()}; |
| 291 | |||
| 292 | LOG_DEBUG(Service_NS, "called, font_id={}", font_id); | 292 | LOG_DEBUG(Service_NS, "called, font_id={}", font_id); |
| 293 | |||
| 293 | IPC::ResponseBuilder rb{ctx, 3}; | 294 | IPC::ResponseBuilder rb{ctx, 3}; |
| 294 | rb.Push(RESULT_SUCCESS); | 295 | rb.Push(RESULT_SUCCESS); |
| 295 | rb.Push<u32>(static_cast<u32>(LoadState::Done)); | 296 | rb.Push<u32>(static_cast<u32>(LoadState::Done)); |
| @@ -298,8 +299,8 @@ void PL_U::GetLoadState(Kernel::HLERequestContext& ctx) { | |||
| 298 | void PL_U::GetSize(Kernel::HLERequestContext& ctx) { | 299 | void PL_U::GetSize(Kernel::HLERequestContext& ctx) { |
| 299 | IPC::RequestParser rp{ctx}; | 300 | IPC::RequestParser rp{ctx}; |
| 300 | const u32 font_id{rp.Pop<u32>()}; | 301 | const u32 font_id{rp.Pop<u32>()}; |
| 301 | |||
| 302 | LOG_DEBUG(Service_NS, "called, font_id={}", font_id); | 302 | LOG_DEBUG(Service_NS, "called, font_id={}", font_id); |
| 303 | |||
| 303 | IPC::ResponseBuilder rb{ctx, 3}; | 304 | IPC::ResponseBuilder rb{ctx, 3}; |
| 304 | rb.Push(RESULT_SUCCESS); | 305 | rb.Push(RESULT_SUCCESS); |
| 305 | rb.Push<u32>(impl->GetSharedFontRegion(font_id).size); | 306 | rb.Push<u32>(impl->GetSharedFontRegion(font_id).size); |
| @@ -308,8 +309,8 @@ void PL_U::GetSize(Kernel::HLERequestContext& ctx) { | |||
| 308 | void PL_U::GetSharedMemoryAddressOffset(Kernel::HLERequestContext& ctx) { | 309 | void PL_U::GetSharedMemoryAddressOffset(Kernel::HLERequestContext& ctx) { |
| 309 | IPC::RequestParser rp{ctx}; | 310 | IPC::RequestParser rp{ctx}; |
| 310 | const u32 font_id{rp.Pop<u32>()}; | 311 | const u32 font_id{rp.Pop<u32>()}; |
| 311 | |||
| 312 | LOG_DEBUG(Service_NS, "called, font_id={}", font_id); | 312 | LOG_DEBUG(Service_NS, "called, font_id={}", font_id); |
| 313 | |||
| 313 | IPC::ResponseBuilder rb{ctx, 3}; | 314 | IPC::ResponseBuilder rb{ctx, 3}; |
| 314 | rb.Push(RESULT_SUCCESS); | 315 | rb.Push(RESULT_SUCCESS); |
| 315 | rb.Push<u32>(impl->GetSharedFontRegion(font_id).offset); | 316 | rb.Push<u32>(impl->GetSharedFontRegion(font_id).offset); |
| @@ -317,6 +318,7 @@ void PL_U::GetSharedMemoryAddressOffset(Kernel::HLERequestContext& ctx) { | |||
| 317 | 318 | ||
| 318 | void PL_U::GetSharedMemoryNativeHandle(Kernel::HLERequestContext& ctx) { | 319 | void PL_U::GetSharedMemoryNativeHandle(Kernel::HLERequestContext& ctx) { |
| 319 | // Map backing memory for the font data | 320 | // Map backing memory for the font data |
| 321 | LOG_DEBUG(Service_NS, "called"); | ||
| 320 | Core::CurrentProcess()->VMManager().MapMemoryBlock(SHARED_FONT_MEM_VADDR, impl->shared_font, 0, | 322 | Core::CurrentProcess()->VMManager().MapMemoryBlock(SHARED_FONT_MEM_VADDR, impl->shared_font, 0, |
| 321 | SHARED_FONT_MEM_SIZE, | 323 | SHARED_FONT_MEM_SIZE, |
| 322 | Kernel::MemoryState::Shared); | 324 | Kernel::MemoryState::Shared); |
| @@ -328,7 +330,6 @@ void PL_U::GetSharedMemoryNativeHandle(Kernel::HLERequestContext& ctx) { | |||
| 328 | Kernel::MemoryPermission::Read, SHARED_FONT_MEM_VADDR, Kernel::MemoryRegion::BASE, | 330 | Kernel::MemoryPermission::Read, SHARED_FONT_MEM_VADDR, Kernel::MemoryRegion::BASE, |
| 329 | "PL_U:shared_font_mem"); | 331 | "PL_U:shared_font_mem"); |
| 330 | 332 | ||
| 331 | LOG_DEBUG(Service_NS, "called"); | ||
| 332 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 333 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 333 | rb.Push(RESULT_SUCCESS); | 334 | rb.Push(RESULT_SUCCESS); |
| 334 | rb.PushCopyObjects(impl->shared_font_mem); | 335 | rb.PushCopyObjects(impl->shared_font_mem); |
| @@ -338,6 +339,7 @@ void PL_U::GetSharedFontInOrderOfPriority(Kernel::HLERequestContext& ctx) { | |||
| 338 | IPC::RequestParser rp{ctx}; | 339 | IPC::RequestParser rp{ctx}; |
| 339 | const u64 language_code{rp.Pop<u64>()}; // TODO(ogniK): Find out what this is used for | 340 | const u64 language_code{rp.Pop<u64>()}; // TODO(ogniK): Find out what this is used for |
| 340 | LOG_DEBUG(Service_NS, "called, language_code={:X}", language_code); | 341 | LOG_DEBUG(Service_NS, "called, language_code={:X}", language_code); |
| 342 | |||
| 341 | IPC::ResponseBuilder rb{ctx, 4}; | 343 | IPC::ResponseBuilder rb{ctx, 4}; |
| 342 | std::vector<u32> font_codes; | 344 | std::vector<u32> font_codes; |
| 343 | std::vector<u32> font_offsets; | 345 | std::vector<u32> font_offsets; |
diff --git a/src/core/hle/service/nvdrv/devices/nvhost_as_gpu.cpp b/src/core/hle/service/nvdrv/devices/nvhost_as_gpu.cpp index c41ef7058..466db7ccd 100644 --- a/src/core/hle/service/nvdrv/devices/nvhost_as_gpu.cpp +++ b/src/core/hle/service/nvdrv/devices/nvhost_as_gpu.cpp | |||
| @@ -54,6 +54,7 @@ u32 nvhost_as_gpu::InitalizeEx(const std::vector<u8>& input, std::vector<u8>& ou | |||
| 54 | IoctlInitalizeEx params{}; | 54 | IoctlInitalizeEx params{}; |
| 55 | std::memcpy(¶ms, input.data(), input.size()); | 55 | std::memcpy(¶ms, input.data(), input.size()); |
| 56 | LOG_WARNING(Service_NVDRV, "(STUBBED) called, big_page_size=0x{:X}", params.big_page_size); | 56 | LOG_WARNING(Service_NVDRV, "(STUBBED) called, big_page_size=0x{:X}", params.big_page_size); |
| 57 | |||
| 57 | return 0; | 58 | return 0; |
| 58 | } | 59 | } |
| 59 | 60 | ||
| @@ -191,6 +192,7 @@ u32 nvhost_as_gpu::BindChannel(const std::vector<u8>& input, std::vector<u8>& ou | |||
| 191 | IoctlBindChannel params{}; | 192 | IoctlBindChannel params{}; |
| 192 | std::memcpy(¶ms, input.data(), input.size()); | 193 | std::memcpy(¶ms, input.data(), input.size()); |
| 193 | LOG_DEBUG(Service_NVDRV, "called, fd={:X}", params.fd); | 194 | LOG_DEBUG(Service_NVDRV, "called, fd={:X}", params.fd); |
| 195 | |||
| 194 | channel = params.fd; | 196 | channel = params.fd; |
| 195 | return 0; | 197 | return 0; |
| 196 | } | 198 | } |
diff --git a/src/core/hle/service/nvdrv/devices/nvhost_ctrl_gpu.cpp b/src/core/hle/service/nvdrv/devices/nvhost_ctrl_gpu.cpp index 792d26e52..d57a54ee8 100644 --- a/src/core/hle/service/nvdrv/devices/nvhost_ctrl_gpu.cpp +++ b/src/core/hle/service/nvdrv/devices/nvhost_ctrl_gpu.cpp | |||
| @@ -103,6 +103,7 @@ u32 nvhost_ctrl_gpu::GetTPCMasks(const std::vector<u8>& input, std::vector<u8>& | |||
| 103 | 103 | ||
| 104 | u32 nvhost_ctrl_gpu::GetActiveSlotMask(const std::vector<u8>& input, std::vector<u8>& output) { | 104 | u32 nvhost_ctrl_gpu::GetActiveSlotMask(const std::vector<u8>& input, std::vector<u8>& output) { |
| 105 | LOG_DEBUG(Service_NVDRV, "called"); | 105 | LOG_DEBUG(Service_NVDRV, "called"); |
| 106 | |||
| 106 | IoctlActiveSlotMask params{}; | 107 | IoctlActiveSlotMask params{}; |
| 107 | if (input.size() > 0) { | 108 | if (input.size() > 0) { |
| 108 | std::memcpy(¶ms, input.data(), input.size()); | 109 | std::memcpy(¶ms, input.data(), input.size()); |
| @@ -115,6 +116,7 @@ u32 nvhost_ctrl_gpu::GetActiveSlotMask(const std::vector<u8>& input, std::vector | |||
| 115 | 116 | ||
| 116 | u32 nvhost_ctrl_gpu::ZCullGetCtxSize(const std::vector<u8>& input, std::vector<u8>& output) { | 117 | u32 nvhost_ctrl_gpu::ZCullGetCtxSize(const std::vector<u8>& input, std::vector<u8>& output) { |
| 117 | LOG_DEBUG(Service_NVDRV, "called"); | 118 | LOG_DEBUG(Service_NVDRV, "called"); |
| 119 | |||
| 118 | IoctlZcullGetCtxSize params{}; | 120 | IoctlZcullGetCtxSize params{}; |
| 119 | if (input.size() > 0) { | 121 | if (input.size() > 0) { |
| 120 | std::memcpy(¶ms, input.data(), input.size()); | 122 | std::memcpy(¶ms, input.data(), input.size()); |
| @@ -126,6 +128,7 @@ u32 nvhost_ctrl_gpu::ZCullGetCtxSize(const std::vector<u8>& input, std::vector<u | |||
| 126 | 128 | ||
| 127 | u32 nvhost_ctrl_gpu::ZCullGetInfo(const std::vector<u8>& input, std::vector<u8>& output) { | 129 | u32 nvhost_ctrl_gpu::ZCullGetInfo(const std::vector<u8>& input, std::vector<u8>& output) { |
| 128 | LOG_DEBUG(Service_NVDRV, "called"); | 130 | LOG_DEBUG(Service_NVDRV, "called"); |
| 131 | |||
| 129 | IoctlNvgpuGpuZcullGetInfoArgs params{}; | 132 | IoctlNvgpuGpuZcullGetInfoArgs params{}; |
| 130 | 133 | ||
| 131 | if (input.size() > 0) { | 134 | if (input.size() > 0) { |
| @@ -148,6 +151,7 @@ u32 nvhost_ctrl_gpu::ZCullGetInfo(const std::vector<u8>& input, std::vector<u8>& | |||
| 148 | 151 | ||
| 149 | u32 nvhost_ctrl_gpu::ZBCSetTable(const std::vector<u8>& input, std::vector<u8>& output) { | 152 | u32 nvhost_ctrl_gpu::ZBCSetTable(const std::vector<u8>& input, std::vector<u8>& output) { |
| 150 | LOG_WARNING(Service_NVDRV, "(STUBBED) called"); | 153 | LOG_WARNING(Service_NVDRV, "(STUBBED) called"); |
| 154 | |||
| 151 | IoctlZbcSetTable params{}; | 155 | IoctlZbcSetTable params{}; |
| 152 | std::memcpy(¶ms, input.data(), input.size()); | 156 | std::memcpy(¶ms, input.data(), input.size()); |
| 153 | // TODO(ogniK): What does this even actually do? | 157 | // TODO(ogniK): What does this even actually do? |
| @@ -157,6 +161,7 @@ u32 nvhost_ctrl_gpu::ZBCSetTable(const std::vector<u8>& input, std::vector<u8>& | |||
| 157 | 161 | ||
| 158 | u32 nvhost_ctrl_gpu::ZBCQueryTable(const std::vector<u8>& input, std::vector<u8>& output) { | 162 | u32 nvhost_ctrl_gpu::ZBCQueryTable(const std::vector<u8>& input, std::vector<u8>& output) { |
| 159 | LOG_WARNING(Service_NVDRV, "(STUBBED) called"); | 163 | LOG_WARNING(Service_NVDRV, "(STUBBED) called"); |
| 164 | |||
| 160 | IoctlZbcQueryTable params{}; | 165 | IoctlZbcQueryTable params{}; |
| 161 | std::memcpy(¶ms, input.data(), input.size()); | 166 | std::memcpy(¶ms, input.data(), input.size()); |
| 162 | // TODO : To implement properly | 167 | // TODO : To implement properly |
| @@ -166,6 +171,7 @@ u32 nvhost_ctrl_gpu::ZBCQueryTable(const std::vector<u8>& input, std::vector<u8> | |||
| 166 | 171 | ||
| 167 | u32 nvhost_ctrl_gpu::FlushL2(const std::vector<u8>& input, std::vector<u8>& output) { | 172 | u32 nvhost_ctrl_gpu::FlushL2(const std::vector<u8>& input, std::vector<u8>& output) { |
| 168 | LOG_WARNING(Service_NVDRV, "(STUBBED) called"); | 173 | LOG_WARNING(Service_NVDRV, "(STUBBED) called"); |
| 174 | |||
| 169 | IoctlFlushL2 params{}; | 175 | IoctlFlushL2 params{}; |
| 170 | std::memcpy(¶ms, input.data(), input.size()); | 176 | std::memcpy(¶ms, input.data(), input.size()); |
| 171 | // TODO : To implement properly | 177 | // TODO : To implement properly |
| @@ -175,6 +181,7 @@ u32 nvhost_ctrl_gpu::FlushL2(const std::vector<u8>& input, std::vector<u8>& outp | |||
| 175 | 181 | ||
| 176 | u32 nvhost_ctrl_gpu::GetGpuTime(const std::vector<u8>& input, std::vector<u8>& output) { | 182 | u32 nvhost_ctrl_gpu::GetGpuTime(const std::vector<u8>& input, std::vector<u8>& output) { |
| 177 | LOG_DEBUG(Service_NVDRV, "called"); | 183 | LOG_DEBUG(Service_NVDRV, "called"); |
| 184 | |||
| 178 | IoctlGetGpuTime params{}; | 185 | IoctlGetGpuTime params{}; |
| 179 | std::memcpy(¶ms, input.data(), input.size()); | 186 | std::memcpy(¶ms, input.data(), input.size()); |
| 180 | params.gpu_time = CoreTiming::cyclesToNs(CoreTiming::GetTicks()); | 187 | params.gpu_time = CoreTiming::cyclesToNs(CoreTiming::GetTicks()); |
diff --git a/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp b/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp index 874d5e1c3..dbeb26547 100644 --- a/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp +++ b/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp | |||
| @@ -61,12 +61,14 @@ u32 nvhost_gpu::SetNVMAPfd(const std::vector<u8>& input, std::vector<u8>& output | |||
| 61 | IoctlSetNvmapFD params{}; | 61 | IoctlSetNvmapFD params{}; |
| 62 | std::memcpy(¶ms, input.data(), input.size()); | 62 | std::memcpy(¶ms, input.data(), input.size()); |
| 63 | LOG_DEBUG(Service_NVDRV, "called, fd={}", params.nvmap_fd); | 63 | LOG_DEBUG(Service_NVDRV, "called, fd={}", params.nvmap_fd); |
| 64 | |||
| 64 | nvmap_fd = params.nvmap_fd; | 65 | nvmap_fd = params.nvmap_fd; |
| 65 | return 0; | 66 | return 0; |
| 66 | } | 67 | } |
| 67 | 68 | ||
| 68 | u32 nvhost_gpu::SetClientData(const std::vector<u8>& input, std::vector<u8>& output) { | 69 | u32 nvhost_gpu::SetClientData(const std::vector<u8>& input, std::vector<u8>& output) { |
| 69 | LOG_DEBUG(Service_NVDRV, "called"); | 70 | LOG_DEBUG(Service_NVDRV, "called"); |
| 71 | |||
| 70 | IoctlClientData params{}; | 72 | IoctlClientData params{}; |
| 71 | std::memcpy(¶ms, input.data(), input.size()); | 73 | std::memcpy(¶ms, input.data(), input.size()); |
| 72 | user_data = params.data; | 74 | user_data = params.data; |
| @@ -75,6 +77,7 @@ u32 nvhost_gpu::SetClientData(const std::vector<u8>& input, std::vector<u8>& out | |||
| 75 | 77 | ||
| 76 | u32 nvhost_gpu::GetClientData(const std::vector<u8>& input, std::vector<u8>& output) { | 78 | u32 nvhost_gpu::GetClientData(const std::vector<u8>& input, std::vector<u8>& output) { |
| 77 | LOG_DEBUG(Service_NVDRV, "called"); | 79 | LOG_DEBUG(Service_NVDRV, "called"); |
| 80 | |||
| 78 | IoctlClientData params{}; | 81 | IoctlClientData params{}; |
| 79 | std::memcpy(¶ms, input.data(), input.size()); | 82 | std::memcpy(¶ms, input.data(), input.size()); |
| 80 | params.data = user_data; | 83 | params.data = user_data; |
| @@ -86,6 +89,7 @@ u32 nvhost_gpu::ZCullBind(const std::vector<u8>& input, std::vector<u8>& output) | |||
| 86 | std::memcpy(&zcull_params, input.data(), input.size()); | 89 | std::memcpy(&zcull_params, input.data(), input.size()); |
| 87 | LOG_DEBUG(Service_NVDRV, "called, gpu_va={:X}, mode={:X}", zcull_params.gpu_va, | 90 | LOG_DEBUG(Service_NVDRV, "called, gpu_va={:X}, mode={:X}", zcull_params.gpu_va, |
| 88 | zcull_params.mode); | 91 | zcull_params.mode); |
| 92 | |||
| 89 | std::memcpy(output.data(), &zcull_params, output.size()); | 93 | std::memcpy(output.data(), &zcull_params, output.size()); |
| 90 | return 0; | 94 | return 0; |
| 91 | } | 95 | } |
| @@ -95,6 +99,7 @@ u32 nvhost_gpu::SetErrorNotifier(const std::vector<u8>& input, std::vector<u8>& | |||
| 95 | std::memcpy(¶ms, input.data(), input.size()); | 99 | std::memcpy(¶ms, input.data(), input.size()); |
| 96 | LOG_WARNING(Service_NVDRV, "(STUBBED) called, offset={:X}, size={:X}, mem={:X}", params.offset, | 100 | LOG_WARNING(Service_NVDRV, "(STUBBED) called, offset={:X}, size={:X}, mem={:X}", params.offset, |
| 97 | params.size, params.mem); | 101 | params.size, params.mem); |
| 102 | |||
| 98 | std::memcpy(output.data(), ¶ms, output.size()); | 103 | std::memcpy(output.data(), ¶ms, output.size()); |
| 99 | return 0; | 104 | return 0; |
| 100 | } | 105 | } |
| @@ -102,6 +107,7 @@ u32 nvhost_gpu::SetErrorNotifier(const std::vector<u8>& input, std::vector<u8>& | |||
| 102 | u32 nvhost_gpu::SetChannelPriority(const std::vector<u8>& input, std::vector<u8>& output) { | 107 | u32 nvhost_gpu::SetChannelPriority(const std::vector<u8>& input, std::vector<u8>& output) { |
| 103 | std::memcpy(&channel_priority, input.data(), input.size()); | 108 | std::memcpy(&channel_priority, input.data(), input.size()); |
| 104 | LOG_DEBUG(Service_NVDRV, "(STUBBED) called, priority={:X}", channel_priority); | 109 | LOG_DEBUG(Service_NVDRV, "(STUBBED) called, priority={:X}", channel_priority); |
| 110 | |||
| 105 | return 0; | 111 | return 0; |
| 106 | } | 112 | } |
| 107 | 113 | ||
| @@ -113,6 +119,7 @@ u32 nvhost_gpu::AllocGPFIFOEx2(const std::vector<u8>& input, std::vector<u8>& ou | |||
| 113 | "unk1={:X}, unk2={:X}, unk3={:X}", | 119 | "unk1={:X}, unk2={:X}, unk3={:X}", |
| 114 | params.num_entries, params.flags, params.unk0, params.unk1, params.unk2, | 120 | params.num_entries, params.flags, params.unk0, params.unk1, params.unk2, |
| 115 | params.unk3); | 121 | params.unk3); |
| 122 | |||
| 116 | params.fence_out.id = 0; | 123 | params.fence_out.id = 0; |
| 117 | params.fence_out.value = 0; | 124 | params.fence_out.value = 0; |
| 118 | std::memcpy(output.data(), ¶ms, output.size()); | 125 | std::memcpy(output.data(), ¶ms, output.size()); |
| @@ -124,6 +131,7 @@ u32 nvhost_gpu::AllocateObjectContext(const std::vector<u8>& input, std::vector< | |||
| 124 | std::memcpy(¶ms, input.data(), input.size()); | 131 | std::memcpy(¶ms, input.data(), input.size()); |
| 125 | LOG_WARNING(Service_NVDRV, "(STUBBED) called, class_num={:X}, flags={:X}", params.class_num, | 132 | LOG_WARNING(Service_NVDRV, "(STUBBED) called, class_num={:X}, flags={:X}", params.class_num, |
| 126 | params.flags); | 133 | params.flags); |
| 134 | |||
| 127 | params.obj_id = 0x0; | 135 | params.obj_id = 0x0; |
| 128 | std::memcpy(output.data(), ¶ms, output.size()); | 136 | std::memcpy(output.data(), ¶ms, output.size()); |
| 129 | return 0; | 137 | return 0; |
| @@ -179,6 +187,7 @@ u32 nvhost_gpu::GetWaitbase(const std::vector<u8>& input, std::vector<u8>& outpu | |||
| 179 | IoctlGetWaitbase params{}; | 187 | IoctlGetWaitbase params{}; |
| 180 | std::memcpy(¶ms, input.data(), sizeof(IoctlGetWaitbase)); | 188 | std::memcpy(¶ms, input.data(), sizeof(IoctlGetWaitbase)); |
| 181 | LOG_INFO(Service_NVDRV, "called, unknown=0x{:X}", params.unknown); | 189 | LOG_INFO(Service_NVDRV, "called, unknown=0x{:X}", params.unknown); |
| 190 | |||
| 182 | params.value = 0; // Seems to be hard coded at 0 | 191 | params.value = 0; // Seems to be hard coded at 0 |
| 183 | std::memcpy(output.data(), ¶ms, output.size()); | 192 | std::memcpy(output.data(), ¶ms, output.size()); |
| 184 | return 0; | 193 | return 0; |
| @@ -188,6 +197,7 @@ u32 nvhost_gpu::ChannelSetTimeout(const std::vector<u8>& input, std::vector<u8>& | |||
| 188 | IoctlChannelSetTimeout params{}; | 197 | IoctlChannelSetTimeout params{}; |
| 189 | std::memcpy(¶ms, input.data(), sizeof(IoctlChannelSetTimeout)); | 198 | std::memcpy(¶ms, input.data(), sizeof(IoctlChannelSetTimeout)); |
| 190 | LOG_INFO(Service_NVDRV, "called, timeout=0x{:X}", params.timeout); | 199 | LOG_INFO(Service_NVDRV, "called, timeout=0x{:X}", params.timeout); |
| 200 | |||
| 191 | return 0; | 201 | return 0; |
| 192 | } | 202 | } |
| 193 | 203 | ||
diff --git a/src/core/hle/service/nvdrv/devices/nvhost_nvdec.cpp b/src/core/hle/service/nvdrv/devices/nvhost_nvdec.cpp index 46dbbc37c..f5e8ea7c3 100644 --- a/src/core/hle/service/nvdrv/devices/nvhost_nvdec.cpp +++ b/src/core/hle/service/nvdrv/devices/nvhost_nvdec.cpp | |||
| @@ -30,6 +30,7 @@ u32 nvhost_nvdec::SetNVMAPfd(const std::vector<u8>& input, std::vector<u8>& outp | |||
| 30 | IoctlSetNvmapFD params{}; | 30 | IoctlSetNvmapFD params{}; |
| 31 | std::memcpy(¶ms, input.data(), input.size()); | 31 | std::memcpy(¶ms, input.data(), input.size()); |
| 32 | LOG_DEBUG(Service_NVDRV, "called, fd={}", params.nvmap_fd); | 32 | LOG_DEBUG(Service_NVDRV, "called, fd={}", params.nvmap_fd); |
| 33 | |||
| 33 | nvmap_fd = params.nvmap_fd; | 34 | nvmap_fd = params.nvmap_fd; |
| 34 | return 0; | 35 | return 0; |
| 35 | } | 36 | } |
diff --git a/src/core/hle/service/nvdrv/devices/nvhost_nvjpg.cpp b/src/core/hle/service/nvdrv/devices/nvhost_nvjpg.cpp index c67f934f6..3e0951ab0 100644 --- a/src/core/hle/service/nvdrv/devices/nvhost_nvjpg.cpp +++ b/src/core/hle/service/nvdrv/devices/nvhost_nvjpg.cpp | |||
| @@ -30,6 +30,7 @@ u32 nvhost_nvjpg::SetNVMAPfd(const std::vector<u8>& input, std::vector<u8>& outp | |||
| 30 | IoctlSetNvmapFD params{}; | 30 | IoctlSetNvmapFD params{}; |
| 31 | std::memcpy(¶ms, input.data(), input.size()); | 31 | std::memcpy(¶ms, input.data(), input.size()); |
| 32 | LOG_DEBUG(Service_NVDRV, "called, fd={}", params.nvmap_fd); | 32 | LOG_DEBUG(Service_NVDRV, "called, fd={}", params.nvmap_fd); |
| 33 | |||
| 33 | nvmap_fd = params.nvmap_fd; | 34 | nvmap_fd = params.nvmap_fd; |
| 34 | return 0; | 35 | return 0; |
| 35 | } | 36 | } |
diff --git a/src/core/hle/service/nvdrv/devices/nvhost_vic.cpp b/src/core/hle/service/nvdrv/devices/nvhost_vic.cpp index 727b9fee4..d544f0f31 100644 --- a/src/core/hle/service/nvdrv/devices/nvhost_vic.cpp +++ b/src/core/hle/service/nvdrv/devices/nvhost_vic.cpp | |||
| @@ -30,6 +30,7 @@ u32 nvhost_vic::SetNVMAPfd(const std::vector<u8>& input, std::vector<u8>& output | |||
| 30 | IoctlSetNvmapFD params{}; | 30 | IoctlSetNvmapFD params{}; |
| 31 | std::memcpy(¶ms, input.data(), input.size()); | 31 | std::memcpy(¶ms, input.data(), input.size()); |
| 32 | LOG_DEBUG(Service_NVDRV, "called, fd={}", params.nvmap_fd); | 32 | LOG_DEBUG(Service_NVDRV, "called, fd={}", params.nvmap_fd); |
| 33 | |||
| 33 | nvmap_fd = params.nvmap_fd; | 34 | nvmap_fd = params.nvmap_fd; |
| 34 | return 0; | 35 | return 0; |
| 35 | } | 36 | } |
diff --git a/src/core/hle/service/nvdrv/devices/nvmap.cpp b/src/core/hle/service/nvdrv/devices/nvmap.cpp index 43651d8a6..85ba5d4b7 100644 --- a/src/core/hle/service/nvdrv/devices/nvmap.cpp +++ b/src/core/hle/service/nvdrv/devices/nvmap.cpp | |||
| @@ -54,6 +54,7 @@ u32 nvmap::IocCreate(const std::vector<u8>& input, std::vector<u8>& output) { | |||
| 54 | LOG_DEBUG(Service_NVDRV, "size=0x{:08X}", params.size); | 54 | LOG_DEBUG(Service_NVDRV, "size=0x{:08X}", params.size); |
| 55 | 55 | ||
| 56 | if (!params.size) { | 56 | if (!params.size) { |
| 57 | LOG_ERROR(Service_NVDRV, "Size is 0"); | ||
| 57 | return static_cast<u32>(NvErrCodes::InvalidValue); | 58 | return static_cast<u32>(NvErrCodes::InvalidValue); |
| 58 | } | 59 | } |
| 59 | // Create a new nvmap object and obtain a handle to it. | 60 | // Create a new nvmap object and obtain a handle to it. |
| @@ -78,10 +79,12 @@ u32 nvmap::IocAlloc(const std::vector<u8>& input, std::vector<u8>& output) { | |||
| 78 | LOG_DEBUG(Service_NVDRV, "called, addr={:X}", params.addr); | 79 | LOG_DEBUG(Service_NVDRV, "called, addr={:X}", params.addr); |
| 79 | 80 | ||
| 80 | if (!params.handle) { | 81 | if (!params.handle) { |
| 82 | LOG_ERROR(Service_NVDRV, "Handle is zero"); | ||
| 81 | return static_cast<u32>(NvErrCodes::InvalidValue); | 83 | return static_cast<u32>(NvErrCodes::InvalidValue); |
| 82 | } | 84 | } |
| 83 | 85 | ||
| 84 | if ((params.align - 1) & params.align) { | 86 | if ((params.align - 1) & params.align) { |
| 87 | LOG_ERROR(Service_NVDRV, "Incorrect alignment"); | ||
| 85 | return static_cast<u32>(NvErrCodes::InvalidValue); | 88 | return static_cast<u32>(NvErrCodes::InvalidValue); |
| 86 | } | 89 | } |
| 87 | 90 | ||
| @@ -92,10 +95,12 @@ u32 nvmap::IocAlloc(const std::vector<u8>& input, std::vector<u8>& output) { | |||
| 92 | 95 | ||
| 93 | auto object = GetObject(params.handle); | 96 | auto object = GetObject(params.handle); |
| 94 | if (!object) { | 97 | if (!object) { |
| 98 | LOG_ERROR(Service_NVDRV, "Object does not exist"); | ||
| 95 | return static_cast<u32>(NvErrCodes::InvalidValue); | 99 | return static_cast<u32>(NvErrCodes::InvalidValue); |
| 96 | } | 100 | } |
| 97 | 101 | ||
| 98 | if (object->status == Object::Status::Allocated) { | 102 | if (object->status == Object::Status::Allocated) { |
| 103 | LOG_ERROR(Service_NVDRV, "Object is already allocated"); | ||
| 99 | return static_cast<u32>(NvErrCodes::OperationNotPermitted); | 104 | return static_cast<u32>(NvErrCodes::OperationNotPermitted); |
| 100 | } | 105 | } |
| 101 | 106 | ||
| @@ -116,11 +121,13 @@ u32 nvmap::IocGetId(const std::vector<u8>& input, std::vector<u8>& output) { | |||
| 116 | LOG_WARNING(Service_NVDRV, "called"); | 121 | LOG_WARNING(Service_NVDRV, "called"); |
| 117 | 122 | ||
| 118 | if (!params.handle) { | 123 | if (!params.handle) { |
| 124 | LOG_ERROR(Service_NVDRV, "Handle is zero"); | ||
| 119 | return static_cast<u32>(NvErrCodes::InvalidValue); | 125 | return static_cast<u32>(NvErrCodes::InvalidValue); |
| 120 | } | 126 | } |
| 121 | 127 | ||
| 122 | auto object = GetObject(params.handle); | 128 | auto object = GetObject(params.handle); |
| 123 | if (!object) { | 129 | if (!object) { |
| 130 | LOG_ERROR(Service_NVDRV, "Object does not exist"); | ||
| 124 | return static_cast<u32>(NvErrCodes::OperationNotPermitted); | 131 | return static_cast<u32>(NvErrCodes::OperationNotPermitted); |
| 125 | } | 132 | } |
| 126 | 133 | ||
| @@ -139,11 +146,13 @@ u32 nvmap::IocFromId(const std::vector<u8>& input, std::vector<u8>& output) { | |||
| 139 | auto itr = std::find_if(handles.begin(), handles.end(), | 146 | auto itr = std::find_if(handles.begin(), handles.end(), |
| 140 | [&](const auto& entry) { return entry.second->id == params.id; }); | 147 | [&](const auto& entry) { return entry.second->id == params.id; }); |
| 141 | if (itr == handles.end()) { | 148 | if (itr == handles.end()) { |
| 149 | LOG_ERROR(Service_NVDRV, "Object does not exist"); | ||
| 142 | return static_cast<u32>(NvErrCodes::InvalidValue); | 150 | return static_cast<u32>(NvErrCodes::InvalidValue); |
| 143 | } | 151 | } |
| 144 | 152 | ||
| 145 | auto& object = itr->second; | 153 | auto& object = itr->second; |
| 146 | if (object->status != Object::Status::Allocated) { | 154 | if (object->status != Object::Status::Allocated) { |
| 155 | LOG_ERROR(Service_NVDRV, "Object is not allocated"); | ||
| 147 | return static_cast<u32>(NvErrCodes::InvalidValue); | 156 | return static_cast<u32>(NvErrCodes::InvalidValue); |
| 148 | } | 157 | } |
| 149 | 158 | ||
| @@ -166,10 +175,12 @@ u32 nvmap::IocParam(const std::vector<u8>& input, std::vector<u8>& output) { | |||
| 166 | 175 | ||
| 167 | auto object = GetObject(params.handle); | 176 | auto object = GetObject(params.handle); |
| 168 | if (!object) { | 177 | if (!object) { |
| 178 | LOG_ERROR(Service_NVDRV, "Object does not exist"); | ||
| 169 | return static_cast<u32>(NvErrCodes::InvalidValue); | 179 | return static_cast<u32>(NvErrCodes::InvalidValue); |
| 170 | } | 180 | } |
| 171 | 181 | ||
| 172 | if (object->status != Object::Status::Allocated) { | 182 | if (object->status != Object::Status::Allocated) { |
| 183 | LOG_ERROR(Service_NVDRV, "Object is not allocated"); | ||
| 173 | return static_cast<u32>(NvErrCodes::OperationNotPermitted); | 184 | return static_cast<u32>(NvErrCodes::OperationNotPermitted); |
| 174 | } | 185 | } |
| 175 | 186 | ||
| @@ -209,9 +220,12 @@ u32 nvmap::IocFree(const std::vector<u8>& input, std::vector<u8>& output) { | |||
| 209 | 220 | ||
| 210 | auto itr = handles.find(params.handle); | 221 | auto itr = handles.find(params.handle); |
| 211 | if (itr == handles.end()) { | 222 | if (itr == handles.end()) { |
| 223 | LOG_ERROR(Service_NVDRV, "Object does not exist"); | ||
| 212 | return static_cast<u32>(NvErrCodes::InvalidValue); | 224 | return static_cast<u32>(NvErrCodes::InvalidValue); |
| 213 | } | 225 | } |
| 214 | if (!itr->second->refcount) { | 226 | if (!itr->second->refcount) { |
| 227 | LOG_ERROR(Service_NVDRV, | ||
| 228 | "There is no references to this object. The object is already freed"); | ||
| 215 | return static_cast<u32>(NvErrCodes::InvalidValue); | 229 | return static_cast<u32>(NvErrCodes::InvalidValue); |
| 216 | } | 230 | } |
| 217 | 231 | ||
diff --git a/src/core/hle/service/nvdrv/interface.cpp b/src/core/hle/service/nvdrv/interface.cpp index 602086eed..ff76e0524 100644 --- a/src/core/hle/service/nvdrv/interface.cpp +++ b/src/core/hle/service/nvdrv/interface.cpp | |||
| @@ -55,6 +55,7 @@ void NVDRV::Close(Kernel::HLERequestContext& ctx) { | |||
| 55 | 55 | ||
| 56 | void NVDRV::Initialize(Kernel::HLERequestContext& ctx) { | 56 | void NVDRV::Initialize(Kernel::HLERequestContext& ctx) { |
| 57 | LOG_WARNING(Service_NVDRV, "(STUBBED) called"); | 57 | LOG_WARNING(Service_NVDRV, "(STUBBED) called"); |
| 58 | |||
| 58 | IPC::ResponseBuilder rb{ctx, 3}; | 59 | IPC::ResponseBuilder rb{ctx, 3}; |
| 59 | rb.Push(RESULT_SUCCESS); | 60 | rb.Push(RESULT_SUCCESS); |
| 60 | rb.Push<u32>(0); | 61 | rb.Push<u32>(0); |
| @@ -75,8 +76,8 @@ void NVDRV::QueryEvent(Kernel::HLERequestContext& ctx) { | |||
| 75 | void NVDRV::SetClientPID(Kernel::HLERequestContext& ctx) { | 76 | void NVDRV::SetClientPID(Kernel::HLERequestContext& ctx) { |
| 76 | IPC::RequestParser rp{ctx}; | 77 | IPC::RequestParser rp{ctx}; |
| 77 | pid = rp.Pop<u64>(); | 78 | pid = rp.Pop<u64>(); |
| 78 | |||
| 79 | LOG_WARNING(Service_NVDRV, "(STUBBED) called, pid=0x{:X}", pid); | 79 | LOG_WARNING(Service_NVDRV, "(STUBBED) called, pid=0x{:X}", pid); |
| 80 | |||
| 80 | IPC::ResponseBuilder rb{ctx, 3}; | 81 | IPC::ResponseBuilder rb{ctx, 3}; |
| 81 | rb.Push(RESULT_SUCCESS); | 82 | rb.Push(RESULT_SUCCESS); |
| 82 | rb.Push<u32>(0); | 83 | rb.Push<u32>(0); |
| @@ -84,12 +85,14 @@ void NVDRV::SetClientPID(Kernel::HLERequestContext& ctx) { | |||
| 84 | 85 | ||
| 85 | void NVDRV::FinishInitialize(Kernel::HLERequestContext& ctx) { | 86 | void NVDRV::FinishInitialize(Kernel::HLERequestContext& ctx) { |
| 86 | LOG_WARNING(Service_NVDRV, "(STUBBED) called"); | 87 | LOG_WARNING(Service_NVDRV, "(STUBBED) called"); |
| 88 | |||
| 87 | IPC::ResponseBuilder rb{ctx, 2}; | 89 | IPC::ResponseBuilder rb{ctx, 2}; |
| 88 | rb.Push(RESULT_SUCCESS); | 90 | rb.Push(RESULT_SUCCESS); |
| 89 | } | 91 | } |
| 90 | 92 | ||
| 91 | void NVDRV::GetStatus(Kernel::HLERequestContext& ctx) { | 93 | void NVDRV::GetStatus(Kernel::HLERequestContext& ctx) { |
| 92 | LOG_WARNING(Service_NVDRV, "(STUBBED) called"); | 94 | LOG_WARNING(Service_NVDRV, "(STUBBED) called"); |
| 95 | |||
| 93 | IPC::ResponseBuilder rb{ctx, 2}; | 96 | IPC::ResponseBuilder rb{ctx, 2}; |
| 94 | rb.Push(RESULT_SUCCESS); | 97 | rb.Push(RESULT_SUCCESS); |
| 95 | } | 98 | } |
| @@ -98,6 +101,7 @@ void NVDRV::DumpGraphicsMemoryInfo(Kernel::HLERequestContext& ctx) { | |||
| 98 | // According to SwitchBrew, this has no inputs and no outputs, so effectively does nothing on | 101 | // According to SwitchBrew, this has no inputs and no outputs, so effectively does nothing on |
| 99 | // retail hardware. | 102 | // retail hardware. |
| 100 | LOG_DEBUG(Service_NVDRV, "called"); | 103 | LOG_DEBUG(Service_NVDRV, "called"); |
| 104 | |||
| 101 | IPC::ResponseBuilder rb{ctx, 2}; | 105 | IPC::ResponseBuilder rb{ctx, 2}; |
| 102 | rb.Push(RESULT_SUCCESS); | 106 | rb.Push(RESULT_SUCCESS); |
| 103 | } | 107 | } |
diff --git a/src/core/hle/service/nvflinger/buffer_queue.cpp b/src/core/hle/service/nvflinger/buffer_queue.cpp index 630ebbfc7..172a1a441 100644 --- a/src/core/hle/service/nvflinger/buffer_queue.cpp +++ b/src/core/hle/service/nvflinger/buffer_queue.cpp | |||
| @@ -20,13 +20,13 @@ BufferQueue::BufferQueue(u32 id, u64 layer_id) : id(id), layer_id(layer_id) { | |||
| 20 | BufferQueue::~BufferQueue() = default; | 20 | BufferQueue::~BufferQueue() = default; |
| 21 | 21 | ||
| 22 | void BufferQueue::SetPreallocatedBuffer(u32 slot, const IGBPBuffer& igbp_buffer) { | 22 | void BufferQueue::SetPreallocatedBuffer(u32 slot, const IGBPBuffer& igbp_buffer) { |
| 23 | LOG_WARNING(Service, "Adding graphics buffer {}", slot); | ||
| 24 | |||
| 23 | Buffer buffer{}; | 25 | Buffer buffer{}; |
| 24 | buffer.slot = slot; | 26 | buffer.slot = slot; |
| 25 | buffer.igbp_buffer = igbp_buffer; | 27 | buffer.igbp_buffer = igbp_buffer; |
| 26 | buffer.status = Buffer::Status::Free; | 28 | buffer.status = Buffer::Status::Free; |
| 27 | 29 | ||
| 28 | LOG_WARNING(Service, "Adding graphics buffer {}", slot); | ||
| 29 | |||
| 30 | queue.emplace_back(buffer); | 30 | queue.emplace_back(buffer); |
| 31 | buffer_wait_event->Signal(); | 31 | buffer_wait_event->Signal(); |
| 32 | } | 32 | } |
| @@ -92,6 +92,7 @@ void BufferQueue::ReleaseBuffer(u32 slot) { | |||
| 92 | 92 | ||
| 93 | u32 BufferQueue::Query(QueryType type) { | 93 | u32 BufferQueue::Query(QueryType type) { |
| 94 | LOG_WARNING(Service, "(STUBBED) called type={}", static_cast<u32>(type)); | 94 | LOG_WARNING(Service, "(STUBBED) called type={}", static_cast<u32>(type)); |
| 95 | |||
| 95 | switch (type) { | 96 | switch (type) { |
| 96 | case QueryType::NativeWindowFormat: | 97 | case QueryType::NativeWindowFormat: |
| 97 | // TODO(Subv): Use an enum for this | 98 | // TODO(Subv): Use an enum for this |
diff --git a/src/core/hle/service/pctl/module.cpp b/src/core/hle/service/pctl/module.cpp index 4fd185f69..6081f41e1 100644 --- a/src/core/hle/service/pctl/module.cpp +++ b/src/core/hle/service/pctl/module.cpp | |||
| @@ -114,29 +114,33 @@ public: | |||
| 114 | private: | 114 | private: |
| 115 | void Initialize(Kernel::HLERequestContext& ctx) { | 115 | void Initialize(Kernel::HLERequestContext& ctx) { |
| 116 | LOG_WARNING(Service_PCTL, "(STUBBED) called"); | 116 | LOG_WARNING(Service_PCTL, "(STUBBED) called"); |
| 117 | |||
| 117 | IPC::ResponseBuilder rb{ctx, 2, 0, 0}; | 118 | IPC::ResponseBuilder rb{ctx, 2, 0, 0}; |
| 118 | rb.Push(RESULT_SUCCESS); | 119 | rb.Push(RESULT_SUCCESS); |
| 119 | } | 120 | } |
| 120 | 121 | ||
| 121 | void CheckFreeCommunicationPermission(Kernel::HLERequestContext& ctx) { | 122 | void CheckFreeCommunicationPermission(Kernel::HLERequestContext& ctx) { |
| 122 | LOG_WARNING(Service_PCTL, "(STUBBED) called"); | 123 | LOG_WARNING(Service_PCTL, "(STUBBED) called"); |
| 124 | |||
| 123 | IPC::ResponseBuilder rb{ctx, 2}; | 125 | IPC::ResponseBuilder rb{ctx, 2}; |
| 124 | rb.Push(RESULT_SUCCESS); | 126 | rb.Push(RESULT_SUCCESS); |
| 125 | } | 127 | } |
| 126 | }; | 128 | }; |
| 127 | 129 | ||
| 128 | void Module::Interface::CreateService(Kernel::HLERequestContext& ctx) { | 130 | void Module::Interface::CreateService(Kernel::HLERequestContext& ctx) { |
| 131 | LOG_DEBUG(Service_PCTL, "called"); | ||
| 132 | |||
| 129 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 133 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 130 | rb.Push(RESULT_SUCCESS); | 134 | rb.Push(RESULT_SUCCESS); |
| 131 | rb.PushIpcInterface<IParentalControlService>(); | 135 | rb.PushIpcInterface<IParentalControlService>(); |
| 132 | LOG_DEBUG(Service_PCTL, "called"); | ||
| 133 | } | 136 | } |
| 134 | 137 | ||
| 135 | void Module::Interface::CreateServiceWithoutInitialize(Kernel::HLERequestContext& ctx) { | 138 | void Module::Interface::CreateServiceWithoutInitialize(Kernel::HLERequestContext& ctx) { |
| 139 | LOG_DEBUG(Service_PCTL, "called"); | ||
| 140 | |||
| 136 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 141 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 137 | rb.Push(RESULT_SUCCESS); | 142 | rb.Push(RESULT_SUCCESS); |
| 138 | rb.PushIpcInterface<IParentalControlService>(); | 143 | rb.PushIpcInterface<IParentalControlService>(); |
| 139 | LOG_DEBUG(Service_PCTL, "called"); | ||
| 140 | } | 144 | } |
| 141 | 145 | ||
| 142 | Module::Interface::Interface(std::shared_ptr<Module> module, const char* name) | 146 | Module::Interface::Interface(std::shared_ptr<Module> module, const char* name) |
diff --git a/src/core/hle/service/pm/pm.cpp b/src/core/hle/service/pm/pm.cpp index 6ec35ca60..53e7da9c3 100644 --- a/src/core/hle/service/pm/pm.cpp +++ b/src/core/hle/service/pm/pm.cpp | |||
| @@ -20,11 +20,11 @@ public: | |||
| 20 | 20 | ||
| 21 | private: | 21 | private: |
| 22 | void GetBootMode(Kernel::HLERequestContext& ctx) { | 22 | void GetBootMode(Kernel::HLERequestContext& ctx) { |
| 23 | LOG_DEBUG(Service_PM, "called"); | ||
| 24 | |||
| 23 | IPC::ResponseBuilder rb{ctx, 3}; | 25 | IPC::ResponseBuilder rb{ctx, 3}; |
| 24 | rb.Push(RESULT_SUCCESS); | 26 | rb.Push(RESULT_SUCCESS); |
| 25 | rb.Push<u32>(static_cast<u32>(SystemBootMode::Normal)); // Normal boot mode | 27 | rb.Push<u32>(static_cast<u32>(SystemBootMode::Normal)); // Normal boot mode |
| 26 | |||
| 27 | LOG_DEBUG(Service_PM, "called"); | ||
| 28 | } | 28 | } |
| 29 | }; | 29 | }; |
| 30 | 30 | ||
diff --git a/src/core/hle/service/psc/psc.cpp b/src/core/hle/service/psc/psc.cpp index bbad870a2..0ba0a4076 100644 --- a/src/core/hle/service/psc/psc.cpp +++ b/src/core/hle/service/psc/psc.cpp | |||
| @@ -61,11 +61,11 @@ public: | |||
| 61 | 61 | ||
| 62 | private: | 62 | private: |
| 63 | void GetPmModule(Kernel::HLERequestContext& ctx) { | 63 | void GetPmModule(Kernel::HLERequestContext& ctx) { |
| 64 | LOG_DEBUG(Service_PSC, "called"); | ||
| 65 | |||
| 64 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 66 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 65 | rb.Push(RESULT_SUCCESS); | 67 | rb.Push(RESULT_SUCCESS); |
| 66 | rb.PushIpcInterface<IPmModule>(); | 68 | rb.PushIpcInterface<IPmModule>(); |
| 67 | |||
| 68 | LOG_DEBUG(Service_PSC, "called"); | ||
| 69 | } | 69 | } |
| 70 | }; | 70 | }; |
| 71 | 71 | ||
diff --git a/src/core/hle/service/set/set.cpp b/src/core/hle/service/set/set.cpp index 9e5af7839..40a9144f9 100644 --- a/src/core/hle/service/set/set.cpp +++ b/src/core/hle/service/set/set.cpp | |||
| @@ -49,38 +49,39 @@ static std::array<LanguageCode, size> MakeLanguageCodeSubset() { | |||
| 49 | static void PushResponseLanguageCode(Kernel::HLERequestContext& ctx, std::size_t max_size) { | 49 | static void PushResponseLanguageCode(Kernel::HLERequestContext& ctx, std::size_t max_size) { |
| 50 | IPC::ResponseBuilder rb{ctx, 3}; | 50 | IPC::ResponseBuilder rb{ctx, 3}; |
| 51 | rb.Push(RESULT_SUCCESS); | 51 | rb.Push(RESULT_SUCCESS); |
| 52 | if (available_language_codes.size() > max_size) | 52 | if (available_language_codes.size() > max_size) { |
| 53 | rb.Push(static_cast<u32>(max_size)); | 53 | rb.Push(static_cast<u32>(max_size)); |
| 54 | else | 54 | } else { |
| 55 | rb.Push(static_cast<u32>(available_language_codes.size())); | 55 | rb.Push(static_cast<u32>(available_language_codes.size())); |
| 56 | } | ||
| 56 | } | 57 | } |
| 57 | 58 | ||
| 58 | void SET::GetAvailableLanguageCodes(Kernel::HLERequestContext& ctx) { | 59 | void SET::GetAvailableLanguageCodes(Kernel::HLERequestContext& ctx) { |
| 59 | if (available_language_codes.size() > pre4_0_0_max_entries) | 60 | LOG_DEBUG(Service_SET, "called"); |
| 61 | |||
| 62 | if (available_language_codes.size() > pre4_0_0_max_entries) { | ||
| 60 | ctx.WriteBuffer(MakeLanguageCodeSubset<pre4_0_0_max_entries>()); | 63 | ctx.WriteBuffer(MakeLanguageCodeSubset<pre4_0_0_max_entries>()); |
| 61 | else | 64 | } else { |
| 62 | ctx.WriteBuffer(available_language_codes); | 65 | ctx.WriteBuffer(available_language_codes); |
| 63 | 66 | } | |
| 64 | PushResponseLanguageCode(ctx, pre4_0_0_max_entries); | 67 | PushResponseLanguageCode(ctx, pre4_0_0_max_entries); |
| 65 | |||
| 66 | LOG_DEBUG(Service_SET, "called"); | ||
| 67 | } | 68 | } |
| 68 | 69 | ||
| 69 | void SET::GetAvailableLanguageCodes2(Kernel::HLERequestContext& ctx) { | 70 | void SET::GetAvailableLanguageCodes2(Kernel::HLERequestContext& ctx) { |
| 70 | if (available_language_codes.size() > post4_0_0_max_entries) | 71 | LOG_DEBUG(Service_SET, "called"); |
| 72 | |||
| 73 | if (available_language_codes.size() > post4_0_0_max_entries) { | ||
| 71 | ctx.WriteBuffer(MakeLanguageCodeSubset<post4_0_0_max_entries>()); | 74 | ctx.WriteBuffer(MakeLanguageCodeSubset<post4_0_0_max_entries>()); |
| 72 | else | 75 | } else { |
| 73 | ctx.WriteBuffer(available_language_codes); | 76 | ctx.WriteBuffer(available_language_codes); |
| 74 | 77 | } | |
| 75 | PushResponseLanguageCode(ctx, post4_0_0_max_entries); | 78 | PushResponseLanguageCode(ctx, post4_0_0_max_entries); |
| 76 | |||
| 77 | LOG_DEBUG(Service_SET, "called"); | ||
| 78 | } | 79 | } |
| 79 | 80 | ||
| 80 | void SET::GetAvailableLanguageCodeCount(Kernel::HLERequestContext& ctx) { | 81 | void SET::GetAvailableLanguageCodeCount(Kernel::HLERequestContext& ctx) { |
| 81 | PushResponseLanguageCode(ctx, pre4_0_0_max_entries); | ||
| 82 | |||
| 83 | LOG_DEBUG(Service_SET, "called"); | 82 | LOG_DEBUG(Service_SET, "called"); |
| 83 | |||
| 84 | PushResponseLanguageCode(ctx, pre4_0_0_max_entries); | ||
| 84 | } | 85 | } |
| 85 | 86 | ||
| 86 | void SET::GetAvailableLanguageCodeCount2(Kernel::HLERequestContext& ctx) { | 87 | void SET::GetAvailableLanguageCodeCount2(Kernel::HLERequestContext& ctx) { |
| @@ -90,11 +91,11 @@ void SET::GetAvailableLanguageCodeCount2(Kernel::HLERequestContext& ctx) { | |||
| 90 | } | 91 | } |
| 91 | 92 | ||
| 92 | void SET::GetLanguageCode(Kernel::HLERequestContext& ctx) { | 93 | void SET::GetLanguageCode(Kernel::HLERequestContext& ctx) { |
| 94 | LOG_DEBUG(Service_SET, "called {}", Settings::values.language_index); | ||
| 95 | |||
| 93 | IPC::ResponseBuilder rb{ctx, 4}; | 96 | IPC::ResponseBuilder rb{ctx, 4}; |
| 94 | rb.Push(RESULT_SUCCESS); | 97 | rb.Push(RESULT_SUCCESS); |
| 95 | rb.Push(static_cast<u64>(available_language_codes[Settings::values.language_index])); | 98 | rb.Push(static_cast<u64>(available_language_codes[Settings::values.language_index])); |
| 96 | |||
| 97 | LOG_DEBUG(Service_SET, "called {}", Settings::values.language_index); | ||
| 98 | } | 99 | } |
| 99 | 100 | ||
| 100 | SET::SET() : ServiceFramework("set") { | 101 | SET::SET() : ServiceFramework("set") { |
diff --git a/src/core/hle/service/set/set_sys.cpp b/src/core/hle/service/set/set_sys.cpp index 41efca31c..c9b4da5b0 100644 --- a/src/core/hle/service/set/set_sys.cpp +++ b/src/core/hle/service/set/set_sys.cpp | |||
| @@ -10,22 +10,22 @@ | |||
| 10 | namespace Service::Set { | 10 | namespace Service::Set { |
| 11 | 11 | ||
| 12 | void SET_SYS::GetColorSetId(Kernel::HLERequestContext& ctx) { | 12 | void SET_SYS::GetColorSetId(Kernel::HLERequestContext& ctx) { |
| 13 | LOG_DEBUG(Service_SET, "called"); | ||
| 14 | |||
| 13 | IPC::ResponseBuilder rb{ctx, 3}; | 15 | IPC::ResponseBuilder rb{ctx, 3}; |
| 14 | 16 | ||
| 15 | rb.Push(RESULT_SUCCESS); | 17 | rb.Push(RESULT_SUCCESS); |
| 16 | rb.PushEnum(color_set); | 18 | rb.PushEnum(color_set); |
| 17 | |||
| 18 | LOG_DEBUG(Service_SET, "called"); | ||
| 19 | } | 19 | } |
| 20 | 20 | ||
| 21 | void SET_SYS::SetColorSetId(Kernel::HLERequestContext& ctx) { | 21 | void SET_SYS::SetColorSetId(Kernel::HLERequestContext& ctx) { |
| 22 | LOG_DEBUG(Service_SET, "called"); | ||
| 23 | |||
| 22 | IPC::RequestParser rp{ctx}; | 24 | IPC::RequestParser rp{ctx}; |
| 23 | color_set = rp.PopEnum<ColorSet>(); | 25 | color_set = rp.PopEnum<ColorSet>(); |
| 24 | 26 | ||
| 25 | IPC::ResponseBuilder rb{ctx, 2}; | 27 | IPC::ResponseBuilder rb{ctx, 2}; |
| 26 | rb.Push(RESULT_SUCCESS); | 28 | rb.Push(RESULT_SUCCESS); |
| 27 | |||
| 28 | LOG_DEBUG(Service_SET, "called"); | ||
| 29 | } | 29 | } |
| 30 | 30 | ||
| 31 | SET_SYS::SET_SYS() : ServiceFramework("set:sys") { | 31 | SET_SYS::SET_SYS() : ServiceFramework("set:sys") { |
diff --git a/src/core/hle/service/sm/controller.cpp b/src/core/hle/service/sm/controller.cpp index 98f6e4111..74da4d5e6 100644 --- a/src/core/hle/service/sm/controller.cpp +++ b/src/core/hle/service/sm/controller.cpp | |||
| @@ -14,25 +14,26 @@ namespace Service::SM { | |||
| 14 | 14 | ||
| 15 | void Controller::ConvertSessionToDomain(Kernel::HLERequestContext& ctx) { | 15 | void Controller::ConvertSessionToDomain(Kernel::HLERequestContext& ctx) { |
| 16 | ASSERT_MSG(ctx.Session()->IsSession(), "Session is already a domain"); | 16 | ASSERT_MSG(ctx.Session()->IsSession(), "Session is already a domain"); |
| 17 | LOG_DEBUG(Service, "called, server_session={}", ctx.Session()->GetObjectId()); | ||
| 17 | ctx.Session()->ConvertToDomain(); | 18 | ctx.Session()->ConvertToDomain(); |
| 18 | 19 | ||
| 19 | IPC::ResponseBuilder rb{ctx, 3}; | 20 | IPC::ResponseBuilder rb{ctx, 3}; |
| 20 | rb.Push(RESULT_SUCCESS); | 21 | rb.Push(RESULT_SUCCESS); |
| 21 | rb.Push<u32>(1); // Converted sessions start with 1 request handler | 22 | rb.Push<u32>(1); // Converted sessions start with 1 request handler |
| 22 | |||
| 23 | LOG_DEBUG(Service, "called, server_session={}", ctx.Session()->GetObjectId()); | ||
| 24 | } | 23 | } |
| 25 | 24 | ||
| 26 | void Controller::DuplicateSession(Kernel::HLERequestContext& ctx) { | 25 | void Controller::DuplicateSession(Kernel::HLERequestContext& ctx) { |
| 27 | // TODO(bunnei): This is just creating a new handle to the same Session. I assume this is wrong | 26 | // TODO(bunnei): This is just creating a new handle to the same Session. I assume this is wrong |
| 28 | // and that we probably want to actually make an entirely new Session, but we still need to | 27 | // and that we probably want to actually make an entirely new Session, but we still need to |
| 29 | // verify this on hardware. | 28 | // verify this on hardware. |
| 29 | LOG_DEBUG(Service, "called"); | ||
| 30 | |||
| 30 | IPC::ResponseBuilder rb{ctx, 2, 0, 1, IPC::ResponseBuilder::Flags::AlwaysMoveHandles}; | 31 | IPC::ResponseBuilder rb{ctx, 2, 0, 1, IPC::ResponseBuilder::Flags::AlwaysMoveHandles}; |
| 31 | rb.Push(RESULT_SUCCESS); | 32 | rb.Push(RESULT_SUCCESS); |
| 32 | Kernel::SharedPtr<Kernel::ClientSession> session{ctx.Session()->parent->client}; | 33 | Kernel::SharedPtr<Kernel::ClientSession> session{ctx.Session()->parent->client}; |
| 33 | rb.PushMoveObjects(session); | 34 | rb.PushMoveObjects(session); |
| 34 | 35 | ||
| 35 | LOG_DEBUG(Service, "called, session={}", session->GetObjectId()); | 36 | LOG_DEBUG(Service, "session={}", session->GetObjectId()); |
| 36 | } | 37 | } |
| 37 | 38 | ||
| 38 | void Controller::DuplicateSessionEx(Kernel::HLERequestContext& ctx) { | 39 | void Controller::DuplicateSessionEx(Kernel::HLERequestContext& ctx) { |
| @@ -42,11 +43,11 @@ void Controller::DuplicateSessionEx(Kernel::HLERequestContext& ctx) { | |||
| 42 | } | 43 | } |
| 43 | 44 | ||
| 44 | void Controller::QueryPointerBufferSize(Kernel::HLERequestContext& ctx) { | 45 | void Controller::QueryPointerBufferSize(Kernel::HLERequestContext& ctx) { |
| 46 | LOG_WARNING(Service, "(STUBBED) called"); | ||
| 47 | |||
| 45 | IPC::ResponseBuilder rb{ctx, 3}; | 48 | IPC::ResponseBuilder rb{ctx, 3}; |
| 46 | rb.Push(RESULT_SUCCESS); | 49 | rb.Push(RESULT_SUCCESS); |
| 47 | rb.Push<u16>(0x500); | 50 | rb.Push<u16>(0x500); |
| 48 | |||
| 49 | LOG_WARNING(Service, "(STUBBED) called"); | ||
| 50 | } | 51 | } |
| 51 | 52 | ||
| 52 | Controller::Controller() : ServiceFramework("IpcController") { | 53 | Controller::Controller() : ServiceFramework("IpcController") { |
diff --git a/src/core/hle/service/sm/sm.cpp b/src/core/hle/service/sm/sm.cpp index c1b2f33b9..e4e8ad320 100644 --- a/src/core/hle/service/sm/sm.cpp +++ b/src/core/hle/service/sm/sm.cpp | |||
| @@ -103,9 +103,10 @@ SM::~SM() = default; | |||
| 103 | * 0: ResultCode | 103 | * 0: ResultCode |
| 104 | */ | 104 | */ |
| 105 | void SM::Initialize(Kernel::HLERequestContext& ctx) { | 105 | void SM::Initialize(Kernel::HLERequestContext& ctx) { |
| 106 | LOG_DEBUG(Service_SM, "called"); | ||
| 107 | |||
| 106 | IPC::ResponseBuilder rb{ctx, 2}; | 108 | IPC::ResponseBuilder rb{ctx, 2}; |
| 107 | rb.Push(RESULT_SUCCESS); | 109 | rb.Push(RESULT_SUCCESS); |
| 108 | LOG_DEBUG(Service_SM, "called"); | ||
| 109 | } | 110 | } |
| 110 | 111 | ||
| 111 | void SM::GetService(Kernel::HLERequestContext& ctx) { | 112 | void SM::GetService(Kernel::HLERequestContext& ctx) { |
| @@ -172,6 +173,7 @@ void SM::UnregisterService(Kernel::HLERequestContext& ctx) { | |||
| 172 | const auto end = std::find(name_buf.begin(), name_buf.end(), '\0'); | 173 | const auto end = std::find(name_buf.begin(), name_buf.end(), '\0'); |
| 173 | 174 | ||
| 174 | const std::string name(name_buf.begin(), end); | 175 | const std::string name(name_buf.begin(), end); |
| 176 | LOG_DEBUG(Service_SM, "called with name={}", name); | ||
| 175 | 177 | ||
| 176 | IPC::ResponseBuilder rb{ctx, 2}; | 178 | IPC::ResponseBuilder rb{ctx, 2}; |
| 177 | rb.Push(service_manager->UnregisterService(name)); | 179 | rb.Push(service_manager->UnregisterService(name)); |
diff --git a/src/core/hle/service/spl/module.cpp b/src/core/hle/service/spl/module.cpp index b2de2a818..8db0c2f13 100644 --- a/src/core/hle/service/spl/module.cpp +++ b/src/core/hle/service/spl/module.cpp | |||
| @@ -24,6 +24,8 @@ Module::Interface::Interface(std::shared_ptr<Module> module, const char* name) | |||
| 24 | Module::Interface::~Interface() = default; | 24 | Module::Interface::~Interface() = default; |
| 25 | 25 | ||
| 26 | void Module::Interface::GetRandomBytes(Kernel::HLERequestContext& ctx) { | 26 | void Module::Interface::GetRandomBytes(Kernel::HLERequestContext& ctx) { |
| 27 | LOG_DEBUG(Service_SPL, "called"); | ||
| 28 | |||
| 27 | IPC::RequestParser rp{ctx}; | 29 | IPC::RequestParser rp{ctx}; |
| 28 | 30 | ||
| 29 | std::size_t size = ctx.GetWriteBufferSize(); | 31 | std::size_t size = ctx.GetWriteBufferSize(); |
| @@ -36,7 +38,6 @@ void Module::Interface::GetRandomBytes(Kernel::HLERequestContext& ctx) { | |||
| 36 | 38 | ||
| 37 | IPC::ResponseBuilder rb{ctx, 2}; | 39 | IPC::ResponseBuilder rb{ctx, 2}; |
| 38 | rb.Push(RESULT_SUCCESS); | 40 | rb.Push(RESULT_SUCCESS); |
| 39 | LOG_DEBUG(Service_SPL, "called"); | ||
| 40 | } | 41 | } |
| 41 | 42 | ||
| 42 | void InstallInterfaces(SM::ServiceManager& service_manager) { | 43 | void InstallInterfaces(SM::ServiceManager& service_manager) { |
diff --git a/src/core/hle/service/ssl/ssl.cpp b/src/core/hle/service/ssl/ssl.cpp index bc4f7a437..af40a1815 100644 --- a/src/core/hle/service/ssl/ssl.cpp +++ b/src/core/hle/service/ssl/ssl.cpp | |||
| @@ -69,6 +69,7 @@ public: | |||
| 69 | private: | 69 | private: |
| 70 | void SetOption(Kernel::HLERequestContext& ctx) { | 70 | void SetOption(Kernel::HLERequestContext& ctx) { |
| 71 | LOG_WARNING(Service_SSL, "(STUBBED) called"); | 71 | LOG_WARNING(Service_SSL, "(STUBBED) called"); |
| 72 | |||
| 72 | IPC::RequestParser rp{ctx}; | 73 | IPC::RequestParser rp{ctx}; |
| 73 | 74 | ||
| 74 | IPC::ResponseBuilder rb{ctx, 2}; | 75 | IPC::ResponseBuilder rb{ctx, 2}; |
| @@ -114,6 +115,7 @@ private: | |||
| 114 | 115 | ||
| 115 | void SetInterfaceVersion(Kernel::HLERequestContext& ctx) { | 116 | void SetInterfaceVersion(Kernel::HLERequestContext& ctx) { |
| 116 | LOG_DEBUG(Service_SSL, "called"); | 117 | LOG_DEBUG(Service_SSL, "called"); |
| 118 | |||
| 117 | IPC::RequestParser rp{ctx}; | 119 | IPC::RequestParser rp{ctx}; |
| 118 | ssl_version = rp.Pop<u32>(); | 120 | ssl_version = rp.Pop<u32>(); |
| 119 | 121 | ||
diff --git a/src/core/hle/service/time/time.cpp b/src/core/hle/service/time/time.cpp index e561a0c52..60b201d06 100644 --- a/src/core/hle/service/time/time.cpp +++ b/src/core/hle/service/time/time.cpp | |||
| @@ -72,6 +72,7 @@ private: | |||
| 72 | std::chrono::system_clock::now().time_since_epoch()) | 72 | std::chrono::system_clock::now().time_since_epoch()) |
| 73 | .count()}; | 73 | .count()}; |
| 74 | LOG_DEBUG(Service_Time, "called"); | 74 | LOG_DEBUG(Service_Time, "called"); |
| 75 | |||
| 75 | IPC::ResponseBuilder rb{ctx, 4}; | 76 | IPC::ResponseBuilder rb{ctx, 4}; |
| 76 | rb.Push(RESULT_SUCCESS); | 77 | rb.Push(RESULT_SUCCESS); |
| 77 | rb.Push<u64>(time_since_epoch); | 78 | rb.Push<u64>(time_since_epoch); |
| @@ -79,6 +80,7 @@ private: | |||
| 79 | 80 | ||
| 80 | void GetSystemClockContext(Kernel::HLERequestContext& ctx) { | 81 | void GetSystemClockContext(Kernel::HLERequestContext& ctx) { |
| 81 | LOG_WARNING(Service_Time, "(STUBBED) called"); | 82 | LOG_WARNING(Service_Time, "(STUBBED) called"); |
| 83 | |||
| 82 | SystemClockContext system_clock_ontext{}; | 84 | SystemClockContext system_clock_ontext{}; |
| 83 | IPC::ResponseBuilder rb{ctx, (sizeof(SystemClockContext) / 4) + 2}; | 85 | IPC::ResponseBuilder rb{ctx, (sizeof(SystemClockContext) / 4) + 2}; |
| 84 | rb.Push(RESULT_SUCCESS); | 86 | rb.Push(RESULT_SUCCESS); |
| @@ -98,6 +100,7 @@ public: | |||
| 98 | private: | 100 | private: |
| 99 | void GetCurrentTimePoint(Kernel::HLERequestContext& ctx) { | 101 | void GetCurrentTimePoint(Kernel::HLERequestContext& ctx) { |
| 100 | LOG_DEBUG(Service_Time, "called"); | 102 | LOG_DEBUG(Service_Time, "called"); |
| 103 | |||
| 101 | SteadyClockTimePoint steady_clock_time_point{ | 104 | SteadyClockTimePoint steady_clock_time_point{ |
| 102 | CoreTiming::cyclesToMs(CoreTiming::GetTicks()) / 1000}; | 105 | CoreTiming::cyclesToMs(CoreTiming::GetTicks()) / 1000}; |
| 103 | IPC::ResponseBuilder rb{ctx, (sizeof(SteadyClockTimePoint) / 4) + 2}; | 106 | IPC::ResponseBuilder rb{ctx, (sizeof(SteadyClockTimePoint) / 4) + 2}; |
| @@ -130,6 +133,7 @@ private: | |||
| 130 | 133 | ||
| 131 | void GetDeviceLocationName(Kernel::HLERequestContext& ctx) { | 134 | void GetDeviceLocationName(Kernel::HLERequestContext& ctx) { |
| 132 | LOG_DEBUG(Service_Time, "called"); | 135 | LOG_DEBUG(Service_Time, "called"); |
| 136 | |||
| 133 | IPC::ResponseBuilder rb{ctx, (sizeof(LocationName) / 4) + 2}; | 137 | IPC::ResponseBuilder rb{ctx, (sizeof(LocationName) / 4) + 2}; |
| 134 | rb.Push(RESULT_SUCCESS); | 138 | rb.Push(RESULT_SUCCESS); |
| 135 | rb.PushRaw(location_name); | 139 | rb.PushRaw(location_name); |
| @@ -137,6 +141,7 @@ private: | |||
| 137 | 141 | ||
| 138 | void GetTotalLocationNameCount(Kernel::HLERequestContext& ctx) { | 142 | void GetTotalLocationNameCount(Kernel::HLERequestContext& ctx) { |
| 139 | LOG_WARNING(Service_Time, "(STUBBED) called"); | 143 | LOG_WARNING(Service_Time, "(STUBBED) called"); |
| 144 | |||
| 140 | IPC::ResponseBuilder rb{ctx, 3}; | 145 | IPC::ResponseBuilder rb{ctx, 3}; |
| 141 | rb.Push(RESULT_SUCCESS); | 146 | rb.Push(RESULT_SUCCESS); |
| 142 | rb.Push<u32>(0); | 147 | rb.Push<u32>(0); |
| @@ -154,7 +159,6 @@ private: | |||
| 154 | void ToCalendarTime(Kernel::HLERequestContext& ctx) { | 159 | void ToCalendarTime(Kernel::HLERequestContext& ctx) { |
| 155 | IPC::RequestParser rp{ctx}; | 160 | IPC::RequestParser rp{ctx}; |
| 156 | const u64 posix_time = rp.Pop<u64>(); | 161 | const u64 posix_time = rp.Pop<u64>(); |
| 157 | |||
| 158 | LOG_WARNING(Service_Time, "(STUBBED) called, posix_time=0x{:016X}", posix_time); | 162 | LOG_WARNING(Service_Time, "(STUBBED) called, posix_time=0x{:016X}", posix_time); |
| 159 | 163 | ||
| 160 | TimeZoneRule time_zone_rule{}; | 164 | TimeZoneRule time_zone_rule{}; |
| @@ -175,7 +179,6 @@ private: | |||
| 175 | void ToCalendarTimeWithMyRule(Kernel::HLERequestContext& ctx) { | 179 | void ToCalendarTimeWithMyRule(Kernel::HLERequestContext& ctx) { |
| 176 | IPC::RequestParser rp{ctx}; | 180 | IPC::RequestParser rp{ctx}; |
| 177 | const u64 posix_time = rp.Pop<u64>(); | 181 | const u64 posix_time = rp.Pop<u64>(); |
| 178 | |||
| 179 | LOG_WARNING(Service_Time, "(STUBBED) called, posix_time=0x{:016X}", posix_time); | 182 | LOG_WARNING(Service_Time, "(STUBBED) called, posix_time=0x{:016X}", posix_time); |
| 180 | 183 | ||
| 181 | CalendarTime calendar_time{2018, 1, 1, 0, 0, 0}; | 184 | CalendarTime calendar_time{2018, 1, 1, 0, 0, 0}; |
| @@ -192,6 +195,7 @@ private: | |||
| 192 | void ToPosixTime(Kernel::HLERequestContext& ctx) { | 195 | void ToPosixTime(Kernel::HLERequestContext& ctx) { |
| 193 | // TODO(ogniK): Figure out how to handle multiple times | 196 | // TODO(ogniK): Figure out how to handle multiple times |
| 194 | LOG_WARNING(Service_Time, "(STUBBED) called"); | 197 | LOG_WARNING(Service_Time, "(STUBBED) called"); |
| 198 | |||
| 195 | IPC::RequestParser rp{ctx}; | 199 | IPC::RequestParser rp{ctx}; |
| 196 | auto calendar_time = rp.PopRaw<CalendarTime>(); | 200 | auto calendar_time = rp.PopRaw<CalendarTime>(); |
| 197 | auto posix_time = CalendarToPosix(calendar_time, {}); | 201 | auto posix_time = CalendarToPosix(calendar_time, {}); |
| @@ -204,6 +208,7 @@ private: | |||
| 204 | 208 | ||
| 205 | void ToPosixTimeWithMyRule(Kernel::HLERequestContext& ctx) { | 209 | void ToPosixTimeWithMyRule(Kernel::HLERequestContext& ctx) { |
| 206 | LOG_WARNING(Service_Time, "(STUBBED) called"); | 210 | LOG_WARNING(Service_Time, "(STUBBED) called"); |
| 211 | |||
| 207 | IPC::RequestParser rp{ctx}; | 212 | IPC::RequestParser rp{ctx}; |
| 208 | auto calendar_time = rp.PopRaw<CalendarTime>(); | 213 | auto calendar_time = rp.PopRaw<CalendarTime>(); |
| 209 | auto posix_time = CalendarToPosix(calendar_time, {}); | 214 | auto posix_time = CalendarToPosix(calendar_time, {}); |
| @@ -216,38 +221,43 @@ private: | |||
| 216 | }; | 221 | }; |
| 217 | 222 | ||
| 218 | void Module::Interface::GetStandardUserSystemClock(Kernel::HLERequestContext& ctx) { | 223 | void Module::Interface::GetStandardUserSystemClock(Kernel::HLERequestContext& ctx) { |
| 224 | LOG_DEBUG(Service_Time, "called"); | ||
| 225 | |||
| 219 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 226 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 220 | rb.Push(RESULT_SUCCESS); | 227 | rb.Push(RESULT_SUCCESS); |
| 221 | rb.PushIpcInterface<ISystemClock>(); | 228 | rb.PushIpcInterface<ISystemClock>(); |
| 222 | LOG_DEBUG(Service_Time, "called"); | ||
| 223 | } | 229 | } |
| 224 | 230 | ||
| 225 | void Module::Interface::GetStandardNetworkSystemClock(Kernel::HLERequestContext& ctx) { | 231 | void Module::Interface::GetStandardNetworkSystemClock(Kernel::HLERequestContext& ctx) { |
| 232 | LOG_DEBUG(Service_Time, "called"); | ||
| 233 | |||
| 226 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 234 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 227 | rb.Push(RESULT_SUCCESS); | 235 | rb.Push(RESULT_SUCCESS); |
| 228 | rb.PushIpcInterface<ISystemClock>(); | 236 | rb.PushIpcInterface<ISystemClock>(); |
| 229 | LOG_DEBUG(Service_Time, "called"); | ||
| 230 | } | 237 | } |
| 231 | 238 | ||
| 232 | void Module::Interface::GetStandardSteadyClock(Kernel::HLERequestContext& ctx) { | 239 | void Module::Interface::GetStandardSteadyClock(Kernel::HLERequestContext& ctx) { |
| 240 | LOG_DEBUG(Service_Time, "called"); | ||
| 241 | |||
| 233 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 242 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 234 | rb.Push(RESULT_SUCCESS); | 243 | rb.Push(RESULT_SUCCESS); |
| 235 | rb.PushIpcInterface<ISteadyClock>(); | 244 | rb.PushIpcInterface<ISteadyClock>(); |
| 236 | LOG_DEBUG(Service_Time, "called"); | ||
| 237 | } | 245 | } |
| 238 | 246 | ||
| 239 | void Module::Interface::GetTimeZoneService(Kernel::HLERequestContext& ctx) { | 247 | void Module::Interface::GetTimeZoneService(Kernel::HLERequestContext& ctx) { |
| 248 | LOG_DEBUG(Service_Time, "called"); | ||
| 249 | |||
| 240 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 250 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 241 | rb.Push(RESULT_SUCCESS); | 251 | rb.Push(RESULT_SUCCESS); |
| 242 | rb.PushIpcInterface<ITimeZoneService>(); | 252 | rb.PushIpcInterface<ITimeZoneService>(); |
| 243 | LOG_DEBUG(Service_Time, "called"); | ||
| 244 | } | 253 | } |
| 245 | 254 | ||
| 246 | void Module::Interface::GetStandardLocalSystemClock(Kernel::HLERequestContext& ctx) { | 255 | void Module::Interface::GetStandardLocalSystemClock(Kernel::HLERequestContext& ctx) { |
| 256 | LOG_DEBUG(Service_Time, "called"); | ||
| 257 | |||
| 247 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 258 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 248 | rb.Push(RESULT_SUCCESS); | 259 | rb.Push(RESULT_SUCCESS); |
| 249 | rb.PushIpcInterface<ISystemClock>(); | 260 | rb.PushIpcInterface<ISystemClock>(); |
| 250 | LOG_DEBUG(Service_Time, "called"); | ||
| 251 | } | 261 | } |
| 252 | 262 | ||
| 253 | void Module::Interface::GetClockSnapshot(Kernel::HLERequestContext& ctx) { | 263 | void Module::Interface::GetClockSnapshot(Kernel::HLERequestContext& ctx) { |
| @@ -265,6 +275,7 @@ void Module::Interface::GetClockSnapshot(Kernel::HLERequestContext& ctx) { | |||
| 265 | const std::time_t time(time_since_epoch); | 275 | const std::time_t time(time_since_epoch); |
| 266 | const std::tm* tm = std::localtime(&time); | 276 | const std::tm* tm = std::localtime(&time); |
| 267 | if (tm == nullptr) { | 277 | if (tm == nullptr) { |
| 278 | LOG_ERROR(Service_Time, "tm is a nullptr"); | ||
| 268 | IPC::ResponseBuilder rb{ctx, 2}; | 279 | IPC::ResponseBuilder rb{ctx, 2}; |
| 269 | rb.Push(ResultCode(-1)); // TODO(ogniK): Find appropriate error code | 280 | rb.Push(ResultCode(-1)); // TODO(ogniK): Find appropriate error code |
| 270 | return; | 281 | return; |
diff --git a/src/core/hle/service/usb/usb.cpp b/src/core/hle/service/usb/usb.cpp index f0a831d45..f082a63bc 100644 --- a/src/core/hle/service/usb/usb.cpp +++ b/src/core/hle/service/usb/usb.cpp | |||
| @@ -159,11 +159,11 @@ public: | |||
| 159 | 159 | ||
| 160 | private: | 160 | private: |
| 161 | void GetPdSession(Kernel::HLERequestContext& ctx) { | 161 | void GetPdSession(Kernel::HLERequestContext& ctx) { |
| 162 | LOG_DEBUG(Service_USB, "called"); | ||
| 163 | |||
| 162 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 164 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 163 | rb.Push(RESULT_SUCCESS); | 165 | rb.Push(RESULT_SUCCESS); |
| 164 | rb.PushIpcInterface<IPdSession>(); | 166 | rb.PushIpcInterface<IPdSession>(); |
| 165 | |||
| 166 | LOG_DEBUG(Service_USB, "called"); | ||
| 167 | } | 167 | } |
| 168 | }; | 168 | }; |
| 169 | 169 | ||
diff --git a/src/core/hle/service/vi/vi.cpp b/src/core/hle/service/vi/vi.cpp index a72416084..5120abfff 100644 --- a/src/core/hle/service/vi/vi.cpp +++ b/src/core/hle/service/vi/vi.cpp | |||
| @@ -504,10 +504,10 @@ private: | |||
| 504 | u32 id = rp.Pop<u32>(); | 504 | u32 id = rp.Pop<u32>(); |
| 505 | auto transaction = static_cast<TransactionId>(rp.Pop<u32>()); | 505 | auto transaction = static_cast<TransactionId>(rp.Pop<u32>()); |
| 506 | u32 flags = rp.Pop<u32>(); | 506 | u32 flags = rp.Pop<u32>(); |
| 507 | auto buffer_queue = nv_flinger->GetBufferQueue(id); | ||
| 508 | |||
| 509 | LOG_DEBUG(Service_VI, "called, transaction={:X}", static_cast<u32>(transaction)); | 507 | LOG_DEBUG(Service_VI, "called, transaction={:X}", static_cast<u32>(transaction)); |
| 510 | 508 | ||
| 509 | auto buffer_queue = nv_flinger->GetBufferQueue(id); | ||
| 510 | |||
| 511 | if (transaction == TransactionId::Connect) { | 511 | if (transaction == TransactionId::Connect) { |
| 512 | IGBPConnectRequestParcel request{ctx.ReadBuffer()}; | 512 | IGBPConnectRequestParcel request{ctx.ReadBuffer()}; |
| 513 | IGBPConnectResponseParcel response{ | 513 | IGBPConnectResponseParcel response{ |
| @@ -593,9 +593,9 @@ private: | |||
| 593 | u32 id = rp.Pop<u32>(); | 593 | u32 id = rp.Pop<u32>(); |
| 594 | s32 addval = rp.PopRaw<s32>(); | 594 | s32 addval = rp.PopRaw<s32>(); |
| 595 | u32 type = rp.Pop<u32>(); | 595 | u32 type = rp.Pop<u32>(); |
| 596 | |||
| 597 | LOG_WARNING(Service_VI, "(STUBBED) called id={}, addval={:08X}, type={:08X}", id, addval, | 596 | LOG_WARNING(Service_VI, "(STUBBED) called id={}, addval={:08X}, type={:08X}", id, addval, |
| 598 | type); | 597 | type); |
| 598 | |||
| 599 | IPC::ResponseBuilder rb{ctx, 2}; | 599 | IPC::ResponseBuilder rb{ctx, 2}; |
| 600 | rb.Push(RESULT_SUCCESS); | 600 | rb.Push(RESULT_SUCCESS); |
| 601 | } | 601 | } |
| @@ -604,12 +604,11 @@ private: | |||
| 604 | IPC::RequestParser rp{ctx}; | 604 | IPC::RequestParser rp{ctx}; |
| 605 | u32 id = rp.Pop<u32>(); | 605 | u32 id = rp.Pop<u32>(); |
| 606 | u32 unknown = rp.Pop<u32>(); | 606 | u32 unknown = rp.Pop<u32>(); |
| 607 | LOG_WARNING(Service_VI, "(STUBBED) called id={}, unknown={:08X}", id, unknown); | ||
| 607 | 608 | ||
| 608 | auto buffer_queue = nv_flinger->GetBufferQueue(id); | 609 | auto buffer_queue = nv_flinger->GetBufferQueue(id); |
| 609 | 610 | ||
| 610 | // TODO(Subv): Find out what this actually is. | 611 | // TODO(Subv): Find out what this actually is. |
| 611 | |||
| 612 | LOG_WARNING(Service_VI, "(STUBBED) called id={}, unknown={:08X}", id, unknown); | ||
| 613 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 612 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 614 | rb.Push(RESULT_SUCCESS); | 613 | rb.Push(RESULT_SUCCESS); |
| 615 | rb.PushCopyObjects(buffer_queue->GetBufferWaitEvent()); | 614 | rb.PushCopyObjects(buffer_queue->GetBufferWaitEvent()); |
| @@ -673,6 +672,7 @@ public: | |||
| 673 | private: | 672 | private: |
| 674 | void SetLayerZ(Kernel::HLERequestContext& ctx) { | 673 | void SetLayerZ(Kernel::HLERequestContext& ctx) { |
| 675 | LOG_WARNING(Service_VI, "(STUBBED) called"); | 674 | LOG_WARNING(Service_VI, "(STUBBED) called"); |
| 675 | |||
| 676 | IPC::RequestParser rp{ctx}; | 676 | IPC::RequestParser rp{ctx}; |
| 677 | u64 layer_id = rp.Pop<u64>(); | 677 | u64 layer_id = rp.Pop<u64>(); |
| 678 | u64 z_value = rp.Pop<u64>(); | 678 | u64 z_value = rp.Pop<u64>(); |
| @@ -685,13 +685,16 @@ private: | |||
| 685 | IPC::RequestParser rp{ctx}; | 685 | IPC::RequestParser rp{ctx}; |
| 686 | u64 layer_id = rp.Pop<u64>(); | 686 | u64 layer_id = rp.Pop<u64>(); |
| 687 | bool visibility = rp.Pop<bool>(); | 687 | bool visibility = rp.Pop<bool>(); |
| 688 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 689 | rb.Push(RESULT_SUCCESS); | ||
| 690 | LOG_WARNING(Service_VI, "(STUBBED) called, layer_id=0x{:08X}, visibility={}", layer_id, | 688 | LOG_WARNING(Service_VI, "(STUBBED) called, layer_id=0x{:08X}, visibility={}", layer_id, |
| 691 | visibility); | 689 | visibility); |
| 690 | |||
| 691 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 692 | rb.Push(RESULT_SUCCESS); | ||
| 692 | } | 693 | } |
| 693 | 694 | ||
| 694 | void GetDisplayMode(Kernel::HLERequestContext& ctx) { | 695 | void GetDisplayMode(Kernel::HLERequestContext& ctx) { |
| 696 | LOG_WARNING(Service_VI, "(STUBBED) called"); | ||
| 697 | |||
| 695 | IPC::ResponseBuilder rb{ctx, 6}; | 698 | IPC::ResponseBuilder rb{ctx, 6}; |
| 696 | rb.Push(RESULT_SUCCESS); | 699 | rb.Push(RESULT_SUCCESS); |
| 697 | 700 | ||
| @@ -707,10 +710,8 @@ private: | |||
| 707 | static_cast<u32>(Settings::values.resolution_factor)); | 710 | static_cast<u32>(Settings::values.resolution_factor)); |
| 708 | } | 711 | } |
| 709 | 712 | ||
| 710 | rb.PushRaw<float>(60.0f); | 713 | rb.PushRaw<float>(60.0f); // This wouldn't seem to be correct for 30 fps games. |
| 711 | rb.Push<u32>(0); | 714 | rb.Push<u32>(0); |
| 712 | |||
| 713 | LOG_DEBUG(Service_VI, "called"); | ||
| 714 | } | 715 | } |
| 715 | }; | 716 | }; |
| 716 | 717 | ||
| @@ -793,6 +794,7 @@ public: | |||
| 793 | private: | 794 | private: |
| 794 | void CloseDisplay(Kernel::HLERequestContext& ctx) { | 795 | void CloseDisplay(Kernel::HLERequestContext& ctx) { |
| 795 | LOG_WARNING(Service_VI, "(STUBBED) called"); | 796 | LOG_WARNING(Service_VI, "(STUBBED) called"); |
| 797 | |||
| 796 | IPC::RequestParser rp{ctx}; | 798 | IPC::RequestParser rp{ctx}; |
| 797 | u64 display = rp.Pop<u64>(); | 799 | u64 display = rp.Pop<u64>(); |
| 798 | 800 | ||
| @@ -802,6 +804,7 @@ private: | |||
| 802 | 804 | ||
| 803 | void CreateManagedLayer(Kernel::HLERequestContext& ctx) { | 805 | void CreateManagedLayer(Kernel::HLERequestContext& ctx) { |
| 804 | LOG_WARNING(Service_VI, "(STUBBED) called"); | 806 | LOG_WARNING(Service_VI, "(STUBBED) called"); |
| 807 | |||
| 805 | IPC::RequestParser rp{ctx}; | 808 | IPC::RequestParser rp{ctx}; |
| 806 | u32 unknown = rp.Pop<u32>(); | 809 | u32 unknown = rp.Pop<u32>(); |
| 807 | rp.Skip(1, false); | 810 | rp.Skip(1, false); |
| @@ -817,6 +820,7 @@ private: | |||
| 817 | 820 | ||
| 818 | void AddToLayerStack(Kernel::HLERequestContext& ctx) { | 821 | void AddToLayerStack(Kernel::HLERequestContext& ctx) { |
| 819 | LOG_WARNING(Service_VI, "(STUBBED) called"); | 822 | LOG_WARNING(Service_VI, "(STUBBED) called"); |
| 823 | |||
| 820 | IPC::RequestParser rp{ctx}; | 824 | IPC::RequestParser rp{ctx}; |
| 821 | u32 stack = rp.Pop<u32>(); | 825 | u32 stack = rp.Pop<u32>(); |
| 822 | u64 layer_id = rp.Pop<u64>(); | 826 | u64 layer_id = rp.Pop<u64>(); |
| @@ -829,10 +833,11 @@ private: | |||
| 829 | IPC::RequestParser rp{ctx}; | 833 | IPC::RequestParser rp{ctx}; |
| 830 | u64 layer_id = rp.Pop<u64>(); | 834 | u64 layer_id = rp.Pop<u64>(); |
| 831 | bool visibility = rp.Pop<bool>(); | 835 | bool visibility = rp.Pop<bool>(); |
| 832 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 833 | rb.Push(RESULT_SUCCESS); | ||
| 834 | LOG_WARNING(Service_VI, "(STUBBED) called, layer_id=0x{:X}, visibility={}", layer_id, | 836 | LOG_WARNING(Service_VI, "(STUBBED) called, layer_id=0x{:X}, visibility={}", layer_id, |
| 835 | visibility); | 837 | visibility); |
| 838 | |||
| 839 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 840 | rb.Push(RESULT_SUCCESS); | ||
| 836 | } | 841 | } |
| 837 | 842 | ||
| 838 | std::shared_ptr<NVFlinger::NVFlinger> nv_flinger; | 843 | std::shared_ptr<NVFlinger::NVFlinger> nv_flinger; |
| @@ -878,6 +883,7 @@ private: | |||
| 878 | 883 | ||
| 879 | void OpenDisplay(Kernel::HLERequestContext& ctx) { | 884 | void OpenDisplay(Kernel::HLERequestContext& ctx) { |
| 880 | LOG_WARNING(Service_VI, "(STUBBED) called"); | 885 | LOG_WARNING(Service_VI, "(STUBBED) called"); |
| 886 | |||
| 881 | IPC::RequestParser rp{ctx}; | 887 | IPC::RequestParser rp{ctx}; |
| 882 | auto name_buf = rp.PopRaw<std::array<u8, 0x40>>(); | 888 | auto name_buf = rp.PopRaw<std::array<u8, 0x40>>(); |
| 883 | auto end = std::find(name_buf.begin(), name_buf.end(), '\0'); | 889 | auto end = std::find(name_buf.begin(), name_buf.end(), '\0'); |
| @@ -893,6 +899,7 @@ private: | |||
| 893 | 899 | ||
| 894 | void CloseDisplay(Kernel::HLERequestContext& ctx) { | 900 | void CloseDisplay(Kernel::HLERequestContext& ctx) { |
| 895 | LOG_WARNING(Service_VI, "(STUBBED) called"); | 901 | LOG_WARNING(Service_VI, "(STUBBED) called"); |
| 902 | |||
| 896 | IPC::RequestParser rp{ctx}; | 903 | IPC::RequestParser rp{ctx}; |
| 897 | u64 display_id = rp.Pop<u64>(); | 904 | u64 display_id = rp.Pop<u64>(); |
| 898 | 905 | ||
| @@ -902,6 +909,7 @@ private: | |||
| 902 | 909 | ||
| 903 | void GetDisplayResolution(Kernel::HLERequestContext& ctx) { | 910 | void GetDisplayResolution(Kernel::HLERequestContext& ctx) { |
| 904 | LOG_WARNING(Service_VI, "(STUBBED) called"); | 911 | LOG_WARNING(Service_VI, "(STUBBED) called"); |
| 912 | |||
| 905 | IPC::RequestParser rp{ctx}; | 913 | IPC::RequestParser rp{ctx}; |
| 906 | u64 display_id = rp.Pop<u64>(); | 914 | u64 display_id = rp.Pop<u64>(); |
| 907 | 915 | ||
| @@ -923,6 +931,7 @@ private: | |||
| 923 | 931 | ||
| 924 | void SetLayerScalingMode(Kernel::HLERequestContext& ctx) { | 932 | void SetLayerScalingMode(Kernel::HLERequestContext& ctx) { |
| 925 | LOG_WARNING(Service_VI, "(STUBBED) called"); | 933 | LOG_WARNING(Service_VI, "(STUBBED) called"); |
| 934 | |||
| 926 | IPC::RequestParser rp{ctx}; | 935 | IPC::RequestParser rp{ctx}; |
| 927 | u32 scaling_mode = rp.Pop<u32>(); | 936 | u32 scaling_mode = rp.Pop<u32>(); |
| 928 | u64 unknown = rp.Pop<u64>(); | 937 | u64 unknown = rp.Pop<u64>(); |
| @@ -932,6 +941,8 @@ private: | |||
| 932 | } | 941 | } |
| 933 | 942 | ||
| 934 | void ListDisplays(Kernel::HLERequestContext& ctx) { | 943 | void ListDisplays(Kernel::HLERequestContext& ctx) { |
| 944 | LOG_WARNING(Service_VI, "(STUBBED) called"); | ||
| 945 | |||
| 935 | IPC::RequestParser rp{ctx}; | 946 | IPC::RequestParser rp{ctx}; |
| 936 | DisplayInfo display_info; | 947 | DisplayInfo display_info; |
| 937 | display_info.width *= static_cast<u64>(Settings::values.resolution_factor); | 948 | display_info.width *= static_cast<u64>(Settings::values.resolution_factor); |
| @@ -940,11 +951,11 @@ private: | |||
| 940 | IPC::ResponseBuilder rb{ctx, 4}; | 951 | IPC::ResponseBuilder rb{ctx, 4}; |
| 941 | rb.Push(RESULT_SUCCESS); | 952 | rb.Push(RESULT_SUCCESS); |
| 942 | rb.Push<u64>(1); | 953 | rb.Push<u64>(1); |
| 943 | LOG_WARNING(Service_VI, "(STUBBED) called"); | ||
| 944 | } | 954 | } |
| 945 | 955 | ||
| 946 | void OpenLayer(Kernel::HLERequestContext& ctx) { | 956 | void OpenLayer(Kernel::HLERequestContext& ctx) { |
| 947 | LOG_DEBUG(Service_VI, "called"); | 957 | LOG_DEBUG(Service_VI, "called"); |
| 958 | |||
| 948 | IPC::RequestParser rp{ctx}; | 959 | IPC::RequestParser rp{ctx}; |
| 949 | auto name_buf = rp.PopRaw<std::array<u8, 0x40>>(); | 960 | auto name_buf = rp.PopRaw<std::array<u8, 0x40>>(); |
| 950 | auto end = std::find(name_buf.begin(), name_buf.end(), '\0'); | 961 | auto end = std::find(name_buf.begin(), name_buf.end(), '\0'); |
| @@ -995,6 +1006,7 @@ private: | |||
| 995 | 1006 | ||
| 996 | void GetDisplayVsyncEvent(Kernel::HLERequestContext& ctx) { | 1007 | void GetDisplayVsyncEvent(Kernel::HLERequestContext& ctx) { |
| 997 | LOG_WARNING(Service_VI, "(STUBBED) called"); | 1008 | LOG_WARNING(Service_VI, "(STUBBED) called"); |
| 1009 | |||
| 998 | IPC::RequestParser rp{ctx}; | 1010 | IPC::RequestParser rp{ctx}; |
| 999 | u64 display_id = rp.Pop<u64>(); | 1011 | u64 display_id = rp.Pop<u64>(); |
| 1000 | 1012 | ||