Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 134963
b: refs/heads/master
c: d517c4a
h: refs/heads/master
i:
  134961: ea7b070
  134959: 01c8548
v: v3
  • Loading branch information
David S. Miller committed Mar 2, 2009
1 parent fb1a757 commit e55b585
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 8 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e8e26350f114fa212e277ea02332d9347c59865d
refs/heads/master: d517c4a1da590a7fa50325a5e5cd18f07e8fb5a7
27 changes: 20 additions & 7 deletions trunk/drivers/net/typhoon.c
Original file line number Diff line number Diff line change
Expand Up @@ -1347,6 +1347,7 @@ typhoon_init_rings(struct typhoon *tp)
}

static const struct firmware *typhoon_fw;
static u8 *typhoon_fw_image;

static int
typhoon_request_firmware(struct typhoon *tp)
Expand All @@ -1367,12 +1368,22 @@ typhoon_request_firmware(struct typhoon *tp)
memcmp(typhoon_fw->data, "TYPHOON", 8)) {
printk(KERN_ERR "%s: Invalid firmware image\n",
tp->name);
release_firmware(typhoon_fw);
typhoon_fw = NULL;
return -EINVAL;
err = -EINVAL;
goto out_err;
}

typhoon_fw_image = kmalloc(typhoon_fw->size, GFP_KERNEL);
if (!typhoon_fw_image) {
err = -ENOMEM;
goto out_err;
}

return 0;

out_err:
release_firmware(typhoon_fw);
typhoon_fw = NULL;
return err;
}

static int
Expand All @@ -1394,11 +1405,11 @@ typhoon_download_firmware(struct typhoon *tp)
int i;
int err;

image_data = typhoon_fw->data;
image_data = typhoon_fw_image;
fHdr = (struct typhoon_file_header *) image_data;

err = -ENOMEM;
image_dma = pci_map_single(pdev, (u8 *) typhoon_fw->data,
image_dma = pci_map_single(pdev, (u8 *) image_data,
typhoon_fw->size, PCI_DMA_TODEVICE);
if (pci_dma_mapping_error(pdev, image_dma)) {
printk(KERN_ERR "%s: no DMA mem for firmware\n", tp->name);
Expand Down Expand Up @@ -1469,7 +1480,7 @@ typhoon_download_firmware(struct typhoon *tp)
iowrite32(load_addr,
ioaddr + TYPHOON_REG_BOOT_DEST_ADDR);
iowrite32(0, ioaddr + TYPHOON_REG_BOOT_DATA_HI);
iowrite32(image_dma + (image_data - typhoon_fw->data),
iowrite32(image_dma + (image_data - typhoon_fw_image),
ioaddr + TYPHOON_REG_BOOT_DATA_LO);
typhoon_post_pci_writes(ioaddr);
iowrite32(TYPHOON_BOOTCMD_SEG_AVAILABLE,
Expand Down Expand Up @@ -2639,8 +2650,10 @@ typhoon_init(void)
static void __exit
typhoon_cleanup(void)
{
if (typhoon_fw)
if (typhoon_fw) {
kfree(typhoon_fw_image);
release_firmware(typhoon_fw);
}
pci_unregister_driver(&typhoon_driver);
}

Expand Down

0 comments on commit e55b585

Please sign in to comment.