diff options
Diffstat (limited to 'drivers/net/sfc/xenpack.h')
-rw-r--r-- | drivers/net/sfc/xenpack.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/drivers/net/sfc/xenpack.h b/drivers/net/sfc/xenpack.h new file mode 100644 index 000000000000..b0d1f225b70a --- /dev/null +++ b/drivers/net/sfc/xenpack.h | |||
@@ -0,0 +1,62 @@ | |||
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 */ | ||