int sceKernelReleaseSubIntrHandler(int intrNumber, int subIntrNumber) { DEBUG_LOG(HLE, "sceKernelReleaseSubIntrHandler(%i, %i)", intrNumber, subIntrNumber); if (intrNumber >= PSP_NUMBER_INTERRUPTS) return -1; return __ReleaseSubIntrHandler(intrNumber, subIntrNumber); }
u32 sceKernelReleaseSubIntrHandler(u32 intrNumber, u32 subIntrNumber) { if (intrNumber >= PSP_NUMBER_INTERRUPTS) { ERROR_LOG_REPORT(SCEINTC, "sceKernelReleaseSubIntrHandler(%i, %i): invalid interrupt", intrNumber, subIntrNumber); return SCE_KERNEL_ERROR_ILLEGAL_INTRCODE; } if (subIntrNumber >= PSP_NUMBER_SUBINTERRUPTS) { ERROR_LOG_REPORT(SCEINTC, "sceKernelReleaseSubIntrHandler(%i, %i): invalid subinterrupt", intrNumber, subIntrNumber); return SCE_KERNEL_ERROR_ILLEGAL_INTRCODE; } u32 error = __ReleaseSubIntrHandler(intrNumber, subIntrNumber); if (error != SCE_KERNEL_ERROR_OK) { ERROR_LOG(SCEINTC, "sceKernelReleaseSubIntrHandler(%i, %i): error %08x", intrNumber, subIntrNumber); } return error; }
virtual void handleResult(int result) { // A non-zero result means to reschedule. if (result > 0) { u32 error; Alarm *alarm = kernelObjects.Get<Alarm>(alarmID, error); __KernelScheduleAlarm(alarm, (u64) usToCycles(result)); } else { if (result < 0) WARN_LOG(HLE, "Alarm requested reschedule for negative value %u, ignoring", (unsigned) result); // Delete the alarm if it's not rescheduled. kernelObjects.Destroy<Alarm>(alarmID); __ReleaseSubIntrHandler(PSP_SYSTIMER0_INTR, alarmID); } }