NOTE: this page is for archival only, see the note at the end of the page.

Go back –> Atheros Linux wireless drivers


ath9k_htc provides hardware support for Atheros AR9001 and AR9002 family hardware.

Get the driver

The driver is part of wireless-testing. See this guide to use the wireless-testing tree directly. Or you can use compat-wireless to get the driver.

Chipsets supported

  • AR9271
  • AR7010

Supported Devices

See the ath9k_htc device list.

Mailing list

Configuring your kernel

Enable these options in your kernel config.



This driver requires firmware, you can get the approriate firmware from the firmware tree.

Firmware map:

AR9271 - ar9271.fw
AR7010 - ar7010.fw or ar7010_1_1.fw

For AR7010 based cards, place both ar7010.fw and ar7010_1_1.fw in /lib/firmware. The driver would load the required firmware.

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
  • IBSS Mode
  • Legacy (11g) operation
  • HT support
  • TX/RX 11n AMPDU aggregation
  • HW Encryption
  • LED
  • Powersave
  • Suspend/Resume

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 old usb_modeswitch package, you can do this to load ath9k_htc automatically.

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

# Atheros Wireless
ATTRS{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 Wireless

DefaultVendor= 0x0CF3

TargetVendor=  0x0CF3
TargetProduct= 0x7010



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


See here.

Known limitations

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

AP/P2P Modes

This is experimental !

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

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


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 ?
  • World poverty.

This is a static dump of the old wiki, taken after locking it in January 2015. The new wiki is at
versions of this page: last, v101, v100, v99, v98, v97, v96, v95, v94, v93, v92, v91, v90, v89, v88, v87, v86, v85, v84, v83, v82, v81, v80, v79, v78, v77, v76, v75, v74, v73, v72, v71, v70, v69, v68, v67, v66, v65, v64, v63, v62, v61, v60, v59, v58, v57, v56, v55, v54, v53, v52, v51, v50, v49, v48, v47, v46, v45, v44, v43, v42, v41, v40, v39, v38, v37, v36, v35, v34, v33, v32, v31, v30, v29, v28, v27, v26, v25, v24, v23, v22, v21, v20, v19, v18, v17, v16, v15, v14, v13, v12, v11, v10, v9, v8, v7, v6, v5, v4, v3, v2, v1