Go back –> [[en/users/Drivers/Atheros|Atheros Linux wireless drivers]]
===== ath9k_htc =====
ath9k_htc provides hardware support for Atheros AR9001 and AR9002 family hardware.
===== Get the driver =====
The driver is part of wireless-testing. See this [[en/developers/Documentation/git-guide|guide]] to use the wireless-testing tree directly. Or you can use [[en/users/Download|compat-wireless]] to get the driver.
===== Chipsets supported =====
* AR9271
* AR7010 USB-PCIe bridge with AR928x wireless chips
===== Supported Devices =====
See the [[en/users/Drivers/ath9k_htc/devices|ath9k_htc device list]].
===== Mailing list =====
[[en/developers/mailinglists|linux-wireless]] is the recommended mailing list to use for questions regarding the driver. Firmware-related questions should go to [[http://lists.infradead.org/mailman/listinfo/ath9k_htc_fw|ath9k_htc_fw]].
The archives for the old ath9k-devel list, which was closed in 2017, are available [[https://lists.ath9k.org/mailman/listinfo/ath9k-devel|here]].
===== Configuring your kernel =====
Enable these options in your kernel config. Most distros will already have it enabled.
CONFIG_ATH_COMMON=m
CONFIG_ATH9K_HW=m
CONFIG_ATH9K_COMMON=m
CONFIG_ATH9K_HTC=m
===== Firmware =====
This driver requires firmware. The firmware can be obtained from [[http://git.kernel.org/?p=linux/kernel/git/firmware/linux-firmware.git|firmware tree]].
Alternately you can download it from here: [[http://wireless.kernel.org/download/htc_fw/|http://wireless.kernel.org/download/htc_fw/]].
[[en/developers/GSoC/2012/ath9k_htc_open_firmware|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.fw
AR7010 - ar7010.fw or ar7010_1_1.fw
Newer firmware map:
AR9271 - htc_9271.fw
AR7010 - 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 old [[http://www.draisberghof.de/usb_modeswitch/|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
DefaultProduct=0x20FF
TargetVendor= 0x0CF3
TargetProduct= 0x7010
CheckSuccess=10
NoDriverLoading=1
MessageContent="5553424329000000000000000000061b000000020000000000000000000000"
Now, when the device is plugged in, ath9k_htc should load normally. If not, report to [[https://lists.ath9k.org/mailman/listinfo/ath9k-devel|ath9k_devel]].
===== Debugging =====
See [[en/users/Drivers/ath9k/debug|here]].
===== 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 structural changes in the firmware.
* This HW strongly depends on USB. Please chech [[https://github.com/qca/open-ath9k-htc-firmware/wiki/usb-related-issues|usb related issues]] before sending bug report.
===== 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 Linux 3.0. 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|PowerSave]] is not properly supported yet.
Please do report bugs, crashes, weird behavior and other general tantrums 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|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|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.
* [[en/developers/GSoC/2012/ath9k_htc_open_firmware|open firmware for ath9k_htc]]