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