mirror of
https://github.com/Vita3K/Vita3K.git
synced 2026-07-17 04:25:43 +02:00
* Loading modules from bootimage.skprx * ELF loading with automatic format detection based on the magic value * New NIDs and modules for kernel-level functions (added manually). * Implementation of several kernel-level functions. Most of them delegate to user-level counterparts. Other changes, which are difficult to split: * Whenever possible, do not relocate modules. * Patches are now read for eboot.bin only * ELF dumps are now organized into subfolders named by application/game ID * Correct implementation of LLE libfiber, even without an LLE sysmodule
389 lines
8.3 KiB
C++
389 lines
8.3 KiB
C++
// Vita3K emulator project
|
|
// Copyright (C) 2026 Vita3K team
|
|
//
|
|
// This program is free software; you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation; either version 2 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License along
|
|
// with this program; if not, write to the Free Software Foundation, Inc.,
|
|
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
|
|
#include "../SceLibKernel/SceLibKernel.h"
|
|
#include "SceThreadmgr.h"
|
|
#include <module/module.h>
|
|
#include <util/tracy.h>
|
|
|
|
TRACY_MODULE_NAME(SceThreadmgrForDriver);
|
|
|
|
#include <kernel/state.h>
|
|
|
|
EXPORT(int, ksceKernelCancelCallback) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelCancelMsgPipe) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelCancelMutex) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelChangeCurrentThreadAttr) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelChangeThreadCpuAffinityMask) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelChangeThreadPriority) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelChangeThreadSuspendStatus) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelClearEvent) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelClearEventFlag) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelCreateCallback) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelCreateCond) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelCreateEventFlag) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelCreateMsgPipe) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelCreateMutex, const char *name, SceUInt attr, int init_count, SceKernelMutexOptParam *opt_param) {
|
|
TRACY_FUNC(ksceKernelCreateMutex, name, attr, init_count, opt_param);
|
|
return CALL_EXPORT(_sceKernelCreateMutex, name, attr, init_count, opt_param);
|
|
}
|
|
|
|
EXPORT(int, ksceKernelCreateSema) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelCreateSimpleEvent) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(SceUID, ksceKernelCreateThread, const char *name, SceKernelThreadEntry entry, int initPriority, SceSize stackSize, SceUInt attr, int cpuAffinityMask, void *pOptParam) {
|
|
const ThreadStatePtr thread = emuenv.kernel.create_thread(emuenv.mem, name, entry.cast<void>(), initPriority, cpuAffinityMask, stackSize, nullptr);
|
|
if (!thread)
|
|
return RET_ERROR(SCE_KERNEL_ERROR_ERROR);
|
|
return thread->id;
|
|
}
|
|
|
|
EXPORT(int, ksceKernelDeleteCallback) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelDeleteCond) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelDeleteEventFlag) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelDeleteFastMutex) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelDeleteMsgPipe) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelDeleteMutex) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelDeleteSema) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelDeleteThread) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelEnqueueWorkQueue) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelGetCallbackCount) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelGetMutexInfo) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelGetProcessIdFromTLS) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelGetSystemTimeLow) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelGetTLSAddr) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelGetThreadCpuAffinityMask) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelGetThreadCpuRegisters) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelGetThreadCurrentPriority) {
|
|
TRACY_FUNC(ksceKernelGetThreadCurrentPriority);
|
|
return CALL_EXPORT(sceKernelGetThreadCurrentPriority);
|
|
}
|
|
|
|
EXPORT(int, ksceKernelGetThreadId) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelGetThreadIdList) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelGetThreadInfo) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelGetThreadStackFreeSize) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelGetThreadTLSAddr) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelGetThreadmgrUIDClass) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelGetTimerBaseWide) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelGetTimerTimeWide) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelInitializeFastMutex) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelLockFastMutex) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelLockMutex, SceUID mutexid, int lock_count, unsigned int *timeout) {
|
|
TRACY_FUNC(ksceKernelLockMutex, mutexid, lock_count, timeout);
|
|
return CALL_EXPORT(_sceKernelLockMutex, mutexid, lock_count, timeout);
|
|
}
|
|
|
|
EXPORT(int, ksceKernelLockMutexCB_089) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelNotifyCallback) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelPollEventFlag) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelPollSema) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelPulseEvent) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelPulseEventWithNotifyCallback) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelReceiveMsgPipeVector) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelReceiveMsgPipeVectorCB) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelRegisterCallbackToEvent) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelRegisterTimer) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelRunWithStack) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelSendMsgPipeVector) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelSetEvent) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelSetEventFlag) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelSetPermission) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelSetProcessId) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelSetTimerTimeWide) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelSignalCond) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelSignalCondAll) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelSignalCondTo) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelSignalSema) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelStartThread, SceUID thid, SceSize arglen, Ptr<void> argp) {
|
|
return CALL_EXPORT(_sceKernelStartThread, thid, arglen, argp);
|
|
}
|
|
|
|
EXPORT(int, ksceKernelStartTimer) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelStopTimer) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelTryLockMutex) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelTryLockReadRWLock) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelTryLockWriteRWLock) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelTryReceiveMsgPipeVector) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelTrySendMsgPipeVector) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelUnlockFastMutex) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelUnlockMutex, SceUID mutexid, int unlock_count) {
|
|
TRACY_FUNC(ksceKernelUnlockMutex, mutexid, unlock_count);
|
|
return CALL_EXPORT(sceKernelUnlockMutex, mutexid, unlock_count);
|
|
}
|
|
|
|
EXPORT(int, ksceKernelUnlockReadRWLock) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelUnlockWriteRWLock) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelUnregisterCallbackFromEvent) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelUnregisterCallbackFromEventAll) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelWaitCond) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelWaitEvent) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelWaitEventCB) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelWaitEventFlag) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelWaitEventFlagCB) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelWaitSema) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, ksceKernelWaitThreadEnd, SceUID thid, int *stat, SceUInt *timeout) {
|
|
return CALL_EXPORT(_sceKernelWaitThreadEnd, thid, stat, timeout);
|
|
}
|
|
|
|
EXPORT(int, ksceKernelWaitThreadEndCB) {
|
|
return UNIMPLEMENTED();
|
|
}
|
|
|
|
EXPORT(int, SceThreadmgrForDriver_20C228E4) {
|
|
return UNIMPLEMENTED();
|
|
}
|