| #ifndef __BACKPORT_LINUX_MDIO_H |
| #define __BACKPORT_LINUX_MDIO_H |
| #include_next <linux/mdio.h> |
| |
| #ifndef MDIO_EEE_100TX |
| /* EEE Supported/Advertisement/LP Advertisement registers. |
| * |
| * EEE capability Register (3.20), Advertisement (7.60) and |
| * Link partner ability (7.61) registers have and can use the same identical |
| * bit masks. |
| */ |
| #define MDIO_AN_EEE_ADV_100TX 0x0002 /* Advertise 100TX EEE cap */ |
| #define MDIO_AN_EEE_ADV_1000T 0x0004 /* Advertise 1000T EEE cap */ |
| /* Note: the two defines above can be potentially used by the user-land |
| * and cannot remove them now. |
| * So, we define the new generic MDIO_EEE_100TX and MDIO_EEE_1000T macros |
| * using the previous ones (that can be considered obsolete). |
| */ |
| #define MDIO_EEE_100TX MDIO_AN_EEE_ADV_100TX /* 100TX EEE cap */ |
| #define MDIO_EEE_1000T MDIO_AN_EEE_ADV_1000T /* 1000T EEE cap */ |
| #define MDIO_EEE_10GT 0x0008 /* 10GT EEE cap */ |
| #define MDIO_EEE_1000KX 0x0010 /* 1000KX EEE cap */ |
| #define MDIO_EEE_10GKX4 0x0020 /* 10G KX4 EEE cap */ |
| #define MDIO_EEE_10GKR 0x0040 /* 10G KR EEE cap */ |
| #endif /* MDIO_EEE_100TX */ |
| |
| #if LINUX_VERSION_CODE < KERNEL_VERSION(3,7,0) |
| /** |
| * mmd_eee_adv_to_ethtool_adv_t |
| * @eee_adv: value of the MMD EEE Advertisement/Link Partner Ability registers |
| * |
| * A small helper function that translates the MMD EEE Advertisment (7.60) |
| * and MMD EEE Link Partner Ability (7.61) bits to ethtool advertisement |
| * settings. |
| */ |
| #define mmd_eee_adv_to_ethtool_adv_t LINUX_BACKPORT(mmd_eee_adv_to_ethtool_adv_t) |
| static inline u32 mmd_eee_adv_to_ethtool_adv_t(u16 eee_adv) |
| { |
| u32 adv = 0; |
| |
| if (eee_adv & MDIO_EEE_100TX) |
| adv |= ADVERTISED_100baseT_Full; |
| if (eee_adv & MDIO_EEE_1000T) |
| adv |= ADVERTISED_1000baseT_Full; |
| if (eee_adv & MDIO_EEE_10GT) |
| adv |= ADVERTISED_10000baseT_Full; |
| if (eee_adv & MDIO_EEE_1000KX) |
| adv |= ADVERTISED_1000baseKX_Full; |
| if (eee_adv & MDIO_EEE_10GKX4) |
| adv |= ADVERTISED_10000baseKX4_Full; |
| if (eee_adv & MDIO_EEE_10GKR) |
| adv |= ADVERTISED_10000baseKR_Full; |
| |
| return adv; |
| } |
| |
| #define ethtool_adv_to_mmd_eee_adv_t LINUX_BACKPORT(ethtool_adv_to_mmd_eee_adv_t) |
| /** |
| * ethtool_adv_to_mmd_eee_adv_t |
| * @adv: the ethtool advertisement settings |
| * |
| * A small helper function that translates ethtool advertisement settings |
| * to EEE advertisements for the MMD EEE Advertisement (7.60) and |
| * MMD EEE Link Partner Ability (7.61) registers. |
| */ |
| static inline u16 ethtool_adv_to_mmd_eee_adv_t(u32 adv) |
| { |
| u16 reg = 0; |
| |
| if (adv & ADVERTISED_100baseT_Full) |
| reg |= MDIO_EEE_100TX; |
| if (adv & ADVERTISED_1000baseT_Full) |
| reg |= MDIO_EEE_1000T; |
| if (adv & ADVERTISED_10000baseT_Full) |
| reg |= MDIO_EEE_10GT; |
| if (adv & ADVERTISED_1000baseKX_Full) |
| reg |= MDIO_EEE_1000KX; |
| if (adv & ADVERTISED_10000baseKX4_Full) |
| reg |= MDIO_EEE_10GKX4; |
| if (adv & ADVERTISED_10000baseKR_Full) |
| reg |= MDIO_EEE_10GKR; |
| |
| return reg; |
| } |
| #endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,7,0) */ |
| |
| #endif /* __BACKPORT_LINUX_MDIO_H */ |