Here is a short list of things to be done, i work on most of them (hw-related) but i could really use some help for the rest...
TODO: Driver part -------------- * Process rate from descriptors (create an index with ratecodes and rate values -check out madwifi revision 125 for an example) * Oprofile the code and optimize * Sparse check/cleanups * Handle bmiss interrupts * Add ap mode * Add multi-queue support (wme) * Handle gpio interrupts and integrate with rf-kill framework * hw.c/ath5k.h cleanup led stuff and use mac80211 leds Hw part ----------- * Treat rx overrun as fatal (maybe try to clear PISR_RAC and see if it comes again and then return fatal) * Implement capabilities * Split eeprom code * Implement ANI * Txpower set * Power table calibration * Work on noise floor calibration (pause tx queues, restore tx-power -papd probe register- etc) * Update register list on wiki from latest reg.h * Further search for unkown registers (mostly AR5416) * Implement rfregs functions for newer PHY chips (disassembly) * Implement 32Khz clock setup etc (disassembly) * Verify rest phy functions (disassembly/dumps/test) * Verify calibration functions (disassembly/dumps/test) * Verify noise floor related functions and implement nf_adjust (disassembly/dumps/test) * Finish RF2425 support (waiting for an eeepc) * Update SREV values Status: ----------- a) As i have mentioned on an earlier post, i've updated reg.h with lots of registers, some of them we already knew (we set them inside hw.c during reset), some are ANI related and come from ANI rev. engineering (check out "tracing ANI" thread) and if_ath_hal_extentions.h (MadWiFi) and the rest come from a memory dump of a machine runing art (atheros radio test). They have compiled a static table inside art with register addresses, names and shifts (also for rf buffer), it wasn't hard to parse it (BTW if we can get an updated memory dump of a machine runing latest art we 'll have most of 5416 registers i guess, start looking, if you have a VxWorks atheros ap you might have the binary inside already -we don't need it to work, just to load so that it decompresses itself in RAM so we can get a dump- ;-)). b) We have all infos needed to properly support power table calibration for 5112 (check out latest commits on ath_info), i guess 5112 based cards will be the first cards we are going to support 100% (CM9 for example). Also it seems that all post 2413 have the same (or very similar) way to calibrate the power table so if we find it we 're practically done with power calibration. c) We also have card's max tx power table per rate (and that's for all legacy cards, even those with eeprom version >= 5.0) so we can create a function to set tx power safely. d) ANI is almost there ;-) e) There was a bug on phy calibration, we only activated calibration during reset, not inside phy_calibrate. Also it seems that AGC_CAL bit should be activated before enabling IQ calibration (i found a patent that describes it nicely "Magnitude and phase imbalance calibration and compensation in quadrature receivers"), it seems that one method provides some parameters for the other (one of them is meant to be run passively without disturbing rx and the other one is active and needs to redirect rx to some other chip parts in order to get feedback) also check out dumps from latest Sam's HAL, you'll see that it sets the bit and checks for completion after enabling IQ calibration (as it does during reset). Now there is an interesting point here, both AGC_CAL and IQ calibration need the antennas attached (they need feedback from the receiver) but AGC_NF needs to disconnect antennas. So i split AGC_CAL + IQ from AGC_NF and we now have 2 functions, one for IQ calibration & correction and one for Noise Floor calibration. We need to work on the NF one because we have to stop tx queues (or pause them) and restore tx power after (check out papd probe register). AGC_CAL & IQ is run every 10 seconds and NF is run every 30 seconds, i was thinking to limit NF calibrations since NF doesn't change so frequently, how about having a minimum and a maximum value and for every result that's the same with the previous one, we increase the interval until we reach maximum (e.g. 60 secs) and on a different one we reset to minimum (e.g. 30 secs) ? f) Rf regs functions are missing some bits. For 5111 & 5112 there are some more parameters we should pass (also related to hal/quarter rates). For newer chips it seems we only need to pass ob/db values (that's why most dumps from them seem the same). g) Btw half/quarter rate operation is almost there, just setting a bit in PHY_PLL and PHY_MODE does the trick, it needs some testing but shouldn't take long ;-) --- Right now i have exams and it's really difficult for me to test and/or provide any code snapshots/patches. When i'm done i'll upload a tarball in kernel.org and let you know so you can test it. Until then can someone please work on the driver related stuff mentioned above ? Have fun ;-) -- GPG ID: 0xD21DB2DB As you read this post global entropy rises. Have Fun ;-) Nick _______________________________________________ ath5k-devel mailing list ath5k-devel@lists.ath5k.org https://lists.ath5k.org/mailman/listinfo/ath5k-devel