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); }
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; }
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; }
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; }
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; }