Lines Matching refs:efx

124 void efx_siena_queue_reset_work(struct efx_nic *efx)  in efx_siena_queue_reset_work()  argument
126 queue_work(reset_workqueue, &efx->reset_work); in efx_siena_queue_reset_work()
129 void efx_siena_flush_reset_workqueue(struct efx_nic *efx) in efx_siena_flush_reset_workqueue() argument
131 cancel_work_sync(&efx->reset_work); in efx_siena_flush_reset_workqueue()
145 void efx_siena_mac_reconfigure(struct efx_nic *efx, bool mtu_only) in efx_siena_mac_reconfigure() argument
147 if (efx->type->reconfigure_mac) { in efx_siena_mac_reconfigure()
148 down_read(&efx->filter_sem); in efx_siena_mac_reconfigure()
149 efx->type->reconfigure_mac(efx, mtu_only); in efx_siena_mac_reconfigure()
150 up_read(&efx->filter_sem); in efx_siena_mac_reconfigure()
160 struct efx_nic *efx = container_of(data, struct efx_nic, mac_work); in efx_mac_work() local
162 mutex_lock(&efx->mac_lock); in efx_mac_work()
163 if (efx->port_enabled) in efx_mac_work()
164 efx_siena_mac_reconfigure(efx, false); in efx_mac_work()
165 mutex_unlock(&efx->mac_lock); in efx_mac_work()
170 struct efx_nic *efx = netdev_priv(net_dev); in efx_siena_set_mac_address() local
177 netif_err(efx, drv, efx->net_dev, in efx_siena_set_mac_address()
186 if (efx->type->set_mac_address) { in efx_siena_set_mac_address()
187 rc = efx->type->set_mac_address(efx); in efx_siena_set_mac_address()
195 mutex_lock(&efx->mac_lock); in efx_siena_set_mac_address()
196 efx_siena_mac_reconfigure(efx, false); in efx_siena_set_mac_address()
197 mutex_unlock(&efx->mac_lock); in efx_siena_set_mac_address()
205 struct efx_nic *efx = netdev_priv(net_dev); in efx_siena_set_rx_mode() local
207 if (efx->port_enabled) in efx_siena_set_rx_mode()
208 queue_work(efx->workqueue, &efx->mac_work); in efx_siena_set_rx_mode()
214 struct efx_nic *efx = netdev_priv(net_dev); in efx_siena_set_features() local
219 rc = efx->type->filter_clear_rx(efx, EFX_FILTER_PRI_MANUAL); in efx_siena_set_features()
242 void efx_siena_link_status_changed(struct efx_nic *efx) in efx_siena_link_status_changed() argument
244 struct efx_link_state *link_state = &efx->link_state; in efx_siena_link_status_changed()
251 if (!netif_running(efx->net_dev)) in efx_siena_link_status_changed()
254 if (link_state->up != netif_carrier_ok(efx->net_dev)) { in efx_siena_link_status_changed()
255 efx->n_link_state_changes++; in efx_siena_link_status_changed()
258 netif_carrier_on(efx->net_dev); in efx_siena_link_status_changed()
260 netif_carrier_off(efx->net_dev); in efx_siena_link_status_changed()
265 netif_info(efx, link, efx->net_dev, in efx_siena_link_status_changed()
268 efx->net_dev->mtu); in efx_siena_link_status_changed()
270 netif_info(efx, link, efx->net_dev, "link down\n"); in efx_siena_link_status_changed()
273 unsigned int efx_siena_xdp_max_mtu(struct efx_nic *efx) in efx_siena_xdp_max_mtu() argument
279 efx->rx_prefix_size + efx->type->rx_buffer_padding + in efx_siena_xdp_max_mtu()
280 efx->rx_ip_align + EFX_XDP_HEADROOM + EFX_XDP_TAILROOM; in efx_siena_xdp_max_mtu()
288 struct efx_nic *efx = netdev_priv(net_dev); in efx_siena_change_mtu() local
291 rc = efx_check_disabled(efx); in efx_siena_change_mtu()
295 if (rtnl_dereference(efx->xdp_prog) && in efx_siena_change_mtu()
296 new_mtu > efx_siena_xdp_max_mtu(efx)) { in efx_siena_change_mtu()
297 netif_err(efx, drv, efx->net_dev, in efx_siena_change_mtu()
299 new_mtu, efx_siena_xdp_max_mtu(efx)); in efx_siena_change_mtu()
303 netif_dbg(efx, drv, efx->net_dev, "changing MTU to %d\n", new_mtu); in efx_siena_change_mtu()
305 efx_device_detach_sync(efx); in efx_siena_change_mtu()
306 efx_siena_stop_all(efx); in efx_siena_change_mtu()
308 mutex_lock(&efx->mac_lock); in efx_siena_change_mtu()
310 efx_siena_mac_reconfigure(efx, true); in efx_siena_change_mtu()
311 mutex_unlock(&efx->mac_lock); in efx_siena_change_mtu()
313 efx_siena_start_all(efx); in efx_siena_change_mtu()
314 efx_device_attach_if_not_resetting(efx); in efx_siena_change_mtu()
327 struct efx_nic *efx = container_of(data, struct efx_nic, in efx_monitor() local
330 netif_vdbg(efx, timer, efx->net_dev, in efx_monitor()
333 BUG_ON(efx->type->monitor == NULL); in efx_monitor()
339 if (mutex_trylock(&efx->mac_lock)) { in efx_monitor()
340 if (efx->port_enabled && efx->type->monitor) in efx_monitor()
341 efx->type->monitor(efx); in efx_monitor()
342 mutex_unlock(&efx->mac_lock); in efx_monitor()
345 efx_siena_start_monitor(efx); in efx_monitor()
348 void efx_siena_start_monitor(struct efx_nic *efx) in efx_siena_start_monitor() argument
350 if (efx->type->monitor) in efx_siena_start_monitor()
351 queue_delayed_work(efx->workqueue, &efx->monitor_work, in efx_siena_start_monitor()
365 static void efx_start_datapath(struct efx_nic *efx) in efx_start_datapath() argument
367 netdev_features_t old_features = efx->net_dev->features; in efx_start_datapath()
368 bool old_rx_scatter = efx->rx_scatter; in efx_start_datapath()
375 efx->rx_dma_len = (efx->rx_prefix_size + in efx_start_datapath()
376 EFX_MAX_FRAME_LEN(efx->net_dev->mtu) + in efx_start_datapath()
377 efx->type->rx_buffer_padding); in efx_start_datapath()
379 efx->rx_ip_align + efx->rx_dma_len + EFX_XDP_TAILROOM); in efx_start_datapath()
382 efx->rx_scatter = efx->type->always_rx_scatter; in efx_start_datapath()
383 efx->rx_buffer_order = 0; in efx_start_datapath()
384 } else if (efx->type->can_rx_scatter) { in efx_start_datapath()
390 efx->rx_scatter = true; in efx_start_datapath()
391 efx->rx_dma_len = EFX_RX_USR_BUF_SIZE; in efx_start_datapath()
392 efx->rx_buffer_order = 0; in efx_start_datapath()
394 efx->rx_scatter = false; in efx_start_datapath()
395 efx->rx_buffer_order = get_order(rx_buf_len); in efx_start_datapath()
398 efx_siena_rx_config_page_split(efx); in efx_start_datapath()
399 if (efx->rx_buffer_order) in efx_start_datapath()
400 netif_dbg(efx, drv, efx->net_dev, in efx_start_datapath()
402 efx->rx_dma_len, efx->rx_buffer_order, in efx_start_datapath()
403 efx->rx_pages_per_batch); in efx_start_datapath()
405 netif_dbg(efx, drv, efx->net_dev, in efx_start_datapath()
407 efx->rx_dma_len, efx->rx_page_buf_step, in efx_start_datapath()
408 efx->rx_bufs_per_page, efx->rx_pages_per_batch); in efx_start_datapath()
413 efx->net_dev->hw_features |= efx->net_dev->features; in efx_start_datapath()
414 efx->net_dev->hw_features &= ~efx->fixed_features; in efx_start_datapath()
415 efx->net_dev->features |= efx->fixed_features; in efx_start_datapath()
416 if (efx->net_dev->features != old_features) in efx_start_datapath()
417 netdev_features_change(efx->net_dev); in efx_start_datapath()
420 if ((efx->rx_scatter != old_rx_scatter) && in efx_start_datapath()
421 efx->type->filter_update_rx_scatter) in efx_start_datapath()
422 efx->type->filter_update_rx_scatter(efx); in efx_start_datapath()
431 efx->txq_stop_thresh = efx->txq_entries - efx_siena_tx_max_skb_descs(efx); in efx_start_datapath()
432 efx->txq_wake_thresh = efx->txq_stop_thresh / 2; in efx_start_datapath()
435 efx_siena_start_channels(efx); in efx_start_datapath()
437 efx_siena_ptp_start_datapath(efx); in efx_start_datapath()
439 if (netif_device_present(efx->net_dev)) in efx_start_datapath()
440 netif_tx_wake_all_queues(efx->net_dev); in efx_start_datapath()
443 static void efx_stop_datapath(struct efx_nic *efx) in efx_stop_datapath() argument
445 EFX_ASSERT_RESET_SERIALISED(efx); in efx_stop_datapath()
446 BUG_ON(efx->port_enabled); in efx_stop_datapath()
448 efx_siena_ptp_stop_datapath(efx); in efx_stop_datapath()
450 efx_siena_stop_channels(efx); in efx_stop_datapath()
462 void efx_siena_link_clear_advertising(struct efx_nic *efx) in efx_siena_link_clear_advertising() argument
464 bitmap_zero(efx->link_advertising, __ETHTOOL_LINK_MODE_MASK_NBITS); in efx_siena_link_clear_advertising()
465 efx->wanted_fc &= ~(EFX_FC_TX | EFX_FC_RX); in efx_siena_link_clear_advertising()
468 void efx_siena_link_set_wanted_fc(struct efx_nic *efx, u8 wanted_fc) in efx_siena_link_set_wanted_fc() argument
470 efx->wanted_fc = wanted_fc; in efx_siena_link_set_wanted_fc()
471 if (efx->link_advertising[0]) { in efx_siena_link_set_wanted_fc()
473 efx->link_advertising[0] |= (ADVERTISED_Pause | in efx_siena_link_set_wanted_fc()
476 efx->link_advertising[0] &= ~(ADVERTISED_Pause | in efx_siena_link_set_wanted_fc()
479 efx->link_advertising[0] ^= ADVERTISED_Asym_Pause; in efx_siena_link_set_wanted_fc()
483 static void efx_start_port(struct efx_nic *efx) in efx_start_port() argument
485 netif_dbg(efx, ifup, efx->net_dev, "start port\n"); in efx_start_port()
486 BUG_ON(efx->port_enabled); in efx_start_port()
488 mutex_lock(&efx->mac_lock); in efx_start_port()
489 efx->port_enabled = true; in efx_start_port()
492 efx_siena_mac_reconfigure(efx, false); in efx_start_port()
494 mutex_unlock(&efx->mac_lock); in efx_start_port()
502 static void efx_stop_port(struct efx_nic *efx) in efx_stop_port() argument
504 netif_dbg(efx, ifdown, efx->net_dev, "stop port\n"); in efx_stop_port()
506 EFX_ASSERT_RESET_SERIALISED(efx); in efx_stop_port()
508 mutex_lock(&efx->mac_lock); in efx_stop_port()
509 efx->port_enabled = false; in efx_stop_port()
510 mutex_unlock(&efx->mac_lock); in efx_stop_port()
513 netif_addr_lock_bh(efx->net_dev); in efx_stop_port()
514 netif_addr_unlock_bh(efx->net_dev); in efx_stop_port()
516 cancel_delayed_work_sync(&efx->monitor_work); in efx_stop_port()
517 efx_siena_selftest_async_cancel(efx); in efx_stop_port()
518 cancel_work_sync(&efx->mac_work); in efx_stop_port()
528 void efx_siena_start_all(struct efx_nic *efx) in efx_siena_start_all() argument
530 EFX_ASSERT_RESET_SERIALISED(efx); in efx_siena_start_all()
531 BUG_ON(efx->state == STATE_DISABLED); in efx_siena_start_all()
536 if (efx->port_enabled || !netif_running(efx->net_dev) || in efx_siena_start_all()
537 efx->reset_pending) in efx_siena_start_all()
540 efx_start_port(efx); in efx_siena_start_all()
541 efx_start_datapath(efx); in efx_siena_start_all()
544 efx_siena_start_monitor(efx); in efx_siena_start_all()
549 mutex_lock(&efx->mac_lock); in efx_siena_start_all()
550 if (efx_siena_mcdi_phy_poll(efx)) in efx_siena_start_all()
551 efx_siena_link_status_changed(efx); in efx_siena_start_all()
552 mutex_unlock(&efx->mac_lock); in efx_siena_start_all()
554 if (efx->type->start_stats) { in efx_siena_start_all()
555 efx->type->start_stats(efx); in efx_siena_start_all()
556 efx->type->pull_stats(efx); in efx_siena_start_all()
557 spin_lock_bh(&efx->stats_lock); in efx_siena_start_all()
558 efx->type->update_stats(efx, NULL, NULL); in efx_siena_start_all()
559 spin_unlock_bh(&efx->stats_lock); in efx_siena_start_all()
568 void efx_siena_stop_all(struct efx_nic *efx) in efx_siena_stop_all() argument
570 EFX_ASSERT_RESET_SERIALISED(efx); in efx_siena_stop_all()
573 if (!efx->port_enabled) in efx_siena_stop_all()
576 if (efx->type->update_stats) { in efx_siena_stop_all()
580 efx->type->pull_stats(efx); in efx_siena_stop_all()
581 spin_lock_bh(&efx->stats_lock); in efx_siena_stop_all()
582 efx->type->update_stats(efx, NULL, NULL); in efx_siena_stop_all()
583 spin_unlock_bh(&efx->stats_lock); in efx_siena_stop_all()
584 efx->type->stop_stats(efx); in efx_siena_stop_all()
587 efx_stop_port(efx); in efx_siena_stop_all()
593 WARN_ON(netif_running(efx->net_dev) && in efx_siena_stop_all()
594 netif_device_present(efx->net_dev)); in efx_siena_stop_all()
595 netif_tx_disable(efx->net_dev); in efx_siena_stop_all()
597 efx_stop_datapath(efx); in efx_siena_stop_all()
600 static size_t efx_siena_update_stats_atomic(struct efx_nic *efx, u64 *full_stats, in efx_siena_update_stats_atomic() argument
603 if (efx->type->update_stats_atomic) in efx_siena_update_stats_atomic()
604 return efx->type->update_stats_atomic(efx, full_stats, core_stats); in efx_siena_update_stats_atomic()
605 return efx->type->update_stats(efx, full_stats, core_stats); in efx_siena_update_stats_atomic()
612 struct efx_nic *efx = netdev_priv(net_dev); in efx_siena_net_stats() local
614 spin_lock_bh(&efx->stats_lock); in efx_siena_net_stats()
615 efx_siena_update_stats_atomic(efx, NULL, stats); in efx_siena_net_stats()
616 spin_unlock_bh(&efx->stats_lock); in efx_siena_net_stats()
626 int __efx_siena_reconfigure_port(struct efx_nic *efx) in __efx_siena_reconfigure_port() argument
631 WARN_ON(!mutex_is_locked(&efx->mac_lock)); in __efx_siena_reconfigure_port()
634 phy_mode = efx->phy_mode; in __efx_siena_reconfigure_port()
635 if (LOOPBACK_INTERNAL(efx)) in __efx_siena_reconfigure_port()
636 efx->phy_mode |= PHY_MODE_TX_DISABLED; in __efx_siena_reconfigure_port()
638 efx->phy_mode &= ~PHY_MODE_TX_DISABLED; in __efx_siena_reconfigure_port()
640 if (efx->type->reconfigure_port) in __efx_siena_reconfigure_port()
641 rc = efx->type->reconfigure_port(efx); in __efx_siena_reconfigure_port()
644 efx->phy_mode = phy_mode; in __efx_siena_reconfigure_port()
652 int efx_siena_reconfigure_port(struct efx_nic *efx) in efx_siena_reconfigure_port() argument
656 EFX_ASSERT_RESET_SERIALISED(efx); in efx_siena_reconfigure_port()
658 mutex_lock(&efx->mac_lock); in efx_siena_reconfigure_port()
659 rc = __efx_siena_reconfigure_port(efx); in efx_siena_reconfigure_port()
660 mutex_unlock(&efx->mac_lock); in efx_siena_reconfigure_port()
671 static void efx_wait_for_bist_end(struct efx_nic *efx) in efx_wait_for_bist_end() argument
676 if (efx_siena_mcdi_poll_reboot(efx)) in efx_wait_for_bist_end()
681 netif_err(efx, drv, efx->net_dev, "Warning: No MC reboot after BIST mode\n"); in efx_wait_for_bist_end()
686 efx->mc_bist_for_other_fn = false; in efx_wait_for_bist_end()
694 int efx_siena_try_recovery(struct efx_nic *efx) in efx_siena_try_recovery() argument
702 struct eeh_dev *eehdev = pci_dev_to_eeh_dev(efx->pci_dev); in efx_siena_try_recovery()
716 void efx_siena_reset_down(struct efx_nic *efx, enum reset_type method) in efx_siena_reset_down() argument
718 EFX_ASSERT_RESET_SERIALISED(efx); in efx_siena_reset_down()
721 efx->type->prepare_flr(efx); in efx_siena_reset_down()
723 efx_siena_stop_all(efx); in efx_siena_reset_down()
724 efx_siena_disable_interrupts(efx); in efx_siena_reset_down()
726 mutex_lock(&efx->mac_lock); in efx_siena_reset_down()
727 down_write(&efx->filter_sem); in efx_siena_reset_down()
728 mutex_lock(&efx->rss_lock); in efx_siena_reset_down()
729 efx->type->fini(efx); in efx_siena_reset_down()
735 struct efx_nic *efx = netdev_priv(net_dev); in efx_siena_watchdog() local
737 netif_err(efx, tx_err, efx->net_dev, in efx_siena_watchdog()
739 efx->port_enabled); in efx_siena_watchdog()
741 efx_siena_schedule_reset(efx, RESET_TYPE_TX_WATCHDOG); in efx_siena_watchdog()
750 int efx_siena_reset_up(struct efx_nic *efx, enum reset_type method, bool ok) in efx_siena_reset_up() argument
754 EFX_ASSERT_RESET_SERIALISED(efx); in efx_siena_reset_up()
757 efx->type->finish_flr(efx); in efx_siena_reset_up()
760 rc = efx->type->init(efx); in efx_siena_reset_up()
762 netif_err(efx, drv, efx->net_dev, "failed to initialise NIC\n"); in efx_siena_reset_up()
769 if (efx->port_initialized && method != RESET_TYPE_INVISIBLE && in efx_siena_reset_up()
771 rc = efx_siena_mcdi_port_reconfigure(efx); in efx_siena_reset_up()
773 netif_err(efx, drv, efx->net_dev, in efx_siena_reset_up()
777 rc = efx_siena_enable_interrupts(efx); in efx_siena_reset_up()
782 rc = efx->type->vswitching_restore(efx); in efx_siena_reset_up()
784 netif_warn(efx, probe, efx->net_dev, in efx_siena_reset_up()
789 if (efx->type->rx_restore_rss_contexts) in efx_siena_reset_up()
790 efx->type->rx_restore_rss_contexts(efx); in efx_siena_reset_up()
791 mutex_unlock(&efx->rss_lock); in efx_siena_reset_up()
792 efx->type->filter_table_restore(efx); in efx_siena_reset_up()
793 up_write(&efx->filter_sem); in efx_siena_reset_up()
794 if (efx->type->sriov_reset) in efx_siena_reset_up()
795 efx->type->sriov_reset(efx); in efx_siena_reset_up()
797 mutex_unlock(&efx->mac_lock); in efx_siena_reset_up()
799 efx_siena_start_all(efx); in efx_siena_reset_up()
801 if (efx->type->udp_tnl_push_ports) in efx_siena_reset_up()
802 efx->type->udp_tnl_push_ports(efx); in efx_siena_reset_up()
807 efx->port_initialized = false; in efx_siena_reset_up()
809 mutex_unlock(&efx->rss_lock); in efx_siena_reset_up()
810 up_write(&efx->filter_sem); in efx_siena_reset_up()
811 mutex_unlock(&efx->mac_lock); in efx_siena_reset_up()
821 int efx_siena_reset(struct efx_nic *efx, enum reset_type method) in efx_siena_reset() argument
826 netif_info(efx, drv, efx->net_dev, "resetting (%s)\n", in efx_siena_reset()
829 efx_device_detach_sync(efx); in efx_siena_reset()
833 if (efx_nic_rev(efx) != EFX_REV_EF100) in efx_siena_reset()
834 efx_siena_reset_down(efx, method); in efx_siena_reset()
836 rc = efx->type->reset(efx, method); in efx_siena_reset()
838 netif_err(efx, drv, efx->net_dev, "failed to reset hardware\n"); in efx_siena_reset()
846 efx->reset_pending &= -(1 << (method + 1)); in efx_siena_reset()
848 __clear_bit(method, &efx->reset_pending); in efx_siena_reset()
855 pci_set_master(efx->pci_dev); in efx_siena_reset()
862 if (efx_nic_rev(efx) != EFX_REV_EF100) in efx_siena_reset()
863 rc2 = efx_siena_reset_up(efx, method, !disabled); in efx_siena_reset()
871 dev_close(efx->net_dev); in efx_siena_reset()
872 netif_err(efx, drv, efx->net_dev, "has been disabled\n"); in efx_siena_reset()
873 efx->state = STATE_DISABLED; in efx_siena_reset()
875 netif_dbg(efx, drv, efx->net_dev, "reset complete\n"); in efx_siena_reset()
876 efx_device_attach_if_not_resetting(efx); in efx_siena_reset()
886 struct efx_nic *efx = container_of(data, struct efx_nic, reset_work); in efx_reset_work() local
890 pending = READ_ONCE(efx->reset_pending); in efx_reset_work()
894 efx_wait_for_bist_end(efx); in efx_reset_work()
898 efx_siena_try_recovery(efx)) in efx_reset_work()
910 if (efx->state == STATE_READY) in efx_reset_work()
911 (void)efx_siena_reset(efx, method); in efx_reset_work()
916 void efx_siena_schedule_reset(struct efx_nic *efx, enum reset_type type) in efx_siena_schedule_reset() argument
920 if (efx->state == STATE_RECOVERY) { in efx_siena_schedule_reset()
921 netif_dbg(efx, drv, efx->net_dev, in efx_siena_schedule_reset()
938 netif_dbg(efx, drv, efx->net_dev, "scheduling %s reset\n", in efx_siena_schedule_reset()
942 method = efx->type->map_reset_reason(type); in efx_siena_schedule_reset()
943 netif_dbg(efx, drv, efx->net_dev, in efx_siena_schedule_reset()
949 set_bit(method, &efx->reset_pending); in efx_siena_schedule_reset()
955 if (READ_ONCE(efx->state) != STATE_READY) in efx_siena_schedule_reset()
961 efx_siena_mcdi_mode_poll(efx); in efx_siena_schedule_reset()
963 efx_siena_queue_reset_work(efx); in efx_siena_schedule_reset()
975 int efx_siena_port_dummy_op_int(struct efx_nic *efx) in efx_siena_port_dummy_op_int() argument
980 void efx_siena_port_dummy_op_void(struct efx_nic *efx) {} in efx_siena_port_dummy_op_void() argument
991 int efx_siena_init_struct(struct efx_nic *efx, in efx_siena_init_struct() argument
997 INIT_LIST_HEAD(&efx->node); in efx_siena_init_struct()
998 INIT_LIST_HEAD(&efx->secondary_list); in efx_siena_init_struct()
999 spin_lock_init(&efx->biu_lock); in efx_siena_init_struct()
1001 INIT_LIST_HEAD(&efx->mtd_list); in efx_siena_init_struct()
1003 INIT_WORK(&efx->reset_work, efx_reset_work); in efx_siena_init_struct()
1004 INIT_DELAYED_WORK(&efx->monitor_work, efx_monitor); in efx_siena_init_struct()
1005 efx_siena_selftest_async_init(efx); in efx_siena_init_struct()
1006 efx->pci_dev = pci_dev; in efx_siena_init_struct()
1007 efx->msg_enable = debug; in efx_siena_init_struct()
1008 efx->state = STATE_UNINIT; in efx_siena_init_struct()
1009 strscpy(efx->name, pci_name(pci_dev), sizeof(efx->name)); in efx_siena_init_struct()
1011 efx->net_dev = net_dev; in efx_siena_init_struct()
1012 efx->rx_prefix_size = efx->type->rx_prefix_size; in efx_siena_init_struct()
1013 efx->rx_ip_align = in efx_siena_init_struct()
1014 NET_IP_ALIGN ? (efx->rx_prefix_size + NET_IP_ALIGN) % 4 : 0; in efx_siena_init_struct()
1015 efx->rx_packet_hash_offset = in efx_siena_init_struct()
1016 efx->type->rx_hash_offset - efx->type->rx_prefix_size; in efx_siena_init_struct()
1017 efx->rx_packet_ts_offset = in efx_siena_init_struct()
1018 efx->type->rx_ts_offset - efx->type->rx_prefix_size; in efx_siena_init_struct()
1019 INIT_LIST_HEAD(&efx->rss_context.list); in efx_siena_init_struct()
1020 efx->rss_context.context_id = EFX_MCDI_RSS_CONTEXT_INVALID; in efx_siena_init_struct()
1021 mutex_init(&efx->rss_lock); in efx_siena_init_struct()
1022 efx->vport_id = EVB_PORT_ID_ASSIGNED; in efx_siena_init_struct()
1023 spin_lock_init(&efx->stats_lock); in efx_siena_init_struct()
1024 efx->vi_stride = EFX_DEFAULT_VI_STRIDE; in efx_siena_init_struct()
1025 efx->num_mac_stats = MC_CMD_MAC_NSTATS; in efx_siena_init_struct()
1027 mutex_init(&efx->mac_lock); in efx_siena_init_struct()
1028 init_rwsem(&efx->filter_sem); in efx_siena_init_struct()
1030 mutex_init(&efx->rps_mutex); in efx_siena_init_struct()
1031 spin_lock_init(&efx->rps_hash_lock); in efx_siena_init_struct()
1033 efx->rps_hash_table = kcalloc(EFX_ARFS_HASH_TABLE_SIZE, in efx_siena_init_struct()
1034 sizeof(*efx->rps_hash_table), GFP_KERNEL); in efx_siena_init_struct()
1036 efx->mdio.dev = net_dev; in efx_siena_init_struct()
1037 INIT_WORK(&efx->mac_work, efx_mac_work); in efx_siena_init_struct()
1038 init_waitqueue_head(&efx->flush_wq); in efx_siena_init_struct()
1040 efx->tx_queues_per_channel = 1; in efx_siena_init_struct()
1041 efx->rxq_entries = EFX_DEFAULT_DMAQ_SIZE; in efx_siena_init_struct()
1042 efx->txq_entries = EFX_DEFAULT_DMAQ_SIZE; in efx_siena_init_struct()
1044 efx->mem_bar = UINT_MAX; in efx_siena_init_struct()
1046 rc = efx_siena_init_channels(efx); in efx_siena_init_struct()
1051 snprintf(efx->workqueue_name, sizeof(efx->workqueue_name), "sfc%s", in efx_siena_init_struct()
1053 efx->workqueue = create_singlethread_workqueue(efx->workqueue_name); in efx_siena_init_struct()
1054 if (!efx->workqueue) { in efx_siena_init_struct()
1062 efx_siena_fini_struct(efx); in efx_siena_init_struct()
1066 void efx_siena_fini_struct(struct efx_nic *efx) in efx_siena_fini_struct() argument
1069 kfree(efx->rps_hash_table); in efx_siena_fini_struct()
1072 efx_siena_fini_channels(efx); in efx_siena_fini_struct()
1074 kfree(efx->vpd_sn); in efx_siena_fini_struct()
1076 if (efx->workqueue) { in efx_siena_fini_struct()
1077 destroy_workqueue(efx->workqueue); in efx_siena_fini_struct()
1078 efx->workqueue = NULL; in efx_siena_fini_struct()
1083 int efx_siena_init_io(struct efx_nic *efx, int bar, dma_addr_t dma_mask, in efx_siena_init_io() argument
1086 struct pci_dev *pci_dev = efx->pci_dev; in efx_siena_init_io()
1089 efx->mem_bar = UINT_MAX; in efx_siena_init_io()
1091 netif_dbg(efx, probe, efx->net_dev, "initialising I/O bar=%d\n", bar); in efx_siena_init_io()
1095 netif_err(efx, probe, efx->net_dev, in efx_siena_init_io()
1104 netif_err(efx, probe, efx->net_dev, in efx_siena_init_io()
1108 netif_dbg(efx, probe, efx->net_dev, in efx_siena_init_io()
1111 efx->membase_phys = pci_resource_start(efx->pci_dev, bar); in efx_siena_init_io()
1112 if (!efx->membase_phys) { in efx_siena_init_io()
1113 netif_err(efx, probe, efx->net_dev, in efx_siena_init_io()
1122 netif_err(efx, probe, efx->net_dev, in efx_siena_init_io()
1127 efx->mem_bar = bar; in efx_siena_init_io()
1128 efx->membase = ioremap(efx->membase_phys, mem_map_size); in efx_siena_init_io()
1129 if (!efx->membase) { in efx_siena_init_io()
1130 netif_err(efx, probe, efx->net_dev, in efx_siena_init_io()
1132 (unsigned long long)efx->membase_phys, mem_map_size); in efx_siena_init_io()
1136 netif_dbg(efx, probe, efx->net_dev, in efx_siena_init_io()
1138 (unsigned long long)efx->membase_phys, mem_map_size, in efx_siena_init_io()
1139 efx->membase); in efx_siena_init_io()
1144 pci_release_region(efx->pci_dev, bar); in efx_siena_init_io()
1146 efx->membase_phys = 0; in efx_siena_init_io()
1148 pci_disable_device(efx->pci_dev); in efx_siena_init_io()
1153 void efx_siena_fini_io(struct efx_nic *efx) in efx_siena_fini_io() argument
1155 netif_dbg(efx, drv, efx->net_dev, "shutting down I/O\n"); in efx_siena_fini_io()
1157 if (efx->membase) { in efx_siena_fini_io()
1158 iounmap(efx->membase); in efx_siena_fini_io()
1159 efx->membase = NULL; in efx_siena_fini_io()
1162 if (efx->membase_phys) { in efx_siena_fini_io()
1163 pci_release_region(efx->pci_dev, efx->mem_bar); in efx_siena_fini_io()
1164 efx->membase_phys = 0; in efx_siena_fini_io()
1165 efx->mem_bar = UINT_MAX; in efx_siena_fini_io()
1169 if (!pci_vfs_assigned(efx->pci_dev)) in efx_siena_fini_io()
1170 pci_disable_device(efx->pci_dev); in efx_siena_fini_io()
1178 struct efx_nic *efx = dev_get_drvdata(dev); in mcdi_logging_show() local
1179 struct efx_mcdi_iface *mcdi = efx_mcdi(efx); in mcdi_logging_show()
1188 struct efx_nic *efx = dev_get_drvdata(dev); in mcdi_logging_store() local
1189 struct efx_mcdi_iface *mcdi = efx_mcdi(efx); in mcdi_logging_store()
1198 void efx_siena_init_mcdi_logging(struct efx_nic *efx) in efx_siena_init_mcdi_logging() argument
1200 int rc = device_create_file(&efx->pci_dev->dev, &dev_attr_mcdi_logging); in efx_siena_init_mcdi_logging()
1203 netif_warn(efx, drv, efx->net_dev, in efx_siena_init_mcdi_logging()
1208 void efx_siena_fini_mcdi_logging(struct efx_nic *efx) in efx_siena_fini_mcdi_logging() argument
1210 device_remove_file(&efx->pci_dev->dev, &dev_attr_mcdi_logging); in efx_siena_fini_mcdi_logging()
1222 struct efx_nic *efx = pci_get_drvdata(pdev); in efx_io_error_detected() local
1229 if (efx->state != STATE_DISABLED) { in efx_io_error_detected()
1230 efx->state = STATE_RECOVERY; in efx_io_error_detected()
1231 efx->reset_pending = 0; in efx_io_error_detected()
1233 efx_device_detach_sync(efx); in efx_io_error_detected()
1235 efx_siena_stop_all(efx); in efx_io_error_detected()
1236 efx_siena_disable_interrupts(efx); in efx_io_error_detected()
1256 struct efx_nic *efx = pci_get_drvdata(pdev); in efx_io_slot_reset() local
1260 netif_err(efx, hw, efx->net_dev, in efx_io_slot_reset()
1271 struct efx_nic *efx = pci_get_drvdata(pdev); in efx_io_resume() local
1276 if (efx->state == STATE_DISABLED) in efx_io_resume()
1279 rc = efx_siena_reset(efx, RESET_TYPE_ALL); in efx_io_resume()
1281 netif_err(efx, hw, efx->net_dev, in efx_io_resume()
1284 efx->state = STATE_READY; in efx_io_resume()
1285 netif_dbg(efx, hw, efx->net_dev, in efx_io_resume()
1308 static bool efx_can_encap_offloads(struct efx_nic *efx, struct sk_buff *skb) in efx_can_encap_offloads() argument
1318 if (WARN_ON_ONCE(!efx->type->udp_tnl_has_port)) in efx_can_encap_offloads()
1361 return efx->type->udp_tnl_has_port(efx, dst_port); in efx_can_encap_offloads()
1371 struct efx_nic *efx = netdev_priv(dev); in efx_siena_features_check() local
1382 if (!efx_can_encap_offloads(efx, skb)) in efx_siena_features_check()
1392 struct efx_nic *efx = netdev_priv(net_dev); in efx_siena_get_phys_port_id() local
1394 if (efx->type->get_phys_port_id) in efx_siena_get_phys_port_id()
1395 return efx->type->get_phys_port_id(efx, ppid); in efx_siena_get_phys_port_id()
1403 struct efx_nic *efx = netdev_priv(net_dev); in efx_siena_get_phys_port_name() local
1405 if (snprintf(name, len, "p%u", efx->port_num) >= len) in efx_siena_get_phys_port_name()