|
@@ -5546,11 +5546,7 @@ bnx2_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
|
|
strcpy(info->driver, DRV_MODULE_NAME);
|
|
strcpy(info->driver, DRV_MODULE_NAME);
|
|
strcpy(info->version, DRV_MODULE_VERSION);
|
|
strcpy(info->version, DRV_MODULE_VERSION);
|
|
strcpy(info->bus_info, pci_name(bp->pdev));
|
|
strcpy(info->bus_info, pci_name(bp->pdev));
|
|
- info->fw_version[0] = ((bp->fw_ver & 0xff000000) >> 24) + '0';
|
|
|
|
- info->fw_version[2] = ((bp->fw_ver & 0xff0000) >> 16) + '0';
|
|
|
|
- info->fw_version[4] = ((bp->fw_ver & 0xff00) >> 8) + '0';
|
|
|
|
- info->fw_version[1] = info->fw_version[3] = '.';
|
|
|
|
- info->fw_version[5] = 0;
|
|
|
|
|
|
+ strcpy(info->fw_version, bp->fw_version);
|
|
}
|
|
}
|
|
|
|
|
|
#define BNX2_REGDUMP_LEN (32 * 1024)
|
|
#define BNX2_REGDUMP_LEN (32 * 1024)
|
|
@@ -6462,7 +6458,7 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)
|
|
{
|
|
{
|
|
struct bnx2 *bp;
|
|
struct bnx2 *bp;
|
|
unsigned long mem_len;
|
|
unsigned long mem_len;
|
|
- int rc;
|
|
|
|
|
|
+ int rc, i, j;
|
|
u32 reg;
|
|
u32 reg;
|
|
u64 dma_mask, persist_dma_mask;
|
|
u64 dma_mask, persist_dma_mask;
|
|
|
|
|
|
@@ -6619,7 +6615,35 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)
|
|
goto err_out_unmap;
|
|
goto err_out_unmap;
|
|
}
|
|
}
|
|
|
|
|
|
- bp->fw_ver = REG_RD_IND(bp, bp->shmem_base + BNX2_DEV_INFO_BC_REV);
|
|
|
|
|
|
+ reg = REG_RD_IND(bp, bp->shmem_base + BNX2_DEV_INFO_BC_REV);
|
|
|
|
+ for (i = 0, j = 0; i < 3; i++) {
|
|
|
|
+ u8 num, k, skip0;
|
|
|
|
+
|
|
|
|
+ num = (u8) (reg >> (24 - (i * 8)));
|
|
|
|
+ for (k = 100, skip0 = 1; k >= 1; num %= k, k /= 10) {
|
|
|
|
+ if (num >= k || !skip0 || k == 1) {
|
|
|
|
+ bp->fw_version[j++] = (num / k) + '0';
|
|
|
|
+ skip0 = 0;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (i != 2)
|
|
|
|
+ bp->fw_version[j++] = '.';
|
|
|
|
+ }
|
|
|
|
+ reg = REG_RD_IND(bp, bp->shmem_base + BNX2_BC_STATE_CONDITION);
|
|
|
|
+ reg &= BNX2_CONDITION_MFW_RUN_MASK;
|
|
|
|
+ if (reg != BNX2_CONDITION_MFW_RUN_UNKNOWN &&
|
|
|
|
+ reg != BNX2_CONDITION_MFW_RUN_NONE) {
|
|
|
|
+ int i;
|
|
|
|
+ u32 addr = REG_RD_IND(bp, bp->shmem_base + BNX2_MFW_VER_PTR);
|
|
|
|
+
|
|
|
|
+ bp->fw_version[j++] = ' ';
|
|
|
|
+ for (i = 0; i < 3; i++) {
|
|
|
|
+ reg = REG_RD_IND(bp, addr + i * 4);
|
|
|
|
+ reg = swab32(reg);
|
|
|
|
+ memcpy(&bp->fw_version[j], ®, 4);
|
|
|
|
+ j += 4;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
reg = REG_RD_IND(bp, bp->shmem_base + BNX2_PORT_HW_CFG_MAC_UPPER);
|
|
reg = REG_RD_IND(bp, bp->shmem_base + BNX2_PORT_HW_CFG_MAC_UPPER);
|
|
bp->mac_addr[0] = (u8) (reg >> 8);
|
|
bp->mac_addr[0] = (u8) (reg >> 8);
|