Maurits Dijkstra wrote: > Hi all, > > The last few days I've been trying to get b43 to work on my WRT54GL > wlan-router. The reason I've been trying this is because I want to use the > device as a bridge between the local university wlan and my own local > network. However, because the network I'm trying to connect to is part of > the academic eduroam infrastructure I need 802.1x with dynamic WEP keying. > > The proprietary broadcom drivers do not seem to support wpa_supplicant or > xsupplicant as they do not implement (much of) the standard linux wireless > extensions. There is a broadcom-specific driver for wpa_supplicant, but it > is broken, and it would be nice to get rid of the binary-only driver > altogether, not patch it up with yet another hack. So I set out to get b43 > working. After a few hours of tinkering I got the driver to insert and > load the firmware: > > b43-phy0: Broadcom 5352 WLAN found > b43-phy0 debug: Found PHY: Analog 2, Type 2, Revision 7 > b43-phy0 debug: Found Radio: Manuf 0x17F, Version 0x2050, Revision 2 > b43-phy0 debug: DebugFS (CONFIG_DEBUG_FS) not enabled in kernel config > phy0: Selected rate control algorithm 'simple' > b43-phy0 debug: Loading firmware version 351.126 (2006-07-29 05:54:02) > b43-phy0 debug: Chip initialized > b43-phy0 debug: 32-bit DMA initialized > b43-phy0 debug: Wireless interface started > b43-phy0 debug: Adding Interface type 2 > > So far so good, I thought. But when I tried to actually do anything with > the interface this message appeared in dmesg: > > b43-phy0 warning: Invalid max-TX-power value in SPROM. > > The driver itself responds to commands, but scanning finds nothing and > trying to associate to access points doesn't work either. Also, the MAC > addresses for both the wmaster0 and wlan0 interfaces are zeroed out: > > wlan0 Link encap:Ethernet HWaddr 00:00:00:00:00:00 > UP BROADCAST MULTICAST MTU:1500 Metric:1 > RX packets:0 errors:0 dropped:0 overruns:0 frame:0 > TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 > collisions:0 txqueuelen:1000 > RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) > > wmaster0 Link encap:UNSPEC HWaddr > 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 > UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 > RX packets:0 errors:0 dropped:0 overruns:0 frame:0 > TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 > collisions:0 txqueuelen:1000 > RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) > > I've tried b43 from a git tree I pulled yesterday evening on openwrt > kamikaze svn trunk (r9519), running linux 2.6.23.1. My SSB info is: > > ssb: Core 0 found: ChipCommon (cc 0x800, rev 0x0E, vendor 0x4243) > ssb: Core 1 found: Fast Ethernet (cc 0x806, rev 0x09, vendor 0x4243) > ssb: Core 2 found: MIPS 3302 (cc 0x816, rev 0x06, vendor 0x4243) > ssb: Core 3 found: USB 1.1 Host (cc 0x817, rev 0x02, vendor 0x4243) > ssb: Core 4 found: MEMC SDRAM (cc 0x80F, rev 0x01, vendor 0x4243) > ssb: Core 5 found: IEEE 802.11 (cc 0x812, rev 0x09, vendor 0x4243) > ssb: Core 6 found: Roboswitch (cc 0x81C, rev 0x02, vendor 0x4243) > ssb: Initializing MIPS core... > ssb: set_irq: core 0x0806, irq 2 => 2 > ssb: set_irq: core 0x0817, irq 4 => 3 > ssb: set_irq: core 0x0812, irq 0 => 4 > ssb: Sonics Silicon Backplane found at address 0x18000000 > > If I were to take a fairly uneducated guess, I'd say the driver is not > recognizing the layout of the SPROM correctly, since it doesn't seem to be > able to find correct values for the MAC address and TX-power, both of > which should be stored there... > > Is there anyone who knows what's wrong or can provide pointers on where to > look? Any help would be greatly appreciated and I wouldn't mind getting my > own hands dirty to fix it. :)
In the past few days, I have discovered that the SPROM revision 3 layout doesn't match the specs. To dump the SPROM, I used the following patch: Index: linux-2.6/drivers/ssb/pci.c =================================================================== --- linux-2.6.orig/drivers/ssb/pci.c +++ linux-2.6/drivers/ssb/pci.c @@ -457,6 +457,7 @@ static int ssb_pci_sprom_get(struct ssb_ { int err = -ENOMEM; u16 *buf; + int i; buf = kcalloc(SSB_SPROMSIZE_WORDS, sizeof(u16), GFP_KERNEL); if (!buf) @@ -467,6 +468,12 @@ static int ssb_pci_sprom_get(struct ssb_ ssb_printk(KERN_WARNING PFX "WARNING: Invalid SPROM CRC (corrupt SPROM)\n"); } + printk("ssb: SPROM DUMP\nssb: 0x0000: "); + for (i=0; i < SSB_SPROMSIZE_WORDS; i++) { + printk("0x%.4X", buf[i]); + if ((i % 8) == 7) printk("\nssb: 0x%.4X: ", (i + 1) * 2); + } + printk("\n"); err = sprom_extract(bus, sprom, buf); kfree(buf); I think your system doesn't use PCI, so this probably won't work, but you should be able to implement something similar. Once you have a dump, you should be able to find the MAC addresses of the wireless and ethernet interfaces. Larry _______________________________________________ Bcm43xx-dev mailing list Bcm43xx-dev@lists.berlios.de https://lists.berlios.de/mailman/listinfo/bcm43xx-dev