Lines Matching defs:efx

35 static u8 *ef100_mcdi_buf(struct efx_nic *efx, u8 bufid, dma_addr_t *dma_addr)
37 struct ef100_nic_data *nic_data = efx->nic_data;
45 static int ef100_get_warm_boot_count(struct efx_nic *efx)
49 efx_readd(efx, &reg, efx_reg(efx, ER_GZ_MC_SFT_STATUS));
52 netif_err(efx, hw, efx->net_dev, "Hardware unavailable\n");
53 efx->state = STATE_DISABLED;
61 static void ef100_mcdi_request(struct efx_nic *efx,
66 u8 *pdu = ef100_mcdi_buf(efx, 0, &dma_addr);
78 _efx_writed(efx, cpu_to_le32((u64)dma_addr >> 32), efx_reg(efx, ER_GZ_MC_DB_LWRD));
79 _efx_writed(efx, cpu_to_le32((u32)dma_addr), efx_reg(efx, ER_GZ_MC_DB_HWRD));
82 static bool ef100_mcdi_poll_response(struct efx_nic *efx)
85 *(const efx_dword_t *)(ef100_mcdi_buf(efx, 0, NULL));
91 static void ef100_mcdi_read_response(struct efx_nic *efx,
95 const u8 *pdu = ef100_mcdi_buf(efx, 0, NULL);
100 static int ef100_mcdi_poll_reboot(struct efx_nic *efx)
102 struct ef100_nic_data *nic_data = efx->nic_data;
105 rc = ef100_get_warm_boot_count(efx);
123 static void ef100_mcdi_reboot_detected(struct efx_nic *efx)
129 static int ef100_get_mac_address(struct efx_nic *efx, u8 *mac_address)
137 rc = efx_mcdi_rpc(efx, MC_CMD_GET_MAC_ADDRESSES, NULL, 0,
149 static int efx_ef100_init_datapath_caps(struct efx_nic *efx)
152 struct ef100_nic_data *nic_data = efx->nic_data;
159 rc = efx_mcdi_rpc(efx, MC_CMD_GET_CAPABILITIES, NULL, 0,
164 netif_err(efx, drv, efx->net_dev,
181 rc = efx_mcdi_window_mode_to_stride(efx, vi_window_mode);
186 efx->net_dev->features |= NETIF_F_TSO | NETIF_F_TSO6;
187 efx->num_mac_stats = MCDI_WORD(outbuf,
189 netif_dbg(efx, probe, efx->net_dev,
191 efx->num_mac_stats);
200 return efx_nic_alloc_buffer(channel->efx, &channel->eventq.buf,
208 struct ef100_nic_data *nic_data = channel->efx->nic_data;
225 efx_writed(channel->efx, &evq_prime,
226 efx_reg(channel->efx, ER_GZ_EVQ_INT_PRIME));
231 struct efx_nic *efx = channel->efx;
243 nic_data = efx->nic_data;
256 netif_vdbg(efx, drv, efx->net_dev,
274 netif_info(efx, drv, efx->net_dev,
279 netif_info(efx, drv, efx->net_dev,
299 struct efx_nic *efx = context->efx;
301 netif_vdbg(efx, intr, efx->net_dev,
304 if (likely(READ_ONCE(efx->irq_soft_enabled))) {
306 if (context->index == efx->irq_level)
307 efx->last_irq_cpu = raw_smp_processor_id();
310 efx_schedule_channel_irq(efx->channel[context->index]);
316 static int ef100_phy_probe(struct efx_nic *efx)
322 efx->phy_data = kzalloc(sizeof(struct efx_mcdi_phy_data), GFP_KERNEL);
323 if (!efx->phy_data)
326 rc = efx_mcdi_get_phy_cfg(efx, efx->phy_data);
331 phy_data = efx->phy_data;
333 efx->link_advertising);
334 efx->fec_config = mcdi_fec_caps_to_ethtool(phy_data->supported_cap,
338 efx->wanted_fc = EFX_FC_RX | EFX_FC_TX;
340 efx->wanted_fc |= EFX_FC_AUTO;
341 efx_link_set_wanted_fc(efx, efx->wanted_fc);
346 rc = efx_mcdi_port_reconfigure(efx);
348 netif_warn(efx, drv, efx->net_dev,
354 static int ef100_filter_table_probe(struct efx_nic *efx)
356 return efx_mcdi_filter_table_probe(efx, true);
359 static int ef100_filter_table_up(struct efx_nic *efx)
363 rc = efx_mcdi_filter_add_vlan(efx, EFX_FILTER_VID_UNSPEC);
365 efx_mcdi_filter_table_down(efx);
369 rc = efx_mcdi_filter_add_vlan(efx, 0);
371 efx_mcdi_filter_del_vlan(efx, EFX_FILTER_VID_UNSPEC);
372 efx_mcdi_filter_table_down(efx);
378 static void ef100_filter_table_down(struct efx_nic *efx)
380 efx_mcdi_filter_del_vlan(efx, 0);
381 efx_mcdi_filter_del_vlan(efx, EFX_FILTER_VID_UNSPEC);
382 efx_mcdi_filter_table_down(efx);
387 static int ef100_reconfigure_mac(struct efx_nic *efx, bool mtu_only)
389 WARN_ON(!mutex_is_locked(&efx->mac_lock));
391 efx_mcdi_filter_sync_rx_mode(efx);
393 if (mtu_only && efx_has_cap(efx, SET_MAC_ENHANCED))
394 return efx_mcdi_set_mtu(efx);
395 return efx_mcdi_set_mac(efx);
420 static int ef100_reset(struct efx_nic *efx, enum reset_type reset_type)
424 dev_close(efx->net_dev);
427 netif_device_attach(efx->net_dev);
428 __clear_bit(reset_type, &efx->reset_pending);
429 rc = dev_open(efx->net_dev, NULL);
431 rc = efx_mcdi_reset(efx, reset_type);
435 netif_device_attach(efx->net_dev);
437 rc = dev_open(efx->net_dev, NULL);
535 static size_t ef100_describe_stats(struct efx_nic *efx, u8 *names)
544 static size_t ef100_update_stats_common(struct efx_nic *efx, u64 *full_stats,
547 struct ef100_nic_data *nic_data = efx->nic_data;
588 static size_t ef100_update_stats(struct efx_nic *efx,
592 __le64 *mc_stats = kmalloc(array_size(efx->num_mac_stats, sizeof(__le64)), GFP_ATOMIC);
593 struct ef100_nic_data *nic_data = efx->nic_data;
603 efx_nic_copy_stats(efx, mc_stats);
609 return ef100_update_stats_common(efx, full_stats, core_stats);
612 static int efx_ef100_get_phys_port_id(struct efx_nic *efx,
615 struct ef100_nic_data *nic_data = efx->nic_data;
626 static int efx_ef100_irq_test_generate(struct efx_nic *efx)
632 MCDI_SET_DWORD(inbuf, TRIGGER_INTERRUPT_IN_INTR_LEVEL, efx->irq_level);
633 return efx_mcdi_rpc_quiet(efx, MC_CMD_TRIGGER_INTERRUPT,
642 struct efx_nic *efx = channel->efx;
658 rc = efx_mcdi_rpc(efx, MC_CMD_DRIVER_EVENT, inbuf, sizeof(inbuf),
667 netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
670 static unsigned int ef100_check_caps(const struct efx_nic *efx,
673 const struct ef100_nic_data *nic_data = efx->nic_data;
934 static int ef100_process_design_param(struct efx_nic *efx,
937 struct ef100_nic_data *nic_data = efx->nic_data;
964 netif_err(efx, probe, efx->net_dev,
978 netif_err(efx, probe, efx->net_dev,
987 efx->net_dev->gso_max_size = nic_data->tso_max_payload_len;
991 efx->net_dev->gso_max_segs = nic_data->tso_max_payload_num_segs;
998 netif_err(efx, probe, efx->net_dev,
1020 netif_dbg(efx, probe, efx->net_dev,
1035 netif_dbg(efx, probe, efx->net_dev,
1042 static int ef100_check_design_params(struct efx_nic *efx)
1050 efx_readd(efx, &reg, ER_GZ_PARAMS_TLV_LEN);
1052 netif_dbg(efx, probe, efx->net_dev, "%u bytes of design parameters\n",
1055 efx_readd(efx, &reg, ER_GZ_PARAMS_TLV + offset);
1061 rc = ef100_process_design_param(efx, &reader);
1074 netif_err(efx, probe, efx->net_dev,
1078 netif_err(efx, probe, efx->net_dev,
1089 static int ef100_probe_main(struct efx_nic *efx)
1091 unsigned int bar_size = resource_size(&efx->pci_dev->resource[efx->mem_bar]);
1092 struct net_device *net_dev = efx->net_dev;
1103 efx->nic_data = nic_data;
1104 nic_data->efx = efx;
1105 net_dev->features |= efx->type->offload_features;
1106 net_dev->hw_features |= efx->type->offload_features;
1115 rc = ef100_check_design_params(efx);
1117 netif_err(efx, probe, efx->net_dev,
1126 rc = efx_nic_alloc_buffer(efx, &nic_data->mcdi_buf, MCDI_BUF_LEN,
1136 rc = ef100_get_warm_boot_count(efx);
1150 _efx_writed(efx, cpu_to_le32(1), efx_reg(efx, ER_GZ_MC_DB_HWRD));
1154 rc = efx_mcdi_init(efx);
1155 if (!rc && efx->mcdi->fn_flags &
1157 netif_info(efx, probe, efx->net_dev,
1164 rc = efx_mcdi_reset(efx, RESET_TYPE_ALL);
1168 rc = efx_mcdi_log_ctrl(efx, true, false, 0);
1172 rc = efx_get_pf_index(efx, &nic_data->pf_index);
1176 rc = efx_ef100_init_datapath_caps(efx);
1180 efx->max_vis = EF100_MAX_VIS;
1182 rc = efx_mcdi_port_get_number(efx);
1185 efx->port_num = rc;
1187 efx_mcdi_print_fwver(efx, fw_version, sizeof(fw_version));
1188 netif_dbg(efx, drv, efx->net_dev, "Firmware version %s\n", fw_version);
1191 netif_info(efx, drv, efx->net_dev, "Firmware uses old event descriptors\n");
1196 if (efx_has_cap(efx, UNSOL_EV_CREDIT_SUPPORTED)) {
1197 netif_info(efx, drv, efx->net_dev, "Firmware uses unsolicited-event credits\n");
1202 rc = ef100_phy_probe(efx);
1206 down_write(&efx->filter_sem);
1207 rc = ef100_filter_table_probe(efx);
1208 up_write(&efx->filter_sem);
1212 netdev_rss_key_fill(efx->rss_context.rx_hash_key,
1213 sizeof(efx->rss_context.rx_hash_key));
1216 efx_mcdi_push_default_indir_table(efx, efx->n_rx_channels);
1218 rc = ef100_register_netdev(efx);
1227 int ef100_probe_pf(struct efx_nic *efx)
1229 struct net_device *net_dev = efx->net_dev;
1231 int rc = ef100_probe_main(efx);
1236 nic_data = efx->nic_data;
1237 rc = ef100_get_mac_address(efx, net_dev->perm_addr);
1250 int ef100_probe_vf(struct efx_nic *efx)
1252 return ef100_probe_main(efx);
1255 void ef100_remove(struct efx_nic *efx)
1257 struct ef100_nic_data *nic_data = efx->nic_data;
1259 ef100_unregister_netdev(efx);
1261 down_write(&efx->filter_sem);
1262 efx_mcdi_filter_table_remove(efx);
1263 up_write(&efx->filter_sem);
1264 efx_fini_channels(efx);
1265 kfree(efx->phy_data);
1266 efx->phy_data = NULL;
1267 efx_mcdi_detach(efx);
1268 efx_mcdi_fini(efx);
1270 efx_nic_free_buffer(efx, &nic_data->mcdi_buf);
1272 efx->nic_data = NULL;