void* osl_pktget(void *drv, uint len, bool send) { END_OBJ *end; M_BLK_ID m; /* size requested should fit in our cluster buffer */ ASSERT(len < (VXCLSIZE - sizeof (CL_BUF) - PKTRSV)); /* drv is a pointer to an END_OBJ in disguise */ end = (END_OBJ*)drv; /* older chips cannot dma address buffers which cross 4Kbyte boundaries */ if ((m = netTupleGet(end->pNetPool, (len + PKTRSV), M_DONTWAIT, MT_DATA, FALSE))) { ASSERT(SAMEPAGE(m->mBlkHdr.mData, (m->mBlkHdr.mData + len - 1))); /* reserve a few bytes */ m->mBlkHdr.mData += PKTRSV; m->mBlkHdr.mLen = len; /* ensure the cookie field is cleared */ PKTSETCOOKIE(m, NULL); } return ((void*) m); }
/* Allocate a new packet. Attach a pkttag if requested * If pkttag allocation fails, pkt is not allocated. */ void* osl_pktget(osl_t *osh, unsigned int len) { /* PED: remove parameter 'send' */ END_OBJ *end = osh->endobj; M_BLK_ID m; void *pkttag = NULL; /* size requested should fit in our cluster buffer */ ASSERT(len <= PKTBUFSZ); if ((m = netTupleGet(end->pNetPool, (len + PKTRSV), M_DONTWAIT, MT_DATA, FALSE))) { /* reserve a few bytes */ m->mBlkHdr.mData += PKTRSV; m->mBlkHdr.mLen = len; /* Our QOS/WMM implementation mandates that the default * netBufLib routine is used to free the cluster */ ASSERT(m->pClBlk->pClFreeRtn == NULL); } return ((void*) m); }
LOCAL M_BLK_ID wdbEndMblkClGet ( END_OBJ * pEnd, /* endobject in which the netpool belongs */ int size /* size of the cluster */ ) { M_BLK_ID pMblk; if ((pMblk = netTupleGet (pEnd->pNetPool, size, M_DONTWAIT, MT_DATA, FALSE)) == NULL) { if (wdbEndDebug) logMsg ("wdbEndMblkClGet:Could not get mBlk...\n", 1, 2, 3, 4, 5, 6); } return (pMblk); }
int et_drvTx(int unit, UINT8 *b, int l, void *cookie) { M_BLK_ID pMblk; pMblk = netTupleGet(et_drv_txrx_info[unit].et_drvNetPoolID, l, M_DONTWAIT, MT_DATA,FALSE); if (pMblk == NULL) { et_drv_txrx_info[unit].tx_fail++; return(0); } /* cache invalidate */ /* CACHE_INVALIDATE(pMblk->m_data, l); */ pMblk->mBlkHdr.mFlags |= M_PKTHDR; pMblk->mBlkHdr.mLen = l; pMblk->mBlkPktHdr.len = l; memcpy(pMblk->m_data, b, l); return (_et_drvTx(unit, pMblk)); }
int bcmRoboTx(UINT8 *b, int l) { M_BLK_ID pMblk; pMblk = netTupleGet(robo_txrx_info.roboNetPoolID, l, M_DONTWAIT, MT_DATA,FALSE); if (pMblk == NULL) { robo_txrx_info.tx_fail++; return(0); } /* cache invalidate */ /* CACHE_INVALIDATE(pMblk->m_data, l); */ pMblk->mBlkHdr.mFlags |= M_PKTHDR; pMblk->mBlkHdr.mLen = l; pMblk->mBlkPktHdr.len = l; memcpy(pMblk->m_data, b, l); return (_roboTx(pMblk)); }