Esempio n. 1
0
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);
}
Esempio n. 2
0
File: taskLib.c Progetto: phoboz/vmx
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;
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
File: wdLib.c Progetto: phoboz/vmx
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;
}
Esempio n. 5
0
File: semLib.c Progetto: phoboz/vmx
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;
}
Esempio n. 6
0
File: taskLib.c Progetto: phoboz/vmx
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;
}