Search Linux Wireless

[RFT 0/6] carl9170usb: replacement driver for ar9170usb

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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. Shortly
after that Johannes Berg put a lot of effort into rewriting the driver
for proper upstream inclusion. I simply had to take what was already
there, add a few finishing touches to address 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.

But 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 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 has been 1 year, 5 months, 9 days since this merge of ar9170usb
upstream and I am very pleased to announce and submit the carl9170
driver upstream which actually ends up not only replacing but
superseding the staging Otus driver.

The carl9170 driver comes with:

	* Supports High Throughput/802.11n up to PHY speeds
	  of 300Mbits (~ RL performance of max. 100Mbit/s tcp,
	  udp goes to 130 and beyond)

	* Access-Point mode for legacy stations and a
	  few improvements for IBSS.

	* multi-rate retry support. In order to improve throughput
	  and better link stability.

	* fully-automatic recovery from a number of
	  previously fatal events.

	* an input-device for the WPS push button, which
	  is present on some devices on the market.

	* pseudo virtual interfaces
	  (useful for universal repeater mode, or multiple APs)

	* facilities for debugging, testing and data dumping
	  within the driver (DebugFS), or in an isolated
	  userspace environment (carlu).

	* AES Offload in single AP and single Station mode.

	* and a few small bits:
		* firmware images are protected against:
			- the use with the wrong driver and vice versa
			- random/non-malicious corruptions

		* configurable firmware build, thanks to Kconfig
		  and cmake.

Upstream wireless-testing.git patch:
http://www.kernel.org/pub/linux/kernel/people/chr/carl9170/drv/1.8.8.1/carl9170-driver-1.8.8.1.diff

Firmware GPLv2 binary:
http://www.kernel.org/pub/linux/kernel/people/chr/carl9170/fw/1.8.8.1/carl9170-1.fw

Firmware source code:

http://git.kernel.org/?p=linux/kernel/git/chr/carl9170fw.git

The firmware source code comes with support for building the
toolchain. Requirements for building everything:

  * make 2.8+
  * bison
  * flex
  * gperf
  * libUSB 1.0+
  * libSDL 1.2+

For more details please see:

http://wireless.kernel.org/en/users/Drivers/carl9170 
(in the coming days, it's too dark to start now :-/ )

Christian Lamparter (6):
  carl9170usb: mac80211 glue and command interface
  carl9170usb: Hardware register, descriptors and eeprom definitions
  carl9170usb: PHY/RF and MAC routines
  carl9170usb: 802.11 rx/tx processing and usb back-end
  carl9170usb: firmware parser and debugfs code
  carl9170usb: Makefile, Kconfig files and MAINTAINERS

 MAINTAINERS                                  |    1 +
 drivers/net/wireless/ath/Kconfig             |    1 +
 drivers/net/wireless/ath/Makefile            |    1 +
 drivers/net/wireless/ath/carl9170/Kconfig    |   37 +
 drivers/net/wireless/ath/carl9170/Makefile   |    4 +
 drivers/net/wireless/ath/carl9170/carl9170.h |  597 ++++++++
 drivers/net/wireless/ath/carl9170/cmd.c      |  208 +++
 drivers/net/wireless/ath/carl9170/cmd.h      |  157 +++
 drivers/net/wireless/ath/carl9170/debug.c    |  908 +++++++++++++
 drivers/net/wireless/ath/carl9170/debug.h    |  135 ++
 drivers/net/wireless/ath/carl9170/eeprom.h   |  216 +++
 drivers/net/wireless/ath/carl9170/fw.c       |  397 ++++++
 drivers/net/wireless/ath/carl9170/fwcmd.h    |  268 ++++
 drivers/net/wireless/ath/carl9170/fwdesc.h   |  235 ++++
 drivers/net/wireless/ath/carl9170/hw.h       |  736 ++++++++++
 drivers/net/wireless/ath/carl9170/led.c      |  190 +++
 drivers/net/wireless/ath/carl9170/mac.c      |  611 +++++++++
 drivers/net/wireless/ath/carl9170/main.c     | 1873 ++++++++++++++++++++++++++
 drivers/net/wireless/ath/carl9170/phy.c      | 1802 +++++++++++++++++++++++++
 drivers/net/wireless/ath/carl9170/phy.h      |  575 ++++++++
 drivers/net/wireless/ath/carl9170/rx.c       |  910 +++++++++++++
 drivers/net/wireless/ath/carl9170/tx.c       | 1370 +++++++++++++++++++
 drivers/net/wireless/ath/carl9170/usb.c      | 1143 ++++++++++++++++
 drivers/net/wireless/ath/carl9170/version.h  |    7 +
 drivers/net/wireless/ath/carl9170/wlan.h     |  412 ++++++
 25 files changed, 12794 insertions(+), 0 deletions(-)
 create mode 100644 drivers/net/wireless/ath/carl9170/Kconfig
 create mode 100644 drivers/net/wireless/ath/carl9170/Makefile
 create mode 100644 drivers/net/wireless/ath/carl9170/carl9170.h
 create mode 100644 drivers/net/wireless/ath/carl9170/cmd.c
 create mode 100644 drivers/net/wireless/ath/carl9170/cmd.h
 create mode 100644 drivers/net/wireless/ath/carl9170/debug.c
 create mode 100644 drivers/net/wireless/ath/carl9170/debug.h
 create mode 100644 drivers/net/wireless/ath/carl9170/eeprom.h
 create mode 100644 drivers/net/wireless/ath/carl9170/fw.c
 create mode 100644 drivers/net/wireless/ath/carl9170/fwcmd.h
 create mode 100644 drivers/net/wireless/ath/carl9170/fwdesc.h
 create mode 100644 drivers/net/wireless/ath/carl9170/hw.h
 create mode 100644 drivers/net/wireless/ath/carl9170/led.c
 create mode 100644 drivers/net/wireless/ath/carl9170/mac.c
 create mode 100644 drivers/net/wireless/ath/carl9170/main.c
 create mode 100644 drivers/net/wireless/ath/carl9170/phy.c
 create mode 100644 drivers/net/wireless/ath/carl9170/phy.h
 create mode 100644 drivers/net/wireless/ath/carl9170/rx.c
 create mode 100644 drivers/net/wireless/ath/carl9170/tx.c
 create mode 100644 drivers/net/wireless/ath/carl9170/usb.c
 create mode 100644 drivers/net/wireless/ath/carl9170/version.h
 create mode 100644 drivers/net/wireless/ath/carl9170/wlan.h

(Text adapted from Luis)

Regards,
	Chr
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux