Lines Matching refs:efx
106 static void efx_remove_port(struct efx_nic *efx);
107 static int efx_xdp_setup_prog(struct efx_nic *efx, struct bpf_prog *prog);
112 #define EFX_ASSERT_RESET_SERIALISED(efx) \ argument
114 if ((efx->state == STATE_READY) || \
115 (efx->state == STATE_RECOVERY) || \
116 (efx->state == STATE_DISABLED)) \
126 static void efx_fini_port(struct efx_nic *efx);
128 static int efx_probe_port(struct efx_nic *efx) in efx_probe_port() argument
132 netif_dbg(efx, probe, efx->net_dev, "create port\n"); in efx_probe_port()
135 efx->phy_mode = PHY_MODE_SPECIAL; in efx_probe_port()
138 rc = efx->type->probe_port(efx); in efx_probe_port()
143 eth_hw_addr_set(efx->net_dev, efx->net_dev->perm_addr); in efx_probe_port()
148 static int efx_init_port(struct efx_nic *efx) in efx_init_port() argument
152 netif_dbg(efx, drv, efx->net_dev, "init port\n"); in efx_init_port()
154 mutex_lock(&efx->mac_lock); in efx_init_port()
156 efx->port_initialized = true; in efx_init_port()
159 rc = efx_siena_mcdi_port_reconfigure(efx); in efx_init_port()
163 mutex_unlock(&efx->mac_lock); in efx_init_port()
167 mutex_unlock(&efx->mac_lock); in efx_init_port()
171 static void efx_fini_port(struct efx_nic *efx) in efx_fini_port() argument
173 netif_dbg(efx, drv, efx->net_dev, "shut down port\n"); in efx_fini_port()
175 if (!efx->port_initialized) in efx_fini_port()
178 efx->port_initialized = false; in efx_fini_port()
180 efx->link_state.up = false; in efx_fini_port()
181 efx_siena_link_status_changed(efx); in efx_fini_port()
184 static void efx_remove_port(struct efx_nic *efx) in efx_remove_port() argument
186 netif_dbg(efx, drv, efx->net_dev, "destroying port\n"); in efx_remove_port()
188 efx->type->remove_port(efx); in efx_remove_port()
207 static void efx_associate(struct efx_nic *efx) in efx_associate() argument
211 if (efx->primary == efx) { in efx_associate()
214 netif_dbg(efx, probe, efx->net_dev, "adding to primary list\n"); in efx_associate()
215 list_add_tail(&efx->node, &efx_primary_list); in efx_associate()
219 if (efx_same_controller(efx, other)) { in efx_associate()
223 pci_name(efx->pci_dev), in efx_associate()
224 efx->net_dev->name); in efx_associate()
226 &efx->secondary_list); in efx_associate()
227 other->primary = efx; in efx_associate()
234 if (efx_same_controller(efx, other)) { in efx_associate()
235 netif_dbg(efx, probe, efx->net_dev, in efx_associate()
239 list_add_tail(&efx->node, in efx_associate()
241 efx->primary = other; in efx_associate()
246 netif_dbg(efx, probe, efx->net_dev, in efx_associate()
248 list_add_tail(&efx->node, &efx_unassociated_list); in efx_associate()
252 static void efx_dissociate(struct efx_nic *efx) in efx_dissociate() argument
256 list_del(&efx->node); in efx_dissociate()
257 efx->primary = NULL; in efx_dissociate()
259 list_for_each_entry_safe(other, next, &efx->secondary_list, node) { in efx_dissociate()
268 static int efx_probe_nic(struct efx_nic *efx) in efx_probe_nic() argument
272 netif_dbg(efx, probe, efx->net_dev, "creating NIC\n"); in efx_probe_nic()
275 rc = efx->type->probe(efx); in efx_probe_nic()
280 if (!efx->max_channels || !efx->max_tx_channels) { in efx_probe_nic()
281 netif_err(efx, drv, efx->net_dev, in efx_probe_nic()
291 rc = efx_siena_probe_interrupts(efx); in efx_probe_nic()
295 rc = efx_siena_set_channels(efx); in efx_probe_nic()
300 rc = efx->type->dimension_resources(efx); in efx_probe_nic()
306 efx_siena_remove_interrupts(efx); in efx_probe_nic()
310 if (efx->n_channels > 1) in efx_probe_nic()
311 netdev_rss_key_fill(efx->rss_context.rx_hash_key, in efx_probe_nic()
312 sizeof(efx->rss_context.rx_hash_key)); in efx_probe_nic()
313 efx_siena_set_default_rx_indir_table(efx, &efx->rss_context); in efx_probe_nic()
316 efx->irq_mod_step_us = DIV_ROUND_UP(efx->timer_quantum_ns, 1000); in efx_probe_nic()
317 efx_siena_init_irq_moderation(efx, tx_irq_mod_usec, rx_irq_mod_usec, in efx_probe_nic()
323 efx_siena_remove_interrupts(efx); in efx_probe_nic()
325 efx->type->remove(efx); in efx_probe_nic()
329 static void efx_remove_nic(struct efx_nic *efx) in efx_remove_nic() argument
331 netif_dbg(efx, drv, efx->net_dev, "destroying NIC\n"); in efx_remove_nic()
333 efx_siena_remove_interrupts(efx); in efx_remove_nic()
334 efx->type->remove(efx); in efx_remove_nic()
343 static int efx_probe_all(struct efx_nic *efx) in efx_probe_all() argument
347 rc = efx_probe_nic(efx); in efx_probe_all()
349 netif_err(efx, probe, efx->net_dev, "failed to create NIC\n"); in efx_probe_all()
353 rc = efx_probe_port(efx); in efx_probe_all()
355 netif_err(efx, probe, efx->net_dev, "failed to create port\n"); in efx_probe_all()
360 if (WARN_ON(EFX_DEFAULT_DMAQ_SIZE < EFX_TXQ_MIN_ENT(efx))) { in efx_probe_all()
366 rc = efx->type->vswitching_probe(efx); in efx_probe_all()
368 netif_warn(efx, probe, efx->net_dev, in efx_probe_all()
373 rc = efx_siena_probe_filters(efx); in efx_probe_all()
375 netif_err(efx, probe, efx->net_dev, in efx_probe_all()
380 rc = efx_siena_probe_channels(efx); in efx_probe_all()
387 efx_siena_remove_filters(efx); in efx_probe_all()
390 efx->type->vswitching_remove(efx); in efx_probe_all()
393 efx_remove_port(efx); in efx_probe_all()
395 efx_remove_nic(efx); in efx_probe_all()
400 static void efx_remove_all(struct efx_nic *efx) in efx_remove_all() argument
403 efx_xdp_setup_prog(efx, NULL); in efx_remove_all()
406 efx_siena_remove_channels(efx); in efx_remove_all()
407 efx_siena_remove_filters(efx); in efx_remove_all()
409 efx->type->vswitching_remove(efx); in efx_remove_all()
411 efx_remove_port(efx); in efx_remove_all()
412 efx_remove_nic(efx); in efx_remove_all()
420 unsigned int efx_siena_usecs_to_ticks(struct efx_nic *efx, unsigned int usecs) in efx_siena_usecs_to_ticks() argument
424 if (usecs * 1000 < efx->timer_quantum_ns) in efx_siena_usecs_to_ticks()
426 return usecs * 1000 / efx->timer_quantum_ns; in efx_siena_usecs_to_ticks()
430 int efx_siena_init_irq_moderation(struct efx_nic *efx, unsigned int tx_usecs, in efx_siena_init_irq_moderation() argument
437 EFX_ASSERT_RESET_SERIALISED(efx); in efx_siena_init_irq_moderation()
439 timer_max_us = efx->timer_max_ns / 1000; in efx_siena_init_irq_moderation()
444 if (tx_usecs != rx_usecs && efx->tx_channel_offset == 0 && in efx_siena_init_irq_moderation()
446 netif_err(efx, drv, efx->net_dev, "Channels are shared. " in efx_siena_init_irq_moderation()
451 efx->irq_rx_adaptive = rx_adaptive; in efx_siena_init_irq_moderation()
452 efx->irq_rx_moderation_us = rx_usecs; in efx_siena_init_irq_moderation()
453 efx_for_each_channel(channel, efx) { in efx_siena_init_irq_moderation()
465 void efx_siena_get_irq_moderation(struct efx_nic *efx, unsigned int *tx_usecs, in efx_siena_get_irq_moderation() argument
468 *rx_adaptive = efx->irq_rx_adaptive; in efx_siena_get_irq_moderation()
469 *rx_usecs = efx->irq_rx_moderation_us; in efx_siena_get_irq_moderation()
475 if (efx->tx_channel_offset == 0) { in efx_siena_get_irq_moderation()
480 tx_channel = efx->channel[efx->tx_channel_offset]; in efx_siena_get_irq_moderation()
496 struct efx_nic *efx = netdev_priv(net_dev); in efx_ioctl() local
500 return efx_siena_ptp_set_ts_config(efx, ifr); in efx_ioctl()
502 return efx_siena_ptp_get_ts_config(efx, ifr); in efx_ioctl()
509 return mdio_mii_ioctl(&efx->mdio, data, cmd); in efx_ioctl()
521 struct efx_nic *efx = netdev_priv(net_dev); in efx_net_open() local
524 netif_dbg(efx, ifup, efx->net_dev, "opening device on CPU %d\n", in efx_net_open()
527 rc = efx_check_disabled(efx); in efx_net_open()
530 if (efx->phy_mode & PHY_MODE_SPECIAL) in efx_net_open()
532 if (efx_siena_mcdi_poll_reboot(efx) && efx_siena_reset(efx, RESET_TYPE_ALL)) in efx_net_open()
537 efx_siena_link_status_changed(efx); in efx_net_open()
539 efx_siena_start_all(efx); in efx_net_open()
540 if (efx->state == STATE_DISABLED || efx->reset_pending) in efx_net_open()
541 netif_device_detach(efx->net_dev); in efx_net_open()
542 efx_siena_selftest_async_start(efx); in efx_net_open()
552 struct efx_nic *efx = netdev_priv(net_dev); in efx_net_stop() local
554 netif_dbg(efx, ifdown, efx->net_dev, "closing on CPU %d\n", in efx_net_stop()
558 efx_siena_stop_all(efx); in efx_net_stop()
565 struct efx_nic *efx = netdev_priv(net_dev); in efx_vlan_rx_add_vid() local
567 if (efx->type->vlan_rx_add_vid) in efx_vlan_rx_add_vid()
568 return efx->type->vlan_rx_add_vid(efx, proto, vid); in efx_vlan_rx_add_vid()
575 struct efx_nic *efx = netdev_priv(net_dev); in efx_vlan_rx_kill_vid() local
577 if (efx->type->vlan_rx_kill_vid) in efx_vlan_rx_kill_vid()
578 return efx->type->vlan_rx_kill_vid(efx, proto, vid); in efx_vlan_rx_kill_vid()
615 static int efx_xdp_setup_prog(struct efx_nic *efx, struct bpf_prog *prog) in efx_xdp_setup_prog() argument
619 if (efx->xdp_rxq_info_failed) { in efx_xdp_setup_prog()
620 netif_err(efx, drv, efx->net_dev, in efx_xdp_setup_prog()
625 if (prog && efx->net_dev->mtu > efx_siena_xdp_max_mtu(efx)) { in efx_xdp_setup_prog()
626 netif_err(efx, drv, efx->net_dev, in efx_xdp_setup_prog()
628 efx->net_dev->mtu, efx_siena_xdp_max_mtu(efx)); in efx_xdp_setup_prog()
632 old_prog = rtnl_dereference(efx->xdp_prog); in efx_xdp_setup_prog()
633 rcu_assign_pointer(efx->xdp_prog, prog); in efx_xdp_setup_prog()
644 struct efx_nic *efx = netdev_priv(dev); in efx_xdp() local
648 return efx_xdp_setup_prog(efx, xdp->prog); in efx_xdp()
657 struct efx_nic *efx = netdev_priv(dev); in efx_xdp_xmit() local
662 return efx_siena_xdp_tx_buffers(efx, n, xdpfs, flags & XDP_XMIT_FLUSH); in efx_xdp_xmit()
665 static void efx_update_name(struct efx_nic *efx) in efx_update_name() argument
667 strcpy(efx->name, efx->net_dev->name); in efx_update_name()
668 efx_siena_mtd_rename(efx); in efx_update_name()
669 efx_siena_set_channel_names(efx); in efx_update_name()
691 struct efx_nic *efx = dev_get_drvdata(dev); in phy_type_show() local
692 return sprintf(buf, "%d\n", efx->phy_type); in phy_type_show()
696 static int efx_register_netdev(struct efx_nic *efx) in efx_register_netdev() argument
698 struct net_device *net_dev = efx->net_dev; in efx_register_netdev()
703 net_dev->irq = efx->pci_dev->irq; in efx_register_netdev()
705 if (efx_nic_rev(efx) >= EFX_REV_HUNT_A0) in efx_register_netdev()
718 efx->state = STATE_READY; in efx_register_netdev()
720 if (efx->reset_pending) { in efx_register_netdev()
721 pci_err(efx->pci_dev, "aborting probe due to scheduled reset\n"); in efx_register_netdev()
729 efx_update_name(efx); in efx_register_netdev()
738 efx_for_each_channel(channel, efx) { in efx_register_netdev()
744 efx_associate(efx); in efx_register_netdev()
748 rc = device_create_file(&efx->pci_dev->dev, &dev_attr_phy_type); in efx_register_netdev()
750 netif_err(efx, drv, efx->net_dev, in efx_register_netdev()
755 efx_siena_init_mcdi_logging(efx); in efx_register_netdev()
761 efx_dissociate(efx); in efx_register_netdev()
764 efx->state = STATE_UNINIT; in efx_register_netdev()
766 netif_err(efx, drv, efx->net_dev, "could not register net dev\n"); in efx_register_netdev()
770 static void efx_unregister_netdev(struct efx_nic *efx) in efx_unregister_netdev() argument
772 if (!efx->net_dev) in efx_unregister_netdev()
775 BUG_ON(netdev_priv(efx->net_dev) != efx); in efx_unregister_netdev()
777 if (efx_dev_registered(efx)) { in efx_unregister_netdev()
778 strscpy(efx->name, pci_name(efx->pci_dev), sizeof(efx->name)); in efx_unregister_netdev()
779 efx_siena_fini_mcdi_logging(efx); in efx_unregister_netdev()
780 device_remove_file(&efx->pci_dev->dev, &dev_attr_phy_type); in efx_unregister_netdev()
781 unregister_netdev(efx->net_dev); in efx_unregister_netdev()
806 void efx_siena_update_sw_stats(struct efx_nic *efx, u64 *stats) in efx_siena_update_sw_stats() argument
811 efx_for_each_channel(channel, efx) in efx_siena_update_sw_stats()
814 stats[GENERIC_STAT_rx_noskb_drops] = atomic_read(&efx->n_rx_noskb_drops); in efx_siena_update_sw_stats()
826 static void efx_pci_remove_main(struct efx_nic *efx) in efx_pci_remove_main() argument
831 BUG_ON(efx->state == STATE_READY); in efx_pci_remove_main()
832 efx_siena_flush_reset_workqueue(efx); in efx_pci_remove_main()
834 efx_siena_disable_interrupts(efx); in efx_pci_remove_main()
835 efx_siena_clear_interrupt_affinity(efx); in efx_pci_remove_main()
836 efx_siena_fini_interrupt(efx); in efx_pci_remove_main()
837 efx_fini_port(efx); in efx_pci_remove_main()
838 efx->type->fini(efx); in efx_pci_remove_main()
839 efx_siena_fini_napi(efx); in efx_pci_remove_main()
840 efx_remove_all(efx); in efx_pci_remove_main()
849 struct efx_nic *efx; in efx_pci_remove() local
851 efx = pci_get_drvdata(pci_dev); in efx_pci_remove()
852 if (!efx) in efx_pci_remove()
857 efx_dissociate(efx); in efx_pci_remove()
858 dev_close(efx->net_dev); in efx_pci_remove()
859 efx_siena_disable_interrupts(efx); in efx_pci_remove()
860 efx->state = STATE_UNINIT; in efx_pci_remove()
863 if (efx->type->sriov_fini) in efx_pci_remove()
864 efx->type->sriov_fini(efx); in efx_pci_remove()
866 efx_unregister_netdev(efx); in efx_pci_remove()
868 efx_siena_mtd_remove(efx); in efx_pci_remove()
870 efx_pci_remove_main(efx); in efx_pci_remove()
872 efx_siena_fini_io(efx); in efx_pci_remove()
873 netif_dbg(efx, drv, efx->net_dev, "shutdown successful\n"); in efx_pci_remove()
875 efx_siena_fini_struct(efx); in efx_pci_remove()
876 free_netdev(efx->net_dev); in efx_pci_remove()
885 static void efx_probe_vpd_strings(struct efx_nic *efx) in efx_probe_vpd_strings() argument
887 struct pci_dev *dev = efx->pci_dev; in efx_probe_vpd_strings()
910 efx->vpd_sn = kmemdup_nul(vpd_data + start, kw_len, GFP_KERNEL); in efx_probe_vpd_strings()
919 static int efx_pci_probe_main(struct efx_nic *efx) in efx_pci_probe_main() argument
924 rc = efx_probe_all(efx); in efx_pci_probe_main()
928 efx_siena_init_napi(efx); in efx_pci_probe_main()
930 down_write(&efx->filter_sem); in efx_pci_probe_main()
931 rc = efx->type->init(efx); in efx_pci_probe_main()
932 up_write(&efx->filter_sem); in efx_pci_probe_main()
934 pci_err(efx->pci_dev, "failed to initialise NIC\n"); in efx_pci_probe_main()
938 rc = efx_init_port(efx); in efx_pci_probe_main()
940 netif_err(efx, probe, efx->net_dev, in efx_pci_probe_main()
945 rc = efx_siena_init_interrupt(efx); in efx_pci_probe_main()
949 efx_siena_set_interrupt_affinity(efx); in efx_pci_probe_main()
950 rc = efx_siena_enable_interrupts(efx); in efx_pci_probe_main()
957 efx_siena_clear_interrupt_affinity(efx); in efx_pci_probe_main()
958 efx_siena_fini_interrupt(efx); in efx_pci_probe_main()
960 efx_fini_port(efx); in efx_pci_probe_main()
962 efx->type->fini(efx); in efx_pci_probe_main()
964 efx_siena_fini_napi(efx); in efx_pci_probe_main()
965 efx_remove_all(efx); in efx_pci_probe_main()
970 static int efx_pci_probe_post_io(struct efx_nic *efx) in efx_pci_probe_post_io() argument
972 struct net_device *net_dev = efx->net_dev; in efx_pci_probe_post_io()
973 int rc = efx_pci_probe_main(efx); in efx_pci_probe_post_io()
978 if (efx->type->sriov_init) { in efx_pci_probe_post_io()
979 rc = efx->type->sriov_init(efx); in efx_pci_probe_post_io()
981 pci_err(efx->pci_dev, "SR-IOV can't be enabled rc %d\n", in efx_pci_probe_post_io()
986 net_dev->features |= (efx->type->offload_features | NETIF_F_SG | in efx_pci_probe_post_io()
988 if (efx->type->offload_features & (NETIF_F_IPV6_CSUM | NETIF_F_HW_CSUM)) in efx_pci_probe_post_io()
991 if (!efx->type->tso_versions || !efx->type->tso_versions(efx)) in efx_pci_probe_post_io()
998 net_dev->hw_features |= net_dev->features & ~efx->fixed_features; in efx_pci_probe_post_io()
1008 net_dev->features |= efx->fixed_features; in efx_pci_probe_post_io()
1014 rc = efx_register_netdev(efx); in efx_pci_probe_post_io()
1018 efx_pci_remove_main(efx); in efx_pci_probe_post_io()
1035 struct efx_nic *efx; in efx_pci_probe() local
1039 net_dev = alloc_etherdev_mqs(sizeof(*efx), EFX_MAX_CORE_TX_QUEUES, in efx_pci_probe()
1043 efx = netdev_priv(net_dev); in efx_pci_probe()
1044 efx->type = (const struct efx_nic_type *) entry->driver_data; in efx_pci_probe()
1045 efx->fixed_features |= NETIF_F_HIGHDMA; in efx_pci_probe()
1047 pci_set_drvdata(pci_dev, efx); in efx_pci_probe()
1049 rc = efx_siena_init_struct(efx, pci_dev, net_dev); in efx_pci_probe()
1055 if (!efx->type->is_vf) in efx_pci_probe()
1056 efx_probe_vpd_strings(efx); in efx_pci_probe()
1059 rc = efx_siena_init_io(efx, efx->type->mem_bar(efx), in efx_pci_probe()
1060 efx->type->max_dma_mask, in efx_pci_probe()
1061 efx->type->mem_map_size(efx)); in efx_pci_probe()
1065 rc = efx_pci_probe_post_io(efx); in efx_pci_probe()
1070 efx->reset_pending = 0; in efx_pci_probe()
1071 rc = efx_pci_probe_post_io(efx); in efx_pci_probe()
1080 efx->reset_pending = 0; in efx_pci_probe()
1081 rc = efx_pci_probe_post_io(efx); in efx_pci_probe()
1087 netif_dbg(efx, probe, efx->net_dev, "initialisation successful\n"); in efx_pci_probe()
1091 rc = efx_mtd_probe(efx); in efx_pci_probe()
1094 netif_warn(efx, probe, efx->net_dev, in efx_pci_probe()
1099 if (efx->type->udp_tnl_push_ports) in efx_pci_probe()
1100 efx->type->udp_tnl_push_ports(efx); in efx_pci_probe()
1105 efx_siena_fini_io(efx); in efx_pci_probe()
1107 efx_siena_fini_struct(efx); in efx_pci_probe()
1110 netif_dbg(efx, drv, efx->net_dev, "initialisation failed. rc=%d\n", rc); in efx_pci_probe()
1122 struct efx_nic *efx = pci_get_drvdata(dev); in efx_pci_sriov_configure() local
1124 if (efx->type->sriov_configure) { in efx_pci_sriov_configure()
1125 rc = efx->type->sriov_configure(efx, num_vfs); in efx_pci_sriov_configure()
1137 struct efx_nic *efx = dev_get_drvdata(dev); in efx_pm_freeze() local
1141 if (efx->state != STATE_DISABLED) { in efx_pm_freeze()
1142 efx->state = STATE_UNINIT; in efx_pm_freeze()
1144 efx_device_detach_sync(efx); in efx_pm_freeze()
1146 efx_siena_stop_all(efx); in efx_pm_freeze()
1147 efx_siena_disable_interrupts(efx); in efx_pm_freeze()
1157 struct efx_nic *efx = pci_get_drvdata(pci_dev); in efx_pci_shutdown() local
1159 if (!efx) in efx_pci_shutdown()
1169 struct efx_nic *efx = dev_get_drvdata(dev); in efx_pm_thaw() local
1173 if (efx->state != STATE_DISABLED) { in efx_pm_thaw()
1174 rc = efx_siena_enable_interrupts(efx); in efx_pm_thaw()
1178 mutex_lock(&efx->mac_lock); in efx_pm_thaw()
1179 efx_siena_mcdi_port_reconfigure(efx); in efx_pm_thaw()
1180 mutex_unlock(&efx->mac_lock); in efx_pm_thaw()
1182 efx_siena_start_all(efx); in efx_pm_thaw()
1184 efx_device_attach_if_not_resetting(efx); in efx_pm_thaw()
1186 efx->state = STATE_READY; in efx_pm_thaw()
1188 efx->type->resume_wol(efx); in efx_pm_thaw()
1194 efx_siena_queue_reset_work(efx); in efx_pm_thaw()
1207 struct efx_nic *efx = pci_get_drvdata(pci_dev); in efx_pm_poweroff() local
1209 efx->type->fini(efx); in efx_pm_poweroff()
1211 efx->reset_pending = 0; in efx_pm_poweroff()
1221 struct efx_nic *efx = pci_get_drvdata(pci_dev); in efx_pm_resume() local
1231 pci_set_master(efx->pci_dev); in efx_pm_resume()
1232 rc = efx->type->reset(efx, RESET_TYPE_ALL); in efx_pm_resume()
1235 down_write(&efx->filter_sem); in efx_pm_resume()
1236 rc = efx->type->init(efx); in efx_pm_resume()
1237 up_write(&efx->filter_sem); in efx_pm_resume()