Lines Matching refs:efx
189 static int ef4_soft_enable_interrupts(struct ef4_nic *efx);
190 static void ef4_soft_disable_interrupts(struct ef4_nic *efx);
192 static void ef4_remove_channels(struct ef4_nic *efx);
194 static void ef4_remove_port(struct ef4_nic *efx);
196 static void ef4_fini_napi(struct ef4_nic *efx);
198 static void ef4_fini_struct(struct ef4_nic *efx);
199 static void ef4_start_all(struct ef4_nic *efx);
200 static void ef4_stop_all(struct ef4_nic *efx);
202 #define EF4_ASSERT_RESET_SERIALISED(efx) \ argument
204 if ((efx->state == STATE_READY) || \
205 (efx->state == STATE_RECOVERY) || \
206 (efx->state == STATE_DISABLED)) \
210 static int ef4_check_disabled(struct ef4_nic *efx) in ef4_check_disabled() argument
212 if (efx->state == STATE_DISABLED || efx->state == STATE_RECOVERY) { in ef4_check_disabled()
213 netif_err(efx, drv, efx->net_dev, in ef4_check_disabled()
271 static void ef4_update_irq_mod(struct ef4_nic *efx, struct ef4_channel *channel) in ef4_update_irq_mod() argument
273 int step = efx->irq_mod_step_us; in ef4_update_irq_mod()
278 efx->type->push_irq_moderation(channel); in ef4_update_irq_mod()
282 efx->irq_rx_moderation_us) { in ef4_update_irq_mod()
284 efx->type->push_irq_moderation(channel); in ef4_update_irq_mod()
296 struct ef4_nic *efx = channel->efx; in ef4_poll() local
299 netif_vdbg(efx, intr, efx->net_dev, in ef4_poll()
307 efx->irq_rx_adaptive && in ef4_poll()
309 ef4_update_irq_mod(efx, channel); in ef4_poll()
333 struct ef4_nic *efx = channel->efx; in ef4_probe_eventq() local
336 netif_dbg(efx, probe, efx->net_dev, in ef4_probe_eventq()
341 entries = roundup_pow_of_two(efx->rxq_entries + efx->txq_entries + 128); in ef4_probe_eventq()
351 struct ef4_nic *efx = channel->efx; in ef4_init_eventq() local
356 netif_dbg(efx, drv, efx->net_dev, in ef4_init_eventq()
361 efx->type->push_irq_moderation(channel); in ef4_init_eventq()
371 netif_dbg(channel->efx, ifup, channel->efx->net_dev, in ef4_start_eventq()
397 netif_dbg(channel->efx, drv, channel->efx->net_dev, in ef4_fini_eventq()
406 netif_dbg(channel->efx, drv, channel->efx->net_dev, in ef4_remove_eventq()
420 ef4_alloc_channel(struct ef4_nic *efx, int i, struct ef4_channel *old_channel) in ef4_alloc_channel() argument
431 channel->efx = efx; in ef4_alloc_channel()
437 tx_queue->efx = efx; in ef4_alloc_channel()
443 rx_queue->efx = efx; in ef4_alloc_channel()
494 netif_dbg(channel->efx, probe, channel->efx->net_dev, in ef4_probe_channel()
527 struct ef4_nic *efx = channel->efx; in ef4_get_channel_name() local
532 if (efx->tx_channel_offset == 0) { in ef4_get_channel_name()
534 } else if (channel->channel < efx->tx_channel_offset) { in ef4_get_channel_name()
538 number -= efx->tx_channel_offset; in ef4_get_channel_name()
540 snprintf(buf, len, "%s%s-%d", efx->name, type, number); in ef4_get_channel_name()
543 static void ef4_set_channel_names(struct ef4_nic *efx) in ef4_set_channel_names() argument
547 ef4_for_each_channel(channel, efx) in ef4_set_channel_names()
549 efx->msi_context[channel->channel].name, in ef4_set_channel_names()
550 sizeof(efx->msi_context[0].name)); in ef4_set_channel_names()
553 static int ef4_probe_channels(struct ef4_nic *efx) in ef4_probe_channels() argument
559 efx->next_buffer_table = 0; in ef4_probe_channels()
566 ef4_for_each_channel_rev(channel, efx) { in ef4_probe_channels()
569 netif_err(efx, probe, efx->net_dev, in ef4_probe_channels()
575 ef4_set_channel_names(efx); in ef4_probe_channels()
580 ef4_remove_channels(efx); in ef4_probe_channels()
588 static void ef4_start_datapath(struct ef4_nic *efx) in ef4_start_datapath() argument
590 netdev_features_t old_features = efx->net_dev->features; in ef4_start_datapath()
591 bool old_rx_scatter = efx->rx_scatter; in ef4_start_datapath()
601 efx->rx_dma_len = (efx->rx_prefix_size + in ef4_start_datapath()
602 EF4_MAX_FRAME_LEN(efx->net_dev->mtu) + in ef4_start_datapath()
603 efx->type->rx_buffer_padding); in ef4_start_datapath()
605 efx->rx_ip_align + efx->rx_dma_len); in ef4_start_datapath()
607 efx->rx_scatter = efx->type->always_rx_scatter; in ef4_start_datapath()
608 efx->rx_buffer_order = 0; in ef4_start_datapath()
609 } else if (efx->type->can_rx_scatter) { in ef4_start_datapath()
615 efx->rx_scatter = true; in ef4_start_datapath()
616 efx->rx_dma_len = EF4_RX_USR_BUF_SIZE; in ef4_start_datapath()
617 efx->rx_buffer_order = 0; in ef4_start_datapath()
619 efx->rx_scatter = false; in ef4_start_datapath()
620 efx->rx_buffer_order = get_order(rx_buf_len); in ef4_start_datapath()
623 ef4_rx_config_page_split(efx); in ef4_start_datapath()
624 if (efx->rx_buffer_order) in ef4_start_datapath()
625 netif_dbg(efx, drv, efx->net_dev, in ef4_start_datapath()
627 efx->rx_dma_len, efx->rx_buffer_order, in ef4_start_datapath()
628 efx->rx_pages_per_batch); in ef4_start_datapath()
630 netif_dbg(efx, drv, efx->net_dev, in ef4_start_datapath()
632 efx->rx_dma_len, efx->rx_page_buf_step, in ef4_start_datapath()
633 efx->rx_bufs_per_page, efx->rx_pages_per_batch); in ef4_start_datapath()
638 efx->net_dev->hw_features |= efx->net_dev->features; in ef4_start_datapath()
639 efx->net_dev->hw_features &= ~efx->fixed_features; in ef4_start_datapath()
640 efx->net_dev->features |= efx->fixed_features; in ef4_start_datapath()
641 if (efx->net_dev->features != old_features) in ef4_start_datapath()
642 netdev_features_change(efx->net_dev); in ef4_start_datapath()
645 if (efx->rx_scatter != old_rx_scatter) in ef4_start_datapath()
646 efx->type->filter_update_rx_scatter(efx); in ef4_start_datapath()
655 efx->txq_stop_thresh = efx->txq_entries - ef4_tx_max_skb_descs(efx); in ef4_start_datapath()
656 efx->txq_wake_thresh = efx->txq_stop_thresh / 2; in ef4_start_datapath()
659 ef4_for_each_channel(channel, efx) { in ef4_start_datapath()
662 atomic_inc(&efx->active_queues); in ef4_start_datapath()
667 atomic_inc(&efx->active_queues); in ef4_start_datapath()
676 if (netif_device_present(efx->net_dev)) in ef4_start_datapath()
677 netif_tx_wake_all_queues(efx->net_dev); in ef4_start_datapath()
680 static void ef4_stop_datapath(struct ef4_nic *efx) in ef4_stop_datapath() argument
687 EF4_ASSERT_RESET_SERIALISED(efx); in ef4_stop_datapath()
688 BUG_ON(efx->port_enabled); in ef4_stop_datapath()
691 ef4_for_each_channel(channel, efx) { in ef4_stop_datapath()
696 ef4_for_each_channel(channel, efx) { in ef4_stop_datapath()
709 rc = efx->type->fini_dmaq(efx); in ef4_stop_datapath()
710 if (rc && EF4_WORKAROUND_7803(efx)) { in ef4_stop_datapath()
716 netif_err(efx, drv, efx->net_dev, in ef4_stop_datapath()
718 ef4_schedule_reset(efx, RESET_TYPE_ALL); in ef4_stop_datapath()
720 netif_err(efx, drv, efx->net_dev, "failed to flush queues\n"); in ef4_stop_datapath()
722 netif_dbg(efx, drv, efx->net_dev, in ef4_stop_datapath()
726 ef4_for_each_channel(channel, efx) { in ef4_stop_datapath()
739 netif_dbg(channel->efx, drv, channel->efx->net_dev, in ef4_remove_channel()
750 static void ef4_remove_channels(struct ef4_nic *efx) in ef4_remove_channels() argument
754 ef4_for_each_channel(channel, efx) in ef4_remove_channels()
759 ef4_realloc_channels(struct ef4_nic *efx, u32 rxq_entries, u32 txq_entries) in ef4_realloc_channels() argument
766 rc = ef4_check_disabled(efx); in ef4_realloc_channels()
773 ef4_for_each_channel(channel, efx) { in ef4_realloc_channels()
792 ef4_device_detach_sync(efx); in ef4_realloc_channels()
793 ef4_stop_all(efx); in ef4_realloc_channels()
794 ef4_soft_disable_interrupts(efx); in ef4_realloc_channels()
798 for (i = 0; i < efx->n_channels; i++) { in ef4_realloc_channels()
799 channel = efx->channel[i]; in ef4_realloc_channels()
810 old_rxq_entries = efx->rxq_entries; in ef4_realloc_channels()
811 old_txq_entries = efx->txq_entries; in ef4_realloc_channels()
812 efx->rxq_entries = rxq_entries; in ef4_realloc_channels()
813 efx->txq_entries = txq_entries; in ef4_realloc_channels()
814 for (i = 0; i < efx->n_channels; i++) { in ef4_realloc_channels()
815 swap(efx->channel[i], other_channel[i]); in ef4_realloc_channels()
819 efx->next_buffer_table = next_buffer_table; in ef4_realloc_channels()
821 for (i = 0; i < efx->n_channels; i++) { in ef4_realloc_channels()
822 channel = efx->channel[i]; in ef4_realloc_channels()
828 ef4_init_napi_channel(efx->channel[i]); in ef4_realloc_channels()
833 for (i = 0; i < efx->n_channels; i++) { in ef4_realloc_channels()
842 rc2 = ef4_soft_enable_interrupts(efx); in ef4_realloc_channels()
845 netif_err(efx, drv, efx->net_dev, in ef4_realloc_channels()
847 ef4_schedule_reset(efx, RESET_TYPE_DISABLE); in ef4_realloc_channels()
849 ef4_start_all(efx); in ef4_realloc_channels()
850 netif_device_attach(efx->net_dev); in ef4_realloc_channels()
856 efx->rxq_entries = old_rxq_entries; in ef4_realloc_channels()
857 efx->txq_entries = old_txq_entries; in ef4_realloc_channels()
858 for (i = 0; i < efx->n_channels; i++) { in ef4_realloc_channels()
859 swap(efx->channel[i], other_channel[i]); in ef4_realloc_channels()
896 void ef4_link_status_changed(struct ef4_nic *efx) in ef4_link_status_changed() argument
898 struct ef4_link_state *link_state = &efx->link_state; in ef4_link_status_changed()
904 if (!netif_running(efx->net_dev)) in ef4_link_status_changed()
907 if (link_state->up != netif_carrier_ok(efx->net_dev)) { in ef4_link_status_changed()
908 efx->n_link_state_changes++; in ef4_link_status_changed()
911 netif_carrier_on(efx->net_dev); in ef4_link_status_changed()
913 netif_carrier_off(efx->net_dev); in ef4_link_status_changed()
918 netif_info(efx, link, efx->net_dev, in ef4_link_status_changed()
921 efx->net_dev->mtu); in ef4_link_status_changed()
923 netif_info(efx, link, efx->net_dev, "link down\n"); in ef4_link_status_changed()
926 void ef4_link_set_advertising(struct ef4_nic *efx, u32 advertising) in ef4_link_set_advertising() argument
928 efx->link_advertising = advertising; in ef4_link_set_advertising()
931 efx->wanted_fc |= (EF4_FC_TX | EF4_FC_RX); in ef4_link_set_advertising()
933 efx->wanted_fc &= ~(EF4_FC_TX | EF4_FC_RX); in ef4_link_set_advertising()
935 efx->wanted_fc ^= EF4_FC_TX; in ef4_link_set_advertising()
939 void ef4_link_set_wanted_fc(struct ef4_nic *efx, u8 wanted_fc) in ef4_link_set_wanted_fc() argument
941 efx->wanted_fc = wanted_fc; in ef4_link_set_wanted_fc()
942 if (efx->link_advertising) { in ef4_link_set_wanted_fc()
944 efx->link_advertising |= (ADVERTISED_Pause | in ef4_link_set_wanted_fc()
947 efx->link_advertising &= ~(ADVERTISED_Pause | in ef4_link_set_wanted_fc()
950 efx->link_advertising ^= ADVERTISED_Asym_Pause; in ef4_link_set_wanted_fc()
954 static void ef4_fini_port(struct ef4_nic *efx);
959 void ef4_mac_reconfigure(struct ef4_nic *efx) in ef4_mac_reconfigure() argument
961 down_read(&efx->filter_sem); in ef4_mac_reconfigure()
962 efx->type->reconfigure_mac(efx); in ef4_mac_reconfigure()
963 up_read(&efx->filter_sem); in ef4_mac_reconfigure()
973 int __ef4_reconfigure_port(struct ef4_nic *efx) in __ef4_reconfigure_port() argument
978 WARN_ON(!mutex_is_locked(&efx->mac_lock)); in __ef4_reconfigure_port()
981 phy_mode = efx->phy_mode; in __ef4_reconfigure_port()
982 if (LOOPBACK_INTERNAL(efx)) in __ef4_reconfigure_port()
983 efx->phy_mode |= PHY_MODE_TX_DISABLED; in __ef4_reconfigure_port()
985 efx->phy_mode &= ~PHY_MODE_TX_DISABLED; in __ef4_reconfigure_port()
987 rc = efx->type->reconfigure_port(efx); in __ef4_reconfigure_port()
990 efx->phy_mode = phy_mode; in __ef4_reconfigure_port()
997 int ef4_reconfigure_port(struct ef4_nic *efx) in ef4_reconfigure_port() argument
1001 EF4_ASSERT_RESET_SERIALISED(efx); in ef4_reconfigure_port()
1003 mutex_lock(&efx->mac_lock); in ef4_reconfigure_port()
1004 rc = __ef4_reconfigure_port(efx); in ef4_reconfigure_port()
1005 mutex_unlock(&efx->mac_lock); in ef4_reconfigure_port()
1015 struct ef4_nic *efx = container_of(data, struct ef4_nic, mac_work); in ef4_mac_work() local
1017 mutex_lock(&efx->mac_lock); in ef4_mac_work()
1018 if (efx->port_enabled) in ef4_mac_work()
1019 ef4_mac_reconfigure(efx); in ef4_mac_work()
1020 mutex_unlock(&efx->mac_lock); in ef4_mac_work()
1023 static int ef4_probe_port(struct ef4_nic *efx) in ef4_probe_port() argument
1027 netif_dbg(efx, probe, efx->net_dev, "create port\n"); in ef4_probe_port()
1030 efx->phy_mode = PHY_MODE_SPECIAL; in ef4_probe_port()
1033 rc = efx->type->probe_port(efx); in ef4_probe_port()
1038 eth_hw_addr_set(efx->net_dev, efx->net_dev->perm_addr); in ef4_probe_port()
1043 static int ef4_init_port(struct ef4_nic *efx) in ef4_init_port() argument
1047 netif_dbg(efx, drv, efx->net_dev, "init port\n"); in ef4_init_port()
1049 mutex_lock(&efx->mac_lock); in ef4_init_port()
1051 rc = efx->phy_op->init(efx); in ef4_init_port()
1055 efx->port_initialized = true; in ef4_init_port()
1059 ef4_mac_reconfigure(efx); in ef4_init_port()
1062 rc = efx->phy_op->reconfigure(efx); in ef4_init_port()
1066 mutex_unlock(&efx->mac_lock); in ef4_init_port()
1070 efx->phy_op->fini(efx); in ef4_init_port()
1072 mutex_unlock(&efx->mac_lock); in ef4_init_port()
1076 static void ef4_start_port(struct ef4_nic *efx) in ef4_start_port() argument
1078 netif_dbg(efx, ifup, efx->net_dev, "start port\n"); in ef4_start_port()
1079 BUG_ON(efx->port_enabled); in ef4_start_port()
1081 mutex_lock(&efx->mac_lock); in ef4_start_port()
1082 efx->port_enabled = true; in ef4_start_port()
1085 ef4_mac_reconfigure(efx); in ef4_start_port()
1087 mutex_unlock(&efx->mac_lock); in ef4_start_port()
1095 static void ef4_stop_port(struct ef4_nic *efx) in ef4_stop_port() argument
1097 netif_dbg(efx, ifdown, efx->net_dev, "stop port\n"); in ef4_stop_port()
1099 EF4_ASSERT_RESET_SERIALISED(efx); in ef4_stop_port()
1101 mutex_lock(&efx->mac_lock); in ef4_stop_port()
1102 efx->port_enabled = false; in ef4_stop_port()
1103 mutex_unlock(&efx->mac_lock); in ef4_stop_port()
1106 netif_addr_lock_bh(efx->net_dev); in ef4_stop_port()
1107 netif_addr_unlock_bh(efx->net_dev); in ef4_stop_port()
1109 cancel_delayed_work_sync(&efx->monitor_work); in ef4_stop_port()
1110 ef4_selftest_async_cancel(efx); in ef4_stop_port()
1111 cancel_work_sync(&efx->mac_work); in ef4_stop_port()
1114 static void ef4_fini_port(struct ef4_nic *efx) in ef4_fini_port() argument
1116 netif_dbg(efx, drv, efx->net_dev, "shut down port\n"); in ef4_fini_port()
1118 if (!efx->port_initialized) in ef4_fini_port()
1121 efx->phy_op->fini(efx); in ef4_fini_port()
1122 efx->port_initialized = false; in ef4_fini_port()
1124 efx->link_state.up = false; in ef4_fini_port()
1125 ef4_link_status_changed(efx); in ef4_fini_port()
1128 static void ef4_remove_port(struct ef4_nic *efx) in ef4_remove_port() argument
1130 netif_dbg(efx, drv, efx->net_dev, "destroying port\n"); in ef4_remove_port()
1132 efx->type->remove_port(efx); in ef4_remove_port()
1151 static void ef4_associate(struct ef4_nic *efx) in ef4_associate() argument
1155 if (efx->primary == efx) { in ef4_associate()
1158 netif_dbg(efx, probe, efx->net_dev, "adding to primary list\n"); in ef4_associate()
1159 list_add_tail(&efx->node, &ef4_primary_list); in ef4_associate()
1163 if (ef4_same_controller(efx, other)) { in ef4_associate()
1167 pci_name(efx->pci_dev), in ef4_associate()
1168 efx->net_dev->name); in ef4_associate()
1170 &efx->secondary_list); in ef4_associate()
1171 other->primary = efx; in ef4_associate()
1178 if (ef4_same_controller(efx, other)) { in ef4_associate()
1179 netif_dbg(efx, probe, efx->net_dev, in ef4_associate()
1183 list_add_tail(&efx->node, in ef4_associate()
1185 efx->primary = other; in ef4_associate()
1190 netif_dbg(efx, probe, efx->net_dev, in ef4_associate()
1192 list_add_tail(&efx->node, &ef4_unassociated_list); in ef4_associate()
1196 static void ef4_dissociate(struct ef4_nic *efx) in ef4_dissociate() argument
1200 list_del(&efx->node); in ef4_dissociate()
1201 efx->primary = NULL; in ef4_dissociate()
1203 list_for_each_entry_safe(other, next, &efx->secondary_list, node) { in ef4_dissociate()
1213 static int ef4_init_io(struct ef4_nic *efx) in ef4_init_io() argument
1215 struct pci_dev *pci_dev = efx->pci_dev; in ef4_init_io()
1216 dma_addr_t dma_mask = efx->type->max_dma_mask; in ef4_init_io()
1217 unsigned int mem_map_size = efx->type->mem_map_size(efx); in ef4_init_io()
1220 netif_dbg(efx, probe, efx->net_dev, "initialising I/O\n"); in ef4_init_io()
1222 bar = efx->type->mem_bar; in ef4_init_io()
1226 netif_err(efx, probe, efx->net_dev, in ef4_init_io()
1244 netif_err(efx, probe, efx->net_dev, in ef4_init_io()
1248 netif_dbg(efx, probe, efx->net_dev, in ef4_init_io()
1251 efx->membase_phys = pci_resource_start(efx->pci_dev, bar); in ef4_init_io()
1254 netif_err(efx, probe, efx->net_dev, in ef4_init_io()
1259 efx->membase = ioremap(efx->membase_phys, mem_map_size); in ef4_init_io()
1260 if (!efx->membase) { in ef4_init_io()
1261 netif_err(efx, probe, efx->net_dev, in ef4_init_io()
1263 (unsigned long long)efx->membase_phys, mem_map_size); in ef4_init_io()
1267 netif_dbg(efx, probe, efx->net_dev, in ef4_init_io()
1269 (unsigned long long)efx->membase_phys, mem_map_size, in ef4_init_io()
1270 efx->membase); in ef4_init_io()
1275 pci_release_region(efx->pci_dev, bar); in ef4_init_io()
1277 efx->membase_phys = 0; in ef4_init_io()
1279 pci_disable_device(efx->pci_dev); in ef4_init_io()
1284 static void ef4_fini_io(struct ef4_nic *efx) in ef4_fini_io() argument
1288 netif_dbg(efx, drv, efx->net_dev, "shutting down I/O\n"); in ef4_fini_io()
1290 if (efx->membase) { in ef4_fini_io()
1291 iounmap(efx->membase); in ef4_fini_io()
1292 efx->membase = NULL; in ef4_fini_io()
1295 if (efx->membase_phys) { in ef4_fini_io()
1296 bar = efx->type->mem_bar; in ef4_fini_io()
1297 pci_release_region(efx->pci_dev, bar); in ef4_fini_io()
1298 efx->membase_phys = 0; in ef4_fini_io()
1302 if (!pci_vfs_assigned(efx->pci_dev)) in ef4_fini_io()
1303 pci_disable_device(efx->pci_dev); in ef4_fini_io()
1306 void ef4_set_default_rx_indir_table(struct ef4_nic *efx) in ef4_set_default_rx_indir_table() argument
1310 for (i = 0; i < ARRAY_SIZE(efx->rx_indir_table); i++) in ef4_set_default_rx_indir_table()
1311 efx->rx_indir_table[i] = in ef4_set_default_rx_indir_table()
1312 ethtool_rxfh_indir_default(i, efx->rss_spread); in ef4_set_default_rx_indir_table()
1315 static unsigned int ef4_wanted_parallelism(struct ef4_nic *efx) in ef4_wanted_parallelism() argument
1325 netif_warn(efx, probe, efx->net_dev, in ef4_wanted_parallelism()
1343 netif_cond_dbg(efx, probe, efx->net_dev, !rss_cpus, warn, in ef4_wanted_parallelism()
1355 static int ef4_probe_interrupts(struct ef4_nic *efx) in ef4_probe_interrupts() argument
1362 if (efx->extra_channel_type[i]) in ef4_probe_interrupts()
1365 if (efx->interrupt_mode == EF4_INT_MODE_MSIX) { in ef4_probe_interrupts()
1369 n_channels = ef4_wanted_parallelism(efx); in ef4_probe_interrupts()
1373 n_channels = min(n_channels, efx->max_channels); in ef4_probe_interrupts()
1377 rc = pci_enable_msix_range(efx->pci_dev, in ef4_probe_interrupts()
1381 efx->interrupt_mode = EF4_INT_MODE_MSI; in ef4_probe_interrupts()
1382 netif_err(efx, drv, efx->net_dev, in ef4_probe_interrupts()
1385 netif_err(efx, drv, efx->net_dev, in ef4_probe_interrupts()
1388 netif_err(efx, drv, efx->net_dev, in ef4_probe_interrupts()
1394 efx->n_channels = n_channels; in ef4_probe_interrupts()
1398 efx->n_tx_channels = min(max(n_channels / 2, in ef4_probe_interrupts()
1400 efx->max_tx_channels); in ef4_probe_interrupts()
1401 efx->n_rx_channels = max(n_channels - in ef4_probe_interrupts()
1402 efx->n_tx_channels, in ef4_probe_interrupts()
1405 efx->n_tx_channels = min(n_channels, in ef4_probe_interrupts()
1406 efx->max_tx_channels); in ef4_probe_interrupts()
1407 efx->n_rx_channels = n_channels; in ef4_probe_interrupts()
1409 for (i = 0; i < efx->n_channels; i++) in ef4_probe_interrupts()
1410 ef4_get_channel(efx, i)->irq = in ef4_probe_interrupts()
1416 if (efx->interrupt_mode == EF4_INT_MODE_MSI) { in ef4_probe_interrupts()
1417 efx->n_channels = 1; in ef4_probe_interrupts()
1418 efx->n_rx_channels = 1; in ef4_probe_interrupts()
1419 efx->n_tx_channels = 1; in ef4_probe_interrupts()
1420 rc = pci_enable_msi(efx->pci_dev); in ef4_probe_interrupts()
1422 ef4_get_channel(efx, 0)->irq = efx->pci_dev->irq; in ef4_probe_interrupts()
1424 netif_err(efx, drv, efx->net_dev, in ef4_probe_interrupts()
1426 efx->interrupt_mode = EF4_INT_MODE_LEGACY; in ef4_probe_interrupts()
1431 if (efx->interrupt_mode == EF4_INT_MODE_LEGACY) { in ef4_probe_interrupts()
1432 efx->n_channels = 1 + (ef4_separate_tx_channels ? 1 : 0); in ef4_probe_interrupts()
1433 efx->n_rx_channels = 1; in ef4_probe_interrupts()
1434 efx->n_tx_channels = 1; in ef4_probe_interrupts()
1435 efx->legacy_irq = efx->pci_dev->irq; in ef4_probe_interrupts()
1439 j = efx->n_channels; in ef4_probe_interrupts()
1441 if (!efx->extra_channel_type[i]) in ef4_probe_interrupts()
1443 if (efx->interrupt_mode != EF4_INT_MODE_MSIX || in ef4_probe_interrupts()
1444 efx->n_channels <= extra_channels) { in ef4_probe_interrupts()
1445 efx->extra_channel_type[i]->handle_no_channel(efx); in ef4_probe_interrupts()
1448 ef4_get_channel(efx, j)->type = in ef4_probe_interrupts()
1449 efx->extra_channel_type[i]; in ef4_probe_interrupts()
1453 efx->rss_spread = efx->n_rx_channels; in ef4_probe_interrupts()
1458 static int ef4_soft_enable_interrupts(struct ef4_nic *efx) in ef4_soft_enable_interrupts() argument
1463 BUG_ON(efx->state == STATE_DISABLED); in ef4_soft_enable_interrupts()
1465 efx->irq_soft_enabled = true; in ef4_soft_enable_interrupts()
1468 ef4_for_each_channel(channel, efx) { in ef4_soft_enable_interrupts()
1480 ef4_for_each_channel(channel, efx) { in ef4_soft_enable_interrupts()
1491 static void ef4_soft_disable_interrupts(struct ef4_nic *efx) in ef4_soft_disable_interrupts() argument
1495 if (efx->state == STATE_DISABLED) in ef4_soft_disable_interrupts()
1498 efx->irq_soft_enabled = false; in ef4_soft_disable_interrupts()
1501 if (efx->legacy_irq) in ef4_soft_disable_interrupts()
1502 synchronize_irq(efx->legacy_irq); in ef4_soft_disable_interrupts()
1504 ef4_for_each_channel(channel, efx) { in ef4_soft_disable_interrupts()
1514 static int ef4_enable_interrupts(struct ef4_nic *efx) in ef4_enable_interrupts() argument
1519 BUG_ON(efx->state == STATE_DISABLED); in ef4_enable_interrupts()
1521 if (efx->eeh_disabled_legacy_irq) { in ef4_enable_interrupts()
1522 enable_irq(efx->legacy_irq); in ef4_enable_interrupts()
1523 efx->eeh_disabled_legacy_irq = false; in ef4_enable_interrupts()
1526 efx->type->irq_enable_master(efx); in ef4_enable_interrupts()
1528 ef4_for_each_channel(channel, efx) { in ef4_enable_interrupts()
1536 rc = ef4_soft_enable_interrupts(efx); in ef4_enable_interrupts()
1544 ef4_for_each_channel(channel, efx) { in ef4_enable_interrupts()
1551 efx->type->irq_disable_non_ev(efx); in ef4_enable_interrupts()
1556 static void ef4_disable_interrupts(struct ef4_nic *efx) in ef4_disable_interrupts() argument
1560 ef4_soft_disable_interrupts(efx); in ef4_disable_interrupts()
1562 ef4_for_each_channel(channel, efx) { in ef4_disable_interrupts()
1567 efx->type->irq_disable_non_ev(efx); in ef4_disable_interrupts()
1570 static void ef4_remove_interrupts(struct ef4_nic *efx) in ef4_remove_interrupts() argument
1575 ef4_for_each_channel(channel, efx) in ef4_remove_interrupts()
1577 pci_disable_msi(efx->pci_dev); in ef4_remove_interrupts()
1578 pci_disable_msix(efx->pci_dev); in ef4_remove_interrupts()
1581 efx->legacy_irq = 0; in ef4_remove_interrupts()
1584 static void ef4_set_channels(struct ef4_nic *efx) in ef4_set_channels() argument
1589 efx->tx_channel_offset = in ef4_set_channels()
1591 efx->n_channels - efx->n_tx_channels : 0; in ef4_set_channels()
1597 ef4_for_each_channel(channel, efx) { in ef4_set_channels()
1598 if (channel->channel < efx->n_rx_channels) in ef4_set_channels()
1604 tx_queue->queue -= (efx->tx_channel_offset * in ef4_set_channels()
1609 static int ef4_probe_nic(struct ef4_nic *efx) in ef4_probe_nic() argument
1613 netif_dbg(efx, probe, efx->net_dev, "creating NIC\n"); in ef4_probe_nic()
1616 rc = efx->type->probe(efx); in ef4_probe_nic()
1621 if (!efx->max_channels || !efx->max_tx_channels) { in ef4_probe_nic()
1622 netif_err(efx, drv, efx->net_dev, in ef4_probe_nic()
1632 rc = ef4_probe_interrupts(efx); in ef4_probe_nic()
1636 ef4_set_channels(efx); in ef4_probe_nic()
1639 rc = efx->type->dimension_resources(efx); in ef4_probe_nic()
1645 ef4_remove_interrupts(efx); in ef4_probe_nic()
1649 if (efx->n_channels > 1) in ef4_probe_nic()
1650 netdev_rss_key_fill(&efx->rx_hash_key, in ef4_probe_nic()
1651 sizeof(efx->rx_hash_key)); in ef4_probe_nic()
1652 ef4_set_default_rx_indir_table(efx); in ef4_probe_nic()
1654 netif_set_real_num_tx_queues(efx->net_dev, efx->n_tx_channels); in ef4_probe_nic()
1655 netif_set_real_num_rx_queues(efx->net_dev, efx->n_rx_channels); in ef4_probe_nic()
1658 efx->irq_mod_step_us = DIV_ROUND_UP(efx->timer_quantum_ns, 1000); in ef4_probe_nic()
1659 ef4_init_irq_moderation(efx, tx_irq_mod_usec, rx_irq_mod_usec, true, in ef4_probe_nic()
1665 ef4_remove_interrupts(efx); in ef4_probe_nic()
1667 efx->type->remove(efx); in ef4_probe_nic()
1671 static void ef4_remove_nic(struct ef4_nic *efx) in ef4_remove_nic() argument
1673 netif_dbg(efx, drv, efx->net_dev, "destroying NIC\n"); in ef4_remove_nic()
1675 ef4_remove_interrupts(efx); in ef4_remove_nic()
1676 efx->type->remove(efx); in ef4_remove_nic()
1679 static int ef4_probe_filters(struct ef4_nic *efx) in ef4_probe_filters() argument
1683 spin_lock_init(&efx->filter_lock); in ef4_probe_filters()
1684 init_rwsem(&efx->filter_sem); in ef4_probe_filters()
1685 mutex_lock(&efx->mac_lock); in ef4_probe_filters()
1686 down_write(&efx->filter_sem); in ef4_probe_filters()
1687 rc = efx->type->filter_table_probe(efx); in ef4_probe_filters()
1692 if (efx->type->offload_features & NETIF_F_NTUPLE) { in ef4_probe_filters()
1696 ef4_for_each_channel(channel, efx) { in ef4_probe_filters()
1698 kcalloc(efx->type->max_rx_ip_filters, in ef4_probe_filters()
1705 i < efx->type->max_rx_ip_filters; in ef4_probe_filters()
1712 ef4_for_each_channel(channel, efx) in ef4_probe_filters()
1714 efx->type->filter_table_remove(efx); in ef4_probe_filters()
1719 efx->rps_expire_index = efx->rps_expire_channel = 0; in ef4_probe_filters()
1723 up_write(&efx->filter_sem); in ef4_probe_filters()
1724 mutex_unlock(&efx->mac_lock); in ef4_probe_filters()
1728 static void ef4_remove_filters(struct ef4_nic *efx) in ef4_remove_filters() argument
1733 ef4_for_each_channel(channel, efx) in ef4_remove_filters()
1736 down_write(&efx->filter_sem); in ef4_remove_filters()
1737 efx->type->filter_table_remove(efx); in ef4_remove_filters()
1738 up_write(&efx->filter_sem); in ef4_remove_filters()
1741 static void ef4_restore_filters(struct ef4_nic *efx) in ef4_restore_filters() argument
1743 down_read(&efx->filter_sem); in ef4_restore_filters()
1744 efx->type->filter_table_restore(efx); in ef4_restore_filters()
1745 up_read(&efx->filter_sem); in ef4_restore_filters()
1754 static int ef4_probe_all(struct ef4_nic *efx) in ef4_probe_all() argument
1758 rc = ef4_probe_nic(efx); in ef4_probe_all()
1760 netif_err(efx, probe, efx->net_dev, "failed to create NIC\n"); in ef4_probe_all()
1764 rc = ef4_probe_port(efx); in ef4_probe_all()
1766 netif_err(efx, probe, efx->net_dev, "failed to create port\n"); in ef4_probe_all()
1771 if (WARN_ON(EF4_DEFAULT_DMAQ_SIZE < EF4_TXQ_MIN_ENT(efx))) { in ef4_probe_all()
1775 efx->rxq_entries = efx->txq_entries = EF4_DEFAULT_DMAQ_SIZE; in ef4_probe_all()
1777 rc = ef4_probe_filters(efx); in ef4_probe_all()
1779 netif_err(efx, probe, efx->net_dev, in ef4_probe_all()
1784 rc = ef4_probe_channels(efx); in ef4_probe_all()
1791 ef4_remove_filters(efx); in ef4_probe_all()
1794 ef4_remove_port(efx); in ef4_probe_all()
1796 ef4_remove_nic(efx); in ef4_probe_all()
1808 static void ef4_start_all(struct ef4_nic *efx) in ef4_start_all() argument
1810 EF4_ASSERT_RESET_SERIALISED(efx); in ef4_start_all()
1811 BUG_ON(efx->state == STATE_DISABLED); in ef4_start_all()
1815 if (efx->port_enabled || !netif_running(efx->net_dev) || in ef4_start_all()
1816 efx->reset_pending) in ef4_start_all()
1819 ef4_start_port(efx); in ef4_start_all()
1820 ef4_start_datapath(efx); in ef4_start_all()
1823 if (efx->type->monitor != NULL) in ef4_start_all()
1824 queue_delayed_work(efx->workqueue, &efx->monitor_work, in ef4_start_all()
1827 efx->type->start_stats(efx); in ef4_start_all()
1828 efx->type->pull_stats(efx); in ef4_start_all()
1829 spin_lock_bh(&efx->stats_lock); in ef4_start_all()
1830 efx->type->update_stats(efx, NULL, NULL); in ef4_start_all()
1831 spin_unlock_bh(&efx->stats_lock); in ef4_start_all()
1839 static void ef4_stop_all(struct ef4_nic *efx) in ef4_stop_all() argument
1841 EF4_ASSERT_RESET_SERIALISED(efx); in ef4_stop_all()
1844 if (!efx->port_enabled) in ef4_stop_all()
1850 efx->type->pull_stats(efx); in ef4_stop_all()
1851 spin_lock_bh(&efx->stats_lock); in ef4_stop_all()
1852 efx->type->update_stats(efx, NULL, NULL); in ef4_stop_all()
1853 spin_unlock_bh(&efx->stats_lock); in ef4_stop_all()
1854 efx->type->stop_stats(efx); in ef4_stop_all()
1855 ef4_stop_port(efx); in ef4_stop_all()
1861 WARN_ON(netif_running(efx->net_dev) && in ef4_stop_all()
1862 netif_device_present(efx->net_dev)); in ef4_stop_all()
1863 netif_tx_disable(efx->net_dev); in ef4_stop_all()
1865 ef4_stop_datapath(efx); in ef4_stop_all()
1868 static void ef4_remove_all(struct ef4_nic *efx) in ef4_remove_all() argument
1870 ef4_remove_channels(efx); in ef4_remove_all()
1871 ef4_remove_filters(efx); in ef4_remove_all()
1872 ef4_remove_port(efx); in ef4_remove_all()
1873 ef4_remove_nic(efx); in ef4_remove_all()
1881 unsigned int ef4_usecs_to_ticks(struct ef4_nic *efx, unsigned int usecs) in ef4_usecs_to_ticks() argument
1885 if (usecs * 1000 < efx->timer_quantum_ns) in ef4_usecs_to_ticks()
1887 return usecs * 1000 / efx->timer_quantum_ns; in ef4_usecs_to_ticks()
1890 unsigned int ef4_ticks_to_usecs(struct ef4_nic *efx, unsigned int ticks) in ef4_ticks_to_usecs() argument
1895 return DIV_ROUND_UP(ticks * efx->timer_quantum_ns, 1000); in ef4_ticks_to_usecs()
1899 int ef4_init_irq_moderation(struct ef4_nic *efx, unsigned int tx_usecs, in ef4_init_irq_moderation() argument
1906 EF4_ASSERT_RESET_SERIALISED(efx); in ef4_init_irq_moderation()
1908 timer_max_us = efx->timer_max_ns / 1000; in ef4_init_irq_moderation()
1913 if (tx_usecs != rx_usecs && efx->tx_channel_offset == 0 && in ef4_init_irq_moderation()
1915 netif_err(efx, drv, efx->net_dev, "Channels are shared. " in ef4_init_irq_moderation()
1920 efx->irq_rx_adaptive = rx_adaptive; in ef4_init_irq_moderation()
1921 efx->irq_rx_moderation_us = rx_usecs; in ef4_init_irq_moderation()
1922 ef4_for_each_channel(channel, efx) { in ef4_init_irq_moderation()
1932 void ef4_get_irq_moderation(struct ef4_nic *efx, unsigned int *tx_usecs, in ef4_get_irq_moderation() argument
1935 *rx_adaptive = efx->irq_rx_adaptive; in ef4_get_irq_moderation()
1936 *rx_usecs = efx->irq_rx_moderation_us; in ef4_get_irq_moderation()
1942 if (efx->tx_channel_offset == 0) { in ef4_get_irq_moderation()
1947 tx_channel = efx->channel[efx->tx_channel_offset]; in ef4_get_irq_moderation()
1961 struct ef4_nic *efx = container_of(data, struct ef4_nic, in ef4_monitor() local
1964 netif_vdbg(efx, timer, efx->net_dev, in ef4_monitor()
1967 BUG_ON(efx->type->monitor == NULL); in ef4_monitor()
1972 if (mutex_trylock(&efx->mac_lock)) { in ef4_monitor()
1973 if (efx->port_enabled) in ef4_monitor()
1974 efx->type->monitor(efx); in ef4_monitor()
1975 mutex_unlock(&efx->mac_lock); in ef4_monitor()
1978 queue_delayed_work(efx->workqueue, &efx->monitor_work, in ef4_monitor()
1993 struct ef4_nic *efx = netdev_priv(net_dev); in ef4_ioctl() local
2001 return mdio_mii_ioctl(&efx->mdio, data, cmd); in ef4_ioctl()
2012 struct ef4_nic *efx = channel->efx; in ef4_init_napi_channel() local
2014 channel->napi_dev = efx->net_dev; in ef4_init_napi_channel()
2018 static void ef4_init_napi(struct ef4_nic *efx) in ef4_init_napi() argument
2022 ef4_for_each_channel(channel, efx) in ef4_init_napi()
2034 static void ef4_fini_napi(struct ef4_nic *efx) in ef4_fini_napi() argument
2038 ef4_for_each_channel(channel, efx) in ef4_fini_napi()
2051 struct ef4_nic *efx = netdev_priv(net_dev); in ef4_net_open() local
2054 netif_dbg(efx, ifup, efx->net_dev, "opening device on CPU %d\n", in ef4_net_open()
2057 rc = ef4_check_disabled(efx); in ef4_net_open()
2060 if (efx->phy_mode & PHY_MODE_SPECIAL) in ef4_net_open()
2065 ef4_link_status_changed(efx); in ef4_net_open()
2067 ef4_start_all(efx); in ef4_net_open()
2068 ef4_selftest_async_start(efx); in ef4_net_open()
2078 struct ef4_nic *efx = netdev_priv(net_dev); in ef4_net_stop() local
2080 netif_dbg(efx, ifdown, efx->net_dev, "closing on CPU %d\n", in ef4_net_stop()
2084 ef4_stop_all(efx); in ef4_net_stop()
2093 struct ef4_nic *efx = netdev_priv(net_dev); in ef4_net_stats() local
2095 spin_lock_bh(&efx->stats_lock); in ef4_net_stats()
2096 efx->type->update_stats(efx, NULL, stats); in ef4_net_stats()
2097 spin_unlock_bh(&efx->stats_lock); in ef4_net_stats()
2103 struct ef4_nic *efx = netdev_priv(net_dev); in ef4_watchdog() local
2105 netif_err(efx, tx_err, efx->net_dev, in ef4_watchdog()
2107 efx->port_enabled); in ef4_watchdog()
2109 ef4_schedule_reset(efx, RESET_TYPE_TX_WATCHDOG); in ef4_watchdog()
2116 struct ef4_nic *efx = netdev_priv(net_dev); in ef4_change_mtu() local
2119 rc = ef4_check_disabled(efx); in ef4_change_mtu()
2123 netif_dbg(efx, drv, efx->net_dev, "changing MTU to %d\n", new_mtu); in ef4_change_mtu()
2125 ef4_device_detach_sync(efx); in ef4_change_mtu()
2126 ef4_stop_all(efx); in ef4_change_mtu()
2128 mutex_lock(&efx->mac_lock); in ef4_change_mtu()
2130 ef4_mac_reconfigure(efx); in ef4_change_mtu()
2131 mutex_unlock(&efx->mac_lock); in ef4_change_mtu()
2133 ef4_start_all(efx); in ef4_change_mtu()
2134 netif_device_attach(efx->net_dev); in ef4_change_mtu()
2140 struct ef4_nic *efx = netdev_priv(net_dev); in ef4_set_mac_address() local
2147 netif_err(efx, drv, efx->net_dev, in ef4_set_mac_address()
2156 if (efx->type->set_mac_address) { in ef4_set_mac_address()
2157 rc = efx->type->set_mac_address(efx); in ef4_set_mac_address()
2165 mutex_lock(&efx->mac_lock); in ef4_set_mac_address()
2166 ef4_mac_reconfigure(efx); in ef4_set_mac_address()
2167 mutex_unlock(&efx->mac_lock); in ef4_set_mac_address()
2175 struct ef4_nic *efx = netdev_priv(net_dev); in ef4_set_rx_mode() local
2177 if (efx->port_enabled) in ef4_set_rx_mode()
2178 queue_work(efx->workqueue, &efx->mac_work); in ef4_set_rx_mode()
2184 struct ef4_nic *efx = netdev_priv(net_dev); in ef4_set_features() local
2189 rc = efx->type->filter_clear_rx(efx, EF4_FILTER_PRI_MANUAL); in ef4_set_features()
2223 static void ef4_update_name(struct ef4_nic *efx) in ef4_update_name() argument
2225 strcpy(efx->name, efx->net_dev->name); in ef4_update_name()
2226 ef4_mtd_rename(efx); in ef4_update_name()
2227 ef4_set_channel_names(efx); in ef4_update_name()
2249 struct ef4_nic *efx = dev_get_drvdata(dev); in phy_type_show() local
2250 return sprintf(buf, "%d\n", efx->phy_type); in phy_type_show()
2254 static int ef4_register_netdev(struct ef4_nic *efx) in ef4_register_netdev() argument
2256 struct net_device *net_dev = efx->net_dev; in ef4_register_netdev()
2261 net_dev->irq = efx->pci_dev->irq; in ef4_register_netdev()
2274 efx->state = STATE_READY; in ef4_register_netdev()
2276 if (efx->reset_pending) { in ef4_register_netdev()
2277 netif_err(efx, probe, efx->net_dev, in ef4_register_netdev()
2286 ef4_update_name(efx); in ef4_register_netdev()
2295 ef4_for_each_channel(channel, efx) { in ef4_register_netdev()
2301 ef4_associate(efx); in ef4_register_netdev()
2305 rc = device_create_file(&efx->pci_dev->dev, &dev_attr_phy_type); in ef4_register_netdev()
2307 netif_err(efx, drv, efx->net_dev, in ef4_register_netdev()
2315 ef4_dissociate(efx); in ef4_register_netdev()
2318 efx->state = STATE_UNINIT; in ef4_register_netdev()
2320 netif_err(efx, drv, efx->net_dev, "could not register net dev\n"); in ef4_register_netdev()
2324 static void ef4_unregister_netdev(struct ef4_nic *efx) in ef4_unregister_netdev() argument
2326 if (!efx->net_dev) in ef4_unregister_netdev()
2329 BUG_ON(netdev_priv(efx->net_dev) != efx); in ef4_unregister_netdev()
2331 if (ef4_dev_registered(efx)) { in ef4_unregister_netdev()
2332 strscpy(efx->name, pci_name(efx->pci_dev), sizeof(efx->name)); in ef4_unregister_netdev()
2333 device_remove_file(&efx->pci_dev->dev, &dev_attr_phy_type); in ef4_unregister_netdev()
2334 unregister_netdev(efx->net_dev); in ef4_unregister_netdev()
2346 void ef4_reset_down(struct ef4_nic *efx, enum reset_type method) in ef4_reset_down() argument
2348 EF4_ASSERT_RESET_SERIALISED(efx); in ef4_reset_down()
2350 ef4_stop_all(efx); in ef4_reset_down()
2351 ef4_disable_interrupts(efx); in ef4_reset_down()
2353 mutex_lock(&efx->mac_lock); in ef4_reset_down()
2354 if (efx->port_initialized && method != RESET_TYPE_INVISIBLE && in ef4_reset_down()
2356 efx->phy_op->fini(efx); in ef4_reset_down()
2357 efx->type->fini(efx); in ef4_reset_down()
2365 int ef4_reset_up(struct ef4_nic *efx, enum reset_type method, bool ok) in ef4_reset_up() argument
2369 EF4_ASSERT_RESET_SERIALISED(efx); in ef4_reset_up()
2372 rc = efx->type->init(efx); in ef4_reset_up()
2374 netif_err(efx, drv, efx->net_dev, "failed to initialise NIC\n"); in ef4_reset_up()
2381 if (efx->port_initialized && method != RESET_TYPE_INVISIBLE && in ef4_reset_up()
2383 rc = efx->phy_op->init(efx); in ef4_reset_up()
2386 rc = efx->phy_op->reconfigure(efx); in ef4_reset_up()
2388 netif_err(efx, drv, efx->net_dev, in ef4_reset_up()
2392 rc = ef4_enable_interrupts(efx); in ef4_reset_up()
2396 down_read(&efx->filter_sem); in ef4_reset_up()
2397 ef4_restore_filters(efx); in ef4_reset_up()
2398 up_read(&efx->filter_sem); in ef4_reset_up()
2400 mutex_unlock(&efx->mac_lock); in ef4_reset_up()
2402 ef4_start_all(efx); in ef4_reset_up()
2407 efx->port_initialized = false; in ef4_reset_up()
2409 mutex_unlock(&efx->mac_lock); in ef4_reset_up()
2419 int ef4_reset(struct ef4_nic *efx, enum reset_type method) in ef4_reset() argument
2424 netif_info(efx, drv, efx->net_dev, "resetting (%s)\n", in ef4_reset()
2427 ef4_device_detach_sync(efx); in ef4_reset()
2428 ef4_reset_down(efx, method); in ef4_reset()
2430 rc = efx->type->reset(efx, method); in ef4_reset()
2432 netif_err(efx, drv, efx->net_dev, "failed to reset hardware\n"); in ef4_reset()
2440 efx->reset_pending &= -(1 << (method + 1)); in ef4_reset()
2442 __clear_bit(method, &efx->reset_pending); in ef4_reset()
2448 pci_set_master(efx->pci_dev); in ef4_reset()
2455 rc2 = ef4_reset_up(efx, method, !disabled); in ef4_reset()
2463 dev_close(efx->net_dev); in ef4_reset()
2464 netif_err(efx, drv, efx->net_dev, "has been disabled\n"); in ef4_reset()
2465 efx->state = STATE_DISABLED; in ef4_reset()
2467 netif_dbg(efx, drv, efx->net_dev, "reset complete\n"); in ef4_reset()
2468 netif_device_attach(efx->net_dev); in ef4_reset()
2478 int ef4_try_recovery(struct ef4_nic *efx) in ef4_try_recovery() argument
2486 struct eeh_dev *eehdev = pci_dev_to_eeh_dev(efx->pci_dev); in ef4_try_recovery()
2502 struct ef4_nic *efx = container_of(data, struct ef4_nic, reset_work); in ef4_reset_work() local
2506 pending = READ_ONCE(efx->reset_pending); in ef4_reset_work()
2511 ef4_try_recovery(efx)) in ef4_reset_work()
2523 if (efx->state == STATE_READY) in ef4_reset_work()
2524 (void)ef4_reset(efx, method); in ef4_reset_work()
2529 void ef4_schedule_reset(struct ef4_nic *efx, enum reset_type type) in ef4_schedule_reset() argument
2533 if (efx->state == STATE_RECOVERY) { in ef4_schedule_reset()
2534 netif_dbg(efx, drv, efx->net_dev, in ef4_schedule_reset()
2549 netif_dbg(efx, drv, efx->net_dev, "scheduling %s reset\n", in ef4_schedule_reset()
2553 method = efx->type->map_reset_reason(type); in ef4_schedule_reset()
2554 netif_dbg(efx, drv, efx->net_dev, in ef4_schedule_reset()
2560 set_bit(method, &efx->reset_pending); in ef4_schedule_reset()
2566 if (READ_ONCE(efx->state) != STATE_READY) in ef4_schedule_reset()
2569 queue_work(reset_workqueue, &efx->reset_work); in ef4_schedule_reset()
2598 int ef4_port_dummy_op_int(struct ef4_nic *efx) in ef4_port_dummy_op_int() argument
2602 void ef4_port_dummy_op_void(struct ef4_nic *efx) {} in ef4_port_dummy_op_void() argument
2604 static bool ef4_port_dummy_op_poll(struct ef4_nic *efx) in ef4_port_dummy_op_poll() argument
2625 static int ef4_init_struct(struct ef4_nic *efx, in ef4_init_struct() argument
2631 INIT_LIST_HEAD(&efx->node); in ef4_init_struct()
2632 INIT_LIST_HEAD(&efx->secondary_list); in ef4_init_struct()
2633 spin_lock_init(&efx->biu_lock); in ef4_init_struct()
2635 INIT_LIST_HEAD(&efx->mtd_list); in ef4_init_struct()
2637 INIT_WORK(&efx->reset_work, ef4_reset_work); in ef4_init_struct()
2638 INIT_DELAYED_WORK(&efx->monitor_work, ef4_monitor); in ef4_init_struct()
2639 INIT_DELAYED_WORK(&efx->selftest_work, ef4_selftest_async_work); in ef4_init_struct()
2640 efx->pci_dev = pci_dev; in ef4_init_struct()
2641 efx->msg_enable = debug; in ef4_init_struct()
2642 efx->state = STATE_UNINIT; in ef4_init_struct()
2643 strscpy(efx->name, pci_name(pci_dev), sizeof(efx->name)); in ef4_init_struct()
2645 efx->net_dev = net_dev; in ef4_init_struct()
2646 efx->rx_prefix_size = efx->type->rx_prefix_size; in ef4_init_struct()
2647 efx->rx_ip_align = in ef4_init_struct()
2648 NET_IP_ALIGN ? (efx->rx_prefix_size + NET_IP_ALIGN) % 4 : 0; in ef4_init_struct()
2649 efx->rx_packet_hash_offset = in ef4_init_struct()
2650 efx->type->rx_hash_offset - efx->type->rx_prefix_size; in ef4_init_struct()
2651 efx->rx_packet_ts_offset = in ef4_init_struct()
2652 efx->type->rx_ts_offset - efx->type->rx_prefix_size; in ef4_init_struct()
2653 spin_lock_init(&efx->stats_lock); in ef4_init_struct()
2654 mutex_init(&efx->mac_lock); in ef4_init_struct()
2655 efx->phy_op = &ef4_dummy_phy_operations; in ef4_init_struct()
2656 efx->mdio.dev = net_dev; in ef4_init_struct()
2657 INIT_WORK(&efx->mac_work, ef4_mac_work); in ef4_init_struct()
2658 init_waitqueue_head(&efx->flush_wq); in ef4_init_struct()
2661 efx->channel[i] = ef4_alloc_channel(efx, i, NULL); in ef4_init_struct()
2662 if (!efx->channel[i]) in ef4_init_struct()
2664 efx->msi_context[i].efx = efx; in ef4_init_struct()
2665 efx->msi_context[i].index = i; in ef4_init_struct()
2669 efx->interrupt_mode = max(efx->type->max_interrupt_mode, in ef4_init_struct()
2673 snprintf(efx->workqueue_name, sizeof(efx->workqueue_name), "sfc%s", in ef4_init_struct()
2675 efx->workqueue = create_singlethread_workqueue(efx->workqueue_name); in ef4_init_struct()
2676 if (!efx->workqueue) in ef4_init_struct()
2682 ef4_fini_struct(efx); in ef4_init_struct()
2686 static void ef4_fini_struct(struct ef4_nic *efx) in ef4_fini_struct() argument
2691 kfree(efx->channel[i]); in ef4_fini_struct()
2693 kfree(efx->vpd_sn); in ef4_fini_struct()
2695 if (efx->workqueue) { in ef4_fini_struct()
2696 destroy_workqueue(efx->workqueue); in ef4_fini_struct()
2697 efx->workqueue = NULL; in ef4_fini_struct()
2701 void ef4_update_sw_stats(struct ef4_nic *efx, u64 *stats) in ef4_update_sw_stats() argument
2706 ef4_for_each_channel(channel, efx) in ef4_update_sw_stats()
2709 stats[GENERIC_STAT_rx_noskb_drops] = atomic_read(&efx->n_rx_noskb_drops); in ef4_update_sw_stats()
2721 static void ef4_pci_remove_main(struct ef4_nic *efx) in ef4_pci_remove_main() argument
2726 BUG_ON(efx->state == STATE_READY); in ef4_pci_remove_main()
2727 cancel_work_sync(&efx->reset_work); in ef4_pci_remove_main()
2729 ef4_disable_interrupts(efx); in ef4_pci_remove_main()
2730 ef4_nic_fini_interrupt(efx); in ef4_pci_remove_main()
2731 ef4_fini_port(efx); in ef4_pci_remove_main()
2732 efx->type->fini(efx); in ef4_pci_remove_main()
2733 ef4_fini_napi(efx); in ef4_pci_remove_main()
2734 ef4_remove_all(efx); in ef4_pci_remove_main()
2743 struct ef4_nic *efx; in ef4_pci_remove() local
2745 efx = pci_get_drvdata(pci_dev); in ef4_pci_remove()
2746 if (!efx) in ef4_pci_remove()
2751 ef4_dissociate(efx); in ef4_pci_remove()
2752 dev_close(efx->net_dev); in ef4_pci_remove()
2753 ef4_disable_interrupts(efx); in ef4_pci_remove()
2754 efx->state = STATE_UNINIT; in ef4_pci_remove()
2757 ef4_unregister_netdev(efx); in ef4_pci_remove()
2759 ef4_mtd_remove(efx); in ef4_pci_remove()
2761 ef4_pci_remove_main(efx); in ef4_pci_remove()
2763 ef4_fini_io(efx); in ef4_pci_remove()
2764 netif_dbg(efx, drv, efx->net_dev, "shutdown successful\n"); in ef4_pci_remove()
2766 ef4_fini_struct(efx); in ef4_pci_remove()
2767 free_netdev(efx->net_dev); in ef4_pci_remove()
2775 static void ef4_probe_vpd_strings(struct ef4_nic *efx) in ef4_probe_vpd_strings() argument
2777 struct pci_dev *dev = efx->pci_dev; in ef4_probe_vpd_strings()
2800 efx->vpd_sn = kmemdup_nul(vpd_data + start, kw_len, GFP_KERNEL); in ef4_probe_vpd_strings()
2809 static int ef4_pci_probe_main(struct ef4_nic *efx) in ef4_pci_probe_main() argument
2814 rc = ef4_probe_all(efx); in ef4_pci_probe_main()
2818 ef4_init_napi(efx); in ef4_pci_probe_main()
2820 rc = efx->type->init(efx); in ef4_pci_probe_main()
2822 netif_err(efx, probe, efx->net_dev, in ef4_pci_probe_main()
2827 rc = ef4_init_port(efx); in ef4_pci_probe_main()
2829 netif_err(efx, probe, efx->net_dev, in ef4_pci_probe_main()
2834 rc = ef4_nic_init_interrupt(efx); in ef4_pci_probe_main()
2837 rc = ef4_enable_interrupts(efx); in ef4_pci_probe_main()
2844 ef4_nic_fini_interrupt(efx); in ef4_pci_probe_main()
2846 ef4_fini_port(efx); in ef4_pci_probe_main()
2848 efx->type->fini(efx); in ef4_pci_probe_main()
2850 ef4_fini_napi(efx); in ef4_pci_probe_main()
2851 ef4_remove_all(efx); in ef4_pci_probe_main()
2869 struct ef4_nic *efx; in ef4_pci_probe() local
2873 net_dev = alloc_etherdev_mqs(sizeof(*efx), EF4_MAX_CORE_TX_QUEUES, in ef4_pci_probe()
2877 efx = netdev_priv(net_dev); in ef4_pci_probe()
2878 efx->type = (const struct ef4_nic_type *) entry->driver_data; in ef4_pci_probe()
2879 efx->fixed_features |= NETIF_F_HIGHDMA; in ef4_pci_probe()
2881 pci_set_drvdata(pci_dev, efx); in ef4_pci_probe()
2883 rc = ef4_init_struct(efx, pci_dev, net_dev); in ef4_pci_probe()
2887 netif_info(efx, probe, efx->net_dev, in ef4_pci_probe()
2890 ef4_probe_vpd_strings(efx); in ef4_pci_probe()
2893 rc = ef4_init_io(efx); in ef4_pci_probe()
2897 rc = ef4_pci_probe_main(efx); in ef4_pci_probe()
2901 net_dev->features |= (efx->type->offload_features | NETIF_F_SG | in ef4_pci_probe()
2907 net_dev->hw_features = net_dev->features & ~efx->fixed_features; in ef4_pci_probe()
2914 net_dev->features |= efx->fixed_features; in ef4_pci_probe()
2916 rc = ef4_register_netdev(efx); in ef4_pci_probe()
2920 netif_dbg(efx, probe, efx->net_dev, "initialisation successful\n"); in ef4_pci_probe()
2924 rc = ef4_mtd_probe(efx); in ef4_pci_probe()
2927 netif_warn(efx, probe, efx->net_dev, in ef4_pci_probe()
2932 netif_notice(efx, probe, efx->net_dev, in ef4_pci_probe()
2939 ef4_pci_remove_main(efx); in ef4_pci_probe()
2941 ef4_fini_io(efx); in ef4_pci_probe()
2943 ef4_fini_struct(efx); in ef4_pci_probe()
2946 netif_dbg(efx, drv, efx->net_dev, "initialisation failed. rc=%d\n", rc); in ef4_pci_probe()
2953 struct ef4_nic *efx = dev_get_drvdata(dev); in ef4_pm_freeze() local
2957 if (efx->state != STATE_DISABLED) { in ef4_pm_freeze()
2958 efx->state = STATE_UNINIT; in ef4_pm_freeze()
2960 ef4_device_detach_sync(efx); in ef4_pm_freeze()
2962 ef4_stop_all(efx); in ef4_pm_freeze()
2963 ef4_disable_interrupts(efx); in ef4_pm_freeze()
2974 struct ef4_nic *efx = dev_get_drvdata(dev); in ef4_pm_thaw() local
2978 if (efx->state != STATE_DISABLED) { in ef4_pm_thaw()
2979 rc = ef4_enable_interrupts(efx); in ef4_pm_thaw()
2983 mutex_lock(&efx->mac_lock); in ef4_pm_thaw()
2984 efx->phy_op->reconfigure(efx); in ef4_pm_thaw()
2985 mutex_unlock(&efx->mac_lock); in ef4_pm_thaw()
2987 ef4_start_all(efx); in ef4_pm_thaw()
2989 netif_device_attach(efx->net_dev); in ef4_pm_thaw()
2991 efx->state = STATE_READY; in ef4_pm_thaw()
2993 efx->type->resume_wol(efx); in ef4_pm_thaw()
2999 queue_work(reset_workqueue, &efx->reset_work); in ef4_pm_thaw()
3012 struct ef4_nic *efx = pci_get_drvdata(pci_dev); in ef4_pm_poweroff() local
3014 efx->type->fini(efx); in ef4_pm_poweroff()
3016 efx->reset_pending = 0; in ef4_pm_poweroff()
3026 struct ef4_nic *efx = pci_get_drvdata(pci_dev); in ef4_pm_resume() local
3036 pci_set_master(efx->pci_dev); in ef4_pm_resume()
3037 rc = efx->type->reset(efx, RESET_TYPE_ALL); in ef4_pm_resume()
3040 rc = efx->type->init(efx); in ef4_pm_resume()
3075 struct ef4_nic *efx = pci_get_drvdata(pdev); in ef4_io_error_detected() local
3082 if (efx->state != STATE_DISABLED) { in ef4_io_error_detected()
3083 efx->state = STATE_RECOVERY; in ef4_io_error_detected()
3084 efx->reset_pending = 0; in ef4_io_error_detected()
3086 ef4_device_detach_sync(efx); in ef4_io_error_detected()
3088 ef4_stop_all(efx); in ef4_io_error_detected()
3089 ef4_disable_interrupts(efx); in ef4_io_error_detected()
3109 struct ef4_nic *efx = pci_get_drvdata(pdev); in ef4_io_slot_reset() local
3113 netif_err(efx, hw, efx->net_dev, in ef4_io_slot_reset()
3124 struct ef4_nic *efx = pci_get_drvdata(pdev); in ef4_io_resume() local
3129 if (efx->state == STATE_DISABLED) in ef4_io_resume()
3132 rc = ef4_reset(efx, RESET_TYPE_ALL); in ef4_io_resume()
3134 netif_err(efx, hw, efx->net_dev, in ef4_io_resume()
3137 efx->state = STATE_READY; in ef4_io_resume()
3138 netif_dbg(efx, hw, efx->net_dev, in ef4_io_resume()