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

Go back –> Atheros Linux wireless drivers

About ath10k

ath10k is the mac80211 wireless driver for Qualcom Atheros QCA988x family of chips, which support IEEE 802.11ac.

A major difference from ath9k is that there's now a firmware and that's why we had to implement a new driver.



ath10k merged into Linux 3.11-rc1

review v2:

Linux 3.11 released, the first kernel release with ath10k

Mailing list

ath10k has it's own mailing list for discussions and patches:

Archive for the mailing list:


ath10k development happens in Kalle Valo's ath.git tree on

To clone the tree:

git clone

If you can't use git, it's also possible to download .zip file from this link:

John Linville pulls the ath tree into wireless-next tree. Then David Miller pulls it to net-next which is eventually pulled by Linus Torvalds to official kernel releases.

Submitting patches

Send patches to the mailing lists below. Kalle Valo reviews the patches within the next few days and, if they are ok, commits them to ath.git.

Preferably use ath.git master branch as the baseline for patches. Other trees can be used as well, but then the chances of conflicts are higher.

Guidelines for patches:

  • MUST be compiler warning free.
  • MUST be sparse warning free.
  • Commit log MUST not be empty.
  • The commit log MUST answer the question "Why?":
    • Describe the motivation behind the bug.
    • How does it change the functionality from user's point of view?
    • Does it fix a bug? If it does, please describe the bug (doesn't need to be long). Also if there's a public bug report add a link to the bug report.
    • If a problem has been found during code review and doesn't fix a known issues, mention that in the commit log.
  • If others have reported the issue commit log SHOULD use Reported-by: and Tested-by: tags.
  • SHOULD be checkpatch clean:
    • FIXME: add checkpatch example with correct arguments
  • Patches SHOULD be sent with git send-email tool.
  • Patchsets SHOULD contain no more than 12 patches.

The terminology is from

The ath10k patch flow is this:

  1. patch gets posted to the mailing lists
  2. patch is immediately applied to ath-next-test
  3. waiting two business days for patch being under review (unless the patch is urgent)
  4. if no comments or warnings, the patch is applied to ath-next branch
  5. ath-next is merged to master branch
  6. John Linville merges ath-next into wireless-next roughly once a week
  7. David Miller merges wireless-next into net-next every two weeks or so
  8. Linus Torvalds merges net-next into linux.git during merge window

Git branches

ath.git contains multiple branches:

The default branch selected when cloning the tree. Everyone working on ath10k (or ath6kl) should use this branch. Follows John Linville's wireless-testing tree and contains the latest -rc release from Linus Torvalds + latest wireless code from John + latest ath10k/ath6kl code from ath-next branch. Usually the branch is rebased after a merge window (after -rc1 is released). Due to unclean history bisect might not work, better to use ath-next for bisecting.
Based on John's wireless-next tree and John will pull from this branch. ath6kl/ath10k patches are commited to this branch first and then merged to the master branch. For bisect runs it's better to use this branch instead of the master branch.
Used for building and runtime testing patches under review. Is rebased almost daily and hence commit ids are NOT stable. Use this only if you know what you are doing.


Firmware is temporalily available at until it will be available from linux-firmware.git.

The firmware is searched from directory ath10k/QCA988X/hw2.0 under the system firmware directory, usually /lib/firmware. For example, here's a listing from an Ubuntu system:

$ ls -l /lib/firmware/ath10k/QCA988X/hw2.0/
total 528
-rwxr-xr-x 1 test test   2116 2013-05-15 16:24 board.bin
-rwxr-xr-x 1 test test 258890 2013-08-14 19:07 firmware.bin
-rwxr-xr-x 1 test test   5402 2013-05-15 16:31 otp.bin

Known bugs/limitations

  • firmware does not support association to the same AP from different virtual STA interfaces (driver prints "ath10k: Failed to add peer XX:XX:XX:XX:XX:XX for VDEV: X" in that case)

  • monitor/promiscuous mode causes firmware crashes very often
  • packet injection isn't supported yet
  • applying ath9k regulatory domain hack patch from OpenWRT causes firmware crash (reason: regulatory hint function is never called and ath10k never sends scan channel list to the firmware which in turn causes firmware to crash on scan)



To build ath10k enable these kernel build configuration options, for example with make menuconfig:

  • CONFIG_ATH10K_DEBUG (optional)
  • CONFIG_ATH10K_DEBUGFS (optional)
  • CONFIG_ATH10K_TRACING (optional)

The debug and tracing options are optional, but it's strongly recommended to enable to make it easier to debug issues.

ath10k options can be found from location:

-> Device Drivers
 -> Network device support (NETDEVICES [=y])
   -> Wireless LAN (WLAN [=y])
     -> Atheros Wireless Cards (ATH_CARDS [=m])

Loading the modules

The ath10k modules should be loaded automatically in most systems. If that's not happening, first load ath10k_core.ko and then ath10k_pci.ko.


When building hostapd enable these configuration options:


Example hostapd config to use 11ac VHT80 mode with ath10k:




vht_oper_centr_freq_seg0_idx is calculated for VHT80 with channel + 6.

To enable ACS:


If you get "set channel failed to set in kernel" error message, most likely your regulatory database doesn't support 80 MHz channels.

Reporting bugs

Please send bug reports to the mailing list

Supported Devices

ath10k supports Qualcomm Atheros 802.11ac QCA98xx hw2.0 based devices, here's a list of known products:

ath10k does NOT support older QCA98xx hw1.0 chips found, for example, from these devices:

Atheros common module

ath10k uses the common shared ath.ko module.

Statistics on contributions

Visit the ath10k contribution graphs. You can help keep this up to date if you like. If interested contact the ath10k driver maintainers.


Things ath10k developers are currently working on, and other things to do:

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, 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