How did the project begin?
This project was started by Andrew Miklas as a response to Broadcom's refusal to open specs for the Broadcom 43xx chipset used in Linksys routers (such as the WRT54G). There were some GPL concerns as to the legality of Broadcom's binary driver (outlined here http://lkml.org/lkml/2003/6/7/164 ) and a petition was started to convince Broadcom of the need for open drivers and/or specs (http://www.petitiononline.com/BCM4301/petition.html). To this day, Broadcom has refused to provide specifications or source for their driver. This project was created to write specifications for these chipsets and allow native Linux support for an extremely popular wireless chipset.
How the specifications were created
We reverse engineered the Broadcom 43xx chipset family by carefully analysing disassembled code from various Broadcom driver revisions. First, we partially hand translated the assembly to C which allowed for a greater understanding of the hardware and its functionality. Using that and a creative Mac-On-Linux hack to allow PCI Proxying, we better understood how the hardware worked, the result of which is documented here.
Summary of the process from start to the current bcm43xx driver:
- Translate assembly to C
- Understand the code and write specifications
- Find another group to write drivers from the specifications
The result of steps 1 and 2 is this website, the driver written from the specifications (step 3) can be found at http://bcm43xx.berlios.de
Since new revisions of the Broadcom 43xx chipsets are now available, work is still continuing on better understanding the hardware and writing better specs.