xref: /linux/drivers/net/ethernet/sfc/selftest.h (revision 12804793)
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