PUBLIC IX_OSAL_MBUF * ixOsalMbufFree (IX_OSAL_MBUF * bufPtr) { int lock; IX_OSAL_MBUF_POOL *poolPtr; IX_OSAL_MBUF *nextBufPtr = NULL; /* * check parameters */ if (bufPtr == NULL) { ixOsalLog (IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDOUT, "ixOsalMbufFree(): " "ERROR - Invalid Parameter\n", 0, 0, 0, 0, 0, 0); return NULL; } lock = ixOsalIrqLock (); #ifdef IX_OSAL_BUFFER_FREE_PROTECTION /* Prevention for Buffer freed more than once*/ if(!IX_OSAL_MBUF_ISSET_USED_FLAG(bufPtr)) { ixOsalIrqUnlock (lock); return NULL; } IX_OSAL_MBUF_CLEAR_USED_FLAG(bufPtr); #endif poolPtr = IX_OSAL_MBUF_NET_POOL (bufPtr); /* * check the mbuf wrapper signature (if mbuf wrapper was used) */ if (poolPtr->poolAllocType == IX_OSAL_MBUF_POOL_TYPE_SYS_ALLOC) { IX_OSAL_ENSURE ( (IX_OSAL_MBUF_GET_SYS_SIGNATURE(bufPtr) == IX_OSAL_MBUF_SYS_SIGNATURE), "ixOsalBuffPoolBufFree: ERROR - Invalid mbuf signature."); } nextBufPtr = IX_OSAL_MBUF_NEXT_BUFFER_IN_PKT_PTR (bufPtr); IX_OSAL_MBUF_NEXT_BUFFER_IN_PKT_PTR (bufPtr) = poolPtr->nextFreeBuf; poolPtr->nextFreeBuf = bufPtr; /* * update the number of free buffers in the pool */ poolPtr->freeBufsInPool++; ixOsalIrqUnlock (lock); return nextBufPtr; }
PRIVATE IX_STATUS ixAtmmRxLoPriorityLoop (void* arg, void** ptrRetObj) { unsigned dummyPtr; IX_STATUS retval; while (!ixOsalThreadStopCheck()) { /* * Sleep for the timer duration */ ixOsalSleep (IX_ATMM_RX_LO_PRIORITY_PERIOD_MSECS); /* * Service Rx low priority queue, process all in Q */ retval = ixAtmdAccRxDispatch ( IX_ATM_RX_B, IX_ATMDACC_ALLPDUS, &dummyPtr); IX_OSAL_ENSURE(retval == IX_SUCCESS, "Call to ixAtmdAccRxDispatch() failed"); } ixOsalSleep (50); return IX_SUCCESS; }
PRIVATE IX_STATUS ixAtmmTxDoneLoop (void* arg, void** retArgObj) { unsigned dummyPtr; IX_STATUS retval; while (!ixOsalThreadStopCheck()) { /* * Sleep for the timer duration */ ixOsalSleep (IX_ATMM_TX_DONE_PERIOD_MSECS); /* * Service Tx Done, process all the queue * but release the fast mutex to allow interrupts * running and service tx done when it is really needed. */ retval = ixAtmmTxDoneHandle (IX_ATMDACC_ALLPDUS, &dummyPtr); IX_OSAL_ENSURE(retval == IX_SUCCESS, "Call to ixAtmmTxDoneHandle() failed"); } ixOsalSleep (50); return IX_SUCCESS; }
PRIVATE void ixAtmmVcQueueClear (IxAtmLogicalPort port, IxAtmSchedulerVcId vcId) { IX_STATUS retval; UINT32 lockKey; lockKey = ixOsalIrqLock(); retval = ixAtmSchVcQueueClear (port, vcId); ixOsalIrqUnlock (lockKey); IX_OSAL_ENSURE(retval == IX_SUCCESS, "Call to ixAtmSchVcQueueClear() failed"); }