Lines Matching refs:ss

1177 	struct mxge_slice_state *ss;  in mxge_reset()  local
1237 rx_done = &sc->ss[slice].rx_done; in mxge_reset()
1270 ss = &sc->ss[slice]; in mxge_reset()
1272 ss->irq_claim = irq_claim + (2 * slice); in mxge_reset()
1274 ss->rx_done.idx = 0; in mxge_reset()
1275 ss->rx_done.cnt = 0; in mxge_reset()
1276 ss->tx.req = 0; in mxge_reset()
1277 ss->tx.done = 0; in mxge_reset()
1278 ss->tx.pkt_done = 0; in mxge_reset()
1279 ss->tx.queue_active = 0; in mxge_reset()
1280 ss->tx.activate = 0; in mxge_reset()
1281 ss->tx.deactivate = 0; in mxge_reset()
1282 ss->tx.wake = 0; in mxge_reset()
1283 ss->tx.defrag = 0; in mxge_reset()
1284 ss->tx.stall = 0; in mxge_reset()
1285 ss->rx_big.cnt = 0; in mxge_reset()
1286 ss->rx_small.cnt = 0; in mxge_reset()
1287 ss->lc.lro_bad_csum = 0; in mxge_reset()
1288 ss->lc.lro_queued = 0; in mxge_reset()
1289 ss->lc.lro_flushed = 0; in mxge_reset()
1290 if (ss->fw_stats != NULL) { in mxge_reset()
1291 bzero(ss->fw_stats, sizeof *ss->fw_stats); in mxge_reset()
1406 struct mxge_slice_state *ss; in mxge_rem_sysctls() local
1413 ss = &sc->ss[slice]; in mxge_rem_sysctls()
1414 if (ss == NULL || ss->sysctl_tree == NULL) in mxge_rem_sysctls()
1416 sysctl_ctx_free(&ss->sysctl_ctx); in mxge_rem_sysctls()
1417 ss->sysctl_tree = NULL; in mxge_rem_sysctls()
1429 struct mxge_slice_state *ss; in mxge_add_sysctls() local
1435 fw = sc->ss[0].fw_stats; in mxge_add_sysctls()
1572 ss = &sc->ss[slice]; in mxge_add_sysctls()
1573 sysctl_ctx_init(&ss->sysctl_ctx); in mxge_add_sysctls()
1574 ctx = &ss->sysctl_ctx; in mxge_add_sysctls()
1577 ss->sysctl_tree = in mxge_add_sysctls()
1580 children = SYSCTL_CHILDREN(ss->sysctl_tree); in mxge_add_sysctls()
1583 CTLFLAG_RD, &ss->rx_small.cnt, in mxge_add_sysctls()
1587 CTLFLAG_RD, &ss->rx_big.cnt, in mxge_add_sysctls()
1590 "lro_flushed", CTLFLAG_RD, &ss->lc.lro_flushed, in mxge_add_sysctls()
1594 "lro_bad_csum", CTLFLAG_RD, &ss->lc.lro_bad_csum, in mxge_add_sysctls()
1598 "lro_queued", CTLFLAG_RD, &ss->lc.lro_queued, in mxge_add_sysctls()
1604 CTLFLAG_RD, &ss->tx.req, in mxge_add_sysctls()
1609 CTLFLAG_RD, &ss->tx.done, in mxge_add_sysctls()
1613 CTLFLAG_RD, &ss->tx.pkt_done, in mxge_add_sysctls()
1617 CTLFLAG_RD, &ss->tx.stall, in mxge_add_sysctls()
1621 CTLFLAG_RD, &ss->tx.wake, in mxge_add_sysctls()
1625 CTLFLAG_RD, &ss->tx.defrag, in mxge_add_sysctls()
1629 CTLFLAG_RD, &ss->tx.queue_active, in mxge_add_sysctls()
1633 CTLFLAG_RD, &ss->tx.activate, in mxge_add_sysctls()
1637 CTLFLAG_RD, &ss->tx.deactivate, in mxge_add_sysctls()
1717 mxge_parse_tx(struct mxge_slice_state *ss, struct mbuf *m, in mxge_parse_tx() argument
1746 ss->scratch); in mxge_parse_tx()
1747 pi->ip = (struct ip *)(ss->scratch + pi->ip_off); in mxge_parse_tx()
1756 sizeof(struct tcphdr), ss->scratch); in mxge_parse_tx()
1757 pi->ip = (struct ip *)(ss->scratch + pi->ip_off); in mxge_parse_tx()
1766 ss->scratch); in mxge_parse_tx()
1767 pi->ip6 = (struct ip6_hdr *)(ss->scratch + pi->ip_off); in mxge_parse_tx()
1778 if (pi->ip_off + pi->ip_hlen > ss->sc->max_tso6_hlen) in mxge_parse_tx()
1784 sizeof(struct tcphdr), ss->scratch); in mxge_parse_tx()
1785 pi->ip6 = (struct ip6_hdr *)(ss->scratch + pi->ip_off); in mxge_parse_tx()
1799 mxge_encap_tso(struct mxge_slice_state *ss, struct mbuf *m, in mxge_encap_tso() argument
1864 tx = &ss->tx; in mxge_encap_tso()
1957 if ((ss->sc->num_slices > 1) && tx->queue_active == 0) { in mxge_encap_tso()
1970 ss->oerrors++; in mxge_encap_tso()
2018 mxge_encap(struct mxge_slice_state *ss, struct mbuf *m) in mxge_encap() argument
2030 sc = ss->sc; in mxge_encap()
2031 tx = &ss->tx; in mxge_encap()
2042 if (mxge_parse_tx(ss, m, &pi)) in mxge_encap()
2058 ss->tx.defrag++; in mxge_encap()
2077 mxge_encap_tso(ss, m, cnt, &pi); in mxge_encap()
2163 if ((ss->sc->num_slices > 1) && tx->queue_active == 0) { in mxge_encap()
2176 ss->oerrors++; in mxge_encap()
2189 tx = &sc->ss[slice].tx; in mxge_qflush()
2199 mxge_start_locked(struct mxge_slice_state *ss) in mxge_start_locked() argument
2206 sc = ss->sc; in mxge_start_locked()
2208 tx = &ss->tx; in mxge_start_locked()
2219 mxge_encap(ss, m); in mxge_start_locked()
2222 if (((ss->if_drv_flags & IFF_DRV_OACTIVE) == 0) in mxge_start_locked()
2224 ss->if_drv_flags |= IFF_DRV_OACTIVE; in mxge_start_locked()
2230 mxge_transmit_locked(struct mxge_slice_state *ss, struct mbuf *m) in mxge_transmit_locked() argument
2237 sc = ss->sc; in mxge_transmit_locked()
2239 tx = &ss->tx; in mxge_transmit_locked()
2241 if ((ss->if_drv_flags & (IFF_DRV_RUNNING|IFF_DRV_OACTIVE)) != in mxge_transmit_locked()
2252 mxge_encap(ss, m); in mxge_transmit_locked()
2257 mxge_start_locked(ss); in mxge_transmit_locked()
2265 struct mxge_slice_state *ss; in mxge_transmit() local
2273 ss = &sc->ss[slice]; in mxge_transmit()
2274 tx = &ss->tx; in mxge_transmit()
2277 err = mxge_transmit_locked(ss, m); in mxge_transmit()
2290 struct mxge_slice_state *ss; in mxge_start() local
2293 ss = &sc->ss[0]; in mxge_start()
2294 mtx_lock(&ss->tx.mtx); in mxge_start()
2295 mxge_start_locked(ss); in mxge_start()
2296 mtx_unlock(&ss->tx.mtx); in mxge_start()
2324 mxge_get_buf_small(struct mxge_slice_state *ss, bus_dmamap_t map, int idx) in mxge_get_buf_small() argument
2328 mxge_rx_ring_t *rx = &ss->rx_small; in mxge_get_buf_small()
2357 mxge_get_buf_big(struct mxge_slice_state *ss, bus_dmamap_t map, int idx) in mxge_get_buf_big() argument
2361 mxge_rx_ring_t *rx = &ss->rx_big; in mxge_get_buf_big()
2554 mxge_rx_done_big(struct mxge_slice_state *ss, uint32_t len, in mxge_rx_done_big() argument
2565 sc = ss->sc; in mxge_rx_done_big()
2567 rx = &ss->rx_big; in mxge_rx_done_big()
2573 if (mxge_get_buf_big(ss, rx->extra_map, idx)) { in mxge_rx_done_big()
2594 ss->ipackets++; in mxge_rx_done_big()
2601 m->m_pkthdr.flowid = (ss - sc->ss); in mxge_rx_done_big()
2613 if (lro && (0 == tcp_lro_rx(&ss->lc, m, 0))) in mxge_rx_done_big()
2622 mxge_rx_done_small(struct mxge_slice_state *ss, uint32_t len, in mxge_rx_done_small() argument
2633 sc = ss->sc; in mxge_rx_done_small()
2635 rx = &ss->rx_small; in mxge_rx_done_small()
2641 if (mxge_get_buf_small(ss, rx->extra_map, idx)) { in mxge_rx_done_small()
2662 ss->ipackets++; in mxge_rx_done_small()
2669 m->m_pkthdr.flowid = (ss - sc->ss); in mxge_rx_done_small()
2681 if (lro && (0 == tcp_lro_rx(&ss->lc, m, csum))) in mxge_rx_done_small()
2690 mxge_clean_rx_done(struct mxge_slice_state *ss) in mxge_clean_rx_done() argument
2692 mxge_rx_done_t *rx_done = &ss->rx_done; in mxge_clean_rx_done()
2698 lro = if_getcapenable(ss->sc->ifp) & IFCAP_LRO; in mxge_clean_rx_done()
2704 mxge_rx_done_small(ss, length, checksum, lro); in mxge_clean_rx_done()
2706 mxge_rx_done_big(ss, length, checksum, lro); in mxge_clean_rx_done()
2715 tcp_lro_flush_all(&ss->lc); in mxge_clean_rx_done()
2720 mxge_tx_done(struct mxge_slice_state *ss, uint32_t mcp_idx) in mxge_tx_done() argument
2729 tx = &ss->tx; in mxge_tx_done()
2730 ifp = ss->sc->ifp; in mxge_tx_done()
2738 ss->obytes += m->m_pkthdr.len; in mxge_tx_done()
2740 ss->omcasts++; in mxge_tx_done()
2741 ss->opackets++; in mxge_tx_done()
2755 flags = &ss->if_drv_flags; in mxge_tx_done()
2756 mtx_lock(&ss->tx.mtx); in mxge_tx_done()
2760 ss->tx.wake++; in mxge_tx_done()
2761 mxge_start_locked(ss); in mxge_tx_done()
2763 if ((ss->sc->num_slices > 1) && (tx->req == tx->done)) { in mxge_tx_done()
2773 mtx_unlock(&ss->tx.mtx); in mxge_tx_done()
2965 struct mxge_slice_state *ss = arg; in mxge_intr() local
2966 mxge_softc_t *sc = ss->sc; in mxge_intr()
2967 mcp_irq_data_t *stats = ss->fw_stats; in mxge_intr()
2968 mxge_tx_ring_t *tx = &ss->tx; in mxge_intr()
2969 mxge_rx_done_t *rx_done = &ss->rx_done; in mxge_intr()
2996 mxge_tx_done(ss, (int)send_done_count); in mxge_intr()
2997 mxge_clean_rx_done(ss); in mxge_intr()
3005 if (__predict_false((ss == sc->ss) && stats->stats_updated)) { in mxge_intr()
3036 *ss->irq_claim = be32toh(3); in mxge_intr()
3037 *(ss->irq_claim + 1) = be32toh(3); in mxge_intr()
3053 mxge_free_slice_mbufs(struct mxge_slice_state *ss) in mxge_free_slice_mbufs() argument
3058 tcp_lro_free(&ss->lc); in mxge_free_slice_mbufs()
3060 for (i = 0; i <= ss->rx_big.mask; i++) { in mxge_free_slice_mbufs()
3061 if (ss->rx_big.info[i].m == NULL) in mxge_free_slice_mbufs()
3063 bus_dmamap_unload(ss->rx_big.dmat, in mxge_free_slice_mbufs()
3064 ss->rx_big.info[i].map); in mxge_free_slice_mbufs()
3065 m_freem(ss->rx_big.info[i].m); in mxge_free_slice_mbufs()
3066 ss->rx_big.info[i].m = NULL; in mxge_free_slice_mbufs()
3069 for (i = 0; i <= ss->rx_small.mask; i++) { in mxge_free_slice_mbufs()
3070 if (ss->rx_small.info[i].m == NULL) in mxge_free_slice_mbufs()
3072 bus_dmamap_unload(ss->rx_small.dmat, in mxge_free_slice_mbufs()
3073 ss->rx_small.info[i].map); in mxge_free_slice_mbufs()
3074 m_freem(ss->rx_small.info[i].m); in mxge_free_slice_mbufs()
3075 ss->rx_small.info[i].m = NULL; in mxge_free_slice_mbufs()
3079 if (ss->tx.info == NULL) in mxge_free_slice_mbufs()
3082 for (i = 0; i <= ss->tx.mask; i++) { in mxge_free_slice_mbufs()
3083 ss->tx.info[i].flag = 0; in mxge_free_slice_mbufs()
3084 if (ss->tx.info[i].m == NULL) in mxge_free_slice_mbufs()
3086 bus_dmamap_unload(ss->tx.dmat, in mxge_free_slice_mbufs()
3087 ss->tx.info[i].map); in mxge_free_slice_mbufs()
3088 m_freem(ss->tx.info[i].m); in mxge_free_slice_mbufs()
3089 ss->tx.info[i].m = NULL; in mxge_free_slice_mbufs()
3099 mxge_free_slice_mbufs(&sc->ss[slice]); in mxge_free_mbufs()
3103 mxge_free_slice_rings(struct mxge_slice_state *ss) in mxge_free_slice_rings() argument
3107 if (ss->rx_done.entry != NULL) in mxge_free_slice_rings()
3108 mxge_dma_free(&ss->rx_done.dma); in mxge_free_slice_rings()
3109 ss->rx_done.entry = NULL; in mxge_free_slice_rings()
3111 if (ss->tx.req_bytes != NULL) in mxge_free_slice_rings()
3112 free(ss->tx.req_bytes, M_DEVBUF); in mxge_free_slice_rings()
3113 ss->tx.req_bytes = NULL; in mxge_free_slice_rings()
3115 if (ss->tx.seg_list != NULL) in mxge_free_slice_rings()
3116 free(ss->tx.seg_list, M_DEVBUF); in mxge_free_slice_rings()
3117 ss->tx.seg_list = NULL; in mxge_free_slice_rings()
3119 if (ss->rx_small.shadow != NULL) in mxge_free_slice_rings()
3120 free(ss->rx_small.shadow, M_DEVBUF); in mxge_free_slice_rings()
3121 ss->rx_small.shadow = NULL; in mxge_free_slice_rings()
3123 if (ss->rx_big.shadow != NULL) in mxge_free_slice_rings()
3124 free(ss->rx_big.shadow, M_DEVBUF); in mxge_free_slice_rings()
3125 ss->rx_big.shadow = NULL; in mxge_free_slice_rings()
3127 if (ss->tx.info != NULL) { in mxge_free_slice_rings()
3128 if (ss->tx.dmat != NULL) { in mxge_free_slice_rings()
3129 for (i = 0; i <= ss->tx.mask; i++) { in mxge_free_slice_rings()
3130 bus_dmamap_destroy(ss->tx.dmat, in mxge_free_slice_rings()
3131 ss->tx.info[i].map); in mxge_free_slice_rings()
3133 bus_dma_tag_destroy(ss->tx.dmat); in mxge_free_slice_rings()
3135 free(ss->tx.info, M_DEVBUF); in mxge_free_slice_rings()
3137 ss->tx.info = NULL; in mxge_free_slice_rings()
3139 if (ss->rx_small.info != NULL) { in mxge_free_slice_rings()
3140 if (ss->rx_small.dmat != NULL) { in mxge_free_slice_rings()
3141 for (i = 0; i <= ss->rx_small.mask; i++) { in mxge_free_slice_rings()
3142 bus_dmamap_destroy(ss->rx_small.dmat, in mxge_free_slice_rings()
3143 ss->rx_small.info[i].map); in mxge_free_slice_rings()
3145 bus_dmamap_destroy(ss->rx_small.dmat, in mxge_free_slice_rings()
3146 ss->rx_small.extra_map); in mxge_free_slice_rings()
3147 bus_dma_tag_destroy(ss->rx_small.dmat); in mxge_free_slice_rings()
3149 free(ss->rx_small.info, M_DEVBUF); in mxge_free_slice_rings()
3151 ss->rx_small.info = NULL; in mxge_free_slice_rings()
3153 if (ss->rx_big.info != NULL) { in mxge_free_slice_rings()
3154 if (ss->rx_big.dmat != NULL) { in mxge_free_slice_rings()
3155 for (i = 0; i <= ss->rx_big.mask; i++) { in mxge_free_slice_rings()
3156 bus_dmamap_destroy(ss->rx_big.dmat, in mxge_free_slice_rings()
3157 ss->rx_big.info[i].map); in mxge_free_slice_rings()
3159 bus_dmamap_destroy(ss->rx_big.dmat, in mxge_free_slice_rings()
3160 ss->rx_big.extra_map); in mxge_free_slice_rings()
3161 bus_dma_tag_destroy(ss->rx_big.dmat); in mxge_free_slice_rings()
3163 free(ss->rx_big.info, M_DEVBUF); in mxge_free_slice_rings()
3165 ss->rx_big.info = NULL; in mxge_free_slice_rings()
3174 mxge_free_slice_rings(&sc->ss[slice]); in mxge_free_rings()
3178 mxge_alloc_slice_rings(struct mxge_slice_state *ss, int rx_ring_entries, in mxge_alloc_slice_rings() argument
3181 mxge_softc_t *sc = ss->sc; in mxge_alloc_slice_rings()
3187 ss->rx_small.mask = ss->rx_big.mask = rx_ring_entries - 1; in mxge_alloc_slice_rings()
3188 ss->rx_done.mask = (2 * rx_ring_entries) - 1; in mxge_alloc_slice_rings()
3191 bytes = rx_ring_entries * sizeof (*ss->rx_small.shadow); in mxge_alloc_slice_rings()
3192 ss->rx_small.shadow = malloc(bytes, M_DEVBUF, M_ZERO|M_WAITOK); in mxge_alloc_slice_rings()
3194 bytes = rx_ring_entries * sizeof (*ss->rx_big.shadow); in mxge_alloc_slice_rings()
3195 ss->rx_big.shadow = malloc(bytes, M_DEVBUF, M_ZERO|M_WAITOK); in mxge_alloc_slice_rings()
3198 bytes = rx_ring_entries * sizeof (*ss->rx_small.info); in mxge_alloc_slice_rings()
3199 ss->rx_small.info = malloc(bytes, M_DEVBUF, M_ZERO|M_WAITOK); in mxge_alloc_slice_rings()
3201 bytes = rx_ring_entries * sizeof (*ss->rx_big.info); in mxge_alloc_slice_rings()
3202 ss->rx_big.info = malloc(bytes, M_DEVBUF, M_ZERO|M_WAITOK); in mxge_alloc_slice_rings()
3216 &ss->rx_small.dmat); /* tag */ in mxge_alloc_slice_rings()
3234 &ss->rx_big.dmat); /* tag */ in mxge_alloc_slice_rings()
3240 for (i = 0; i <= ss->rx_small.mask; i++) { in mxge_alloc_slice_rings()
3241 err = bus_dmamap_create(ss->rx_small.dmat, 0, in mxge_alloc_slice_rings()
3242 &ss->rx_small.info[i].map); in mxge_alloc_slice_rings()
3249 err = bus_dmamap_create(ss->rx_small.dmat, 0, in mxge_alloc_slice_rings()
3250 &ss->rx_small.extra_map); in mxge_alloc_slice_rings()
3257 for (i = 0; i <= ss->rx_big.mask; i++) { in mxge_alloc_slice_rings()
3258 err = bus_dmamap_create(ss->rx_big.dmat, 0, in mxge_alloc_slice_rings()
3259 &ss->rx_big.info[i].map); in mxge_alloc_slice_rings()
3266 err = bus_dmamap_create(ss->rx_big.dmat, 0, in mxge_alloc_slice_rings()
3267 &ss->rx_big.extra_map); in mxge_alloc_slice_rings()
3276 ss->tx.mask = tx_ring_entries - 1; in mxge_alloc_slice_rings()
3277 ss->tx.max_desc = MIN(MXGE_MAX_SEND_DESC, tx_ring_entries / 4); in mxge_alloc_slice_rings()
3281 sizeof (*ss->tx.req_list) * (ss->tx.max_desc + 4); in mxge_alloc_slice_rings()
3282 ss->tx.req_bytes = malloc(bytes, M_DEVBUF, M_WAITOK); in mxge_alloc_slice_rings()
3284 ss->tx.req_list = (mcp_kreq_ether_send_t *) in mxge_alloc_slice_rings()
3285 ((uintptr_t)(ss->tx.req_bytes + 7) & ~7UL); in mxge_alloc_slice_rings()
3288 bytes = sizeof (*ss->tx.seg_list) * ss->tx.max_desc; in mxge_alloc_slice_rings()
3289 ss->tx.seg_list = (bus_dma_segment_t *) in mxge_alloc_slice_rings()
3293 bytes = tx_ring_entries * sizeof (*ss->tx.info); in mxge_alloc_slice_rings()
3294 ss->tx.info = malloc(bytes, M_DEVBUF, M_ZERO|M_WAITOK); in mxge_alloc_slice_rings()
3304 ss->tx.max_desc - 2, /* num segs */ in mxge_alloc_slice_rings()
3308 &ss->tx.dmat); /* tag */ in mxge_alloc_slice_rings()
3318 for (i = 0; i <= ss->tx.mask; i++) { in mxge_alloc_slice_rings()
3319 err = bus_dmamap_create(ss->tx.dmat, 0, in mxge_alloc_slice_rings()
3320 &ss->tx.info[i].map); in mxge_alloc_slice_rings()
3353 err = mxge_alloc_slice_rings(&sc->ss[slice], in mxge_alloc_rings()
3393 mxge_slice_open(struct mxge_slice_state *ss, int nbufs, int cl_size) in mxge_slice_open() argument
3400 sc = ss->sc; in mxge_slice_open()
3401 slice = ss - sc->ss; in mxge_slice_open()
3404 (void)tcp_lro_init(&ss->lc); in mxge_slice_open()
3406 ss->lc.ifp = sc->ifp; in mxge_slice_open()
3414 ss->tx.lanai = in mxge_slice_open()
3416 ss->tx.send_go = (volatile uint32_t *) in mxge_slice_open()
3418 ss->tx.send_stop = (volatile uint32_t *) in mxge_slice_open()
3424 ss->rx_small.lanai = in mxge_slice_open()
3428 ss->rx_big.lanai = in mxge_slice_open()
3438 for (i = 0; i <= ss->rx_small.mask; i++) { in mxge_slice_open()
3439 map = ss->rx_small.info[i].map; in mxge_slice_open()
3440 err = mxge_get_buf_small(ss, map, i); in mxge_slice_open()
3443 i, ss->rx_small.mask + 1); in mxge_slice_open()
3447 for (i = 0; i <= ss->rx_big.mask; i++) { in mxge_slice_open()
3448 ss->rx_big.shadow[i].addr_low = 0xffffffff; in mxge_slice_open()
3449 ss->rx_big.shadow[i].addr_high = 0xffffffff; in mxge_slice_open()
3451 ss->rx_big.nbufs = nbufs; in mxge_slice_open()
3452 ss->rx_big.cl_size = cl_size; in mxge_slice_open()
3453 ss->rx_big.mlen = if_getmtu(ss->sc->ifp) + ETHER_HDR_LEN + in mxge_slice_open()
3455 for (i = 0; i <= ss->rx_big.mask; i += ss->rx_big.nbufs) { in mxge_slice_open()
3456 map = ss->rx_big.info[i].map; in mxge_slice_open()
3457 err = mxge_get_buf_big(ss, map, i); in mxge_slice_open()
3460 i, ss->rx_big.mask + 1); in mxge_slice_open()
3474 struct mxge_slice_state *ss; in mxge_open() local
3544 ss = &sc->ss[slice]; in mxge_open()
3546 MXGE_LOWPART_TO_U32(ss->fw_stats_dma.bus_addr); in mxge_open()
3548 MXGE_HIGHPART_TO_U32(ss->fw_stats_dma.bus_addr); in mxge_open()
3555 bus = sc->ss->fw_stats_dma.bus_addr; in mxge_open()
3574 err = mxge_slice_open(&sc->ss[slice], nbufs, cl_size); in mxge_open()
3589 ss = &sc->ss[slice]; in mxge_open()
3590 ss->if_drv_flags |= IFF_DRV_RUNNING; in mxge_open()
3591 ss->if_drv_flags &= ~IFF_DRV_OACTIVE; in mxge_open()
3609 struct mxge_slice_state *ss; in mxge_close() local
3613 ss = &sc->ss[slice]; in mxge_close()
3614 ss->if_drv_flags &= ~IFF_DRV_RUNNING; in mxge_close()
3689 struct mxge_slice_state *ss; in mxge_watchdog_reset() local
3741 ss = &sc->ss[s]; in mxge_watchdog_reset()
3742 mtx_lock(&ss->tx.mtx); in mxge_watchdog_reset()
3764 ss = &sc->ss[s]; in mxge_watchdog_reset()
3765 mxge_start_locked(ss); in mxge_watchdog_reset()
3766 mtx_unlock(&ss->tx.mtx); in mxge_watchdog_reset()
3797 tx = &sc->ss[slice].tx; in mxge_warn_stuck()
3806 be32toh(sc->ss->fw_stats->send_done_count)); in mxge_warn_stuck()
3813 uint32_t rx_pause = be32toh(sc->ss->fw_stats->dropped_pause); in mxge_watchdog()
3819 tx = &sc->ss[i].tx; in mxge_watchdog()
3856 rv += sc->ss[s].ipackets; in mxge_get_counter()
3860 rv += sc->ss[s].opackets; in mxge_get_counter()
3864 rv += sc->ss[s].oerrors; in mxge_get_counter()
3868 rv += sc->ss[s].obytes; in mxge_get_counter()
3872 rv += sc->ss[s].omcasts; in mxge_get_counter()
3876 rv += sc->ss[s].tx.br->br_drops; in mxge_get_counter()
4221 struct mxge_slice_state *ss; in mxge_free_slices() local
4224 if (sc->ss == NULL) in mxge_free_slices()
4228 ss = &sc->ss[i]; in mxge_free_slices()
4229 if (ss->fw_stats != NULL) { in mxge_free_slices()
4230 mxge_dma_free(&ss->fw_stats_dma); in mxge_free_slices()
4231 ss->fw_stats = NULL; in mxge_free_slices()
4232 if (ss->tx.br != NULL) { in mxge_free_slices()
4233 drbr_free(ss->tx.br, M_DEVBUF); in mxge_free_slices()
4234 ss->tx.br = NULL; in mxge_free_slices()
4236 mtx_destroy(&ss->tx.mtx); in mxge_free_slices()
4238 if (ss->rx_done.entry != NULL) { in mxge_free_slices()
4239 mxge_dma_free(&ss->rx_done.dma); in mxge_free_slices()
4240 ss->rx_done.entry = NULL; in mxge_free_slices()
4243 free(sc->ss, M_DEVBUF); in mxge_free_slices()
4244 sc->ss = NULL; in mxge_free_slices()
4251 struct mxge_slice_state *ss; in mxge_alloc_slices() local
4263 bytes = sizeof (*sc->ss) * sc->num_slices; in mxge_alloc_slices()
4264 sc->ss = malloc(bytes, M_DEVBUF, M_NOWAIT | M_ZERO); in mxge_alloc_slices()
4265 if (sc->ss == NULL) in mxge_alloc_slices()
4268 ss = &sc->ss[i]; in mxge_alloc_slices()
4270 ss->sc = sc; in mxge_alloc_slices()
4274 bytes = max_intr_slots * sizeof (*ss->rx_done.entry); in mxge_alloc_slices()
4275 err = mxge_dma_alloc(sc, &ss->rx_done.dma, bytes, 4096); in mxge_alloc_slices()
4278 ss->rx_done.entry = ss->rx_done.dma.addr; in mxge_alloc_slices()
4279 bzero(ss->rx_done.entry, bytes); in mxge_alloc_slices()
4287 bytes = sizeof (*ss->fw_stats); in mxge_alloc_slices()
4288 err = mxge_dma_alloc(sc, &ss->fw_stats_dma, in mxge_alloc_slices()
4289 sizeof (*ss->fw_stats), 64); in mxge_alloc_slices()
4292 ss->fw_stats = (mcp_irq_data_t *)ss->fw_stats_dma.addr; in mxge_alloc_slices()
4293 snprintf(ss->tx.mtx_name, sizeof(ss->tx.mtx_name), in mxge_alloc_slices()
4295 mtx_init(&ss->tx.mtx, ss->tx.mtx_name, NULL, MTX_DEF); in mxge_alloc_slices()
4296 ss->tx.br = buf_ring_alloc(2048, M_DEVBUF, M_WAITOK, in mxge_alloc_slices()
4297 &ss->tx.mtx); in mxge_alloc_slices()
4456 mxge_intr, &sc->ss[i], &sc->msix_ih[i]); in mxge_add_msix_irqs()
4529 mxge_intr, &sc->ss[0], &sc->ih); in mxge_add_single_irq()
4758 sizeof (sc->ss[0].scratch)); in mxge_attach()
4770 if_sethwtsomaxsegcount(ifp, sc->ss[0].tx.max_desc); in mxge_attach()