diff options
| author | 2016-06-11 22:46:35 -0400 | |
|---|---|---|
| committer | 2016-06-11 22:46:35 -0400 | |
| commit | 78f2b85fe6df35e3501f6dbd81ceea536fcdb8a1 (patch) | |
| tree | 73078fff8f77a252dcc51ec39e84b5606ad30133 /src/core/hle/svc.cpp | |
| parent | Merge pull request #1899 from wwylele/hid-cmath (diff) | |
| parent | Kernel/SVC: Implemented svcCreatePort. (diff) | |
| download | yuzu-78f2b85fe6df35e3501f6dbd81ceea536fcdb8a1.tar.gz yuzu-78f2b85fe6df35e3501f6dbd81ceea536fcdb8a1.tar.xz yuzu-78f2b85fe6df35e3501f6dbd81ceea536fcdb8a1.zip | |
Merge pull request #1842 from Subv/ports
Kernel: Added ClientPort and ServerPort classes, along with svcCreatePort.
Diffstat (limited to 'src/core/hle/svc.cpp')
| -rw-r--r-- | src/core/hle/svc.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp index 0ce72de87..5d71d5619 100644 --- a/src/core/hle/svc.cpp +++ b/src/core/hle/svc.cpp | |||
| @@ -14,12 +14,14 @@ | |||
| 14 | #include "core/arm/arm_interface.h" | 14 | #include "core/arm/arm_interface.h" |
| 15 | 15 | ||
| 16 | #include "core/hle/kernel/address_arbiter.h" | 16 | #include "core/hle/kernel/address_arbiter.h" |
| 17 | #include "core/hle/kernel/client_port.h" | ||
| 17 | #include "core/hle/kernel/event.h" | 18 | #include "core/hle/kernel/event.h" |
| 18 | #include "core/hle/kernel/memory.h" | 19 | #include "core/hle/kernel/memory.h" |
| 19 | #include "core/hle/kernel/mutex.h" | 20 | #include "core/hle/kernel/mutex.h" |
| 20 | #include "core/hle/kernel/process.h" | 21 | #include "core/hle/kernel/process.h" |
| 21 | #include "core/hle/kernel/resource_limit.h" | 22 | #include "core/hle/kernel/resource_limit.h" |
| 22 | #include "core/hle/kernel/semaphore.h" | 23 | #include "core/hle/kernel/semaphore.h" |
| 24 | #include "core/hle/kernel/server_port.h" | ||
| 23 | #include "core/hle/kernel/shared_memory.h" | 25 | #include "core/hle/kernel/shared_memory.h" |
| 24 | #include "core/hle/kernel/thread.h" | 26 | #include "core/hle/kernel/thread.h" |
| 25 | #include "core/hle/kernel/timer.h" | 27 | #include "core/hle/kernel/timer.h" |
| @@ -834,6 +836,23 @@ static ResultCode CreateMemoryBlock(Handle* out_handle, u32 addr, u32 size, u32 | |||
| 834 | return RESULT_SUCCESS; | 836 | return RESULT_SUCCESS; |
| 835 | } | 837 | } |
| 836 | 838 | ||
| 839 | static ResultCode CreatePort(Handle* server_port, Handle* client_port, const char* name, u32 max_sessions) { | ||
| 840 | // TODO(Subv): Implement named ports. | ||
| 841 | ASSERT_MSG(name == nullptr, "Named ports are currently unimplemented"); | ||
| 842 | |||
| 843 | using Kernel::ServerPort; | ||
| 844 | using Kernel::ClientPort; | ||
| 845 | using Kernel::SharedPtr; | ||
| 846 | |||
| 847 | auto ports = ServerPort::CreatePortPair(max_sessions); | ||
| 848 | CASCADE_RESULT(*client_port, Kernel::g_handle_table.Create(std::move(std::get<SharedPtr<ClientPort>>(ports)))); | ||
| 849 | // Note: The 3DS kernel also leaks the client port handle if the server port handle fails to be created. | ||
| 850 | CASCADE_RESULT(*server_port, Kernel::g_handle_table.Create(std::move(std::get<SharedPtr<ServerPort>>(ports)))); | ||
| 851 | |||
| 852 | LOG_TRACE(Kernel_SVC, "called max_sessions=%u", max_sessions); | ||
| 853 | return RESULT_SUCCESS; | ||
| 854 | } | ||
| 855 | |||
| 837 | static ResultCode GetSystemInfo(s64* out, u32 type, s32 param) { | 856 | static ResultCode GetSystemInfo(s64* out, u32 type, s32 param) { |
| 838 | using Kernel::MemoryRegion; | 857 | using Kernel::MemoryRegion; |
| 839 | 858 | ||
| @@ -1011,7 +1030,7 @@ static const FunctionDef SVC_Table[] = { | |||
| 1011 | {0x44, nullptr, "Unknown"}, | 1030 | {0x44, nullptr, "Unknown"}, |
| 1012 | {0x45, nullptr, "Unknown"}, | 1031 | {0x45, nullptr, "Unknown"}, |
| 1013 | {0x46, nullptr, "Unknown"}, | 1032 | {0x46, nullptr, "Unknown"}, |
| 1014 | {0x47, nullptr, "CreatePort"}, | 1033 | {0x47, HLE::Wrap<CreatePort>, "CreatePort"}, |
| 1015 | {0x48, nullptr, "CreateSessionToPort"}, | 1034 | {0x48, nullptr, "CreateSessionToPort"}, |
| 1016 | {0x49, nullptr, "CreateSession"}, | 1035 | {0x49, nullptr, "CreateSession"}, |
| 1017 | {0x4A, nullptr, "AcceptSession"}, | 1036 | {0x4A, nullptr, "AcceptSession"}, |