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

Go back –> Atheros Linux wireless drivers


ar9271 is an 802.11n 1-stream USB chipset by Atheros. This page covers its development.

Subscribe to this page!

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

Mailing list

Since ar9271 support is not yet upstream and the driver is still being worked on we use the Linux driver project mailing list to track its development and patches:


ar9271 support is still under development.


If you'd like to work on development for ar9271 get the code first:



ar9271 requires firmware, you can get ar9271fw from:



You can send patches to:


Atheros host target communication

ar9271 support makes use of the HTC / WMI framework for host target communication that the mobile ar6k driver uses present on the OpenMoko. The bus transport layer is new, however.

The Atheros host / target communication framework consists of 3 parts:

  • HTC - Host Target Communication
  • HIF - Host Interface Layer
  • WMI - Wireless Module Interface


ar9271 relies on the Atheros HTC (Host/Target Communication) for the communication between the host CPU the device is present on and between the ar9271 CPU (target).

The Atheros HTC defines a very basic API which allows designers to build protocols of communication for a specific target (device with CPU) and an interconnect/bus. The protocols of communication are Operating System agnostic and architecture agnostic.

When necessary the HTC APIs can be extended to accommodate different interconnects. HTC can also be extended to make enhancements which would make communication more suitable for an Operating System.

It should be noted HTC was originally implemented to accommodate the Atheros AR6000 wireless chipset on Linux and Windows mobile for use on SDIO and SPI.

HTC TX / RX completion callbacks

These TX and RX callbacks in HTC will themselves check the endpoint target and call a respective callback for each endpoint. Control messages are processed via the endpoint 0. Only the RX completion callback makes use of the control endpoint, messages in the control endpoint for TX are disregarded. Buffers are always freed in the TX completion HTC callback. Buffers are only freed by the RX completion HTC callback if the endpoint target does not have a registered callback or if the endpoint is the control endpoint.

HTC Control messages

Messages sent to the RX completion HTC callback on the control endpoint have a message ID which identifies what control message is being received. There are 3 HTC control messages IDs:



When this message is received HTC calls HTCProcessTargetReady().


When this message is received HTC calls HTCProcessConnectionRsp().


When this message is received HTC calls HTCProcessConfigPipeRsp().


The Host InterFace layer, originally designed first for the AR6000 device, is the interconnect driver interface used by a driver. It uses HTC to register callbacks for device insertion and removal, for registration with HTC. ar9271 is the first HIF USB device, as such we have implemented its own HIF driver for USB. The ar9271 module would use the HIF layer to allocate the URBs needed for communication from/to the device. The HIF layer module also defines the callbacks to deal with URBs after being submitted for processing. During initialization the HIF layer uploads the firmware to the ar9271 device upon device probe.


The Wireless Module Interface, also designed first for AR6000, a wireless protocol of communication for Atheros wireless devices using a host/target split. WMI defines commands which you can issue to the target firmware or that the target firmware can send back for processing. WMI also has events for which callbacks are registered, each event has registered callback.

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