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 if (efx->phy_op->test_alive) { in efx_test_phy_alive()
104 rc = efx->phy_op->test_alive(efx); in efx_test_phy_alive()
111 static int efx_test_nvram(struct efx_nic *efx, struct efx_self_tests *tests) in efx_test_nvram() argument
115 if (efx->type->test_nvram) { in efx_test_nvram()
116 rc = efx->type->test_nvram(efx); in efx_test_nvram()
130 static int efx_test_interrupts(struct efx_nic *efx, in efx_test_interrupts() argument
136 netif_dbg(efx, drv, efx->net_dev, "testing interrupts\n"); in efx_test_interrupts()
139 efx_nic_irq_test_start(efx); in efx_test_interrupts()
144 netif_dbg(efx, drv, efx->net_dev, "waiting for test interrupt\n"); in efx_test_interrupts()
147 cpu = efx_nic_irq_test_irq_cpu(efx); in efx_test_interrupts()
153 netif_err(efx, drv, efx->net_dev, "timed out waiting for interrupt\n"); in efx_test_interrupts()
157 netif_dbg(efx, drv, efx->net_dev, "%s test interrupt seen on CPU%d\n", in efx_test_interrupts()
158 INT_MODE(efx), cpu); in efx_test_interrupts()
164 static int efx_test_eventq_irq(struct efx_nic *efx, in efx_test_eventq_irq() argument
174 efx_for_each_channel(channel, efx) { in efx_test_eventq_irq()
190 efx_for_each_channel(channel, efx) { in efx_test_eventq_irq()
209 efx_for_each_channel(channel, efx) { in efx_test_eventq_irq()
217 netif_dbg(efx, drv, efx->net_dev, in efx_test_eventq_irq()
226 netif_err(efx, drv, efx->net_dev, in efx_test_eventq_irq()
230 netif_err(efx, drv, efx->net_dev, in efx_test_eventq_irq()
235 netif_err(efx, drv, efx->net_dev, in efx_test_eventq_irq()
245 static int efx_test_phy(struct efx_nic *efx, struct efx_self_tests *tests, in efx_test_phy() argument
250 if (!efx->phy_op->run_tests) in efx_test_phy()
253 mutex_lock(&efx->mac_lock); in efx_test_phy()
254 rc = efx->phy_op->run_tests(efx, tests->phy_ext, flags); in efx_test_phy()
255 mutex_unlock(&efx->mac_lock); in efx_test_phy()
269 void efx_loopback_rx_packet(struct efx_nic *efx, in efx_loopback_rx_packet() argument
272 struct efx_loopback_state *state = efx->loopback_selftest; in efx_loopback_rx_packet()
291 netif_err(efx, drv, efx->net_dev, in efx_loopback_rx_packet()
293 "test\n", pkt_len, LOOPBACK_MODE(efx)); in efx_loopback_rx_packet()
299 netif_err(efx, drv, efx->net_dev, in efx_loopback_rx_packet()
301 LOOPBACK_MODE(efx)); in efx_loopback_rx_packet()
307 netif_err(efx, drv, efx->net_dev, in efx_loopback_rx_packet()
310 LOOPBACK_MODE(efx)); in efx_loopback_rx_packet()
316 netif_err(efx, drv, efx->net_dev, in efx_loopback_rx_packet()
318 LOOPBACK_MODE(efx)); in efx_loopback_rx_packet()
324 netif_err(efx, drv, efx->net_dev, in efx_loopback_rx_packet()
326 LOOPBACK_MODE(efx)); in efx_loopback_rx_packet()
332 netif_err(efx, drv, efx->net_dev, in efx_loopback_rx_packet()
335 ntohs(payload->iteration), LOOPBACK_MODE(efx)); in efx_loopback_rx_packet()
340 netif_vdbg(efx, drv, efx->net_dev, in efx_loopback_rx_packet()
341 "got loopback RX in %s loopback test\n", LOOPBACK_MODE(efx)); in efx_loopback_rx_packet()
349 netif_err(efx, drv, efx->net_dev, "received packet:\n"); in efx_loopback_rx_packet()
352 netif_err(efx, drv, efx->net_dev, "expected packet:\n"); in efx_loopback_rx_packet()
361 static void efx_iterate_state(struct efx_nic *efx) in efx_iterate_state() argument
363 struct efx_loopback_state *state = efx->loopback_selftest; in efx_iterate_state()
364 struct net_device *net_dev = efx->net_dev; in efx_iterate_state()
398 struct efx_nic *efx = tx_queue->efx; in efx_begin_loopback() local
399 struct efx_loopback_state *state = efx->loopback_selftest; in efx_begin_loopback()
426 netif_tx_lock_bh(efx->net_dev); in efx_begin_loopback()
428 netif_tx_unlock_bh(efx->net_dev); in efx_begin_loopback()
431 netif_err(efx, drv, efx->net_dev, in efx_begin_loopback()
435 LOOPBACK_MODE(efx)); in efx_begin_loopback()
446 static int efx_poll_loopback(struct efx_nic *efx) in efx_poll_loopback() argument
448 struct efx_loopback_state *state = efx->loopback_selftest; in efx_poll_loopback()
456 struct efx_nic *efx = tx_queue->efx; in efx_end_loopback() local
457 struct efx_loopback_state *state = efx->loopback_selftest; in efx_end_loopback()
462 netif_tx_lock_bh(efx->net_dev); in efx_end_loopback()
473 netif_tx_unlock_bh(efx->net_dev); in efx_end_loopback()
482 netif_err(efx, drv, efx->net_dev, in efx_end_loopback()
486 LOOPBACK_MODE(efx)); in efx_end_loopback()
493 netif_dbg(efx, drv, efx->net_dev, in efx_end_loopback()
497 LOOPBACK_MODE(efx)); in efx_end_loopback()
515 struct efx_nic *efx = tx_queue->efx; in efx_test_loopback() local
516 struct efx_loopback_state *state = efx->loopback_selftest; in efx_test_loopback()
521 state->packet_count = efx->txq_entries / 3; in efx_test_loopback()
529 netif_dbg(efx, drv, efx->net_dev, in efx_test_loopback()
531 tx_queue->queue, LOOPBACK_MODE(efx), in efx_test_loopback()
534 efx_iterate_state(efx); in efx_test_loopback()
540 if (!efx_poll_loopback(efx)) { in efx_test_loopback()
542 efx_poll_loopback(efx); in efx_test_loopback()
556 netif_dbg(efx, drv, efx->net_dev, in efx_test_loopback()
558 "of %d packets\n", tx_queue->queue, LOOPBACK_MODE(efx), in efx_test_loopback()
568 static int efx_wait_for_link(struct efx_nic *efx) in efx_wait_for_link() argument
570 struct efx_link_state *link_state = &efx->link_state; in efx_wait_for_link()
577 if (efx->type->monitor != NULL) { in efx_wait_for_link()
578 mutex_lock(&efx->mac_lock); in efx_wait_for_link()
579 efx->type->monitor(efx); in efx_wait_for_link()
580 mutex_unlock(&efx->mac_lock); in efx_wait_for_link()
583 mutex_lock(&efx->mac_lock); in efx_wait_for_link()
586 link_up = !efx->type->check_mac_fault(efx); in efx_wait_for_link()
587 mutex_unlock(&efx->mac_lock); in efx_wait_for_link()
600 static int efx_test_loopbacks(struct efx_nic *efx, struct efx_self_tests *tests, in efx_test_loopbacks() argument
606 efx_get_channel(efx, efx->tx_channel_offset); in efx_test_loopbacks()
616 BUG_ON(efx->loopback_selftest); in efx_test_loopbacks()
618 efx->loopback_selftest = state; in efx_test_loopbacks()
627 mutex_lock(&efx->mac_lock); in efx_test_loopbacks()
628 efx->loopback_mode = mode; in efx_test_loopbacks()
629 rc = __efx_reconfigure_port(efx); in efx_test_loopbacks()
630 mutex_unlock(&efx->mac_lock); in efx_test_loopbacks()
632 netif_err(efx, drv, efx->net_dev, in efx_test_loopbacks()
634 LOOPBACK_MODE(efx)); in efx_test_loopbacks()
638 rc = efx_wait_for_link(efx); in efx_test_loopbacks()
640 netif_err(efx, drv, efx->net_dev, in efx_test_loopbacks()
642 LOOPBACK_MODE(efx)); in efx_test_loopbacks()
660 efx->loopback_selftest = NULL; in efx_test_loopbacks()
673 int efx_selftest(struct efx_nic *efx, struct efx_self_tests *tests, in efx_selftest() argument
676 enum efx_loopback_mode loopback_mode = efx->loopback_mode; in efx_selftest()
677 int phy_mode = efx->phy_mode; in efx_selftest()
680 efx_selftest_async_cancel(efx); in efx_selftest()
685 rc = efx_test_phy_alive(efx, tests); in efx_selftest()
689 rc = efx_test_nvram(efx, tests); in efx_selftest()
693 rc = efx_test_interrupts(efx, tests); in efx_selftest()
697 rc = efx_test_eventq_irq(efx, tests); in efx_selftest()
705 return efx_test_phy(efx, tests, flags); in efx_selftest()
713 efx_device_detach_sync(efx); in efx_selftest()
715 if (efx->type->test_chip) { in efx_selftest()
716 rc_reset = efx->type->test_chip(efx, tests); in efx_selftest()
718 netif_err(efx, hw, efx->net_dev, in efx_selftest()
720 efx_schedule_reset(efx, RESET_TYPE_DISABLE); in efx_selftest()
730 mutex_lock(&efx->mac_lock); in efx_selftest()
731 efx->phy_mode &= ~PHY_MODE_LOW_POWER; in efx_selftest()
732 efx->loopback_mode = LOOPBACK_NONE; in efx_selftest()
733 __efx_reconfigure_port(efx); in efx_selftest()
734 mutex_unlock(&efx->mac_lock); in efx_selftest()
736 rc = efx_test_phy(efx, tests, flags); in efx_selftest()
740 rc = efx_test_loopbacks(efx, tests, efx->loopback_modes); in efx_selftest()
745 mutex_lock(&efx->mac_lock); in efx_selftest()
746 efx->phy_mode = phy_mode; in efx_selftest()
747 efx->loopback_mode = loopback_mode; in efx_selftest()
748 __efx_reconfigure_port(efx); in efx_selftest()
749 mutex_unlock(&efx->mac_lock); in efx_selftest()
751 netif_device_attach(efx->net_dev); in efx_selftest()
756 void efx_selftest_async_start(struct efx_nic *efx) in efx_selftest_async_start() argument
760 efx_for_each_channel(channel, efx) in efx_selftest_async_start()
762 schedule_delayed_work(&efx->selftest_work, IRQ_TIMEOUT); in efx_selftest_async_start()
765 void efx_selftest_async_cancel(struct efx_nic *efx) in efx_selftest_async_cancel() argument
767 cancel_delayed_work_sync(&efx->selftest_work); in efx_selftest_async_cancel()
772 struct efx_nic *efx = container_of(data, struct efx_nic, in efx_selftest_async_work() local
777 efx_for_each_channel(channel, efx) { in efx_selftest_async_work()
780 netif_err(efx, ifup, efx->net_dev, in efx_selftest_async_work()
784 netif_dbg(efx, ifup, efx->net_dev, in efx_selftest_async_work()