1d2912cb1SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 2874aeea5SJeff Kirsher /**************************************************************************** 3f7a6d2c4SBen Hutchings * Driver for Solarflare network controllers and boards 4874aeea5SJeff Kirsher * Copyright 2005-2006 Fen Systems Ltd. 5f7a6d2c4SBen Hutchings * Copyright 2006-2012 Solarflare Communications Inc. 6874aeea5SJeff Kirsher */ 7874aeea5SJeff Kirsher 8874aeea5SJeff Kirsher #ifndef EFX_SELFTEST_H 9874aeea5SJeff Kirsher #define EFX_SELFTEST_H 10874aeea5SJeff Kirsher 11874aeea5SJeff Kirsher #include "net_driver.h" 12874aeea5SJeff Kirsher 13874aeea5SJeff Kirsher /* 14874aeea5SJeff Kirsher * Self tests 15874aeea5SJeff Kirsher */ 16874aeea5SJeff Kirsher 17874aeea5SJeff Kirsher struct efx_loopback_self_tests { 18*12804793SEdward Cree int tx_sent[EFX_MAX_TXQ_PER_CHANNEL]; 19*12804793SEdward Cree int tx_done[EFX_MAX_TXQ_PER_CHANNEL]; 20874aeea5SJeff Kirsher int rx_good; 21874aeea5SJeff Kirsher int rx_bad; 22874aeea5SJeff Kirsher }; 23874aeea5SJeff Kirsher 24874aeea5SJeff Kirsher #define EFX_MAX_PHY_TESTS 20 25874aeea5SJeff Kirsher 26874aeea5SJeff Kirsher /* Efx self test results 27874aeea5SJeff Kirsher * For fields which are not counters, 1 indicates success and -1 28942e298eSJon Cooper * indicates failure; 0 indicates test could not be run. 29874aeea5SJeff Kirsher */ 30874aeea5SJeff Kirsher struct efx_self_tests { 31874aeea5SJeff Kirsher /* online tests */ 32874aeea5SJeff Kirsher int phy_alive; 33874aeea5SJeff Kirsher int nvram; 34874aeea5SJeff Kirsher int interrupt; 35874aeea5SJeff Kirsher int eventq_dma[EFX_MAX_CHANNELS]; 36874aeea5SJeff Kirsher int eventq_int[EFX_MAX_CHANNELS]; 37874aeea5SJeff Kirsher /* offline tests */ 3874cd60a4SJon Cooper int memory; 39874aeea5SJeff Kirsher int registers; 40874aeea5SJeff Kirsher int phy_ext[EFX_MAX_PHY_TESTS]; 41874aeea5SJeff Kirsher struct efx_loopback_self_tests loopback[LOOPBACK_TEST_MAX + 1]; 42874aeea5SJeff Kirsher }; 43874aeea5SJeff Kirsher 4400aef986SJoe Perches void efx_loopback_rx_packet(struct efx_nic *efx, const char *buf_ptr, 4500aef986SJoe Perches int pkt_len); 4600aef986SJoe Perches int efx_selftest(struct efx_nic *efx, struct efx_self_tests *tests, 47874aeea5SJeff Kirsher unsigned flags); 4886de7cedSAlex Maftei (amaftei) void efx_selftest_async_init(struct efx_nic *efx); 4900aef986SJoe Perches void efx_selftest_async_start(struct efx_nic *efx); 5000aef986SJoe Perches void efx_selftest_async_cancel(struct efx_nic *efx); 51874aeea5SJeff Kirsher 52874aeea5SJeff Kirsher #endif /* EFX_SELFTEST_H */ 53