summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/svc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/hle/kernel/svc.cpp')
-rw-r--r--src/core/hle/kernel/svc.cpp30
1 files changed, 29 insertions, 1 deletions
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp
index 812b32005..a0e3dc470 100644
--- a/src/core/hle/kernel/svc.cpp
+++ b/src/core/hle/kernel/svc.cpp
@@ -1598,6 +1598,34 @@ static ResultCode CreateSharedMemory(Handle* handle, u64 size, u32 local_permiss
1598 return RESULT_SUCCESS; 1598 return RESULT_SUCCESS;
1599} 1599}
1600 1600
1601static ResultCode CreateEvent(Handle* write_handle, Handle* read_handle) {
1602 LOG_DEBUG(Kernel_SVC, "called");
1603
1604 auto& kernel = Core::System::GetInstance().Kernel();
1605 const auto [readable_event, writable_event] =
1606 WritableEvent::CreateEventPair(kernel, ResetType::Sticky, "CreateEvent");
1607
1608 HandleTable& handle_table = kernel.CurrentProcess()->GetHandleTable();
1609
1610 const auto write_create_result = handle_table.Create(writable_event);
1611 if (write_create_result.Failed()) {
1612 return write_create_result.Code();
1613 }
1614 *write_handle = *write_create_result;
1615
1616 const auto read_create_result = handle_table.Create(readable_event);
1617 if (read_create_result.Failed()) {
1618 handle_table.Close(*write_create_result);
1619 return read_create_result.Code();
1620 }
1621 *read_handle = *read_create_result;
1622
1623 LOG_DEBUG(Kernel_SVC,
1624 "successful. Writable event handle=0x{:08X}, Readable event handle=0x{:08X}",
1625 *write_create_result, *read_create_result);
1626 return RESULT_SUCCESS;
1627}
1628
1601static ResultCode ClearEvent(Handle handle) { 1629static ResultCode ClearEvent(Handle handle) {
1602 LOG_TRACE(Kernel_SVC, "called, event=0x{:08X}", handle); 1630 LOG_TRACE(Kernel_SVC, "called, event=0x{:08X}", handle);
1603 1631
@@ -1806,7 +1834,7 @@ static const FunctionDef SVC_Table[] = {
1806 {0x42, nullptr, "ReplyAndReceiveLight"}, 1834 {0x42, nullptr, "ReplyAndReceiveLight"},
1807 {0x43, nullptr, "ReplyAndReceive"}, 1835 {0x43, nullptr, "ReplyAndReceive"},
1808 {0x44, nullptr, "ReplyAndReceiveWithUserBuffer"}, 1836 {0x44, nullptr, "ReplyAndReceiveWithUserBuffer"},
1809 {0x45, nullptr, "CreateEvent"}, 1837 {0x45, SvcWrap<CreateEvent>, "CreateEvent"},
1810 {0x46, nullptr, "Unknown"}, 1838 {0x46, nullptr, "Unknown"},
1811 {0x47, nullptr, "Unknown"}, 1839 {0x47, nullptr, "Unknown"},
1812 {0x48, nullptr, "MapPhysicalMemoryUnsafe"}, 1840 {0x48, nullptr, "MapPhysicalMemoryUnsafe"},