Michael Buesch wrote:
On Friday 18 April 2008 17:51:29 Stefanik Gábor wrote:
Bisection complete!
After testing numerous settings for BoardFlags, I found that the only ones
to have a benefical effect on the card is 0x4049/0x4249 and 0x0048/0x0248,
which differs from the original 0x0049 only in the BFL_BTCMOD bit, which is
0 by default, but 1 in this configuration. Not only that, setting BoardFlags
to 0x4049 and leaving everything else as is in the original Asus SPROM fixes
BOTH the "No TX" and the "ping time cycle" bugs! Even
monitoring/packetspamming while operating works perfectly. The setting
0x4249 produces the same (perfectly-working) result, only with Afterburner
marked as supported. (Not sure if it actually gets enabled, though.) Setting
The afterburner bit is not used in the driver.
BFL_FEM to 1 (0x4849 or 0x4A49) introduces the "ping cycle" bug, most likely
because the card doesn't actually support the Front-End Module. BFL_HGPA=1
(0x6049/0x6249) causes ping packet loss /duplicate count to increase
somewhat, likely because the card doesn't have a high-gain PA. 0x0048 and
0x0248 also work fine, although this setting disables Bluetooth coexistence
(BFL_BTCOEXIST).
As the card doesn't have a BT chip, this is the correct thing to do.
So, it looks like BoardFlags was intended to be 0x4249, but
I'm not too sure on the afterburner bit. The packaging box of my card
does not tell anything about supported rates beyond 54MBit. So it most
likely does not support afterburner.
Asus incorrectly sets it to 0x0049, which completely breaks transmission in
b43.
"0x0001: BFL_BTCOEXIST: Board implements Bluetooth coexistance[sic]". I
don't know if "coexistance" is a misspelling or if it's the correct spelling
in British, but if it's unintended, then it should be fixed. (Just
nit-picking, sorry.)
That bit is most likey what is actually the wrong one.
What is happening on the bcm43xx mailing list? I keep getting the mail
way out of order. It certainly makes following a thread difficult.
In any case, the following patch makes my ASUS-138G work.
Index: wireless-testing/drivers/net/wireless/b43/main.c
===================================================================
--- wireless-testing.orig/drivers/net/wireless/b43/main.c
+++ wireless-testing/drivers/net/wireless/b43/main.c
@@ -4413,6 +4413,9 @@ static void b43_sprom_fixup(struct ssb_b
if (bus->boardinfo.vendor == SSB_BOARDVENDOR_DELL &&
bus->chip_id == 0x4301 && bus->boardinfo.rev == 0x74)
bus->sprom.boardflags_lo |= B43_BFL_BTCOEXIST;
+ if (bus->boardinfo.vendor == SSB_BOARDVENDOR_ASUS &&
+ bus->chip_id == 0x4318 && bus->boardinfo.rev == 0x02)
+ bus->sprom.boardflags_lo |= B43_BFL_BTCMOD;
if (bus->boardinfo.vendor == PCI_VENDOR_ID_APPLE &&
bus->boardinfo.type == 0x4E && bus->boardinfo.rev > 0x40)
bus->sprom.boardflags_lo |= B43_BFL_PACTRL;
Index: wireless-testing/include/linux/ssb/ssb.h
===================================================================
--- wireless-testing.orig/include/linux/ssb/ssb.h
+++ wireless-testing/include/linux/ssb/ssb.h
@@ -212,6 +212,7 @@ enum ssb_bustype {
#define SSB_BOARDVENDOR_BCM 0x14E4 /* Broadcom */
#define SSB_BOARDVENDOR_DELL 0x1028 /* Dell */
#define SSB_BOARDVENDOR_HP 0x0E11 /* HP */
+#define SSB_BOARDVENDOR_ASUS 0x1043 /* AsusTek */
/* board_type */
#define SSB_BOARD_BCM94306MP 0x0418
#define SSB_BOARD_BCM4309G 0x0421
The value for boardinfo.rev is a bit troubling. The SPROM dump shows
0x42, but test printk's show it to be 0x02 at this point.
Larry
Index: wireless-testing/drivers/net/wireless/b43/main.c
===================================================================
--- wireless-testing.orig/drivers/net/wireless/b43/main.c
+++ wireless-testing/drivers/net/wireless/b43/main.c
@@ -4413,6 +4413,9 @@ static void b43_sprom_fixup(struct ssb_b
if (bus->boardinfo.vendor == SSB_BOARDVENDOR_DELL &&
bus->chip_id == 0x4301 && bus->boardinfo.rev == 0x74)
bus->sprom.boardflags_lo |= B43_BFL_BTCOEXIST;
+ if (bus->boardinfo.vendor == SSB_BOARDVENDOR_ASUS &&
+ bus->chip_id == 0x4318 && bus->boardinfo.rev == 0x2)
+ bus->sprom.boardflags_lo |= B43_BFL_BTCMOD;
if (bus->boardinfo.vendor == PCI_VENDOR_ID_APPLE &&
bus->boardinfo.type == 0x4E && bus->boardinfo.rev > 0x40)
bus->sprom.boardflags_lo |= B43_BFL_PACTRL;
Index: wireless-testing/include/linux/ssb/ssb.h
===================================================================
--- wireless-testing.orig/include/linux/ssb/ssb.h
+++ wireless-testing/include/linux/ssb/ssb.h
@@ -212,6 +212,7 @@ enum ssb_bustype {
#define SSB_BOARDVENDOR_BCM 0x14E4 /* Broadcom */
#define SSB_BOARDVENDOR_DELL 0x1028 /* Dell */
#define SSB_BOARDVENDOR_HP 0x0E11 /* HP */
+#define SSB_BOARDVENDOR_ASUS 0x1043 /* AsusTek */
/* board_type */
#define SSB_BOARD_BCM94306MP 0x0418
#define SSB_BOARD_BCM4309G 0x0421
_______________________________________________
Bcm43xx-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev