Unfortunately there is not (yet) a lot of documentation for developers. Check the source, it's quite readable and well commented.
The code consists mainly of 4 parts:
- The net80211 stack from FreeBSD: Contains generic 802.11 functions and callback functions which can be overridden by devices. In the BSDs this stack supports multiple wlan hardware, but in madwifi it's obviously only used for atheros devices.
- The ath part: Defines Atheros specific callbacks for the net80211 layer and accesses the hardware thru the About/HAL.
- The About/HAL: Hardware Abstraction Layer. All access to the hardware has to go thru this closed source component which is maintained by Atheros. Unfortunately there is no documentation for it except the public interfaces in hal/ah.h.
- The rate algorithms: Different algorithms for selecting the best transmission rate have been implemented by the rate modules in ath_rate. See UserDocs/RateControl
Dipankar Biswas has written his thesis on Madwifi/Atheros stuff: "Prototyping a Packet Scheduler..." where he examines a "global" time driven scheduling concept and discusses aspects of madwifi code in detail. http://web.it.kth.se/~dipankar/exjobb/toc.htm The link also offers a pdf.
Version Control Management
The versioning control management software that is being used is Subversion.
If you're new to Subversion, be sure to check out the excellent book "Version Control With Subversion", which is freely available. Those of you who are familiar with CVS might want to start with Appendix A - Subversion for CVS users.
Developer HOWTOs and notes
- DevDocs/PreparePatches - Guidelines for preparing patches.
- DevDocs/SigningPatches - Guidelines for signing patches for submission.
- DevDocs/Branches - Guidelines for using and listing of branches in the repository.
- DevDocs/HAL-usage - HAL notes
- Contribute - please read this before sending patches
- DevDocs/WriteAccess - how to get write access to the repository
- DevDocs/AthDebug - how to use the debug tools
- DevDocs/KernelOops - Kernel Oops Howto
- ChipsetFeatures/Roaming - Boilerplate code to control roaming via usermode program
- DevDocs/RadiotapHeader - Information on using the Radiotap header format
- ChipsetFeatures/XrMode - Information on XR mode operation
- DevDocs/RegressionTesting - Ideas on regression testing the driver
- DevDocs/PreparingReleases - Checklist for preparing a driver release
- DevDocs/TestResults - Test results for release candidates
- DevDocs/AdhocMerge - How IBSS merge are working
- DevDocs/AdhocTestScenario - Test scenario for adhoc mode
- DevDocs/DFSTestScenario - Test scenario for DFS/TPC compliance
- DevDocs/Locking - Information about how madwifi uses all its locks
- DevDocs/AtherosRegisters - Information about all Registers of the Atheros Chipset which we know about
- DevDocs/MadwifiTrace - How to get register traces from the Madwifi HAL (help ath5k development)
- DevDocs/RXTimestamps - How to merge rs_tstamp and tsf
- DevDocs/HardwareQuestions - Questions about the Hardware which we need to find out (mostly for ath5k)