1 /****************************************************************************
 
   2  * Driver for Solarflare Solarstorm network controllers and boards
 
   3  * Copyright 2006 Solarflare Communications Inc.
 
   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.
 
  13 /* Exported functions from Xenpack standard PHY control */
 
  17 /****************************************************************************/
 
  18 /* XENPACK MDIO register extensions */
 
  19 #define MDIO_XP_LASI_RX_CTRL    (0x9000)
 
  20 #define MDIO_XP_LASI_TX_CTRL    (0x9001)
 
  21 #define MDIO_XP_LASI_CTRL       (0x9002)
 
  22 #define MDIO_XP_LASI_RX_STAT    (0x9003)
 
  23 #define MDIO_XP_LASI_TX_STAT    (0x9004)
 
  24 #define MDIO_XP_LASI_STAT       (0x9005)
 
  26 /* Control/Status bits */
 
  27 #define XP_LASI_LS_ALARM        (1 << 0)
 
  28 #define XP_LASI_TX_ALARM        (1 << 1)
 
  29 #define XP_LASI_RX_ALARM        (1 << 2)
 
  30 /* These two are Quake vendor extensions to the standard XENPACK defines */
 
  31 #define XP_LASI_LS_INTB         (1 << 3)
 
  32 #define XP_LASI_TEST            (1 << 7)
 
  34 /* Enable LASI interrupts for PHY */
 
  35 static inline void xenpack_enable_lasi_irqs(struct efx_nic *efx)
 
  38         int phy_id = efx->mii.phy_id;
 
  39         /* Read to clear LASI status register */
 
  40         reg = mdio_clause45_read(efx, phy_id, MDIO_MMD_PMAPMD,
 
  43         mdio_clause45_write(efx, phy_id, MDIO_MMD_PMAPMD,
 
  44                             MDIO_XP_LASI_CTRL, XP_LASI_LS_ALARM);
 
  47 /* Read the LASI interrupt status to clear the interrupt. */
 
  48 static inline int xenpack_clear_lasi_irqs(struct efx_nic *efx)
 
  50         /* Read to clear link status alarm */
 
  51         return mdio_clause45_read(efx, efx->mii.phy_id,
 
  52                                   MDIO_MMD_PMAPMD, MDIO_XP_LASI_STAT);
 
  55 /* Turn off LASI interrupts */
 
  56 static inline void xenpack_disable_lasi_irqs(struct efx_nic *efx)
 
  58         mdio_clause45_write(efx, efx->mii.phy_id, MDIO_MMD_PMAPMD,
 
  59                             MDIO_XP_LASI_CTRL, 0);
 
  62 #endif /* EFX_XENPACK_H */