]>
Commit | Line | Data |
---|---|---|
8ceee660 BH |
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 | ||
10 | #ifndef EFX_XENPACK_H | |
11 | #define EFX_XENPACK_H | |
12 | ||
13 | /* Exported functions from Xenpack standard PHY control */ | |
14 | ||
15 | #include "mdio_10g.h" | |
16 | ||
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) | |
25 | ||
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) | |
33 | ||
34 | /* Enable LASI interrupts for PHY */ | |
35 | static inline void xenpack_enable_lasi_irqs(struct efx_nic *efx) | |
36 | { | |
37 | int reg; | |
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, | |
41 | MDIO_XP_LASI_STAT); | |
42 | ||
43 | mdio_clause45_write(efx, phy_id, MDIO_MMD_PMAPMD, | |
44 | MDIO_XP_LASI_CTRL, XP_LASI_LS_ALARM); | |
45 | } | |
46 | ||
47 | /* Read the LASI interrupt status to clear the interrupt. */ | |
48 | static inline int xenpack_clear_lasi_irqs(struct efx_nic *efx) | |
49 | { | |
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); | |
53 | } | |
54 | ||
55 | /* Turn off LASI interrupts */ | |
56 | static inline void xenpack_disable_lasi_irqs(struct efx_nic *efx) | |
57 | { | |
58 | mdio_clause45_write(efx, efx->mii.phy_id, MDIO_MMD_PMAPMD, | |
59 | MDIO_XP_LASI_CTRL, 0); | |
60 | } | |
61 | ||
62 | #endif /* EFX_XENPACK_H */ |