diff options
| -rw-r--r-- | drivers/net/bnx2x_main.c | 69 |
1 files changed, 33 insertions, 36 deletions
diff --git a/drivers/net/bnx2x_main.c b/drivers/net/bnx2x_main.c index f1bd0a32cc30..276d8467b8c1 100644 --- a/drivers/net/bnx2x_main.c +++ b/drivers/net/bnx2x_main.c | |||
| @@ -8947,50 +8947,15 @@ static int bnx2x_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) | |||
| 8947 | return 0; | 8947 | return 0; |
| 8948 | } | 8948 | } |
| 8949 | 8949 | ||
| 8950 | #define PHY_FW_VER_LEN 10 | ||
| 8951 | |||
| 8952 | static void bnx2x_get_drvinfo(struct net_device *dev, | ||
| 8953 | struct ethtool_drvinfo *info) | ||
| 8954 | { | ||
| 8955 | struct bnx2x *bp = netdev_priv(dev); | ||
| 8956 | u8 phy_fw_ver[PHY_FW_VER_LEN]; | ||
| 8957 | |||
| 8958 | strcpy(info->driver, DRV_MODULE_NAME); | ||
| 8959 | strcpy(info->version, DRV_MODULE_VERSION); | ||
| 8960 | |||
| 8961 | phy_fw_ver[0] = '\0'; | ||
| 8962 | if (bp->port.pmf) { | ||
| 8963 | bnx2x_acquire_phy_lock(bp); | ||
| 8964 | bnx2x_get_ext_phy_fw_version(&bp->link_params, | ||
| 8965 | (bp->state != BNX2X_STATE_CLOSED), | ||
| 8966 | phy_fw_ver, PHY_FW_VER_LEN); | ||
| 8967 | bnx2x_release_phy_lock(bp); | ||
| 8968 | } | ||
| 8969 | |||
| 8970 | snprintf(info->fw_version, 32, "BC:%d.%d.%d%s%s", | ||
| 8971 | (bp->common.bc_ver & 0xff0000) >> 16, | ||
| 8972 | (bp->common.bc_ver & 0xff00) >> 8, | ||
| 8973 | (bp->common.bc_ver & 0xff), | ||
| 8974 | ((phy_fw_ver[0] != '\0') ? " PHY:" : ""), phy_fw_ver); | ||
| 8975 | strcpy(info->bus_info, pci_name(bp->pdev)); | ||
| 8976 | info->n_stats = BNX2X_NUM_STATS; | ||
| 8977 | info->testinfo_len = BNX2X_NUM_TESTS; | ||
| 8978 | info->eedump_len = bp->common.flash_size; | ||
| 8979 | info->regdump_len = 0; | ||
| 8980 | } | ||
| 8981 | |||
| 8982 | #define IS_E1_ONLINE(info) (((info) & RI_E1_ONLINE) == RI_E1_ONLINE) | 8950 | #define IS_E1_ONLINE(info) (((info) & RI_E1_ONLINE) == RI_E1_ONLINE) |
| 8983 | #define IS_E1H_ONLINE(info) (((info) & RI_E1H_ONLINE) == RI_E1H_ONLINE) | 8951 | #define IS_E1H_ONLINE(info) (((info) & RI_E1H_ONLINE) == RI_E1H_ONLINE) |
| 8984 | 8952 | ||
| 8985 | static int bnx2x_get_regs_len(struct net_device *dev) | 8953 | static int bnx2x_get_regs_len(struct net_device *dev) |
| 8986 | { | 8954 | { |
| 8987 | static u32 regdump_len; | ||
| 8988 | struct bnx2x *bp = netdev_priv(dev); | 8955 | struct bnx2x *bp = netdev_priv(dev); |
| 8956 | int regdump_len = 0; | ||
| 8989 | int i; | 8957 | int i; |
| 8990 | 8958 | ||
| 8991 | if (regdump_len) | ||
| 8992 | return regdump_len; | ||
| 8993 | |||
| 8994 | if (CHIP_IS_E1(bp)) { | 8959 | if (CHIP_IS_E1(bp)) { |
| 8995 | for (i = 0; i < REGS_COUNT; i++) | 8960 | for (i = 0; i < REGS_COUNT; i++) |
| 8996 | if (IS_E1_ONLINE(reg_addrs[i].info)) | 8961 | if (IS_E1_ONLINE(reg_addrs[i].info)) |
| @@ -9057,6 +9022,38 @@ static void bnx2x_get_regs(struct net_device *dev, | |||
| 9057 | } | 9022 | } |
| 9058 | } | 9023 | } |
| 9059 | 9024 | ||
| 9025 | #define PHY_FW_VER_LEN 10 | ||
| 9026 | |||
| 9027 | static void bnx2x_get_drvinfo(struct net_device *dev, | ||
| 9028 | struct ethtool_drvinfo *info) | ||
| 9029 | { | ||
| 9030 | struct bnx2x *bp = netdev_priv(dev); | ||
| 9031 | u8 phy_fw_ver[PHY_FW_VER_LEN]; | ||
| 9032 | |||
| 9033 | strcpy(info->driver, DRV_MODULE_NAME); | ||
| 9034 | strcpy(info->version, DRV_MODULE_VERSION); | ||
| 9035 | |||
| 9036 | phy_fw_ver[0] = '\0'; | ||
| 9037 | if (bp->port.pmf) { | ||
| 9038 | bnx2x_acquire_phy_lock(bp); | ||
| 9039 | bnx2x_get_ext_phy_fw_version(&bp->link_params, | ||
| 9040 | (bp->state != BNX2X_STATE_CLOSED), | ||
| 9041 | phy_fw_ver, PHY_FW_VER_LEN); | ||
| 9042 | bnx2x_release_phy_lock(bp); | ||
| 9043 | } | ||
| 9044 | |||
| 9045 | snprintf(info->fw_version, 32, "BC:%d.%d.%d%s%s", | ||
| 9046 | (bp->common.bc_ver & 0xff0000) >> 16, | ||
| 9047 | (bp->common.bc_ver & 0xff00) >> 8, | ||
| 9048 | (bp->common.bc_ver & 0xff), | ||
| 9049 | ((phy_fw_ver[0] != '\0') ? " PHY:" : ""), phy_fw_ver); | ||
| 9050 | strcpy(info->bus_info, pci_name(bp->pdev)); | ||
| 9051 | info->n_stats = BNX2X_NUM_STATS; | ||
| 9052 | info->testinfo_len = BNX2X_NUM_TESTS; | ||
| 9053 | info->eedump_len = bp->common.flash_size; | ||
| 9054 | info->regdump_len = bnx2x_get_regs_len(dev); | ||
| 9055 | } | ||
| 9056 | |||
| 9060 | static void bnx2x_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) | 9057 | static void bnx2x_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) |
| 9061 | { | 9058 | { |
| 9062 | struct bnx2x *bp = netdev_priv(dev); | 9059 | struct bnx2x *bp = netdev_priv(dev); |
