| /* SPDX-License-Identifier: GPL-2.0-only */ |
| /**************************************************************************** |
| * Driver for Solarflare network controllers and boards |
| * Copyright 2005-2006 Fen Systems Ltd. |
| * Copyright 2006-2012 Solarflare Communications Inc. |
| */ |
| |
| #ifndef EFX_SELFTEST_H |
| #define EFX_SELFTEST_H |
| |
| #include "net_driver.h" |
| |
| /* |
| * Self tests |
| */ |
| |
| struct efx_loopback_self_tests { |
| int tx_sent[EFX_TXQ_TYPES]; |
| int tx_done[EFX_TXQ_TYPES]; |
| int rx_good; |
| int rx_bad; |
| }; |
| |
| #define EFX_MAX_PHY_TESTS 20 |
| |
| /* Efx self test results |
| * For fields which are not counters, 1 indicates success and -1 |
| * indicates failure; 0 indicates test could not be run. |
| */ |
| struct efx_self_tests { |
| /* online tests */ |
| int phy_alive; |
| int nvram; |
| int interrupt; |
| int eventq_dma[EFX_MAX_CHANNELS]; |
| int eventq_int[EFX_MAX_CHANNELS]; |
| /* offline tests */ |
| int memory; |
| int registers; |
| int phy_ext[EFX_MAX_PHY_TESTS]; |
| struct efx_loopback_self_tests loopback[LOOPBACK_TEST_MAX + 1]; |
| }; |
| |
| void efx_loopback_rx_packet(struct efx_nic *efx, const char *buf_ptr, |
| int pkt_len); |
| int efx_selftest(struct efx_nic *efx, struct efx_self_tests *tests, |
| unsigned flags); |
| void efx_selftest_async_start(struct efx_nic *efx); |
| void efx_selftest_async_cancel(struct efx_nic *efx); |
| void efx_selftest_async_work(struct work_struct *data); |
| |
| #endif /* EFX_SELFTEST_H */ |