PRIVATE void 
ixEthAccCodeletLoopbackTxCB(UINT32 cbTag, 
			    IX_OSAL_MBUF* mBufPtr)
{
    /* Put the mbuf back in the rx free pool */
    if(cbTag < IX_ETHACC_CODELET_MAX_PORT)
    {
	ixEthAccCodeletStats[cbTag].txCount++;

	/* reset the frame length to the length at pool setup */
	ixEthAccCodeletMbufChainSizeSet(mBufPtr);

	if(ixEthAccPortRxFreeReplenish(cbTag, mBufPtr) != IX_SUCCESS)
	{
	    ixOsalLog(IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDOUT,
		      "Error replenishing RX free queue on port %d\n", 
		      cbTag, 0, 0, 0, 0, 0);
	}    
    }
    else
    {
	ixOsalLog(IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDOUT,
		  "Invalid Tx callback tag %d in RxSink Operation\n", 
		  cbTag, 0, 0, 0, 0, 0);
    }
}
PRIVATE void ixEthAccCodeletSwBridgeQoSTxCB(UINT32 cbTag, IX_OSAL_MBUF* mBufPtr)
{
    IxEthAccPortId thisPortId = (IxEthAccPortId)(cbTag & 0xffff);
    IxEthAccPortId otherPortId = (IxEthAccPortId)(cbTag>>16);

    /* 
     * Put the mbuf on the rx freeQ of the other port since it was
     * received there initially.
     */
    ixEthAccCodeletStats[thisPortId].txCount++;

    /* one tx that was pending is now complete */
    pendingTx[thisPortId]--;
    
    /* reset the frame length */
    ixEthAccCodeletMbufChainSizeSet(mBufPtr);

    /* replenish the other port */
    if(ixEthAccPortRxFreeReplenish(otherPortId, 
				   mBufPtr)
       !=IX_SUCCESS)
    {
	ixOsalLog(IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDOUT,
		  "SwBridgeQos: Error replenishing RX free q for port %u\n", 
		  (UINT32)(1 - cbTag), 0, 0, 0, 0, 0);
    }
}
/**
 * @fn void ixEthAccCodeletRxSinkRxCB()
 * 
 * Recieve callback for Rx sink
 * 
 * @return void
 */
PRIVATE void 
ixEthAccCodeletRxSinkRxCB(UINT32 cbTag, IX_OSAL_MBUF** mBufPtr)
{
    while (NULL != *mBufPtr)
    {
	ixEthAccCodeletStats[cbTag].rxCount++;
	
#ifdef IX_ETHACC_CODELET_TXGENRXSINK_VERIFY
	IX_ETHACC_CODELET_DATA_VERIFY(IX_OSAL_MBUF_MDATA(*mBufPtr), compData);
	
	/* After reading the payload, invalidate it before replenish */
	IX_OSAL_CACHE_INVALIDATE(IX_OSAL_MBUF_MDATA(*mBufPtr), 
				 IX_OSAL_MBUF_MLEN(*mBufPtr));
#endif
	
	ixEthAccCodeletMbufChainSizeSet(*mBufPtr);

	/* Return mBuf to free queue on same port */
	if(ixEthAccPortRxFreeReplenish(cbTag, *mBufPtr) != IX_SUCCESS)
	{
	    ixOsalLog(IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDOUT,
		      "Error replenishing RX free q in TxGen-RxSink\n", 
		      0, 0, 0, 0, 0, 0);
	}
	/* move to next buffer received */
	mBufPtr++;
    }
}
void ixEthAccCodeletBridgeTxCB(UINT32 cbTag, IX_OSAL_MBUF* mBufPtr)
{
    IxEthAccPortId thisPortId = (IxEthAccPortId)(cbTag & 0xffff);
    IxEthAccPortId otherPortId = (IxEthAccPortId)(cbTag>>16);

    /* 
     * Put the mbuf on the Rx free q of the other port since it was
     * received there initially.
     */
    ixEthAccCodeletStats[thisPortId].txCount++;

    ixEthAccCodeletMbufChainSizeSet(mBufPtr);

    if(ixEthAccPortRxFreeReplenish(otherPortId, mBufPtr)!=IX_SUCCESS)
    {
	    ixOsalLog(IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDOUT,
		      "Error replenishing RX free q for port %d\n", 
		      cbTag, 0, 0, 0, 0, 0);
    }    
}