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); }
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; }