Lines Matching defs:lio

56 TUNABLE_STR("hw.lio.fw_type", fw_type, sizeof(fw_type));
65 TUNABLE_INT("hw.lio.num_queues_per_pf0", &num_queues_per_pf0);
66 TUNABLE_INT("hw.lio.num_queues_per_pf1", &num_queues_per_pf1);
70 TUNABLE_INT("hw.lio.rss", &lio_rss);
75 TUNABLE_INT("hw.lio.hwlro", &lio_hwlro);
82 TUNABLE_ULONG("hw.lio.console_bitmask", &console_bitmask);
110 static int lio_setup_glists(struct octeon_device *oct, struct lio *lio,
115 static void lio_send_rx_ctrl_cmd(struct lio *lio, int start_stop);
128 int lio_send_rss_param(struct lio *lio);
270 * the lio watchdog kernel thread is running for this
361 struct lio *lio = if_getsoftc(oct_dev->props.ifp);
363 lio_send_rx_ctrl_cmd(lio, 0);
416 DRIVER_MODULE(lio, pci, lio_driver, lio_devclass, lio_event, 0);
418 MODULE_DEPEND(lio, pci, 1, 1, 1);
419 MODULE_DEPEND(lio, ether, 1, 1, 1);
420 MODULE_DEPEND(lio, firmware, 1, 1, 1);
972 struct lio *lio = if_getsoftc(ifp);
975 ifm = &lio->ifmedia;
990 lio_dev_err(lio->oct_dev, "Invalid media type (%d)\n",
1037 struct lio *lio = if_getsoftc(ifp);
1040 if (!lio_ifstate_check(lio, LIO_IFSTATE_RUNNING)) {
1049 if (lio->linfo.link.s.link_up) {
1056 ifmr->ifm_active |= lio_get_media_subtype(lio->oct_dev);
1058 if (lio->linfo.link.s.duplex)
1067 struct lio *lio = if_getsoftc(ifp);
1068 struct octeon_device *oct = lio->oct_dev;
1075 q_no = lio->linfo.rxpciq[i].s.q_no;
1081 q_no = lio->linfo.txpciq[i].s.q_no;
1087 q_no = lio->linfo.rxpciq[i].s.q_no;
1093 q_no = lio->linfo.txpciq[i].s.q_no;
1099 q_no = lio->linfo.rxpciq[i].s.q_no;
1105 q_no = lio->linfo.txpciq[i].s.q_no;
1131 lio_init_ifnet(struct lio *lio)
1133 struct octeon_device *oct = lio->oct_dev;
1134 if_t ifp = lio->ifp;
1137 ifmedia_init(&lio->ifmedia, IFM_IMASK, lio_ifmedia_update,
1141 ifmedia_add(&lio->ifmedia,
1144 ifmedia_add(&lio->ifmedia, (IFM_ETHER | IFM_AUTO), 0, NULL);
1145 ifmedia_set(&lio->ifmedia, (IFM_ETHER | IFM_AUTO));
1147 lio->ifmedia.ifm_media = lio->ifmedia.ifm_cur->ifm_media;
1148 lio_dev_dbg(oct, "IFMEDIA flags : %x\n", lio->ifmedia.ifm_media);
1158 if_setmtu(ifp, lio->linfo.link.s.mtu);
1159 lio->mtu = lio->linfo.link.s.mtu;
1179 struct lio *lio = if_getsoftc(ifp);
1185 q_no = lio->linfo.rxpciq[i].s.q_no;
1197 struct lio *lio = if_getsoftc(ifp);
1203 q_no = lio->linfo.rxpciq[i].s.q_no;
1228 struct lio *lio = NULL;
1340 lio = malloc(sizeof(struct lio), M_DEVBUF, M_NOWAIT | M_ZERO);
1342 if (lio == NULL) {
1347 if_setsoftc(ifp, lio);
1353 lio->ifidx = ifidx_or_pfnum;
1359 lio->linfo.num_rxpciq = num_oqueues;
1360 lio->linfo.num_txpciq = num_iqueues;
1362 lio->linfo.rxpciq[j].rxpciq64 =
1367 lio->linfo.txpciq[j].txpciq64 =
1371 lio->linfo.hw_addr = resp->cfg_info.linfo.hw_addr;
1372 lio->linfo.gmxport = resp->cfg_info.linfo.gmxport;
1373 lio->linfo.link.link_status64 =
1380 lio->oct_dev = octeon_dev;
1381 lio->ifp = ifp;
1384 lio->linfo.gmxport, LIO_CAST64(lio->linfo.hw_addr));
1385 lio_init_ifnet(lio);
1387 lio_swap_8B_data(&lio->linfo.hw_addr, 1);
1390 ((uint8_t *)&lio->linfo.hw_addr) + 2 + j));
1398 lio->txq = lio->linfo.txpciq[0].s.q_no;
1399 lio->rxq = lio->linfo.rxpciq[0].s.q_no;
1400 if (lio_setup_io_queues(octeon_dev, i, lio->linfo.num_txpciq,
1401 lio->linfo.num_rxpciq)) {
1406 lio_ifstate_set(lio, LIO_IFSTATE_DROQ_OPS);
1408 lio->tx_qsize = lio_get_tx_qsize(octeon_dev, lio->txq);
1409 lio->rx_qsize = lio_get_rx_qsize(octeon_dev, lio->rxq);
1411 if (lio_setup_glists(octeon_dev, lio, num_iqueues)) {
1436 lio->link_changes++;
1438 lio_ifstate_set(lio, LIO_IFSTATE_REGISTERED);
1452 if (lio_send_rss_param(lio))
1463 lio->vlan_attach =
1465 lio_vlan_rx_add_vid, lio,
1467 lio->vlan_detach =
1469 lio_vlan_rx_kill_vid, lio,
1473 callout_init(&lio->stats_timer, 0);
1474 lio->stats_interval = LIO_DEFAULT_STATS_INTERVAL;
1476 lio_add_hw_stats(lio);
1539 struct lio *lio;
1545 lio = if_getsoftc(oct->props.ifp);
1547 mtx_lock(&lio->glist_lock[iq_no]);
1548 STAILQ_INSERT_TAIL(&lio->ghead[iq_no], &g->node, entries);
1549 mtx_unlock(&lio->glist_lock[iq_no]);
1594 struct lio *lio = arg;
1595 struct ifnet *ifp = lio->ifp;
1596 struct octeon_device *oct = lio->oct_dev;
1600 lio_ifstate_set(lio, LIO_IFSTATE_RUNNING);
1603 lio->intf_open = 1;
1608 lio_send_rx_ctrl_cmd(lio, 1);
1611 memcpy(mac_old, ((uint8_t *)&lio->linfo.hw_addr) + 2, ETHER_HDR_LEN);
1629 struct lio *lio = if_getsoftc(ifp);
1630 struct octeon_device *oct = lio->oct_dev;
1636 nctrl.iq_no = lio->linfo.txpciq[0].s.q_no;
1638 nctrl.lio = lio;
1641 ret = lio_send_ctrl_pkt(lio->oct_dev, &nctrl);
1654 struct lio *lio;
1667 lio = if_getsoftc(oct->props.ifp);
1670 lio->linfo.rxpciq[j].s.q_no);
1673 callout_drain(&lio->stats_timer);
1684 lio_delete_glists(struct octeon_device *oct, struct lio *lio)
1689 if (lio->glist_lock != NULL) {
1690 free((void *)lio->glist_lock, M_DEVBUF);
1691 lio->glist_lock = NULL;
1694 if (lio->ghead == NULL)
1697 for (i = 0; i < lio->linfo.num_txpciq; i++) {
1700 lio_delete_first_node(&lio->ghead[i]);
1704 if ((lio->glists_virt_base != NULL) &&
1705 (lio->glists_virt_base[i] != NULL)) {
1706 lio_dma_free(lio->glist_entry_size * lio->tx_qsize,
1707 lio->glists_virt_base[i]);
1711 free(lio->glists_virt_base, M_DEVBUF);
1712 lio->glists_virt_base = NULL;
1714 free(lio->glists_dma_base, M_DEVBUF);
1715 lio->glists_dma_base = NULL;
1717 free(lio->ghead, M_DEVBUF);
1718 lio->ghead = NULL;
1722 lio_setup_glists(struct octeon_device *oct, struct lio *lio, int num_iqs)
1727 lio->glist_lock = malloc(num_iqs * sizeof(*lio->glist_lock), M_DEVBUF,
1729 if (lio->glist_lock == NULL)
1732 lio->ghead = malloc(num_iqs * sizeof(*lio->ghead), M_DEVBUF,
1734 if (lio->ghead == NULL) {
1735 free((void *)lio->glist_lock, M_DEVBUF);
1736 lio->glist_lock = NULL;
1740 lio->glist_entry_size = ROUNDUP8((ROUNDUP4(LIO_MAX_SG) >> 2) *
1746 lio->glists_virt_base = malloc(num_iqs * sizeof(void *), M_DEVBUF,
1748 lio->glists_dma_base = malloc(num_iqs * sizeof(vm_paddr_t), M_DEVBUF,
1750 if ((lio->glists_virt_base == NULL) || (lio->glists_dma_base == NULL)) {
1751 lio_delete_glists(oct, lio);
1756 mtx_init(&lio->glist_lock[i], "glist_lock", NULL, MTX_DEF);
1758 STAILQ_INIT(&lio->ghead[i]);
1760 lio->glists_virt_base[i] =
1761 lio_dma_alloc(lio->glist_entry_size * lio->tx_qsize,
1762 (vm_paddr_t *)&lio->glists_dma_base[i]);
1763 if (lio->glists_virt_base[i] == NULL) {
1764 lio_delete_glists(oct, lio);
1768 for (j = 0; j < lio->tx_qsize; j++) {
1774 ((uint64_t)(uintptr_t)lio->glists_virt_base[i] +
1775 (j * lio->glist_entry_size));
1776 g->sg_dma_ptr = (uint64_t)lio->glists_dma_base[i] +
1777 (j * lio->glist_entry_size);
1778 STAILQ_INSERT_TAIL(&lio->ghead[i], &g->node, entries);
1781 if (j != lio->tx_qsize) {
1782 lio_delete_glists(oct, lio);
1793 struct lio *lio = if_getsoftc(ifp);
1794 struct octeon_device *oct = lio->oct_dev;
1796 lio_ifstate_reset(lio, LIO_IFSTATE_RUNNING);
1799 lio->intf_open = 0;
1800 lio->linfo.link.s.link_up = 0;
1801 lio->link_changes++;
1803 lio_send_rx_ctrl_cmd(lio, 0);
1812 lio_check_rx_oom_status(struct lio *lio)
1815 struct octeon_device *oct = lio->oct_dev;
1820 q_no = lio->linfo.rxpciq[q].s.q_no;
1846 struct lio *lio = rx_status_tq->ctxptr;
1848 if (lio_ifstate_check(lio, LIO_IFSTATE_RUNNING))
1849 lio_check_rx_oom_status(lio);
1858 struct lio *lio = if_getsoftc(ifp);
1859 struct octeon_device *oct = lio->oct_dev;
1862 rx_status_tq = &lio->rx_status_tq;
1868 lio_dev_err(oct, "unable to create lio rx oom status tq\n");
1875 rx_status_tq->ctxptr = lio;
1878 "lio%d_rx_oom_status",
1890 struct lio *lio = if_getsoftc(ifp);
1892 if (lio->rx_status_tq.tq != NULL) {
1893 while (taskqueue_cancel_timeout(lio->rx_status_tq.tq,
1894 &lio->rx_status_tq.work, NULL))
1895 taskqueue_drain_timeout(lio->rx_status_tq.tq,
1896 &lio->rx_status_tq.work);
1898 taskqueue_free(lio->rx_status_tq.tq);
1900 lio->rx_status_tq.tq = NULL;
1908 struct lio *lio;
1916 lio = if_getsoftc(ifp);
1918 lio_ifstate_set(lio, LIO_IFSTATE_DETACH);
1922 if (atomic_load_acq_int(&lio->ifstate) & LIO_IFSTATE_RUNNING)
1934 if (atomic_load_acq_int(&lio->ifstate) & LIO_IFSTATE_REGISTERED)
1941 lio_delete_glists(oct, lio);
1943 EVENTHANDLER_DEREGISTER(vlan_config, lio->vlan_attach);
1944 EVENTHANDLER_DEREGISTER(vlan_unconfig, lio->vlan_detach);
1946 free(lio, M_DEVBUF);
1958 struct lio *lio = if_getsoftc(ifp);
1960 if (!lio_ifstate_check(lio, LIO_IFSTATE_RESETTING) &&
1961 lio_ifstate_check(lio, LIO_IFSTATE_REGISTERED)) {
1962 struct octeon_link_info *linfo = &lio->linfo;
1965 lio_dev_info(lio->oct_dev, "%d Mbps %s Duplex UP\n",
1969 lio_dev_info(lio->oct_dev, "Link Down\n");
1977 struct lio *lio = if_getsoftc(ifp);
1978 int changed = (lio->linfo.link.link_status64 != ls->link_status64);
1980 lio->linfo.link.link_status64 = ls->link_status64;
1982 if ((lio->intf_open) && (changed)) {
1984 lio->link_changes++;
1985 if (lio->linfo.link.s.link_up)
2019 lio_send_rx_ctrl_cmd(struct lio *lio, int start_stop)
2024 struct octeon_device *oct = (struct octeon_device *)lio->oct_dev;
2046 sc->iq_no = lio->linfo.txpciq[0].s.q_no;
2074 struct lio *lio = if_getsoftc(ifp);
2075 struct octeon_device *oct = lio->oct_dev;
2089 nctrl.iq_no = lio->linfo.txpciq[0].s.q_no;
2091 nctrl.lio = lio;
2094 ret = lio_send_ctrl_pkt(lio->oct_dev, &nctrl);
2105 struct lio *lio = if_getsoftc(ifp);
2106 struct octeon_device *oct = lio->oct_dev;
2120 nctrl.iq_no = lio->linfo.txpciq[0].s.q_no;
2122 nctrl.lio = lio;
2125 ret = lio_send_ctrl_pkt(lio->oct_dev, &nctrl);