From ae9a779369e6f03f42c01684b5fe1c66edcf2a46 Mon Sep 17 00:00:00 2001 From: georgemoralis Date: Sun, 19 May 2024 12:28:20 +0300 Subject: [PATCH] event flags : added function signatures --- CMakeLists.txt | 2 + .../kernel/event_flag/event_flag.cpp | 19 ++++++---- .../libraries/kernel/event_flag/event_flag.h | 38 +++++++++++++++---- .../kernel/event_flag/event_flag_obj.cpp | 6 +++ .../kernel/event_flag/event_flag_obj.h | 8 ++++ 5 files changed, 59 insertions(+), 14 deletions(-) create mode 100644 src/core/libraries/kernel/event_flag/event_flag_obj.cpp create mode 100644 src/core/libraries/kernel/event_flag/event_flag_obj.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 7d05e6f0..691fdb5d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -102,6 +102,8 @@ set(GNM_LIB src/core/libraries/gnmdriver/gnmdriver.cpp set(KERNEL_LIB src/core/libraries/kernel/event_flag/event_flag.cpp src/core/libraries/kernel/event_flag/event_flag.h + src/core/libraries/kernel/event_flag/event_flag_obj.cpp + src/core/libraries/kernel/event_flag/event_flag_obj.h src/core/libraries/kernel/cpu_management.cpp src/core/libraries/kernel/cpu_management.h src/core/libraries/kernel/event_queue.cpp diff --git a/src/core/libraries/kernel/event_flag/event_flag.cpp b/src/core/libraries/kernel/event_flag/event_flag.cpp index 22c3ee78..91054e54 100644 --- a/src/core/libraries/kernel/event_flag/event_flag.cpp +++ b/src/core/libraries/kernel/event_flag/event_flag.cpp @@ -7,11 +7,13 @@ #include "event_flag.h" namespace Libraries::Kernel { -int PS4_SYSV_ABI sceKernelCreateEventFlag() { +int PS4_SYSV_ABI sceKernelCreateEventFlag(OrbisKernelEventFlag* ef, const char* pName, u32 attr, + u64 initPattern, + const OrbisKernelEventFlagOptParam* pOptParam) { LOG_ERROR(Kernel_Event, "(STUBBED) called"); return ORBIS_OK; } -int PS4_SYSV_ABI sceKernelDeleteEventFlag() { +int PS4_SYSV_ABI sceKernelDeleteEventFlag(OrbisKernelEventFlag ef) { LOG_ERROR(Kernel_Event, "(STUBBED) called"); return ORBIS_OK; } @@ -23,23 +25,26 @@ int PS4_SYSV_ABI sceKernelCloseEventFlag() { LOG_ERROR(Kernel_Event, "(STUBBED) called"); return ORBIS_OK; } -int PS4_SYSV_ABI sceKernelClearEventFlag() { +int PS4_SYSV_ABI sceKernelClearEventFlag(OrbisKernelEventFlag ef, u64 bitPattern) { LOG_ERROR(Kernel_Event, "(STUBBED) called"); return ORBIS_OK; } -int PS4_SYSV_ABI sceKernelCancelEventFlag() { +int PS4_SYSV_ABI sceKernelCancelEventFlag(OrbisKernelEventFlag ef, u64 setPattern, + int* pNumWaitThreads) { LOG_ERROR(Kernel_Event, "(STUBBED) called"); return ORBIS_OK; } -int PS4_SYSV_ABI sceKernelSetEventFlag() { +int PS4_SYSV_ABI sceKernelSetEventFlag(OrbisKernelEventFlag ef, u64 bitPattern) { LOG_ERROR(Kernel_Event, "(STUBBED) called"); return ORBIS_OK; } -int PS4_SYSV_ABI sceKernelPollEventFlag() { +int PS4_SYSV_ABI sceKernelPollEventFlag(OrbisKernelEventFlag ef, u64 bitPattern, u32 waitMode, + u64* pResultPat) { LOG_ERROR(Kernel_Event, "(STUBBED) called"); return ORBIS_OK; } -int PS4_SYSV_ABI sceKernelWaitEventFlag() { +int PS4_SYSV_ABI sceKernelWaitEventFlag(OrbisKernelEventFlag ef, u64 bitPattern, u32 waitMode, + u64* pResultPat, OrbisKernelUseconds* pTimeout) { LOG_ERROR(Kernel_Event, "(STUBBED) called"); return ORBIS_OK; } diff --git a/src/core/libraries/kernel/event_flag/event_flag.h b/src/core/libraries/kernel/event_flag/event_flag.h index d986d284..042a940e 100644 --- a/src/core/libraries/kernel/event_flag/event_flag.h +++ b/src/core/libraries/kernel/event_flag/event_flag.h @@ -4,21 +4,45 @@ #pragma once #include "common/types.h" +#include "event_flag_obj.h" namespace Core::Loader { class SymbolsResolver; } namespace Libraries::Kernel { -int PS4_SYSV_ABI sceKernelCreateEventFlag(); -int PS4_SYSV_ABI sceKernelDeleteEventFlag(); + +constexpr int ORBIS_KERNEL_EVF_ATTR_TH_FIFO = 0x01; +constexpr int ORBIS_KERNEL_EVF_ATTR_TH_PRIO = 0x02; +constexpr int ORBIS_KERNEL_EVF_ATTR_SINGLE = 0x10; +constexpr int ORBIS_KERNEL_EVF_ATTR_MULTI = 0x20; + +constexpr int ORBIS_KERNEL_EVF_WAITMODE_AND = 0x01; +constexpr int ORBIS_KERNEL_EVF_WAITMODE_OR = 0x02; +constexpr int ORBIS_KERNEL_EVF_WAITMODE_CLEAR_ALL = 0x10; +constexpr int ORBIS_KERNEL_EVF_WAITMODE_CLEAR_PAT = 0x20; + +using OrbisKernelUseconds = u32; +using OrbisKernelEventFlag = EventFlagInternal*; + +struct OrbisKernelEventFlagOptParam { + size_t size; +}; + +int PS4_SYSV_ABI sceKernelCreateEventFlag(OrbisKernelEventFlag* ef, const char* pName, u32 attr, + u64 initPattern, + const OrbisKernelEventFlagOptParam* pOptParam); +int PS4_SYSV_ABI sceKernelDeleteEventFlag(OrbisKernelEventFlag ef); int PS4_SYSV_ABI sceKernelOpenEventFlag(); int PS4_SYSV_ABI sceKernelCloseEventFlag(); -int PS4_SYSV_ABI sceKernelClearEventFlag(); -int PS4_SYSV_ABI sceKernelCancelEventFlag(); -int PS4_SYSV_ABI sceKernelSetEventFlag(); -int PS4_SYSV_ABI sceKernelPollEventFlag(); -int PS4_SYSV_ABI sceKernelWaitEventFlag(); +int PS4_SYSV_ABI sceKernelClearEventFlag(OrbisKernelEventFlag ef, u64 bitPattern); +int PS4_SYSV_ABI sceKernelCancelEventFlag(OrbisKernelEventFlag ef, u64 setPattern, + int* pNumWaitThreads); +int PS4_SYSV_ABI sceKernelSetEventFlag(OrbisKernelEventFlag ef, u64 bitPattern); +int PS4_SYSV_ABI sceKernelPollEventFlag(OrbisKernelEventFlag ef, u64 bitPattern, u32 waitMode, + u64* pResultPat); +int PS4_SYSV_ABI sceKernelWaitEventFlag(OrbisKernelEventFlag ef, u64 bitPattern, u32 waitMode, + u64* pResultPat, OrbisKernelUseconds* pTimeout); void RegisterKernelEventFlag(Core::Loader::SymbolsResolver* sym); diff --git a/src/core/libraries/kernel/event_flag/event_flag_obj.cpp b/src/core/libraries/kernel/event_flag/event_flag_obj.cpp new file mode 100644 index 00000000..30174c9a --- /dev/null +++ b/src/core/libraries/kernel/event_flag/event_flag_obj.cpp @@ -0,0 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "event_flag_obj.h" + +namespace Libraries::Kernel {} \ No newline at end of file diff --git a/src/core/libraries/kernel/event_flag/event_flag_obj.h b/src/core/libraries/kernel/event_flag/event_flag_obj.h new file mode 100644 index 00000000..aa18fc7e --- /dev/null +++ b/src/core/libraries/kernel/event_flag/event_flag_obj.h @@ -0,0 +1,8 @@ +// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +namespace Libraries::Kernel { +class EventFlagInternal {}; +} // namespace Libraries::Kernel \ No newline at end of file