2009/11/7 Clyde McPherson <[email protected]>: > 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.
Interesting. Does anyone know if that can be related to instability of 4318 as AP? AFAIR it was related to high traffic. -- Rafał _______________________________________________ Bcm43xx-dev mailing list [email protected] https://lists.berlios.de/mailman/listinfo/bcm43xx-dev
