Welcome to the home of the AT76C503A Linux USB Driver

This web site coordinates the work on the Linux driver for the Atmel AT76C503A Media Access Controller (MAC), used in several Wireless USB networking devices, including the D-Link DWL-120.

Information on the driver architecture

The driver is in two parts - a firmware loader that runs in user space, and relies on the libusb library; and a network driver that will be integrated into the Linux kernel.

Firmware loader

The AT76C503A descriptors show that it uses the Device Firmware Upgrade class. The specification for this specification is available as http://www.usb.org/developers/data/devclass/usbdfu10.pdf .

As it turns out, the AT76C503A needs some extra downloading. The firmware loader that we have developed does both the "internal" and "external" parts.

Kernel network driver

The kernel driver interfaces "downwards" to the actual hardware via the USB stack. It interfaces "upwards" to the networking stack. This means that the device is exposed to the user as a normal "ethernet" type interface (aka eth0, eth1 or somesuch).

Because of the nature of the device, it also implements some extra ioctl() calls, known as the wireless extensions.

Driver status

The whole thing is experimental. We have released an early version of the firmware loader. The kernel space driver can do some basic things, such as claim the USB device, establish the network device, and get the MAC address. I can also respond to one wireless extension ioctl.


This section describes how to set up the device.

HowTo set up the firmware loader

The first thing you need to do is download the tarball (or CVS) of the firmware downloader code. You can get the most recent version from the Sourceforge project page: http://sourceforge.net/projects/at76c503a/

If you don't have libusb installed, download it from http://sourceforge.net/projects/libusb/ . You should build and test it according to the instructions provided with it.

You should now be able to build the firmware downloader utility. Just run make, and it should be built. You may need to use the -I option and the -l option to wherever the libusb header and library are installed, depending on your system configuration.

You also need the internal and external firmware images. You probably got them as part of the firmware that came with your device - if not, you can download a driver zip file, and extract them. Try ftp://ftp.dlink.com/Wireless/DWL120/Driver/dwl120_driver_225.zip

You can now plug in your USB to 802.11 adapter, and run the executable (./atmel-fw) to download the code. If it all works, you should see a stream of messages like in the README.

Kernel space driver

This will be provided when there is a released kernel space driver.

If it doesn't work

If you have problems, we definately want to know. It'd be nice to know if you get it to work too.

When reporting problems (or success), please include at least the extract of the /proc/bus/usb/devices file and the full list of user space messages or kernel logs. PLEASE cut and paste, and don't try to summarise or modify the output. Please try to describe what you were trying to do when the problem occurred. The extract of /proc/bus/usb/devices should be the part for the USB wireless networking device. Send all of it, if you aren't sure which is the relevant part.

Other things that help include which kernel version you are using, and which host controller driver (uhci, usb-ohci, usb-uhci, ohci-hcd or ehci-hcd) you are using, plus for networking tools, which tools (and version) of the tools cause problems.