Lines Matching full:lif

14 static void ionic_get_stats_strings(struct ionic_lif *lif, u8 *buf)  in ionic_get_stats_strings()  argument
19 ionic_stats_groups[i].get_strings(lif, &buf); in ionic_get_stats_strings()
25 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_stats() local
28 if (test_bit(IONIC_LIF_F_FW_RESET, lif->state)) in ionic_get_stats()
33 ionic_stats_groups[i].get_values(lif, &buf); in ionic_get_stats()
36 static int ionic_get_stats_count(struct ionic_lif *lif) in ionic_get_stats_count() argument
41 num_stats += ionic_stats_groups[i].get_count(lif); in ionic_get_stats_count()
48 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_sset_count() local
53 count = ionic_get_stats_count(lif); in ionic_get_sset_count()
62 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_strings() local
66 ionic_get_stats_strings(lif, buf); in ionic_get_strings()
74 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_drvinfo() local
75 struct ionic *ionic = lif->ionic; in ionic_get_drvinfo()
92 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_regs() local
99 idev = &lif->ionic->idev; in ionic_get_regs()
105 memcpy_fromio(p + offset, lif->ionic->idev.dev_info_regs->words, size); in ionic_get_regs()
115 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_link_ext_stats() local
117 if (lif->ionic->pdev->is_physfn) in ionic_get_link_ext_stats()
118 stats->link_down_events = lif->link_down_count; in ionic_get_link_ext_stats()
124 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_link_ksettings() local
125 struct ionic_dev *idev = &lif->ionic->idev; in ionic_get_link_ksettings()
225 dev_info(lif->ionic->dev, "unknown xcvr type pid=%d / 0x%x\n", in ionic_get_link_ksettings()
252 ks->base.speed = le32_to_cpu(lif->info->status.link_speed); in ionic_get_link_ksettings()
254 if (le16_to_cpu(lif->info->status.link_status)) in ionic_get_link_ksettings()
274 struct ionic_lif *lif = netdev_priv(netdev); in ionic_set_link_ksettings() local
275 struct ionic_dev *idev = &lif->ionic->idev; in ionic_set_link_ksettings()
276 struct ionic *ionic = lif->ionic; in ionic_set_link_ksettings()
279 if (test_bit(IONIC_LIF_F_FW_RESET, lif->state)) in ionic_set_link_ksettings()
308 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_pauseparam() local
313 pause_type = lif->ionic->idev.port_info->config.pause_type; in ionic_get_pauseparam()
323 struct ionic_lif *lif = netdev_priv(netdev); in ionic_set_pauseparam() local
324 struct ionic *ionic = lif->ionic; in ionic_set_pauseparam()
328 if (test_bit(IONIC_LIF_F_FW_RESET, lif->state)) in ionic_set_pauseparam()
341 if (requested_pause == lif->ionic->idev.port_info->config.pause_type) in ionic_set_pauseparam()
345 ionic_dev_cmd_port_pause(&lif->ionic->idev, requested_pause); in ionic_set_pauseparam()
357 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_fecparam() local
359 switch (lif->ionic->idev.port_info->config.fec_type) { in ionic_get_fecparam()
379 struct ionic_lif *lif = netdev_priv(netdev); in ionic_set_fecparam() local
383 if (test_bit(IONIC_LIF_F_FW_RESET, lif->state)) in ionic_set_fecparam()
386 if (lif->ionic->idev.port_info->config.an_enable) { in ionic_set_fecparam()
411 if (fec_type != lif->ionic->idev.port_info->config.fec_type) { in ionic_set_fecparam()
412 mutex_lock(&lif->ionic->dev_cmd_lock); in ionic_set_fecparam()
413 ionic_dev_cmd_port_fec(&lif->ionic->idev, fec_type); in ionic_set_fecparam()
414 ret = ionic_dev_cmd_wait(lif->ionic, DEVCMD_TIMEOUT); in ionic_set_fecparam()
415 mutex_unlock(&lif->ionic->dev_cmd_lock); in ionic_set_fecparam()
426 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_coalesce() local
428 coalesce->tx_coalesce_usecs = lif->tx_coalesce_usecs; in ionic_get_coalesce()
429 coalesce->rx_coalesce_usecs = lif->rx_coalesce_usecs; in ionic_get_coalesce()
431 if (test_bit(IONIC_LIF_F_SPLIT_INTR, lif->state)) in ionic_get_coalesce()
432 coalesce->use_adaptive_tx_coalesce = test_bit(IONIC_LIF_F_TX_DIM_INTR, lif->state); in ionic_get_coalesce()
436 coalesce->use_adaptive_rx_coalesce = test_bit(IONIC_LIF_F_RX_DIM_INTR, lif->state); in ionic_get_coalesce()
446 struct ionic_lif *lif = netdev_priv(netdev); in ionic_set_coalesce() local
452 ident = &lif->ionic->ident; in ionic_set_coalesce()
460 if (!test_bit(IONIC_LIF_F_SPLIT_INTR, lif->state) && in ionic_set_coalesce()
461 (coalesce->tx_coalesce_usecs != lif->rx_coalesce_usecs || in ionic_set_coalesce()
470 rx_coal = ionic_coal_usec_to_hw(lif->ionic, coalesce->rx_coalesce_usecs); in ionic_set_coalesce()
473 tx_coal = ionic_coal_usec_to_hw(lif->ionic, coalesce->tx_coalesce_usecs); in ionic_set_coalesce()
482 lif->rx_coalesce_usecs = coalesce->rx_coalesce_usecs; in ionic_set_coalesce()
483 lif->rx_coalesce_hw = rx_coal; in ionic_set_coalesce()
485 if (test_bit(IONIC_LIF_F_SPLIT_INTR, lif->state)) in ionic_set_coalesce()
486 lif->tx_coalesce_usecs = coalesce->tx_coalesce_usecs; in ionic_set_coalesce()
488 lif->tx_coalesce_usecs = coalesce->rx_coalesce_usecs; in ionic_set_coalesce()
489 lif->tx_coalesce_hw = tx_coal; in ionic_set_coalesce()
492 set_bit(IONIC_LIF_F_RX_DIM_INTR, lif->state); in ionic_set_coalesce()
495 clear_bit(IONIC_LIF_F_RX_DIM_INTR, lif->state); in ionic_set_coalesce()
500 set_bit(IONIC_LIF_F_TX_DIM_INTR, lif->state); in ionic_set_coalesce()
503 clear_bit(IONIC_LIF_F_TX_DIM_INTR, lif->state); in ionic_set_coalesce()
507 if (test_bit(IONIC_LIF_F_UP, lif->state)) { in ionic_set_coalesce()
508 for (i = 0; i < lif->nxqs; i++) { in ionic_set_coalesce()
509 if (lif->rxqcqs[i]->flags & IONIC_QCQ_F_INTR) { in ionic_set_coalesce()
510 ionic_intr_coal_init(lif->ionic->idev.intr_ctrl, in ionic_set_coalesce()
511 lif->rxqcqs[i]->intr.index, in ionic_set_coalesce()
512 lif->rx_coalesce_hw); in ionic_set_coalesce()
513 lif->rxqcqs[i]->intr.dim_coal_hw = rx_dim; in ionic_set_coalesce()
516 if (lif->txqcqs[i]->flags & IONIC_QCQ_F_INTR) { in ionic_set_coalesce()
517 ionic_intr_coal_init(lif->ionic->idev.intr_ctrl, in ionic_set_coalesce()
518 lif->txqcqs[i]->intr.index, in ionic_set_coalesce()
519 lif->tx_coalesce_hw); in ionic_set_coalesce()
520 lif->txqcqs[i]->intr.dim_coal_hw = tx_dim; in ionic_set_coalesce()
528 static int ionic_validate_cmb_config(struct ionic_lif *lif, in ionic_validate_cmb_config() argument
534 if (!lif->ionic->idev.cmb_inuse && in ionic_validate_cmb_config()
536 netdev_info(lif->netdev, "CMB rings are not supported on this device\n"); in ionic_validate_cmb_config()
541 if (!(lif->qtype_info[IONIC_QTYPE_TXQ].features & IONIC_QIDENT_F_CMB)) { in ionic_validate_cmb_config()
542 netdev_info(lif->netdev, in ionic_validate_cmb_config()
552 if (!(lif->qtype_info[IONIC_QTYPE_RXQ].features & IONIC_QIDENT_F_CMB)) { in ionic_validate_cmb_config()
553 netdev_info(lif->netdev, in ionic_validate_cmb_config()
562 pages_have = lif->ionic->bars[IONIC_PCI_BAR_CMB].len / PAGE_SIZE; in ionic_validate_cmb_config()
564 netdev_info(lif->netdev, in ionic_validate_cmb_config()
573 static int ionic_cmb_rings_toggle(struct ionic_lif *lif, bool cmb_tx, bool cmb_rx) in ionic_cmb_rings_toggle() argument
578 if (netif_running(lif->netdev)) { in ionic_cmb_rings_toggle()
579 netdev_info(lif->netdev, "Please stop device to toggle CMB for tx/rx-push\n"); in ionic_cmb_rings_toggle()
583 ionic_init_queue_params(lif, &qparam); in ionic_cmb_rings_toggle()
586 pages_used = ionic_validate_cmb_config(lif, &qparam); in ionic_cmb_rings_toggle()
591 set_bit(IONIC_LIF_F_CMB_TX_RINGS, lif->state); in ionic_cmb_rings_toggle()
593 clear_bit(IONIC_LIF_F_CMB_TX_RINGS, lif->state); in ionic_cmb_rings_toggle()
596 set_bit(IONIC_LIF_F_CMB_RX_RINGS, lif->state); in ionic_cmb_rings_toggle()
598 clear_bit(IONIC_LIF_F_CMB_RX_RINGS, lif->state); in ionic_cmb_rings_toggle()
601 netdev_info(lif->netdev, "Enabling CMB %s %s rings - %d pages\n", in ionic_cmb_rings_toggle()
604 netdev_info(lif->netdev, "Disabling CMB rings\n"); in ionic_cmb_rings_toggle()
614 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_ringparam() local
617 ring->tx_pending = lif->ntxq_descs; in ionic_get_ringparam()
619 ring->rx_pending = lif->nrxq_descs; in ionic_get_ringparam()
620 kernel_ring->tx_push = test_bit(IONIC_LIF_F_CMB_TX_RINGS, lif->state); in ionic_get_ringparam()
621 kernel_ring->rx_push = test_bit(IONIC_LIF_F_CMB_RX_RINGS, lif->state); in ionic_get_ringparam()
629 struct ionic_lif *lif = netdev_priv(netdev); in ionic_set_ringparam() local
633 if (test_bit(IONIC_LIF_F_FW_RESET, lif->state)) in ionic_set_ringparam()
636 ionic_init_queue_params(lif, &qparam); in ionic_set_ringparam()
650 if (ring->tx_pending == lif->ntxq_descs && in ionic_set_ringparam()
651 ring->rx_pending == lif->nrxq_descs && in ionic_set_ringparam()
652 kernel_ring->tx_push == test_bit(IONIC_LIF_F_CMB_TX_RINGS, lif->state) && in ionic_set_ringparam()
653 kernel_ring->rx_push == test_bit(IONIC_LIF_F_CMB_RX_RINGS, lif->state)) in ionic_set_ringparam()
661 err = ionic_validate_cmb_config(lif, &qparam); in ionic_set_ringparam()
665 if (kernel_ring->tx_push != test_bit(IONIC_LIF_F_CMB_TX_RINGS, lif->state) || in ionic_set_ringparam()
666 kernel_ring->rx_push != test_bit(IONIC_LIF_F_CMB_RX_RINGS, lif->state)) { in ionic_set_ringparam()
667 err = ionic_cmb_rings_toggle(lif, kernel_ring->tx_push, in ionic_set_ringparam()
673 if (ring->tx_pending != lif->ntxq_descs) in ionic_set_ringparam()
675 lif->ntxq_descs, ring->tx_pending); in ionic_set_ringparam()
677 if (ring->rx_pending != lif->nrxq_descs) in ionic_set_ringparam()
679 lif->nrxq_descs, ring->rx_pending); in ionic_set_ringparam()
682 if (!netif_running(lif->netdev)) { in ionic_set_ringparam()
683 lif->ntxq_descs = ring->tx_pending; in ionic_set_ringparam()
684 lif->nrxq_descs = ring->rx_pending; in ionic_set_ringparam()
688 mutex_lock(&lif->queue_lock); in ionic_set_ringparam()
689 err = ionic_reconfigure_queues(lif, &qparam); in ionic_set_ringparam()
690 mutex_unlock(&lif->queue_lock); in ionic_set_ringparam()
700 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_channels() local
703 ch->max_combined = lif->ionic->ntxqs_per_lif; in ionic_get_channels()
704 ch->max_rx = lif->ionic->ntxqs_per_lif / 2; in ionic_get_channels()
705 ch->max_tx = lif->ionic->ntxqs_per_lif / 2; in ionic_get_channels()
708 if (test_bit(IONIC_LIF_F_SPLIT_INTR, lif->state)) { in ionic_get_channels()
709 ch->rx_count = lif->nxqs; in ionic_get_channels()
710 ch->tx_count = lif->nxqs; in ionic_get_channels()
712 ch->combined_count = lif->nxqs; in ionic_get_channels()
719 struct ionic_lif *lif = netdev_priv(netdev); in ionic_set_channels() local
724 if (test_bit(IONIC_LIF_F_FW_RESET, lif->state)) in ionic_set_channels()
727 ionic_init_queue_params(lif, &qparam); in ionic_set_channels()
739 max_cnt = lif->ionic->ntxqs_per_lif; in ionic_set_channels()
744 if (test_bit(IONIC_LIF_F_SPLIT_INTR, lif->state)) in ionic_set_channels()
745 netdev_info(lif->netdev, "Sharing queue interrupts\n"); in ionic_set_channels()
746 else if (ch->combined_count == lif->nxqs) in ionic_set_channels()
749 if (lif->nxqs != ch->combined_count) in ionic_set_channels()
751 lif->nxqs, ch->combined_count); in ionic_set_channels()
760 if (!test_bit(IONIC_LIF_F_SPLIT_INTR, lif->state)) in ionic_set_channels()
761 netdev_info(lif->netdev, "Splitting queue interrupts\n"); in ionic_set_channels()
762 else if (ch->rx_count == lif->nxqs) in ionic_set_channels()
765 if (lif->nxqs != ch->rx_count) in ionic_set_channels()
767 lif->nxqs, ch->rx_count); in ionic_set_channels()
773 err = ionic_validate_cmb_config(lif, &qparam); in ionic_set_channels()
778 if (!netif_running(lif->netdev)) { in ionic_set_channels()
779 lif->nxqs = qparam.nxqs; in ionic_set_channels()
782 set_bit(IONIC_LIF_F_SPLIT_INTR, lif->state); in ionic_set_channels()
784 clear_bit(IONIC_LIF_F_SPLIT_INTR, lif->state); in ionic_set_channels()
785 lif->tx_coalesce_usecs = lif->rx_coalesce_usecs; in ionic_set_channels()
786 lif->tx_coalesce_hw = lif->rx_coalesce_hw; in ionic_set_channels()
791 mutex_lock(&lif->queue_lock); in ionic_set_channels()
792 err = ionic_reconfigure_queues(lif, &qparam); in ionic_set_channels()
793 mutex_unlock(&lif->queue_lock); in ionic_set_channels()
803 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_rxnfc() local
808 info->data = lif->nxqs; in ionic_get_rxnfc()
821 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_rxfh_indir_size() local
823 return le16_to_cpu(lif->ionic->ident.lif.eth.rss_ind_tbl_sz); in ionic_get_rxfh_indir_size()
834 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_rxfh() local
838 tbl_sz = le16_to_cpu(lif->ionic->ident.lif.eth.rss_ind_tbl_sz); in ionic_get_rxfh()
840 indir[i] = lif->rss_ind_tbl[i]; in ionic_get_rxfh()
844 memcpy(key, lif->rss_hash_key, IONIC_RSS_HASH_KEY_SIZE); in ionic_get_rxfh()
855 struct ionic_lif *lif = netdev_priv(netdev); in ionic_set_rxfh() local
860 return ionic_lif_rss_config(lif, lif->rss_types, key, indir); in ionic_set_rxfh()
867 struct ionic_lif *lif = netdev_priv(dev); in ionic_set_tunable() local
871 lif->rx_copybreak = *(u32 *)data; in ionic_set_tunable()
883 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_tunable() local
887 *(u32 *)data = lif->rx_copybreak; in ionic_get_tunable()
900 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_module_info() local
901 struct ionic_dev *idev = &lif->ionic->idev; in ionic_get_module_info()
934 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_module_eeprom() local
935 struct ionic_dev *idev = &lif->ionic->idev; in ionic_get_module_eeprom()
966 struct ionic_lif *lif = netdev_priv(netdev); in ionic_get_ts_info() local
967 struct ionic *ionic = lif->ionic; in ionic_get_ts_info()
970 if (!lif->phc || !lif->phc->ptp) in ionic_get_ts_info()
973 info->phc_index = ptp_clock_index(lif->phc->ptp); in ionic_get_ts_info()
988 if (ionic->ident.lif.eth.hwstamp_tx_modes & mask) in ionic_get_ts_info()
992 if (ionic->ident.lif.eth.hwstamp_tx_modes & mask) in ionic_get_ts_info()
1001 if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) == mask) in ionic_get_ts_info()
1005 if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) == mask) in ionic_get_ts_info()
1009 if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) == mask) in ionic_get_ts_info()
1013 if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) == mask) in ionic_get_ts_info()
1017 if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) == mask) in ionic_get_ts_info()
1021 if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) == mask) in ionic_get_ts_info()
1025 if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) == mask) in ionic_get_ts_info()
1029 if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) == mask) in ionic_get_ts_info()
1033 if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) == mask) in ionic_get_ts_info()
1037 if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) == mask) in ionic_get_ts_info()
1041 if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) == mask) in ionic_get_ts_info()
1045 if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) == mask) in ionic_get_ts_info()
1049 if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) == mask) in ionic_get_ts_info()
1057 struct ionic_lif *lif = netdev_priv(netdev); in ionic_nway_reset() local
1058 struct ionic *ionic = lif->ionic; in ionic_nway_reset()
1061 if (test_bit(IONIC_LIF_F_FW_RESET, lif->state)) in ionic_nway_reset()