Lines Matching refs:efx

20 #include "efx.h"
71 #define INT_MODE(efx) \
72 STRING_TABLE_LOOKUP(efx->interrupt_mode, efx_interrupt_mode)
103 static int efx_test_phy_alive(struct efx_nic *efx, struct efx_self_tests *tests)
107 rc = efx_mcdi_phy_test_alive(efx);
113 static int efx_test_nvram(struct efx_nic *efx, struct efx_self_tests *tests)
117 if (efx->type->test_nvram) {
118 rc = efx->type->test_nvram(efx);
135 static int efx_test_interrupts(struct efx_nic *efx,
142 netif_dbg(efx, drv, efx->net_dev, "testing interrupts\n");
145 rc = efx_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 = efx_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 efx_test_eventq_irq(struct efx_nic *efx,
187 efx_for_each_channel(channel, efx) {
203 efx_for_each_channel(channel, efx) {
222 efx_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 efx_test_phy(struct efx_nic *efx, struct efx_self_tests *tests,
263 mutex_lock(&efx->mac_lock);
264 rc = efx_mcdi_phy_run_tests(efx, tests->phy_ext, flags);
265 mutex_unlock(&efx->mac_lock);
269 netif_info(efx, drv, efx->net_dev,
285 void efx_loopback_rx_packet(struct efx_nic *efx,
288 struct efx_loopback_state *state = efx->loopback_selftest;
308 netif_err(efx, drv, efx->net_dev,
310 "test\n", pkt_len, LOOPBACK_MODE(efx));
316 netif_err(efx, drv, efx->net_dev,
318 LOOPBACK_MODE(efx));
324 netif_err(efx, drv, efx->net_dev,
327 (int)EFX_LOOPBACK_PAYLOAD_LEN, LOOPBACK_MODE(efx));
333 netif_err(efx, drv, efx->net_dev,
335 LOOPBACK_MODE(efx));
341 netif_err(efx, drv, efx->net_dev,
343 LOOPBACK_MODE(efx));
349 netif_err(efx, drv, efx->net_dev,
352 ntohs(payload->iteration), LOOPBACK_MODE(efx));
357 netif_vdbg(efx, drv, efx->net_dev,
358 "got loopback RX in %s loopback test\n", LOOPBACK_MODE(efx));
366 netif_err(efx, drv, efx->net_dev, "received packet:\n");
369 netif_err(efx, drv, efx->net_dev, "expected packet:\n");
379 static void efx_iterate_state(struct efx_nic *efx)
381 struct efx_loopback_state *state = efx->loopback_selftest;
382 struct net_device *net_dev = efx->net_dev;
417 struct efx_nic *efx = tx_queue->efx;
418 struct efx_loopback_state *state = efx->loopback_selftest;
448 netif_tx_lock_bh(efx->net_dev);
450 netif_tx_unlock_bh(efx->net_dev);
453 netif_err(efx, drv, efx->net_dev,
457 LOOPBACK_MODE(efx));
468 static int efx_poll_loopback(struct efx_nic *efx)
470 struct efx_loopback_state *state = efx->loopback_selftest;
478 struct efx_nic *efx = tx_queue->efx;
479 struct efx_loopback_state *state = efx->loopback_selftest;
484 netif_tx_lock_bh(efx->net_dev);
495 netif_tx_unlock_bh(efx->net_dev);
504 netif_err(efx, drv, efx->net_dev,
508 LOOPBACK_MODE(efx));
515 netif_dbg(efx, drv, efx->net_dev,
519 LOOPBACK_MODE(efx));
537 struct efx_nic *efx = tx_queue->efx;
538 struct efx_loopback_state *state = efx->loopback_selftest;
543 state->packet_count = efx->txq_entries / 3;
551 netif_dbg(efx, drv, efx->net_dev,
553 tx_queue->label, tx_queue->queue, LOOPBACK_MODE(efx),
556 efx_iterate_state(efx);
562 if (!efx_poll_loopback(efx)) {
564 efx_poll_loopback(efx);
578 netif_dbg(efx, drv, efx->net_dev,
580 "of %d packets\n", tx_queue->label, LOOPBACK_MODE(efx),
586 static int efx_wait_for_link(struct efx_nic *efx)
588 struct efx_link_state *link_state = &efx->link_state;
595 if (efx->type->monitor != NULL) {
596 mutex_lock(&efx->mac_lock);
597 efx->type->monitor(efx);
598 mutex_unlock(&efx->mac_lock);
601 mutex_lock(&efx->mac_lock);
604 link_up = !efx->type->check_mac_fault(efx);
605 mutex_unlock(&efx->mac_lock);
618 static int efx_test_loopbacks(struct efx_nic *efx, struct efx_self_tests *tests,
624 efx_get_channel(efx, efx->tx_channel_offset);
634 BUG_ON(efx->loopback_selftest);
636 efx->loopback_selftest = state;
645 mutex_lock(&efx->mac_lock);
646 efx->loopback_mode = mode;
647 rc = __efx_reconfigure_port(efx);
648 mutex_unlock(&efx->mac_lock);
650 netif_err(efx, drv, efx->net_dev,
652 LOOPBACK_MODE(efx));
656 rc = efx_wait_for_link(efx);
658 netif_err(efx, drv, efx->net_dev,
660 LOOPBACK_MODE(efx));
678 efx->loopback_selftest = NULL;
694 int efx_selftest(struct efx_nic *efx, struct efx_self_tests *tests,
697 enum efx_loopback_mode loopback_mode = efx->loopback_mode;
698 int phy_mode = efx->phy_mode;
701 efx_selftest_async_cancel(efx);
706 rc = efx_test_phy_alive(efx, tests);
710 rc = efx_test_nvram(efx, tests);
714 rc = efx_test_interrupts(efx, tests);
718 rc = efx_test_eventq_irq(efx, tests);
726 return efx_test_phy(efx, tests, flags);
734 efx_device_detach_sync(efx);
736 if (efx->type->test_chip) {
737 rc_reset = efx->type->test_chip(efx, tests);
739 netif_err(efx, hw, efx->net_dev,
741 efx_schedule_reset(efx, RESET_TYPE_DISABLE);
751 mutex_lock(&efx->mac_lock);
752 efx->phy_mode &= ~PHY_MODE_LOW_POWER;
753 efx->loopback_mode = LOOPBACK_NONE;
754 __efx_reconfigure_port(efx);
755 mutex_unlock(&efx->mac_lock);
757 rc = efx_test_phy(efx, tests, flags);
761 rc = efx_test_loopbacks(efx, tests, efx->loopback_modes);
766 mutex_lock(&efx->mac_lock);
767 efx->phy_mode = phy_mode;
768 efx->loopback_mode = loopback_mode;
769 __efx_reconfigure_port(efx);
770 mutex_unlock(&efx->mac_lock);
772 efx_device_attach_if_not_resetting(efx);
777 void efx_selftest_async_start(struct efx_nic *efx)
781 efx_for_each_channel(channel, efx)
783 schedule_delayed_work(&efx->selftest_work, IRQ_TIMEOUT);
786 void efx_selftest_async_cancel(struct efx_nic *efx)
788 cancel_delayed_work_sync(&efx->selftest_work);
793 struct efx_nic *efx = container_of(data, struct efx_nic,
798 efx_for_each_channel(channel, efx) {
801 netif_err(efx, ifup, efx->net_dev,
805 netif_dbg(efx, ifup, efx->net_dev,
811 void efx_selftest_async_init(struct efx_nic *efx)
813 INIT_DELAYED_WORK(&efx->selftest_work, efx_selftest_async_work);