Lines Matching refs:lif
16 static void ionic_get_stats_strings(struct ionic_lif *lif, u8 *buf) in ionic_get_stats_strings() argument
21 ionic_stats_groups[i].get_strings(lif, &buf); in ionic_get_stats_strings()
27 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_stats() local
30 if (test_bit(IONIC_LIF_F_FW_RESET, lif->state)) in ionic_get_stats()
35 ionic_stats_groups[i].get_values(lif, &buf); in ionic_get_stats()
38 static int ionic_get_stats_count(struct ionic_lif *lif) in ionic_get_stats_count() argument
43 num_stats += ionic_stats_groups[i].get_count(lif); in ionic_get_stats_count()
50 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_sset_count() local
55 count = ionic_get_stats_count(lif); in ionic_get_sset_count()
64 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_strings() local
68 ionic_get_stats_strings(lif, buf); in ionic_get_strings()
76 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_drvinfo() local
77 struct ionic *ionic = lif->ionic; in ionic_get_drvinfo()
94 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_regs() local
101 idev = &lif->ionic->idev; in ionic_get_regs()
107 memcpy_fromio(p + offset, lif->ionic->idev.dev_info_regs->words, size); in ionic_get_regs()
117 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_link_ext_stats() local
119 if (lif->ionic->pdev->is_physfn) in ionic_get_link_ext_stats()
120 stats->link_down_events = lif->link_down_count; in ionic_get_link_ext_stats()
126 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_link_ksettings() local
127 struct ionic_dev *idev = &lif->ionic->idev; in ionic_get_link_ksettings()
266 dev_info(lif->ionic->dev, "unknown xcvr type pid=%d / 0x%x\n", in ionic_get_link_ksettings()
293 ks->base.speed = le32_to_cpu(lif->info->status.link_speed); in ionic_get_link_ksettings()
295 if (le16_to_cpu(lif->info->status.link_status)) in ionic_get_link_ksettings()
315 struct ionic_lif *lif = netdev_priv(netdev); in ionic_set_link_ksettings() local
316 struct ionic_dev *idev = &lif->ionic->idev; in ionic_set_link_ksettings()
317 struct ionic *ionic = lif->ionic; in ionic_set_link_ksettings()
320 if (test_bit(IONIC_LIF_F_FW_RESET, lif->state)) in ionic_set_link_ksettings()
349 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_pauseparam() local
354 pause_type = lif->ionic->idev.port_info->config.pause_type; in ionic_get_pauseparam()
364 struct ionic_lif *lif = netdev_priv(netdev); in ionic_set_pauseparam() local
365 struct ionic *ionic = lif->ionic; in ionic_set_pauseparam()
369 if (test_bit(IONIC_LIF_F_FW_RESET, lif->state)) in ionic_set_pauseparam()
382 if (requested_pause == lif->ionic->idev.port_info->config.pause_type) in ionic_set_pauseparam()
386 ionic_dev_cmd_port_pause(&lif->ionic->idev, requested_pause); in ionic_set_pauseparam()
398 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_fecparam() local
400 switch (lif->ionic->idev.port_info->config.fec_type) { in ionic_get_fecparam()
420 struct ionic_lif *lif = netdev_priv(netdev); in ionic_set_fecparam() local
424 if (test_bit(IONIC_LIF_F_FW_RESET, lif->state)) in ionic_set_fecparam()
427 if (lif->ionic->idev.port_info->config.an_enable) { in ionic_set_fecparam()
452 if (fec_type != lif->ionic->idev.port_info->config.fec_type) { in ionic_set_fecparam()
453 mutex_lock(&lif->ionic->dev_cmd_lock); in ionic_set_fecparam()
454 ionic_dev_cmd_port_fec(&lif->ionic->idev, fec_type); in ionic_set_fecparam()
455 ret = ionic_dev_cmd_wait(lif->ionic, DEVCMD_TIMEOUT); in ionic_set_fecparam()
456 mutex_unlock(&lif->ionic->dev_cmd_lock); in ionic_set_fecparam()
467 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_coalesce() local
469 coalesce->tx_coalesce_usecs = lif->tx_coalesce_usecs; in ionic_get_coalesce()
470 coalesce->rx_coalesce_usecs = lif->rx_coalesce_usecs; in ionic_get_coalesce()
472 if (test_bit(IONIC_LIF_F_SPLIT_INTR, lif->state)) in ionic_get_coalesce()
473 coalesce->use_adaptive_tx_coalesce = test_bit(IONIC_LIF_F_TX_DIM_INTR, lif->state); in ionic_get_coalesce()
477 coalesce->use_adaptive_rx_coalesce = test_bit(IONIC_LIF_F_RX_DIM_INTR, lif->state); in ionic_get_coalesce()
487 struct ionic_lif *lif = netdev_priv(netdev); in ionic_set_coalesce() local
493 ident = &lif->ionic->ident; in ionic_set_coalesce()
501 if (!test_bit(IONIC_LIF_F_SPLIT_INTR, lif->state) && in ionic_set_coalesce()
502 (coalesce->tx_coalesce_usecs != lif->rx_coalesce_usecs || in ionic_set_coalesce()
511 rx_coal = ionic_coal_usec_to_hw(lif->ionic, coalesce->rx_coalesce_usecs); in ionic_set_coalesce()
514 tx_coal = ionic_coal_usec_to_hw(lif->ionic, coalesce->tx_coalesce_usecs); in ionic_set_coalesce()
523 lif->rx_coalesce_usecs = coalesce->rx_coalesce_usecs; in ionic_set_coalesce()
524 lif->rx_coalesce_hw = rx_coal; in ionic_set_coalesce()
526 if (test_bit(IONIC_LIF_F_SPLIT_INTR, lif->state)) in ionic_set_coalesce()
527 lif->tx_coalesce_usecs = coalesce->tx_coalesce_usecs; in ionic_set_coalesce()
529 lif->tx_coalesce_usecs = coalesce->rx_coalesce_usecs; in ionic_set_coalesce()
530 lif->tx_coalesce_hw = tx_coal; in ionic_set_coalesce()
533 set_bit(IONIC_LIF_F_RX_DIM_INTR, lif->state); in ionic_set_coalesce()
536 clear_bit(IONIC_LIF_F_RX_DIM_INTR, lif->state); in ionic_set_coalesce()
541 set_bit(IONIC_LIF_F_TX_DIM_INTR, lif->state); in ionic_set_coalesce()
544 clear_bit(IONIC_LIF_F_TX_DIM_INTR, lif->state); in ionic_set_coalesce()
548 if (test_bit(IONIC_LIF_F_UP, lif->state)) { in ionic_set_coalesce()
549 for (i = 0; i < lif->nxqs; i++) { in ionic_set_coalesce()
550 if (lif->rxqcqs[i]->flags & IONIC_QCQ_F_INTR) { in ionic_set_coalesce()
551 ionic_intr_coal_init(lif->ionic->idev.intr_ctrl, in ionic_set_coalesce()
552 lif->rxqcqs[i]->intr.index, in ionic_set_coalesce()
553 lif->rx_coalesce_hw); in ionic_set_coalesce()
554 lif->rxqcqs[i]->intr.dim_coal_hw = rx_dim; in ionic_set_coalesce()
557 if (lif->txqcqs[i]->flags & IONIC_QCQ_F_INTR) { in ionic_set_coalesce()
558 ionic_intr_coal_init(lif->ionic->idev.intr_ctrl, in ionic_set_coalesce()
559 lif->txqcqs[i]->intr.index, in ionic_set_coalesce()
560 lif->tx_coalesce_hw); in ionic_set_coalesce()
561 lif->txqcqs[i]->intr.dim_coal_hw = tx_dim; in ionic_set_coalesce()
569 static int ionic_validate_cmb_config(struct ionic_lif *lif, in ionic_validate_cmb_config() argument
575 if (!lif->ionic->idev.cmb_inuse && in ionic_validate_cmb_config()
577 netdev_info(lif->netdev, "CMB rings are not supported on this device\n"); in ionic_validate_cmb_config()
582 if (!(lif->qtype_info[IONIC_QTYPE_TXQ].features & IONIC_QIDENT_F_CMB)) { in ionic_validate_cmb_config()
583 netdev_info(lif->netdev, in ionic_validate_cmb_config()
593 if (!(lif->qtype_info[IONIC_QTYPE_RXQ].features & IONIC_QIDENT_F_CMB)) { in ionic_validate_cmb_config()
594 netdev_info(lif->netdev, in ionic_validate_cmb_config()
603 pages_have = lif->ionic->bars[IONIC_PCI_BAR_CMB].len / PAGE_SIZE; in ionic_validate_cmb_config()
605 netdev_info(lif->netdev, in ionic_validate_cmb_config()
614 static int ionic_cmb_rings_toggle(struct ionic_lif *lif, bool cmb_tx, bool cmb_rx) in ionic_cmb_rings_toggle() argument
619 if (netif_running(lif->netdev)) { in ionic_cmb_rings_toggle()
620 netdev_info(lif->netdev, "Please stop device to toggle CMB for tx/rx-push\n"); in ionic_cmb_rings_toggle()
624 ionic_init_queue_params(lif, &qparam); in ionic_cmb_rings_toggle()
627 pages_used = ionic_validate_cmb_config(lif, &qparam); in ionic_cmb_rings_toggle()
632 set_bit(IONIC_LIF_F_CMB_TX_RINGS, lif->state); in ionic_cmb_rings_toggle()
634 clear_bit(IONIC_LIF_F_CMB_TX_RINGS, lif->state); in ionic_cmb_rings_toggle()
637 set_bit(IONIC_LIF_F_CMB_RX_RINGS, lif->state); in ionic_cmb_rings_toggle()
639 clear_bit(IONIC_LIF_F_CMB_RX_RINGS, lif->state); in ionic_cmb_rings_toggle()
642 netdev_info(lif->netdev, "Enabling CMB %s %s rings - %d pages\n", in ionic_cmb_rings_toggle()
645 netdev_info(lif->netdev, "Disabling CMB rings\n"); in ionic_cmb_rings_toggle()
655 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_ringparam() local
658 ring->tx_pending = lif->ntxq_descs; in ionic_get_ringparam()
660 ring->rx_pending = lif->nrxq_descs; in ionic_get_ringparam()
661 kernel_ring->tx_push = test_bit(IONIC_LIF_F_CMB_TX_RINGS, lif->state); in ionic_get_ringparam()
662 kernel_ring->rx_push = test_bit(IONIC_LIF_F_CMB_RX_RINGS, lif->state); in ionic_get_ringparam()
670 struct ionic_lif *lif = netdev_priv(netdev); in ionic_set_ringparam() local
674 if (test_bit(IONIC_LIF_F_FW_RESET, lif->state)) in ionic_set_ringparam()
677 ionic_init_queue_params(lif, &qparam); in ionic_set_ringparam()
691 if (ring->tx_pending == lif->ntxq_descs && in ionic_set_ringparam()
692 ring->rx_pending == lif->nrxq_descs && in ionic_set_ringparam()
693 kernel_ring->tx_push == test_bit(IONIC_LIF_F_CMB_TX_RINGS, lif->state) && in ionic_set_ringparam()
694 kernel_ring->rx_push == test_bit(IONIC_LIF_F_CMB_RX_RINGS, lif->state)) in ionic_set_ringparam()
702 err = ionic_validate_cmb_config(lif, &qparam); in ionic_set_ringparam()
706 if (kernel_ring->tx_push != test_bit(IONIC_LIF_F_CMB_TX_RINGS, lif->state) || in ionic_set_ringparam()
707 kernel_ring->rx_push != test_bit(IONIC_LIF_F_CMB_RX_RINGS, lif->state)) { in ionic_set_ringparam()
708 err = ionic_cmb_rings_toggle(lif, kernel_ring->tx_push, in ionic_set_ringparam()
714 if (ring->tx_pending != lif->ntxq_descs) in ionic_set_ringparam()
716 lif->ntxq_descs, ring->tx_pending); in ionic_set_ringparam()
718 if (ring->rx_pending != lif->nrxq_descs) in ionic_set_ringparam()
720 lif->nrxq_descs, ring->rx_pending); in ionic_set_ringparam()
723 if (!netif_running(lif->netdev)) { in ionic_set_ringparam()
724 lif->ntxq_descs = ring->tx_pending; in ionic_set_ringparam()
725 lif->nrxq_descs = ring->rx_pending; in ionic_set_ringparam()
729 mutex_lock(&lif->queue_lock); in ionic_set_ringparam()
730 err = ionic_reconfigure_queues(lif, &qparam); in ionic_set_ringparam()
731 mutex_unlock(&lif->queue_lock); in ionic_set_ringparam()
741 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_channels() local
744 ch->max_combined = lif->ionic->ntxqs_per_lif; in ionic_get_channels()
745 ch->max_rx = lif->ionic->ntxqs_per_lif / 2; in ionic_get_channels()
746 ch->max_tx = lif->ionic->ntxqs_per_lif / 2; in ionic_get_channels()
749 if (test_bit(IONIC_LIF_F_SPLIT_INTR, lif->state)) { in ionic_get_channels()
750 ch->rx_count = lif->nxqs; in ionic_get_channels()
751 ch->tx_count = lif->nxqs; in ionic_get_channels()
753 ch->combined_count = lif->nxqs; in ionic_get_channels()
760 struct ionic_lif *lif = netdev_priv(netdev); in ionic_set_channels() local
765 if (test_bit(IONIC_LIF_F_FW_RESET, lif->state)) in ionic_set_channels()
768 ionic_init_queue_params(lif, &qparam); in ionic_set_channels()
770 if ((ch->rx_count || ch->tx_count) && lif->xdp_prog) { in ionic_set_channels()
771 netdev_info(lif->netdev, "Split Tx/Rx interrupts not available when using XDP\n"); in ionic_set_channels()
785 max_cnt = lif->ionic->ntxqs_per_lif; in ionic_set_channels()
790 if (test_bit(IONIC_LIF_F_SPLIT_INTR, lif->state)) in ionic_set_channels()
791 netdev_info(lif->netdev, "Sharing queue interrupts\n"); in ionic_set_channels()
792 else if (ch->combined_count == lif->nxqs) in ionic_set_channels()
795 if (lif->nxqs != ch->combined_count) in ionic_set_channels()
797 lif->nxqs, ch->combined_count); in ionic_set_channels()
806 if (!test_bit(IONIC_LIF_F_SPLIT_INTR, lif->state)) in ionic_set_channels()
807 netdev_info(lif->netdev, "Splitting queue interrupts\n"); in ionic_set_channels()
808 else if (ch->rx_count == lif->nxqs) in ionic_set_channels()
811 if (lif->nxqs != ch->rx_count) in ionic_set_channels()
813 lif->nxqs, ch->rx_count); in ionic_set_channels()
819 err = ionic_validate_cmb_config(lif, &qparam); in ionic_set_channels()
824 if (!netif_running(lif->netdev)) { in ionic_set_channels()
825 lif->nxqs = qparam.nxqs; in ionic_set_channels()
828 set_bit(IONIC_LIF_F_SPLIT_INTR, lif->state); in ionic_set_channels()
830 clear_bit(IONIC_LIF_F_SPLIT_INTR, lif->state); in ionic_set_channels()
831 lif->tx_coalesce_usecs = lif->rx_coalesce_usecs; in ionic_set_channels()
832 lif->tx_coalesce_hw = lif->rx_coalesce_hw; in ionic_set_channels()
837 mutex_lock(&lif->queue_lock); in ionic_set_channels()
838 err = ionic_reconfigure_queues(lif, &qparam); in ionic_set_channels()
839 mutex_unlock(&lif->queue_lock); in ionic_set_channels()
849 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_rxnfc() local
854 info->data = lif->nxqs; in ionic_get_rxnfc()
867 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_rxfh_indir_size() local
869 return le16_to_cpu(lif->ionic->ident.lif.eth.rss_ind_tbl_sz); in ionic_get_rxfh_indir_size()
880 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_rxfh() local
884 tbl_sz = le16_to_cpu(lif->ionic->ident.lif.eth.rss_ind_tbl_sz); in ionic_get_rxfh()
886 rxfh->indir[i] = lif->rss_ind_tbl[i]; in ionic_get_rxfh()
890 memcpy(rxfh->key, lif->rss_hash_key, IONIC_RSS_HASH_KEY_SIZE); in ionic_get_rxfh()
901 struct ionic_lif *lif = netdev_priv(netdev); in ionic_set_rxfh() local
907 return ionic_lif_rss_config(lif, lif->rss_types, in ionic_set_rxfh()
915 struct ionic_lif *lif = netdev_priv(dev); in ionic_set_tunable() local
926 lif->rx_copybreak = (u16)rx_copybreak; in ionic_set_tunable()
938 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_tunable() local
942 *(u32 *)data = lif->rx_copybreak; in ionic_get_tunable()
955 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_module_info() local
956 struct ionic_dev *idev = &lif->ionic->idev; in ionic_get_module_info()
990 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_module_eeprom() local
991 struct ionic_dev *idev = &lif->ionic->idev; in ionic_get_module_eeprom()
1022 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_ts_info() local
1023 struct ionic *ionic = lif->ionic; in ionic_get_ts_info()
1026 if (!lif->phc || !lif->phc->ptp) in ionic_get_ts_info()
1029 info->phc_index = ptp_clock_index(lif->phc->ptp); in ionic_get_ts_info()
1042 if (ionic->ident.lif.eth.hwstamp_tx_modes & mask) in ionic_get_ts_info()
1046 if (ionic->ident.lif.eth.hwstamp_tx_modes & mask) in ionic_get_ts_info()
1055 if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) == mask) in ionic_get_ts_info()
1059 if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) == mask) in ionic_get_ts_info()
1063 if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) == mask) in ionic_get_ts_info()
1067 if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) == mask) in ionic_get_ts_info()
1071 if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) == mask) in ionic_get_ts_info()
1075 if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) == mask) in ionic_get_ts_info()
1079 if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) == mask) in ionic_get_ts_info()
1083 if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) == mask) in ionic_get_ts_info()
1087 if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) == mask) in ionic_get_ts_info()
1091 if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) == mask) in ionic_get_ts_info()
1095 if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) == mask) in ionic_get_ts_info()
1099 if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) == mask) in ionic_get_ts_info()
1103 if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) == mask) in ionic_get_ts_info()
1111 struct ionic_lif *lif = netdev_priv(netdev); in ionic_nway_reset() local
1112 struct ionic *ionic = lif->ionic; in ionic_nway_reset()
1115 if (test_bit(IONIC_LIF_F_FW_RESET, lif->state)) in ionic_nway_reset()