Lines Matching +full:dont +full:- +full:validate
1 // SPDX-License-Identifier: GPL-2.0-only
14 * idpf_init_vector_stack - Fill the MSIX vector stack with vector index
25 mutex_lock(&adapter->vector_lock); in idpf_init_vector_stack()
26 min_vec = adapter->num_msix_entries - adapter->num_avail_msix; in idpf_init_vector_stack()
27 stack = &adapter->vector_stack; in idpf_init_vector_stack()
28 stack->size = adapter->num_msix_entries; in idpf_init_vector_stack()
30 * distribute the unused vectors on-demand basis in idpf_init_vector_stack()
32 stack->base = min_vec; in idpf_init_vector_stack()
33 stack->top = min_vec; in idpf_init_vector_stack()
35 stack->vec_idx = kcalloc(stack->size, sizeof(u16), GFP_KERNEL); in idpf_init_vector_stack()
36 if (!stack->vec_idx) { in idpf_init_vector_stack()
37 mutex_unlock(&adapter->vector_lock); in idpf_init_vector_stack()
39 return -ENOMEM; in idpf_init_vector_stack()
42 for (i = 0; i < stack->size; i++) in idpf_init_vector_stack()
43 stack->vec_idx[i] = i; in idpf_init_vector_stack()
45 mutex_unlock(&adapter->vector_lock); in idpf_init_vector_stack()
51 * idpf_deinit_vector_stack - zero out the MSIX vector stack
58 mutex_lock(&adapter->vector_lock); in idpf_deinit_vector_stack()
59 stack = &adapter->vector_stack; in idpf_deinit_vector_stack()
60 kfree(stack->vec_idx); in idpf_deinit_vector_stack()
61 stack->vec_idx = NULL; in idpf_deinit_vector_stack()
62 mutex_unlock(&adapter->vector_lock); in idpf_deinit_vector_stack()
66 * idpf_mb_intr_rel_irq - Free the IRQ association with the OS
74 clear_bit(IDPF_MB_INTR_MODE, adapter->flags); in idpf_mb_intr_rel_irq()
75 free_irq(adapter->msix_entries[0].vector, adapter); in idpf_mb_intr_rel_irq()
76 queue_delayed_work(adapter->mbx_wq, &adapter->mbx_task, 0); in idpf_mb_intr_rel_irq()
80 * idpf_intr_rel - Release interrupt capabilities and free memory
87 if (!adapter->msix_entries) in idpf_intr_rel()
91 pci_free_irq_vectors(adapter->pdev); in idpf_intr_rel()
95 dev_err(&adapter->pdev->dev, in idpf_intr_rel()
99 kfree(adapter->msix_entries); in idpf_intr_rel()
100 adapter->msix_entries = NULL; in idpf_intr_rel()
104 * idpf_mb_intr_clean - Interrupt handler for the mailbox
112 queue_delayed_work(adapter->mbx_wq, &adapter->mbx_task, 0); in idpf_mb_intr_clean()
118 * idpf_mb_irq_enable - Enable MSIX interrupt for the mailbox
123 struct idpf_intr_reg *intr = &adapter->mb_vector.intr_reg; in idpf_mb_irq_enable()
126 val = intr->dyn_ctl_intena_m | intr->dyn_ctl_itridx_m; in idpf_mb_irq_enable()
127 writel(val, intr->dyn_ctl); in idpf_mb_irq_enable()
128 writel(intr->icr_ena_ctlq_m, intr->icr_ena); in idpf_mb_irq_enable()
132 * idpf_mb_intr_req_irq - Request irq for the mailbox interrupt
137 struct idpf_q_vector *mb_vector = &adapter->mb_vector; in idpf_mb_intr_req_irq()
140 irq_num = adapter->msix_entries[mb_vidx].vector; in idpf_mb_intr_req_irq()
141 mb_vector->name = kasprintf(GFP_KERNEL, "%s-%s-%d", in idpf_mb_intr_req_irq()
142 dev_driver_string(&adapter->pdev->dev), in idpf_mb_intr_req_irq()
144 err = request_irq(irq_num, adapter->irq_mb_handler, 0, in idpf_mb_intr_req_irq()
145 mb_vector->name, adapter); in idpf_mb_intr_req_irq()
147 dev_err(&adapter->pdev->dev, in idpf_mb_intr_req_irq()
153 set_bit(IDPF_MB_INTR_MODE, adapter->flags); in idpf_mb_intr_req_irq()
159 * idpf_set_mb_vec_id - Set vector index for mailbox
167 if (adapter->req_vec_chunks) in idpf_set_mb_vec_id()
168 adapter->mb_vector.v_idx = in idpf_set_mb_vec_id()
169 le16_to_cpu(adapter->caps.mailbox_vector_id); in idpf_set_mb_vec_id()
171 adapter->mb_vector.v_idx = 0; in idpf_set_mb_vec_id()
175 * idpf_mb_intr_init - Initialize the mailbox interrupt
180 adapter->dev_ops.reg_ops.mb_intr_reg_init(adapter); in idpf_mb_intr_init()
181 adapter->irq_mb_handler = idpf_mb_intr_clean; in idpf_mb_intr_init()
187 * idpf_vector_lifo_push - push MSIX vector index onto stack
193 struct idpf_vector_lifo *stack = &adapter->vector_stack; in idpf_vector_lifo_push()
195 lockdep_assert_held(&adapter->vector_lock); in idpf_vector_lifo_push()
197 if (stack->top == stack->base) { in idpf_vector_lifo_push()
198 dev_err(&adapter->pdev->dev, "Exceeded the vector stack limit: %d\n", in idpf_vector_lifo_push()
199 stack->top); in idpf_vector_lifo_push()
200 return -EINVAL; in idpf_vector_lifo_push()
203 stack->vec_idx[--stack->top] = vec_idx; in idpf_vector_lifo_push()
209 * idpf_vector_lifo_pop - pop MSIX vector index from stack
214 struct idpf_vector_lifo *stack = &adapter->vector_stack; in idpf_vector_lifo_pop()
216 lockdep_assert_held(&adapter->vector_lock); in idpf_vector_lifo_pop()
218 if (stack->top == stack->size) { in idpf_vector_lifo_pop()
219 dev_err(&adapter->pdev->dev, "No interrupt vectors are available to distribute!\n"); in idpf_vector_lifo_pop()
221 return -EINVAL; in idpf_vector_lifo_pop()
224 return stack->vec_idx[stack->top++]; in idpf_vector_lifo_pop()
228 * idpf_vector_stash - Store the vector indexes onto the stack
233 * This function is a no-op if there are no vectors indexes to be stashed
241 lockdep_assert_held(&adapter->vector_lock); in idpf_vector_stash()
243 if (!vec_info->num_curr_vecs) in idpf_vector_stash()
249 if (vec_info->default_vport) in idpf_vector_stash()
252 for (i = vec_info->num_curr_vecs - 1; i >= base ; i--) { in idpf_vector_stash()
255 adapter->num_avail_msix++; in idpf_vector_stash()
260 * idpf_req_rel_vector_indexes - Request or release MSIX vector indexes
285 mutex_lock(&adapter->vector_lock); in idpf_req_rel_vector_indexes()
286 stack = &adapter->vector_stack; in idpf_req_rel_vector_indexes()
287 num_req_vecs = vec_info->num_req_vecs; in idpf_req_rel_vector_indexes()
295 if (vec_info->default_vport) { in idpf_req_rel_vector_indexes()
299 j = vec_info->index * IDPF_MIN_Q_VEC + IDPF_MBX_Q_VEC; in idpf_req_rel_vector_indexes()
301 q_vector_idxs[num_alloc_vecs++] = stack->vec_idx[j++]; in idpf_req_rel_vector_indexes()
302 num_req_vecs--; in idpf_req_rel_vector_indexes()
307 max_vecs = min(adapter->num_avail_msix, num_req_vecs); in idpf_req_rel_vector_indexes()
313 adapter->num_avail_msix -= max_vecs; in idpf_req_rel_vector_indexes()
316 mutex_unlock(&adapter->vector_lock); in idpf_req_rel_vector_indexes()
322 * idpf_intr_req - Request interrupt capabilities
336 num_q_vecs = total_vecs - IDPF_MBX_Q_VEC; in idpf_intr_req()
340 dev_err(&adapter->pdev->dev, in idpf_intr_req()
343 return -EAGAIN; in idpf_intr_req()
347 v_actual = pci_alloc_irq_vectors(adapter->pdev, min_vectors, in idpf_intr_req()
350 dev_err(&adapter->pdev->dev, "Failed to allocate MSIX vectors: %d\n", in idpf_intr_req()
352 err = -EAGAIN; in idpf_intr_req()
356 adapter->msix_entries = kcalloc(v_actual, sizeof(struct msix_entry), in idpf_intr_req()
359 if (!adapter->msix_entries) { in idpf_intr_req()
360 err = -ENOMEM; in idpf_intr_req()
368 err = -ENOMEM; in idpf_intr_req()
372 if (adapter->req_vec_chunks) { in idpf_intr_req()
376 ac = adapter->req_vec_chunks; in idpf_intr_req()
377 vchunks = &ac->vchunks; in idpf_intr_req()
382 err = -EINVAL; in idpf_intr_req()
393 adapter->msix_entries[vector].entry = vecids[vector]; in idpf_intr_req()
394 adapter->msix_entries[vector].vector = in idpf_intr_req()
395 pci_irq_vector(adapter->pdev, vector); in idpf_intr_req()
398 adapter->num_req_msix = total_vecs; in idpf_intr_req()
399 adapter->num_msix_entries = v_actual; in idpf_intr_req()
404 adapter->num_avail_msix = v_actual - min_vectors; in idpf_intr_req()
424 kfree(adapter->msix_entries); in idpf_intr_req()
425 adapter->msix_entries = NULL; in idpf_intr_req()
427 pci_free_irq_vectors(adapter->pdev); in idpf_intr_req()
435 * idpf_find_mac_filter - Search filter list for specific mac filter
450 list_for_each_entry(f, &vconfig->user_config.mac_filter_list, list) { in idpf_find_mac_filter()
451 if (ether_addr_equal(macaddr, f->macaddr)) in idpf_find_mac_filter()
459 * __idpf_del_mac_filter - Delete a MAC filter from the filter list
470 spin_lock_bh(&vport_config->mac_filter_list_lock); in __idpf_del_mac_filter()
473 list_del(&f->list); in __idpf_del_mac_filter()
476 spin_unlock_bh(&vport_config->mac_filter_list_lock); in __idpf_del_mac_filter()
482 * idpf_del_mac_filter - Delete a MAC filter from the filter list
498 vport_config = np->adapter->vport_config[np->vport_idx]; in idpf_del_mac_filter()
500 spin_lock_bh(&vport_config->mac_filter_list_lock); in idpf_del_mac_filter()
503 f->remove = true; in idpf_del_mac_filter()
505 spin_unlock_bh(&vport_config->mac_filter_list_lock); in idpf_del_mac_filter()
507 return -EINVAL; in idpf_del_mac_filter()
509 spin_unlock_bh(&vport_config->mac_filter_list_lock); in idpf_del_mac_filter()
511 if (np->state == __IDPF_VPORT_UP) { in idpf_del_mac_filter()
523 * __idpf_add_mac_filter - Add mac filter helper function
534 spin_lock_bh(&vport_config->mac_filter_list_lock); in __idpf_add_mac_filter()
538 f->remove = false; in __idpf_add_mac_filter()
539 spin_unlock_bh(&vport_config->mac_filter_list_lock); in __idpf_add_mac_filter()
546 spin_unlock_bh(&vport_config->mac_filter_list_lock); in __idpf_add_mac_filter()
548 return -ENOMEM; in __idpf_add_mac_filter()
551 ether_addr_copy(f->macaddr, macaddr); in __idpf_add_mac_filter()
552 list_add_tail(&f->list, &vport_config->user_config.mac_filter_list); in __idpf_add_mac_filter()
553 f->add = true; in __idpf_add_mac_filter()
555 spin_unlock_bh(&vport_config->mac_filter_list_lock); in __idpf_add_mac_filter()
561 * idpf_add_mac_filter - Add a mac filter to the filter list
577 vport_config = np->adapter->vport_config[np->vport_idx]; in idpf_add_mac_filter()
582 if (np->state == __IDPF_VPORT_UP) in idpf_add_mac_filter()
589 * idpf_del_all_mac_filters - Delete all MAC filters in list
599 vport_config = vport->adapter->vport_config[vport->idx]; in idpf_del_all_mac_filters()
600 spin_lock_bh(&vport_config->mac_filter_list_lock); in idpf_del_all_mac_filters()
602 list_for_each_entry_safe(f, ftmp, &vport_config->user_config.mac_filter_list, in idpf_del_all_mac_filters()
604 list_del(&f->list); in idpf_del_all_mac_filters()
608 spin_unlock_bh(&vport_config->mac_filter_list_lock); in idpf_del_all_mac_filters()
612 * idpf_restore_mac_filters - Re-add all MAC filters in list
623 vport_config = vport->adapter->vport_config[vport->idx]; in idpf_restore_mac_filters()
624 spin_lock_bh(&vport_config->mac_filter_list_lock); in idpf_restore_mac_filters()
626 list_for_each_entry(f, &vport_config->user_config.mac_filter_list, list) in idpf_restore_mac_filters()
627 f->add = true; in idpf_restore_mac_filters()
629 spin_unlock_bh(&vport_config->mac_filter_list_lock); in idpf_restore_mac_filters()
631 idpf_add_del_mac_filters(vport, netdev_priv(vport->netdev), in idpf_restore_mac_filters()
636 * idpf_remove_mac_filters - Remove all MAC filters in list
647 vport_config = vport->adapter->vport_config[vport->idx]; in idpf_remove_mac_filters()
648 spin_lock_bh(&vport_config->mac_filter_list_lock); in idpf_remove_mac_filters()
650 list_for_each_entry(f, &vport_config->user_config.mac_filter_list, list) in idpf_remove_mac_filters()
651 f->remove = true; in idpf_remove_mac_filters()
653 spin_unlock_bh(&vport_config->mac_filter_list_lock); in idpf_remove_mac_filters()
655 idpf_add_del_mac_filters(vport, netdev_priv(vport->netdev), in idpf_remove_mac_filters()
660 * idpf_deinit_mac_addr - deinitialize mac address for vport
668 vport_config = vport->adapter->vport_config[vport->idx]; in idpf_deinit_mac_addr()
670 spin_lock_bh(&vport_config->mac_filter_list_lock); in idpf_deinit_mac_addr()
672 f = idpf_find_mac_filter(vport_config, vport->default_mac_addr); in idpf_deinit_mac_addr()
674 list_del(&f->list); in idpf_deinit_mac_addr()
678 spin_unlock_bh(&vport_config->mac_filter_list_lock); in idpf_deinit_mac_addr()
682 * idpf_init_mac_addr - initialize mac address for vport
690 struct idpf_adapter *adapter = vport->adapter; in idpf_init_mac_addr()
693 if (is_valid_ether_addr(vport->default_mac_addr)) { in idpf_init_mac_addr()
694 eth_hw_addr_set(netdev, vport->default_mac_addr); in idpf_init_mac_addr()
695 ether_addr_copy(netdev->perm_addr, vport->default_mac_addr); in idpf_init_mac_addr()
697 return idpf_add_mac_filter(vport, np, vport->default_mac_addr, in idpf_init_mac_addr()
703 dev_err(&adapter->pdev->dev, in idpf_init_mac_addr()
706 return -EINVAL; in idpf_init_mac_addr()
710 err = idpf_add_mac_filter(vport, np, netdev->dev_addr, false); in idpf_init_mac_addr()
714 dev_info(&adapter->pdev->dev, "Invalid MAC address %pM, using random %pM\n", in idpf_init_mac_addr()
715 vport->default_mac_addr, netdev->dev_addr); in idpf_init_mac_addr()
716 ether_addr_copy(vport->default_mac_addr, netdev->dev_addr); in idpf_init_mac_addr()
722 * idpf_cfg_netdev - Allocate, configure and register a netdev
729 struct idpf_adapter *adapter = vport->adapter; in idpf_cfg_netdev()
735 u16 idx = vport->idx; in idpf_cfg_netdev()
738 vport_config = adapter->vport_config[idx]; in idpf_cfg_netdev()
743 if (test_bit(IDPF_VPORT_REG_NETDEV, vport_config->flags)) { in idpf_cfg_netdev()
744 netdev = adapter->netdevs[idx]; in idpf_cfg_netdev()
746 np->vport = vport; in idpf_cfg_netdev()
747 np->vport_idx = vport->idx; in idpf_cfg_netdev()
748 np->vport_id = vport->vport_id; in idpf_cfg_netdev()
749 vport->netdev = netdev; in idpf_cfg_netdev()
755 vport_config->max_q.max_txq, in idpf_cfg_netdev()
756 vport_config->max_q.max_rxq); in idpf_cfg_netdev()
758 return -ENOMEM; in idpf_cfg_netdev()
760 vport->netdev = netdev; in idpf_cfg_netdev()
762 np->vport = vport; in idpf_cfg_netdev()
763 np->adapter = adapter; in idpf_cfg_netdev()
764 np->vport_idx = vport->idx; in idpf_cfg_netdev()
765 np->vport_id = vport->vport_id; in idpf_cfg_netdev()
767 spin_lock_init(&np->stats_lock); in idpf_cfg_netdev()
771 free_netdev(vport->netdev); in idpf_cfg_netdev()
772 vport->netdev = NULL; in idpf_cfg_netdev()
778 if (idpf_is_queue_model_split(vport->txq_model)) in idpf_cfg_netdev()
779 netdev->netdev_ops = &idpf_netdev_ops_splitq; in idpf_cfg_netdev()
781 netdev->netdev_ops = &idpf_netdev_ops_singleq; in idpf_cfg_netdev()
784 netdev->watchdog_timeo = 5 * HZ; in idpf_cfg_netdev()
786 netdev->dev_port = idx; in idpf_cfg_netdev()
789 netdev->min_mtu = ETH_MIN_MTU; in idpf_cfg_netdev()
790 netdev->max_mtu = vport->max_mtu; in idpf_cfg_netdev()
819 if (idpf_is_cap_ena(vport->adapter, IDPF_SEG_CAPS, in idpf_cfg_netdev()
830 if (!idpf_is_cap_ena_all(vport->adapter, IDPF_CSUM_CAPS, in idpf_cfg_netdev()
832 netdev->gso_partial_features |= in idpf_cfg_netdev()
835 netdev->gso_partial_features |= NETIF_F_GSO_GRE_CSUM; in idpf_cfg_netdev()
841 netdev->features |= dflt_features; in idpf_cfg_netdev()
842 netdev->hw_features |= dflt_features | offloads; in idpf_cfg_netdev()
843 netdev->hw_enc_features |= dflt_features | offloads; in idpf_cfg_netdev()
845 SET_NETDEV_DEV(netdev, &adapter->pdev->dev); in idpf_cfg_netdev()
856 adapter->netdevs[idx] = netdev; in idpf_cfg_netdev()
862 * idpf_get_free_slot - get the next non-NULL location index in array
869 for (i = 0; i < adapter->max_vports; i++) { in idpf_get_free_slot()
870 if (!adapter->vports[i]) in idpf_get_free_slot()
878 * idpf_remove_features - Turn off feature configs
883 struct idpf_adapter *adapter = vport->adapter; in idpf_remove_features()
890 * idpf_vport_stop - Disable a vport
895 struct idpf_netdev_priv *np = netdev_priv(vport->netdev); in idpf_vport_stop()
897 if (np->state <= __IDPF_VPORT_DOWN) in idpf_vport_stop()
900 netif_carrier_off(vport->netdev); in idpf_vport_stop()
901 netif_tx_disable(vport->netdev); in idpf_vport_stop()
911 if (test_and_clear_bit(IDPF_VPORT_DEL_QUEUES, vport->flags)) in idpf_vport_stop()
916 vport->link_up = false; in idpf_vport_stop()
920 np->state = __IDPF_VPORT_DOWN; in idpf_vport_stop()
924 * idpf_stop - Disables a network interface
927 * The stop entry point is called when an interface is de-activated by the OS,
931 * Returns success only - not allowed to fail
938 if (test_bit(IDPF_REMOVE_IN_PROG, np->adapter->flags)) in idpf_stop()
952 * idpf_decfg_netdev - Unregister the netdev
957 struct idpf_adapter *adapter = vport->adapter; in idpf_decfg_netdev()
959 unregister_netdev(vport->netdev); in idpf_decfg_netdev()
960 free_netdev(vport->netdev); in idpf_decfg_netdev()
961 vport->netdev = NULL; in idpf_decfg_netdev()
963 adapter->netdevs[vport->idx] = NULL; in idpf_decfg_netdev()
967 * idpf_vport_rel - Delete a vport and free its resources
972 struct idpf_adapter *adapter = vport->adapter; in idpf_vport_rel()
977 u16 idx = vport->idx; in idpf_vport_rel()
980 vport_config = adapter->vport_config[vport->idx]; in idpf_vport_rel()
982 rss_data = &vport_config->user_config.rss_data; in idpf_vport_rel()
983 kfree(rss_data->rss_key); in idpf_vport_rel()
984 rss_data->rss_key = NULL; in idpf_vport_rel()
988 /* Set all bits as we dont know on which vc_state the vport vhnl_wq in idpf_vport_rel()
993 set_bit(i, vport->vc_state); in idpf_vport_rel()
994 wake_up(&vport->vchnl_wq); in idpf_vport_rel()
996 mutex_destroy(&vport->vc_buf_lock); in idpf_vport_rel()
1000 clear_bit(i, vport->vc_state); in idpf_vport_rel()
1003 max_q.max_rxq = vport_config->max_q.max_rxq; in idpf_vport_rel()
1004 max_q.max_txq = vport_config->max_q.max_txq; in idpf_vport_rel()
1005 max_q.max_bufq = vport_config->max_q.max_bufq; in idpf_vport_rel()
1006 max_q.max_complq = vport_config->max_q.max_complq; in idpf_vport_rel()
1011 vec_info.num_curr_vecs = vport->num_q_vectors; in idpf_vport_rel()
1012 vec_info.default_vport = vport->default_vport; in idpf_vport_rel()
1014 idpf_req_rel_vector_indexes(adapter, vport->q_vector_idxs, &vec_info); in idpf_vport_rel()
1016 kfree(vport->q_vector_idxs); in idpf_vport_rel()
1017 vport->q_vector_idxs = NULL; in idpf_vport_rel()
1019 kfree(adapter->vport_params_recvd[idx]); in idpf_vport_rel()
1020 adapter->vport_params_recvd[idx] = NULL; in idpf_vport_rel()
1021 kfree(adapter->vport_params_reqd[idx]); in idpf_vport_rel()
1022 adapter->vport_params_reqd[idx] = NULL; in idpf_vport_rel()
1023 if (adapter->vport_config[idx]) { in idpf_vport_rel()
1024 kfree(adapter->vport_config[idx]->req_qs_chunks); in idpf_vport_rel()
1025 adapter->vport_config[idx]->req_qs_chunks = NULL; in idpf_vport_rel()
1028 adapter->num_alloc_vports--; in idpf_vport_rel()
1032 * idpf_vport_dealloc - cleanup and release a given vport
1039 struct idpf_adapter *adapter = vport->adapter; in idpf_vport_dealloc()
1040 unsigned int i = vport->idx; in idpf_vport_dealloc()
1045 if (!test_bit(IDPF_HR_RESET_IN_PROG, adapter->flags)) in idpf_vport_dealloc()
1047 if (test_bit(IDPF_REMOVE_IN_PROG, adapter->flags)) in idpf_vport_dealloc()
1050 if (adapter->netdevs[i]) { in idpf_vport_dealloc()
1051 struct idpf_netdev_priv *np = netdev_priv(adapter->netdevs[i]); in idpf_vport_dealloc()
1053 np->vport = NULL; in idpf_vport_dealloc()
1058 adapter->vports[i] = NULL; in idpf_vport_dealloc()
1059 adapter->next_vport = idpf_get_free_slot(adapter); in idpf_vport_dealloc()
1063 * idpf_is_hsplit_supported - check whether the header split is supported
1070 return idpf_is_queue_model_split(vport->rxq_model) && in idpf_is_hsplit_supported()
1071 idpf_is_cap_ena_all(vport->adapter, IDPF_HSPLIT_CAPS, in idpf_is_hsplit_supported()
1076 * idpf_vport_get_hsplit - get the current header split feature state
1090 config = &vport->adapter->vport_config[vport->idx]->user_config; in idpf_vport_get_hsplit()
1092 return test_bit(__IDPF_USER_FLAG_HSPLIT, config->user_flags) ? in idpf_vport_get_hsplit()
1098 * idpf_vport_set_hsplit - enable or disable header split on a given vport
1111 config = &vport->adapter->vport_config[vport->idx]->user_config; in idpf_vport_set_hsplit()
1117 __set_bit(__IDPF_USER_FLAG_HSPLIT, config->user_flags); in idpf_vport_set_hsplit()
1120 __clear_bit(__IDPF_USER_FLAG_HSPLIT, config->user_flags); in idpf_vport_set_hsplit()
1128 * idpf_vport_alloc - Allocates the next available struct vport in the adapter
1138 u16 idx = adapter->next_vport; in idpf_vport_alloc()
1149 if (!adapter->vport_config[idx]) { in idpf_vport_alloc()
1159 adapter->vport_config[idx] = vport_config; in idpf_vport_alloc()
1162 vport->idx = idx; in idpf_vport_alloc()
1163 vport->adapter = adapter; in idpf_vport_alloc()
1164 vport->compln_clean_budget = IDPF_TX_COMPLQ_CLEAN_BUDGET; in idpf_vport_alloc()
1165 vport->default_vport = adapter->num_alloc_vports < in idpf_vport_alloc()
1168 num_max_q = max(max_q->max_txq, max_q->max_rxq); in idpf_vport_alloc()
1169 vport->q_vector_idxs = kcalloc(num_max_q, sizeof(u16), GFP_KERNEL); in idpf_vport_alloc()
1170 if (!vport->q_vector_idxs) { in idpf_vport_alloc()
1182 rss_data = &adapter->vport_config[idx]->user_config.rss_data; in idpf_vport_alloc()
1183 rss_data->rss_key = kzalloc(rss_data->rss_key_size, GFP_KERNEL); in idpf_vport_alloc()
1184 if (!rss_data->rss_key) { in idpf_vport_alloc()
1190 netdev_rss_key_fill((void *)rss_data->rss_key, rss_data->rss_key_size); in idpf_vport_alloc()
1193 adapter->vports[idx] = vport; in idpf_vport_alloc()
1194 adapter->vport_ids[idx] = idpf_get_vport_id(vport); in idpf_vport_alloc()
1196 adapter->num_alloc_vports++; in idpf_vport_alloc()
1197 /* prepare adapter->next_vport for next use */ in idpf_vport_alloc()
1198 adapter->next_vport = idpf_get_free_slot(adapter); in idpf_vport_alloc()
1204 * idpf_get_stats64 - get statistics for network device structure
1213 spin_lock_bh(&np->stats_lock); in idpf_get_stats64()
1214 *stats = np->netstats; in idpf_get_stats64()
1215 spin_unlock_bh(&np->stats_lock); in idpf_get_stats64()
1219 * idpf_statistics_task - Delayed task to get statistics over mailbox
1229 for (i = 0; i < adapter->max_vports; i++) { in idpf_statistics_task()
1230 struct idpf_vport *vport = adapter->vports[i]; in idpf_statistics_task()
1232 if (vport && !test_bit(IDPF_HR_RESET_IN_PROG, adapter->flags)) in idpf_statistics_task()
1236 queue_delayed_work(adapter->stats_wq, &adapter->stats_task, in idpf_statistics_task()
1241 * idpf_mbx_task - Delayed task to handle mailbox responses
1250 if (test_bit(IDPF_MB_INTR_MODE, adapter->flags)) in idpf_mbx_task()
1253 queue_delayed_work(adapter->mbx_wq, &adapter->mbx_task, in idpf_mbx_task()
1260 * idpf_service_task - Delayed task for handling mailbox responses
1272 !test_bit(IDPF_REMOVE_IN_PROG, adapter->flags)) { in idpf_service_task()
1273 dev_info(&adapter->pdev->dev, "HW reset detected\n"); in idpf_service_task()
1274 set_bit(IDPF_HR_FUNC_RESET, adapter->flags); in idpf_service_task()
1275 queue_delayed_work(adapter->vc_event_wq, in idpf_service_task()
1276 &adapter->vc_event_task, in idpf_service_task()
1280 queue_delayed_work(adapter->serv_wq, &adapter->serv_task, in idpf_service_task()
1285 * idpf_restore_features - Restore feature configs
1290 struct idpf_adapter *adapter = vport->adapter; in idpf_restore_features()
1297 * idpf_set_real_num_queues - set number of queues for netdev
1306 err = netif_set_real_num_rx_queues(vport->netdev, vport->num_rxq); in idpf_set_real_num_queues()
1310 return netif_set_real_num_tx_queues(vport->netdev, vport->num_txq); in idpf_set_real_num_queues()
1314 * idpf_up_complete - Complete interface up sequence
1321 struct idpf_netdev_priv *np = netdev_priv(vport->netdev); in idpf_up_complete()
1323 if (vport->link_up && !netif_carrier_ok(vport->netdev)) { in idpf_up_complete()
1324 netif_carrier_on(vport->netdev); in idpf_up_complete()
1325 netif_tx_start_all_queues(vport->netdev); in idpf_up_complete()
1328 np->state = __IDPF_VPORT_UP; in idpf_up_complete()
1334 * idpf_rx_init_buf_tail - Write initial buffer ring tail value
1341 for (i = 0; i < vport->num_rxq_grp; i++) { in idpf_rx_init_buf_tail()
1342 struct idpf_rxq_group *grp = &vport->rxq_grps[i]; in idpf_rx_init_buf_tail()
1344 if (idpf_is_queue_model_split(vport->rxq_model)) { in idpf_rx_init_buf_tail()
1345 for (j = 0; j < vport->num_bufqs_per_qgrp; j++) { in idpf_rx_init_buf_tail()
1347 &grp->splitq.bufq_sets[j].bufq; in idpf_rx_init_buf_tail()
1349 writel(q->next_to_alloc, q->tail); in idpf_rx_init_buf_tail()
1352 for (j = 0; j < grp->singleq.num_rxq; j++) { in idpf_rx_init_buf_tail()
1354 grp->singleq.rxqs[j]; in idpf_rx_init_buf_tail()
1356 writel(q->next_to_alloc, q->tail); in idpf_rx_init_buf_tail()
1363 * idpf_vport_open - Bring up a vport
1369 struct idpf_netdev_priv *np = netdev_priv(vport->netdev); in idpf_vport_open()
1370 struct idpf_adapter *adapter = vport->adapter; in idpf_vport_open()
1374 if (np->state != __IDPF_VPORT_DOWN) in idpf_vport_open()
1375 return -EBUSY; in idpf_vport_open()
1378 netif_carrier_off(vport->netdev); in idpf_vport_open()
1388 dev_err(&adapter->pdev->dev, "Failed to allocate interrupts for vport %u: %d\n", in idpf_vport_open()
1389 vport->vport_id, err); in idpf_vport_open()
1395 dev_err(&adapter->pdev->dev, "Failed to initialize queue ids for vport %u: %d\n", in idpf_vport_open()
1396 vport->vport_id, err); in idpf_vport_open()
1402 dev_err(&adapter->pdev->dev, "Failed to initialize interrupts for vport %u: %d\n", in idpf_vport_open()
1403 vport->vport_id, err); in idpf_vport_open()
1409 dev_err(&adapter->pdev->dev, "Failed to initialize RX buffers for vport %u: %d\n", in idpf_vport_open()
1410 vport->vport_id, err); in idpf_vport_open()
1416 dev_err(&adapter->pdev->dev, "Failed to initialize queue registers for vport %u: %d\n", in idpf_vport_open()
1417 vport->vport_id, err); in idpf_vport_open()
1425 dev_err(&adapter->pdev->dev, "Failed to configure queues for vport %u, %d\n", in idpf_vport_open()
1426 vport->vport_id, err); in idpf_vport_open()
1432 dev_err(&adapter->pdev->dev, "Failed to map queue vectors for vport %u: %d\n", in idpf_vport_open()
1433 vport->vport_id, err); in idpf_vport_open()
1439 dev_err(&adapter->pdev->dev, "Failed to enable queues for vport %u: %d\n", in idpf_vport_open()
1440 vport->vport_id, err); in idpf_vport_open()
1446 dev_err(&adapter->pdev->dev, "Failed to enable vport %u: %d\n", in idpf_vport_open()
1447 vport->vport_id, err); in idpf_vport_open()
1448 err = -EAGAIN; in idpf_vport_open()
1454 vport_config = adapter->vport_config[vport->idx]; in idpf_vport_open()
1455 if (vport_config->user_config.rss_data.rss_lut) in idpf_vport_open()
1460 dev_err(&adapter->pdev->dev, "Failed to initialize RSS for vport %u: %d\n", in idpf_vport_open()
1461 vport->vport_id, err); in idpf_vport_open()
1467 dev_err(&adapter->pdev->dev, "Failed to complete interface up for vport %u: %d\n", in idpf_vport_open()
1468 vport->vport_id, err); in idpf_vport_open()
1493 * idpf_init_task - Delayed initialization task
1517 if (adapter->num_alloc_vports < num_default_vports) in idpf_init_task()
1532 pdev = adapter->pdev; in idpf_init_task()
1535 err = -EFAULT; in idpf_init_task()
1536 dev_err(&pdev->dev, "failed to allocate vport: %d\n", in idpf_init_task()
1542 index = vport->idx; in idpf_init_task()
1543 vport_config = adapter->vport_config[index]; in idpf_init_task()
1545 init_waitqueue_head(&vport->sw_marker_wq); in idpf_init_task()
1546 init_waitqueue_head(&vport->vchnl_wq); in idpf_init_task()
1548 mutex_init(&vport->vc_buf_lock); in idpf_init_task()
1549 spin_lock_init(&vport_config->mac_filter_list_lock); in idpf_init_task()
1551 INIT_LIST_HEAD(&vport_config->user_config.mac_filter_list); in idpf_init_task()
1555 dev_err(&pdev->dev, "failed to get required descriptor ids\n"); in idpf_init_task()
1567 np = netdev_priv(vport->netdev); in idpf_init_task()
1568 np->state = __IDPF_VPORT_DOWN; in idpf_init_task()
1569 if (test_and_clear_bit(IDPF_VPORT_UP_REQUESTED, vport_config->flags)) in idpf_init_task()
1575 if (adapter->num_alloc_vports < num_default_vports) { in idpf_init_task()
1576 queue_delayed_work(adapter->init_wq, &adapter->init_task, in idpf_init_task()
1577 msecs_to_jiffies(5 * (adapter->pdev->devfn & 0x07))); in idpf_init_task()
1582 for (index = 0; index < adapter->max_vports; index++) { in idpf_init_task()
1583 if (adapter->netdevs[index] && in idpf_init_task()
1585 adapter->vport_config[index]->flags)) { in idpf_init_task()
1586 register_netdev(adapter->netdevs[index]); in idpf_init_task()
1588 adapter->vport_config[index]->flags); in idpf_init_task()
1595 clear_bit(IDPF_HR_RESET_IN_PROG, adapter->flags); in idpf_init_task()
1597 queue_delayed_work(adapter->stats_wq, &adapter->stats_task, in idpf_init_task()
1598 msecs_to_jiffies(10 * (pdev->devfn & 0x07))); in idpf_init_task()
1606 adapter->vports[index] = NULL; in idpf_init_task()
1609 for (index = 0; index < adapter->max_vports; index++) { in idpf_init_task()
1610 if (adapter->vports[index]) in idpf_init_task()
1611 idpf_vport_dealloc(adapter->vports[index]); in idpf_init_task()
1614 clear_bit(IDPF_HR_RESET_IN_PROG, adapter->flags); in idpf_init_task()
1618 * idpf_sriov_ena - Enable or change number of VFs
1624 struct device *dev = &adapter->pdev->dev; in idpf_sriov_ena()
1634 err = pci_enable_sriov(adapter->pdev, num_vfs); in idpf_sriov_ena()
1637 dev_err(dev, "Failed to enable SR-IOV: %d\n", err); in idpf_sriov_ena()
1642 adapter->num_vfs = num_vfs; in idpf_sriov_ena()
1648 * idpf_sriov_configure - Configure the requested VFs
1660 dev_info(&pdev->dev, "SR-IOV is not supported on this device\n"); in idpf_sriov_configure()
1662 return -EOPNOTSUPP; in idpf_sriov_configure()
1669 dev_warn(&pdev->dev, "Unable to free VFs because some are assigned to VMs\n"); in idpf_sriov_configure()
1671 return -EBUSY; in idpf_sriov_configure()
1674 pci_disable_sriov(adapter->pdev); in idpf_sriov_configure()
1676 adapter->num_vfs = 0; in idpf_sriov_configure()
1682 * idpf_deinit_task - Device deinit routine
1695 cancel_delayed_work_sync(&adapter->init_task); in idpf_deinit_task()
1697 if (!adapter->vports) in idpf_deinit_task()
1700 cancel_delayed_work_sync(&adapter->stats_task); in idpf_deinit_task()
1702 for (i = 0; i < adapter->max_vports; i++) { in idpf_deinit_task()
1703 if (adapter->vports[i]) in idpf_deinit_task()
1704 idpf_vport_dealloc(adapter->vports[i]); in idpf_deinit_task()
1709 * idpf_check_reset_complete - check that reset is complete
1713 * Returns 0 if device is ready to use, or -EBUSY if it's in reset.
1718 struct idpf_adapter *adapter = hw->back; in idpf_check_reset_complete()
1722 u32 reg_val = readl(reset_reg->rstat); in idpf_check_reset_complete()
1728 if (reg_val != 0xFFFFFFFF && (reg_val & reset_reg->rstat_m)) in idpf_check_reset_complete()
1734 dev_warn(&adapter->pdev->dev, "Device reset timeout!\n"); in idpf_check_reset_complete()
1738 clear_bit(IDPF_HR_RESET_IN_PROG, adapter->flags); in idpf_check_reset_complete()
1740 return -EBUSY; in idpf_check_reset_complete()
1744 * idpf_set_vport_state - Set the vport state to be after the reset
1751 for (i = 0; i < adapter->max_vports; i++) { in idpf_set_vport_state()
1754 if (!adapter->netdevs[i]) in idpf_set_vport_state()
1757 np = netdev_priv(adapter->netdevs[i]); in idpf_set_vport_state()
1758 if (np->state == __IDPF_VPORT_UP) in idpf_set_vport_state()
1760 adapter->vport_config[i]->flags); in idpf_set_vport_state()
1765 * idpf_init_hard_reset - Initiate a hardware reset
1774 struct idpf_reg_ops *reg_ops = &adapter->dev_ops.reg_ops; in idpf_init_hard_reset()
1775 struct device *dev = &adapter->pdev->dev; in idpf_init_hard_reset()
1780 mutex_lock(&adapter->vport_ctrl_lock); in idpf_init_hard_reset()
1785 for (i = 0; i < adapter->max_vports; i++) { in idpf_init_hard_reset()
1786 netdev = adapter->netdevs[i]; in idpf_init_hard_reset()
1795 if (test_and_clear_bit(IDPF_HR_DRV_LOAD, adapter->flags)) { in idpf_init_hard_reset()
1796 reg_ops->trigger_reset(adapter, IDPF_HR_DRV_LOAD); in idpf_init_hard_reset()
1797 } else if (test_and_clear_bit(IDPF_HR_FUNC_RESET, adapter->flags)) { in idpf_init_hard_reset()
1803 reg_ops->trigger_reset(adapter, IDPF_HR_FUNC_RESET); in idpf_init_hard_reset()
1807 err = -EBADRQC; in idpf_init_hard_reset()
1812 err = idpf_check_reset_complete(&adapter->hw, &adapter->reset_reg); in idpf_init_hard_reset()
1815 adapter->state); in idpf_init_hard_reset()
1838 while (test_bit(IDPF_HR_RESET_IN_PROG, adapter->flags)) in idpf_init_hard_reset()
1842 mutex_unlock(&adapter->vport_ctrl_lock); in idpf_init_hard_reset()
1848 * idpf_vc_event_task - Handle virtchannel event logic
1857 if (test_bit(IDPF_REMOVE_IN_PROG, adapter->flags)) in idpf_vc_event_task()
1860 if (test_bit(IDPF_HR_FUNC_RESET, adapter->flags) || in idpf_vc_event_task()
1861 test_bit(IDPF_HR_DRV_LOAD, adapter->flags)) { in idpf_vc_event_task()
1862 set_bit(IDPF_HR_RESET_IN_PROG, adapter->flags); in idpf_vc_event_task()
1868 * idpf_initiate_soft_reset - Initiate a software reset
1878 struct idpf_netdev_priv *np = netdev_priv(vport->netdev); in idpf_initiate_soft_reset()
1879 enum idpf_vport_state current_state = np->state; in idpf_initiate_soft_reset()
1880 struct idpf_adapter *adapter = vport->adapter; in idpf_initiate_soft_reset()
1886 * again. Instead, we can pre-allocate the new resources before doing in idpf_initiate_soft_reset()
1898 return -ENOMEM; in idpf_initiate_soft_reset()
1922 dev_err(&adapter->pdev->dev, "Unhandled soft reset cause\n"); in idpf_initiate_soft_reset()
1923 err = -EINVAL; in idpf_initiate_soft_reset()
1933 set_bit(IDPF_VPORT_DEL_QUEUES, vport->flags); in idpf_initiate_soft_reset()
1944 err = idpf_send_add_queues_msg(vport, new_vport->num_txq, in idpf_initiate_soft_reset()
1945 new_vport->num_complq, in idpf_initiate_soft_reset()
1946 new_vport->num_rxq, in idpf_initiate_soft_reset()
1947 new_vport->num_bufq); in idpf_initiate_soft_reset()
1960 for (i = 0; i < vport->num_txq_grp; i++) { in idpf_initiate_soft_reset()
1961 struct idpf_txq_group *tx_qgrp = &vport->txq_grps[i]; in idpf_initiate_soft_reset()
1964 tx_qgrp->vport = vport; in idpf_initiate_soft_reset()
1965 for (j = 0; j < tx_qgrp->num_txq; j++) in idpf_initiate_soft_reset()
1966 tx_qgrp->txqs[j]->vport = vport; in idpf_initiate_soft_reset()
1968 if (idpf_is_queue_model_split(vport->txq_model)) in idpf_initiate_soft_reset()
1969 tx_qgrp->complq->vport = vport; in idpf_initiate_soft_reset()
1972 for (i = 0; i < vport->num_rxq_grp; i++) { in idpf_initiate_soft_reset()
1973 struct idpf_rxq_group *rx_qgrp = &vport->rxq_grps[i]; in idpf_initiate_soft_reset()
1978 rx_qgrp->vport = vport; in idpf_initiate_soft_reset()
1979 for (j = 0; j < vport->num_bufqs_per_qgrp; j++) in idpf_initiate_soft_reset()
1980 rx_qgrp->splitq.bufq_sets[j].bufq.vport = vport; in idpf_initiate_soft_reset()
1982 if (idpf_is_queue_model_split(vport->rxq_model)) in idpf_initiate_soft_reset()
1983 num_rxq = rx_qgrp->splitq.num_rxq_sets; in idpf_initiate_soft_reset()
1985 num_rxq = rx_qgrp->singleq.num_rxq; in idpf_initiate_soft_reset()
1988 if (idpf_is_queue_model_split(vport->rxq_model)) in idpf_initiate_soft_reset()
1989 q = &rx_qgrp->splitq.rxq_sets[j]->rxq; in idpf_initiate_soft_reset()
1991 q = rx_qgrp->singleq.rxqs[j]; in idpf_initiate_soft_reset()
1992 q->vport = vport; in idpf_initiate_soft_reset()
2019 * idpf_addr_sync - Callback for dev_(mc|uc)_sync to add address
2035 return idpf_add_mac_filter(np->vport, np, addr, true); in idpf_addr_sync()
2039 * idpf_addr_unsync - Callback for dev_(mc|uc)_sync to remove address
2060 if (ether_addr_equal(addr, netdev->dev_addr)) in idpf_addr_unsync()
2063 idpf_del_mac_filter(np->vport, np, addr, true); in idpf_addr_unsync()
2069 * idpf_set_rx_mode - NDO callback to set the netdev filters
2084 adapter = np->adapter; in idpf_set_rx_mode()
2085 dev = &adapter->pdev->dev; in idpf_set_rx_mode()
2095 config_data = &adapter->vport_config[np->vport_idx]->user_config; in idpf_set_rx_mode()
2103 if ((netdev->flags & IFF_PROMISC) && in idpf_set_rx_mode()
2104 !test_and_set_bit(__IDPF_PROMISC_UC, config_data->user_flags)) { in idpf_set_rx_mode()
2106 dev_info(&adapter->pdev->dev, "Entering promiscuous mode\n"); in idpf_set_rx_mode()
2107 if (!test_and_set_bit(__IDPF_PROMISC_MC, adapter->flags)) in idpf_set_rx_mode()
2111 if (!(netdev->flags & IFF_PROMISC) && in idpf_set_rx_mode()
2112 test_and_clear_bit(__IDPF_PROMISC_UC, config_data->user_flags)) { in idpf_set_rx_mode()
2117 if (netdev->flags & IFF_ALLMULTI && in idpf_set_rx_mode()
2118 !test_and_set_bit(__IDPF_PROMISC_MC, config_data->user_flags)) { in idpf_set_rx_mode()
2123 if (!(netdev->flags & (IFF_ALLMULTI | IFF_PROMISC)) && in idpf_set_rx_mode()
2124 test_and_clear_bit(__IDPF_PROMISC_MC, config_data->user_flags)) { in idpf_set_rx_mode()
2132 err = idpf_set_promiscuous(adapter, config_data, np->vport_id); in idpf_set_rx_mode()
2138 * idpf_vport_manage_rss_lut - disable/enable RSS
2149 u16 idx = vport->idx; in idpf_vport_manage_rss_lut()
2152 rss_data = &vport->adapter->vport_config[idx]->user_config.rss_data; in idpf_vport_manage_rss_lut()
2153 lut_size = rss_data->rss_lut_size * sizeof(u32); in idpf_vport_manage_rss_lut()
2157 memcpy(rss_data->rss_lut, rss_data->cached_lut, lut_size); in idpf_vport_manage_rss_lut()
2162 memcpy(rss_data->cached_lut, rss_data->rss_lut, lut_size); in idpf_vport_manage_rss_lut()
2165 memset(rss_data->rss_lut, 0, lut_size); in idpf_vport_manage_rss_lut()
2172 * idpf_set_features - set the netdev feature flags
2179 netdev_features_t changed = netdev->features ^ features; in idpf_set_features()
2187 adapter = vport->adapter; in idpf_set_features()
2190 …dev_err(&adapter->pdev->dev, "Device is resetting, changing netdev features temporarily unavailabl… in idpf_set_features()
2191 err = -EBUSY; in idpf_set_features()
2196 netdev->features ^= NETIF_F_RXHASH; in idpf_set_features()
2203 netdev->features ^= NETIF_F_GRO_HW; in idpf_set_features()
2210 netdev->features ^= NETIF_F_LOOPBACK; in idpf_set_features()
2221 * idpf_open - Called when a network interface becomes active
2248 * idpf_change_mtu - NDO callback to change the MTU
2262 netdev->mtu = new_mtu; in idpf_change_mtu()
2272 * idpf_features_check - Validate packet conforms to limits
2282 struct idpf_adapter *adapter = vport->adapter; in idpf_features_check()
2289 if (skb->ip_summed != CHECKSUM_PARTIAL) in idpf_features_check()
2296 (skb_shinfo(skb)->gso_size < IDPF_TX_TSO_MIN_MSS)) in idpf_features_check()
2308 if (!skb->encapsulation) in idpf_features_check()
2312 len = skb_inner_network_header(skb) - skb_transport_header(skb); in idpf_features_check()
2321 /* No need to validate L4LEN as TCP is the only protocol with a in idpf_features_check()
2333 * idpf_set_mac - NDO callback to set port mac address
2350 if (!idpf_is_cap_ena(vport->adapter, IDPF_OTHER_CAPS, in idpf_set_mac()
2352 dev_info(&vport->adapter->pdev->dev, "Setting MAC address is not supported\n"); in idpf_set_mac()
2353 err = -EOPNOTSUPP; in idpf_set_mac()
2357 if (!is_valid_ether_addr(addr->sa_data)) { in idpf_set_mac()
2358 dev_info(&vport->adapter->pdev->dev, "Invalid MAC address: %pM\n", in idpf_set_mac()
2359 addr->sa_data); in idpf_set_mac()
2360 err = -EADDRNOTAVAIL; in idpf_set_mac()
2364 if (ether_addr_equal(netdev->dev_addr, addr->sa_data)) in idpf_set_mac()
2367 vport_config = vport->adapter->vport_config[vport->idx]; in idpf_set_mac()
2368 err = idpf_add_mac_filter(vport, np, addr->sa_data, false); in idpf_set_mac()
2370 __idpf_del_mac_filter(vport_config, addr->sa_data); in idpf_set_mac()
2374 if (is_valid_ether_addr(vport->default_mac_addr)) in idpf_set_mac()
2375 idpf_del_mac_filter(vport, np, vport->default_mac_addr, false); in idpf_set_mac()
2377 ether_addr_copy(vport->default_mac_addr, addr->sa_data); in idpf_set_mac()
2378 eth_hw_addr_set(netdev, addr->sa_data); in idpf_set_mac()
2387 * idpf_alloc_dma_mem - Allocate dma memory
2394 struct idpf_adapter *adapter = hw->back; in idpf_alloc_dma_mem()
2397 mem->va = dma_alloc_coherent(&adapter->pdev->dev, sz, in idpf_alloc_dma_mem()
2398 &mem->pa, GFP_KERNEL); in idpf_alloc_dma_mem()
2399 mem->size = sz; in idpf_alloc_dma_mem()
2401 return mem->va; in idpf_alloc_dma_mem()
2405 * idpf_free_dma_mem - Free the allocated dma memory
2411 struct idpf_adapter *adapter = hw->back; in idpf_free_dma_mem()
2413 dma_free_coherent(&adapter->pdev->dev, mem->size, in idpf_free_dma_mem()
2414 mem->va, mem->pa); in idpf_free_dma_mem()
2415 mem->size = 0; in idpf_free_dma_mem()
2416 mem->va = NULL; in idpf_free_dma_mem()
2417 mem->pa = 0; in idpf_free_dma_mem()