Lines Matching refs:lio
109 static int lio_setup_glists(struct octeon_device *oct, struct lio *lio,
114 static void lio_send_rx_ctrl_cmd(struct lio *lio, int start_stop);
127 int lio_send_rss_param(struct lio *lio);
358 struct lio *lio = if_getsoftc(oct_dev->props.ifp); in lio_shutdown() local
360 lio_send_rx_ctrl_cmd(lio, 0); in lio_shutdown()
412 DRIVER_MODULE(lio, pci, lio_driver, lio_event, NULL);
414 MODULE_DEPEND(lio, pci, 1, 1, 1);
415 MODULE_DEPEND(lio, ether, 1, 1, 1);
416 MODULE_DEPEND(lio, firmware, 1, 1, 1);
967 struct lio *lio = if_getsoftc(ifp); in lio_ifmedia_update() local
970 ifm = &lio->ifmedia; in lio_ifmedia_update()
985 lio_dev_err(lio->oct_dev, "Invalid media type (%d)\n", in lio_ifmedia_update()
1032 struct lio *lio = if_getsoftc(ifp); in lio_ifmedia_status() local
1035 if (!lio_ifstate_check(lio, LIO_IFSTATE_RUNNING)) { in lio_ifmedia_status()
1044 if (lio->linfo.link.s.link_up) { in lio_ifmedia_status()
1051 ifmr->ifm_active |= lio_get_media_subtype(lio->oct_dev); in lio_ifmedia_status()
1053 if (lio->linfo.link.s.duplex) in lio_ifmedia_status()
1062 struct lio *lio = if_getsoftc(ifp); in lio_get_counter() local
1063 struct octeon_device *oct = lio->oct_dev; in lio_get_counter()
1070 q_no = lio->linfo.rxpciq[i].s.q_no; in lio_get_counter()
1076 q_no = lio->linfo.txpciq[i].s.q_no; in lio_get_counter()
1082 q_no = lio->linfo.rxpciq[i].s.q_no; in lio_get_counter()
1088 q_no = lio->linfo.txpciq[i].s.q_no; in lio_get_counter()
1094 q_no = lio->linfo.rxpciq[i].s.q_no; in lio_get_counter()
1100 q_no = lio->linfo.txpciq[i].s.q_no; in lio_get_counter()
1126 lio_init_ifnet(struct lio *lio) in lio_init_ifnet() argument
1128 struct octeon_device *oct = lio->oct_dev; in lio_init_ifnet()
1129 if_t ifp = lio->ifp; in lio_init_ifnet()
1132 ifmedia_init(&lio->ifmedia, IFM_IMASK, lio_ifmedia_update, in lio_init_ifnet()
1136 ifmedia_add(&lio->ifmedia, in lio_init_ifnet()
1139 ifmedia_add(&lio->ifmedia, (IFM_ETHER | IFM_AUTO), 0, NULL); in lio_init_ifnet()
1140 ifmedia_set(&lio->ifmedia, (IFM_ETHER | IFM_AUTO)); in lio_init_ifnet()
1142 lio->ifmedia.ifm_media = lio->ifmedia.ifm_cur->ifm_media; in lio_init_ifnet()
1143 lio_dev_dbg(oct, "IFMEDIA flags : %x\n", lio->ifmedia.ifm_media); in lio_init_ifnet()
1153 if_setmtu(ifp, lio->linfo.link.s.mtu); in lio_init_ifnet()
1154 lio->mtu = lio->linfo.link.s.mtu; in lio_init_ifnet()
1174 struct lio *lio = if_getsoftc(ifp); in lio_tcp_lro_free() local
1180 q_no = lio->linfo.rxpciq[i].s.q_no; in lio_tcp_lro_free()
1192 struct lio *lio = if_getsoftc(ifp); in lio_tcp_lro_init() local
1198 q_no = lio->linfo.rxpciq[i].s.q_no; in lio_tcp_lro_init()
1223 struct lio *lio = NULL; in lio_setup_nic_devices() local
1330 lio = malloc(sizeof(struct lio), M_DEVBUF, M_NOWAIT | M_ZERO); in lio_setup_nic_devices()
1332 if (lio == NULL) { in lio_setup_nic_devices()
1337 if_setsoftc(ifp, lio); in lio_setup_nic_devices()
1343 lio->ifidx = ifidx_or_pfnum; in lio_setup_nic_devices()
1349 lio->linfo.num_rxpciq = num_oqueues; in lio_setup_nic_devices()
1350 lio->linfo.num_txpciq = num_iqueues; in lio_setup_nic_devices()
1352 lio->linfo.rxpciq[j].rxpciq64 = in lio_setup_nic_devices()
1357 lio->linfo.txpciq[j].txpciq64 = in lio_setup_nic_devices()
1361 lio->linfo.hw_addr = resp->cfg_info.linfo.hw_addr; in lio_setup_nic_devices()
1362 lio->linfo.gmxport = resp->cfg_info.linfo.gmxport; in lio_setup_nic_devices()
1363 lio->linfo.link.link_status64 = in lio_setup_nic_devices()
1370 lio->oct_dev = octeon_dev; in lio_setup_nic_devices()
1371 lio->ifp = ifp; in lio_setup_nic_devices()
1374 lio->linfo.gmxport, LIO_CAST64(lio->linfo.hw_addr)); in lio_setup_nic_devices()
1375 lio_init_ifnet(lio); in lio_setup_nic_devices()
1377 lio_swap_8B_data(&lio->linfo.hw_addr, 1); in lio_setup_nic_devices()
1380 ((uint8_t *)&lio->linfo.hw_addr) + 2 + j)); in lio_setup_nic_devices()
1388 lio->txq = lio->linfo.txpciq[0].s.q_no; in lio_setup_nic_devices()
1389 lio->rxq = lio->linfo.rxpciq[0].s.q_no; in lio_setup_nic_devices()
1390 if (lio_setup_io_queues(octeon_dev, i, lio->linfo.num_txpciq, in lio_setup_nic_devices()
1391 lio->linfo.num_rxpciq)) { in lio_setup_nic_devices()
1396 lio_ifstate_set(lio, LIO_IFSTATE_DROQ_OPS); in lio_setup_nic_devices()
1398 lio->tx_qsize = lio_get_tx_qsize(octeon_dev, lio->txq); in lio_setup_nic_devices()
1399 lio->rx_qsize = lio_get_rx_qsize(octeon_dev, lio->rxq); in lio_setup_nic_devices()
1401 if (lio_setup_glists(octeon_dev, lio, num_iqueues)) { in lio_setup_nic_devices()
1426 lio->link_changes++; in lio_setup_nic_devices()
1428 lio_ifstate_set(lio, LIO_IFSTATE_REGISTERED); in lio_setup_nic_devices()
1442 if (lio_send_rss_param(lio)) in lio_setup_nic_devices()
1453 lio->vlan_attach = in lio_setup_nic_devices()
1455 lio_vlan_rx_add_vid, lio, in lio_setup_nic_devices()
1457 lio->vlan_detach = in lio_setup_nic_devices()
1459 lio_vlan_rx_kill_vid, lio, in lio_setup_nic_devices()
1463 callout_init(&lio->stats_timer, 0); in lio_setup_nic_devices()
1464 lio->stats_interval = LIO_DEFAULT_STATS_INTERVAL; in lio_setup_nic_devices()
1466 lio_add_hw_stats(lio); in lio_setup_nic_devices()
1529 struct lio *lio; in lio_free_sgmbuf() local
1535 lio = if_getsoftc(oct->props.ifp); in lio_free_sgmbuf()
1537 mtx_lock(&lio->glist_lock[iq_no]); in lio_free_sgmbuf()
1538 STAILQ_INSERT_TAIL(&lio->ghead[iq_no], &g->node, entries); in lio_free_sgmbuf()
1539 mtx_unlock(&lio->glist_lock[iq_no]); in lio_free_sgmbuf()
1584 struct lio *lio = arg; in lio_open() local
1585 if_t ifp = lio->ifp; in lio_open()
1586 struct octeon_device *oct = lio->oct_dev; in lio_open()
1590 lio_ifstate_set(lio, LIO_IFSTATE_RUNNING); in lio_open()
1593 lio->intf_open = 1; in lio_open()
1598 lio_send_rx_ctrl_cmd(lio, 1); in lio_open()
1601 memcpy(mac_old, ((uint8_t *)&lio->linfo.hw_addr) + 2, ETHER_HDR_LEN); in lio_open()
1619 struct lio *lio = if_getsoftc(ifp); in lio_set_rxcsum_command() local
1620 struct octeon_device *oct = lio->oct_dev; in lio_set_rxcsum_command()
1626 nctrl.iq_no = lio->linfo.txpciq[0].s.q_no; in lio_set_rxcsum_command()
1628 nctrl.lio = lio; in lio_set_rxcsum_command()
1631 ret = lio_send_ctrl_pkt(lio->oct_dev, &nctrl); in lio_set_rxcsum_command()
1644 struct lio *lio; in lio_stop_nic_module() local
1657 lio = if_getsoftc(oct->props.ifp); in lio_stop_nic_module()
1660 lio->linfo.rxpciq[j].s.q_no); in lio_stop_nic_module()
1663 callout_drain(&lio->stats_timer); in lio_stop_nic_module()
1674 lio_delete_glists(struct octeon_device *oct, struct lio *lio) in lio_delete_glists() argument
1679 if (lio->glist_lock != NULL) { in lio_delete_glists()
1680 free((void *)lio->glist_lock, M_DEVBUF); in lio_delete_glists()
1681 lio->glist_lock = NULL; in lio_delete_glists()
1684 if (lio->ghead == NULL) in lio_delete_glists()
1687 for (i = 0; i < lio->linfo.num_txpciq; i++) { in lio_delete_glists()
1690 lio_delete_first_node(&lio->ghead[i]); in lio_delete_glists()
1694 if ((lio->glists_virt_base != NULL) && in lio_delete_glists()
1695 (lio->glists_virt_base[i] != NULL)) { in lio_delete_glists()
1696 lio_dma_free(lio->glist_entry_size * lio->tx_qsize, in lio_delete_glists()
1697 lio->glists_virt_base[i]); in lio_delete_glists()
1701 free(lio->glists_virt_base, M_DEVBUF); in lio_delete_glists()
1702 lio->glists_virt_base = NULL; in lio_delete_glists()
1704 free(lio->glists_dma_base, M_DEVBUF); in lio_delete_glists()
1705 lio->glists_dma_base = NULL; in lio_delete_glists()
1707 free(lio->ghead, M_DEVBUF); in lio_delete_glists()
1708 lio->ghead = NULL; in lio_delete_glists()
1712 lio_setup_glists(struct octeon_device *oct, struct lio *lio, int num_iqs) in lio_setup_glists() argument
1717 lio->glist_lock = malloc(num_iqs * sizeof(*lio->glist_lock), M_DEVBUF, in lio_setup_glists()
1719 if (lio->glist_lock == NULL) in lio_setup_glists()
1722 lio->ghead = malloc(num_iqs * sizeof(*lio->ghead), M_DEVBUF, in lio_setup_glists()
1724 if (lio->ghead == NULL) { in lio_setup_glists()
1725 free((void *)lio->glist_lock, M_DEVBUF); in lio_setup_glists()
1726 lio->glist_lock = NULL; in lio_setup_glists()
1730 lio->glist_entry_size = ROUNDUP8((ROUNDUP4(LIO_MAX_SG) >> 2) * in lio_setup_glists()
1736 lio->glists_virt_base = malloc(num_iqs * sizeof(void *), M_DEVBUF, in lio_setup_glists()
1738 lio->glists_dma_base = malloc(num_iqs * sizeof(vm_paddr_t), M_DEVBUF, in lio_setup_glists()
1740 if ((lio->glists_virt_base == NULL) || (lio->glists_dma_base == NULL)) { in lio_setup_glists()
1741 lio_delete_glists(oct, lio); in lio_setup_glists()
1746 mtx_init(&lio->glist_lock[i], "glist_lock", NULL, MTX_DEF); in lio_setup_glists()
1748 STAILQ_INIT(&lio->ghead[i]); in lio_setup_glists()
1750 lio->glists_virt_base[i] = in lio_setup_glists()
1751 lio_dma_alloc(lio->glist_entry_size * lio->tx_qsize, in lio_setup_glists()
1752 (vm_paddr_t *)&lio->glists_dma_base[i]); in lio_setup_glists()
1753 if (lio->glists_virt_base[i] == NULL) { in lio_setup_glists()
1754 lio_delete_glists(oct, lio); in lio_setup_glists()
1758 for (j = 0; j < lio->tx_qsize; j++) { in lio_setup_glists()
1764 ((uint64_t)(uintptr_t)lio->glists_virt_base[i] + in lio_setup_glists()
1765 (j * lio->glist_entry_size)); in lio_setup_glists()
1766 g->sg_dma_ptr = (uint64_t)lio->glists_dma_base[i] + in lio_setup_glists()
1767 (j * lio->glist_entry_size); in lio_setup_glists()
1768 STAILQ_INSERT_TAIL(&lio->ghead[i], &g->node, entries); in lio_setup_glists()
1771 if (j != lio->tx_qsize) { in lio_setup_glists()
1772 lio_delete_glists(oct, lio); in lio_setup_glists()
1783 struct lio *lio = if_getsoftc(ifp); in lio_stop() local
1784 struct octeon_device *oct = lio->oct_dev; in lio_stop()
1786 lio_ifstate_reset(lio, LIO_IFSTATE_RUNNING); in lio_stop()
1789 lio->intf_open = 0; in lio_stop()
1790 lio->linfo.link.s.link_up = 0; in lio_stop()
1791 lio->link_changes++; in lio_stop()
1793 lio_send_rx_ctrl_cmd(lio, 0); in lio_stop()
1802 lio_check_rx_oom_status(struct lio *lio) in lio_check_rx_oom_status() argument
1805 struct octeon_device *oct = lio->oct_dev; in lio_check_rx_oom_status()
1810 q_no = lio->linfo.rxpciq[q].s.q_no; in lio_check_rx_oom_status()
1836 struct lio *lio = rx_status_tq->ctxptr; in lio_poll_check_rx_oom_status() local
1838 if (lio_ifstate_check(lio, LIO_IFSTATE_RUNNING)) in lio_poll_check_rx_oom_status()
1839 lio_check_rx_oom_status(lio); in lio_poll_check_rx_oom_status()
1848 struct lio *lio = if_getsoftc(ifp); in lio_setup_rx_oom_poll_fn() local
1849 struct octeon_device *oct = lio->oct_dev; in lio_setup_rx_oom_poll_fn()
1852 rx_status_tq = &lio->rx_status_tq; in lio_setup_rx_oom_poll_fn()
1861 rx_status_tq->ctxptr = lio; in lio_setup_rx_oom_poll_fn()
1876 struct lio *lio = if_getsoftc(ifp); in lio_cleanup_rx_oom_poll_fn() local
1878 if (lio->rx_status_tq.tq != NULL) { in lio_cleanup_rx_oom_poll_fn()
1879 while (taskqueue_cancel_timeout(lio->rx_status_tq.tq, in lio_cleanup_rx_oom_poll_fn()
1880 &lio->rx_status_tq.work, NULL)) in lio_cleanup_rx_oom_poll_fn()
1881 taskqueue_drain_timeout(lio->rx_status_tq.tq, in lio_cleanup_rx_oom_poll_fn()
1882 &lio->rx_status_tq.work); in lio_cleanup_rx_oom_poll_fn()
1884 taskqueue_free(lio->rx_status_tq.tq); in lio_cleanup_rx_oom_poll_fn()
1886 lio->rx_status_tq.tq = NULL; in lio_cleanup_rx_oom_poll_fn()
1894 struct lio *lio; in lio_destroy_nic_device() local
1902 lio = if_getsoftc(ifp); in lio_destroy_nic_device()
1904 lio_ifstate_set(lio, LIO_IFSTATE_DETACH); in lio_destroy_nic_device()
1908 if (atomic_load_acq_int(&lio->ifstate) & LIO_IFSTATE_RUNNING) in lio_destroy_nic_device()
1920 if (atomic_load_acq_int(&lio->ifstate) & LIO_IFSTATE_REGISTERED) in lio_destroy_nic_device()
1927 lio_delete_glists(oct, lio); in lio_destroy_nic_device()
1929 EVENTHANDLER_DEREGISTER(vlan_config, lio->vlan_attach); in lio_destroy_nic_device()
1930 EVENTHANDLER_DEREGISTER(vlan_unconfig, lio->vlan_detach); in lio_destroy_nic_device()
1932 free(lio, M_DEVBUF); in lio_destroy_nic_device()
1944 struct lio *lio = if_getsoftc(ifp); in print_link_info() local
1946 if (!lio_ifstate_check(lio, LIO_IFSTATE_RESETTING) && in print_link_info()
1947 lio_ifstate_check(lio, LIO_IFSTATE_REGISTERED)) { in print_link_info()
1948 struct octeon_link_info *linfo = &lio->linfo; in print_link_info()
1951 lio_dev_info(lio->oct_dev, "%d Mbps %s Duplex UP\n", in print_link_info()
1955 lio_dev_info(lio->oct_dev, "Link Down\n"); in print_link_info()
1963 struct lio *lio = if_getsoftc(ifp); in lio_update_link_status() local
1964 int changed = (lio->linfo.link.link_status64 != ls->link_status64); in lio_update_link_status()
1966 lio->linfo.link.link_status64 = ls->link_status64; in lio_update_link_status()
1968 if ((lio->intf_open) && (changed)) { in lio_update_link_status()
1970 lio->link_changes++; in lio_update_link_status()
1971 if (lio->linfo.link.s.link_up) in lio_update_link_status()
2005 lio_send_rx_ctrl_cmd(struct lio *lio, int start_stop) in lio_send_rx_ctrl_cmd() argument
2010 struct octeon_device *oct = (struct octeon_device *)lio->oct_dev; in lio_send_rx_ctrl_cmd()
2032 sc->iq_no = lio->linfo.txpciq[0].s.q_no; in lio_send_rx_ctrl_cmd()
2060 struct lio *lio = if_getsoftc(ifp); in lio_vlan_rx_add_vid() local
2061 struct octeon_device *oct = lio->oct_dev; in lio_vlan_rx_add_vid()
2075 nctrl.iq_no = lio->linfo.txpciq[0].s.q_no; in lio_vlan_rx_add_vid()
2077 nctrl.lio = lio; in lio_vlan_rx_add_vid()
2080 ret = lio_send_ctrl_pkt(lio->oct_dev, &nctrl); in lio_vlan_rx_add_vid()
2091 struct lio *lio = if_getsoftc(ifp); in lio_vlan_rx_kill_vid() local
2092 struct octeon_device *oct = lio->oct_dev; in lio_vlan_rx_kill_vid()
2106 nctrl.iq_no = lio->linfo.txpciq[0].s.q_no; in lio_vlan_rx_kill_vid()
2108 nctrl.lio = lio; in lio_vlan_rx_kill_vid()
2111 ret = lio_send_ctrl_pkt(lio->oct_dev, &nctrl); in lio_vlan_rx_kill_vid()