broadcom-wl: fix two problems when more then one wifi card is available.
authorHauke Mehrtens <hauke@hauke-m.de>
Sun, 25 Nov 2012 20:14:34 +0000 (20:14 +0000)
committerHauke Mehrtens <hauke@hauke-m.de>
Sun, 25 Nov 2012 20:14:34 +0000 (20:14 +0000)
* The device should get a unique name at the beginning and not wl%d
* load the nvram just one time into the own buffer also when there is
  more than one device.

Backport of r34381.

SVN-Revision: 34382

package/broadcom-wl/patches/100-fix_nvram_two_devices.patch [new file with mode: 0644]
package/broadcom-wl/patches/110-add_number_to_dev_name.patch [new file with mode: 0644]

diff --git a/package/broadcom-wl/patches/100-fix_nvram_two_devices.patch b/package/broadcom-wl/patches/100-fix_nvram_two_devices.patch
new file mode 100644 (file)
index 0000000..5650862
--- /dev/null
@@ -0,0 +1,32 @@
+--- a/driver/nvram_stub.c
++++ b/driver/nvram_stub.c
+@@ -22,6 +22,7 @@ typedef struct _vars {
+ #define       VARS_T_OH       sizeof(vars_t)
+ static vars_t *vars = NULL;
++static int nvram_init_done = 0;
+ extern char *nvram_buf[];
+ int
+@@ -33,6 +34,10 @@ BCMATTACHFN(nvram_init)(void *si)
+       uint nvs, bufsz;
+       vars_t *new;
++      nvram_init_done++;
++      if (nvram_init_done != 1)
++              return 0;
++
+       osh = si_osh(sih);
+       nvs = R_REG(osh, &nvh->len) - sizeof(struct nvram_header);
+@@ -79,6 +84,10 @@ BCMATTACHFN(nvram_exit)(void *si)
+       vars_t *this, *next;
+       si_t *sih;
++      nvram_init_done--;
++      if (nvram_init_done != 0)
++              return 0;
++
+       sih = (si_t *)si;
+       this = vars;
+       while (this) {
diff --git a/package/broadcom-wl/patches/110-add_number_to_dev_name.patch b/package/broadcom-wl/patches/110-add_number_to_dev_name.patch
new file mode 100644 (file)
index 0000000..4f0ed01
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/driver/wl_linux.c
++++ b/driver/wl_linux.c
+@@ -1410,7 +1410,7 @@ wl_alloc_if(wl_info_t *wl, int iftype, u
+       dev = alloc_etherdev(sizeof(wl_if_t));
+       wlif = netdev_priv(dev);
+       bzero(wlif, sizeof(wl_if_t));
+-      strncpy(dev->name, name, IFNAMSIZ);
++      snprintf(dev->name, IFNAMSIZ, name, subunit);
+       wlif->type = iftype;
+       wlif->dev = dev;