diff options
Diffstat (limited to 'drivers/net/bnx2.c')
-rw-r--r-- | drivers/net/bnx2.c | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c index e7551040b096..406b2e16052e 100644 --- a/drivers/net/bnx2.c +++ b/drivers/net/bnx2.c | |||
@@ -5546,11 +5546,7 @@ bnx2_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) | |||
5546 | strcpy(info->driver, DRV_MODULE_NAME); | 5546 | strcpy(info->driver, DRV_MODULE_NAME); |
5547 | strcpy(info->version, DRV_MODULE_VERSION); | 5547 | strcpy(info->version, DRV_MODULE_VERSION); |
5548 | strcpy(info->bus_info, pci_name(bp->pdev)); | 5548 | strcpy(info->bus_info, pci_name(bp->pdev)); |
5549 | info->fw_version[0] = ((bp->fw_ver & 0xff000000) >> 24) + '0'; | 5549 | strcpy(info->fw_version, bp->fw_version); |
5550 | info->fw_version[2] = ((bp->fw_ver & 0xff0000) >> 16) + '0'; | ||
5551 | info->fw_version[4] = ((bp->fw_ver & 0xff00) >> 8) + '0'; | ||
5552 | info->fw_version[1] = info->fw_version[3] = '.'; | ||
5553 | info->fw_version[5] = 0; | ||
5554 | } | 5550 | } |
5555 | 5551 | ||
5556 | #define BNX2_REGDUMP_LEN (32 * 1024) | 5552 | #define BNX2_REGDUMP_LEN (32 * 1024) |
@@ -6462,7 +6458,7 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev) | |||
6462 | { | 6458 | { |
6463 | struct bnx2 *bp; | 6459 | struct bnx2 *bp; |
6464 | unsigned long mem_len; | 6460 | unsigned long mem_len; |
6465 | int rc; | 6461 | int rc, i, j; |
6466 | u32 reg; | 6462 | u32 reg; |
6467 | u64 dma_mask, persist_dma_mask; | 6463 | u64 dma_mask, persist_dma_mask; |
6468 | 6464 | ||
@@ -6619,7 +6615,35 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev) | |||
6619 | goto err_out_unmap; | 6615 | goto err_out_unmap; |
6620 | } | 6616 | } |
6621 | 6617 | ||
6622 | bp->fw_ver = REG_RD_IND(bp, bp->shmem_base + BNX2_DEV_INFO_BC_REV); | 6618 | reg = REG_RD_IND(bp, bp->shmem_base + BNX2_DEV_INFO_BC_REV); |
6619 | for (i = 0, j = 0; i < 3; i++) { | ||
6620 | u8 num, k, skip0; | ||
6621 | |||
6622 | num = (u8) (reg >> (24 - (i * 8))); | ||
6623 | for (k = 100, skip0 = 1; k >= 1; num %= k, k /= 10) { | ||
6624 | if (num >= k || !skip0 || k == 1) { | ||
6625 | bp->fw_version[j++] = (num / k) + '0'; | ||
6626 | skip0 = 0; | ||
6627 | } | ||
6628 | } | ||
6629 | if (i != 2) | ||
6630 | bp->fw_version[j++] = '.'; | ||
6631 | } | ||
6632 | reg = REG_RD_IND(bp, bp->shmem_base + BNX2_BC_STATE_CONDITION); | ||
6633 | reg &= BNX2_CONDITION_MFW_RUN_MASK; | ||
6634 | if (reg != BNX2_CONDITION_MFW_RUN_UNKNOWN && | ||
6635 | reg != BNX2_CONDITION_MFW_RUN_NONE) { | ||
6636 | int i; | ||
6637 | u32 addr = REG_RD_IND(bp, bp->shmem_base + BNX2_MFW_VER_PTR); | ||
6638 | |||
6639 | bp->fw_version[j++] = ' '; | ||
6640 | for (i = 0; i < 3; i++) { | ||
6641 | reg = REG_RD_IND(bp, addr + i * 4); | ||
6642 | reg = swab32(reg); | ||
6643 | memcpy(&bp->fw_version[j], ®, 4); | ||
6644 | j += 4; | ||
6645 | } | ||
6646 | } | ||
6623 | 6647 | ||
6624 | reg = REG_RD_IND(bp, bp->shmem_base + BNX2_PORT_HW_CFG_MAC_UPPER); | 6648 | reg = REG_RD_IND(bp, bp->shmem_base + BNX2_PORT_HW_CFG_MAC_UPPER); |
6625 | bp->mac_addr[0] = (u8) (reg >> 8); | 6649 | bp->mac_addr[0] = (u8) (reg >> 8); |