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

ath9k

ath9k is a completely FOSS wireless driver for Atheros IEEE 802.11n WLAN based chipsets.

Subscribe to this page!

You should subscribe to this page so you can get e-mail updates on changes and news for ath9k automatically. You'll get an e-mail as soon as this page gets updated.

Mailing list

Our mailing list for this driver is:

https://lists.ath9k.org/mailman/listinfo/ath9k-devel

Get the latest ath9k driver

Any distribution shipping a kernel >= 2.6.27 will have ath9k present. Below is a list of the minimal distribution requirements to either use ath9k from 2.6.27 or from compat-wireless.

  • Ubuntu Intrepid (8.10)
  • Fedora Core 10
  • openSUSE 11.1
  • Mandriva Linux 2009.0 (formally known as Mandrake Linux)
  • ARCH Linux
  • Gentoo Linux
  • Red Flag Linux 7.0 (based on Fedora 10)

If you want to get the latest ath9k driver you can get it by using the wireless-testing git tree. Read our git-guide for that. Alternatively you can simply upgrade only your Linux wireless subsystem by using compat-wireless.

Enabling ath9k

To enable ath9k, you must first enable mac80211:

Networking  --->
  Wireless  --->
    <M> Improved wireless configuration API
    <M> Generic IEEE 802.11 Networking Stack (mac80211)

You can then enable ath9k in the kernel configuration under

Device Drivers  --->
  [*] Network device support  --->
        Wireless LAN  --->
          <M>   Atheros 802.11n wireless cards support

Enabling bluetooth coexistance

You can enable bluetooth coexistance on ath9k by using the btcoex_enable module parameter. This is not enable by default as some devices have had issues with it.

modprobe ath9k btcoex_enable=1

Enabling debug

If you have issues with ath9k you can enable debug in ath9k. You will first need to enable the Kconfig option (CONFIG_ATH9K_DEBUG):

Device Drivers  --->
  [*] Network device support  --->
        Wireless LAN  --->
          <M>   Atheros 802.11n wireless cards support
          [*]     Atheros ath9k debugging

Then you can use the module parameter debug. We cover below the different available debug levels you can use.

enum ATH_DEBUG {
        ATH_DBG_RESET           = 0x00000001,
        ATH_DBG_QUEUE           = 0x00000002,
        ATH_DBG_EEPROM          = 0x00000004,
        ATH_DBG_CALIBRATE       = 0x00000008,
        ATH_DBG_INTERRUPT       = 0x00000010,
        ATH_DBG_REGULATORY      = 0x00000020,
        ATH_DBG_ANI             = 0x00000040,
        ATH_DBG_XMIT            = 0x00000080,
        ATH_DBG_BEACON          = 0x00000100,
        ATH_DBG_CONFIG          = 0x00000200,
        ATH_DBG_FATAL           = 0x00000400,
        ATH_DBG_ANY             = 0xffffffff
};

If you want to debug calibration (0x00000008) and resets (0x00000001) for example you would use (0x00000008 | 0x00000001) = 0x00000009. To debug everything just use 0xffffffff. Below is an example of how to enable debug for just configuration changes:

modprobe ath9k debug=0x00000200

Products with ath9k cards

You can find all products int the market with ath9k cards on the ath9k products page.

supported chipsets

  • AR5418+AR5133
  • AR5416+AR5133
  • AR5416+AR2133
  • AR9160
  • AR9280
  • AR9281
  • AR9285 (>= 2.6.29)

  • AR9102 (AHB) (>= 2.6.30)

  • AR9103 (AHB) (>= 2.6.30)

Working

Modes of operation

  • Station Mode

  • AP Mode

  • IBSS Mode

Features

  • 802.11abg
  • 802.11n
    • HT20
    • HT40
    • AMPDU
    • Short GI (40 MHz only)
  • 802.11i
    • WEP 64 / 127
    • WPA1 / WPA2
  • 802.11d
  • 802.11h
  • 802.11w/D7.0
  • WPS client side (use wpa_gui-qt4 from wpa_supplicant for now)
  • WMM
  • LED
  • RFKILL
  • BT co-existence (with a module parameter)
  • 64-bit support / big endian, small endian
  • AHB and PCI bus

TODO

Things on our TODO list.

Being worked on

  • Multiple Interface support.

Immediate Love

  • Performance tuning, on MIPS routers currently CPU usage (softirq) is much higher than older MadWifi driver.

Cleanup

* Design a descriptor layer

  • Must probably encompass struct ath_rx_status and struct ath_tx_status, making struct ar5416_desc a HW type. Again, a clean layer for accessing descriptors.

* Rate Control cleanup

  • RC should be easily swappable with other algorithms, minstrel, for example. An easy hack would be to have an index conversion routine between MCS and internal. But the proper solution would be to fix ath9k's RC to use MCS indices internally.

* Cleanup HW capabilities

  • Still too convoluted.

* Cleanup ChannelFlags

  • Still a bit ugly.

* Naming Convention

  • Decide on a consistent and uniform prefix - do we want ath9k_ or ath_ everywhere ?

After the above mentioned points are taken care of, ath9k.h would be small enough to be merged with core.h. Any help is greatly appreciated (hint, hint).

In the long run

  • MIMO Power save
  • UAPSD
  • WDS - Already part of mac80211, probably can be added after AP
  • STBC
  • WOW
  • RIFS

Will not be supported

  • WEP 152 - there are no plans to support this in mac80211

A little history on ath9k

When it went in

ath9k was announced to have been merged into Linux-2.6.27-rc3 by Linus on Tue, 12 Aug 2008 19:33:16 -0700 (PDT), and consisted of 58.8% of the entire rc3 patch.

Early distributions which picked it up

OpenWrt became the first distribution to pick up ath9k and contribute to it.

Reported bugs on ath9k

This is a collection of bug reports both unresolved and resolved to help users track issues and to find patches for fixes which have not yet been merged.

Distribution bugs

Invalid

Most common known issues

Minimal kernel requirements

You want at least these kernels to use ath9k:

  • >= 2.6.27.22

  • >= 2.6.28.10

  • 2.6.29.3

Ubuntu users

Please refer to Ubuntu kernel release to Mainline kernel release map to find out which package name you need as well as from what repository (called "pocket"). If you have no clue what was just described please read the Ubuntu Wireless documentation.

Hangs with PCI devices and SMP systems

This issue was due to a hardware limitation on our PCI devices whereby our device's FIFO queue got filled up and caused a loop. This issue is only present on our 11n PCI devices, its not present on our PCI-express devices nor our legacy 802.11abg devices.

The fix was to serialize read/writes – a spin_lock around each read and write. This fix is not performed for PCI devices or non-SMP systems. This fix is present in 2.6.29, 2.6.28.10 and 2.6.27.22.

DMA issues on 2.6.27

DMA issues were present on first release of 2.6.27, these issues were easily reproducible on MacBook Pros. This issue was fixed on 2.6.27.8.

Loss of connectivity after large file transfer on 2.6.28

This issue was fixed in 2.6.28.1, the issue was caused by the fact that ath9k was configured to ignore beacons and mac80211 expects them, after a large data transfer it is possible the beacons could have been missed and mac80211 detects a timeout of waiting for beacons or receiving data.


This is a static dump of the old wiki, taken after locking it in January 2015. The new wiki is at https://wireless.wiki.kernel.org/.
versions of this page: last, v185, v184, v183, v182, v181, v180, v179, v178, v177, v176, v175, v174, v173, v172, v171, v170, v169, v168, v167, v166, v165, v164, v163, v162, v161, v160, v159, v158, v157, v156, v155, v154, v153, v152, v151, v150, v149, v148, v147, v146, v145, v144, v143, v142, v141, v140, v139, v138, v137, v136, v135, v134, v133, v132, v131, v130, v129, v128, v127, v126, v125, v124, v123, v122, v121, v120, v119, v118, v117, v116, v115, v114, v113, v112, v111, v110, v109, v108, v107, v106, v105, v104, v103, v102, 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