STATUS wdCancel ( WDOG_ID wdId /* ID of watchdog to cancel */ ) { int level = intLock (); /* LOCK INTERRUPTS */ if (OBJ_VERIFY (wdId, wdClassId) != OK) { intUnlock (level); /* UNLOCK INTERRUPTS */ return (ERROR); } #ifdef WV_INSTRUMENTATION /* windview - level 1 event logging */ EVT_OBJ_1 (OBJ, wdId, wdClassId, EVENT_WDCANCEL, wdId); #endif if (kernelState) { intUnlock (level); /* UNLOCK INTERRUPTS */ workQAdd1 ((FUNCPTR)windWdCancel, (int)wdId); } else { kernelState = TRUE; /* KERNEL_ENT */ intUnlock (level); /* UNLOCK INTERRUPTS */ windWdCancel (wdId); /* cancel watchdog */ windExit (); /* KERNEL EXIT */ } return (OK); }
STATUS taskResume( int taskId ) { STATUS status; TCB_ID tcbId; /* If try to resume current task */ if (taskId == 0) { status = OK; } else { tcbId = (TCB_ID) taskId; /* Verify that it is actually a task */ if (TASK_ID_VERIFY(tcbId) != OK) { /* errno set by TASK_ID_VERIFY() */ status = ERROR; } else { /* Put on queue if in kernel mode */ if (kernelState == TRUE) { /* Put on kernel queue */ workQAdd1((FUNCPTR) vmxResume, (ARG) tcbId); status = OK; } else { /* Enter kernel mode */ kernelState = TRUE; /* Resume task */ vmxResume(tcbId); /* Exit kernel mode */ vmxExit(); status = OK; } } } return status; }
STATUS semFlushDefer(SEM_ID semId) { if(!IS_CLASS(semId, semClassId)) { return (ERROR); } if(NULL == semFlushTbl[semId->semType & SEM_TYPE_MASK]) { return (ERROR); } workQAdd1 (semFlushDeferTbl [semId->semType], (int) semId); return (OK); }
STATUS wdCancel( WDOG_ID wdId ) { STATUS status; int level; /* Lock interrupts */ INT_LOCK(level); /* Verify object */ if (OBJ_VERIFY(wdId, wdClassId) != OK) { INT_UNLOCK(level); status = ERROR; } else { /* If in kernel mode */ if (kernelState == TRUE) { /* Unlock interrupts */ INT_UNLOCK(level); /* Add to kernel queue */ workQAdd1((FUNCPTR) vmxWdCancel, (ARG) wdId); status = OK; } else { /* Enter kernel */ kernelState = TRUE; /* Unlock interrupts */ INT_UNLOCK(level); vmxWdCancel(wdId); /* Exit kernel */ vmxExit(); status = OK; } } return status; }
LOCAL STATUS semFlushDefer( SEM_ID semId ) { STATUS status; /* Verify object */ if (OBJ_VERIFY(semId, semClassId) != OK) { status = ERROR; } else { /* A method is guaranteed to exist */ workQAdd1(semFlushDeferTable[semId->semType & SEM_TYPE_MASK], semId); status = OK; } return status; }
STATUS taskSuspend( int taskId ) { STATUS status; TCB_ID tcbId; /* Get task context */ tcbId = taskTcb(taskId); if (tcbId == NULL) { status = ERROR; } else { /* TASK_ID_VERIFY() already done by taskTcb() */ /* Check if in kernel mode */ if (kernelState == TRUE) { /* Add to kernel queue */ workQAdd1((FUNCPTR) vmxSuspend, (ARG) tcbId); status = OK; } else { /* Enter kernel mode */ kernelState = TRUE; /* Suspend task */ vmxSuspend(tcbId); /* Exit trough kernel */ vmxExit(); status = OK; } } return status; }