selftest.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /****************************************************************************
  2. * Driver for Solarflare network controllers and boards
  3. * Copyright 2005-2006 Fen Systems Ltd.
  4. * Copyright 2006-2012 Solarflare Communications Inc.
  5. *
  6. * This program is free software; you can redistribute it and/or modify it
  7. * under the terms of the GNU General Public License version 2 as published
  8. * by the Free Software Foundation, incorporated herein by reference.
  9. */
  10. #ifndef EFX_SELFTEST_H
  11. #define EFX_SELFTEST_H
  12. #include "net_driver.h"
  13. /*
  14. * Self tests
  15. */
  16. struct efx_loopback_self_tests {
  17. int tx_sent[EFX_TXQ_TYPES];
  18. int tx_done[EFX_TXQ_TYPES];
  19. int rx_good;
  20. int rx_bad;
  21. };
  22. #define EFX_MAX_PHY_TESTS 20
  23. /* Efx self test results
  24. * For fields which are not counters, 1 indicates success and -1
  25. * indicates failure; 0 indicates test could not be run.
  26. */
  27. struct efx_self_tests {
  28. /* online tests */
  29. int phy_alive;
  30. int nvram;
  31. int interrupt;
  32. int eventq_dma[EFX_MAX_CHANNELS];
  33. int eventq_int[EFX_MAX_CHANNELS];
  34. /* offline tests */
  35. int memory;
  36. int registers;
  37. int phy_ext[EFX_MAX_PHY_TESTS];
  38. struct efx_loopback_self_tests loopback[LOOPBACK_TEST_MAX + 1];
  39. };
  40. void efx_loopback_rx_packet(struct efx_nic *efx, const char *buf_ptr,
  41. int pkt_len);
  42. int efx_selftest(struct efx_nic *efx, struct efx_self_tests *tests,
  43. unsigned flags);
  44. void efx_selftest_async_start(struct efx_nic *efx);
  45. void efx_selftest_async_cancel(struct efx_nic *efx);
  46. void efx_selftest_async_work(struct work_struct *data);
  47. #endif /* EFX_SELFTEST_H */