I'm using some 4318CF (PCMCIA) cards in some X86, ARM, and ATOM
platforms. When the card is put into monitor mode, the CF Card will lock
up when there is a high concentration of very active access points. What
I have found is that the problem lies with the receiving of the frame,
and is receiving multiple B43_PIO8_RXCTL_DATARDY's, instead of the
normal B43_PIO8_RXCTL_FRAMERDY sequence. In order to get the card
working for my customers, I added the below if statement in the function
pio_rx_frame(), see code fragment below:
/* Check if we have data and wait for it to get ready. */
if (q->rev >= 8) {
u32 ctl;
ctl = b43_piorx_read32(q, B43_PIO8_RXCTL);
if (ctl & B43_PIO8_RXCTL_DATARDY) <----- This is
what I added, also in the associated else
goto data_ready;
<----- This is what I added, also in the associated else
if (!(ctl & B43_PIO8_RXCTL_FRAMERDY))
return 0;
b43_piorx_write32(q, B43_PIO8_RXCTL,
B43_PIO8_RXCTL_FRAMERDY);
for (i = 0; i < 10; i++) {
ctl = b43_piorx_read32(q, B43_PIO8_RXCTL);
if (ctl & B43_PIO8_RXCTL_DATARDY)
goto data_ready;
udelay(10);
}
The above addition allows the CF card to work properly and causes no
card hangs. I have been able to run tests in the lab for over 24 hours
now and the card seems to be stable, where before the CF card would hang
within an hour of testing. I guess the code could be changed to
(according to the specs @ sipsolutions): If ctl & B43_PIO8_RXCTL_DATARDY
then set err_msg and goto rx_error? Even modify the line if (!(ctl &
B43_PIO8_RXCTL_FRAMERDY)) to set err_msg to NULL and goto rx_error
instead of returning 0? Any suggestions? BTW: I haven't tried the other
code options.
Thanks for your help
Tex
_______________________________________________
Bcm43xx-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev