From: Bjørn Mork (bjorn_at_mork.no)
Date: 2002-04-07 17:01:21 UTC
Jouni Malinen <jkmaline_at_cc.hut.fi> writes:
> * optimizations to interrupt handling:
> - masked TX events since they cause an extra interrupt for each TX
> frame and Alloc event can be used to increment tx_packets counter > (old behavior can be restored by defining PRISM2_USE_TX_INTERRUPT)
> anything (and DTIM event would require AP f/w anyway)
> - these changes should make the interrupt handler somewhat faster
> and reduce the number of interrupts; this should help especially > on platforms with low performance and/or high interrupt latency
This made me optimistic since I've had a small performance problem with the latest releases (losing packets when transmitting many of them, causing TX speed to drop and reducing TX performance to a fraction of the theoretical). I'm using the driver on a 66 MHz 486 with a Vadem ISA-PCMCIA controller, so interrupt latency is probably as high as it can get.
Even with good signal quality I get lots of errors like this:
Apr 7 18:46:01 canardo kernel: wlan0: TXEXC - fid=0x051f - status=0x0008 ([FormErr]) tx_control=000e Apr 7 18:46:01 canardo kernel: retry_count=0 tx_rate=110 fc=0x0208 (Data::0) Apr 7 18:46:01 canardo kernel: addr1=00:a0:c5:15:07:43 addr2=00:a0:c5:15:06:c0 addr3=c5:15:06:c0:00:00 Apr 7 18:46:01 canardo kernel: wlan0: STA 00:a0:c5:15:07:43 TX rate lowered to 55 Apr 7 18:46:01 canardo kernel: wlan0: TXEXC - fid=0x0100 - status=0x0008 ([FormErr]) tx_control=000e Apr 7 18:46:01 canardo kernel: retry_count=0 tx_rate=55 fc=0x0208 (Data::0) Apr 7 18:46:01 canardo kernel: addr1=00:a0:c5:15:07:43 addr2=00:a0:c5:15:06:c0 addr3=c5:15:06:c0:00:00 Apr 7 18:46:01 canardo kernel: wlan0: STA 00:a0:c5:15:07:43 TX rate lowered to 20 Apr 7 18:46:02 canardo kernel: wlan0: TXEXC - fid=0x02c8 - status=0x0008 ([FormErr]) tx_control=000e Apr 7 18:46:02 canardo kernel: retry_count=0 tx_rate=20 fc=0x0208 (Data::0) Apr 7 18:46:02 canardo kernel: addr1=c5:15:07:43:00:a0 addr2=c5:15:06:c0:00:a0 addr3=c5:15:06:c0:00:00 Apr 7 18:46:02 canardo kernel: Could not find STA for this TX error Apr 7 18:46:03 canardo kernel: wlan0: STA 00:a0:c5:15:07:43 TX rate raised to 55 Apr 7 18:48:13 canardo kernel: wlan0: STA 00:a0:c5:15:07:43 TX rate raised to 110
I guess the problem is that the platform is too slow handling the packets, not really that they are lost in the air. Probably not much that can be done about that. Your changelog made me a bit optimistic, but I couldn't really notice any improvement. The TX performance is still terrible (~500 kbits/s as opposed to the RX speed of ~5 Mbits/s).
And the 2002-04-05 version seems to cause another problem I'm having on this platform more often (I've seen this on all releases so far, but rarely on the 2002-x-x versions so far): Something causes the driver to try resetting the card, but the reset fails. When this happens I have to do a "ifconfig wlan0 down; cardctl eject; cardctl insert" to make things work again. Just toggling the interface down and up is not sufficient.
Here are the logs from a couple of such errors using the 2002-04-05 release:
Apr 6 20:33:33 canardo kernel: wlan0: hfa384x_cmd - timeout2 - reg=0x8001 Apr 6 20:33:33 canardo kernel: wlan0: prism2_transmit: CMDCODE_TRANSMIT failed (res=-110, resp0=0x0000) Apr 6 20:33:33 canardo kernel: wlan0: prism2_tx - to BAP0 failed Apr 6 20:33:33 canardo kernel: prism2: wlan0: resetting card Apr 6 20:33:33 canardo kernel: prism2: card initialization timed out Apr 6 20:33:33 canardo kernel: prism2: Initialization failed Apr 6 20:33:33 canardo kernel: prism2_cor_sreset: original COR 41 Apr 6 20:33:33 canardo kernel: prism2_hw_config() Apr 6 20:33:33 canardo kernel: wlan0: prism2_tx: hw not ready - skipping Apr 6 20:34:04 canardo last message repeated 20 times Apr 6 20:35:06 canardo last message repeated 15 times Apr 6 20:35:18 canardo last message repeated 5 times Apr 6 21:09:31 canardo kernel: wlan0: hfa384x_cmd - timeout2 - reg=0x8001 Apr 6 21:09:31 canardo kernel: Already released txfid found at idx 1 Apr 6 21:09:31 canardo kernel: wlan0: prism2_transmit: CMDCODE_TRANSMIT failed (res=-110, resp0=0x0000) Apr 6 21:09:31 canardo kernel: wlan0: prism2_tx - to BAP0 failed Apr 6 21:09:31 canardo kernel: prism2: wlan0: resetting card Apr 6 21:09:31 canardo kernel: SWSUPPORT0 write/read failed: 0000 != 8A32 Apr 6 21:09:31 canardo kernel: prism2: Initialization failed Apr 6 21:09:31 canardo kernel: prism2_cor_sreset: original COR 41 Apr 6 21:09:31 canardo kernel: prism2_hw_config() Apr 6 21:09:31 canardo kernel: prism2_hw_config: initialized in 12359 iterationsApr 6 21:09:31 canardo kernel: wlan0: prism2_tx: hw not ready - skipping Apr 6 21:10:01 canardo last message repeated 6 times
I'm not entirely sure whether it's the driver or the PCMCIA subsystem that really causes the failure, but my life would have been a lot easier if the driver could somehow detect it and do a successful reset instead of the endless failing one.
Bjørn