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