Lines Matching +full:tcs +full:- +full:wait

1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright(c) 2013 - 2019 Intel Corporation. */
103 /* per-queue ring statistics */
168 if (interface->hw.mac.type != fm10k_mac_vf) in fm10k_get_stat_strings()
171 for (i = 0; i < interface->hw.mac.max_queues; i++) { in fm10k_get_stat_strings()
201 struct fm10k_hw *hw = &interface->hw; in fm10k_get_sset_count()
208 stats_len += hw->mac.max_queues * 2 * FM10K_QUEUE_STATS_LEN; in fm10k_get_sset_count()
210 if (hw->mac.type != fm10k_mac_vf) in fm10k_get_sset_count()
217 return -EOPNOTSUPP; in fm10k_get_sset_count()
266 struct net_device_stats *net_stats = &netdev->stats; in fm10k_get_ethtool_stats()
275 fm10k_add_ethtool_stats(&data, &interface->hw.mbx, in fm10k_get_ethtool_stats()
278 if (interface->hw.mac.type != fm10k_mac_vf) { in fm10k_get_ethtool_stats()
283 for (i = 0; i < interface->hw.mac.max_queues; i++) { in fm10k_get_ethtool_stats()
286 ring = interface->tx_ring[i]; in fm10k_get_ethtool_stats()
290 ring = interface->rx_ring[i]; in fm10k_get_ethtool_stats()
356 struct fm10k_hw *hw = &interface->hw; in fm10k_get_regs()
360 regs->version = BIT(24) | (hw->revision_id << 16) | hw->device_id; in fm10k_get_regs()
362 switch (hw->mac.type) { in fm10k_get_regs()
412 if (i < hw->mac.max_queues) in fm10k_get_regs()
434 struct fm10k_hw *hw = &interface->hw; in fm10k_get_regs_len()
436 switch (hw->mac.type) { in fm10k_get_regs_len()
451 strncpy(info->driver, fm10k_driver_name, in fm10k_get_drvinfo()
452 sizeof(info->driver) - 1); in fm10k_get_drvinfo()
453 strncpy(info->bus_info, pci_name(interface->pdev), in fm10k_get_drvinfo()
454 sizeof(info->bus_info) - 1); in fm10k_get_drvinfo()
463 pause->autoneg = 0; in fm10k_get_pauseparam()
464 pause->tx_pause = 1; in fm10k_get_pauseparam()
466 pause->rx_pause = interface->rx_pause ? 1 : 0; in fm10k_get_pauseparam()
473 struct fm10k_hw *hw = &interface->hw; in fm10k_set_pauseparam()
475 if (pause->autoneg || !pause->tx_pause) in fm10k_set_pauseparam()
476 return -EINVAL; in fm10k_set_pauseparam()
478 /* we can only support pause on the PF to avoid head-of-line blocking */ in fm10k_set_pauseparam()
479 if (hw->mac.type == fm10k_mac_pf) in fm10k_set_pauseparam()
480 interface->rx_pause = pause->rx_pause ? ~0 : 0; in fm10k_set_pauseparam()
481 else if (pause->rx_pause) in fm10k_set_pauseparam()
482 return -EINVAL; in fm10k_set_pauseparam()
494 return interface->msg_enable; in fm10k_get_msglevel()
501 interface->msg_enable = data; in fm10k_set_msglevel()
509 ring->rx_max_pending = FM10K_MAX_RXD; in fm10k_get_ringparam()
510 ring->tx_max_pending = FM10K_MAX_TXD; in fm10k_get_ringparam()
511 ring->rx_mini_max_pending = 0; in fm10k_get_ringparam()
512 ring->rx_jumbo_max_pending = 0; in fm10k_get_ringparam()
513 ring->rx_pending = interface->rx_ring_count; in fm10k_get_ringparam()
514 ring->tx_pending = interface->tx_ring_count; in fm10k_get_ringparam()
515 ring->rx_mini_pending = 0; in fm10k_get_ringparam()
516 ring->rx_jumbo_pending = 0; in fm10k_get_ringparam()
527 if ((ring->rx_mini_pending) || (ring->rx_jumbo_pending)) in fm10k_set_ringparam()
528 return -EINVAL; in fm10k_set_ringparam()
530 new_tx_count = clamp_t(u32, ring->tx_pending, in fm10k_set_ringparam()
534 new_rx_count = clamp_t(u32, ring->rx_pending, in fm10k_set_ringparam()
538 if ((new_tx_count == interface->tx_ring_count) && in fm10k_set_ringparam()
539 (new_rx_count == interface->rx_ring_count)) { in fm10k_set_ringparam()
544 while (test_and_set_bit(__FM10K_RESETTING, interface->state)) in fm10k_set_ringparam()
547 if (!netif_running(interface->netdev)) { in fm10k_set_ringparam()
548 for (i = 0; i < interface->num_tx_queues; i++) in fm10k_set_ringparam()
549 interface->tx_ring[i]->count = new_tx_count; in fm10k_set_ringparam()
550 for (i = 0; i < interface->num_rx_queues; i++) in fm10k_set_ringparam()
551 interface->rx_ring[i]->count = new_rx_count; in fm10k_set_ringparam()
552 interface->tx_ring_count = new_tx_count; in fm10k_set_ringparam()
553 interface->rx_ring_count = new_rx_count; in fm10k_set_ringparam()
558 i = max_t(int, interface->num_tx_queues, interface->num_rx_queues); in fm10k_set_ringparam()
562 err = -ENOMEM; in fm10k_set_ringparam()
573 if (new_tx_count != interface->tx_ring_count) { in fm10k_set_ringparam()
574 for (i = 0; i < interface->num_tx_queues; i++) { in fm10k_set_ringparam()
575 memcpy(&temp_ring[i], interface->tx_ring[i], in fm10k_set_ringparam()
582 i--; in fm10k_set_ringparam()
589 for (i = 0; i < interface->num_tx_queues; i++) { in fm10k_set_ringparam()
590 fm10k_free_tx_resources(interface->tx_ring[i]); in fm10k_set_ringparam()
592 memcpy(interface->tx_ring[i], &temp_ring[i], in fm10k_set_ringparam()
596 interface->tx_ring_count = new_tx_count; in fm10k_set_ringparam()
600 if (new_rx_count != interface->rx_ring_count) { in fm10k_set_ringparam()
601 for (i = 0; i < interface->num_rx_queues; i++) { in fm10k_set_ringparam()
602 memcpy(&temp_ring[i], interface->rx_ring[i], in fm10k_set_ringparam()
609 i--; in fm10k_set_ringparam()
616 for (i = 0; i < interface->num_rx_queues; i++) { in fm10k_set_ringparam()
617 fm10k_free_rx_resources(interface->rx_ring[i]); in fm10k_set_ringparam()
619 memcpy(interface->rx_ring[i], &temp_ring[i], in fm10k_set_ringparam()
623 interface->rx_ring_count = new_rx_count; in fm10k_set_ringparam()
630 clear_bit(__FM10K_RESETTING, interface->state); in fm10k_set_ringparam()
641 ec->use_adaptive_tx_coalesce = ITR_IS_ADAPTIVE(interface->tx_itr); in fm10k_get_coalesce()
642 ec->tx_coalesce_usecs = interface->tx_itr & ~FM10K_ITR_ADAPTIVE; in fm10k_get_coalesce()
644 ec->use_adaptive_rx_coalesce = ITR_IS_ADAPTIVE(interface->rx_itr); in fm10k_get_coalesce()
645 ec->rx_coalesce_usecs = interface->rx_itr & ~FM10K_ITR_ADAPTIVE; in fm10k_get_coalesce()
660 if ((ec->rx_coalesce_usecs > FM10K_ITR_MAX) || in fm10k_set_coalesce()
661 (ec->tx_coalesce_usecs > FM10K_ITR_MAX)) in fm10k_set_coalesce()
662 return -EINVAL; in fm10k_set_coalesce()
665 tx_itr = ec->tx_coalesce_usecs; in fm10k_set_coalesce()
666 rx_itr = ec->rx_coalesce_usecs; in fm10k_set_coalesce()
669 if (ec->use_adaptive_tx_coalesce) in fm10k_set_coalesce()
672 if (ec->use_adaptive_rx_coalesce) in fm10k_set_coalesce()
676 interface->tx_itr = tx_itr; in fm10k_set_coalesce()
677 interface->rx_itr = rx_itr; in fm10k_set_coalesce()
680 for (i = 0; i < interface->num_q_vectors; i++) { in fm10k_set_coalesce()
681 struct fm10k_q_vector *qv = interface->q_vector[i]; in fm10k_set_coalesce()
683 qv->tx.itr = tx_itr; in fm10k_set_coalesce()
684 qv->rx.itr = rx_itr; in fm10k_set_coalesce()
693 cmd->data = 0; in fm10k_get_rss_hash_opts()
696 switch (cmd->flow_type) { in fm10k_get_rss_hash_opts()
699 cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3; in fm10k_get_rss_hash_opts()
703 interface->flags)) in fm10k_get_rss_hash_opts()
704 cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3; in fm10k_get_rss_hash_opts()
716 cmd->data |= RXH_IP_SRC | RXH_IP_DST; in fm10k_get_rss_hash_opts()
720 interface->flags)) in fm10k_get_rss_hash_opts()
721 cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3; in fm10k_get_rss_hash_opts()
722 cmd->data |= RXH_IP_SRC | RXH_IP_DST; in fm10k_get_rss_hash_opts()
725 return -EINVAL; in fm10k_get_rss_hash_opts()
735 int ret = -EOPNOTSUPP; in fm10k_get_rxnfc()
737 switch (cmd->cmd) { in fm10k_get_rxnfc()
739 cmd->data = interface->num_rx_queues; in fm10k_get_rxnfc()
756 interface->flags); in fm10k_set_rss_hash_opt()
758 interface->flags); in fm10k_set_rss_hash_opt()
763 if (nfc->data & ~(RXH_IP_SRC | RXH_IP_DST | in fm10k_set_rss_hash_opt()
765 return -EINVAL; in fm10k_set_rss_hash_opt()
767 switch (nfc->flow_type) { in fm10k_set_rss_hash_opt()
770 if (!(nfc->data & RXH_IP_SRC) || in fm10k_set_rss_hash_opt()
771 !(nfc->data & RXH_IP_DST) || in fm10k_set_rss_hash_opt()
772 !(nfc->data & RXH_L4_B_0_1) || in fm10k_set_rss_hash_opt()
773 !(nfc->data & RXH_L4_B_2_3)) in fm10k_set_rss_hash_opt()
774 return -EINVAL; in fm10k_set_rss_hash_opt()
777 if (!(nfc->data & RXH_IP_SRC) || in fm10k_set_rss_hash_opt()
778 !(nfc->data & RXH_IP_DST)) in fm10k_set_rss_hash_opt()
779 return -EINVAL; in fm10k_set_rss_hash_opt()
780 switch (nfc->data & (RXH_L4_B_0_1 | RXH_L4_B_2_3)) { in fm10k_set_rss_hash_opt()
783 interface->flags); in fm10k_set_rss_hash_opt()
787 interface->flags); in fm10k_set_rss_hash_opt()
790 return -EINVAL; in fm10k_set_rss_hash_opt()
794 if (!(nfc->data & RXH_IP_SRC) || in fm10k_set_rss_hash_opt()
795 !(nfc->data & RXH_IP_DST)) in fm10k_set_rss_hash_opt()
796 return -EINVAL; in fm10k_set_rss_hash_opt()
797 switch (nfc->data & (RXH_L4_B_0_1 | RXH_L4_B_2_3)) { in fm10k_set_rss_hash_opt()
800 interface->flags); in fm10k_set_rss_hash_opt()
804 interface->flags); in fm10k_set_rss_hash_opt()
807 return -EINVAL; in fm10k_set_rss_hash_opt()
818 if (!(nfc->data & RXH_IP_SRC) || in fm10k_set_rss_hash_opt()
819 !(nfc->data & RXH_IP_DST) || in fm10k_set_rss_hash_opt()
820 (nfc->data & RXH_L4_B_0_1) || in fm10k_set_rss_hash_opt()
821 (nfc->data & RXH_L4_B_2_3)) in fm10k_set_rss_hash_opt()
822 return -EINVAL; in fm10k_set_rss_hash_opt()
825 return -EINVAL; in fm10k_set_rss_hash_opt()
833 interface->flags)) || in fm10k_set_rss_hash_opt()
835 interface->flags))) { in fm10k_set_rss_hash_opt()
836 struct fm10k_hw *hw = &interface->hw; in fm10k_set_rss_hash_opt()
847 interface->flags)) { in fm10k_set_rss_hash_opt()
852 interface->flags)) { in fm10k_set_rss_hash_opt()
861 netif_warn(interface, drv, interface->netdev, in fm10k_set_rss_hash_opt()
873 int ret = -EOPNOTSUPP; in fm10k_set_rxnfc()
875 switch (cmd->cmd) { in fm10k_set_rxnfc()
888 struct fm10k_hw *hw = &interface->hw; in fm10k_mbx_test()
889 struct fm10k_mbx_info *mbx = &hw->mbx; in fm10k_mbx_test()
892 int err = -EINVAL; in fm10k_mbx_test()
895 if (hw->mac.type != fm10k_mac_vf) in fm10k_mbx_test()
906 mbx->test_result = FM10K_NOT_IMPLEMENTED; in fm10k_mbx_test()
907 err = mbx->ops.enqueue_tx(hw, mbx, test_msg); in fm10k_mbx_test()
910 /* wait up to 1 second for response */ in fm10k_mbx_test()
919 mbx->ops.process(hw, mbx); in fm10k_mbx_test()
922 err = mbx->test_result; in fm10k_mbx_test()
941 struct fm10k_hw *hw = &interface->hw; in fm10k_self_test()
945 if (FM10K_REMOVED(hw->hw_addr)) { in fm10k_self_test()
947 "Interface removed - test blocked\n"); in fm10k_self_test()
948 eth_test->flags |= ETH_TEST_FL_FAILED; in fm10k_self_test()
953 eth_test->flags |= ETH_TEST_FL_FAILED; in fm10k_self_test()
964 return -EINVAL; in fm10k_set_priv_flags()
976 u16 rss_i = interface->ring_feature[RING_F_RSS].indices; in fm10k_write_reta()
977 struct fm10k_hw *hw = &interface->hw; in fm10k_write_reta()
1001 if (interface->reta[i] == reta) in fm10k_write_reta()
1004 interface->reta[i] = reta; in fm10k_write_reta()
1018 u32 reta = interface->reta[i]; in fm10k_get_reta()
1039 rss_i = interface->ring_feature[RING_F_RSS].indices; in fm10k_set_reta()
1040 for (i = fm10k_get_reta_size(netdev); i--;) { in fm10k_set_reta()
1043 return -EINVAL; in fm10k_set_reta()
1070 *(__le32 *)key = cpu_to_le32(interface->rssrk[i]); in fm10k_get_rssh()
1079 struct fm10k_hw *hw = &interface->hw; in fm10k_set_rssh()
1084 return -EOPNOTSUPP; in fm10k_set_rssh()
1093 if (interface->rssrk[i] == rssrk) in fm10k_set_rssh()
1096 interface->rssrk[i] = rssrk; in fm10k_set_rssh()
1106 unsigned int max_combined = interface->hw.mac.max_queues; in fm10k_max_channels()
1107 u8 tcs = netdev_get_num_tc(dev); in fm10k_max_channels() local
1110 if (tcs > 1) in fm10k_max_channels()
1111 max_combined = BIT((fls(max_combined / tcs) - 1)); in fm10k_max_channels()
1122 ch->max_combined = fm10k_max_channels(dev); in fm10k_get_channels()
1125 ch->max_other = NON_Q_VECTORS; in fm10k_get_channels()
1126 ch->other_count = ch->max_other; in fm10k_get_channels()
1129 ch->combined_count = interface->ring_feature[RING_F_RSS].indices; in fm10k_get_channels()
1136 unsigned int count = ch->combined_count; in fm10k_set_channels()
1139 if (!count || ch->rx_count || ch->tx_count) in fm10k_set_channels()
1140 return -EINVAL; in fm10k_set_channels()
1143 if (ch->other_count != NON_Q_VECTORS) in fm10k_set_channels()
1144 return -EINVAL; in fm10k_set_channels()
1148 return -EINVAL; in fm10k_set_channels()
1150 interface->ring_feature[RING_F_RSS].limit = count; in fm10k_set_channels()
1190 dev->ethtool_ops = &fm10k_ethtool_ops; in fm10k_set_ethtool_ops()