Example #1
0
int
oce_start_group(oce_group_t *grp, boolean_t alloc_buffer)
{
	struct oce_dev *dev = grp->parent;
	int qidx;
	int max_frame_sz;

	max_frame_sz = dev->mtu + sizeof (struct ether_vlan_header) + VTAG_SIZE;
	/* allocate Rx buffers */
	if (alloc_buffer && !(grp->state & GROUP_INIT)) {
		for (qidx = 0; qidx < grp->num_rings; qidx++) {
			if (oce_rq_init(dev, grp->ring[qidx].rx,
			    dev->rx_ring_size, dev->rq_frag_size,
			    max_frame_sz) != DDI_SUCCESS) {
				goto group_fail;
			}
		}
		grp->state |= GROUP_INIT;
	}

	if (grp->state & GROUP_MAC_STARTED) {

		if (oce_create_group(dev, grp, MBX_ASYNC_MQ) != DDI_SUCCESS) {
			goto group_fail;
		}
		oce_log(dev, CE_NOTE, MOD_CONFIG,
		    "group %d started", grp->grp_num);
	}
	return (DDI_SUCCESS);

group_fail:
	oce_log(dev, CE_WARN, MOD_CONFIG,
	    "Failed to setup group %x", grp->grp_num);
	return (DDI_FAILURE);
}
Example #2
0
	for_all_rq_queues(sc, rq, i) {
		sc->rq[i] = oce_rq_init(sc, sc->rx_ring_size, sc->rq_frag_size,
					OCE_MAX_JUMBO_FRAME_SIZE,
					(i == 0) ? 0 : sc->rss_enable);
		if (!sc->rq[i]) 
			goto error;
	}