Lines Matching refs:efx

64 #define INT_MODE(efx) \  argument
65 STRING_TABLE_LOOKUP(efx->interrupt_mode, ef4_interrupt_mode)
96 static int ef4_test_phy_alive(struct ef4_nic *efx, struct ef4_self_tests *tests) in ef4_test_phy_alive() argument
100 if (efx->phy_op->test_alive) { in ef4_test_phy_alive()
101 rc = efx->phy_op->test_alive(efx); in ef4_test_phy_alive()
108 static int ef4_test_nvram(struct ef4_nic *efx, struct ef4_self_tests *tests) in ef4_test_nvram() argument
112 if (efx->type->test_nvram) { in ef4_test_nvram()
113 rc = efx->type->test_nvram(efx); in ef4_test_nvram()
130 static int ef4_test_interrupts(struct ef4_nic *efx, in ef4_test_interrupts() argument
137 netif_dbg(efx, drv, efx->net_dev, "testing interrupts\n"); in ef4_test_interrupts()
140 rc = ef4_nic_irq_test_start(efx); in ef4_test_interrupts()
142 netif_dbg(efx, drv, efx->net_dev, in ef4_test_interrupts()
152 netif_dbg(efx, drv, efx->net_dev, "waiting for test interrupt\n"); in ef4_test_interrupts()
155 cpu = ef4_nic_irq_test_irq_cpu(efx); in ef4_test_interrupts()
161 netif_err(efx, drv, efx->net_dev, "timed out waiting for interrupt\n"); in ef4_test_interrupts()
165 netif_dbg(efx, drv, efx->net_dev, "%s test interrupt seen on CPU%d\n", in ef4_test_interrupts()
166 INT_MODE(efx), cpu); in ef4_test_interrupts()
172 static int ef4_test_eventq_irq(struct ef4_nic *efx, in ef4_test_eventq_irq() argument
182 ef4_for_each_channel(channel, efx) { in ef4_test_eventq_irq()
198 ef4_for_each_channel(channel, efx) { in ef4_test_eventq_irq()
217 ef4_for_each_channel(channel, efx) { in ef4_test_eventq_irq()
225 netif_dbg(efx, drv, efx->net_dev, in ef4_test_eventq_irq()
234 netif_err(efx, drv, efx->net_dev, in ef4_test_eventq_irq()
238 netif_err(efx, drv, efx->net_dev, in ef4_test_eventq_irq()
243 netif_err(efx, drv, efx->net_dev, in ef4_test_eventq_irq()
253 static int ef4_test_phy(struct ef4_nic *efx, struct ef4_self_tests *tests, in ef4_test_phy() argument
258 if (!efx->phy_op->run_tests) in ef4_test_phy()
261 mutex_lock(&efx->mac_lock); in ef4_test_phy()
262 rc = efx->phy_op->run_tests(efx, tests->phy_ext, flags); in ef4_test_phy()
263 mutex_unlock(&efx->mac_lock); in ef4_test_phy()
267 netif_info(efx, drv, efx->net_dev, in ef4_test_phy()
283 void ef4_loopback_rx_packet(struct ef4_nic *efx, in ef4_loopback_rx_packet() argument
286 struct ef4_loopback_state *state = efx->loopback_selftest; in ef4_loopback_rx_packet()
305 netif_err(efx, drv, efx->net_dev, in ef4_loopback_rx_packet()
307 "test\n", pkt_len, LOOPBACK_MODE(efx)); in ef4_loopback_rx_packet()
313 netif_err(efx, drv, efx->net_dev, in ef4_loopback_rx_packet()
315 LOOPBACK_MODE(efx)); in ef4_loopback_rx_packet()
321 netif_err(efx, drv, efx->net_dev, in ef4_loopback_rx_packet()
324 LOOPBACK_MODE(efx)); in ef4_loopback_rx_packet()
330 netif_err(efx, drv, efx->net_dev, in ef4_loopback_rx_packet()
332 LOOPBACK_MODE(efx)); in ef4_loopback_rx_packet()
338 netif_err(efx, drv, efx->net_dev, in ef4_loopback_rx_packet()
340 LOOPBACK_MODE(efx)); in ef4_loopback_rx_packet()
346 netif_err(efx, drv, efx->net_dev, in ef4_loopback_rx_packet()
349 ntohs(payload->iteration), LOOPBACK_MODE(efx)); in ef4_loopback_rx_packet()
354 netif_vdbg(efx, drv, efx->net_dev, in ef4_loopback_rx_packet()
355 "got loopback RX in %s loopback test\n", LOOPBACK_MODE(efx)); in ef4_loopback_rx_packet()
363 netif_err(efx, drv, efx->net_dev, "received packet:\n"); in ef4_loopback_rx_packet()
366 netif_err(efx, drv, efx->net_dev, "expected packet:\n"); in ef4_loopback_rx_packet()
375 static void ef4_iterate_state(struct ef4_nic *efx) in ef4_iterate_state() argument
377 struct ef4_loopback_state *state = efx->loopback_selftest; in ef4_iterate_state()
378 struct net_device *net_dev = efx->net_dev; in ef4_iterate_state()
412 struct ef4_nic *efx = tx_queue->efx; in ef4_begin_loopback() local
413 struct ef4_loopback_state *state = efx->loopback_selftest; in ef4_begin_loopback()
439 netif_tx_lock_bh(efx->net_dev); in ef4_begin_loopback()
441 netif_tx_unlock_bh(efx->net_dev); in ef4_begin_loopback()
444 netif_err(efx, drv, efx->net_dev, in ef4_begin_loopback()
448 LOOPBACK_MODE(efx)); in ef4_begin_loopback()
459 static int ef4_poll_loopback(struct ef4_nic *efx) in ef4_poll_loopback() argument
461 struct ef4_loopback_state *state = efx->loopback_selftest; in ef4_poll_loopback()
469 struct ef4_nic *efx = tx_queue->efx; in ef4_end_loopback() local
470 struct ef4_loopback_state *state = efx->loopback_selftest; in ef4_end_loopback()
475 netif_tx_lock_bh(efx->net_dev); in ef4_end_loopback()
486 netif_tx_unlock_bh(efx->net_dev); in ef4_end_loopback()
495 netif_err(efx, drv, efx->net_dev, in ef4_end_loopback()
499 LOOPBACK_MODE(efx)); in ef4_end_loopback()
506 netif_dbg(efx, drv, efx->net_dev, in ef4_end_loopback()
510 LOOPBACK_MODE(efx)); in ef4_end_loopback()
528 struct ef4_nic *efx = tx_queue->efx; in ef4_test_loopback() local
529 struct ef4_loopback_state *state = efx->loopback_selftest; in ef4_test_loopback()
534 state->packet_count = efx->txq_entries / 3; in ef4_test_loopback()
542 netif_dbg(efx, drv, efx->net_dev, in ef4_test_loopback()
544 tx_queue->queue, LOOPBACK_MODE(efx), in ef4_test_loopback()
547 ef4_iterate_state(efx); in ef4_test_loopback()
553 if (!ef4_poll_loopback(efx)) { in ef4_test_loopback()
555 ef4_poll_loopback(efx); in ef4_test_loopback()
569 netif_dbg(efx, drv, efx->net_dev, in ef4_test_loopback()
571 "of %d packets\n", tx_queue->queue, LOOPBACK_MODE(efx), in ef4_test_loopback()
581 static int ef4_wait_for_link(struct ef4_nic *efx) in ef4_wait_for_link() argument
583 struct ef4_link_state *link_state = &efx->link_state; in ef4_wait_for_link()
590 if (efx->type->monitor != NULL) { in ef4_wait_for_link()
591 mutex_lock(&efx->mac_lock); in ef4_wait_for_link()
592 efx->type->monitor(efx); in ef4_wait_for_link()
593 mutex_unlock(&efx->mac_lock); in ef4_wait_for_link()
596 mutex_lock(&efx->mac_lock); in ef4_wait_for_link()
599 link_up = !efx->type->check_mac_fault(efx); in ef4_wait_for_link()
600 mutex_unlock(&efx->mac_lock); in ef4_wait_for_link()
613 static int ef4_test_loopbacks(struct ef4_nic *efx, struct ef4_self_tests *tests, in ef4_test_loopbacks() argument
619 ef4_get_channel(efx, efx->tx_channel_offset); in ef4_test_loopbacks()
629 BUG_ON(efx->loopback_selftest); in ef4_test_loopbacks()
631 efx->loopback_selftest = state; in ef4_test_loopbacks()
640 mutex_lock(&efx->mac_lock); in ef4_test_loopbacks()
641 efx->loopback_mode = mode; in ef4_test_loopbacks()
642 rc = __ef4_reconfigure_port(efx); in ef4_test_loopbacks()
643 mutex_unlock(&efx->mac_lock); in ef4_test_loopbacks()
645 netif_err(efx, drv, efx->net_dev, in ef4_test_loopbacks()
647 LOOPBACK_MODE(efx)); in ef4_test_loopbacks()
651 rc = ef4_wait_for_link(efx); in ef4_test_loopbacks()
653 netif_err(efx, drv, efx->net_dev, in ef4_test_loopbacks()
655 LOOPBACK_MODE(efx)); in ef4_test_loopbacks()
673 efx->loopback_selftest = NULL; in ef4_test_loopbacks()
689 int ef4_selftest(struct ef4_nic *efx, struct ef4_self_tests *tests, in ef4_selftest() argument
692 enum ef4_loopback_mode loopback_mode = efx->loopback_mode; in ef4_selftest()
693 int phy_mode = efx->phy_mode; in ef4_selftest()
696 ef4_selftest_async_cancel(efx); in ef4_selftest()
701 rc = ef4_test_phy_alive(efx, tests); in ef4_selftest()
705 rc = ef4_test_nvram(efx, tests); in ef4_selftest()
709 rc = ef4_test_interrupts(efx, tests); in ef4_selftest()
713 rc = ef4_test_eventq_irq(efx, tests); in ef4_selftest()
721 return ef4_test_phy(efx, tests, flags); in ef4_selftest()
729 ef4_device_detach_sync(efx); in ef4_selftest()
731 if (efx->type->test_chip) { in ef4_selftest()
732 rc_reset = efx->type->test_chip(efx, tests); in ef4_selftest()
734 netif_err(efx, hw, efx->net_dev, in ef4_selftest()
736 ef4_schedule_reset(efx, RESET_TYPE_DISABLE); in ef4_selftest()
746 mutex_lock(&efx->mac_lock); in ef4_selftest()
747 efx->phy_mode &= ~PHY_MODE_LOW_POWER; in ef4_selftest()
748 efx->loopback_mode = LOOPBACK_NONE; in ef4_selftest()
749 __ef4_reconfigure_port(efx); in ef4_selftest()
750 mutex_unlock(&efx->mac_lock); in ef4_selftest()
752 rc = ef4_test_phy(efx, tests, flags); in ef4_selftest()
756 rc = ef4_test_loopbacks(efx, tests, efx->loopback_modes); in ef4_selftest()
761 mutex_lock(&efx->mac_lock); in ef4_selftest()
762 efx->phy_mode = phy_mode; in ef4_selftest()
763 efx->loopback_mode = loopback_mode; in ef4_selftest()
764 __ef4_reconfigure_port(efx); in ef4_selftest()
765 mutex_unlock(&efx->mac_lock); in ef4_selftest()
767 netif_device_attach(efx->net_dev); in ef4_selftest()
772 void ef4_selftest_async_start(struct ef4_nic *efx) in ef4_selftest_async_start() argument
776 ef4_for_each_channel(channel, efx) in ef4_selftest_async_start()
778 schedule_delayed_work(&efx->selftest_work, IRQ_TIMEOUT); in ef4_selftest_async_start()
781 void ef4_selftest_async_cancel(struct ef4_nic *efx) in ef4_selftest_async_cancel() argument
783 cancel_delayed_work_sync(&efx->selftest_work); in ef4_selftest_async_cancel()
788 struct ef4_nic *efx = container_of(data, struct ef4_nic, in ef4_selftest_async_work() local
793 ef4_for_each_channel(channel, efx) { in ef4_selftest_async_work()
796 netif_err(efx, ifup, efx->net_dev, in ef4_selftest_async_work()
800 netif_dbg(efx, ifup, efx->net_dev, in ef4_selftest_async_work()