ath9k_htc#

ath9k_htc provides hardware support for Atheros AR9001 and AR9002 familyhardware.

Get the driver#

The driver is part of wireless-testing. See thisguide to use the wireless-testingtree directly. Or you can usecompat-wireless toget the driver.

Chipsets supported#

  • AR9271

  • AR7010 USB-PCIe bridge with AR928x wireless chips

Supported Devices#

See theath9k_htc device list.

Mailing list#

linux-wireless is the recommended mailing list to use for questions regarding the driver. Firmware-related questions should go toath9k_htc_fw.

The archives for the old ath9k-devel list, which was closed in 2017, are availablehere.

Configuring your kernel#

Enable these options in your kernel config. Most distros will already have it enabled.

CONFIG_ATH_COMMON=mCONFIG_ATH9K_HW=mCONFIG_ATH9K_COMMON=mCONFIG_ATH9K_HTC=m

Firmware#

This driver requires firmware. The firmware can be obtained fromfirmware tree.

Alternately you can download it from here:http://wireless.kernel.org/download/htc_fw/.

This firmware is now open, to contribute check out:

* [[https://github.com/qca/open-ath9k-htc-firmware|https://github.com/qca/open-ath9k-htc-firmware]]
Older firmware map:AR9271 - ar9271.fwAR7010 - ar7010.fw or ar7010_1_1.fw
Newer firmware map:AR9271 - htc_9271.fwAR7010 - htc_7010.fw

The firmware has to be placed in the correct location, usually /lib/firmware. This could vary among distributions, so check your distro’s policies if loading of the firmware fails.

Supported Features#

* Station Mode* Monitor Mode* AP Mode (**NOTE:** AP mode works only with up to 7 stations due to a [[https://lists.ath9k.org/pipermail/ath9k-devel/2013-April/010513.html|firmware limitation]])* IBSS Mode* Mesh Mode* Legacy (11g) operation* HT support* TX/RX 11n AMPDU aggregation* HW Encryption* LED* Suspend/Resume

Disabled Features#

* [[PowerSave|PowerSave]]

ath9k_htc uses the Autosleep feature of the wireless card. Basic PS support has been implemented in the driver, but it is disabled by default.

Modeswitching for AR7010#

AR7010 based cards operate by default in USB Mass storage mode and have to be ‘switched’ to wireless mode on plugging in. If you have an oldUSB_ModeSwitch package, you can do this to load ath9k_htc automatically.

Add this line to /lib/udev/rules.d/40-usb_modeswitch.rules.

# Atheros WirelessATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="20ff", RUN+="usb_modeswitch '%b/%k'"

Add a file“0cf3:20ff” in /etc/usb_modeswitch.d/ and add these lines to it.

######################################################### Atheros WirelessDefaultVendor= 0x0CF3DefaultProduct=0x20FFTargetVendor=  0x0CF3TargetProduct= 0x7010CheckSuccess=10NoDriverLoading=1MessageContent="5553424329000000000000000000061b000000020000000000000000000000"

Now, when the device is plugged in, ath9k_htc should load normally. If not, report toath9k_devel.

Debugging#

Seehere.

Known issues#

  • The AMPDU size is limited to 22 subframes for UB94/95 and 17 for UB91.Fixing this would require removing lots of cruft and structuralchanges in the firmware.

  • This HW strongly depends on USB. Please chechusb related issuesbefore sending bug report.

AP/P2P Modes#

This is experimental !

Patches enabling P2P/AP modes have been merged in wireless-testing, itwould be part of the driver from Linux 3.0. Using only one VIF (VirtualInterface) running in AP mode would be a good idea for now, multipleinterface support has not been tested extensively. Note:PowerSave is not properly supported yet.

Please do report bugs, crashes, weird behavior and other generaltantrums thrown by the driver.

TODO#

A list of things that need to be fixed in the firmware.

  • Handle AMPDU subframe limits properly.

  • Handle AMPDU density properly.

  • ERP protection needs to be fixed.

  • RTS/CTS has to be handled properly (for both management and data frames).

  • Processing multicast frames has to be fixed (MultiRateRetry etc.).

  • Short/Long preamble selection has to be fixed.

  • Duration calculation for data, control and management frames.

  • BAR transmission to be moved to the host.

  • Low RSSI issue for UB91/94.

  • TPC for UB94/95 - why is it required ?

  • NOACK handling.

  • Destination mask handling.

  • TX filtering (legacy and HT modes).

  • AMPDU delimiter calculation.

  • AccessClass distribution.

  • Unify TX statistics.

  • MIB interrupt processing (how the fsck does ANI even work now ?)

  • cwMin/cwMax handling.

  • _Three_ different data structures pointing to the same rate control data, really ?

  • Multicast frame completion.

  • World poverty.

  • Update