Archive for the ‘Linux kernel’ Category

ZD1211 driver news

Tuesday, October 24th, 2006

Despite not mentioning it here for a while, Ulrich Kunitz and myself have been driving forward with our ZD1211 USB-WLAN driver rewrite.

For a start, the driver is included in the recently released Linux 2.6.18 kernel, which has resulted in a drastic increase in the number of users. If you’re looking for a handy way to add wireless connectivity to a computer now and then, these devices are ideal: cheap, small, reliable, in-kernel driver, redistributable firmware.

A more functional driver can be found in the 2.6.19-rc development tree. New features include:

  • LED support – the light goes blinky blink during network usage.
  • Support for devices based on the AL7230B RF (i.e. ZD1211-based devices which support 802.11a). We don’t support 802.11a connectivity just yet, but you can now use these devices to connect to b/g networks.
  • Out-of-the-box support for driverless devices (not even the vendor driver supports this!).
  • More accurate signal strength/quality statistics.
  • Many more device ID’s added thanks to people testing the driver with their hardware.

Coming for 2.6.20: ERP handling (to play nicer when 802.11b clients are in sight), hardware decryption, and more! Many thanks to ZyDAtheros for their continued support.

In-kernel ALSA support in Gentoo

Saturday, September 16th, 2006

I think some people might have misunderstood Diego’s post about ALSA support in Gentoo.

To clarify, we (as in Gentoo kernel maintainers) do support in-kernel ALSA drivers, but Diego (who maintains the out-of-kernel alsa-driver package) does not. I recommend using the in-kernel drivers, Diego recommends using the out-of-kernel drivers.

If you do have problems with the in-kernel version, please do file bugs, but make sure they get assigned to rather than Diego.

ZD1211 support in Linux 2.6.18

Monday, July 10th, 2006

Our driver for USB-WLAN devices based on the ZD1211 chip has progressed through the chain of Linux networking development trees and is now included in the mainline kernel, as of 2.6.18-rc1. I have added the accompanying firmware package to Portage as net-wireless/zd1211-firmware.

We are still developing in out-of-tree git repositories, but I am feeding patches to the in-kernel version which will be sent to Linus during the appropriate merge windows.

Ulrich is AWOL at the moment, probably due to post-World-Cup-depression, but I’m getting back towards actual driver development after some surgery on the softmac layer. Hopefully the minor instability issues will be fixed soon.

ZD1211 news

Sunday, May 7th, 2006

We have made a lot of progress since my last post about our rewritten ZD1211 USB-WLAN driver.

  • Monitor mode – the ability to spy on local network traffic with tools like ethereal.
  • Software encryption – we can now connect to encrypted (WEP + WPA) networks. Hardware-based encryption will be supported later.
  • ZD1211B support – we now support the newer range of ZyDAS devices
  • Improved RX performance
  • Misc fixes and improvements

I managed to get in contact with some ZyDAS engineers, who are responsive and helpful via email. Thumbs up to them, I hope this level of communication can continue for future products beyond the Atheros acquisition.

I have been spending time hacking on softmac (generic code layer which powers ZD1211, bcm43xx, and a few other drivers). I fixed a few bugs, and am now working on finishing some of the incomplete functionality (such as shared key authentication, mixed mode protection and short/long preambles).

There is only one more thing we need to complete before we submit a basic driver for inclusion in Linux 2.6.18: automatic TX power calibration, so that we aren’t needlessly broadcasting our traffic over long distances when the access point is very close. This won’t be too hard once we have figured out how to decode the signal strength. The code in the vendor driver for doing this is quite cryptic, to say the least.

Wireless summit report on LWN

Friday, April 21st, 2006

Jonathan Corbet of LWN attended the Linux Wireless Summit and produced a detailed report of the event, which is now public: The 2006 Wireless Networking Summit. It’s an interesting read for anyone who has had the joy of setting up wireless networking on Linux.

Johannes Berg has produced a faces-to-names version of the group photo. Click on a face to see who it is.

ZD1211 rewrite driver partially usable

Monday, April 17th, 2006

I just announced our just-about-functional rewritten ZD1211 driver on the zd1211-devs mailing list. The driver is actually usable (and reliable!) on unencrypted networks.

A fully usable (WLAN client) driver is now well within sight, we just need to implement connecting to encrypted networks and automatic rate management.

More advanced features (such as ad-hoc connectivity, master mode, monitor mode, …) will come later. Hopefully the community will help us out there.

Linux Wireless Summit

Wednesday, April 12th, 2006

I was lucky enough to spend most of last week in Portland, Oregon. After a chaotic flight all day Tuesday, several of us met on Wednesday and attended a larger social meeting that evening. It was really nice meeting so many active kernel developers who were previously just names in my inbox.

For those that don’t know, wireless networking is one of the weaker areas of the Linux kernel in terms of hardware support, general usability, and excess functional code duplication.

The actual summit took place over Thursday/Friday at OSDL‘s offices. The main topics addressed at the summit were unification of the various generic wireless “stacks” that exist, how we can get more drivers ready for kernel inclusion, and how we can improve communication with vendors and the FCC.

Picture from Jean Tourrihles. Note OSDL’s wireless network key clearly visible on the far right, ahem.

On Friday, I met for dinner with 5 other Gentoo developers. Corey Shields (cshields), Donnie Berkholz (spyderous) and Michael Marineau (marineam) travelled up from OSU. Aaron Kulbe (SuperLag) joined us, who already resides in Portland. Henrik Brix Andersen (brix) was also attending the conference, and brought along two Gentoo users. We had a good time, and I’m going to have to visit OSL if I ever get the opportunity again.

There wasn’t much opportunity for hacking at the summit, but a few us of got together on Saturday and went through some issues. I have never worked on kernel stuff with other kernel hackers in-person before, and this was highly productive. Johannes Berg monitored the wireless traffic produced from our ZD1211 driver rewrite, and threw around some suggestions and softmac patches. Michael Buesch went through the driver source and pointed out a few bugs. Ulrich Kunitz improved the locking. At the end of the session, we had our ZD1211 device associated to the hotel network and browsing the web!

I travelled home on Sunday, just when I was getting used to the timezone. Many thanks to Greg KH who was in the right place at the right time when I realised I had misread my flight timetable (oops!). Also thanks to OSDL for sponsoring my travel and the event itself.

Linux-friendly wireless vendors

Sunday, April 9th, 2006

I’ll write more about the Linux Wireless Summit when I am back at home, but here’s a taster.

One item that was discussed was vendor interaction with the Linux wireless development community, or the lack of it. The wireless networking market is still young and lack of vendor cooperation is one of the things that has resulted in Linux’s support for wireless networking being below par.

Without direct company contacts, there’s not a lot we can do to actively improve this, other than be friendly to those who have cooperated, and be patient. With that, we identified the vendors who have been cooperative:

  • Intel rock – they have done the whole shebang. They write open-source drivers for their Intel Centrino wireless adapters (ipw2100/ipw2200), cooperate enough with the Linux developer community for those drivers to be included in mainline Linux, allow firmware to be redistributed, and have contributed to a generic wireless stack shared between all wireless drivers. These cards are probably the best supported wireless adapters under Linux at this time.
  • ZyDAS write GPL drivers for most of their products, and distribute device specs to Linux developers. They also allow redistribution of device firmware. In terms of hardware support, Linux supports the older ZD1201 USB-Wireless adapters, but I’d really recommend the newer ZD1211 devices instead. ZD1211 will be well supported in mainline Linux hopefully within a few weeks.
  • Ralink have apparently contributed device specs. If anyone has details on hardware support under Linux, leave a comment.

Please keep these vendors in mind when purchasing hardware in the future, and be sure to thank them for their contributions.

ZD1211 TX operational

Saturday, March 25th, 2006

After a couple of weeks of head-scratching, I managed to get the rewritten USB-wireless ZD1211 driver transmitting data.

The code has been written for a while, and although it seems to work (the device doesn’t indicate any form of failure), the frames simply weren’t “hitting the air”.

The problem originates from the huge number of undocumented physical registers in the vendor driver. Rather than list all 200 of them in our driver source in the ugly manner which ZyDAS do so, we devised a quick one-line macro to perform the same task:

#define CR(reg)                CTL_REG((reg)*4)

However, it appears that ZyDAS have some trouble counting. A snippet from the vendor driver:

#define        ZD_CR1            0x0004
#define        ZD_CR2            0x0008
#define        ZD_CR3            0x000C
#define        ZD_CR5            0x0010
#define        ZD_CR6            0x0014
#define        ZD_CR7            0x0018
#define        ZD_CR8            0x001C
#define        ZD_CR4            0x0020
#define        ZD_CR9            0x0024

1,2,3,5,6,7,8,4,9… Our macro obviously doesn’t match the unordered nature of those low CR addresses.
After inserting the appropriate hacks into our driver, packets start flying, as confirmed by another wireless card in monitor mode.

Be warned: although we have transmit and receive working to some degree, the driver isn’t ready for users wanting to connect to networks yet.

I’m attending the OSDL Wireless Developer Summit in the first week of April, and I’m hoping that we’ll have a partially usable driver in time for that.

ZD1211 wireless hacking

Saturday, February 25th, 2006

I’ve been spending some time over the last few weeks hacking on a USB Wireless-LAN adapter based on the ZyDAS ZD1211 chip. There are actually 40+ ZD1211-based products available on the market so Linux support for this device has some big implications.

ZyDAS themselves produce a Linux driver which is updated semi-regularly, however the code is horrible and the driver is unreliable for many. On the other hand, it’s good that they have released a full GPL driver and have also been cooperative with providing technical documentation and flexibility on redistributing the firmware. There have been some forks which try to stabilise the vendor driver, the latest being, but none of these forks have been aiming for kernel inclusion.

In January, myself and Danny van Dyk started a driver rewrite project and published some initial code. Soon after doing so, I was contacted by Ulrich Kunitz, a hacker who had spent several weeks previously developing a rewritten driver. We switched over to Ulrich’s driver base and continued from there.

Unlike the vendor driver, we are taking full advantage of Linux’s IEEE 802.11 wireless stack. As the driver must do most things in software, we are also using the softmac extension which simplifies many generic operations (scanning, authentication, etc). A nice side effect of this is that when we have written the code to send and receive packets, the driver is almost complete (the other layers do the rest of the work).

Yesterday, I hacked together an initial scanning implementation and successfully scanned my local area for wireless networks. This means that receiving packets is more-or-less working – a nice milestone to reach.

Some information and links to the code can be found here. Be warned, this is useful for users yet. Watch this space for updates.