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

Reply via email to