Lines Matching refs:efx

20 #include "efx.h"
69 #define INT_MODE(efx) \
70 STRING_TABLE_LOOKUP(efx->interrupt_mode, ef4_interrupt_mode)
101 static int ef4_test_phy_alive(struct ef4_nic *efx, struct ef4_self_tests *tests)
105 if (efx->phy_op->test_alive) {
106 rc = efx->phy_op->test_alive(efx);
113 static int ef4_test_nvram(struct ef4_nic *efx, struct ef4_self_tests *tests)
117 if (efx->type->test_nvram) {
118 rc = efx->type->test_nvram(efx);
135 static int ef4_test_interrupts(struct ef4_nic *efx,
142 netif_dbg(efx, drv, efx->net_dev, "testing interrupts\n");
145 rc = ef4_nic_irq_test_start(efx);
147 netif_dbg(efx, drv, efx->net_dev,
157 netif_dbg(efx, drv, efx->net_dev, "waiting for test interrupt\n");
160 cpu = ef4_nic_irq_test_irq_cpu(efx);
166 netif_err(efx, drv, efx->net_dev, "timed out waiting for interrupt\n");
170 netif_dbg(efx, drv, efx->net_dev, "%s test interrupt seen on CPU%d\n",
171 INT_MODE(efx), cpu);
177 static int ef4_test_eventq_irq(struct ef4_nic *efx,
187 ef4_for_each_channel(channel, efx) {
203 ef4_for_each_channel(channel, efx) {
222 ef4_for_each_channel(channel, efx) {
230 netif_dbg(efx, drv, efx->net_dev,
239 netif_err(efx, drv, efx->net_dev,
243 netif_err(efx, drv, efx->net_dev,
248 netif_err(efx, drv, efx->net_dev,
258 static int ef4_test_phy(struct ef4_nic *efx, struct ef4_self_tests *tests,
263 if (!efx->phy_op->run_tests)
266 mutex_lock(&efx->mac_lock);
267 rc = efx->phy_op->run_tests(efx, tests->phy_ext, flags);
268 mutex_unlock(&efx->mac_lock);
272 netif_info(efx, drv, efx->net_dev,
288 void ef4_loopback_rx_packet(struct ef4_nic *efx,
291 struct ef4_loopback_state *state = efx->loopback_selftest;
311 netif_err(efx, drv, efx->net_dev,
313 "test\n", pkt_len, LOOPBACK_MODE(efx));
319 netif_err(efx, drv, efx->net_dev,
321 LOOPBACK_MODE(efx));
327 netif_err(efx, drv, efx->net_dev,
330 (int)EF4_LOOPBACK_PAYLOAD_LEN, LOOPBACK_MODE(efx));
336 netif_err(efx, drv, efx->net_dev,
338 LOOPBACK_MODE(efx));
344 netif_err(efx, drv, efx->net_dev,
346 LOOPBACK_MODE(efx));
352 netif_err(efx, drv, efx->net_dev,
355 ntohs(payload->iteration), LOOPBACK_MODE(efx));
360 netif_vdbg(efx, drv, efx->net_dev,
361 "got loopback RX in %s loopback test\n", LOOPBACK_MODE(efx));
369 netif_err(efx, drv, efx->net_dev, "received packet:\n");
372 netif_err(efx, drv, efx->net_dev, "expected packet:\n");
382 static void ef4_iterate_state(struct ef4_nic *efx)
384 struct ef4_loopback_state *state = efx->loopback_selftest;
385 struct net_device *net_dev = efx->net_dev;
420 struct ef4_nic *efx = tx_queue->efx;
421 struct ef4_loopback_state *state = efx->loopback_selftest;
451 netif_tx_lock_bh(efx->net_dev);
453 netif_tx_unlock_bh(efx->net_dev);
456 netif_err(efx, drv, efx->net_dev,
460 LOOPBACK_MODE(efx));
471 static int ef4_poll_loopback(struct ef4_nic *efx)
473 struct ef4_loopback_state *state = efx->loopback_selftest;
481 struct ef4_nic *efx = tx_queue->efx;
482 struct ef4_loopback_state *state = efx->loopback_selftest;
487 netif_tx_lock_bh(efx->net_dev);
498 netif_tx_unlock_bh(efx->net_dev);
507 netif_err(efx, drv, efx->net_dev,
511 LOOPBACK_MODE(efx));
518 netif_dbg(efx, drv, efx->net_dev,
522 LOOPBACK_MODE(efx));
540 struct ef4_nic *efx = tx_queue->efx;
541 struct ef4_loopback_state *state = efx->loopback_selftest;
546 state->packet_count = efx->txq_entries / 3;
554 netif_dbg(efx, drv, efx->net_dev,
556 tx_queue->queue, LOOPBACK_MODE(efx),
559 ef4_iterate_state(efx);
565 if (!ef4_poll_loopback(efx)) {
567 ef4_poll_loopback(efx);
581 netif_dbg(efx, drv, efx->net_dev,
583 "of %d packets\n", tx_queue->queue, LOOPBACK_MODE(efx),
593 static int ef4_wait_for_link(struct ef4_nic *efx)
595 struct ef4_link_state *link_state = &efx->link_state;
602 if (efx->type->monitor != NULL) {
603 mutex_lock(&efx->mac_lock);
604 efx->type->monitor(efx);
605 mutex_unlock(&efx->mac_lock);
608 mutex_lock(&efx->mac_lock);
611 link_up = !efx->type->check_mac_fault(efx);
612 mutex_unlock(&efx->mac_lock);
625 static int ef4_test_loopbacks(struct ef4_nic *efx, struct ef4_self_tests *tests,
631 ef4_get_channel(efx, efx->tx_channel_offset);
641 BUG_ON(efx->loopback_selftest);
643 efx->loopback_selftest = state;
652 mutex_lock(&efx->mac_lock);
653 efx->loopback_mode = mode;
654 rc = __ef4_reconfigure_port(efx);
655 mutex_unlock(&efx->mac_lock);
657 netif_err(efx, drv, efx->net_dev,
659 LOOPBACK_MODE(efx));
663 rc = ef4_wait_for_link(efx);
665 netif_err(efx, drv, efx->net_dev,
667 LOOPBACK_MODE(efx));
685 efx->loopback_selftest = NULL;
701 int ef4_selftest(struct ef4_nic *efx, struct ef4_self_tests *tests,
704 enum ef4_loopback_mode loopback_mode = efx->loopback_mode;
705 int phy_mode = efx->phy_mode;
708 ef4_selftest_async_cancel(efx);
713 rc = ef4_test_phy_alive(efx, tests);
717 rc = ef4_test_nvram(efx, tests);
721 rc = ef4_test_interrupts(efx, tests);
725 rc = ef4_test_eventq_irq(efx, tests);
733 return ef4_test_phy(efx, tests, flags);
741 ef4_device_detach_sync(efx);
743 if (efx->type->test_chip) {
744 rc_reset = efx->type->test_chip(efx, tests);
746 netif_err(efx, hw, efx->net_dev,
748 ef4_schedule_reset(efx, RESET_TYPE_DISABLE);
758 mutex_lock(&efx->mac_lock);
759 efx->phy_mode &= ~PHY_MODE_LOW_POWER;
760 efx->loopback_mode = LOOPBACK_NONE;
761 __ef4_reconfigure_port(efx);
762 mutex_unlock(&efx->mac_lock);
764 rc = ef4_test_phy(efx, tests, flags);
768 rc = ef4_test_loopbacks(efx, tests, efx->loopback_modes);
773 mutex_lock(&efx->mac_lock);
774 efx->phy_mode = phy_mode;
775 efx->loopback_mode = loopback_mode;
776 __ef4_reconfigure_port(efx);
777 mutex_unlock(&efx->mac_lock);
779 netif_device_attach(efx->net_dev);
784 void ef4_selftest_async_start(struct ef4_nic *efx)
788 ef4_for_each_channel(channel, efx)
790 schedule_delayed_work(&efx->selftest_work, IRQ_TIMEOUT);
793 void ef4_selftest_async_cancel(struct ef4_nic *efx)
795 cancel_delayed_work_sync(&efx->selftest_work);
800 struct ef4_nic *efx = container_of(data, struct ef4_nic,
805 ef4_for_each_channel(channel, efx) {
808 netif_err(efx, ifup, efx->net_dev,
812 netif_dbg(efx, ifup, efx->net_dev,