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()
133 static int efx_test_interrupts(struct efx_nic *efx, in efx_test_interrupts() argument
139 netif_dbg(efx, drv, efx->net_dev, "testing interrupts\n"); in efx_test_interrupts()
142 efx_nic_irq_test_start(efx); in efx_test_interrupts()
147 netif_dbg(efx, drv, efx->net_dev, "waiting for test interrupt\n"); in efx_test_interrupts()
150 cpu = efx_nic_irq_test_irq_cpu(efx); in efx_test_interrupts()
156 netif_err(efx, drv, efx->net_dev, "timed out waiting for interrupt\n"); in efx_test_interrupts()
160 netif_dbg(efx, drv, efx->net_dev, "%s test interrupt seen on CPU%d\n", in efx_test_interrupts()
161 INT_MODE(efx), cpu); in efx_test_interrupts()
167 static int efx_test_eventq_irq(struct efx_nic *efx, in efx_test_eventq_irq() argument
177 efx_for_each_channel(channel, efx) { in efx_test_eventq_irq()
193 efx_for_each_channel(channel, efx) { in efx_test_eventq_irq()
212 efx_for_each_channel(channel, efx) { in efx_test_eventq_irq()
220 netif_dbg(efx, drv, efx->net_dev, in efx_test_eventq_irq()
229 netif_err(efx, drv, efx->net_dev, in efx_test_eventq_irq()
233 netif_err(efx, drv, efx->net_dev, in efx_test_eventq_irq()
238 netif_err(efx, drv, efx->net_dev, in efx_test_eventq_irq()
248 static int efx_test_phy(struct efx_nic *efx, struct efx_self_tests *tests, in efx_test_phy() argument
253 if (!efx->phy_op->run_tests) in efx_test_phy()
256 mutex_lock(&efx->mac_lock); in efx_test_phy()
257 rc = efx->phy_op->run_tests(efx, tests->phy_ext, flags); in efx_test_phy()
258 mutex_unlock(&efx->mac_lock); in efx_test_phy()
262 netif_info(efx, drv, efx->net_dev, in efx_test_phy()
278 void efx_loopback_rx_packet(struct efx_nic *efx, in efx_loopback_rx_packet() argument
281 struct efx_loopback_state *state = efx->loopback_selftest; in efx_loopback_rx_packet()
300 netif_err(efx, drv, efx->net_dev, in efx_loopback_rx_packet()
302 "test\n", pkt_len, LOOPBACK_MODE(efx)); in efx_loopback_rx_packet()
308 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()
319 LOOPBACK_MODE(efx)); in efx_loopback_rx_packet()
325 netif_err(efx, drv, efx->net_dev, in efx_loopback_rx_packet()
327 LOOPBACK_MODE(efx)); in efx_loopback_rx_packet()
333 netif_err(efx, drv, efx->net_dev, in efx_loopback_rx_packet()
335 LOOPBACK_MODE(efx)); in efx_loopback_rx_packet()
341 netif_err(efx, drv, efx->net_dev, in efx_loopback_rx_packet()
344 ntohs(payload->iteration), LOOPBACK_MODE(efx)); in efx_loopback_rx_packet()
349 netif_vdbg(efx, drv, efx->net_dev, in efx_loopback_rx_packet()
350 "got loopback RX in %s loopback test\n", LOOPBACK_MODE(efx)); in efx_loopback_rx_packet()
358 netif_err(efx, drv, efx->net_dev, "received packet:\n"); in efx_loopback_rx_packet()
361 netif_err(efx, drv, efx->net_dev, "expected packet:\n"); in efx_loopback_rx_packet()
370 static void efx_iterate_state(struct efx_nic *efx) in efx_iterate_state() argument
372 struct efx_loopback_state *state = efx->loopback_selftest; in efx_iterate_state()
373 struct net_device *net_dev = efx->net_dev; in efx_iterate_state()
407 struct efx_nic *efx = tx_queue->efx; in efx_begin_loopback() local
408 struct efx_loopback_state *state = efx->loopback_selftest; in efx_begin_loopback()
435 netif_tx_lock_bh(efx->net_dev); in efx_begin_loopback()
437 netif_tx_unlock_bh(efx->net_dev); in efx_begin_loopback()
440 netif_err(efx, drv, efx->net_dev, in efx_begin_loopback()
444 LOOPBACK_MODE(efx)); in efx_begin_loopback()
455 static int efx_poll_loopback(struct efx_nic *efx) in efx_poll_loopback() argument
457 struct efx_loopback_state *state = efx->loopback_selftest; in efx_poll_loopback()
465 struct efx_nic *efx = tx_queue->efx; in efx_end_loopback() local
466 struct efx_loopback_state *state = efx->loopback_selftest; in efx_end_loopback()
471 netif_tx_lock_bh(efx->net_dev); in efx_end_loopback()
482 netif_tx_unlock_bh(efx->net_dev); in efx_end_loopback()
491 netif_err(efx, drv, efx->net_dev, in efx_end_loopback()
495 LOOPBACK_MODE(efx)); in efx_end_loopback()
502 netif_dbg(efx, drv, efx->net_dev, in efx_end_loopback()
506 LOOPBACK_MODE(efx)); in efx_end_loopback()
524 struct efx_nic *efx = tx_queue->efx; in efx_test_loopback() local
525 struct efx_loopback_state *state = efx->loopback_selftest; in efx_test_loopback()
530 state->packet_count = efx->txq_entries / 3; in efx_test_loopback()
538 netif_dbg(efx, drv, efx->net_dev, in efx_test_loopback()
540 tx_queue->queue, LOOPBACK_MODE(efx), in efx_test_loopback()
543 efx_iterate_state(efx); in efx_test_loopback()
549 if (!efx_poll_loopback(efx)) { in efx_test_loopback()
551 efx_poll_loopback(efx); in efx_test_loopback()
565 netif_dbg(efx, drv, efx->net_dev, in efx_test_loopback()
567 "of %d packets\n", tx_queue->queue, LOOPBACK_MODE(efx), in efx_test_loopback()
577 static int efx_wait_for_link(struct efx_nic *efx) in efx_wait_for_link() argument
579 struct efx_link_state *link_state = &efx->link_state; in efx_wait_for_link()
586 if (efx->type->monitor != NULL) { in efx_wait_for_link()
587 mutex_lock(&efx->mac_lock); in efx_wait_for_link()
588 efx->type->monitor(efx); in efx_wait_for_link()
589 mutex_unlock(&efx->mac_lock); in efx_wait_for_link()
592 mutex_lock(&efx->mac_lock); in efx_wait_for_link()
595 link_up = !efx->type->check_mac_fault(efx); in efx_wait_for_link()
596 mutex_unlock(&efx->mac_lock); in efx_wait_for_link()
609 static int efx_test_loopbacks(struct efx_nic *efx, struct efx_self_tests *tests, in efx_test_loopbacks() argument
615 efx_get_channel(efx, efx->tx_channel_offset); in efx_test_loopbacks()
625 BUG_ON(efx->loopback_selftest); in efx_test_loopbacks()
627 efx->loopback_selftest = state; in efx_test_loopbacks()
636 mutex_lock(&efx->mac_lock); in efx_test_loopbacks()
637 efx->loopback_mode = mode; in efx_test_loopbacks()
638 rc = __efx_reconfigure_port(efx); in efx_test_loopbacks()
639 mutex_unlock(&efx->mac_lock); in efx_test_loopbacks()
641 netif_err(efx, drv, efx->net_dev, in efx_test_loopbacks()
643 LOOPBACK_MODE(efx)); in efx_test_loopbacks()
647 rc = efx_wait_for_link(efx); in efx_test_loopbacks()
649 netif_err(efx, drv, efx->net_dev, in efx_test_loopbacks()
651 LOOPBACK_MODE(efx)); in efx_test_loopbacks()
669 efx->loopback_selftest = NULL; in efx_test_loopbacks()
685 int efx_selftest(struct efx_nic *efx, struct efx_self_tests *tests, in efx_selftest() argument
688 enum efx_loopback_mode loopback_mode = efx->loopback_mode; in efx_selftest()
689 int phy_mode = efx->phy_mode; in efx_selftest()
692 efx_selftest_async_cancel(efx); in efx_selftest()
697 rc = efx_test_phy_alive(efx, tests); in efx_selftest()
701 rc = efx_test_nvram(efx, tests); in efx_selftest()
705 rc = efx_test_interrupts(efx, tests); in efx_selftest()
709 rc = efx_test_eventq_irq(efx, tests); in efx_selftest()
717 return efx_test_phy(efx, tests, flags); in efx_selftest()
725 efx_device_detach_sync(efx); in efx_selftest()
727 if (efx->type->test_chip) { in efx_selftest()
728 rc_reset = efx->type->test_chip(efx, tests); in efx_selftest()
730 netif_err(efx, hw, efx->net_dev, in efx_selftest()
732 efx_schedule_reset(efx, RESET_TYPE_DISABLE); in efx_selftest()
742 mutex_lock(&efx->mac_lock); in efx_selftest()
743 efx->phy_mode &= ~PHY_MODE_LOW_POWER; in efx_selftest()
744 efx->loopback_mode = LOOPBACK_NONE; in efx_selftest()
745 __efx_reconfigure_port(efx); in efx_selftest()
746 mutex_unlock(&efx->mac_lock); in efx_selftest()
748 rc = efx_test_phy(efx, tests, flags); in efx_selftest()
752 rc = efx_test_loopbacks(efx, tests, efx->loopback_modes); in efx_selftest()
757 mutex_lock(&efx->mac_lock); in efx_selftest()
758 efx->phy_mode = phy_mode; in efx_selftest()
759 efx->loopback_mode = loopback_mode; in efx_selftest()
760 __efx_reconfigure_port(efx); in efx_selftest()
761 mutex_unlock(&efx->mac_lock); in efx_selftest()
763 netif_device_attach(efx->net_dev); in efx_selftest()
768 void efx_selftest_async_start(struct efx_nic *efx) in efx_selftest_async_start() argument
772 efx_for_each_channel(channel, efx) in efx_selftest_async_start()
774 schedule_delayed_work(&efx->selftest_work, IRQ_TIMEOUT); in efx_selftest_async_start()
777 void efx_selftest_async_cancel(struct efx_nic *efx) in efx_selftest_async_cancel() argument
779 cancel_delayed_work_sync(&efx->selftest_work); in efx_selftest_async_cancel()
784 struct efx_nic *efx = container_of(data, struct efx_nic, in efx_selftest_async_work() local
789 efx_for_each_channel(channel, efx) { in efx_selftest_async_work()
792 netif_err(efx, ifup, efx->net_dev, in efx_selftest_async_work()
796 netif_dbg(efx, ifup, efx->net_dev, in efx_selftest_async_work()