Exemple #1
0
/*
 * RQ buffer constructor function
 *
 * rqbd - pointer to rq buffer descriptor
 * rq - pointer to RQ structure
 * size - size of the buffer
 * flags - KM_SLEEP OR KM_NOSLEEP
 *
 * return DDI_SUCCESS => success, DDI_FAILURE otherwise
 */
static int
oce_rqb_ctor(oce_rq_bdesc_t *rqbd, struct oce_rq *rq, size_t size, int flags)
{
	struct oce_dev *dev;
	oce_dma_buf_t *dbuf;

	dev = rq->parent;

	dbuf  = oce_alloc_dma_buffer(dev, size, &oce_rx_buf_attr, flags);
	if (dbuf == NULL) {
		return (DDI_FAILURE);
	}

	/* Set the call back function parameters */
	rqbd->fr_rtn.free_func = (void (*)())oce_rx_pool_free;
	rqbd->fr_rtn.free_arg = (caddr_t)(void *)rqbd;
	rqbd->mp = desballoc((uchar_t *)(dbuf->base),
	    dbuf->size, 0, &rqbd->fr_rtn);
	if (rqbd->mp == NULL) {
		oce_free_dma_buffer(dev, dbuf);
		return (DDI_FAILURE);
	}
	rqbd->rqb = dbuf;
	rqbd->rq = rq;
	rqbd->frag_addr.dw.addr_lo = ADDR_LO(dbuf->addr + OCE_RQE_BUF_HEADROOM);
	rqbd->frag_addr.dw.addr_hi = ADDR_HI(dbuf->addr + OCE_RQE_BUF_HEADROOM);
	rqbd->mp->b_rptr = (uchar_t *)rqbd->rqb->base + OCE_RQE_BUF_HEADROOM;

	return (DDI_SUCCESS);
} /* oce_rqb_ctor */
Exemple #2
0
void
oce_hw_fini(struct oce_dev *dev)
{
	if (dev->bmbx != NULL) {
		oce_free_dma_buffer(dev, dev->bmbx);
		dev->bmbx = NULL;
	}
}
Exemple #3
0
/*
 * function to undo initialization done in oce_stat_init
 *
 * dev - software handle to the device
 *
 * return none
 */
void
oce_stat_fini(struct oce_dev *dev)
{
	oce_free_dma_buffer(dev, dev->stats_dbuf);
	dev->hw_stats = NULL;
	dev->stats_dbuf = NULL;
	kstat_delete(dev->oce_kstats);
	dev->oce_kstats = NULL;
} /* oce_stat_fini */
Exemple #4
0
/*
 * RQ buffer destructor function
 *
 * rqbd - pointer to rq buffer descriptor
 *
 * return none
 */
static	void
oce_rqb_dtor(oce_rq_bdesc_t *rqbd)
{
	if ((rqbd == NULL) || (rqbd->rq == NULL)) {
		return;
	}
	if (rqbd->mp != NULL) {
		rqbd->fr_rtn.free_arg = NULL;
		freemsg(rqbd->mp);
		rqbd->mp = NULL;
	}
	oce_free_dma_buffer(rqbd->rq->parent, rqbd->rqb);
} /* oce_rqb_dtor */
Exemple #5
0
/*
 * function to destroy a ring buffer
 *
 * dev - software handle to teh device
 * ring - the ring buffer to delete
 *
 * return none
 */
void
destroy_ring_buffer(struct oce_dev *dev, oce_ring_buffer_t *ring)
{
	ASSERT(dev != NULL);
	ASSERT(ring !=  NULL);

	/* free the dbuf associated with the ring */
	oce_free_dma_buffer(dev, ring->dbuf);
	ring->dbuf = NULL;

	/* free the ring itself */
	kmem_free(ring, sizeof (oce_ring_buffer_t));
} /* destroy_ring_buffer */
Exemple #6
0
/*
 * WQ buffer destructor
 *
 * wq - pointer to WQ structure
 * wqbd - pointer to WQ buffer descriptor
 *
 * return none
 */
static void
oce_wqb_dtor(struct oce_wq *wq, oce_wq_bdesc_t *wqbd)
{
	oce_free_dma_buffer(wq->parent, wqbd->wqb);
}