We are using madwifi (0.9.3) on ar5414/13 devices on longer links (1 to 4 km). We've noticed reproducible behavior of having good throughput (20 to 25Mbps) and after a few seconds the rate drops (3 till 10Mbps) and never comes back again.
After a lot of debugging efforts in the rate algorithms I found the problem lies in the tx_complete descriptors being little endian read while the host (xscale-be) is interpreting them as big endian. (Part of this is already described in ticket #617 ).
It looks like the Xscale-arm kernel doesn't byte swap pci register while other big endian targets do. So the attached patch will add the _bswap code again (formaly removed) but now only enable it for Xscale BE platforms using a define in the hal header file for Xscale-be.
Using this fix the rate algoritms seems to work a lot better.