tehuti: Use request_firmware()
Firmware blob is little endian. Compile-tested only. Signed-off-by: Ben Hutchings <ben@decadent.org.uk> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
1318136fcd
commit
06e1f9ffa0
6 changed files with 2718 additions and 10729 deletions
|
@ -63,7 +63,6 @@
|
|||
*/
|
||||
|
||||
#include "tehuti.h"
|
||||
#include "tehuti_fw.h"
|
||||
|
||||
static struct pci_device_id __devinitdata bdx_pci_tbl[] = {
|
||||
{0x1FC9, 0x3009, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
|
||||
|
@ -318,28 +317,41 @@ static int bdx_poll(struct napi_struct *napi, int budget)
|
|||
|
||||
static int bdx_fw_load(struct bdx_priv *priv)
|
||||
{
|
||||
const struct firmware *fw = NULL;
|
||||
int master, i;
|
||||
int rc;
|
||||
|
||||
ENTER;
|
||||
master = READ_REG(priv, regINIT_SEMAPHORE);
|
||||
if (!READ_REG(priv, regINIT_STATUS) && master) {
|
||||
bdx_tx_push_desc_safe(priv, s_firmLoad, sizeof(s_firmLoad));
|
||||
rc = request_firmware(&fw, "tehuti/firmware.bin", &priv->pdev->dev);
|
||||
if (rc)
|
||||
goto out;
|
||||
bdx_tx_push_desc_safe(priv, (char *)fw->data, fw->size);
|
||||
mdelay(100);
|
||||
}
|
||||
for (i = 0; i < 200; i++) {
|
||||
if (READ_REG(priv, regINIT_STATUS))
|
||||
break;
|
||||
if (READ_REG(priv, regINIT_STATUS)) {
|
||||
rc = 0;
|
||||
goto out;
|
||||
}
|
||||
mdelay(2);
|
||||
}
|
||||
rc = -EIO;
|
||||
out:
|
||||
if (master)
|
||||
WRITE_REG(priv, regINIT_SEMAPHORE, 1);
|
||||
if (fw)
|
||||
release_firmware(fw);
|
||||
|
||||
if (i == 200) {
|
||||
if (rc) {
|
||||
ERR("%s: firmware loading failed\n", priv->ndev->name);
|
||||
DBG("VPC = 0x%x VIC = 0x%x INIT_STATUS = 0x%x i=%d\n",
|
||||
READ_REG(priv, regVPC),
|
||||
READ_REG(priv, regVIC), READ_REG(priv, regINIT_STATUS), i);
|
||||
RET(-EIO);
|
||||
if (rc == -EIO)
|
||||
DBG("VPC = 0x%x VIC = 0x%x INIT_STATUS = 0x%x i=%d\n",
|
||||
READ_REG(priv, regVPC),
|
||||
READ_REG(priv, regVIC),
|
||||
READ_REG(priv, regINIT_STATUS), i);
|
||||
RET(rc);
|
||||
} else {
|
||||
DBG("%s: firmware loading success\n", priv->ndev->name);
|
||||
RET(0);
|
||||
|
@ -617,13 +629,6 @@ static int bdx_open(struct net_device *ndev)
|
|||
RET(rc);
|
||||
}
|
||||
|
||||
static void __init bdx_firmware_endianess(void)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < ARRAY_SIZE(s_firmLoad); i++)
|
||||
s_firmLoad[i] = CPU_CHIP_SWAP32(s_firmLoad[i]);
|
||||
}
|
||||
|
||||
static int bdx_range_check(struct bdx_priv *priv, u32 offset)
|
||||
{
|
||||
return (offset > (u32) (BDX_REGS_SIZE / priv->nic->port_num)) ?
|
||||
|
@ -2501,7 +2506,6 @@ static void __init print_driver_id(void)
|
|||
static int __init bdx_module_init(void)
|
||||
{
|
||||
ENTER;
|
||||
bdx_firmware_endianess();
|
||||
init_txd_sizes();
|
||||
print_driver_id();
|
||||
RET(pci_register_driver(&bdx_pci_driver));
|
||||
|
@ -2521,3 +2525,4 @@ module_exit(bdx_module_exit);
|
|||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR(DRIVER_AUTHOR);
|
||||
MODULE_DESCRIPTION(BDX_DRV_DESC);
|
||||
MODULE_FIRMWARE("tehuti/firmware.bin");
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include <linux/if_vlan.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/vmalloc.h>
|
||||
#include <linux/firmware.h>
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
/* Compile Time Switches */
|
||||
|
|
10712
drivers/net/tehuti_fw.h
10712
drivers/net/tehuti_fw.h
File diff suppressed because it is too large
Load diff
|
@ -49,6 +49,7 @@ fw-shipped-$(CONFIG_SND_SB16_CSP) += sb16/mulaw_main.csp sb16/alaw_main.csp \
|
|||
sb16/ima_adpcm_capture.csp
|
||||
fw-shipped-$(CONFIG_SND_YMFPCI) += yamaha/ds1_ctrl.fw yamaha/ds1_dsp.fw \
|
||||
yamaha/ds1e_ctrl.fw
|
||||
fw-shipped-$(CONFIG_TEHUTI) += tehuti/bdx.bin
|
||||
fw-shipped-$(CONFIG_TIGON3) += tigon/tg3.bin tigon/tg3_tso.bin \
|
||||
tigon/tg3_tso5.bin
|
||||
fw-shipped-$(CONFIG_USB_DABUSB) += dabusb/firmware.fw dabusb/bitstream.bin
|
||||
|
|
|
@ -435,3 +435,19 @@ Found in hex form in kernel source, with the following notice:
|
|||
ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM.
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
|
||||
Driver: TEHUTI - Tehuti Networks 10G Ethernet
|
||||
|
||||
File: tehuti/bdx.bin
|
||||
|
||||
Licence:
|
||||
|
||||
Copyright (C) 2007 Tehuti Networks Ltd.
|
||||
|
||||
Permission is hereby granted for the distribution of this firmware data
|
||||
in hexadecimal or equivalent format, provided this copyright notice is
|
||||
accompanying it.
|
||||
|
||||
Found in hex form in kernel source.
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
|
|
2678
firmware/tehuti/bdx.bin.ihex
Normal file
2678
firmware/tehuti/bdx.bin.ihex
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue