Lines Matching +full:dont +full:- +full:validate

1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright(c) 2013 - 2018 Intel Corporation. */
20 struct iavf_hw *hw = &adapter->hw; in iavf_send_pf_msg()
23 if (adapter->flags & IAVF_FLAG_PF_COMMS_FAILED) in iavf_send_pf_msg()
28 dev_dbg(&adapter->pdev->dev, "Unable to send opcode %d to PF, status %s, aq_err %s\n", in iavf_send_pf_msg()
30 iavf_aq_str(hw, hw->aq.asq_last_status)); in iavf_send_pf_msg()
79 (enum virtchnl_ops)le32_to_cpu(event->desc.cookie_high); in iavf_poll_virtchnl_msg()
84 v_retval = le32_to_cpu(event->desc.cookie_low); in iavf_poll_virtchnl_msg()
93 * initialized. Returns 0 if API versions match, -EIO if they do not,
105 return -ENOMEM; in iavf_verify_api_ver()
107 err = iavf_poll_virtchnl_msg(&adapter->hw, &event, VIRTCHNL_OP_VERSION); in iavf_verify_api_ver()
111 adapter->pf_version = *pf_vvi; in iavf_verify_api_ver()
113 if (pf_vvi->major > VIRTCHNL_VERSION_MAJOR || in iavf_verify_api_ver()
114 (pf_vvi->major == VIRTCHNL_VERSION_MAJOR && in iavf_verify_api_ver()
115 pf_vvi->minor > VIRTCHNL_VERSION_MINOR)) in iavf_verify_api_ver()
116 err = -EIO; in iavf_verify_api_ver()
153 adapter->current_op = VIRTCHNL_OP_GET_VF_RESOURCES; in iavf_send_vf_config_msg()
154 adapter->aq_required &= ~IAVF_FLAG_AQ_GET_CONFIG; in iavf_send_vf_config_msg()
165 adapter->aq_required &= ~IAVF_FLAG_AQ_GET_OFFLOAD_VLAN_V2_CAPS; in iavf_send_vf_offload_vlan_v2_msg()
168 return -EOPNOTSUPP; in iavf_send_vf_offload_vlan_v2_msg()
170 adapter->current_op = VIRTCHNL_OP_GET_OFFLOAD_VLAN_V2_CAPS; in iavf_send_vf_offload_vlan_v2_msg()
180 * Validate that the number of queues the PF has sent in
185 if (adapter->vf_res->num_queue_pairs > IAVF_MAX_REQ_QUEUES) { in iavf_validate_num_queues()
189 dev_info(&adapter->pdev->dev, "Received %d queues, but can only have a max of %d\n", in iavf_validate_num_queues()
190 adapter->vf_res->num_queue_pairs, in iavf_validate_num_queues()
192 dev_info(&adapter->pdev->dev, "Fixing by reducing queues to %d\n", in iavf_validate_num_queues()
194 adapter->vf_res->num_queue_pairs = IAVF_MAX_REQ_QUEUES; in iavf_validate_num_queues()
195 for (i = 0; i < adapter->vf_res->num_vsis; i++) { in iavf_validate_num_queues()
196 vsi_res = &adapter->vf_res->vsi_res[i]; in iavf_validate_num_queues()
197 vsi_res->num_queue_pairs = IAVF_MAX_REQ_QUEUES; in iavf_validate_num_queues()
213 struct iavf_hw *hw = &adapter->hw; in iavf_get_vf_config()
222 return -ENOMEM; in iavf_get_vf_config()
225 memcpy(adapter->vf_res, event.msg_buf, min(event.msg_len, len)); in iavf_get_vf_config()
227 /* some PFs send more queues than we should have so validate that in iavf_get_vf_config()
232 iavf_vf_parse_hw_config(hw, adapter->vf_res); in iavf_get_vf_config()
249 return -ENOMEM; in iavf_get_vf_vlan_v2_caps()
251 err = iavf_poll_virtchnl_msg(&adapter->hw, &event, in iavf_get_vf_vlan_v2_caps()
254 memcpy(&adapter->vlan_v2_caps, event.msg_buf, in iavf_get_vf_vlan_v2_caps()
271 int i, max_frame = adapter->vf_res->max_mtu; in iavf_configure_queues()
272 int pairs = adapter->num_active_queues; in iavf_configure_queues()
279 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_configure_queues()
281 dev_err(&adapter->pdev->dev, "Cannot configure queues, command %d pending\n", in iavf_configure_queues()
282 adapter->current_op); in iavf_configure_queues()
285 adapter->current_op = VIRTCHNL_OP_CONFIG_VSI_QUEUES; in iavf_configure_queues()
292 if (!(adapter->flags & IAVF_FLAG_LEGACY_RX) && in iavf_configure_queues()
293 (adapter->netdev->mtu <= ETH_DATA_LEN)) in iavf_configure_queues()
294 max_frame = IAVF_RXBUFFER_1536 - NET_IP_ALIGN; in iavf_configure_queues()
296 vqci->vsi_id = adapter->vsi_res->vsi_id; in iavf_configure_queues()
297 vqci->num_queue_pairs = pairs; in iavf_configure_queues()
298 vqpi = vqci->qpair; in iavf_configure_queues()
299 /* Size check is not needed here - HW max is 16 queue pairs, and we in iavf_configure_queues()
303 vqpi->txq.vsi_id = vqci->vsi_id; in iavf_configure_queues()
304 vqpi->txq.queue_id = i; in iavf_configure_queues()
305 vqpi->txq.ring_len = adapter->tx_rings[i].count; in iavf_configure_queues()
306 vqpi->txq.dma_ring_addr = adapter->tx_rings[i].dma; in iavf_configure_queues()
307 vqpi->rxq.vsi_id = vqci->vsi_id; in iavf_configure_queues()
308 vqpi->rxq.queue_id = i; in iavf_configure_queues()
309 vqpi->rxq.ring_len = adapter->rx_rings[i].count; in iavf_configure_queues()
310 vqpi->rxq.dma_ring_addr = adapter->rx_rings[i].dma; in iavf_configure_queues()
311 vqpi->rxq.max_pkt_size = max_frame; in iavf_configure_queues()
312 vqpi->rxq.databuffer_size = in iavf_configure_queues()
313 ALIGN(adapter->rx_rings[i].rx_buf_len, in iavf_configure_queues()
318 adapter->aq_required &= ~IAVF_FLAG_AQ_CONFIGURE_QUEUES; in iavf_configure_queues()
334 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_enable_queues()
336 dev_err(&adapter->pdev->dev, "Cannot enable queues, command %d pending\n", in iavf_enable_queues()
337 adapter->current_op); in iavf_enable_queues()
340 adapter->current_op = VIRTCHNL_OP_ENABLE_QUEUES; in iavf_enable_queues()
341 vqs.vsi_id = adapter->vsi_res->vsi_id; in iavf_enable_queues()
342 vqs.tx_queues = BIT(adapter->num_active_queues) - 1; in iavf_enable_queues()
344 adapter->aq_required &= ~IAVF_FLAG_AQ_ENABLE_QUEUES; in iavf_enable_queues()
359 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_disable_queues()
361 dev_err(&adapter->pdev->dev, "Cannot disable queues, command %d pending\n", in iavf_disable_queues()
362 adapter->current_op); in iavf_disable_queues()
365 adapter->current_op = VIRTCHNL_OP_DISABLE_QUEUES; in iavf_disable_queues()
366 vqs.vsi_id = adapter->vsi_res->vsi_id; in iavf_disable_queues()
367 vqs.tx_queues = BIT(adapter->num_active_queues) - 1; in iavf_disable_queues()
369 adapter->aq_required &= ~IAVF_FLAG_AQ_DISABLE_QUEUES; in iavf_disable_queues()
389 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_map_queues()
391 dev_err(&adapter->pdev->dev, "Cannot map queues to vectors, command %d pending\n", in iavf_map_queues()
392 adapter->current_op); in iavf_map_queues()
395 adapter->current_op = VIRTCHNL_OP_CONFIG_IRQ_MAP; in iavf_map_queues()
397 q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_map_queues()
399 len = virtchnl_struct_size(vimi, vecmap, adapter->num_msix_vectors); in iavf_map_queues()
404 vimi->num_vectors = adapter->num_msix_vectors; in iavf_map_queues()
407 q_vector = &adapter->q_vectors[v_idx]; in iavf_map_queues()
408 vecmap = &vimi->vecmap[v_idx]; in iavf_map_queues()
410 vecmap->vsi_id = adapter->vsi_res->vsi_id; in iavf_map_queues()
411 vecmap->vector_id = v_idx + NONQ_VECS; in iavf_map_queues()
412 vecmap->txq_map = q_vector->ring_mask; in iavf_map_queues()
413 vecmap->rxq_map = q_vector->ring_mask; in iavf_map_queues()
414 vecmap->rxitr_idx = IAVF_RX_ITR; in iavf_map_queues()
415 vecmap->txitr_idx = IAVF_TX_ITR; in iavf_map_queues()
417 /* Misc vector last - this is only for AdminQ messages */ in iavf_map_queues()
418 vecmap = &vimi->vecmap[v_idx]; in iavf_map_queues()
419 vecmap->vsi_id = adapter->vsi_res->vsi_id; in iavf_map_queues()
420 vecmap->vector_id = 0; in iavf_map_queues()
421 vecmap->txq_map = 0; in iavf_map_queues()
422 vecmap->rxq_map = 0; in iavf_map_queues()
424 adapter->aq_required &= ~IAVF_FLAG_AQ_MAP_VECTORS; in iavf_map_queues()
431 * iavf_set_mac_addr_type - Set the correct request type from the filter type
439 virtchnl_ether_addr->type = filter->is_primary ? in iavf_set_mac_addr_type()
458 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_add_ether_addrs()
460 dev_err(&adapter->pdev->dev, "Cannot add filters, command %d pending\n", in iavf_add_ether_addrs()
461 adapter->current_op); in iavf_add_ether_addrs()
465 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_add_ether_addrs()
467 list_for_each_entry(f, &adapter->mac_filter_list, list) { in iavf_add_ether_addrs()
468 if (f->add) in iavf_add_ether_addrs()
472 adapter->aq_required &= ~IAVF_FLAG_AQ_ADD_MAC_FILTER; in iavf_add_ether_addrs()
473 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_add_ether_addrs()
476 adapter->current_op = VIRTCHNL_OP_ADD_ETH_ADDR; in iavf_add_ether_addrs()
480 dev_warn(&adapter->pdev->dev, "Too many add MAC changes in one request\n"); in iavf_add_ether_addrs()
482 len = virtchnl_struct_size(veal, list, --count); in iavf_add_ether_addrs()
488 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_add_ether_addrs()
492 veal->vsi_id = adapter->vsi_res->vsi_id; in iavf_add_ether_addrs()
493 veal->num_elements = count; in iavf_add_ether_addrs()
494 list_for_each_entry(f, &adapter->mac_filter_list, list) { in iavf_add_ether_addrs()
495 if (f->add) { in iavf_add_ether_addrs()
496 ether_addr_copy(veal->list[i].addr, f->macaddr); in iavf_add_ether_addrs()
497 iavf_set_mac_addr_type(&veal->list[i], f); in iavf_add_ether_addrs()
499 f->add = false; in iavf_add_ether_addrs()
505 adapter->aq_required &= ~IAVF_FLAG_AQ_ADD_MAC_FILTER; in iavf_add_ether_addrs()
507 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_add_ether_addrs()
527 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_del_ether_addrs()
529 dev_err(&adapter->pdev->dev, "Cannot remove filters, command %d pending\n", in iavf_del_ether_addrs()
530 adapter->current_op); in iavf_del_ether_addrs()
534 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_del_ether_addrs()
536 list_for_each_entry(f, &adapter->mac_filter_list, list) { in iavf_del_ether_addrs()
537 if (f->remove) in iavf_del_ether_addrs()
541 adapter->aq_required &= ~IAVF_FLAG_AQ_DEL_MAC_FILTER; in iavf_del_ether_addrs()
542 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_del_ether_addrs()
545 adapter->current_op = VIRTCHNL_OP_DEL_ETH_ADDR; in iavf_del_ether_addrs()
549 dev_warn(&adapter->pdev->dev, "Too many delete MAC changes in one request\n"); in iavf_del_ether_addrs()
551 len = virtchnl_struct_size(veal, list, --count); in iavf_del_ether_addrs()
556 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_del_ether_addrs()
560 veal->vsi_id = adapter->vsi_res->vsi_id; in iavf_del_ether_addrs()
561 veal->num_elements = count; in iavf_del_ether_addrs()
562 list_for_each_entry_safe(f, ftmp, &adapter->mac_filter_list, list) { in iavf_del_ether_addrs()
563 if (f->remove) { in iavf_del_ether_addrs()
564 ether_addr_copy(veal->list[i].addr, f->macaddr); in iavf_del_ether_addrs()
565 iavf_set_mac_addr_type(&veal->list[i], f); in iavf_del_ether_addrs()
567 list_del(&f->list); in iavf_del_ether_addrs()
574 adapter->aq_required &= ~IAVF_FLAG_AQ_DEL_MAC_FILTER; in iavf_del_ether_addrs()
576 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_del_ether_addrs()
592 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_mac_add_ok()
593 list_for_each_entry_safe(f, ftmp, &adapter->mac_filter_list, list) { in iavf_mac_add_ok()
594 f->is_new_mac = false; in iavf_mac_add_ok()
595 if (!f->add && !f->add_handled) in iavf_mac_add_ok()
596 f->add_handled = true; in iavf_mac_add_ok()
598 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_mac_add_ok()
609 struct net_device *netdev = adapter->netdev; in iavf_mac_add_reject()
612 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_mac_add_reject()
613 list_for_each_entry_safe(f, ftmp, &adapter->mac_filter_list, list) { in iavf_mac_add_reject()
614 if (f->remove && ether_addr_equal(f->macaddr, netdev->dev_addr)) in iavf_mac_add_reject()
615 f->remove = false; in iavf_mac_add_reject()
617 if (!f->add && !f->add_handled) in iavf_mac_add_reject()
618 f->add_handled = true; in iavf_mac_add_reject()
620 if (f->is_new_mac) { in iavf_mac_add_reject()
621 list_del(&f->list); in iavf_mac_add_reject()
625 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_mac_add_reject()
638 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_vlan_add_reject()
639 list_for_each_entry_safe(f, ftmp, &adapter->vlan_filter_list, list) { in iavf_vlan_add_reject()
640 if (f->state == IAVF_VLAN_IS_NEW) { in iavf_vlan_add_reject()
641 list_del(&f->list); in iavf_vlan_add_reject()
643 adapter->num_vlan_filters--; in iavf_vlan_add_reject()
646 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_vlan_add_reject()
661 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_add_vlans()
663 dev_err(&adapter->pdev->dev, "Cannot add VLANs, command %d pending\n", in iavf_add_vlans()
664 adapter->current_op); in iavf_add_vlans()
668 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_add_vlans()
670 list_for_each_entry(f, &adapter->vlan_filter_list, list) { in iavf_add_vlans()
671 if (f->state == IAVF_VLAN_ADD) in iavf_add_vlans()
675 adapter->aq_required &= ~IAVF_FLAG_AQ_ADD_VLAN_FILTER; in iavf_add_vlans()
676 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_add_vlans()
683 adapter->current_op = VIRTCHNL_OP_ADD_VLAN; in iavf_add_vlans()
687 dev_warn(&adapter->pdev->dev, "Too many add VLAN changes in one request\n"); in iavf_add_vlans()
690 --count); in iavf_add_vlans()
695 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_add_vlans()
699 vvfl->vsi_id = adapter->vsi_res->vsi_id; in iavf_add_vlans()
700 vvfl->num_elements = count; in iavf_add_vlans()
701 list_for_each_entry(f, &adapter->vlan_filter_list, list) { in iavf_add_vlans()
702 if (f->state == IAVF_VLAN_ADD) { in iavf_add_vlans()
703 vvfl->vlan_id[i] = f->vlan.vid; in iavf_add_vlans()
705 f->state = IAVF_VLAN_IS_NEW; in iavf_add_vlans()
711 adapter->aq_required &= ~IAVF_FLAG_AQ_ADD_VLAN_FILTER; in iavf_add_vlans()
713 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_add_vlans()
718 u16 max_vlans = adapter->vlan_v2_caps.filtering.max_filters; in iavf_add_vlans()
722 adapter->current_op = VIRTCHNL_OP_ADD_VLAN_V2; in iavf_add_vlans()
726 count = max_vlans - iavf_get_num_vlans_added(adapter); in iavf_add_vlans()
732 dev_warn(&adapter->pdev->dev, "Too many add VLAN changes in one request\n"); in iavf_add_vlans()
735 --count); in iavf_add_vlans()
741 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_add_vlans()
745 vvfl_v2->vport_id = adapter->vsi_res->vsi_id; in iavf_add_vlans()
746 vvfl_v2->num_elements = count; in iavf_add_vlans()
747 list_for_each_entry(f, &adapter->vlan_filter_list, list) { in iavf_add_vlans()
748 if (f->state == IAVF_VLAN_ADD) { in iavf_add_vlans()
750 &adapter->vlan_v2_caps.filtering.filtering_support; in iavf_add_vlans()
757 if (filtering_support->outer) in iavf_add_vlans()
758 vlan = &vvfl_v2->filters[i].outer; in iavf_add_vlans()
760 vlan = &vvfl_v2->filters[i].inner; in iavf_add_vlans()
762 vlan->tci = f->vlan.vid; in iavf_add_vlans()
763 vlan->tpid = f->vlan.tpid; in iavf_add_vlans()
766 f->state = IAVF_VLAN_IS_NEW; in iavf_add_vlans()
771 adapter->aq_required &= ~IAVF_FLAG_AQ_ADD_VLAN_FILTER; in iavf_add_vlans()
773 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_add_vlans()
793 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_del_vlans()
795 dev_err(&adapter->pdev->dev, "Cannot remove VLANs, command %d pending\n", in iavf_del_vlans()
796 adapter->current_op); in iavf_del_vlans()
800 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_del_vlans()
802 list_for_each_entry_safe(f, ftmp, &adapter->vlan_filter_list, list) { in iavf_del_vlans()
803 /* since VLAN capabilities are not allowed, we dont want to send in iavf_del_vlans()
809 if (f->state == IAVF_VLAN_REMOVE && in iavf_del_vlans()
811 list_del(&f->list); in iavf_del_vlans()
813 adapter->num_vlan_filters--; in iavf_del_vlans()
814 } else if (f->state == IAVF_VLAN_DISABLE && in iavf_del_vlans()
816 f->state = IAVF_VLAN_INACTIVE; in iavf_del_vlans()
817 } else if (f->state == IAVF_VLAN_REMOVE || in iavf_del_vlans()
818 f->state == IAVF_VLAN_DISABLE) { in iavf_del_vlans()
823 adapter->aq_required &= ~IAVF_FLAG_AQ_DEL_VLAN_FILTER; in iavf_del_vlans()
824 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_del_vlans()
831 adapter->current_op = VIRTCHNL_OP_DEL_VLAN; in iavf_del_vlans()
835 dev_warn(&adapter->pdev->dev, "Too many delete VLAN changes in one request\n"); in iavf_del_vlans()
838 --count); in iavf_del_vlans()
843 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_del_vlans()
847 vvfl->vsi_id = adapter->vsi_res->vsi_id; in iavf_del_vlans()
848 vvfl->num_elements = count; in iavf_del_vlans()
849 list_for_each_entry_safe(f, ftmp, &adapter->vlan_filter_list, list) { in iavf_del_vlans()
850 if (f->state == IAVF_VLAN_DISABLE) { in iavf_del_vlans()
851 vvfl->vlan_id[i] = f->vlan.vid; in iavf_del_vlans()
852 f->state = IAVF_VLAN_INACTIVE; in iavf_del_vlans()
856 } else if (f->state == IAVF_VLAN_REMOVE) { in iavf_del_vlans()
857 vvfl->vlan_id[i] = f->vlan.vid; in iavf_del_vlans()
858 list_del(&f->list); in iavf_del_vlans()
860 adapter->num_vlan_filters--; in iavf_del_vlans()
868 adapter->aq_required &= ~IAVF_FLAG_AQ_DEL_VLAN_FILTER; in iavf_del_vlans()
870 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_del_vlans()
877 adapter->current_op = VIRTCHNL_OP_DEL_VLAN_V2; in iavf_del_vlans()
881 dev_warn(&adapter->pdev->dev, "Too many add VLAN changes in one request\n"); in iavf_del_vlans()
884 --count); in iavf_del_vlans()
890 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_del_vlans()
894 vvfl_v2->vport_id = adapter->vsi_res->vsi_id; in iavf_del_vlans()
895 vvfl_v2->num_elements = count; in iavf_del_vlans()
896 list_for_each_entry_safe(f, ftmp, &adapter->vlan_filter_list, list) { in iavf_del_vlans()
897 if (f->state == IAVF_VLAN_DISABLE || in iavf_del_vlans()
898 f->state == IAVF_VLAN_REMOVE) { in iavf_del_vlans()
900 &adapter->vlan_v2_caps.filtering.filtering_support; in iavf_del_vlans()
904 if (filtering_support->outer) in iavf_del_vlans()
905 vlan = &vvfl_v2->filters[i].outer; in iavf_del_vlans()
907 vlan = &vvfl_v2->filters[i].inner; in iavf_del_vlans()
909 vlan->tci = f->vlan.vid; in iavf_del_vlans()
910 vlan->tpid = f->vlan.tpid; in iavf_del_vlans()
912 if (f->state == IAVF_VLAN_DISABLE) { in iavf_del_vlans()
913 f->state = IAVF_VLAN_INACTIVE; in iavf_del_vlans()
915 list_del(&f->list); in iavf_del_vlans()
917 adapter->num_vlan_filters--; in iavf_del_vlans()
926 adapter->aq_required &= ~IAVF_FLAG_AQ_DEL_VLAN_FILTER; in iavf_del_vlans()
928 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_del_vlans()
948 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_set_promiscuous()
950 dev_err(&adapter->pdev->dev, "Cannot set promiscuous mode, command %d pending\n", in iavf_set_promiscuous()
951 adapter->current_op); in iavf_set_promiscuous()
958 adapter->flags |= IAVF_FLAG_PROMISC_ON; in iavf_set_promiscuous()
959 adapter->aq_required &= ~IAVF_FLAG_AQ_REQUEST_PROMISC; in iavf_set_promiscuous()
960 dev_info(&adapter->pdev->dev, "Entering promiscuous mode\n"); in iavf_set_promiscuous()
964 adapter->flags |= IAVF_FLAG_ALLMULTI_ON; in iavf_set_promiscuous()
965 adapter->aq_required &= ~IAVF_FLAG_AQ_REQUEST_ALLMULTI; in iavf_set_promiscuous()
966 dev_info(&adapter->pdev->dev, "%s is entering multicast promiscuous mode\n", in iavf_set_promiscuous()
967 adapter->netdev->name); in iavf_set_promiscuous()
971 if (adapter->flags & IAVF_FLAG_PROMISC_ON) { in iavf_set_promiscuous()
972 adapter->flags &= ~IAVF_FLAG_PROMISC_ON; in iavf_set_promiscuous()
973 adapter->aq_required &= ~IAVF_FLAG_AQ_RELEASE_PROMISC; in iavf_set_promiscuous()
974 dev_info(&adapter->pdev->dev, "Leaving promiscuous mode\n"); in iavf_set_promiscuous()
977 if (adapter->flags & IAVF_FLAG_ALLMULTI_ON) { in iavf_set_promiscuous()
978 adapter->flags &= ~IAVF_FLAG_ALLMULTI_ON; in iavf_set_promiscuous()
979 adapter->aq_required &= ~IAVF_FLAG_AQ_RELEASE_ALLMULTI; in iavf_set_promiscuous()
980 dev_info(&adapter->pdev->dev, "%s is leaving multicast promiscuous mode\n", in iavf_set_promiscuous()
981 adapter->netdev->name); in iavf_set_promiscuous()
985 adapter->current_op = VIRTCHNL_OP_CONFIG_PROMISCUOUS_MODE; in iavf_set_promiscuous()
986 vpi.vsi_id = adapter->vsi_res->vsi_id; in iavf_set_promiscuous()
1002 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_request_stats()
1007 adapter->aq_required &= ~IAVF_FLAG_AQ_REQUEST_STATS; in iavf_request_stats()
1008 adapter->current_op = VIRTCHNL_OP_GET_STATS; in iavf_request_stats()
1009 vqs.vsi_id = adapter->vsi_res->vsi_id; in iavf_request_stats()
1010 /* queue maps are ignored for this message - only the vsi is used */ in iavf_request_stats()
1014 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_request_stats()
1025 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_get_hena()
1027 dev_err(&adapter->pdev->dev, "Cannot get RSS hash capabilities, command %d pending\n", in iavf_get_hena()
1028 adapter->current_op); in iavf_get_hena()
1031 adapter->current_op = VIRTCHNL_OP_GET_RSS_HENA_CAPS; in iavf_get_hena()
1032 adapter->aq_required &= ~IAVF_FLAG_AQ_GET_HENA; in iavf_get_hena()
1046 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_set_hena()
1048 dev_err(&adapter->pdev->dev, "Cannot set RSS hash enable, command %d pending\n", in iavf_set_hena()
1049 adapter->current_op); in iavf_set_hena()
1052 vrh.hena = adapter->hena; in iavf_set_hena()
1053 adapter->current_op = VIRTCHNL_OP_SET_RSS_HENA; in iavf_set_hena()
1054 adapter->aq_required &= ~IAVF_FLAG_AQ_SET_HENA; in iavf_set_hena()
1070 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_set_rss_key()
1072 dev_err(&adapter->pdev->dev, "Cannot set RSS key, command %d pending\n", in iavf_set_rss_key()
1073 adapter->current_op); in iavf_set_rss_key()
1076 len = virtchnl_struct_size(vrk, key, adapter->rss_key_size); in iavf_set_rss_key()
1080 vrk->vsi_id = adapter->vsi.id; in iavf_set_rss_key()
1081 vrk->key_len = adapter->rss_key_size; in iavf_set_rss_key()
1082 memcpy(vrk->key, adapter->rss_key, adapter->rss_key_size); in iavf_set_rss_key()
1084 adapter->current_op = VIRTCHNL_OP_CONFIG_RSS_KEY; in iavf_set_rss_key()
1085 adapter->aq_required &= ~IAVF_FLAG_AQ_SET_RSS_KEY; in iavf_set_rss_key()
1101 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_set_rss_lut()
1103 dev_err(&adapter->pdev->dev, "Cannot set RSS LUT, command %d pending\n", in iavf_set_rss_lut()
1104 adapter->current_op); in iavf_set_rss_lut()
1107 len = virtchnl_struct_size(vrl, lut, adapter->rss_lut_size); in iavf_set_rss_lut()
1111 vrl->vsi_id = adapter->vsi.id; in iavf_set_rss_lut()
1112 vrl->lut_entries = adapter->rss_lut_size; in iavf_set_rss_lut()
1113 memcpy(vrl->lut, adapter->rss_lut, adapter->rss_lut_size); in iavf_set_rss_lut()
1114 adapter->current_op = VIRTCHNL_OP_CONFIG_RSS_LUT; in iavf_set_rss_lut()
1115 adapter->aq_required &= ~IAVF_FLAG_AQ_SET_RSS_LUT; in iavf_set_rss_lut()
1128 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_enable_vlan_stripping()
1130 dev_err(&adapter->pdev->dev, "Cannot enable stripping, command %d pending\n", in iavf_enable_vlan_stripping()
1131 adapter->current_op); in iavf_enable_vlan_stripping()
1134 adapter->current_op = VIRTCHNL_OP_ENABLE_VLAN_STRIPPING; in iavf_enable_vlan_stripping()
1135 adapter->aq_required &= ~IAVF_FLAG_AQ_ENABLE_VLAN_STRIPPING; in iavf_enable_vlan_stripping()
1147 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_disable_vlan_stripping()
1149 dev_err(&adapter->pdev->dev, "Cannot disable stripping, command %d pending\n", in iavf_disable_vlan_stripping()
1150 adapter->current_op); in iavf_disable_vlan_stripping()
1153 adapter->current_op = VIRTCHNL_OP_DISABLE_VLAN_STRIPPING; in iavf_disable_vlan_stripping()
1154 adapter->aq_required &= ~IAVF_FLAG_AQ_DISABLE_VLAN_STRIPPING; in iavf_disable_vlan_stripping()
1159 * iavf_tpid_to_vc_ethertype - transform from VLAN TPID to virtchnl ethertype
1175 * iavf_set_vc_offload_ethertype - set virtchnl ethertype for offload message
1194 &adapter->vlan_v2_caps.offloads.stripping_support; in iavf_set_vc_offload_ethertype()
1199 &adapter->vlan_v2_caps.offloads.insertion_support; in iavf_set_vc_offload_ethertype()
1202 …dev_err(&adapter->pdev->dev, "Invalid opcode %d for setting virtchnl ethertype to enable/disable V… in iavf_set_vc_offload_ethertype()
1204 return -EINVAL; in iavf_set_vc_offload_ethertype()
1208 if (offload_support->outer & vc_ethertype && in iavf_set_vc_offload_ethertype()
1209 offload_support->outer & VIRTCHNL_VLAN_TOGGLE) { in iavf_set_vc_offload_ethertype()
1210 msg->outer_ethertype_setting = vc_ethertype; in iavf_set_vc_offload_ethertype()
1211 } else if (offload_support->inner & vc_ethertype && in iavf_set_vc_offload_ethertype()
1212 offload_support->inner & VIRTCHNL_VLAN_TOGGLE) { in iavf_set_vc_offload_ethertype()
1213 msg->inner_ethertype_setting = vc_ethertype; in iavf_set_vc_offload_ethertype()
1215 dev_dbg(&adapter->pdev->dev, "opcode %d unsupported for VLAN TPID 0x%04x\n", in iavf_set_vc_offload_ethertype()
1217 return -EINVAL; in iavf_set_vc_offload_ethertype()
1224 * iavf_clear_offload_v2_aq_required - clear AQ required bit for offload request
1236 adapter->aq_required &= in iavf_clear_offload_v2_aq_required()
1239 adapter->aq_required &= in iavf_clear_offload_v2_aq_required()
1244 adapter->aq_required &= in iavf_clear_offload_v2_aq_required()
1247 adapter->aq_required &= in iavf_clear_offload_v2_aq_required()
1252 adapter->aq_required &= in iavf_clear_offload_v2_aq_required()
1255 adapter->aq_required &= in iavf_clear_offload_v2_aq_required()
1260 adapter->aq_required &= in iavf_clear_offload_v2_aq_required()
1263 adapter->aq_required &= in iavf_clear_offload_v2_aq_required()
1267 …dev_err(&adapter->pdev->dev, "Unsupported opcode %d specified for clearing aq_required bits for VI… in iavf_clear_offload_v2_aq_required()
1273 * iavf_send_vlan_offload_v2 - send offload enable/disable over virtchnl
1285 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_send_vlan_offload_v2()
1287 dev_err(&adapter->pdev->dev, "Cannot send %d, command %d pending\n", in iavf_send_vlan_offload_v2()
1288 offload_op, adapter->current_op); in iavf_send_vlan_offload_v2()
1292 adapter->current_op = offload_op; in iavf_send_vlan_offload_v2()
1298 msg->vport_id = adapter->vsi_res->vsi_id; in iavf_send_vlan_offload_v2()
1307 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_send_vlan_offload_v2()
1313 * iavf_enable_vlan_stripping_v2 - enable VLAN stripping
1324 * iavf_disable_vlan_stripping_v2 - disable VLAN stripping
1335 * iavf_enable_vlan_insertion_v2 - enable VLAN insertion
1346 * iavf_disable_vlan_insertion_v2 - disable VLAN insertion
1359 * iavf_print_link_message - print link up or down
1366 struct net_device *netdev = adapter->netdev; in iavf_print_link_message()
1370 if (!adapter->link_up) { in iavf_print_link_message()
1380 link_speed_mbps = adapter->link_speed_mbps; in iavf_print_link_message()
1384 switch (adapter->link_speed) { in iavf_print_link_message()
1445 return vpe->event_data.link_event_adv.link_status; in iavf_get_vpe_link_status()
1447 return vpe->event_data.link_event.link_status; in iavf_get_vpe_link_status()
1462 adapter->link_speed_mbps = in iavf_set_adapter_link_speed_from_vpe()
1463 vpe->event_data.link_event_adv.link_speed; in iavf_set_adapter_link_speed_from_vpe()
1465 adapter->link_speed = vpe->event_data.link_event.link_speed; in iavf_set_adapter_link_speed_from_vpe()
1481 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_enable_channels()
1483 dev_err(&adapter->pdev->dev, "Cannot configure mqprio, command %d pending\n", in iavf_enable_channels()
1484 adapter->current_op); in iavf_enable_channels()
1488 len = virtchnl_struct_size(vti, list, adapter->num_tc); in iavf_enable_channels()
1492 vti->num_tc = adapter->num_tc; in iavf_enable_channels()
1493 for (i = 0; i < vti->num_tc; i++) { in iavf_enable_channels()
1494 vti->list[i].count = adapter->ch_config.ch_info[i].count; in iavf_enable_channels()
1495 vti->list[i].offset = adapter->ch_config.ch_info[i].offset; in iavf_enable_channels()
1496 vti->list[i].pad = 0; in iavf_enable_channels()
1497 vti->list[i].max_tx_rate = in iavf_enable_channels()
1498 adapter->ch_config.ch_info[i].max_tx_rate; in iavf_enable_channels()
1501 adapter->ch_config.state = __IAVF_TC_RUNNING; in iavf_enable_channels()
1502 adapter->flags |= IAVF_FLAG_REINIT_ITR_NEEDED; in iavf_enable_channels()
1503 adapter->current_op = VIRTCHNL_OP_ENABLE_CHANNELS; in iavf_enable_channels()
1504 adapter->aq_required &= ~IAVF_FLAG_AQ_ENABLE_CHANNELS; in iavf_enable_channels()
1517 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_disable_channels()
1519 dev_err(&adapter->pdev->dev, "Cannot configure mqprio, command %d pending\n", in iavf_disable_channels()
1520 adapter->current_op); in iavf_disable_channels()
1524 adapter->ch_config.state = __IAVF_TC_INVALID; in iavf_disable_channels()
1525 adapter->flags |= IAVF_FLAG_REINIT_ITR_NEEDED; in iavf_disable_channels()
1526 adapter->current_op = VIRTCHNL_OP_DISABLE_CHANNELS; in iavf_disable_channels()
1527 adapter->aq_required &= ~IAVF_FLAG_AQ_DISABLE_CHANNELS; in iavf_disable_channels()
1541 switch (f->flow_type) { in iavf_print_cloud_filter()
1543 …dev_info(&adapter->pdev->dev, "dst_mac: %pM src_mac: %pM vlan_id: %hu dst_ip: %pI4 src_ip %pI4 dst… in iavf_print_cloud_filter()
1544 &f->data.tcp_spec.dst_mac, in iavf_print_cloud_filter()
1545 &f->data.tcp_spec.src_mac, in iavf_print_cloud_filter()
1546 ntohs(f->data.tcp_spec.vlan_id), in iavf_print_cloud_filter()
1547 &f->data.tcp_spec.dst_ip[0], in iavf_print_cloud_filter()
1548 &f->data.tcp_spec.src_ip[0], in iavf_print_cloud_filter()
1549 ntohs(f->data.tcp_spec.dst_port), in iavf_print_cloud_filter()
1550 ntohs(f->data.tcp_spec.src_port)); in iavf_print_cloud_filter()
1553 …dev_info(&adapter->pdev->dev, "dst_mac: %pM src_mac: %pM vlan_id: %hu dst_ip: %pI6 src_ip %pI6 dst… in iavf_print_cloud_filter()
1554 &f->data.tcp_spec.dst_mac, in iavf_print_cloud_filter()
1555 &f->data.tcp_spec.src_mac, in iavf_print_cloud_filter()
1556 ntohs(f->data.tcp_spec.vlan_id), in iavf_print_cloud_filter()
1557 &f->data.tcp_spec.dst_ip, in iavf_print_cloud_filter()
1558 &f->data.tcp_spec.src_ip, in iavf_print_cloud_filter()
1559 ntohs(f->data.tcp_spec.dst_port), in iavf_print_cloud_filter()
1560 ntohs(f->data.tcp_spec.src_port)); in iavf_print_cloud_filter()
1578 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_add_cloud_filter()
1580 dev_err(&adapter->pdev->dev, "Cannot add cloud filter, command %d pending\n", in iavf_add_cloud_filter()
1581 adapter->current_op); in iavf_add_cloud_filter()
1584 list_for_each_entry(cf, &adapter->cloud_filter_list, list) { in iavf_add_cloud_filter()
1585 if (cf->add) { in iavf_add_cloud_filter()
1591 adapter->aq_required &= ~IAVF_FLAG_AQ_ADD_CLOUD_FILTER; in iavf_add_cloud_filter()
1594 adapter->current_op = VIRTCHNL_OP_ADD_CLOUD_FILTER; in iavf_add_cloud_filter()
1601 list_for_each_entry(cf, &adapter->cloud_filter_list, list) { in iavf_add_cloud_filter()
1602 if (cf->add) { in iavf_add_cloud_filter()
1603 memcpy(f, &cf->f, sizeof(struct virtchnl_filter)); in iavf_add_cloud_filter()
1604 cf->add = false; in iavf_add_cloud_filter()
1605 cf->state = __IAVF_CF_ADD_PENDING; in iavf_add_cloud_filter()
1626 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_del_cloud_filter()
1628 dev_err(&adapter->pdev->dev, "Cannot remove cloud filter, command %d pending\n", in iavf_del_cloud_filter()
1629 adapter->current_op); in iavf_del_cloud_filter()
1632 list_for_each_entry(cf, &adapter->cloud_filter_list, list) { in iavf_del_cloud_filter()
1633 if (cf->del) { in iavf_del_cloud_filter()
1639 adapter->aq_required &= ~IAVF_FLAG_AQ_DEL_CLOUD_FILTER; in iavf_del_cloud_filter()
1642 adapter->current_op = VIRTCHNL_OP_DEL_CLOUD_FILTER; in iavf_del_cloud_filter()
1649 list_for_each_entry_safe(cf, cftmp, &adapter->cloud_filter_list, list) { in iavf_del_cloud_filter()
1650 if (cf->del) { in iavf_del_cloud_filter()
1651 memcpy(f, &cf->f, sizeof(struct virtchnl_filter)); in iavf_del_cloud_filter()
1652 cf->del = false; in iavf_del_cloud_filter()
1653 cf->state = __IAVF_CF_DEL_PENDING; in iavf_del_cloud_filter()
1675 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_add_fdir_filter()
1677 dev_err(&adapter->pdev->dev, "Cannot add Flow Director filter, command %d pending\n", in iavf_add_fdir_filter()
1678 adapter->current_op); in iavf_add_fdir_filter()
1687 spin_lock_bh(&adapter->fdir_fltr_lock); in iavf_add_fdir_filter()
1688 list_for_each_entry(fdir, &adapter->fdir_list_head, list) { in iavf_add_fdir_filter()
1689 if (fdir->state == IAVF_FDIR_FLTR_ADD_REQUEST) { in iavf_add_fdir_filter()
1691 fdir->state = IAVF_FDIR_FLTR_ADD_PENDING; in iavf_add_fdir_filter()
1692 memcpy(f, &fdir->vc_add_msg, len); in iavf_add_fdir_filter()
1696 spin_unlock_bh(&adapter->fdir_fltr_lock); in iavf_add_fdir_filter()
1702 adapter->aq_required &= ~IAVF_FLAG_AQ_ADD_FDIR_FILTER; in iavf_add_fdir_filter()
1706 adapter->current_op = VIRTCHNL_OP_ADD_FDIR_FILTER; in iavf_add_fdir_filter()
1725 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_del_fdir_filter()
1727 dev_err(&adapter->pdev->dev, "Cannot remove Flow Director filter, command %d pending\n", in iavf_del_fdir_filter()
1728 adapter->current_op); in iavf_del_fdir_filter()
1734 spin_lock_bh(&adapter->fdir_fltr_lock); in iavf_del_fdir_filter()
1735 list_for_each_entry(fdir, &adapter->fdir_list_head, list) { in iavf_del_fdir_filter()
1736 if (fdir->state == IAVF_FDIR_FLTR_DEL_REQUEST) { in iavf_del_fdir_filter()
1739 f.vsi_id = fdir->vc_add_msg.vsi_id; in iavf_del_fdir_filter()
1740 f.flow_id = fdir->flow_id; in iavf_del_fdir_filter()
1741 fdir->state = IAVF_FDIR_FLTR_DEL_PENDING; in iavf_del_fdir_filter()
1745 spin_unlock_bh(&adapter->fdir_fltr_lock); in iavf_del_fdir_filter()
1748 adapter->aq_required &= ~IAVF_FLAG_AQ_DEL_FDIR_FILTER; in iavf_del_fdir_filter()
1752 adapter->current_op = VIRTCHNL_OP_DEL_FDIR_FILTER; in iavf_del_fdir_filter()
1770 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_add_adv_rss_cfg()
1772 dev_err(&adapter->pdev->dev, "Cannot add RSS configuration, command %d pending\n", in iavf_add_adv_rss_cfg()
1773 adapter->current_op); in iavf_add_adv_rss_cfg()
1782 spin_lock_bh(&adapter->adv_rss_lock); in iavf_add_adv_rss_cfg()
1783 list_for_each_entry(rss, &adapter->adv_rss_list_head, list) { in iavf_add_adv_rss_cfg()
1784 if (rss->state == IAVF_ADV_RSS_ADD_REQUEST) { in iavf_add_adv_rss_cfg()
1786 rss->state = IAVF_ADV_RSS_ADD_PENDING; in iavf_add_adv_rss_cfg()
1787 memcpy(rss_cfg, &rss->cfg_msg, len); in iavf_add_adv_rss_cfg()
1794 spin_unlock_bh(&adapter->adv_rss_lock); in iavf_add_adv_rss_cfg()
1797 adapter->current_op = VIRTCHNL_OP_ADD_RSS_CFG; in iavf_add_adv_rss_cfg()
1801 adapter->aq_required &= ~IAVF_FLAG_AQ_ADD_ADV_RSS_CFG; in iavf_add_adv_rss_cfg()
1821 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_del_adv_rss_cfg()
1823 dev_err(&adapter->pdev->dev, "Cannot remove RSS configuration, command %d pending\n", in iavf_del_adv_rss_cfg()
1824 adapter->current_op); in iavf_del_adv_rss_cfg()
1833 spin_lock_bh(&adapter->adv_rss_lock); in iavf_del_adv_rss_cfg()
1834 list_for_each_entry(rss, &adapter->adv_rss_list_head, list) { in iavf_del_adv_rss_cfg()
1835 if (rss->state == IAVF_ADV_RSS_DEL_REQUEST) { in iavf_del_adv_rss_cfg()
1837 rss->state = IAVF_ADV_RSS_DEL_PENDING; in iavf_del_adv_rss_cfg()
1838 memcpy(rss_cfg, &rss->cfg_msg, len); in iavf_del_adv_rss_cfg()
1842 spin_unlock_bh(&adapter->adv_rss_lock); in iavf_del_adv_rss_cfg()
1845 adapter->current_op = VIRTCHNL_OP_DEL_RSS_CFG; in iavf_del_adv_rss_cfg()
1849 adapter->aq_required &= ~IAVF_FLAG_AQ_DEL_ADV_RSS_CFG; in iavf_del_adv_rss_cfg()
1864 /* Don't check CURRENT_OP - this is always higher priority */ in iavf_request_reset()
1866 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_request_reset()
1871 * iavf_netdev_features_vlan_strip_set - update vlan strip status
1875 * Helper function to change vlan strip status in netdev->features.
1881 netdev->features |= NETIF_F_HW_VLAN_CTAG_RX; in iavf_netdev_features_vlan_strip_set()
1883 netdev->features &= ~NETIF_F_HW_VLAN_CTAG_RX; in iavf_netdev_features_vlan_strip_set()
1902 struct net_device *netdev = adapter->netdev; in iavf_virtchnl_completion()
1909 switch (vpe->event) { in iavf_virtchnl_completion()
1914 if (adapter->link_up == link_up) in iavf_virtchnl_completion()
1925 if (adapter->state != __IAVF_RUNNING) in iavf_virtchnl_completion()
1929 * re-allocate queues. Hence wait till all in iavf_virtchnl_completion()
1932 if (adapter->flags & in iavf_virtchnl_completion()
1937 adapter->link_up = link_up; in iavf_virtchnl_completion()
1948 dev_info(&adapter->pdev->dev, "Reset indication received from the PF\n"); in iavf_virtchnl_completion()
1949 if (!(adapter->flags & IAVF_FLAG_RESET_PENDING)) { in iavf_virtchnl_completion()
1950 dev_info(&adapter->pdev->dev, "Scheduling reset task\n"); in iavf_virtchnl_completion()
1955 dev_err(&adapter->pdev->dev, "Unknown event %d from PF\n", in iavf_virtchnl_completion()
1956 vpe->event); in iavf_virtchnl_completion()
1964 dev_err(&adapter->pdev->dev, "Failed to add VLAN filter, error %s\n", in iavf_virtchnl_completion()
1965 iavf_stat_str(&adapter->hw, v_retval)); in iavf_virtchnl_completion()
1968 dev_err(&adapter->pdev->dev, "Failed to add MAC filter, error %s\n", in iavf_virtchnl_completion()
1969 iavf_stat_str(&adapter->hw, v_retval)); in iavf_virtchnl_completion()
1972 ether_addr_copy(adapter->hw.mac.addr, netdev->dev_addr); in iavf_virtchnl_completion()
1973 wake_up(&adapter->vc_waitqueue); in iavf_virtchnl_completion()
1976 dev_err(&adapter->pdev->dev, "Failed to delete VLAN filter, error %s\n", in iavf_virtchnl_completion()
1977 iavf_stat_str(&adapter->hw, v_retval)); in iavf_virtchnl_completion()
1980 dev_err(&adapter->pdev->dev, "Failed to delete MAC filter, error %s\n", in iavf_virtchnl_completion()
1981 iavf_stat_str(&adapter->hw, v_retval)); in iavf_virtchnl_completion()
1984 dev_err(&adapter->pdev->dev, "Failed to configure queue channels, error %s\n", in iavf_virtchnl_completion()
1985 iavf_stat_str(&adapter->hw, v_retval)); in iavf_virtchnl_completion()
1986 adapter->flags &= ~IAVF_FLAG_REINIT_ITR_NEEDED; in iavf_virtchnl_completion()
1987 adapter->ch_config.state = __IAVF_TC_INVALID; in iavf_virtchnl_completion()
1992 dev_err(&adapter->pdev->dev, "Failed to disable queue channels, error %s\n", in iavf_virtchnl_completion()
1993 iavf_stat_str(&adapter->hw, v_retval)); in iavf_virtchnl_completion()
1994 adapter->flags &= ~IAVF_FLAG_REINIT_ITR_NEEDED; in iavf_virtchnl_completion()
1995 adapter->ch_config.state = __IAVF_TC_RUNNING; in iavf_virtchnl_completion()
2002 &adapter->cloud_filter_list, in iavf_virtchnl_completion()
2004 if (cf->state == __IAVF_CF_ADD_PENDING) { in iavf_virtchnl_completion()
2005 cf->state = __IAVF_CF_INVALID; in iavf_virtchnl_completion()
2006 dev_info(&adapter->pdev->dev, "Failed to add cloud filter, error %s\n", in iavf_virtchnl_completion()
2007 iavf_stat_str(&adapter->hw, in iavf_virtchnl_completion()
2010 &cf->f); in iavf_virtchnl_completion()
2011 list_del(&cf->list); in iavf_virtchnl_completion()
2013 adapter->num_cloud_filters--; in iavf_virtchnl_completion()
2021 list_for_each_entry(cf, &adapter->cloud_filter_list, in iavf_virtchnl_completion()
2023 if (cf->state == __IAVF_CF_DEL_PENDING) { in iavf_virtchnl_completion()
2024 cf->state = __IAVF_CF_ACTIVE; in iavf_virtchnl_completion()
2025 dev_info(&adapter->pdev->dev, "Failed to del cloud filter, error %s\n", in iavf_virtchnl_completion()
2026 iavf_stat_str(&adapter->hw, in iavf_virtchnl_completion()
2029 &cf->f); in iavf_virtchnl_completion()
2037 spin_lock_bh(&adapter->fdir_fltr_lock); in iavf_virtchnl_completion()
2039 &adapter->fdir_list_head, in iavf_virtchnl_completion()
2041 if (fdir->state == IAVF_FDIR_FLTR_ADD_PENDING) { in iavf_virtchnl_completion()
2042 dev_info(&adapter->pdev->dev, "Failed to add Flow Director filter, error %s\n", in iavf_virtchnl_completion()
2043 iavf_stat_str(&adapter->hw, in iavf_virtchnl_completion()
2047 dev_err(&adapter->pdev->dev, in iavf_virtchnl_completion()
2049 list_del(&fdir->list); in iavf_virtchnl_completion()
2051 adapter->fdir_active_fltr--; in iavf_virtchnl_completion()
2054 spin_unlock_bh(&adapter->fdir_fltr_lock); in iavf_virtchnl_completion()
2060 spin_lock_bh(&adapter->fdir_fltr_lock); in iavf_virtchnl_completion()
2061 list_for_each_entry(fdir, &adapter->fdir_list_head, in iavf_virtchnl_completion()
2063 if (fdir->state == IAVF_FDIR_FLTR_DEL_PENDING) { in iavf_virtchnl_completion()
2064 fdir->state = IAVF_FDIR_FLTR_ACTIVE; in iavf_virtchnl_completion()
2065 dev_info(&adapter->pdev->dev, "Failed to del Flow Director filter, error %s\n", in iavf_virtchnl_completion()
2066 iavf_stat_str(&adapter->hw, in iavf_virtchnl_completion()
2071 spin_unlock_bh(&adapter->fdir_fltr_lock); in iavf_virtchnl_completion()
2077 spin_lock_bh(&adapter->adv_rss_lock); in iavf_virtchnl_completion()
2079 &adapter->adv_rss_list_head, in iavf_virtchnl_completion()
2081 if (rss->state == IAVF_ADV_RSS_ADD_PENDING) { in iavf_virtchnl_completion()
2085 list_del(&rss->list); in iavf_virtchnl_completion()
2089 spin_unlock_bh(&adapter->adv_rss_lock); in iavf_virtchnl_completion()
2095 spin_lock_bh(&adapter->adv_rss_lock); in iavf_virtchnl_completion()
2096 list_for_each_entry(rss, &adapter->adv_rss_list_head, in iavf_virtchnl_completion()
2098 if (rss->state == IAVF_ADV_RSS_DEL_PENDING) { in iavf_virtchnl_completion()
2099 rss->state = IAVF_ADV_RSS_ACTIVE; in iavf_virtchnl_completion()
2100 dev_err(&adapter->pdev->dev, "Failed to delete RSS configuration, error %s\n", in iavf_virtchnl_completion()
2101 iavf_stat_str(&adapter->hw, in iavf_virtchnl_completion()
2105 spin_unlock_bh(&adapter->adv_rss_lock); in iavf_virtchnl_completion()
2109 …dev_warn(&adapter->pdev->dev, "Changing VLAN Stripping is not allowed when Port VLAN is configured… in iavf_virtchnl_completion()
2111 * Disable it in netdev->features. in iavf_virtchnl_completion()
2116 …dev_warn(&adapter->pdev->dev, "Changing VLAN Stripping is not allowed when Port VLAN is configured… in iavf_virtchnl_completion()
2118 * Enable it in netdev->features. in iavf_virtchnl_completion()
2124 dev_warn(&adapter->pdev->dev, "Failed to add VLAN filter, error %s\n", in iavf_virtchnl_completion()
2125 iavf_stat_str(&adapter->hw, v_retval)); in iavf_virtchnl_completion()
2128 dev_err(&adapter->pdev->dev, "PF returned error %d (%s) to our request %d\n", in iavf_virtchnl_completion()
2129 v_retval, iavf_stat_str(&adapter->hw, v_retval), in iavf_virtchnl_completion()
2137 if (!ether_addr_equal(netdev->dev_addr, adapter->hw.mac.addr)) in iavf_virtchnl_completion()
2138 if (!ether_addr_equal(netdev->dev_addr, in iavf_virtchnl_completion()
2139 adapter->hw.mac.addr)) { in iavf_virtchnl_completion()
2141 eth_hw_addr_set(netdev, adapter->hw.mac.addr); in iavf_virtchnl_completion()
2144 wake_up(&adapter->vc_waitqueue); in iavf_virtchnl_completion()
2149 netdev->stats.rx_packets = stats->rx_unicast + in iavf_virtchnl_completion()
2150 stats->rx_multicast + in iavf_virtchnl_completion()
2151 stats->rx_broadcast; in iavf_virtchnl_completion()
2152 netdev->stats.tx_packets = stats->tx_unicast + in iavf_virtchnl_completion()
2153 stats->tx_multicast + in iavf_virtchnl_completion()
2154 stats->tx_broadcast; in iavf_virtchnl_completion()
2155 netdev->stats.rx_bytes = stats->rx_bytes; in iavf_virtchnl_completion()
2156 netdev->stats.tx_bytes = stats->tx_bytes; in iavf_virtchnl_completion()
2157 netdev->stats.tx_errors = stats->tx_errors; in iavf_virtchnl_completion()
2158 netdev->stats.rx_dropped = stats->rx_discards; in iavf_virtchnl_completion()
2159 netdev->stats.tx_dropped = stats->tx_discards; in iavf_virtchnl_completion()
2160 adapter->current_stats = *stats; in iavf_virtchnl_completion()
2166 memcpy(adapter->vf_res, msg, min(msglen, len)); in iavf_virtchnl_completion()
2168 iavf_vf_parse_hw_config(&adapter->hw, adapter->vf_res); in iavf_virtchnl_completion()
2169 if (is_zero_ether_addr(adapter->hw.mac.addr)) { in iavf_virtchnl_completion()
2171 ether_addr_copy(adapter->hw.mac.addr, netdev->dev_addr); in iavf_virtchnl_completion()
2175 ether_addr_copy(netdev->perm_addr, in iavf_virtchnl_completion()
2176 adapter->hw.mac.addr); in iavf_virtchnl_completion()
2179 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_virtchnl_completion()
2180 iavf_add_filter(adapter, adapter->hw.mac.addr); in iavf_virtchnl_completion()
2183 if (!list_empty(&adapter->vlan_filter_list)) { in iavf_virtchnl_completion()
2186 /* re-add all VLAN filters over virtchnl */ in iavf_virtchnl_completion()
2188 &adapter->vlan_filter_list, in iavf_virtchnl_completion()
2190 vlf->state = IAVF_VLAN_ADD; in iavf_virtchnl_completion()
2192 adapter->aq_required |= in iavf_virtchnl_completion()
2197 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_virtchnl_completion()
2218 memcpy(&adapter->vlan_v2_caps, msg, in iavf_virtchnl_completion()
2220 sizeof(adapter->vlan_v2_caps))); in iavf_virtchnl_completion()
2223 adapter->flags |= IAVF_FLAG_SETUP_NETDEV_FEATURES; in iavf_virtchnl_completion()
2228 was_mac_changed = !ether_addr_equal(netdev->dev_addr, in iavf_virtchnl_completion()
2229 adapter->hw.mac.addr); in iavf_virtchnl_completion()
2231 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_virtchnl_completion()
2233 /* re-add all MAC filters */ in iavf_virtchnl_completion()
2234 list_for_each_entry(f, &adapter->mac_filter_list, list) { in iavf_virtchnl_completion()
2236 ether_addr_equal(netdev->dev_addr, f->macaddr)) in iavf_virtchnl_completion()
2237 ether_addr_copy(f->macaddr, in iavf_virtchnl_completion()
2238 adapter->hw.mac.addr); in iavf_virtchnl_completion()
2240 f->is_new_mac = true; in iavf_virtchnl_completion()
2241 f->add = true; in iavf_virtchnl_completion()
2242 f->add_handled = false; in iavf_virtchnl_completion()
2243 f->remove = false; in iavf_virtchnl_completion()
2246 /* re-add all VLAN filters */ in iavf_virtchnl_completion()
2250 if (!list_empty(&adapter->vlan_filter_list)) { in iavf_virtchnl_completion()
2252 &adapter->vlan_filter_list, in iavf_virtchnl_completion()
2254 vlf->state = IAVF_VLAN_ADD; in iavf_virtchnl_completion()
2260 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_virtchnl_completion()
2263 eth_hw_addr_set(netdev, adapter->hw.mac.addr); in iavf_virtchnl_completion()
2266 adapter->aq_required |= IAVF_FLAG_AQ_ADD_MAC_FILTER | in iavf_virtchnl_completion()
2273 wake_up(&adapter->reset_waitqueue); in iavf_virtchnl_completion()
2274 adapter->flags &= ~IAVF_FLAG_QUEUES_DISABLED; in iavf_virtchnl_completion()
2279 if (adapter->state == __IAVF_DOWN_PENDING) { in iavf_virtchnl_completion()
2281 wake_up(&adapter->down_waitqueue); in iavf_virtchnl_completion()
2290 if (v_opcode != adapter->current_op) in iavf_virtchnl_completion()
2294 /* Gobble zero-length replies from the PF. They indicate that in iavf_virtchnl_completion()
2299 iavf_notify_client_message(&adapter->vsi, msg, msglen); in iavf_virtchnl_completion()
2303 adapter->client_pending &= in iavf_virtchnl_completion()
2310 adapter->hena = vrh->hena; in iavf_virtchnl_completion()
2312 dev_warn(&adapter->pdev->dev, in iavf_virtchnl_completion()
2320 if (vfres->num_queue_pairs != adapter->num_req_queues) { in iavf_virtchnl_completion()
2321 dev_info(&adapter->pdev->dev, in iavf_virtchnl_completion()
2323 adapter->num_req_queues, in iavf_virtchnl_completion()
2324 vfres->num_queue_pairs); in iavf_virtchnl_completion()
2325 adapter->num_req_queues = 0; in iavf_virtchnl_completion()
2326 adapter->flags &= ~IAVF_FLAG_REINIT_ITR_NEEDED; in iavf_virtchnl_completion()
2333 list_for_each_entry(cf, &adapter->cloud_filter_list, list) { in iavf_virtchnl_completion()
2334 if (cf->state == __IAVF_CF_ADD_PENDING) in iavf_virtchnl_completion()
2335 cf->state = __IAVF_CF_ACTIVE; in iavf_virtchnl_completion()
2342 list_for_each_entry_safe(cf, cftmp, &adapter->cloud_filter_list, in iavf_virtchnl_completion()
2344 if (cf->state == __IAVF_CF_DEL_PENDING) { in iavf_virtchnl_completion()
2345 cf->state = __IAVF_CF_INVALID; in iavf_virtchnl_completion()
2346 list_del(&cf->list); in iavf_virtchnl_completion()
2348 adapter->num_cloud_filters--; in iavf_virtchnl_completion()
2357 spin_lock_bh(&adapter->fdir_fltr_lock); in iavf_virtchnl_completion()
2359 &adapter->fdir_list_head, in iavf_virtchnl_completion()
2361 if (fdir->state == IAVF_FDIR_FLTR_ADD_PENDING) { in iavf_virtchnl_completion()
2362 if (add_fltr->status == VIRTCHNL_FDIR_SUCCESS) { in iavf_virtchnl_completion()
2363 dev_info(&adapter->pdev->dev, "Flow Director filter with location %u is added\n", in iavf_virtchnl_completion()
2364 fdir->loc); in iavf_virtchnl_completion()
2365 fdir->state = IAVF_FDIR_FLTR_ACTIVE; in iavf_virtchnl_completion()
2366 fdir->flow_id = add_fltr->flow_id; in iavf_virtchnl_completion()
2368 dev_info(&adapter->pdev->dev, "Failed to add Flow Director filter with status: %d\n", in iavf_virtchnl_completion()
2369 add_fltr->status); in iavf_virtchnl_completion()
2371 list_del(&fdir->list); in iavf_virtchnl_completion()
2373 adapter->fdir_active_fltr--; in iavf_virtchnl_completion()
2377 spin_unlock_bh(&adapter->fdir_fltr_lock); in iavf_virtchnl_completion()
2384 spin_lock_bh(&adapter->fdir_fltr_lock); in iavf_virtchnl_completion()
2385 list_for_each_entry_safe(fdir, fdir_tmp, &adapter->fdir_list_head, in iavf_virtchnl_completion()
2387 if (fdir->state == IAVF_FDIR_FLTR_DEL_PENDING) { in iavf_virtchnl_completion()
2388 if (del_fltr->status == VIRTCHNL_FDIR_SUCCESS) { in iavf_virtchnl_completion()
2389 dev_info(&adapter->pdev->dev, "Flow Director filter with location %u is deleted\n", in iavf_virtchnl_completion()
2390 fdir->loc); in iavf_virtchnl_completion()
2391 list_del(&fdir->list); in iavf_virtchnl_completion()
2393 adapter->fdir_active_fltr--; in iavf_virtchnl_completion()
2395 fdir->state = IAVF_FDIR_FLTR_ACTIVE; in iavf_virtchnl_completion()
2396 dev_info(&adapter->pdev->dev, "Failed to delete Flow Director filter with status: %d\n", in iavf_virtchnl_completion()
2397 del_fltr->status); in iavf_virtchnl_completion()
2402 spin_unlock_bh(&adapter->fdir_fltr_lock); in iavf_virtchnl_completion()
2408 spin_lock_bh(&adapter->adv_rss_lock); in iavf_virtchnl_completion()
2409 list_for_each_entry(rss, &adapter->adv_rss_list_head, list) { in iavf_virtchnl_completion()
2410 if (rss->state == IAVF_ADV_RSS_ADD_PENDING) { in iavf_virtchnl_completion()
2414 rss->state = IAVF_ADV_RSS_ACTIVE; in iavf_virtchnl_completion()
2417 spin_unlock_bh(&adapter->adv_rss_lock); in iavf_virtchnl_completion()
2423 spin_lock_bh(&adapter->adv_rss_lock); in iavf_virtchnl_completion()
2425 &adapter->adv_rss_list_head, list) { in iavf_virtchnl_completion()
2426 if (rss->state == IAVF_ADV_RSS_DEL_PENDING) { in iavf_virtchnl_completion()
2427 list_del(&rss->list); in iavf_virtchnl_completion()
2431 spin_unlock_bh(&adapter->adv_rss_lock); in iavf_virtchnl_completion()
2437 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_virtchnl_completion()
2438 list_for_each_entry(f, &adapter->vlan_filter_list, list) { in iavf_virtchnl_completion()
2439 if (f->state == IAVF_VLAN_IS_NEW) in iavf_virtchnl_completion()
2440 f->state = IAVF_VLAN_ACTIVE; in iavf_virtchnl_completion()
2442 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_virtchnl_completion()
2447 * Update netdev->features if needed to be in sync with ethtool. in iavf_virtchnl_completion()
2454 * Update netdev->features if needed to be in sync with ethtool. in iavf_virtchnl_completion()
2460 if (adapter->current_op && (v_opcode != adapter->current_op)) in iavf_virtchnl_completion()
2461 dev_warn(&adapter->pdev->dev, "Expected response %d from PF, received %d\n", in iavf_virtchnl_completion()
2462 adapter->current_op, v_opcode); in iavf_virtchnl_completion()
2465 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_virtchnl_completion()