2008-05-07 16:36:19 +04:00
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005 - 2006 Fen Systems Ltd .
2011-02-25 03:01:34 +03:00
* Copyright 2006 - 2010 Solarflare Communications Inc .
2008-05-07 16:36:19 +04:00
*
* This program is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License version 2 as published
* by the Free Software Foundation , incorporated herein by reference .
*/
# ifndef EFX_SELFTEST_H
# define EFX_SELFTEST_H
# include "net_driver.h"
/*
* Self tests
*/
struct efx_loopback_self_tests {
2010-04-28 13:30:43 +04:00
int tx_sent [ EFX_TXQ_TYPES ] ;
int tx_done [ EFX_TXQ_TYPES ] ;
2008-05-07 16:36:19 +04:00
int rx_good ;
int rx_bad ;
} ;
2008-12-27 00:47:25 +03:00
# define EFX_MAX_PHY_TESTS 20
2008-05-07 16:36:19 +04:00
/* Efx self test results
* For fields which are not counters , 1 indicates success and - 1
* indicates failure .
*/
struct efx_self_tests {
2008-09-01 15:49:02 +04:00
/* online tests */
2010-02-03 12:30:50 +03:00
int phy_alive ;
2008-09-01 15:49:02 +04:00
int nvram ;
2008-05-07 16:36:19 +04:00
int interrupt ;
int eventq_dma [ EFX_MAX_CHANNELS ] ;
int eventq_int [ EFX_MAX_CHANNELS ] ;
2008-09-01 15:49:02 +04:00
/* offline tests */
int registers ;
2010-02-03 12:30:50 +03:00
int phy_ext [ EFX_MAX_PHY_TESTS ] ;
2008-09-01 15:49:02 +04:00
struct efx_loopback_self_tests loopback [ LOOPBACK_TEST_MAX + 1 ] ;
2008-05-07 16:36:19 +04:00
} ;
extern void efx_loopback_rx_packet ( struct efx_nic * efx ,
const char * buf_ptr , int pkt_len ) ;
2008-12-27 00:47:04 +03:00
extern int efx_selftest ( struct efx_nic * efx ,
struct efx_self_tests * tests ,
unsigned flags ) ;
2012-02-29 03:40:21 +04:00
extern void efx_selftest_async_start ( struct efx_nic * efx ) ;
extern void efx_selftest_async_cancel ( struct efx_nic * efx ) ;
extern void efx_selftest_async_work ( struct work_struct * data ) ;
2008-05-07 16:36:19 +04:00
# endif /* EFX_SELFTEST_H */