Lines Matching refs:efx

72 #define INT_MODE(efx) \  argument
73 STRING_TABLE_LOOKUP(efx->interrupt_mode, efx_siena_interrupt_mode)
104 static int efx_test_phy_alive(struct efx_nic *efx, struct efx_self_tests *tests) in efx_test_phy_alive() argument
108 rc = efx_siena_mcdi_phy_test_alive(efx); in efx_test_phy_alive()
114 static int efx_test_nvram(struct efx_nic *efx, struct efx_self_tests *tests) in efx_test_nvram() argument
118 if (efx->type->test_nvram) { in efx_test_nvram()
119 rc = efx->type->test_nvram(efx); in efx_test_nvram()
136 static int efx_test_interrupts(struct efx_nic *efx, in efx_test_interrupts() argument
143 netif_dbg(efx, drv, efx->net_dev, "testing interrupts\n"); in efx_test_interrupts()
146 rc = efx_siena_irq_test_start(efx); in efx_test_interrupts()
148 netif_dbg(efx, drv, efx->net_dev, in efx_test_interrupts()
158 netif_dbg(efx, drv, efx->net_dev, "waiting for test interrupt\n"); in efx_test_interrupts()
161 cpu = efx_nic_irq_test_irq_cpu(efx); in efx_test_interrupts()
167 netif_err(efx, drv, efx->net_dev, "timed out waiting for interrupt\n"); in efx_test_interrupts()
171 netif_dbg(efx, drv, efx->net_dev, "%s test interrupt seen on CPU%d\n", in efx_test_interrupts()
172 INT_MODE(efx), cpu); in efx_test_interrupts()
178 static int efx_test_eventq_irq(struct efx_nic *efx, in efx_test_eventq_irq() argument
188 efx_for_each_channel(channel, efx) { in efx_test_eventq_irq()
204 efx_for_each_channel(channel, efx) { in efx_test_eventq_irq()
223 efx_for_each_channel(channel, efx) { in efx_test_eventq_irq()
231 netif_dbg(efx, drv, efx->net_dev, in efx_test_eventq_irq()
240 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()
249 netif_err(efx, drv, efx->net_dev, in efx_test_eventq_irq()
259 static int efx_test_phy(struct efx_nic *efx, struct efx_self_tests *tests, in efx_test_phy() argument
264 mutex_lock(&efx->mac_lock); in efx_test_phy()
265 rc = efx_siena_mcdi_phy_run_tests(efx, tests->phy_ext, flags); in efx_test_phy()
266 mutex_unlock(&efx->mac_lock); in efx_test_phy()
270 netif_info(efx, drv, efx->net_dev, in efx_test_phy()
286 void efx_siena_loopback_rx_packet(struct efx_nic *efx, in efx_siena_loopback_rx_packet() argument
289 struct efx_loopback_state *state = efx->loopback_selftest; in efx_siena_loopback_rx_packet()
309 netif_err(efx, drv, efx->net_dev, in efx_siena_loopback_rx_packet()
311 "test\n", pkt_len, LOOPBACK_MODE(efx)); in efx_siena_loopback_rx_packet()
317 netif_err(efx, drv, efx->net_dev, in efx_siena_loopback_rx_packet()
319 LOOPBACK_MODE(efx)); in efx_siena_loopback_rx_packet()
325 netif_err(efx, drv, efx->net_dev, in efx_siena_loopback_rx_packet()
328 (int)EFX_LOOPBACK_PAYLOAD_LEN, LOOPBACK_MODE(efx)); in efx_siena_loopback_rx_packet()
334 netif_err(efx, drv, efx->net_dev, in efx_siena_loopback_rx_packet()
336 LOOPBACK_MODE(efx)); in efx_siena_loopback_rx_packet()
342 netif_err(efx, drv, efx->net_dev, in efx_siena_loopback_rx_packet()
344 LOOPBACK_MODE(efx)); in efx_siena_loopback_rx_packet()
350 netif_err(efx, drv, efx->net_dev, in efx_siena_loopback_rx_packet()
353 ntohs(payload->iteration), LOOPBACK_MODE(efx)); in efx_siena_loopback_rx_packet()
358 netif_vdbg(efx, drv, efx->net_dev, in efx_siena_loopback_rx_packet()
359 "got loopback RX in %s loopback test\n", LOOPBACK_MODE(efx)); in efx_siena_loopback_rx_packet()
367 netif_err(efx, drv, efx->net_dev, "received packet:\n"); in efx_siena_loopback_rx_packet()
370 netif_err(efx, drv, efx->net_dev, "expected packet:\n"); in efx_siena_loopback_rx_packet()
380 static void efx_iterate_state(struct efx_nic *efx) in efx_iterate_state() argument
382 struct efx_loopback_state *state = efx->loopback_selftest; in efx_iterate_state()
383 struct net_device *net_dev = efx->net_dev; in efx_iterate_state()
418 struct efx_nic *efx = tx_queue->efx; in efx_begin_loopback() local
419 struct efx_loopback_state *state = efx->loopback_selftest; in efx_begin_loopback()
449 netif_tx_lock_bh(efx->net_dev); in efx_begin_loopback()
451 netif_tx_unlock_bh(efx->net_dev); in efx_begin_loopback()
454 netif_err(efx, drv, efx->net_dev, in efx_begin_loopback()
458 LOOPBACK_MODE(efx)); in efx_begin_loopback()
469 static int efx_poll_loopback(struct efx_nic *efx) in efx_poll_loopback() argument
471 struct efx_loopback_state *state = efx->loopback_selftest; in efx_poll_loopback()
479 struct efx_nic *efx = tx_queue->efx; in efx_end_loopback() local
480 struct efx_loopback_state *state = efx->loopback_selftest; in efx_end_loopback()
485 netif_tx_lock_bh(efx->net_dev); in efx_end_loopback()
496 netif_tx_unlock_bh(efx->net_dev); in efx_end_loopback()
505 netif_err(efx, drv, efx->net_dev, in efx_end_loopback()
509 LOOPBACK_MODE(efx)); in efx_end_loopback()
516 netif_dbg(efx, drv, efx->net_dev, in efx_end_loopback()
520 LOOPBACK_MODE(efx)); in efx_end_loopback()
538 struct efx_nic *efx = tx_queue->efx; in efx_test_loopback() local
539 struct efx_loopback_state *state = efx->loopback_selftest; in efx_test_loopback()
544 state->packet_count = efx->txq_entries / 3; in efx_test_loopback()
552 netif_dbg(efx, drv, efx->net_dev, in efx_test_loopback()
554 tx_queue->label, tx_queue->queue, LOOPBACK_MODE(efx), in efx_test_loopback()
557 efx_iterate_state(efx); in efx_test_loopback()
563 if (!efx_poll_loopback(efx)) { in efx_test_loopback()
565 efx_poll_loopback(efx); in efx_test_loopback()
579 netif_dbg(efx, drv, efx->net_dev, in efx_test_loopback()
581 "of %d packets\n", tx_queue->label, LOOPBACK_MODE(efx), in efx_test_loopback()
591 static int efx_wait_for_link(struct efx_nic *efx) in efx_wait_for_link() argument
593 struct efx_link_state *link_state = &efx->link_state; in efx_wait_for_link()
600 if (efx->type->monitor != NULL) { in efx_wait_for_link()
601 mutex_lock(&efx->mac_lock); in efx_wait_for_link()
602 efx->type->monitor(efx); in efx_wait_for_link()
603 mutex_unlock(&efx->mac_lock); in efx_wait_for_link()
606 mutex_lock(&efx->mac_lock); in efx_wait_for_link()
609 link_up = !efx->type->check_mac_fault(efx); in efx_wait_for_link()
610 mutex_unlock(&efx->mac_lock); in efx_wait_for_link()
623 static int efx_test_loopbacks(struct efx_nic *efx, struct efx_self_tests *tests, in efx_test_loopbacks() argument
629 efx_get_channel(efx, efx->tx_channel_offset); in efx_test_loopbacks()
639 BUG_ON(efx->loopback_selftest); in efx_test_loopbacks()
641 efx->loopback_selftest = state; in efx_test_loopbacks()
650 mutex_lock(&efx->mac_lock); in efx_test_loopbacks()
651 efx->loopback_mode = mode; in efx_test_loopbacks()
652 rc = __efx_siena_reconfigure_port(efx); in efx_test_loopbacks()
653 mutex_unlock(&efx->mac_lock); in efx_test_loopbacks()
655 netif_err(efx, drv, efx->net_dev, in efx_test_loopbacks()
657 LOOPBACK_MODE(efx)); in efx_test_loopbacks()
661 rc = efx_wait_for_link(efx); in efx_test_loopbacks()
663 netif_err(efx, drv, efx->net_dev, in efx_test_loopbacks()
665 LOOPBACK_MODE(efx)); in efx_test_loopbacks()
683 efx->loopback_selftest = NULL; in efx_test_loopbacks()
699 int efx_siena_selftest(struct efx_nic *efx, struct efx_self_tests *tests, in efx_siena_selftest() argument
702 enum efx_loopback_mode loopback_mode = efx->loopback_mode; in efx_siena_selftest()
703 int phy_mode = efx->phy_mode; in efx_siena_selftest()
706 efx_siena_selftest_async_cancel(efx); in efx_siena_selftest()
711 rc = efx_test_phy_alive(efx, tests); in efx_siena_selftest()
715 rc = efx_test_nvram(efx, tests); in efx_siena_selftest()
719 rc = efx_test_interrupts(efx, tests); in efx_siena_selftest()
723 rc = efx_test_eventq_irq(efx, tests); in efx_siena_selftest()
731 return efx_test_phy(efx, tests, flags); in efx_siena_selftest()
739 efx_device_detach_sync(efx); in efx_siena_selftest()
741 if (efx->type->test_chip) { in efx_siena_selftest()
742 rc_reset = efx->type->test_chip(efx, tests); in efx_siena_selftest()
744 netif_err(efx, hw, efx->net_dev, in efx_siena_selftest()
746 efx_siena_schedule_reset(efx, RESET_TYPE_DISABLE); in efx_siena_selftest()
756 mutex_lock(&efx->mac_lock); in efx_siena_selftest()
757 efx->phy_mode &= ~PHY_MODE_LOW_POWER; in efx_siena_selftest()
758 efx->loopback_mode = LOOPBACK_NONE; in efx_siena_selftest()
759 __efx_siena_reconfigure_port(efx); in efx_siena_selftest()
760 mutex_unlock(&efx->mac_lock); in efx_siena_selftest()
762 rc = efx_test_phy(efx, tests, flags); in efx_siena_selftest()
766 rc = efx_test_loopbacks(efx, tests, efx->loopback_modes); in efx_siena_selftest()
771 mutex_lock(&efx->mac_lock); in efx_siena_selftest()
772 efx->phy_mode = phy_mode; in efx_siena_selftest()
773 efx->loopback_mode = loopback_mode; in efx_siena_selftest()
774 __efx_siena_reconfigure_port(efx); in efx_siena_selftest()
775 mutex_unlock(&efx->mac_lock); in efx_siena_selftest()
777 efx_device_attach_if_not_resetting(efx); in efx_siena_selftest()
782 void efx_siena_selftest_async_start(struct efx_nic *efx) in efx_siena_selftest_async_start() argument
786 efx_for_each_channel(channel, efx) in efx_siena_selftest_async_start()
788 schedule_delayed_work(&efx->selftest_work, IRQ_TIMEOUT); in efx_siena_selftest_async_start()
791 void efx_siena_selftest_async_cancel(struct efx_nic *efx) in efx_siena_selftest_async_cancel() argument
793 cancel_delayed_work_sync(&efx->selftest_work); in efx_siena_selftest_async_cancel()
798 struct efx_nic *efx = container_of(data, struct efx_nic, in efx_siena_selftest_async_work() local
803 efx_for_each_channel(channel, efx) { in efx_siena_selftest_async_work()
806 netif_err(efx, ifup, efx->net_dev, in efx_siena_selftest_async_work()
810 netif_dbg(efx, ifup, efx->net_dev, in efx_siena_selftest_async_work()
816 void efx_siena_selftest_async_init(struct efx_nic *efx) in efx_siena_selftest_async_init() argument
818 INIT_DELAYED_WORK(&efx->selftest_work, efx_siena_selftest_async_work); in efx_siena_selftest_async_init()