Lines Matching refs:ss

347 myri10ge_jpool_init(struct myri10ge_slice_state *ss)  in myri10ge_jpool_init()  argument
349 struct myri10ge_jpool_stuff *jpool = &ss->jpool; in myri10ge_jpool_init()
353 ss->mgp->icookie); in myri10ge_jpool_init()
358 myri10ge_jpool_fini(struct myri10ge_slice_state *ss) in myri10ge_jpool_fini() argument
360 struct myri10ge_jpool_stuff *jpool = &ss->jpool; in myri10ge_jpool_fini()
365 ss->mgp->name); in myri10ge_jpool_fini()
392 myri10ge_pull_jpool(struct myri10ge_slice_state *ss) in myri10ge_pull_jpool() argument
394 struct myri10ge_jpool_stuff *jpool = &ss->jpool; in myri10ge_pull_jpool()
438 myri10ge_restock_jumbos(struct myri10ge_slice_state *ss) in myri10ge_restock_jumbos() argument
440 struct myri10ge_jpool_stuff *jpool = &ss->jpool; in myri10ge_restock_jumbos()
445 rx = &ss->rx_big; in myri10ge_restock_jumbos()
446 limit = ss->j_rx_cnt + (rx->mask + 1); in myri10ge_restock_jumbos()
452 myri10ge_pull_jpool(ss); in myri10ge_restock_jumbos()
477 myri10ge_unstock_jumbos(struct myri10ge_slice_state *ss) in myri10ge_unstock_jumbos() argument
479 struct myri10ge_jpool_stuff *jpool = &ss->jpool; in myri10ge_unstock_jumbos()
485 rx = &ss->rx_big; in myri10ge_unstock_jumbos()
515 jpool = &j->ss->jpool; in myri10ge_jfree_rtn()
542 myri10ge_add_jbuf(struct myri10ge_slice_state *ss) in myri10ge_add_jbuf() argument
545 struct myri10ge_jpool_stuff *jpool = &ss->jpool; in myri10ge_add_jbuf()
560 err = ddi_dma_alloc_handle(ss->mgp->dip, rx_dma_attr, in myri10ge_add_jbuf()
607 j->ss = ss; in myri10ge_add_jbuf()
662 myri10ge_add_jbufs(struct myri10ge_slice_state *ss, int num, int total) in myri10ge_add_jbufs() argument
664 struct myri10ge_jpool_stuff *jpool = &ss->jpool; in myri10ge_add_jbufs()
683 err = myri10ge_add_jbuf(ss); in myri10ge_add_jbufs()
692 myri10ge_remove_jbufs(struct myri10ge_slice_state *ss) in myri10ge_remove_jbufs() argument
694 struct myri10ge_jpool_stuff *jpool = &ss->jpool; in myri10ge_remove_jbufs()
698 myri10ge_pull_jpool(ss); in myri10ge_remove_jbufs()
709 myri10ge_carve_up_jbufs_into_small_ring(struct myri10ge_slice_state *ss) in myri10ge_carve_up_jbufs_into_small_ring() argument
711 struct myri10ge_jpool_stuff *jpool = &ss->jpool; in myri10ge_carve_up_jbufs_into_small_ring()
721 for (idx = 0; idx < ss->rx_small.mask + 1; idx++) { in myri10ge_carve_up_jbufs_into_small_ring()
729 j->next = ss->small_jpool; in myri10ge_carve_up_jbufs_into_small_ring()
730 ss->small_jpool = j; in myri10ge_carve_up_jbufs_into_small_ring()
737 ss->rx_small.info[idx].ptr = ptr; in myri10ge_carve_up_jbufs_into_small_ring()
738 ss->rx_small.shadow[idx].addr_low = htonl(dma_low); in myri10ge_carve_up_jbufs_into_small_ring()
739 ss->rx_small.shadow[idx].addr_high = htonl(dma_high); in myri10ge_carve_up_jbufs_into_small_ring()
751 myri10ge_release_small_jbufs(struct myri10ge_slice_state *ss) in myri10ge_release_small_jbufs() argument
753 struct myri10ge_jpool_stuff *jpool = &ss->jpool; in myri10ge_release_small_jbufs()
757 while (ss->small_jpool != NULL) { in myri10ge_release_small_jbufs()
758 j = ss->small_jpool; in myri10ge_release_small_jbufs()
759 ss->small_jpool = j->next; in myri10ge_release_small_jbufs()
764 ss->jbufs_for_smalls = 0; in myri10ge_release_small_jbufs()
768 myri10ge_add_tx_handle(struct myri10ge_slice_state *ss) in myri10ge_add_tx_handle() argument
770 myri10ge_tx_ring_t *tx = &ss->tx; in myri10ge_add_tx_handle()
771 struct myri10ge_priv *mgp = ss->mgp; in myri10ge_add_tx_handle()
798 myri10ge_remove_tx_handles(struct myri10ge_slice_state *ss) in myri10ge_remove_tx_handles() argument
800 myri10ge_tx_ring_t *tx = &ss->tx; in myri10ge_remove_tx_handles()
815 ss->mgp->name, in myri10ge_remove_tx_handles()
848 myri10ge_alloc_tx_handles(struct myri10ge_slice_state *ss, int count, in myri10ge_alloc_tx_handles() argument
851 myri10ge_tx_ring_t *tx = &ss->tx; in myri10ge_alloc_tx_handles()
860 err = myri10ge_add_tx_handle(ss); in myri10ge_alloc_tx_handles()
884 myri10ge_unprepare_tx_ring(struct myri10ge_slice_state *ss) in myri10ge_unprepare_tx_ring() argument
891 tx = &ss->tx; in myri10ge_unprepare_tx_ring()
894 for (idx = 0; idx < ss->tx.mask + 1; idx++) { in myri10ge_unprepare_tx_ring()
912 myri10ge_remove_tx_handles(ss); in myri10ge_unprepare_tx_ring()
919 myri10ge_prepare_tx_ring(struct myri10ge_slice_state *ss) in myri10ge_prepare_tx_ring() argument
925 bytes = sizeof (*ss->tx.cp) * (ss->tx.mask + 1); in myri10ge_prepare_tx_ring()
926 ss->tx.cp = kmem_zalloc(bytes, KM_SLEEP); in myri10ge_prepare_tx_ring()
927 if (ss->tx.cp == NULL) { in myri10ge_prepare_tx_ring()
930 ss->mgp->name); in myri10ge_prepare_tx_ring()
936 for (h = 0; h < ss->tx.mask + 1; h++) { in myri10ge_prepare_tx_ring()
937 ss->tx.cp[h].va = myri10ge_dma_alloc(ss->mgp->dip, in myri10ge_prepare_tx_ring()
940 DDI_DMA_WRITE|DDI_DMA_STREAMING, &ss->tx.cp[h].dma, 1, in myri10ge_prepare_tx_ring()
942 if (ss->tx.cp[h].va == NULL) { in myri10ge_prepare_tx_ring()
944 "copyblock %d\n", ss->mgp->name, h); in myri10ge_prepare_tx_ring()
950 (void) myri10ge_alloc_tx_handles(ss, myri10ge_tx_handles_initial, in myri10ge_prepare_tx_ring()
953 myri10ge_free_tx_handle_slist(&ss->tx, handles); in myri10ge_prepare_tx_ring()
960 myri10ge_dma_free(&ss->tx.cp[h].dma); in myri10ge_prepare_tx_ring()
963 bytes = sizeof (*ss->tx.cp) * (ss->tx.mask + 1); in myri10ge_prepare_tx_ring()
964 kmem_free(ss->tx.cp, bytes); in myri10ge_prepare_tx_ring()
965 ss->tx.cp = NULL; in myri10ge_prepare_tx_ring()
1522 struct myri10ge_slice_state *ss; in myri10ge_reset() local
1536 bytes = mgp->max_intr_slots * sizeof (*mgp->ss[0].rx_done.entry); in myri10ge_reset()
1581 ss = &mgp->ss[i]; in myri10ge_reset()
1582 cmd.data0 = ntohl(ss->rx_done.dma.low); in myri10ge_reset()
1583 cmd.data1 = ntohl(ss->rx_done.dma.high); in myri10ge_reset()
1591 ss = &mgp->ss[i]; in myri10ge_reset()
1592 ss->irq_claim = (volatile unsigned int *) in myri10ge_reset()
1618 ss = &mgp->ss[i]; in myri10ge_reset()
1620 sizeof (*mgp->ss[0].rx_done.entry); in myri10ge_reset()
1621 (void) memset(ss->rx_done.entry, 0, bytes); in myri10ge_reset()
1622 ss->tx.req = 0; in myri10ge_reset()
1623 ss->tx.done = 0; in myri10ge_reset()
1624 ss->tx.pkt_done = 0; in myri10ge_reset()
1625 ss->rx_big.cnt = 0; in myri10ge_reset()
1626 ss->rx_small.cnt = 0; in myri10ge_reset()
1627 ss->rx_done.idx = 0; in myri10ge_reset()
1628 ss->rx_done.cnt = 0; in myri10ge_reset()
1629 ss->rx_token = 0; in myri10ge_reset()
1630 ss->tx.watchdog_done = 0; in myri10ge_reset()
1631 ss->tx.watchdog_req = 0; in myri10ge_reset()
1632 ss->tx.active = 0; in myri10ge_reset()
1633 ss->tx.activate = 0; in myri10ge_reset()
1738 return (&mgp->ss[slice]); in myri10ge_toeplitz_send_hash()
1750 return (&mgp->ss[0]); in myri10ge_simple_send_hash()
1763 return (&mgp->ss[slice]); in myri10ge_simple_send_hash()
1776 return (&mgp->ss[0]); in myri10ge_send_hash()
1780 return (&mgp->ss[slice]); in myri10ge_send_hash()
1790 return (&mgp->ss[0]); in myri10ge_send_hash()
1795 return (&mgp->ss[0]); in myri10ge_send_hash()
1798 return (&mgp->ss[0]); in myri10ge_send_hash()
1804 return (&mgp->ss[0]); in myri10ge_send_hash()
1819 return (&mgp->ss[0]); in myri10ge_send_hash()
1823 myri10ge_setup_slice(struct myri10ge_slice_state *ss) in myri10ge_setup_slice() argument
1825 struct myri10ge_priv *mgp = ss->mgp; in myri10ge_setup_slice()
1833 slice = ss - mgp->ss; in myri10ge_setup_slice()
1845 ss->tx.mask = tx_ring_entries - 1; in myri10ge_setup_slice()
1846 ss->rx_small.mask = ss->rx_big.mask = rx_ring_entries - 1; in myri10ge_setup_slice()
1852 ss->tx.lanai = (mcp_kreq_ether_send_t *)(void *)(mgp->sram + cmd.data0); in myri10ge_setup_slice()
1854 ss->tx.go = (char *)mgp->sram + MXGEFW_ETH_SEND_GO + 64 * slice; in myri10ge_setup_slice()
1855 ss->tx.stop = (char *)mgp->sram + MXGEFW_ETH_SEND_STOP + in myri10ge_setup_slice()
1858 ss->tx.go = NULL; in myri10ge_setup_slice()
1859 ss->tx.stop = NULL; in myri10ge_setup_slice()
1864 ss->rx_small.lanai = (mcp_kreq_ether_recv_t *) in myri10ge_setup_slice()
1869 ss->rx_big.lanai = (mcp_kreq_ether_recv_t *)(void *) in myri10ge_setup_slice()
1879 bytes = rx_ring_entries * sizeof (*ss->rx_small.shadow); in myri10ge_setup_slice()
1880 ss->rx_small.shadow = kmem_zalloc(bytes, KM_SLEEP); in myri10ge_setup_slice()
1881 if (ss->rx_small.shadow == NULL) in myri10ge_setup_slice()
1883 (void) memset(ss->rx_small.shadow, 0, bytes); in myri10ge_setup_slice()
1885 bytes = rx_ring_entries * sizeof (*ss->rx_big.shadow); in myri10ge_setup_slice()
1886 ss->rx_big.shadow = kmem_zalloc(bytes, KM_SLEEP); in myri10ge_setup_slice()
1887 if (ss->rx_big.shadow == NULL) in myri10ge_setup_slice()
1889 (void) memset(ss->rx_big.shadow, 0, bytes); in myri10ge_setup_slice()
1893 bytes = tx_ring_entries * sizeof (*ss->tx.info); in myri10ge_setup_slice()
1894 ss->tx.info = kmem_zalloc(bytes, KM_SLEEP); in myri10ge_setup_slice()
1895 if (ss->tx.info == NULL) in myri10ge_setup_slice()
1897 (void) memset(ss->tx.info, 0, bytes); in myri10ge_setup_slice()
1899 bytes = rx_ring_entries * sizeof (*ss->rx_small.info); in myri10ge_setup_slice()
1900 ss->rx_small.info = kmem_zalloc(bytes, KM_SLEEP); in myri10ge_setup_slice()
1901 if (ss->rx_small.info == NULL) in myri10ge_setup_slice()
1903 (void) memset(ss->rx_small.info, 0, bytes); in myri10ge_setup_slice()
1905 bytes = rx_ring_entries * sizeof (*ss->rx_big.info); in myri10ge_setup_slice()
1906 ss->rx_big.info = kmem_zalloc(bytes, KM_SLEEP); in myri10ge_setup_slice()
1907 if (ss->rx_big.info == NULL) in myri10ge_setup_slice()
1909 (void) memset(ss->rx_big.info, 0, bytes); in myri10ge_setup_slice()
1911 ss->tx.stall = ss->tx.sched = 0; in myri10ge_setup_slice()
1912 ss->tx.stall_early = ss->tx.stall_late = 0; in myri10ge_setup_slice()
1914 ss->jbufs_for_smalls = 1 + (1 + ss->rx_small.mask) / in myri10ge_setup_slice()
1917 allocated = myri10ge_add_jbufs(ss, in myri10ge_setup_slice()
1918 myri10ge_bigbufs_initial + ss->jbufs_for_smalls, 1); in myri10ge_setup_slice()
1919 if (allocated < ss->jbufs_for_smalls + myri10ge_bigbufs_initial) { in myri10ge_setup_slice()
1923 myri10ge_bigbufs_initial + ss->jbufs_for_smalls); in myri10ge_setup_slice()
1927 myri10ge_carve_up_jbufs_into_small_ring(ss); in myri10ge_setup_slice()
1928 ss->j_rx_cnt = 0; in myri10ge_setup_slice()
1930 mutex_enter(&ss->jpool.mtx); in myri10ge_setup_slice()
1932 ss->jpool.low_water = allocated / 4; in myri10ge_setup_slice()
1934 ss->jpool.low_water = rx_ring_entries / 2; in myri10ge_setup_slice()
1940 (void) memset(ss->rx_big.shadow, 1, in myri10ge_setup_slice()
1941 (ss->rx_big.mask + 1) * sizeof (ss->rx_big.shadow[0])); in myri10ge_setup_slice()
1942 for (idx = 7; idx <= ss->rx_big.mask; idx += 8) { in myri10ge_setup_slice()
1943 myri10ge_submit_8rx(&ss->rx_big.lanai[idx - 7], in myri10ge_setup_slice()
1944 &ss->rx_big.shadow[idx - 7]); in myri10ge_setup_slice()
1949 myri10ge_restock_jumbos(ss); in myri10ge_setup_slice()
1951 for (idx = 7; idx <= ss->rx_small.mask; idx += 8) { in myri10ge_setup_slice()
1952 myri10ge_submit_8rx(&ss->rx_small.lanai[idx - 7], in myri10ge_setup_slice()
1953 &ss->rx_small.shadow[idx - 7]); in myri10ge_setup_slice()
1956 ss->rx_small.cnt = ss->rx_small.mask + 1; in myri10ge_setup_slice()
1958 mutex_exit(&ss->jpool.mtx); in myri10ge_setup_slice()
1960 status = myri10ge_prepare_tx_ring(ss); in myri10ge_setup_slice()
1965 cmd.data0 = ntohl(ss->fw_stats_dma.low); in myri10ge_setup_slice()
1966 cmd.data1 = ntohl(ss->fw_stats_dma.high); in myri10ge_setup_slice()
1969 bzero(ss->fw_stats, sizeof (*ss->fw_stats)); in myri10ge_setup_slice()
1972 cmd.data0 = ntohl(ss->fw_stats_dma.low) + in myri10ge_setup_slice()
1974 cmd.data1 = ntohl(ss->fw_stats_dma.high); in myri10ge_setup_slice()
1986 myri10ge_unprepare_tx_ring(ss); in myri10ge_setup_slice()
1989 myri10ge_release_small_jbufs(ss); in myri10ge_setup_slice()
1993 mutex_enter(&ss->jpool.mtx); in myri10ge_setup_slice()
1994 ss->jpool.low_water = 0; in myri10ge_setup_slice()
1995 mutex_exit(&ss->jpool.mtx); in myri10ge_setup_slice()
1996 myri10ge_unstock_jumbos(ss); in myri10ge_setup_slice()
1997 myri10ge_remove_jbufs(ss); in myri10ge_setup_slice()
2000 bytes = rx_ring_entries * sizeof (*ss->rx_big.info); in myri10ge_setup_slice()
2001 kmem_free(ss->rx_big.info, bytes); in myri10ge_setup_slice()
2004 bytes = rx_ring_entries * sizeof (*ss->rx_small.info); in myri10ge_setup_slice()
2005 kmem_free(ss->rx_small.info, bytes); in myri10ge_setup_slice()
2008 bytes = tx_ring_entries * sizeof (*ss->tx.info); in myri10ge_setup_slice()
2009 kmem_free(ss->tx.info, bytes); in myri10ge_setup_slice()
2012 bytes = rx_ring_entries * sizeof (*ss->rx_big.shadow); in myri10ge_setup_slice()
2013 kmem_free(ss->rx_big.shadow, bytes); in myri10ge_setup_slice()
2016 bytes = rx_ring_entries * sizeof (*ss->rx_small.shadow); in myri10ge_setup_slice()
2017 kmem_free(ss->rx_small.shadow, bytes); in myri10ge_setup_slice()
2024 myri10ge_teardown_slice(struct myri10ge_slice_state *ss) in myri10ge_teardown_slice() argument
2030 if (ss->tx.cp == NULL) in myri10ge_teardown_slice()
2033 myri10ge_unprepare_tx_ring(ss); in myri10ge_teardown_slice()
2037 mutex_enter(&ss->jpool.mtx); in myri10ge_teardown_slice()
2038 ss->jpool.low_water = 0; in myri10ge_teardown_slice()
2039 mutex_exit(&ss->jpool.mtx); in myri10ge_teardown_slice()
2040 myri10ge_release_small_jbufs(ss); in myri10ge_teardown_slice()
2043 myri10ge_unstock_jumbos(ss); in myri10ge_teardown_slice()
2044 myri10ge_remove_jbufs(ss); in myri10ge_teardown_slice()
2046 rx_ring_entries = ss->rx_big.mask + 1; in myri10ge_teardown_slice()
2047 tx_ring_entries = ss->tx.mask + 1; in myri10ge_teardown_slice()
2049 bytes = rx_ring_entries * sizeof (*ss->rx_big.info); in myri10ge_teardown_slice()
2050 kmem_free(ss->rx_big.info, bytes); in myri10ge_teardown_slice()
2052 bytes = rx_ring_entries * sizeof (*ss->rx_small.info); in myri10ge_teardown_slice()
2053 kmem_free(ss->rx_small.info, bytes); in myri10ge_teardown_slice()
2055 bytes = tx_ring_entries * sizeof (*ss->tx.info); in myri10ge_teardown_slice()
2056 kmem_free(ss->tx.info, bytes); in myri10ge_teardown_slice()
2058 bytes = rx_ring_entries * sizeof (*ss->rx_big.shadow); in myri10ge_teardown_slice()
2059 kmem_free(ss->rx_big.shadow, bytes); in myri10ge_teardown_slice()
2061 bytes = rx_ring_entries * sizeof (*ss->rx_small.shadow); in myri10ge_teardown_slice()
2062 kmem_free(ss->rx_small.shadow, bytes); in myri10ge_teardown_slice()
2129 status = myri10ge_setup_slice(&mgp->ss[i]); in myri10ge_start_locked()
2181 myri10ge_teardown_slice(&mgp->ss[i]); in myri10ge_start_locked()
2228 mutex_enter(&mgp->ss[i].rx_lock); in myri10ge_stop_locked()
2231 mutex_exit(&mgp->ss[i].rx_lock); in myri10ge_stop_locked()
2234 mutex_enter(&mgp->ss->poll_lock); in myri10ge_stop_locked()
2235 polling = mgp->ss->rx_polling; in myri10ge_stop_locked()
2236 mutex_exit(&mgp->ss->poll_lock); in myri10ge_stop_locked()
2251 myri10ge_teardown_slice(&mgp->ss[i]); in myri10ge_stop_locked()
2388 myri10ge_rx_done_small(struct myri10ge_slice_state *ss, uint32_t len, in myri10ge_rx_done_small() argument
2395 rx = &ss->rx_small; in myri10ge_rx_done_small()
2397 ss->rx_small.cnt++; in myri10ge_rx_done_small()
2405 bcopy(ss->rx_small.info[idx].ptr, in myri10ge_rx_done_small()
2410 ss->rx_stats.ibytes += len; in myri10ge_rx_done_small()
2411 ss->rx_stats.ipackets += 1; in myri10ge_rx_done_small()
2412 myri10ge_rx_csum(mp, &ss->rx_stats, csum); in myri10ge_rx_done_small()
2425 myri10ge_rx_done_big(struct myri10ge_slice_state *ss, uint32_t len, in myri10ge_rx_done_big() argument
2433 jpool = &ss->jpool; in myri10ge_rx_done_big()
2434 idx = ss->j_rx_cnt & ss->rx_big.mask; in myri10ge_rx_done_big()
2435 j = ss->rx_big.info[idx].j; in myri10ge_rx_done_big()
2439 ss->mgp->name, idx, ss->rx_big.cnt, ss->j_rx_cnt); in myri10ge_rx_done_big()
2444 ss->rx_big.info[idx].j = NULL; in myri10ge_rx_done_big()
2445 ss->j_rx_cnt++; in myri10ge_rx_done_big()
2453 num_owned_by_mcp = ss->rx_big.cnt - ss->j_rx_cnt; in myri10ge_rx_done_big()
2456 myri10ge_restock_jumbos(ss); in myri10ge_rx_done_big()
2458 num_owned_by_mcp = ss->rx_big.cnt - ss->j_rx_cnt; in myri10ge_rx_done_big()
2472 myri10ge_restock_jumbos(ss); in myri10ge_rx_done_big()
2488 ss->rx_stats.ibytes += len; in myri10ge_rx_done_big()
2489 ss->rx_stats.ipackets += 1; in myri10ge_rx_done_big()
2490 myri10ge_rx_csum(mp, &ss->rx_stats, csum); in myri10ge_rx_done_big()
2504 myri10ge_tx_done(struct myri10ge_slice_state *ss, uint32_t mcp_index) in myri10ge_tx_done() argument
2511 tx = &ss->tx; in myri10ge_tx_done()
2548 mutex_enter(&ss->tx.lock); in myri10ge_tx_done()
2550 mutex_exit(&ss->tx.lock); in myri10ge_tx_done()
2551 mac_tx_ring_update(ss->mgp->mh, tx->rh); in myri10ge_tx_done()
2585 myri10ge_mbl_append(struct myri10ge_slice_state *ss, in myri10ge_mbl_append() argument
2596 myri10ge_clean_rx_done(struct myri10ge_slice_state *ss, in myri10ge_clean_rx_done() argument
2599 myri10ge_rx_done_t *rx_done = &ss->rx_done; in myri10ge_clean_rx_done()
2600 struct myri10ge_priv *mgp = ss->mgp; in myri10ge_clean_rx_done()
2622 mp = myri10ge_rx_done_small(ss, length, checksum); in myri10ge_clean_rx_done()
2624 mp = myri10ge_rx_done_big(ss, length, checksum); in myri10ge_clean_rx_done()
2627 0 != myri10ge_lro_rx(ss, mp, checksum, mbl)) in myri10ge_clean_rx_done()
2628 myri10ge_mbl_append(ss, mbl, mp); in myri10ge_clean_rx_done()
2633 while (ss->lro_active != NULL) { in myri10ge_clean_rx_done()
2634 lro = ss->lro_active; in myri10ge_clean_rx_done()
2635 ss->lro_active = lro->next; in myri10ge_clean_rx_done()
2636 myri10ge_lro_flush(ss, lro, mbl); in myri10ge_clean_rx_done()
2641 myri10ge_intr_rx(struct myri10ge_slice_state *ss) in myri10ge_intr_rx() argument
2647 if (mutex_tryenter(&ss->rx_lock) == 0) in myri10ge_intr_rx()
2649 gen = ss->rx_gen_num; in myri10ge_intr_rx()
2650 myri10ge_clean_rx_done(ss, &mbl, MYRI10GE_POLL_NULL, in myri10ge_intr_rx()
2651 &ss->rx_polling); in myri10ge_intr_rx()
2653 mac_rx_ring(ss->mgp->mh, ss->rx_rh, mbl.head, gen); in myri10ge_intr_rx()
2654 mutex_exit(&ss->rx_lock); in myri10ge_intr_rx()
2661 struct myri10ge_slice_state *ss = arg; in myri10ge_poll_rx() local
2669 mutex_enter(&ss->rx_lock); in myri10ge_poll_rx()
2670 if (ss->rx_polling) in myri10ge_poll_rx()
2671 myri10ge_clean_rx_done(ss, &mbl, bytes, &dummy); in myri10ge_poll_rx()
2673 printf("%d: poll_rx: token=%d, polling=%d\n", (int)(ss - in myri10ge_poll_rx()
2674 ss->mgp->ss), ss->rx_token, ss->rx_polling); in myri10ge_poll_rx()
2675 mutex_exit(&ss->rx_lock); in myri10ge_poll_rx()
2683 struct myri10ge_slice_state *ss = in myri10ge_intr() local
2685 struct myri10ge_priv *mgp = ss->mgp; in myri10ge_intr()
2686 mcp_irq_data_t *stats = ss->fw_stats; in myri10ge_intr()
2687 myri10ge_tx_ring_t *tx = &ss->tx; in myri10ge_intr()
2700 myri10ge_intr_rx(ss); in myri10ge_intr()
2718 myri10ge_tx_done(ss, (int)send_done_count); in myri10ge_intr()
2740 ntohl(ss->fw_stats->rdma_tags_available)) { in myri10ge_intr()
2742 ntohl(ss->fw_stats->rdma_tags_available); in myri10ge_intr()
2752 mutex_enter(&ss->poll_lock); in myri10ge_intr()
2753 if (ss->rx_polling) { in myri10ge_intr()
2754 ss->rx_token = 1; in myri10ge_intr()
2756 *ss->irq_claim = BE_32(3); in myri10ge_intr()
2757 ss->rx_token = 0; in myri10ge_intr()
2759 mutex_exit(&ss->poll_lock); in myri10ge_intr()
2761 *(ss->irq_claim + 1) = BE_32(3); in myri10ge_intr()
2899 myri10ge_pullup(struct myri10ge_slice_state *ss, mblk_t *mp) in myri10ge_pullup() argument
2938 myri10ge_tx_copy(struct myri10ge_slice_state *ss, mblk_t *mp, in myri10ge_tx_copy() argument
2941 myri10ge_tx_ring_t *tx = &ss->tx; in myri10ge_tx_copy()
2976 myri10ge_submit_req(&ss->tx, req, 1); in myri10ge_tx_copy()
3111 myri10ge_tx_tso_copy(struct myri10ge_slice_state *ss, mblk_t *mp, in myri10ge_tx_tso_copy() argument
3115 myri10ge_tx_ring_t *tx = &ss->tx; in myri10ge_tx_tso_copy()
3116 struct myri10ge_priv *mgp = ss->mgp; in myri10ge_tx_tso_copy()
3326 myri10ge_send(struct myri10ge_slice_state *ss, mblk_t *mp, in myri10ge_send() argument
3329 struct myri10ge_priv *mgp = ss->mgp; in myri10ge_send()
3330 myri10ge_tx_ring_t *tx = &ss->tx; in myri10ge_send()
3415 err = myri10ge_pullup(ss, mp); in myri10ge_send()
3456 err = myri10ge_tx_tso_copy(ss, mp, req_list, in myri10ge_send()
3474 err = myri10ge_tx_copy(ss, mp, req); in myri10ge_send()
3482 err = myri10ge_alloc_tx_handles(ss, count, &handles); in myri10ge_send()
3662 err = myri10ge_pullup(ss, mp); in myri10ge_send()
3687 struct myri10ge_slice_state *ss = arg; in myri10ge_send_wrapper() local
3698 err = myri10ge_send(ss, mp, req_list, tx_info); in myri10ge_send_wrapper()
3766 struct myri10ge_slice_state *ss; in myri10ge_ring_start() local
3768 ss = (struct myri10ge_slice_state *)rh; in myri10ge_ring_start()
3769 mutex_enter(&ss->rx_lock); in myri10ge_ring_start()
3770 ss->rx_gen_num = mr_gen_num; in myri10ge_ring_start()
3771 mutex_exit(&ss->rx_lock); in myri10ge_ring_start()
3781 struct myri10ge_slice_state *ss; in myri10ge_rx_ring_stat() local
3783 ss = (struct myri10ge_slice_state *)rh; in myri10ge_rx_ring_stat()
3786 *val = ss->rx_stats.ibytes; in myri10ge_rx_ring_stat()
3790 *val = ss->rx_stats.ipackets; in myri10ge_rx_ring_stat()
3807 struct myri10ge_slice_state *ss; in myri10ge_tx_ring_stat() local
3809 ss = (struct myri10ge_slice_state *)rh; in myri10ge_tx_ring_stat()
3812 *val = ss->tx.stats.obytes; in myri10ge_tx_ring_stat()
3816 *val = ss->tx.stats.opackets; in myri10ge_tx_ring_stat()
3830 struct myri10ge_slice_state *ss; in myri10ge_rx_ring_intr_disable() local
3832 ss = (struct myri10ge_slice_state *)intrh; in myri10ge_rx_ring_intr_disable()
3833 mutex_enter(&ss->poll_lock); in myri10ge_rx_ring_intr_disable()
3834 ss->rx_polling = B_TRUE; in myri10ge_rx_ring_intr_disable()
3835 mutex_exit(&ss->poll_lock); in myri10ge_rx_ring_intr_disable()
3842 struct myri10ge_slice_state *ss; in myri10ge_rx_ring_intr_enable() local
3844 ss = (struct myri10ge_slice_state *)intrh; in myri10ge_rx_ring_intr_enable()
3845 mutex_enter(&ss->poll_lock); in myri10ge_rx_ring_intr_enable()
3846 ss->rx_polling = B_FALSE; in myri10ge_rx_ring_intr_enable()
3847 if (ss->rx_token) { in myri10ge_rx_ring_intr_enable()
3848 *ss->irq_claim = BE_32(3); in myri10ge_rx_ring_intr_enable()
3849 ss->rx_token = 0; in myri10ge_rx_ring_intr_enable()
3851 mutex_exit(&ss->poll_lock); in myri10ge_rx_ring_intr_enable()
3861 struct myri10ge_slice_state *ss; in myri10ge_fill_ring() local
3866 ss = &mgp->ss[ring_index]; in myri10ge_fill_ring()
3869 ss->rx_rh = rh; in myri10ge_fill_ring()
3870 infop->mri_driver = (mac_ring_driver_t)ss; in myri10ge_fill_ring()
3875 mintr->mi_handle = (mac_intr_handle_t)ss; in myri10ge_fill_ring()
3880 ss->tx.rh = rh; in myri10ge_fill_ring()
3881 infop->mri_driver = (mac_ring_driver_t)ss; in myri10ge_fill_ring()
3903 myri10ge_slice_stat_destroy(struct myri10ge_slice_state *ss) in myri10ge_slice_stat_destroy() argument
3905 if (ss->ksp_stat == NULL) in myri10ge_slice_stat_destroy()
3908 kstat_delete(ss->ksp_stat); in myri10ge_slice_stat_destroy()
3909 ss->ksp_stat = NULL; in myri10ge_slice_stat_destroy()
3935 fw_stats = mgp->ss[0].fw_stats; in myri10ge_nic_stat_kstat_update()
3976 struct myri10ge_slice_state *ss; in myri10ge_slice_stat_kstat_update() local
3982 ss = (struct myri10ge_slice_state *)ksp->ks_private; in myri10ge_slice_stat_kstat_update()
3984 ethstat->rx_big.value.ul = ss->j_rx_cnt; in myri10ge_slice_stat_kstat_update()
3985 ethstat->rx_bigbuf_firmware.value.ul = ss->rx_big.cnt - ss->j_rx_cnt; in myri10ge_slice_stat_kstat_update()
3987 ss->jpool.num_alloc - ss->jbufs_for_smalls; in myri10ge_slice_stat_kstat_update()
3988 ethstat->rx_bigbuf_smalls.value.ul = ss->jbufs_for_smalls; in myri10ge_slice_stat_kstat_update()
3989 ethstat->rx_small.value.ul = ss->rx_small.cnt - in myri10ge_slice_stat_kstat_update()
3990 (ss->rx_small.mask + 1); in myri10ge_slice_stat_kstat_update()
3991 ethstat->tx_done.value.ul = ss->tx.done; in myri10ge_slice_stat_kstat_update()
3992 ethstat->tx_req.value.ul = ss->tx.req; in myri10ge_slice_stat_kstat_update()
3993 ethstat->tx_activate.value.ul = ss->tx.activate; in myri10ge_slice_stat_kstat_update()
3994 ethstat->xmit_sched.value.ul = ss->tx.sched; in myri10ge_slice_stat_kstat_update()
3995 ethstat->xmit_stall.value.ul = ss->tx.stall; in myri10ge_slice_stat_kstat_update()
3996 ethstat->xmit_stall_early.value.ul = ss->tx.stall_early; in myri10ge_slice_stat_kstat_update()
3997 ethstat->xmit_stall_late.value.ul = ss->tx.stall_late; in myri10ge_slice_stat_kstat_update()
4129 myri10ge_slice_stat_init(struct myri10ge_slice_state *ss) in myri10ge_slice_stat_init() argument
4131 struct myri10ge_priv *mgp = ss->mgp; in myri10ge_slice_stat_init()
4140 instance = (ddi_get_instance(mgp->dip) * 1000) + (int)(ss - mgp->ss); in myri10ge_slice_stat_init()
4149 ss->ksp_stat = ksp; in myri10ge_slice_stat_init()
4202 ksp->ks_private = (void *) ss; in myri10ge_slice_stat_init()
4541 (caddr_t)&mgp->ss[x], NULL) != DDI_SUCCESS) { in myri10ge_add_intrs()
4896 struct myri10ge_slice_state *ss; in myri10ge_watchdog() local
4912 rx_pause = ntohl(mgp->ss[0].fw_stats->dropped_pause); in myri10ge_watchdog()
4921 tx = &mgp->ss[i].tx; in myri10ge_watchdog()
4933 (int)ntohl(mgp->ss[i].fw_stats->send_done_count)); in myri10ge_watchdog()
4949 ss = &mgp->ss[i]; in myri10ge_watchdog()
4950 tx = &ss->tx; in myri10ge_watchdog()
4953 if (ss->watchdog_rx_copy != MYRI10GE_SLICE_STAT(rx_copy)) { in myri10ge_watchdog()
4954 ss->watchdog_rx_copy = MYRI10GE_SLICE_STAT(rx_copy); in myri10ge_watchdog()
4956 min(ss->jpool.num_alloc, in myri10ge_watchdog()
4958 (ss->jpool.num_alloc - in myri10ge_watchdog()
4959 ss->jbufs_for_smalls)); in myri10ge_watchdog()
4961 (void) myri10ge_add_jbufs(ss, add_rx, 0); in myri10ge_watchdog()
4963 mutex_enter(&ss->jpool.mtx); in myri10ge_watchdog()
4964 myri10ge_restock_jumbos(ss); in myri10ge_watchdog()
4965 mutex_exit(&ss->jpool.mtx); in myri10ge_watchdog()
5213 mcp_irq_data_t *fw_stats = mgp->ss[0].fw_stats; in myri10ge_m_stat()
5214 struct myri10ge_slice_state *ss; in myri10ge_m_stat() local
5225 rstat = &mgp->ss[i].rx_stats; in myri10ge_m_stat()
5233 rstat = &mgp->ss[i].rx_stats; in myri10ge_m_stat()
5241 tstat = &mgp->ss[i].tx.stats; in myri10ge_m_stat()
5249 tstat = &mgp->ss[i].tx.stats; in myri10ge_m_stat()
5260 ss = &mgp->ss[i]; in myri10ge_m_stat()
5277 ss = &mgp->ss[i]; in myri10ge_m_stat()
5286 rstat = &mgp->ss[i].rx_stats; in myri10ge_m_stat()
5294 rstat = &mgp->ss[i].rx_stats; in myri10ge_m_stat()
5302 tstat = &mgp->ss[i].tx.stats; in myri10ge_m_stat()
5310 tstat = &mgp->ss[i].tx.stats; in myri10ge_m_stat()
5504 myri10ge_lro_free(struct myri10ge_slice_state *ss) in myri10ge_lro_free() argument
5508 while (ss->lro_free != NULL) { in myri10ge_lro_free()
5509 lro = ss->lro_free; in myri10ge_lro_free()
5510 ss->lro_free = lro->next; in myri10ge_lro_free()
5516 myri10ge_lro_alloc(struct myri10ge_slice_state *ss) in myri10ge_lro_alloc() argument
5521 ss->lro_free = NULL; in myri10ge_lro_alloc()
5522 ss->lro_active = NULL; in myri10ge_lro_alloc()
5528 lro->next = ss->lro_free; in myri10ge_lro_alloc()
5529 ss->lro_free = lro; in myri10ge_lro_alloc()
5536 struct myri10ge_slice_state *ss; in myri10ge_free_slices() local
5540 if (mgp->ss == NULL) in myri10ge_free_slices()
5544 ss = &mgp->ss[i]; in myri10ge_free_slices()
5545 if (ss->rx_done.entry == NULL) in myri10ge_free_slices()
5547 myri10ge_dma_free(&ss->rx_done.dma); in myri10ge_free_slices()
5548 ss->rx_done.entry = NULL; in myri10ge_free_slices()
5549 if (ss->fw_stats == NULL) in myri10ge_free_slices()
5551 myri10ge_dma_free(&ss->fw_stats_dma); in myri10ge_free_slices()
5552 ss->fw_stats = NULL; in myri10ge_free_slices()
5553 mutex_destroy(&ss->rx_lock); in myri10ge_free_slices()
5554 mutex_destroy(&ss->tx.lock); in myri10ge_free_slices()
5555 mutex_destroy(&ss->tx.handle_lock); in myri10ge_free_slices()
5556 mutex_destroy(&ss->poll_lock); in myri10ge_free_slices()
5557 myri10ge_jpool_fini(ss); in myri10ge_free_slices()
5558 myri10ge_slice_stat_destroy(ss); in myri10ge_free_slices()
5559 myri10ge_lro_free(ss); in myri10ge_free_slices()
5561 bytes = sizeof (*mgp->ss) * mgp->num_slices; in myri10ge_free_slices()
5562 kmem_free(mgp->ss, bytes); in myri10ge_free_slices()
5563 mgp->ss = NULL; in myri10ge_free_slices()
5570 struct myri10ge_slice_state *ss; in myri10ge_alloc_slices() local
5574 bytes = sizeof (*mgp->ss) * mgp->num_slices; in myri10ge_alloc_slices()
5575 mgp->ss = kmem_zalloc(bytes, KM_SLEEP); in myri10ge_alloc_slices()
5576 if (mgp->ss == NULL) in myri10ge_alloc_slices()
5579 ss = &mgp->ss[i]; in myri10ge_alloc_slices()
5581 ss->mgp = mgp; in myri10ge_alloc_slices()
5584 bytes = sizeof (*ss->fw_stats); in myri10ge_alloc_slices()
5585 ss->fw_stats = (mcp_irq_data_t *)(void *) in myri10ge_alloc_slices()
5589 &ss->fw_stats_dma, 1, DDI_DMA_DONTWAIT); in myri10ge_alloc_slices()
5590 if (ss->fw_stats == NULL) in myri10ge_alloc_slices()
5592 (void) memset(ss->fw_stats, 0, bytes); in myri10ge_alloc_slices()
5596 sizeof (*ss->rx_done.entry); in myri10ge_alloc_slices()
5597 ss->rx_done.entry = (mcp_slot_t *)(void *) in myri10ge_alloc_slices()
5601 &ss->rx_done.dma, 1, DDI_DMA_DONTWAIT); in myri10ge_alloc_slices()
5602 if (ss->rx_done.entry == NULL) { in myri10ge_alloc_slices()
5605 (void) memset(ss->rx_done.entry, 0, bytes); in myri10ge_alloc_slices()
5606 mutex_init(&ss->rx_lock, NULL, MUTEX_DEFAULT, mgp->icookie); in myri10ge_alloc_slices()
5607 mutex_init(&ss->tx.lock, NULL, MUTEX_DEFAULT, NULL); in myri10ge_alloc_slices()
5608 mutex_init(&ss->tx.handle_lock, NULL, MUTEX_DEFAULT, NULL); in myri10ge_alloc_slices()
5609 mutex_init(&ss->poll_lock, NULL, MUTEX_DEFAULT, NULL); in myri10ge_alloc_slices()
5610 myri10ge_jpool_init(ss); in myri10ge_alloc_slices()
5611 (void) myri10ge_slice_stat_init(ss); in myri10ge_alloc_slices()
5612 myri10ge_lro_alloc(ss); in myri10ge_alloc_slices()
6018 myri10ge_remove_jbufs(&mgp->ss[i]); in myri10ge_detach()
6019 jbufs_alloced += mgp->ss[i].jpool.num_alloc; in myri10ge_detach()
6082 struct myri10ge_slice_state *ss = mgp->ss; in myri10ge_poll_down() local
6083 mcp_irq_data_t *stats = ss->fw_stats; in myri10ge_poll_down()
6111 *ss->irq_claim = BE_32(3); in myri10ge_poll_down()
6112 *(ss->irq_claim + 1) = BE_32(3); in myri10ge_poll_down()