//SceUID sceKernelCreateSema(const char *name, SceUInt attr, int initVal, int maxVal, SceKernelSemaOptParam *option); // void because it changes threads. void sceKernelCreateSema(const char* name, u32 attr, int initVal, int maxVal, u32 optionPtr) { if (!semaInitComplete) __KernelSemaInit(); if (!name) { RETURN(SCE_KERNEL_ERROR_ERROR); return; } Semaphore *s = new Semaphore; SceUID id = kernelObjects.Create(s); s->ns.size = sizeof(NativeSemaphore); strncpy(s->ns.name, name, 31); s->ns.name[31] = 0; s->ns.attr = attr; s->ns.initCount = initVal; s->ns.currentCount = s->ns.initCount; s->ns.maxCount = maxVal; s->ns.numWaitThreads = 0; DEBUG_LOG(HLE,"%i=sceKernelCreateSema(%s, %08x, %i, %i, %08x)", id, s->ns.name, s->ns.attr, s->ns.initCount, s->ns.maxCount, optionPtr); if (optionPtr != 0) WARN_LOG(HLE,"sceKernelCreateSema(%s) unsupported options parameter.", name); RETURN(id); __KernelReSchedule("semaphore created"); }
void __KernelInit() { if (kernelRunning) { ERROR_LOG(SCEKERNEL, "Can't init kernel when kernel is running"); return; } __KernelTimeInit(); __InterruptsInit(); __KernelMemoryInit(); __KernelThreadingInit(); __KernelAlarmInit(); __KernelVTimerInit(); __KernelEventFlagInit(); __KernelMbxInit(); __KernelMutexInit(); __KernelSemaInit(); __KernelMsgPipeInit(); __IoInit(); __JpegInit(); __AudioInit(); __SasInit(); __AtracInit(); __CccInit(); __DisplayInit(); __GeInit(); __PowerInit(); __UtilityInit(); __UmdInit(); __MpegInit(); __PsmfInit(); __CtrlInit(); __RtcInit(); __SslInit(); __ImposeInit(); __UsbInit(); __FontInit(); __NetInit(); __NetAdhocInit(); __VaudioInit(); __CheatInit(); __HeapInit(); __DmacInit(); __AudioCodecInit(); __VideoPmpInit(); SaveState::Init(); // Must be after IO, as it may create a directory Reporting::Init(); // "Internal" PSP libraries __PPGeInit(); kernelRunning = true; INFO_LOG(SCEKERNEL, "Kernel initialized."); }
void __KernelInit() { if (kernelRunning) { ERROR_LOG(HLE, "Can't init kernel when kernel is running"); return; } __KernelTimeInit(); __InterruptsInit(); __KernelMemoryInit(); __KernelThreadingInit(); __KernelAlarmInit(); __KernelVTimerInit(); __KernelEventFlagInit(); __KernelMbxInit(); __KernelMutexInit(); __KernelSemaInit(); __IoInit(); __AudioInit(); __SasInit(); __AtracInit(); __DisplayInit(); __GeInit(); __PowerInit(); __UtilityInit(); __UmdInit(); __MpegInit(PSP_CoreParameter().useMediaEngine); __PsmfInit(); __CtrlInit(); __RtcInit(); __SslInit(); __ImposeInit(); __UsbInit(); __FontInit(); __NetInit(); __VaudioInit(); __CheatInit(); SaveState::Init(); // Must be after IO, as it may create a directory // "Internal" PSP libraries __PPGeInit(); kernelRunning = true; INFO_LOG(HLE, "Kernel initialized."); }
//SceUID sceKernelCreateSema(const char *name, SceUInt attr, int initVal, int maxVal, SceKernelSemaOptParam *option); int sceKernelCreateSema(const char* name, u32 attr, int initVal, int maxVal, u32 optionPtr) { if (!semaInitComplete) __KernelSemaInit(); if (!name) { WARN_LOG(HLE, "%08x=sceKernelCreateSema(): invalid name", SCE_KERNEL_ERROR_ERROR); return SCE_KERNEL_ERROR_ERROR; } if (attr >= 0x200) { WARN_LOG(HLE, "%08x=sceKernelCreateSema(): invalid attr parameter: %08x", SCE_KERNEL_ERROR_ILLEGAL_ATTR, attr); return SCE_KERNEL_ERROR_ILLEGAL_ATTR; } Semaphore *s = new Semaphore; SceUID id = kernelObjects.Create(s); s->ns.size = sizeof(NativeSemaphore); strncpy(s->ns.name, name, KERNELOBJECT_MAX_NAME_LENGTH); s->ns.name[KERNELOBJECT_MAX_NAME_LENGTH] = 0; s->ns.attr = attr; s->ns.initCount = initVal; s->ns.currentCount = s->ns.initCount; s->ns.maxCount = maxVal; s->ns.numWaitThreads = 0; DEBUG_LOG(HLE, "%i=sceKernelCreateSema(%s, %08x, %i, %i, %08x)", id, s->ns.name, s->ns.attr, s->ns.initCount, s->ns.maxCount, optionPtr); if (optionPtr != 0) WARN_LOG(HLE, "sceKernelCreateSema(%s) unsupported options parameter: %08x", name, optionPtr); if ((attr & ~PSP_SEMA_ATTR_PRIORITY) != 0) WARN_LOG(HLE, "sceKernelCreateSema(%s) unsupported attr parameter: %08x", name, attr); return id; }