Lines Matching refs:efx

67 #define INT_MODE(efx) \  argument
68 STRING_TABLE_LOOKUP(efx->interrupt_mode, efx_interrupt_mode)
99 static int efx_test_phy_alive(struct efx_nic *efx, struct efx_self_tests *tests) in efx_test_phy_alive() argument
103 rc = efx_mcdi_phy_test_alive(efx); in efx_test_phy_alive()
109 static int efx_test_nvram(struct efx_nic *efx, struct efx_self_tests *tests) in efx_test_nvram() argument
113 if (efx->type->test_nvram) { in efx_test_nvram()
114 rc = efx->type->test_nvram(efx); in efx_test_nvram()
131 static int efx_test_interrupts(struct efx_nic *efx, in efx_test_interrupts() argument
138 netif_dbg(efx, drv, efx->net_dev, "testing interrupts\n"); in efx_test_interrupts()
141 rc = efx_nic_irq_test_start(efx); in efx_test_interrupts()
143 netif_dbg(efx, drv, efx->net_dev, in efx_test_interrupts()
153 netif_dbg(efx, drv, efx->net_dev, "waiting for test interrupt\n"); in efx_test_interrupts()
156 cpu = efx_nic_irq_test_irq_cpu(efx); in efx_test_interrupts()
162 netif_err(efx, drv, efx->net_dev, "timed out waiting for interrupt\n"); in efx_test_interrupts()
166 netif_dbg(efx, drv, efx->net_dev, "%s test interrupt seen on CPU%d\n", in efx_test_interrupts()
167 INT_MODE(efx), cpu); in efx_test_interrupts()
173 static int efx_test_eventq_irq(struct efx_nic *efx, in efx_test_eventq_irq() argument
183 efx_for_each_channel(channel, efx) { in efx_test_eventq_irq()
199 efx_for_each_channel(channel, efx) { in efx_test_eventq_irq()
218 efx_for_each_channel(channel, efx) { in efx_test_eventq_irq()
226 netif_dbg(efx, drv, efx->net_dev, in efx_test_eventq_irq()
235 netif_err(efx, drv, efx->net_dev, in efx_test_eventq_irq()
239 netif_err(efx, drv, efx->net_dev, in efx_test_eventq_irq()
244 netif_err(efx, drv, efx->net_dev, in efx_test_eventq_irq()
254 static int efx_test_phy(struct efx_nic *efx, struct efx_self_tests *tests, in efx_test_phy() argument
259 mutex_lock(&efx->mac_lock); in efx_test_phy()
260 rc = efx_mcdi_phy_run_tests(efx, tests->phy_ext, flags); in efx_test_phy()
261 mutex_unlock(&efx->mac_lock); in efx_test_phy()
265 netif_info(efx, drv, efx->net_dev, in efx_test_phy()
281 void efx_loopback_rx_packet(struct efx_nic *efx, in efx_loopback_rx_packet() argument
284 struct efx_loopback_state *state = efx->loopback_selftest; in efx_loopback_rx_packet()
303 netif_err(efx, drv, efx->net_dev, in efx_loopback_rx_packet()
305 "test\n", pkt_len, LOOPBACK_MODE(efx)); in efx_loopback_rx_packet()
311 netif_err(efx, drv, efx->net_dev, in efx_loopback_rx_packet()
313 LOOPBACK_MODE(efx)); in efx_loopback_rx_packet()
319 netif_err(efx, drv, efx->net_dev, in efx_loopback_rx_packet()
322 LOOPBACK_MODE(efx)); in efx_loopback_rx_packet()
328 netif_err(efx, drv, efx->net_dev, in efx_loopback_rx_packet()
330 LOOPBACK_MODE(efx)); in efx_loopback_rx_packet()
336 netif_err(efx, drv, efx->net_dev, in efx_loopback_rx_packet()
338 LOOPBACK_MODE(efx)); in efx_loopback_rx_packet()
344 netif_err(efx, drv, efx->net_dev, in efx_loopback_rx_packet()
347 ntohs(payload->iteration), LOOPBACK_MODE(efx)); in efx_loopback_rx_packet()
352 netif_vdbg(efx, drv, efx->net_dev, in efx_loopback_rx_packet()
353 "got loopback RX in %s loopback test\n", LOOPBACK_MODE(efx)); in efx_loopback_rx_packet()
361 netif_err(efx, drv, efx->net_dev, "received packet:\n"); in efx_loopback_rx_packet()
364 netif_err(efx, drv, efx->net_dev, "expected packet:\n"); in efx_loopback_rx_packet()
373 static void efx_iterate_state(struct efx_nic *efx) in efx_iterate_state() argument
375 struct efx_loopback_state *state = efx->loopback_selftest; in efx_iterate_state()
376 struct net_device *net_dev = efx->net_dev; in efx_iterate_state()
410 struct efx_nic *efx = tx_queue->efx; in efx_begin_loopback() local
411 struct efx_loopback_state *state = efx->loopback_selftest; in efx_begin_loopback()
437 netif_tx_lock_bh(efx->net_dev); in efx_begin_loopback()
439 netif_tx_unlock_bh(efx->net_dev); in efx_begin_loopback()
442 netif_err(efx, drv, efx->net_dev, in efx_begin_loopback()
446 LOOPBACK_MODE(efx)); in efx_begin_loopback()
457 static int efx_poll_loopback(struct efx_nic *efx) in efx_poll_loopback() argument
459 struct efx_loopback_state *state = efx->loopback_selftest; in efx_poll_loopback()
467 struct efx_nic *efx = tx_queue->efx; in efx_end_loopback() local
468 struct efx_loopback_state *state = efx->loopback_selftest; in efx_end_loopback()
473 netif_tx_lock_bh(efx->net_dev); in efx_end_loopback()
484 netif_tx_unlock_bh(efx->net_dev); in efx_end_loopback()
493 netif_err(efx, drv, efx->net_dev, in efx_end_loopback()
497 LOOPBACK_MODE(efx)); in efx_end_loopback()
504 netif_dbg(efx, drv, efx->net_dev, in efx_end_loopback()
508 LOOPBACK_MODE(efx)); in efx_end_loopback()
526 struct efx_nic *efx = tx_queue->efx; in efx_test_loopback() local
527 struct efx_loopback_state *state = efx->loopback_selftest; in efx_test_loopback()
532 state->packet_count = efx->txq_entries / 3; in efx_test_loopback()
540 netif_dbg(efx, drv, efx->net_dev, in efx_test_loopback()
542 tx_queue->label, tx_queue->queue, LOOPBACK_MODE(efx), in efx_test_loopback()
545 efx_iterate_state(efx); in efx_test_loopback()
551 if (!efx_poll_loopback(efx)) { in efx_test_loopback()
553 efx_poll_loopback(efx); in efx_test_loopback()
567 netif_dbg(efx, drv, efx->net_dev, in efx_test_loopback()
569 "of %d packets\n", tx_queue->label, LOOPBACK_MODE(efx), in efx_test_loopback()
579 static int efx_wait_for_link(struct efx_nic *efx) in efx_wait_for_link() argument
581 struct efx_link_state *link_state = &efx->link_state; in efx_wait_for_link()
588 if (efx->type->monitor != NULL) { in efx_wait_for_link()
589 mutex_lock(&efx->mac_lock); in efx_wait_for_link()
590 efx->type->monitor(efx); in efx_wait_for_link()
591 mutex_unlock(&efx->mac_lock); in efx_wait_for_link()
594 mutex_lock(&efx->mac_lock); in efx_wait_for_link()
597 link_up = !efx->type->check_mac_fault(efx); in efx_wait_for_link()
598 mutex_unlock(&efx->mac_lock); in efx_wait_for_link()
611 static int efx_test_loopbacks(struct efx_nic *efx, struct efx_self_tests *tests, in efx_test_loopbacks() argument
617 efx_get_channel(efx, efx->tx_channel_offset); in efx_test_loopbacks()
627 BUG_ON(efx->loopback_selftest); in efx_test_loopbacks()
629 efx->loopback_selftest = state; in efx_test_loopbacks()
638 mutex_lock(&efx->mac_lock); in efx_test_loopbacks()
639 efx->loopback_mode = mode; in efx_test_loopbacks()
640 rc = __efx_reconfigure_port(efx); in efx_test_loopbacks()
641 mutex_unlock(&efx->mac_lock); in efx_test_loopbacks()
643 netif_err(efx, drv, efx->net_dev, in efx_test_loopbacks()
645 LOOPBACK_MODE(efx)); in efx_test_loopbacks()
649 rc = efx_wait_for_link(efx); in efx_test_loopbacks()
651 netif_err(efx, drv, efx->net_dev, in efx_test_loopbacks()
653 LOOPBACK_MODE(efx)); in efx_test_loopbacks()
671 efx->loopback_selftest = NULL; in efx_test_loopbacks()
687 int efx_selftest(struct efx_nic *efx, struct efx_self_tests *tests, in efx_selftest() argument
690 enum efx_loopback_mode loopback_mode = efx->loopback_mode; in efx_selftest()
691 int phy_mode = efx->phy_mode; in efx_selftest()
694 efx_selftest_async_cancel(efx); in efx_selftest()
699 rc = efx_test_phy_alive(efx, tests); in efx_selftest()
703 rc = efx_test_nvram(efx, tests); in efx_selftest()
707 rc = efx_test_interrupts(efx, tests); in efx_selftest()
711 rc = efx_test_eventq_irq(efx, tests); in efx_selftest()
719 return efx_test_phy(efx, tests, flags); in efx_selftest()
727 efx_device_detach_sync(efx); in efx_selftest()
729 if (efx->type->test_chip) { in efx_selftest()
730 rc_reset = efx->type->test_chip(efx, tests); in efx_selftest()
732 netif_err(efx, hw, efx->net_dev, in efx_selftest()
734 efx_schedule_reset(efx, RESET_TYPE_DISABLE); in efx_selftest()
744 mutex_lock(&efx->mac_lock); in efx_selftest()
745 efx->phy_mode &= ~PHY_MODE_LOW_POWER; in efx_selftest()
746 efx->loopback_mode = LOOPBACK_NONE; in efx_selftest()
747 __efx_reconfigure_port(efx); in efx_selftest()
748 mutex_unlock(&efx->mac_lock); in efx_selftest()
750 rc = efx_test_phy(efx, tests, flags); in efx_selftest()
754 rc = efx_test_loopbacks(efx, tests, efx->loopback_modes); in efx_selftest()
759 mutex_lock(&efx->mac_lock); in efx_selftest()
760 efx->phy_mode = phy_mode; in efx_selftest()
761 efx->loopback_mode = loopback_mode; in efx_selftest()
762 __efx_reconfigure_port(efx); in efx_selftest()
763 mutex_unlock(&efx->mac_lock); in efx_selftest()
765 efx_device_attach_if_not_resetting(efx); in efx_selftest()
770 void efx_selftest_async_start(struct efx_nic *efx) in efx_selftest_async_start() argument
774 efx_for_each_channel(channel, efx) in efx_selftest_async_start()
776 schedule_delayed_work(&efx->selftest_work, IRQ_TIMEOUT); in efx_selftest_async_start()
779 void efx_selftest_async_cancel(struct efx_nic *efx) in efx_selftest_async_cancel() argument
781 cancel_delayed_work_sync(&efx->selftest_work); in efx_selftest_async_cancel()
786 struct efx_nic *efx = container_of(data, struct efx_nic, in efx_selftest_async_work() local
791 efx_for_each_channel(channel, efx) { in efx_selftest_async_work()
794 netif_err(efx, ifup, efx->net_dev, in efx_selftest_async_work()
798 netif_dbg(efx, ifup, efx->net_dev, in efx_selftest_async_work()
804 void efx_selftest_async_init(struct efx_nic *efx) in efx_selftest_async_init() argument
806 INIT_DELAYED_WORK(&efx->selftest_work, efx_selftest_async_work); in efx_selftest_async_init()