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

Go back –> Atheros Linux wireless drivers


carl9170 is the 802.11n USB driver with GPLv2 firmware for Atheros USB AR9170 devices.



Before you can use the driver, you have to get the the right firmware.


Users should be aware that these devices might go mad from time to time. Because these BUGs seem to occur too randomly to be identified, but happen often enough to be really annoying, the firmware and driver come with some convenient features to keep the overall downtime at a minimum and without requiring any user intervention. But as mention before there is a caveat: The user has to setup everything properly!

In general: The userspace has to be able to restore connectivity on its own as soon as the device reappears on the USB-Hub.

See FAQ for more details.

Multiple Interfaces

While the driver supports multiple virtual interfaces, in different combinations:

  • just stations
  • just access points
  • access points (main interface) and stations (all slave)

there are some important caveats: See FAQ for more details.

802.11n Compatibility

It's worth mentioning that the chip was designed, produced and sold in the early 802.11n-draft period. Compatibility will always be an issue.

A known problem is that hardware can not support frame aggregation and QoS at the same time, meaning the device is not suitable for any serious 802.11n setup.





Hardware incompatibility

replace hardware

Any Intel N Wifi Link

Aggregation stalls

driver workaround


Random disconnects


See Contact, if you want to report issues with specific setups.

available devices

Product USB Vendor
USB Product
3Com Dual Band 802.11n USB 0x0cf3 0x1010
Actiontec 802AIN Wireless N 0x1668 0x1200
Airlive X.USB 11a/b/g/n 0x1b75 0x9170
Arcadyan WN7512 0x083a 0xf522
Atheros 9170 0x0cf3 0x9170
Atheros TG121N 0x0cf3 0x1001
AVM FRITZ!WLAN USB Stick N 0x057c 0x8401
AVM FRITZ!WLAN USB Stick N 2.4 0x057c 0x8402
Cace Airpcap NX 0xcace 0x0300
D-Link DWA-130 D 0x07d1 0x3a0f
D-Link DWA-160 A1 0x07d1 0x3c10
D-Link DWA-160 A2 0x07d1 0x3a09
H3C Dual Band 802.11n USB 0x0cf3 0x1011
IO-Data WNGDNUS2 0x04bb 0x093f
NEC WL300NU-AG 0x0409 0x02b4
NEC WL300NU-G 0x0409 0x0249
Netgear WN111 v2 0x0846 0x9001
Netgear WNA1000 0x0846 0x9040
Netgear WNDA3100 (v1) 0x0846 0x9010 500mA
Planex GWUS300 0x2019 0x5304
Proxim ORiNOCO 802.11n USB 0x1435 0x0804
Sphairon Homelink 1202 0x0cde 0x0027
TP-LINK TL-WN821N v2 0x0cf3 0x1002 500mA
WNC Generic 11n USB Dongle 0x1435 0x0326
Z-Com UB81 BG 0x0cde 0x0023
Z-Com UB82 ABG 0x0cde 0x0026
Zydas ZD1221 0x0ace 0x1221
Zyxel NWD271N 0x0586 0x3417


  • 802.11abg/bg + draft-n (depending on hardware)
  • 1 or 2 spatial streams for 802.11n (depending on hardware)
  • GPLv2 firmware

  • Up to 9 (1 Master, 8 Slave) Interfaces
  • programmable LEDs
  • WPS Button (depending on hardware)


  • 802.11 a/b/g/draft-n
  • legacy (802.11bg) access point, ad-hoc operation mode
  • 802.11n station mode, monitor (with injection)
  • cryptographic accelerator when operating as a single station, or single access point.
  • Multiple interfaces
  • full support for MRR (minstrel & minstrel_ht) rate control algorithms

  • Input device for WPS button event (depending on hardware)
  • automatic recovery from several fatal events
  • Regulatory domain restrictions
  • Wake-on-LAN support (can resume your system from suspend-to-ram)

not working yet

  • Power Save Mode, It's implemented but buggy
  • SMPS
  • hw crypto for multiple access points.
  • long-distance links
  • Hardware WMM
  • (Possibly FRITZ!WLAN USB Stick N)
  • RIFS
  • channel utilization report

not supported

  • Accelerator for CCX (Cisco)
  • real 802.11n AP
  • Radar detection
  • fast channel change


The latest version is available from wireless-testing.git.


Firmware source code

There is code available, check out the carl9170.fw page for more details.

Firmware binary

You can download the GPLv2 Firmware binary: Firmware archive

for Kernel

Firmware Version

Download Link

Linux 2.6.x and 3.0



Linux 3.1 and newer




General FAQ

Can I use newer carl9170 firmwares with any old carl9170 driver, or vice versa?

  • Depends on the combination. But the driver will evaluate, if it can safely support the firmware, or reject it.

Can I use the new carl9170 firmware with driver like otus or ar9170usb?

  • No.

Does the driver support the original firmwares?

  • No.

I don't need HT, how do I disable it?

  • Through a module parameter. 'noht=1'

How can I disable the hardware crypto?

  • Through a module parameter. 'nohwcrypt=1'

Recovery FAQ

I get "FW: ... MAC RESET" kernel messages, what are those?

  • It's a tx/rx watchdog message. The hardware refused to process in-/outbound frames and the firmware tried to fix it.

    Even under normal conditions the message can be pop up from time to time.

How can I check if the recovery option works correctly?

  • You can easily test this by physically unplugging and replugging the device. If your connection is coming back, then you are done! If not, you have to find out how your distribution is doing network link hotplugging.

All of a sudden, the device stops working for a few seconds (but recovers)

  • You should check if the driver has issued a device restart. There should be a "restart device (#number)" message in your system's logs.




a fatal firmware error has occurred; the previous "FW" message contains more details


excessive flood of (non-fatal) firmware errors; check previous messages.


Hardware watchdog triggered, because the firmware has crash silently.


stuck tx queues. this is almost always a driver bug, so please file a report.


your system wasn't able to process requests fast enough; as a result the device has become unresponsive.


command timeout. Either fw/driver bugs or a bad cable/hw malfunction.


RF/PHY has become too unstable. Check for radars or microwave ovens?


lost command response. related to 6/command timeout


unexpected/invalid command response. also related to 6/command timeout


firmware restart was requested by user (through DebugFS)

Multiple Interfaces FAQ

Why can't I enable more than two interfaces?

  • In order to overcome this limitation, you'll have to configure the firmware to provide more interface instances. But be advised that additional instances are not as free as you might think and you may lose some tx buffers.

I've setup a station and I can add more, so but why can't I have an AP now too?

  • Because you have to add and initialize the AP first. (TBE)

How come my computer seems to be burdened with encrypting/decrypting?

  • This is expected, the hardware has problems selecting the right group-keys when multiple different keys are available. Because of this limitation, the driver disables crypto-offload and your CPU has to do it.

All of a sudden the device stopped transmitting?!

  • Maybe a different interface is scanning, or operating on a different channel. Note: All AR9170 only have ONE PHY, it isn't possible to operate on different channels at the same time!

Is it possible to mix Legacy, HT20, HT40+, HT40- channel settings?

  • No.

Is it possible to have different beacon period?

  • No, the beacon period must be the same, but you can have different dtim counts.


The Otus driver

Atheros merged support for their USB AR9170 2-stream 802.11n chipsets into the Linux kernel on the v2.6.29 release through a staging driver called Otus. The shortcomings for this driver was it required its own custom supplicant and obviously the code quality was sub-par.

ar9170usb driver

Shortly after Otus was submitted into staging Johannes Berg put a lot of effort into rewriting the driver for proper upstream inclusion. Christian Lamparter simply took what was already there, added a few finishing touches to addressed upstream considerations and we got it merged on the 2.6.30 release under the ar9170usb name.

During this time a lot of good work went into stabilizing the driver to replace the staging Otus driver from Atheros. The project had ambitious hopes to completely supersede the original Atheros staging driver: Otus.

To achieve this all functionality, performance, stability and quality must have been equally matched. In the end this proved quite challenging even though Atheros was kind enough to provide detailed documentations, hardware specifications and most importantly, they actually released the firmware source code ar9170.fw under GPLv2!

It took months to dig through all the code and during this time the ar9170usb driver project lost most of its momentum and changes to the driver where limited to simple USB IDs updates, API fix-ups and serious crash fixes.


Towards the beginning of 2010 a new shiny driver: carl9170usb started brewing with the main goal of replacing the existing driver and making use of only open firmware.

It took 1 year, 5 months, 9 days since this merge of ar9170usb upstream to release carl9170 with upstream inclusion intentions.

The carl9170 driver actually ends up not only replacing but superseding the staging Otus driver.


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