xenpack.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /****************************************************************************
  2. * Driver for Solarflare Solarstorm network controllers and boards
  3. * Copyright 2006 Solarflare Communications Inc.
  4. *
  5. * This program is free software; you can redistribute it and/or modify it
  6. * under the terms of the GNU General Public License version 2 as published
  7. * by the Free Software Foundation, incorporated herein by reference.
  8. */
  9. #ifndef EFX_XENPACK_H
  10. #define EFX_XENPACK_H
  11. /* Exported functions from Xenpack standard PHY control */
  12. #include "mdio_10g.h"
  13. /****************************************************************************/
  14. /* XENPACK MDIO register extensions */
  15. #define MDIO_XP_LASI_RX_CTRL (0x9000)
  16. #define MDIO_XP_LASI_TX_CTRL (0x9001)
  17. #define MDIO_XP_LASI_CTRL (0x9002)
  18. #define MDIO_XP_LASI_RX_STAT (0x9003)
  19. #define MDIO_XP_LASI_TX_STAT (0x9004)
  20. #define MDIO_XP_LASI_STAT (0x9005)
  21. /* Control/Status bits */
  22. #define XP_LASI_LS_ALARM (1 << 0)
  23. #define XP_LASI_TX_ALARM (1 << 1)
  24. #define XP_LASI_RX_ALARM (1 << 2)
  25. /* These two are Quake vendor extensions to the standard XENPACK defines */
  26. #define XP_LASI_LS_INTB (1 << 3)
  27. #define XP_LASI_TEST (1 << 7)
  28. /* Enable LASI interrupts for PHY */
  29. static inline void xenpack_enable_lasi_irqs(struct efx_nic *efx)
  30. {
  31. int reg;
  32. int phy_id = efx->mii.phy_id;
  33. /* Read to clear LASI status register */
  34. reg = mdio_clause45_read(efx, phy_id, MDIO_MMD_PMAPMD,
  35. MDIO_XP_LASI_STAT);
  36. mdio_clause45_write(efx, phy_id, MDIO_MMD_PMAPMD,
  37. MDIO_XP_LASI_CTRL, XP_LASI_LS_ALARM);
  38. }
  39. /* Read the LASI interrupt status to clear the interrupt. */
  40. static inline int xenpack_clear_lasi_irqs(struct efx_nic *efx)
  41. {
  42. /* Read to clear link status alarm */
  43. return mdio_clause45_read(efx, efx->mii.phy_id,
  44. MDIO_MMD_PMAPMD, MDIO_XP_LASI_STAT);
  45. }
  46. /* Turn off LASI interrupts */
  47. static inline void xenpack_disable_lasi_irqs(struct efx_nic *efx)
  48. {
  49. mdio_clause45_write(efx, efx->mii.phy_id, MDIO_MMD_PMAPMD,
  50. MDIO_XP_LASI_CTRL, 0);
  51. }
  52. #endif /* EFX_XENPACK_H */