Bug#501153: binary firmware in drivers/net/tehuti_fw.h

2008-10-04 Thread Robert Millan
Package: linux-2.6
Version: 2.6.26-5
Severity: serious

Hi,

drivers/net/tehuti_fw.h (licensed under GPLv2+) is entirely composed of
binary firmware, such as:

static u32 s_firmLoad[] = {
0x000f0002,
0x40718000,
[...]

Since this file is licensed under GPL, this could make it illegal to
redistribute it.

In either case, the presence of source-less binary code is a violation
of DFSG #2 requirement for source code availability.

-- System Information:
Debian Release: 4.0
  APT prefers stable
  APT policy: (500, 'stable')
Architecture: amd64 (x86_64)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.18-6-amd64
Locale: LANG=ca_AD.UTF-8, LC_CTYPE=ca_AD.UTF-8 (charmap=UTF-8)



-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]



Bug#501153: binary firmware in drivers/net/tehuti_fw.h

2008-10-12 Thread Ben Hutchings
Here's a patch for tehuti to make it use request_firmware.  This is
compile-tested only.  The firmware file can be produced by writing out
the array s_loadFirm as 32-bit little-endian values.  However, the
licence remains a problem.

Ben.

diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
index 3e433cb..9e1a73c 100644
--- a/drivers/net/Kconfig
+++ b/drivers/net/Kconfig
@@ -2569,6 +2569,7 @@ config MLX4_DEBUG
 config TEHUTI
tristate "Tehuti Networks 10G Ethernet"
depends on PCI
+   select FW_LOADER
help
  Tehuti Networks 10G Ethernet NIC
 
diff --git a/drivers/net/tehuti.c b/drivers/net/tehuti.c
index 432e837..3f732eb 100644
--- a/drivers/net/tehuti.c
+++ b/drivers/net/tehuti.c
@@ -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},
@@ -319,28 +318,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, 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 (fw)
+   release_firmware(fw);
if (master)
WRITE_REG(priv, regINIT_SEMAPHORE, 1);
 
-   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);
@@ -618,13 +630,6 @@ err:
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)) ?
@@ -2498,7 +2503,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));
@@ -2518,3 +2522,4 @@ module_exit(bdx_module_exit);
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR(DRIVER_AUTHOR);
 MODULE_DESCRIPTION(BDX_DRV_DESC);
+MODULE_FIRMWARE("tehuti/firmware.bin");
diff --git a/drivers/net/tehuti.h b/drivers/net/tehuti.h
index efd170f..b9acb3f 100644
--- a/drivers/net/tehuti.h
+++ b/drivers/net/tehuti.h
@@ -30,6 +30,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 
 /* Compile Time Switches */
--- END ---



signature.asc
Description: This is a digitally signed message part


Bug#501153: binary firmware in drivers/net/tehuti_fw.h

2008-10-12 Thread Ben Hutchings
You could use this similar patch instead:
http://git.infradead.org/users/jaswinder/firm-jsr-2.6.git?a=commitdiff;h=e41f3e5f8c5110871e376a2566b8eea2932b813b

Ben.



signature.asc
Description: This is a digitally signed message part