mirror of
https://github.com/adulau/aha.git
synced 2024-12-27 11:16:11 +00:00
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.h"
|
||||||
#include "tehuti_fw.h"
|
|
||||||
|
|
||||||
static struct pci_device_id __devinitdata bdx_pci_tbl[] = {
|
static struct pci_device_id __devinitdata bdx_pci_tbl[] = {
|
||||||
{0x1FC9, 0x3009, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
|
{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)
|
static int bdx_fw_load(struct bdx_priv *priv)
|
||||||
{
|
{
|
||||||
|
const struct firmware *fw = NULL;
|
||||||
int master, i;
|
int master, i;
|
||||||
|
int rc;
|
||||||
|
|
||||||
ENTER;
|
ENTER;
|
||||||
master = READ_REG(priv, regINIT_SEMAPHORE);
|
master = READ_REG(priv, regINIT_SEMAPHORE);
|
||||||
if (!READ_REG(priv, regINIT_STATUS) && master) {
|
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);
|
mdelay(100);
|
||||||
}
|
}
|
||||||
for (i = 0; i < 200; i++) {
|
for (i = 0; i < 200; i++) {
|
||||||
if (READ_REG(priv, regINIT_STATUS))
|
if (READ_REG(priv, regINIT_STATUS)) {
|
||||||
break;
|
rc = 0;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
mdelay(2);
|
mdelay(2);
|
||||||
}
|
}
|
||||||
|
rc = -EIO;
|
||||||
|
out:
|
||||||
if (master)
|
if (master)
|
||||||
WRITE_REG(priv, regINIT_SEMAPHORE, 1);
|
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);
|
ERR("%s: firmware loading failed\n", priv->ndev->name);
|
||||||
DBG("VPC = 0x%x VIC = 0x%x INIT_STATUS = 0x%x i=%d\n",
|
if (rc == -EIO)
|
||||||
READ_REG(priv, regVPC),
|
DBG("VPC = 0x%x VIC = 0x%x INIT_STATUS = 0x%x i=%d\n",
|
||||||
READ_REG(priv, regVIC), READ_REG(priv, regINIT_STATUS), i);
|
READ_REG(priv, regVPC),
|
||||||
RET(-EIO);
|
READ_REG(priv, regVIC),
|
||||||
|
READ_REG(priv, regINIT_STATUS), i);
|
||||||
|
RET(rc);
|
||||||
} else {
|
} else {
|
||||||
DBG("%s: firmware loading success\n", priv->ndev->name);
|
DBG("%s: firmware loading success\n", priv->ndev->name);
|
||||||
RET(0);
|
RET(0);
|
||||||
|
@ -617,13 +629,6 @@ err:
|
||||||
RET(rc);
|
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)
|
static int bdx_range_check(struct bdx_priv *priv, u32 offset)
|
||||||
{
|
{
|
||||||
return (offset > (u32) (BDX_REGS_SIZE / priv->nic->port_num)) ?
|
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)
|
static int __init bdx_module_init(void)
|
||||||
{
|
{
|
||||||
ENTER;
|
ENTER;
|
||||||
bdx_firmware_endianess();
|
|
||||||
init_txd_sizes();
|
init_txd_sizes();
|
||||||
print_driver_id();
|
print_driver_id();
|
||||||
RET(pci_register_driver(&bdx_pci_driver));
|
RET(pci_register_driver(&bdx_pci_driver));
|
||||||
|
@ -2521,3 +2525,4 @@ module_exit(bdx_module_exit);
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
MODULE_AUTHOR(DRIVER_AUTHOR);
|
MODULE_AUTHOR(DRIVER_AUTHOR);
|
||||||
MODULE_DESCRIPTION(BDX_DRV_DESC);
|
MODULE_DESCRIPTION(BDX_DRV_DESC);
|
||||||
|
MODULE_FIRMWARE("tehuti/firmware.bin");
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include <linux/if_vlan.h>
|
#include <linux/if_vlan.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/vmalloc.h>
|
#include <linux/vmalloc.h>
|
||||||
|
#include <linux/firmware.h>
|
||||||
#include <asm/byteorder.h>
|
#include <asm/byteorder.h>
|
||||||
|
|
||||||
/* Compile Time Switches */
|
/* 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
|
sb16/ima_adpcm_capture.csp
|
||||||
fw-shipped-$(CONFIG_SND_YMFPCI) += yamaha/ds1_ctrl.fw yamaha/ds1_dsp.fw \
|
fw-shipped-$(CONFIG_SND_YMFPCI) += yamaha/ds1_ctrl.fw yamaha/ds1_dsp.fw \
|
||||||
yamaha/ds1e_ctrl.fw
|
yamaha/ds1e_ctrl.fw
|
||||||
|
fw-shipped-$(CONFIG_TEHUTI) += tehuti/bdx.bin
|
||||||
fw-shipped-$(CONFIG_TIGON3) += tigon/tg3.bin tigon/tg3_tso.bin \
|
fw-shipped-$(CONFIG_TIGON3) += tigon/tg3.bin tigon/tg3_tso.bin \
|
||||||
tigon/tg3_tso5.bin
|
tigon/tg3_tso5.bin
|
||||||
fw-shipped-$(CONFIG_USB_DABUSB) += dabusb/firmware.fw dabusb/bitstream.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.
|
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