aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2011-11-21 13:50:33 -0500
committerDavid S. Miller <davem@davemloft.net>2011-11-21 13:50:33 -0500
commitefd0bf97deeddd9ba53daabfc470a1399c6b0b2d (patch)
treeeec56da5fbc796bac7c67f1990a18f5e0a304059 /drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
parentf8a15af093b19b86d56933c8757cee298d0f32a8 (diff)
parent6fe4c6d466e95d31164f14b1ac4aefb51f0f4f82 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
The forcedeth changes had a conflict with the conversion over to atomic u64 statistics in net-next. The libertas cfg.c code had a conflict with the bss reference counting fix by John Linville in net-next. Conflicts: drivers/net/ethernet/nvidia/forcedeth.c drivers/net/wireless/libertas/cfg.c
Diffstat (limited to 'drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c')
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c50
1 files changed, 29 insertions, 21 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
index 9090afc7532b..83481e20f144 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
@@ -10574,33 +10574,38 @@ do { \
10574 10574
10575int bnx2x_init_firmware(struct bnx2x *bp) 10575int bnx2x_init_firmware(struct bnx2x *bp)
10576{ 10576{
10577 const char *fw_file_name;
10578 struct bnx2x_fw_file_hdr *fw_hdr; 10577 struct bnx2x_fw_file_hdr *fw_hdr;
10579 int rc; 10578 int rc;
10580 10579
10581 if (CHIP_IS_E1(bp))
10582 fw_file_name = FW_FILE_NAME_E1;
10583 else if (CHIP_IS_E1H(bp))
10584 fw_file_name = FW_FILE_NAME_E1H;
10585 else if (!CHIP_IS_E1x(bp))
10586 fw_file_name = FW_FILE_NAME_E2;
10587 else {
10588 BNX2X_ERR("Unsupported chip revision\n");
10589 return -EINVAL;
10590 }
10591 10580
10592 BNX2X_DEV_INFO("Loading %s\n", fw_file_name); 10581 if (!bp->firmware) {
10582 const char *fw_file_name;
10593 10583
10594 rc = request_firmware(&bp->firmware, fw_file_name, &bp->pdev->dev); 10584 if (CHIP_IS_E1(bp))
10595 if (rc) { 10585 fw_file_name = FW_FILE_NAME_E1;
10596 BNX2X_ERR("Can't load firmware file %s\n", fw_file_name); 10586 else if (CHIP_IS_E1H(bp))
10597 goto request_firmware_exit; 10587 fw_file_name = FW_FILE_NAME_E1H;
10598 } 10588 else if (!CHIP_IS_E1x(bp))
10589 fw_file_name = FW_FILE_NAME_E2;
10590 else {
10591 BNX2X_ERR("Unsupported chip revision\n");
10592 return -EINVAL;
10593 }
10594 BNX2X_DEV_INFO("Loading %s\n", fw_file_name);
10599 10595
10600 rc = bnx2x_check_firmware(bp); 10596 rc = request_firmware(&bp->firmware, fw_file_name,
10601 if (rc) { 10597 &bp->pdev->dev);
10602 BNX2X_ERR("Corrupt firmware file %s\n", fw_file_name); 10598 if (rc) {
10603 goto request_firmware_exit; 10599 BNX2X_ERR("Can't load firmware file %s\n",
10600 fw_file_name);
10601 goto request_firmware_exit;
10602 }
10603
10604 rc = bnx2x_check_firmware(bp);
10605 if (rc) {
10606 BNX2X_ERR("Corrupt firmware file %s\n", fw_file_name);
10607 goto request_firmware_exit;
10608 }
10604 } 10609 }
10605 10610
10606 fw_hdr = (struct bnx2x_fw_file_hdr *)bp->firmware->data; 10611 fw_hdr = (struct bnx2x_fw_file_hdr *)bp->firmware->data;
@@ -10656,6 +10661,7 @@ static void bnx2x_release_firmware(struct bnx2x *bp)
10656 kfree(bp->init_ops); 10661 kfree(bp->init_ops);
10657 kfree(bp->init_data); 10662 kfree(bp->init_data);
10658 release_firmware(bp->firmware); 10663 release_firmware(bp->firmware);
10664 bp->firmware = NULL;
10659} 10665}
10660 10666
10661 10667
@@ -10951,6 +10957,8 @@ static void __devexit bnx2x_remove_one(struct pci_dev *pdev)
10951 if (bp->doorbells) 10957 if (bp->doorbells)
10952 iounmap(bp->doorbells); 10958 iounmap(bp->doorbells);
10953 10959
10960 bnx2x_release_firmware(bp);
10961
10954 bnx2x_free_mem_bp(bp); 10962 bnx2x_free_mem_bp(bp);
10955 10963
10956 free_netdev(dev); 10964 free_netdev(dev);