Example #1
0
STATUS pcmciaInit (void)

    {
    PCMCIA_CTRL *pCtrl		= &pcmciaCtrl;
    PCMCIA_CHIP *pChip		= &pCtrl->chip;
    PCMCIA_CARD *pCard;
    PCMCIA_ADAPTER *pAdapter 	= NULL;
    int sock;
    int ix;


    pcmciaMsgQId = msgQCreate (PCMCIA_MAX_MSGS, sizeof(PCMCIA_MSG), MSG_Q_FIFO);

    if (pcmciaMsgQId == NULL)
	return (ERROR);

    pcmciadId = taskSpawn ("tPcmciad", pcmciadPriority,
			   pcmciadOptions, pcmciadStackSize,
			   (FUNCPTR) pcmciad, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

    if (pcmciadId == ERROR)
	return (ERROR);

    for (ix = 0; ix < pcmciaAdapterNumEnt; ix++)
	{
        pAdapter = &pcmciaAdapter[ix];
        if ((* pAdapter->initRtn) (pAdapter->ioBase,
				   pAdapter->intVec,
				   pAdapter->intLevel,
				   pAdapter->showRtn) == OK)
	    break;
	}

    if (ix >= pcmciaAdapterNumEnt)
	return (ERROR);

    semMInit (&cisMuteSem, SEM_Q_PRIORITY | SEM_DELETE_SAFE |
	      SEM_INVERSION_SAFE);

    (void) intConnect ((VOIDFUNCPTR *)INUM_TO_IVEC(pAdapter->intVec),
		       (VOIDFUNCPTR)pcmciaCscIntr, 0);

    if (pCtrl->socks != 0)		/* if explicitely defined, use it */
        pChip->socks = pCtrl->socks;

    for (sock = 0; sock < pChip->socks; sock++)
	{
	pCard = &pCtrl->card[sock];

	if ((pCard->cardStatus = (* pChip->status) (sock)) & PC_IS_CARD)
	    (void) cisGet (sock);

        (void) (* pChip->cscPoll) (sock);
        (void) (* pChip->cscOn) (sock, pChip->intLevel);
	}

    sysIntEnablePIC (pAdapter->intLevel);

    return (OK);
    }
Example #2
0
File: vmLib.c Project: phoboz/vmx
STATUS vmContextInit(
    VM_CONTEXT_ID context
    )
{
    STATUS status;

    if (vmLibInstalled != TRUE)
    {
        errnoSet(S_vmLib_NOT_INSTALLED);
        status = ERROR;
    }
    else
    {
        context->mmuTransTable = MMU_TRANS_TABLE_CREATE();
        if (context->mmuTransTable == NULL)
        {
            status = ERROR;
        }
        else
        {
            semMInit(&context->sem, vmMutexOptions);
            objCoreInit(&context->objCore, vmContextClassId);
            status = OK;
        }
    }

    return status;
}
Example #3
0
File: semLib.c Project: phoboz/vmx
STATUS semInit(
    SEM_ID semId,
    int    type,
    int    options
    )
{
    STATUS status;

    if (semLibInstalled != TRUE)
    {
        errnoSet(S_semLib_NOT_INSTALLED);
        status = ERROR;
    }
    else
    {
        /* Create semaphore of correct type */
        switch(type & SEM_TYPE_MASK)
        {
            case SEM_TYPE_BINARY:
                status = semBInit(semId, options, SEM_FULL);
                break;

            case SEM_TYPE_MUTEX:
                status = semMInit(semId, options);
                break;

            case SEM_TYPE_COUNTING:
                status = semCInit(semId, options, 1);
                break;

            default:
                status = ERROR;
                errnoSet(S_semLib_INVALID_OPTION);
                break;
        }
    }

    return status;
}
Example #4
0
File: vmLib.c Project: phoboz/vmx
STATUS vmLibInit(
    int pageSize
    )
{
    STATUS              status;
    int                 i;
    int                 j;
    int                 tableSize;
    unsigned            state;
    unsigned            mask;
    VM2MMU_STATE_TRANS *thisElement;
    unsigned            vmState;
    unsigned            mmuState;
    unsigned            vmMask;
    unsigned            mmuMask;

    /* Check if already installed */
    if (vmLibInstalled == TRUE)
    {
        status = OK;
    }
    else
    {
        /* Check for zero pagesize */
        if (pageSize == 0)
        {
            status = ERROR;
        }
        else
        {
            /* Store page size */
            vmPageSize = pageSize;

            for (i = 0; i < NUM_PAGE_STATES; i++)
            {
                state = 0;
                for (j = 0; j < mmuStateTransTableSize; j++)
                {
                    thisElement = &mmuStateTransTable[j];
                    vmState     = thisElement->vmState;
                    mmuState    = thisElement->mmuState;
                    vmMask      = thisElement->vmMask;

                    if ((i & vmMask) == vmState)
                    {
                        state |= mmuState;
                    }
                }

                vmStateTransTable[i] = state;
            }

            for (i = 0; i < NUM_PAGE_STATES; i++)
            {
                mask = 0;
                for (j = 0; j < mmuStateTransTableSize; j++)
                {
                    thisElement = &mmuStateTransTable[j];
                    vmMask      = thisElement->vmMask;
                    mmuMask     = thisElement->mmuMask;

                    if ((i & vmMask) == vmMask)
                    {
                        mask |= mmuMask;
                    }
                }

                vmMaskTransTable[i] = mask;
            }

            /* Global page block table size */
            tableSize = (unsigned) 0x80000000 / (mmuPageBlockSize / 2);
            globalPageBlockTable = (char *) calloc(
                                                tableSize,
                                                sizeof(globalPageBlockTable[0])
                                                );
            if (globalPageBlockTable == NULL)
            {
                status = ERROR;
            }
            else
            {
                /* Initialize class */
                if (classInit(
                        vmContextClassId,
                        sizeof(VM_CONTEXT),
                        OFFSET(VM_CONTEXT, objCore),
                        memSysPartId,
                        (FUNCPTR) vmContextCreate,
                        (FUNCPTR) vmContextInit,
                        (FUNCPTR) vmContextDestroy) != OK)
                {
                    status = ERROR;
                }
                else
                {
                    semMInit(&globalMemMutex, vmMutexOptions);

                    /* Enable mmu for cache library */
                    cacheMmuAvailable = TRUE;
                    cacheFuncsSet();

                    /* Set as installed */
                    vmLibInstalled = TRUE;
                    status = OK;
                }
            }
        }
    }

    return status;
}
Example #5
0
File: logLib.c Project: phoboz/vmx
STATUS logLibInit(
    int fd,
    int maxMsgs
    )
{
    STATUS status;

    /* Check if already installed */
    if (logLibInstalled == TRUE)
    {
        if (logTaskId == 0)
        {
            status = ERROR;
        }
        else
        {
            status = OK;
        }
    }
    else
    {
        /* Create message queue */
        logMsgQId = msgQCreate(maxMsgs, sizeof(LOG_MSG), MSG_Q_FIFO);
        if (logMsgQId == NULL)
        {
            status = ERROR;
        }
        else
        {
            /* Start log task */
            logTaskId = taskSpawn(
                            "tLogTask",
                            logTaskPriority,
                            logTaskOptions,
                            logTaskStackSize,
                            (FUNCPTR) logTask,
                            (ARG) 0,
                            (ARG) 0,
                            (ARG) 0,
                            (ARG) 0,
                            (ARG) 0,
                            (ARG) 0,
                            (ARG) 0,
                            (ARG) 0,
                            (ARG) 0,
                            (ARG) 0
                            );
            if (logTaskId == 0)
            {
                status = ERROR;
            }
            else
            {
                /* Initialize semaphore */
                semMInit(&logFdSem, mutextOptionsLogLib);

                /* File descriptor */
                logFdAdd(fd);

                /* Mark as installed */
                logLibInstalled = TRUE;
                status = OK;
            }
        }
    }

    return status;
}