Exemple #1
0
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);
}				  
Exemple #2
0
/* 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);
}
Exemple #3
0
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);
    }
Exemple #4
0
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));
}
Exemple #5
0
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));
}