int qInfo( Q_HEAD *pQHead, Q_NODE nodeArray[], int maxNodes ) { return Q_INFO(pQHead, nodeArray, maxNodes); }
int semSmInfo ( SM_SEM_ID smSemId, /* shared semaphore to summarize */ int idList[], /* array of shared tcb to be filled in */ int maxTasks /* max tasks idList can accommodate */ ) { Q_FIFO_G_HEAD pendQ; /* temporary queue to get info */ int numBlk; /* current number of blocked tasks */ int level; SM_SEM_ID volatile smSemIdv = (SM_SEM_ID volatile) smSemId; int tmp; kernelState = TRUE; /* KERNEL ENTER */ CACHE_PIPE_FLUSH (); /* CACHE FLUSH [SPR 68334] */ tmp = smSemIdv->verify; /* PCI bridge bug [SPR 68844]*/ if (SM_OBJ_VERIFY (smSemIdv) != OK) /* check semaphore */ { windExit (); /* KERNEL EXIT */ return (ERROR); } /* ENTER LOCKED SECTION */ if (SM_OBJ_LOCK_TAKE (&smSemId->lock, &level) != OK) { smObjTimeoutLogMsg ("semInfo", (char *) &smSemId->lock); return (ERROR); /* can't take lock */ } /* initialize pseudo multi-way Queue */ pendQ.pLock = NULL; /* we already have the lock */ pendQ.pFifoQ = &smSemId->smPendQ; /* address of actual queue */ pendQ.pQClass = qFifoGClassId; /* global fifo multi way Q */ numBlk = Q_INFO (&pendQ, idList, maxTasks); /* EXIT LOCKED SECTION */ SM_OBJ_LOCK_GIVE (&smSemId->lock, level); windExit (); /* KERNEL EXIT */ return (numBlk); /* return blocked task count */ }
STATUS msgQInfoGet( MSG_Q_ID msgQId, MSG_Q_INFO *pInfo ) { STATUS status; int level; Q_HEAD *pendQ; /* Lock interrupts */ INT_LOCK(level); /* Verify object class */ if (OBJ_VERIFY(msgQId, msgQClassId) != OK) { INT_UNLOCK(level); status = ERROR; } else { /* If no messages */ if (msgQId->msgQ.count == 0) { pendQ = &msgQId->msgQ.pendQ; } else { pendQ = &msgQId->freeQ.pendQ; } /* If task id list requested */ if (pInfo->taskIdList != NULL) { Q_INFO(pendQ, pInfo->taskIdList, pInfo->taskIdListMax); } /* If message list or number requested */ if ((pInfo->msgPtrList != NULL) || (pInfo->msgLengthList != NULL)) { pInfo->numMsg = 0; if (pInfo->msgListMax > 0) { Q_EACH(&msgQId->msgQ, msgQInfoEach, pInfo); } } /* Setup info structure */ pInfo->numMsg = msgQId->msgQ.count; pInfo->numTask = Q_INFO(pendQ, NULL, 0); pInfo->options = msgQId->options; pInfo->maxMsg = msgQId->maxMsg; pInfo->maxMsgLength = msgQId->maxMsgLength; pInfo->sendTimeouts = msgQId->sendTimeouts; pInfo->reciveTimeouts = msgQId->reciveTimeouts; /* Unlock interrupts */ INT_UNLOCK(level); status = OK; } return status; }