Lines Matching +full:spi +full:- +full:rx +full:- +full:delay +full:- +full:us

3  * Copyright 2005-2006 Fen Systems Ltd.
4 * Copyright 2006-2010 Solarflare Communications Inc.
12 #include <linux/delay.h>
23 #include "spi.h"
34 * 8 KB, 16-bit address, 32 B write block */
39 * 128 KB, 24-bit address, 32 KB erase block, 256 B write block */
48 * I2C bus - this is a bit-bashing interface using GPIO pins
98 /* Wait up to 50 ms for slave to let us pull SCL high */
105 struct efx_nic *efx = channel->efx; in falcon_push_irq_moderation()
110 if (channel->irq_moderation) { in falcon_push_irq_moderation()
115 channel->irq_moderation - 1); in falcon_push_irq_moderation()
124 channel->channel); in falcon_push_irq_moderation()
133 /* Wait for the tx and rx fifo's to get to the next packet boundary in falcon_prepare_flush()
134 * (~1ms without back-pressure), then to drain the remainder of the in falcon_prepare_flush()
162 efx_oword_t *int_ker = efx->irq_status.addr; in falcon_legacy_interrupt_a1()
170 netif_vdbg(efx, intr, efx->net_dev, in falcon_legacy_interrupt_a1()
175 efx->last_irq_cpu = raw_smp_processor_id(); in falcon_legacy_interrupt_a1()
176 netif_vdbg(efx, intr, efx->net_dev, in falcon_legacy_interrupt_a1()
187 if (queues & (1U << efx->fatal_irq_level)) { in falcon_legacy_interrupt_a1()
216 return EFX_OWORD_FIELD(reg, FRF_AB_EE_SPI_HCMD_CMD_EN) ? -EBUSY : 0; in falcon_spi_poll()
219 /* Wait for SPI command completion */
239 netif_err(efx, hw, efx->net_dev, in falcon_spi_wait()
240 "timed out waiting for SPI\n"); in falcon_spi_wait()
241 return -ETIMEDOUT; in falcon_spi_wait()
247 int falcon_spi_cmd(struct efx_nic *efx, const struct efx_spi_device *spi, in falcon_spi_cmd() argument
258 return -EINVAL; in falcon_spi_cmd()
280 FRF_AB_EE_SPI_HCMD_SF_SEL, spi->device_id, in falcon_spi_cmd()
285 (addressed ? spi->addr_len : 0), in falcon_spi_cmd()
304 falcon_spi_write_limit(const struct efx_spi_device *spi, size_t start) in falcon_spi_write_limit() argument
307 (spi->block_size - (start & (spi->block_size - 1)))); in falcon_spi_write_limit()
311 efx_spi_munge_command(const struct efx_spi_device *spi, in efx_spi_munge_command() argument
314 return command | (((address >> 8) & spi->munge_address) << 3); in efx_spi_munge_command()
319 falcon_spi_wait_write(struct efx_nic *efx, const struct efx_spi_device *spi) in falcon_spi_wait_write() argument
326 rc = falcon_spi_cmd(efx, spi, SPI_RDSR, -1, NULL, in falcon_spi_wait_write()
333 netif_err(efx, hw, efx->net_dev, in falcon_spi_wait_write()
334 "SPI write timeout on device %d" in falcon_spi_wait_write()
336 spi->device_id, status); in falcon_spi_wait_write()
337 return -ETIMEDOUT; in falcon_spi_wait_write()
343 int falcon_spi_read(struct efx_nic *efx, const struct efx_spi_device *spi, in falcon_spi_read() argument
351 block_len = min(len - pos, FALCON_SPI_MAX_LEN); in falcon_spi_read()
353 command = efx_spi_munge_command(spi, SPI_READ, start + pos); in falcon_spi_read()
354 rc = falcon_spi_cmd(efx, spi, command, start + pos, NULL, in falcon_spi_read()
363 rc = -EINTR; in falcon_spi_read()
374 falcon_spi_write(struct efx_nic *efx, const struct efx_spi_device *spi, in falcon_spi_write() argument
383 rc = falcon_spi_cmd(efx, spi, SPI_WREN, -1, NULL, NULL, 0); in falcon_spi_write()
387 block_len = min(len - pos, in falcon_spi_write()
388 falcon_spi_write_limit(spi, start + pos)); in falcon_spi_write()
389 command = efx_spi_munge_command(spi, SPI_WRITE, start + pos); in falcon_spi_write()
390 rc = falcon_spi_cmd(efx, spi, command, start + pos, in falcon_spi_write()
395 rc = falcon_spi_wait_write(efx, spi); in falcon_spi_write()
399 command = efx_spi_munge_command(spi, SPI_READ, start + pos); in falcon_spi_write()
400 rc = falcon_spi_cmd(efx, spi, command, start + pos, in falcon_spi_write()
403 rc = -EIO; in falcon_spi_write()
412 rc = -EINTR; in falcon_spi_write()
431 union efx_multicast_hash *mc_hash = &efx->multicast_hash; in falcon_push_multicast_hash()
433 WARN_ON(!mutex_is_locked(&efx->mac_lock)); in falcon_push_multicast_hash()
435 efx_writeo(efx, &mc_hash->oword[0], FR_AB_MAC_MC_HASH_REG0); in falcon_push_multicast_hash()
436 efx_writeo(efx, &mc_hash->oword[1], FR_AB_MAC_MC_HASH_REG1); in falcon_push_multicast_hash()
441 struct falcon_nic_data *nic_data = efx->nic_data; in falcon_reset_macs()
460 netif_err(efx, hw, efx->net_dev, in falcon_reset_macs()
465 WARN_ON(nic_data->stats_disable_count == 0); in falcon_reset_macs()
483 netif_dbg(efx, hw, efx->net_dev, in falcon_reset_macs()
489 netif_err(efx, hw, efx->net_dev, "MAC reset failed\n"); in falcon_reset_macs()
497 * are re-enabled by the caller */ in falcon_reset_macs()
508 (efx->loopback_mode != LOOPBACK_NONE)) in falcon_drain_tx_fifo()
526 /* Isolate the MAC -> RX */ in falcon_deconfigure_mac_wrapper()
531 /* Isolate TX -> MAC */ in falcon_deconfigure_mac_wrapper()
537 struct efx_link_state *link_state = &efx->link_state; in falcon_reconfigure_mac_wrapper()
541 isolate = !!ACCESS_ONCE(efx->reset_pending); in falcon_reconfigure_mac_wrapper()
543 switch (link_state->speed) { in falcon_reconfigure_mac_wrapper()
556 FRF_AB_MAC_UC_PROM, efx->promiscuous, in falcon_reconfigure_mac_wrapper()
563 !link_state->up || isolate); in falcon_reconfigure_mac_wrapper()
572 /* Enable XOFF signal from RX FIFO (we enabled it during NIC in falcon_reconfigure_mac_wrapper()
575 /* Unisolate the MAC -> RX */ in falcon_reconfigure_mac_wrapper()
583 struct falcon_nic_data *nic_data = efx->nic_data; in falcon_stats_request()
586 WARN_ON(nic_data->stats_pending); in falcon_stats_request()
587 WARN_ON(nic_data->stats_disable_count); in falcon_stats_request()
589 if (nic_data->stats_dma_done == NULL) in falcon_stats_request()
592 *nic_data->stats_dma_done = FALCON_STATS_NOT_DONE; in falcon_stats_request()
593 nic_data->stats_pending = true; in falcon_stats_request()
600 efx->stats_buffer.dma_addr); in falcon_stats_request()
603 mod_timer(&nic_data->stats_timer, round_jiffies_up(jiffies + HZ / 2)); in falcon_stats_request()
608 struct falcon_nic_data *nic_data = efx->nic_data; in falcon_stats_complete()
610 if (!nic_data->stats_pending) in falcon_stats_complete()
613 nic_data->stats_pending = false; in falcon_stats_complete()
614 if (*nic_data->stats_dma_done == FALCON_STATS_DONE) { in falcon_stats_complete()
616 efx->mac_op->update_stats(efx); in falcon_stats_complete()
618 netif_err(efx, hw, efx->net_dev, in falcon_stats_complete()
626 struct falcon_nic_data *nic_data = efx->nic_data; in falcon_stats_timer_func()
628 spin_lock(&efx->stats_lock); in falcon_stats_timer_func()
631 if (nic_data->stats_disable_count == 0) in falcon_stats_timer_func()
634 spin_unlock(&efx->stats_lock); in falcon_stats_timer_func()
639 struct efx_link_state old_state = efx->link_state; in falcon_loopback_link_poll()
641 WARN_ON(!mutex_is_locked(&efx->mac_lock)); in falcon_loopback_link_poll()
644 efx->link_state.fd = true; in falcon_loopback_link_poll()
645 efx->link_state.fc = efx->wanted_fc; in falcon_loopback_link_poll()
646 efx->link_state.up = true; in falcon_loopback_link_poll()
647 efx->link_state.speed = 10000; in falcon_loopback_link_poll()
649 return !efx_link_state_equal(&efx->link_state, &old_state); in falcon_loopback_link_poll()
665 efx->phy_op->poll(efx); in falcon_reconfigure_port()
672 efx->phy_op->reconfigure(efx); in falcon_reconfigure_port()
673 rc = efx->mac_op->reconfigure(efx); in falcon_reconfigure_port()
678 /* Synchronise efx->link_state with the kernel */ in falcon_reconfigure_port()
697 /* wait up to 50ms - taken max from datasheet */ in falcon_gmii_wait()
703 netif_err(efx, hw, efx->net_dev, in falcon_gmii_wait()
707 return -EIO; in falcon_gmii_wait()
713 netif_err(efx, hw, efx->net_dev, "timed out waiting for GMII\n"); in falcon_gmii_wait()
714 return -ETIMEDOUT; in falcon_gmii_wait()
722 struct falcon_nic_data *nic_data = efx->nic_data; in falcon_mdio_write()
726 netif_vdbg(efx, hw, efx->net_dev, in falcon_mdio_write()
730 mutex_lock(&nic_data->mdio_lock); in falcon_mdio_write()
766 mutex_unlock(&nic_data->mdio_lock); in falcon_mdio_write()
775 struct falcon_nic_data *nic_data = efx->nic_data; in falcon_mdio_read()
779 mutex_lock(&nic_data->mdio_lock); in falcon_mdio_read()
802 netif_vdbg(efx, hw, efx->net_dev, in falcon_mdio_read()
812 netif_dbg(efx, hw, efx->net_dev, in falcon_mdio_read()
818 mutex_unlock(&nic_data->mdio_lock); in falcon_mdio_read()
825 struct falcon_nic_data *nic_data = efx->nic_data; in falcon_probe_port()
828 switch (efx->phy_type) { in falcon_probe_port()
830 efx->phy_op = &falcon_sfx7101_phy_ops; in falcon_probe_port()
834 efx->phy_op = &falcon_qt202x_phy_ops; in falcon_probe_port()
837 efx->phy_op = &falcon_txc_phy_ops; in falcon_probe_port()
840 netif_err(efx, probe, efx->net_dev, "Unknown PHY type %d\n", in falcon_probe_port()
841 efx->phy_type); in falcon_probe_port()
842 return -ENODEV; in falcon_probe_port()
846 mutex_init(&nic_data->mdio_lock); in falcon_probe_port()
847 efx->mdio.mdio_read = falcon_mdio_read; in falcon_probe_port()
848 efx->mdio.mdio_write = falcon_mdio_write; in falcon_probe_port()
849 rc = efx->phy_op->probe(efx); in falcon_probe_port()
854 efx->link_state.speed = 10000; in falcon_probe_port()
855 efx->link_state.fd = true; in falcon_probe_port()
857 /* Hardware flow ctrl. FalconA RX FIFO too small for pause generation */ in falcon_probe_port()
859 efx->wanted_fc = EFX_FC_RX | EFX_FC_TX; in falcon_probe_port()
861 efx->wanted_fc = EFX_FC_RX; in falcon_probe_port()
862 if (efx->mdio.mmds & MDIO_DEVS_AN) in falcon_probe_port()
863 efx->wanted_fc |= EFX_FC_AUTO; in falcon_probe_port()
866 rc = efx_nic_alloc_buffer(efx, &efx->stats_buffer, in falcon_probe_port()
870 netif_dbg(efx, probe, efx->net_dev, in falcon_probe_port()
872 (u64)efx->stats_buffer.dma_addr, in falcon_probe_port()
873 efx->stats_buffer.addr, in falcon_probe_port()
874 (u64)virt_to_phys(efx->stats_buffer.addr)); in falcon_probe_port()
875 nic_data->stats_dma_done = efx->stats_buffer.addr + XgDmaDone_offset; in falcon_probe_port()
882 efx->phy_op->remove(efx); in falcon_remove_port()
883 efx_nic_free_buffer(efx, &efx->stats_buffer); in falcon_remove_port()
890 struct efx_nic *efx = channel->efx; in falcon_handle_global_event()
891 struct falcon_nic_data *nic_data = efx->nic_data; in falcon_handle_global_event()
901 nic_data->xmac_poll_required = true; in falcon_handle_global_event()
908 netif_err(efx, rx_err, efx->net_dev, in falcon_handle_global_event()
910 channel->channel); in falcon_handle_global_event()
912 atomic_inc(&efx->rx_reset); in falcon_handle_global_event()
930 struct falcon_nic_data *nic_data = efx->nic_data; in falcon_read_nvram()
932 struct efx_spi_device *spi; in falcon_read_nvram() local
938 if (efx_spi_present(&nic_data->spi_flash)) in falcon_read_nvram()
939 spi = &nic_data->spi_flash; in falcon_read_nvram()
940 else if (efx_spi_present(&nic_data->spi_eeprom)) in falcon_read_nvram()
941 spi = &nic_data->spi_eeprom; in falcon_read_nvram()
943 return -EINVAL; in falcon_read_nvram()
947 return -ENOMEM; in falcon_read_nvram()
950 mutex_lock(&nic_data->spi_lock); in falcon_read_nvram()
951 rc = falcon_spi_read(efx, spi, 0, FALCON_NVCONFIG_END, NULL, region); in falcon_read_nvram()
952 mutex_unlock(&nic_data->spi_lock); in falcon_read_nvram()
954 netif_err(efx, hw, efx->net_dev, "Failed to read %s\n", in falcon_read_nvram()
955 efx_spi_present(&nic_data->spi_flash) ? in falcon_read_nvram()
957 rc = -EIO; in falcon_read_nvram()
961 magic_num = le16_to_cpu(nvconfig->board_magic_num); in falcon_read_nvram()
962 struct_ver = le16_to_cpu(nvconfig->board_struct_ver); in falcon_read_nvram()
964 rc = -EINVAL; in falcon_read_nvram()
966 netif_err(efx, hw, efx->net_dev, in falcon_read_nvram()
971 netif_err(efx, hw, efx->net_dev, in falcon_read_nvram()
975 word = &nvconfig->board_magic_num; in falcon_read_nvram()
985 netif_err(efx, hw, efx->net_dev, in falcon_read_nvram()
1096 return -EINVAL; in falcon_map_reset_flags()
1103 struct falcon_nic_data *nic_data = efx->nic_data; in __falcon_reset_hw()
1107 netif_dbg(efx, hw, efx->net_dev, "performing %s hardware reset\n", in __falcon_reset_hw()
1112 rc = pci_save_state(efx->pci_dev); in __falcon_reset_hw()
1114 netif_err(efx, drv, efx->net_dev, in __falcon_reset_hw()
1120 rc = pci_save_state(nic_data->pci_dev2); in __falcon_reset_hw()
1122 netif_err(efx, drv, efx->net_dev, in __falcon_reset_hw()
1150 netif_dbg(efx, hw, efx->net_dev, "waiting for hardware reset\n"); in __falcon_reset_hw()
1156 pci_restore_state(nic_data->pci_dev2); in __falcon_reset_hw()
1157 pci_restore_state(efx->pci_dev); in __falcon_reset_hw()
1158 netif_dbg(efx, drv, efx->net_dev, in __falcon_reset_hw()
1165 rc = -ETIMEDOUT; in __falcon_reset_hw()
1166 netif_err(efx, hw, efx->net_dev, in __falcon_reset_hw()
1170 netif_dbg(efx, hw, efx->net_dev, "hardware reset complete\n"); in __falcon_reset_hw()
1176 pci_restore_state(efx->pci_dev); in __falcon_reset_hw()
1184 struct falcon_nic_data *nic_data = efx->nic_data; in falcon_reset_hw()
1187 mutex_lock(&nic_data->spi_lock); in falcon_reset_hw()
1189 mutex_unlock(&nic_data->spi_lock); in falcon_reset_hw()
1199 BUG_ON(!mutex_is_locked(&efx->mac_lock)); in falcon_monitor()
1201 rc = falcon_board(efx)->type->monitor(efx); in falcon_monitor()
1203 netif_err(efx, hw, efx->net_dev, in falcon_monitor()
1205 (rc == -ERANGE) ? "reported fault" : "failed"); in falcon_monitor()
1206 efx->phy_mode |= PHY_MODE_LOW_POWER; in falcon_monitor()
1214 link_changed = efx->phy_op->poll(efx); in falcon_monitor()
1221 rc = efx->mac_op->reconfigure(efx); in falcon_monitor()
1255 netif_dbg(efx, hw, efx->net_dev, in falcon_reset_sram()
1264 netif_dbg(efx, hw, efx->net_dev, in falcon_reset_sram()
1271 netif_err(efx, hw, efx->net_dev, "timed out waiting for SRAM reset\n"); in falcon_reset_sram()
1272 return -ETIMEDOUT; in falcon_reset_sram()
1280 spi_device->device_id = device_id; in falcon_spi_device_init()
1281 spi_device->size = in falcon_spi_device_init()
1283 spi_device->addr_len = in falcon_spi_device_init()
1285 spi_device->munge_address = (spi_device->size == 1 << 9 && in falcon_spi_device_init()
1286 spi_device->addr_len == 1); in falcon_spi_device_init()
1287 spi_device->erase_command = in falcon_spi_device_init()
1289 spi_device->erase_size = in falcon_spi_device_init()
1292 spi_device->block_size = in falcon_spi_device_init()
1296 spi_device->size = 0; in falcon_spi_device_init()
1300 /* Extract non-volatile configuration */
1303 struct falcon_nic_data *nic_data = efx->nic_data; in falcon_probe_nvconfig()
1309 return -ENOMEM; in falcon_probe_nvconfig()
1315 efx->phy_type = nvconfig->board_v2.port0_phy_type; in falcon_probe_nvconfig()
1316 efx->mdio.prtad = nvconfig->board_v2.port0_phy_addr; in falcon_probe_nvconfig()
1318 if (le16_to_cpu(nvconfig->board_struct_ver) >= 3) { in falcon_probe_nvconfig()
1320 efx, &nic_data->spi_flash, FFE_AB_SPI_DEVICE_FLASH, in falcon_probe_nvconfig()
1321 le32_to_cpu(nvconfig->board_v3 in falcon_probe_nvconfig()
1324 efx, &nic_data->spi_eeprom, FFE_AB_SPI_DEVICE_EEPROM, in falcon_probe_nvconfig()
1325 le32_to_cpu(nvconfig->board_v3 in falcon_probe_nvconfig()
1330 memcpy(efx->net_dev->perm_addr, nvconfig->mac_address[0], ETH_ALEN); in falcon_probe_nvconfig()
1332 netif_dbg(efx, probe, efx->net_dev, "PHY is %d phy_id %d\n", in falcon_probe_nvconfig()
1333 efx->phy_type, efx->mdio.prtad); in falcon_probe_nvconfig()
1336 le16_to_cpu(nvconfig->board_v2.board_revision)); in falcon_probe_nvconfig()
1342 /* Probe all SPI devices on the NIC */
1345 struct falcon_nic_data *nic_data = efx->nic_data; in falcon_probe_spi_devices()
1356 netif_dbg(efx, probe, efx->net_dev, "Booted from %s\n", in falcon_probe_spi_devices()
1362 boot_dev = -1; in falcon_probe_spi_devices()
1363 netif_dbg(efx, probe, efx->net_dev, in falcon_probe_spi_devices()
1365 " setting SPI config\n"); in falcon_probe_spi_devices()
1374 mutex_init(&nic_data->spi_lock); in falcon_probe_spi_devices()
1377 falcon_spi_device_init(efx, &nic_data->spi_flash, in falcon_probe_spi_devices()
1381 falcon_spi_device_init(efx, &nic_data->spi_eeprom, in falcon_probe_spi_devices()
1395 return -ENOMEM; in falcon_probe_nic()
1396 efx->nic_data = nic_data; in falcon_probe_nic()
1398 rc = -ENODEV; in falcon_probe_nic()
1401 netif_err(efx, probe, efx->net_dev, in falcon_probe_nic()
1409 u8 pci_rev = efx->pci_dev->revision; in falcon_probe_nic()
1412 netif_err(efx, probe, efx->net_dev, in falcon_probe_nic()
1418 netif_err(efx, probe, efx->net_dev, in falcon_probe_nic()
1423 netif_err(efx, probe, efx->net_dev, in falcon_probe_nic()
1424 "Falcon rev A1 PCI-X not supported\n"); in falcon_probe_nic()
1428 dev = pci_dev_get(efx->pci_dev); in falcon_probe_nic()
1432 if (dev->bus == efx->pci_dev->bus && in falcon_probe_nic()
1433 dev->devfn == efx->pci_dev->devfn + 1) { in falcon_probe_nic()
1434 nic_data->pci_dev2 = dev; in falcon_probe_nic()
1438 if (!nic_data->pci_dev2) { in falcon_probe_nic()
1439 netif_err(efx, probe, efx->net_dev, in falcon_probe_nic()
1441 rc = -ENODEV; in falcon_probe_nic()
1449 netif_err(efx, probe, efx->net_dev, "failed to reset NIC\n"); in falcon_probe_nic()
1454 rc = efx_nic_alloc_buffer(efx, &efx->irq_status, sizeof(efx_oword_t)); in falcon_probe_nic()
1457 BUG_ON(efx->irq_status.dma_addr & 0x0f); in falcon_probe_nic()
1459 netif_dbg(efx, probe, efx->net_dev, in falcon_probe_nic()
1461 (u64)efx->irq_status.dma_addr, in falcon_probe_nic()
1462 efx->irq_status.addr, in falcon_probe_nic()
1463 (u64)virt_to_phys(efx->irq_status.addr)); in falcon_probe_nic()
1467 /* Read in the non-volatile configuration */ in falcon_probe_nic()
1470 if (rc == -EINVAL) in falcon_probe_nic()
1471 netif_err(efx, probe, efx->net_dev, "NVRAM is invalid\n"); in falcon_probe_nic()
1477 board->i2c_adap.owner = THIS_MODULE; in falcon_probe_nic()
1478 board->i2c_data = falcon_i2c_bit_operations; in falcon_probe_nic()
1479 board->i2c_data.data = efx; in falcon_probe_nic()
1480 board->i2c_adap.algo_data = &board->i2c_data; in falcon_probe_nic()
1481 board->i2c_adap.dev.parent = &efx->pci_dev->dev; in falcon_probe_nic()
1482 strlcpy(board->i2c_adap.name, "SFC4000 GPIO", in falcon_probe_nic()
1483 sizeof(board->i2c_adap.name)); in falcon_probe_nic()
1484 rc = i2c_bit_add_bus(&board->i2c_adap); in falcon_probe_nic()
1488 rc = falcon_board(efx)->type->init(efx); in falcon_probe_nic()
1490 netif_err(efx, probe, efx->net_dev, in falcon_probe_nic()
1495 nic_data->stats_disable_count = 1; in falcon_probe_nic()
1496 setup_timer(&nic_data->stats_timer, &falcon_stats_timer_func, in falcon_probe_nic()
1502 BUG_ON(i2c_del_adapter(&board->i2c_adap)); in falcon_probe_nic()
1503 memset(&board->i2c_adap, 0, sizeof(board->i2c_adap)); in falcon_probe_nic()
1505 efx_nic_free_buffer(efx, &efx->irq_status); in falcon_probe_nic()
1508 if (nic_data->pci_dev2) { in falcon_probe_nic()
1509 pci_dev_put(nic_data->pci_dev2); in falcon_probe_nic()
1510 nic_data->pci_dev2 = NULL; in falcon_probe_nic()
1514 kfree(efx->nic_data); in falcon_probe_nic()
1520 /* Prior to Siena the RX DMA engine will split each frame at in falcon_init_rx_cfg()
1521 * intervals of RX_USR_BUF_SIZE (32-byte units). We set it to in falcon_init_rx_cfg()
1524 /* RX control FIFO thresholds (32 entries) */ in falcon_init_rx_cfg()
1558 /* Always enable XOFF signal from RX FIFO. We enable in falcon_init_rx_cfg()
1564 /* This call performs hardware-specific global initialisation, such as
1573 /* Use on-chip SRAM */ in falcon_init_nic()
1601 /* Setup RX. Wait for descriptor is broken and must in falcon_init_nic()
1622 memcpy(&temp, efx->rx_hash_key, sizeof(temp)); in falcon_init_nic()
1625 /* Set destination of both TX and RX Flush events */ in falcon_init_nic()
1637 struct falcon_nic_data *nic_data = efx->nic_data; in falcon_remove_nic()
1641 board->type->fini(efx); in falcon_remove_nic()
1644 rc = i2c_del_adapter(&board->i2c_adap); in falcon_remove_nic()
1646 memset(&board->i2c_adap, 0, sizeof(board->i2c_adap)); in falcon_remove_nic()
1648 efx_nic_free_buffer(efx, &efx->irq_status); in falcon_remove_nic()
1653 if (nic_data->pci_dev2) { in falcon_remove_nic()
1654 pci_dev_put(nic_data->pci_dev2); in falcon_remove_nic()
1655 nic_data->pci_dev2 = NULL; in falcon_remove_nic()
1659 kfree(efx->nic_data); in falcon_remove_nic()
1660 efx->nic_data = NULL; in falcon_remove_nic()
1665 struct falcon_nic_data *nic_data = efx->nic_data; in falcon_update_nic_stats()
1668 if (nic_data->stats_disable_count) in falcon_update_nic_stats()
1672 efx->n_rx_nodesc_drop_cnt += in falcon_update_nic_stats()
1675 if (nic_data->stats_pending && in falcon_update_nic_stats()
1676 *nic_data->stats_dma_done == FALCON_STATS_DONE) { in falcon_update_nic_stats()
1677 nic_data->stats_pending = false; in falcon_update_nic_stats()
1679 efx->mac_op->update_stats(efx); in falcon_update_nic_stats()
1685 struct falcon_nic_data *nic_data = efx->nic_data; in falcon_start_nic_stats()
1687 spin_lock_bh(&efx->stats_lock); in falcon_start_nic_stats()
1688 if (--nic_data->stats_disable_count == 0) in falcon_start_nic_stats()
1690 spin_unlock_bh(&efx->stats_lock); in falcon_start_nic_stats()
1695 struct falcon_nic_data *nic_data = efx->nic_data; in falcon_stop_nic_stats()
1700 spin_lock_bh(&efx->stats_lock); in falcon_stop_nic_stats()
1701 ++nic_data->stats_disable_count; in falcon_stop_nic_stats()
1702 spin_unlock_bh(&efx->stats_lock); in falcon_stop_nic_stats()
1704 del_timer_sync(&nic_data->stats_timer); in falcon_stop_nic_stats()
1708 for (i = 0; i < 4 && nic_data->stats_pending; i++) { in falcon_stop_nic_stats()
1709 if (*nic_data->stats_dma_done == FALCON_STATS_DONE) in falcon_stop_nic_stats()
1714 spin_lock_bh(&efx->stats_lock); in falcon_stop_nic_stats()
1716 spin_unlock_bh(&efx->stats_lock); in falcon_stop_nic_stats()
1721 falcon_board(efx)->type->set_id_led(efx, mode); in falcon_set_id_led()
1733 wol->supported = 0; in falcon_get_wol()
1734 wol->wolopts = 0; in falcon_get_wol()
1735 memset(&wol->sopass, 0, sizeof(wol->sopass)); in falcon_get_wol()
1741 return -EINVAL; in falcon_set_wol()
1747 * Revision-dependent attributes used by efx.c and nic.c
1823 * table. Don't map MSI-X table, MSI-X PBA since Linux