diff options
| author | 2018-01-16 21:06:52 -0500 | |
|---|---|---|
| committer | 2018-01-16 21:06:52 -0500 | |
| commit | 8c05e935bd14ab526e35a33b854e36b30aacdcc0 (patch) | |
| tree | fd6d1db6ea25ee744f4e65733b4450bdd0fab5ac /src/core/hle/kernel | |
| parent | Merge pull request #52 from ogniK5377/fsp (diff) | |
| parent | applet_oe: Fix GetOperationMode and GetPerformanceMode. (diff) | |
| download | yuzu-8c05e935bd14ab526e35a33b854e36b30aacdcc0.tar.gz yuzu-8c05e935bd14ab526e35a33b854e36b30aacdcc0.tar.xz yuzu-8c05e935bd14ab526e35a33b854e36b30aacdcc0.zip | |
Merge pull request #55 from bunnei/subv-improvements
Improvements to IPC, AppletOE, APM, VI, SVC
Diffstat (limited to 'src/core/hle/kernel')
| -rw-r--r-- | src/core/hle/kernel/hle_ipc.h | 8 | ||||
| -rw-r--r-- | src/core/hle/kernel/svc.cpp | 27 | ||||
| -rw-r--r-- | src/core/hle/kernel/svc.h | 1 |
3 files changed, 30 insertions, 6 deletions
diff --git a/src/core/hle/kernel/hle_ipc.h b/src/core/hle/kernel/hle_ipc.h index 164c6db69..6dceb766d 100644 --- a/src/core/hle/kernel/hle_ipc.h +++ b/src/core/hle/kernel/hle_ipc.h | |||
| @@ -175,6 +175,14 @@ public: | |||
| 175 | domain_objects.emplace_back(std::move(object)); | 175 | domain_objects.emplace_back(std::move(object)); |
| 176 | } | 176 | } |
| 177 | 177 | ||
| 178 | /// Clears the list of objects so that no lingering objects are written accidentally to the | ||
| 179 | /// response buffer. | ||
| 180 | void ClearIncomingObjects() { | ||
| 181 | move_objects.clear(); | ||
| 182 | copy_objects.clear(); | ||
| 183 | domain_objects.clear(); | ||
| 184 | } | ||
| 185 | |||
| 178 | private: | 186 | private: |
| 179 | std::array<u32, IPC::COMMAND_BUFFER_LENGTH> cmd_buf; | 187 | std::array<u32, IPC::COMMAND_BUFFER_LENGTH> cmd_buf; |
| 180 | SharedPtr<Kernel::Domain> domain; | 188 | SharedPtr<Kernel::Domain> domain; |
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index 056ba28ef..088058ebc 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp | |||
| @@ -255,8 +255,9 @@ static ResultCode CancelSynchronization(Handle thread_handle) { | |||
| 255 | /// Attempts to locks a mutex, creating it if it does not already exist | 255 | /// Attempts to locks a mutex, creating it if it does not already exist |
| 256 | static ResultCode LockMutex(Handle holding_thread_handle, VAddr mutex_addr, | 256 | static ResultCode LockMutex(Handle holding_thread_handle, VAddr mutex_addr, |
| 257 | Handle requesting_thread_handle) { | 257 | Handle requesting_thread_handle) { |
| 258 | LOG_TRACE(Kernel_SVC, "called holding_thread_handle=0x%08X, mutex_addr=0x%llx, " | 258 | LOG_TRACE(Kernel_SVC, |
| 259 | "requesting_current_thread_handle=0x%08X", | 259 | "called holding_thread_handle=0x%08X, mutex_addr=0x%llx, " |
| 260 | "requesting_current_thread_handle=0x%08X", | ||
| 260 | holding_thread_handle, mutex_addr, requesting_thread_handle); | 261 | holding_thread_handle, mutex_addr, requesting_thread_handle); |
| 261 | 262 | ||
| 262 | SharedPtr<Thread> holding_thread = g_handle_table.Get<Thread>(holding_thread_handle); | 263 | SharedPtr<Thread> holding_thread = g_handle_table.Get<Thread>(holding_thread_handle); |
| @@ -304,8 +305,6 @@ static ResultCode GetInfo(u64* result, u64 info_id, u64 handle, u64 info_sub_id) | |||
| 304 | LOG_TRACE(Kernel_SVC, "called info_id=0x%X, info_sub_id=0x%X, handle=0x%08X", info_id, | 305 | LOG_TRACE(Kernel_SVC, "called info_id=0x%X, info_sub_id=0x%X, handle=0x%08X", info_id, |
| 305 | info_sub_id, handle); | 306 | info_sub_id, handle); |
| 306 | 307 | ||
| 307 | ASSERT(handle == 0 || handle == CurrentProcess); | ||
| 308 | |||
| 309 | auto& vm_manager = g_current_process->vm_manager; | 308 | auto& vm_manager = g_current_process->vm_manager; |
| 310 | 309 | ||
| 311 | switch (static_cast<GetInfoType>(info_id)) { | 310 | switch (static_cast<GetInfoType>(info_id)) { |
| @@ -321,6 +320,12 @@ static ResultCode GetInfo(u64* result, u64 info_id, u64 handle, u64 info_sub_id) | |||
| 321 | case GetInfoType::MapRegionSize: | 320 | case GetInfoType::MapRegionSize: |
| 322 | *result = vm_manager.GetAddressSpaceSize(); | 321 | *result = vm_manager.GetAddressSpaceSize(); |
| 323 | break; | 322 | break; |
| 323 | case GetInfoType::HeapRegionBaseAddr: | ||
| 324 | *result = vm_manager.GetNewMapRegionBaseAddr() + vm_manager.GetNewMapRegionSize(); | ||
| 325 | break; | ||
| 326 | case GetInfoType::HeapRegionSize: | ||
| 327 | *result = Memory::HEAP_SIZE; | ||
| 328 | break; | ||
| 324 | case GetInfoType::TotalMemoryUsage: | 329 | case GetInfoType::TotalMemoryUsage: |
| 325 | *result = vm_manager.GetTotalMemoryUsage(); | 330 | *result = vm_manager.GetTotalMemoryUsage(); |
| 326 | break; | 331 | break; |
| @@ -345,6 +350,15 @@ static ResultCode GetInfo(u64* result, u64 info_id, u64 handle, u64 info_sub_id) | |||
| 345 | case GetInfoType::IsVirtualAddressMemoryEnabled: | 350 | case GetInfoType::IsVirtualAddressMemoryEnabled: |
| 346 | *result = g_current_process->is_virtual_address_memory_enabled; | 351 | *result = g_current_process->is_virtual_address_memory_enabled; |
| 347 | break; | 352 | break; |
| 353 | case GetInfoType::TitleId: | ||
| 354 | LOG_WARNING(Kernel_SVC, "(STUBBED) Attempted to query titleid, returned 0"); | ||
| 355 | *result = 0; | ||
| 356 | break; | ||
| 357 | case GetInfoType::PrivilegedProcessId: | ||
| 358 | LOG_WARNING(Kernel_SVC, | ||
| 359 | "(STUBBED) Attempted to query priviledged process id bounds, returned 0"); | ||
| 360 | *result = 0; | ||
| 361 | break; | ||
| 348 | default: | 362 | default: |
| 349 | UNIMPLEMENTED(); | 363 | UNIMPLEMENTED(); |
| 350 | } | 364 | } |
| @@ -533,8 +547,9 @@ static ResultCode CreateThread(Handle* out_handle, VAddr entry_point, u64 arg, V | |||
| 533 | 547 | ||
| 534 | Core::System::GetInstance().PrepareReschedule(); | 548 | Core::System::GetInstance().PrepareReschedule(); |
| 535 | 549 | ||
| 536 | LOG_TRACE(Kernel_SVC, "called entrypoint=0x%08X (%s), arg=0x%08X, stacktop=0x%08X, " | 550 | LOG_TRACE(Kernel_SVC, |
| 537 | "threadpriority=0x%08X, processorid=0x%08X : created handle=0x%08X", | 551 | "called entrypoint=0x%08X (%s), arg=0x%08X, stacktop=0x%08X, " |
| 552 | "threadpriority=0x%08X, processorid=0x%08X : created handle=0x%08X", | ||
| 538 | entry_point, name.c_str(), arg, stack_top, priority, processor_id, *out_handle); | 553 | entry_point, name.c_str(), arg, stack_top, priority, processor_id, *out_handle); |
| 539 | 554 | ||
| 540 | return RESULT_SUCCESS; | 555 | return RESULT_SUCCESS; |
diff --git a/src/core/hle/kernel/svc.h b/src/core/hle/kernel/svc.h index a56fd3602..42cc41da3 100644 --- a/src/core/hle/kernel/svc.h +++ b/src/core/hle/kernel/svc.h | |||
| @@ -44,6 +44,7 @@ enum class GetInfoType : u64 { | |||
| 44 | // 3.0.0+ | 44 | // 3.0.0+ |
| 45 | IsVirtualAddressMemoryEnabled = 16, | 45 | IsVirtualAddressMemoryEnabled = 16, |
| 46 | TitleId = 18, | 46 | TitleId = 18, |
| 47 | // 4.0.0+ | ||
| 47 | PrivilegedProcessId = 19, | 48 | PrivilegedProcessId = 19, |
| 48 | }; | 49 | }; |
| 49 | 50 | ||