Lines Matching defs:efx
41 static int ef100_pci_walk_xilinx_table(struct efx_nic *efx, u64 offset,
50 static u32 _ef100_pci_get_bar_bits_with_width(struct efx_nic *efx,
56 efx_readd(efx, &dword, structure_start + ROUND_DOWN_TO_DWORD(lbn));
61 #define ef100_pci_get_bar_bits(efx, entry_location, bitdef) \
62 _ef100_pci_get_bar_bits_with_width(efx, entry_location, \
66 static int ef100_pci_parse_ef100_entry(struct efx_nic *efx, int entry_location,
69 u64 offset = ef100_pci_get_bar_bits(efx, entry_location, EF100_FUNC_CTL_WIN_OFF) <<
71 u32 bar = ef100_pci_get_bar_bits(efx, entry_location, EF100_BAR);
73 netif_dbg(efx, probe, efx->net_dev,
78 netif_err(efx, probe, efx->net_dev,
85 netif_err(efx, probe, efx->net_dev,
97 static bool ef100_pci_does_bar_overflow(struct efx_nic *efx, int bar,
101 pci_resource_len(efx->pci_dev, bar);
107 static int ef100_pci_parse_continue_entry(struct efx_nic *efx, int entry_location,
116 efx_reado(efx, &entry, entry_location);
123 previous_bar = efx->mem_bar;
127 netif_err(efx, probe, efx->net_dev,
134 efx_fini_io(efx);
136 if (ef100_pci_does_bar_overflow(efx, bar, offset)) {
137 netif_err(efx, probe, efx->net_dev,
144 rc = efx_init_io(efx, bar,
146 pci_resource_len(efx->pci_dev, bar));
148 netif_err(efx, probe, efx->net_dev,
154 rc = ef100_pci_walk_xilinx_table(efx, offset, result);
159 efx_fini_io(efx);
162 rc = efx_init_io(efx, previous_bar,
164 pci_resource_len(efx->pci_dev, previous_bar));
166 netif_err(efx, probe, efx->net_dev,
179 static int ef100_pci_walk_xilinx_table(struct efx_nic *efx, u64 offset,
186 u32 id = ef100_pci_get_bar_bits(efx, current_entry, ENTRY_FORMAT);
187 u32 last = ef100_pci_get_bar_bits(efx, current_entry, ENTRY_LAST);
188 u32 rev = ef100_pci_get_bar_bits(efx, current_entry, ENTRY_REV);
194 entry_size = ef100_pci_get_bar_bits(efx, current_entry, ENTRY_SIZE);
196 netif_dbg(efx, probe, efx->net_dev,
198 id, entry_size, current_entry, efx->mem_bar);
201 netif_err(efx, probe, efx->net_dev,
210 netif_err(efx, probe, efx->net_dev,
216 rc = ef100_pci_parse_ef100_entry(efx, current_entry,
223 netif_err(efx, probe, efx->net_dev,
229 rc = ef100_pci_parse_continue_entry(efx, current_entry, result);
243 if (ef100_pci_does_bar_overflow(efx, efx->mem_bar, current_entry)) {
244 netif_err(efx, probe, efx->net_dev,
252 static int _ef100_pci_get_config_bits_with_width(struct efx_nic *efx,
259 rc = pci_read_config_dword(efx->pci_dev, pos, &temp);
261 netif_err(efx, probe, efx->net_dev,
272 #define ef100_pci_get_config_bits(efx, entry_location, bitdef, result) \
273 _ef100_pci_get_config_bits_with_width(efx, entry_location, \
280 static int ef100_pci_parse_xilinx_cap(struct efx_nic *efx, int vndr_cap,
290 rc = ef100_pci_get_config_bits(efx, vndr_cap, TBL_BAR, &bar);
292 netif_err(efx, probe, efx->net_dev,
300 netif_err(efx, probe, efx->net_dev,
306 rc = ef100_pci_get_config_bits(efx, vndr_cap, TBL_OFF_LO, &offset_lo);
308 netif_err(efx, probe, efx->net_dev,
316 rc = ef100_pci_get_config_bits(efx, vndr_cap, TBL_OFF_HI, &offset_high);
318 netif_err(efx, probe, efx->net_dev,
328 if (offset > pci_resource_len(efx->pci_dev, bar) - sizeof(u32) * 2) {
329 netif_err(efx, probe, efx->net_dev,
336 rc = efx_init_io(efx, bar,
338 pci_resource_len(efx->pci_dev, bar));
340 netif_err(efx, probe, efx->net_dev,
345 rc = ef100_pci_walk_xilinx_table(efx, offset, result);
348 efx_fini_io(efx);
355 static int ef100_pci_find_func_ctrl_window(struct efx_nic *efx,
363 while ((cap = pci_find_next_ext_capability(efx->pci_dev, cap, PCI_EXT_CAP_ID_VNDR)) != 0) {
372 rc = ef100_pci_get_config_bits(efx, vndr_cap, ID, &vsec_id);
374 netif_err(efx, probe, efx->net_dev,
380 rc = ef100_pci_get_config_bits(efx, vndr_cap, VER, &vsec_ver);
382 netif_err(efx, probe, efx->net_dev,
389 rc = ef100_pci_get_config_bits(efx, vndr_cap, LEN, &vsec_len);
391 netif_err(efx, probe, efx->net_dev,
402 rc = ef100_pci_parse_xilinx_cap(efx, vndr_cap,
410 netif_err(efx, probe, efx->net_dev,
425 struct efx_nic *efx;
427 efx = pci_get_drvdata(pci_dev);
428 if (!efx)
432 dev_close(efx->net_dev);
438 unregister_netdevice_notifier(&efx->netdev_notifier);
439 ef100_remove(efx);
440 efx_fini_io(efx);
441 netif_dbg(efx, drv, efx->net_dev, "shutdown successful\n");
444 efx_fini_struct(efx);
445 free_netdev(efx->net_dev);
455 struct efx_nic *efx;
459 net_dev = alloc_etherdev_mq(sizeof(*efx), EFX_MAX_CORE_TX_QUEUES);
462 efx = netdev_priv(net_dev);
463 efx->type = (const struct efx_nic_type *)entry->driver_data;
465 pci_set_drvdata(pci_dev, efx);
467 rc = efx_init_struct(efx, pci_dev, net_dev);
471 efx->vi_stride = EF100_DEFAULT_VI_STRIDE;
472 netif_info(efx, probe, efx->net_dev,
475 rc = ef100_pci_find_func_ctrl_window(efx, &fcw);
477 netif_err(efx, probe, efx->net_dev,
490 if (fcw.offset > pci_resource_len(efx->pci_dev, fcw.bar) - ESE_GZ_FCW_LEN) {
491 netif_err(efx, probe, efx->net_dev,
498 rc = efx_init_io(efx, fcw.bar,
500 pci_resource_len(efx->pci_dev, fcw.bar));
504 efx->reg_base = fcw.offset;
506 efx->netdev_notifier.notifier_call = ef100_netdev_event;
507 rc = register_netdevice_notifier(&efx->netdev_notifier);
509 netif_err(efx, probe, efx->net_dev,
514 rc = efx->type->probe(efx);
518 netif_dbg(efx, probe, efx->net_dev, "initialisation successful\n");