summaryrefslogtreecommitdiff
path: root/src/core/hle/svc.cpp
diff options
context:
space:
mode:
authorGravatar Subv2015-05-11 09:15:10 -0500
committerGravatar Subv2015-05-11 09:15:10 -0500
commit41f74a16fd55934f747f6f7e1f7a6d4d6a3d4e57 (patch)
treeb9500ee328f5b918edca38251878c4f346a30807 /src/core/hle/svc.cpp
parentMerge pull request #740 from yuriks/gsp-shmem (diff)
downloadyuzu-41f74a16fd55934f747f6f7e1f7a6d4d6a3d4e57.tar.gz
yuzu-41f74a16fd55934f747f6f7e1f7a6d4d6a3d4e57.tar.xz
yuzu-41f74a16fd55934f747f6f7e1f7a6d4d6a3d4e57.zip
Core/HLE: Implemented the SVCs GetProcessId and GetProcessIdOfThread
Diffstat (limited to 'src/core/hle/svc.cpp')
-rw-r--r--src/core/hle/svc.cpp33
1 files changed, 31 insertions, 2 deletions
diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp
index 1ec6599c7..b5cf554c3 100644
--- a/src/core/hle/svc.cpp
+++ b/src/core/hle/svc.cpp
@@ -16,6 +16,7 @@
16#include "core/hle/kernel/address_arbiter.h" 16#include "core/hle/kernel/address_arbiter.h"
17#include "core/hle/kernel/event.h" 17#include "core/hle/kernel/event.h"
18#include "core/hle/kernel/mutex.h" 18#include "core/hle/kernel/mutex.h"
19#include "core/hle/kernel/process.h"
19#include "core/hle/kernel/semaphore.h" 20#include "core/hle/kernel/semaphore.h"
20#include "core/hle/kernel/shared_memory.h" 21#include "core/hle/kernel/shared_memory.h"
21#include "core/hle/kernel/thread.h" 22#include "core/hle/kernel/thread.h"
@@ -424,6 +425,34 @@ static ResultCode ReleaseMutex(Handle handle) {
424 return RESULT_SUCCESS; 425 return RESULT_SUCCESS;
425} 426}
426 427
428/// Get the ID of the specified process
429static ResultCode GetProcessId(u32* process_id, Handle handle) {
430 LOG_TRACE(Kernel_SVC, "called process=0x%08X", handle);
431
432 const SharedPtr<Kernel::Process> process = Kernel::g_handle_table.Get<Kernel::Process>(handle);
433 if (process == nullptr)
434 return ERR_INVALID_HANDLE;
435
436 *process_id = process->GetProcessId();
437 return RESULT_SUCCESS;
438}
439
440/// Get the ID of the process that owns the specified thread
441static ResultCode GetProcessIdOfThread(u32* process_id, Handle handle) {
442 LOG_TRACE(Kernel_SVC, "called thread=0x%08X", handle);
443
444 const SharedPtr<Kernel::Thread> thread = Kernel::g_handle_table.Get<Kernel::Thread>(handle);
445 if (thread == nullptr)
446 return ERR_INVALID_HANDLE;
447
448 const SharedPtr<Kernel::Process> process = thread->owner_process;
449 if (process == nullptr)
450 return ERR_INVALID_HANDLE;
451
452 *process_id = process->process_id;
453 return RESULT_SUCCESS;
454}
455
427/// Get the ID for the specified thread. 456/// Get the ID for the specified thread.
428static ResultCode GetThreadId(u32* thread_id, Handle handle) { 457static ResultCode GetThreadId(u32* thread_id, Handle handle) {
429 LOG_TRACE(Kernel_SVC, "called thread=0x%08X", handle); 458 LOG_TRACE(Kernel_SVC, "called thread=0x%08X", handle);
@@ -674,8 +703,8 @@ static const FunctionDef SVC_Table[] = {
674 {0x32, HLE::Wrap<SendSyncRequest>, "SendSyncRequest"}, 703 {0x32, HLE::Wrap<SendSyncRequest>, "SendSyncRequest"},
675 {0x33, nullptr, "OpenProcess"}, 704 {0x33, nullptr, "OpenProcess"},
676 {0x34, nullptr, "OpenThread"}, 705 {0x34, nullptr, "OpenThread"},
677 {0x35, nullptr, "GetProcessId"}, 706 {0x35, HLE::Wrap<GetProcessId>, "GetProcessId"},
678 {0x36, nullptr, "GetProcessIdOfThread"}, 707 {0x36, HLE::Wrap<GetProcessIdOfThread>, "GetProcessIdOfThread"},
679 {0x37, HLE::Wrap<GetThreadId>, "GetThreadId"}, 708 {0x37, HLE::Wrap<GetThreadId>, "GetThreadId"},
680 {0x38, HLE::Wrap<GetResourceLimit>, "GetResourceLimit"}, 709 {0x38, HLE::Wrap<GetResourceLimit>, "GetResourceLimit"},
681 {0x39, nullptr, "GetResourceLimitLimitValues"}, 710 {0x39, nullptr, "GetResourceLimitLimitValues"},