Go back –> Atheros Linux wireless drivers
ath9k_htc provides hardware support for all wireless Atheros AR9001 and AR9002 family hardware which uses the HTC framework for communication with an embedded target CPU.
ath9k_htc alone only provides the mac80211 callbacks for 802.11n HTC devices. HTC devices use different transports, such as USB, SDIO. Each transport module claims their own device and registers it with ath_htc. Apart from the general common shared modules we currently have three HTC related modules:
ath9k_htc - Atheros 9000 Hardware family support driver which require HTC
ath_htc - Atheros Host Target Communications module
A transport module (ath_hif_usb) claims a USB vendor:device ID, it registers it to ath_htc and informs ath_htc of the hardware family that its vendor:device falls under. The ar9271 device falls under the AR9K hardware family. ath_htc then requests the mac80211 hardware family module to be loaded – this is ath9k_htc for ar9271. The mac80211 hardware family module, ath9k_htc for AR9K HTC family, then registers a set of operations to HTC for HIF devices under the same hardware family. HTC finally has a notion of the transport and hardware family that an HTC device falls under, it will use this for sending HTC messages to the transport and also relaying replies back the to mac80211 hardware family driver.
Since ar9271 support is not yet upstream and the driver is still being worked on we use the Linux driver project mailing list to track its development and patches:
ar9271 support is still under development. Below you can keep track of its progress.
- Monitor mode works
- Scanning works
- Write some initial TX code, ping!
See the ath9k_htc device list.
If you'd like to work on development for ar9271 get the code first:
If you do not have hardware and are serious about working on a mac80211 driver for ar9271 please contact firstname.lastname@example.org, Atheros is looking to work with the community by providing hardware samples to interested developers. Prior to contacting email@example.com for a device though please consider sending patches to help with the existing code. The HTC/HIF code could use a lot of help to be more upstream-friendly first. You will need hardware once we start working on the mac80211 driver.
Setting up your environment
To work on this you'll need to git clone wireless-testing:
Configuring your kernel
You'll need to compile and install wireless-testing, before you do so be sure to enable these configuration options:
CONFIG_ATH_COMMON=m CONFIG_ATH9K=m CONFIG_ATH_DEBUG=y
ATH9K is not required but we require you to select it to enable ATH9K_HW for now as ATH9K_HTC is not yet an option upstream.
Boot into your new kernel and you can begin hacking.
ar9271 requires firmware, you can get ar9271fw from:
http://www.kernel.org/pub/linux/kernel/people/mcgrof/firmware/ar9271/ar9271.fw sha1sum 9ee744d58e68e531cb2ca910c3980e1f23985226
This firmware was built from an original driver hexed string and converted for use with request_firmware(). For details you can check out:
Open firmware ?
We are first trying to write the driver for ar9271, however one interested community member has expressed interest in working on an open firmware for ar9271. We are working with this community member on trying to get this done but we have nothing certain or guaranteed.
- More HTC/HIF/WMI cleanup - for upstream inclusion
- Fill in gaps on the mac80211 driver, ath9k_htc.c (mcgrof, but more help is welcomed)
- Use device and bus to probe a new ath_htc device instead of using request_firmware. Look at ssb_bus_register() for an example of how to do this. This is not an upstream requirement but more of an architectural implementation change which will help more as we add more ath_htc devices.
You can send patches to:
To: firstname.lastname@example.org Cc: email@example.com
You can use the module parameter debug and use it as with ath9k. Since you may be enabling debugging all the time the easier option is to always enable it by using a modprobe.d conf file. For example create a file
In it put:
options ath9k_htc debug=0xfffffff
To enable full debugging.