This page documents the ongoing process of hardware support in Linux for the Compaq Presario R4000 series of laptops.
I'll provide full updates for all stable (*.*.*), release-candidate (*.*.*-rc1), and stable Morton (*.*.*-mm) releases.
If I build a git snapshot, I'll make a note of whether the kernel runs, but unless a non-trivial issue is merged, don't expect a full update.
Since kernel 2.6.17-rc2 released April 19th, 2006, the bcm43xx SoftMAC driver has been merged mainline. This dramatically increased exposure has obviously resulted in quite a bit of progress since then.
bcm43xx patches in 2.6.17 and 2.6.18 final
[PATCH] bcm43xx: add DMA rx poll workaround to DMA4 [PATCH] bcm43xx: associate on 'ifconfig up' [PATCH] bcm43xx: Fix access to non-existent PHY registers [PATCH] bcm43xx: Fix array overrun in bcm43xx_geo_init [PATCH] bcm43xx: check for valid MAC address in SPROM [PATCH] bcm43xx: fix iwmode crash when down [PATCH] bcm43xx: make PIO mode usable [PATCH] bcm43xx: add to MAINTAINERS [PATCH] bcm43xx: iw_priv_args names should be <16 characters [PATCH] bcm43xx: sysfs code cleanup [PATCH] bcm43xx: fix pctl slowclock limit calculation [PATCH] bcm43xx: fix dyn tssi2dbm memleak [PATCH] bcm43xx: fix config menu alignment [PATCH] bcm43xx wireless: fix printk format warnings [PATCH] bcm43xx: set trans_start on TX to prevent bogus timeouts [PATCH] bcm43xx: don't set the channel on a device, which is down. [PATCH] bcm43xx: sync GPHY init with the specs. [PATCH] bcm43xx: fix the remaining sparse warnings. [PATCH] bcm43xx: remove some compilerwarnings. [PATCH] bcm43xx: fix "include" issues on some platforms. [PATCH] bcm43xx: get rid of "/* vim: ..." lines at the end of several files. [PATCH] bcm43xx: add useless and broken statistics stuff. People seem to want it. well... [PATCH] bcm43xx: fix nrssi_threshold calculation. [PATCH] bcm43xx: sync interference mitigation code to the specs. [PATCH] bcm43xx: set default attenuation values. [PATCH] bcm43xx: some IRQ handler cleanups. [PATCH] bcm43xx: merge all iwmode code into the set_iwmode function. [PATCH] bcm43xx: fix some gpio register trashing (hopefully :D) [PATCH] bcm43xx: remove check for mmio length, as it differs among platforms. (especially embedded) [PATCH] bcm43xx: properly mask txctl1 before writing it to hardware. [PATCH] bcm43xx: Do boardflags workarounds for specific boards. [PATCH] bcm43xx: Remove the workaround in dummy_transmission, [PATCH] bcm43xx: Fix crash on ifdown, by being careful in pio/dma freeing. [PATCH] bcm43xx: reduce the size of bcm43xx_private by removing unneeded members. [PATCH] bcm43xx: add functions bcm43xx_dma_read/write, bcm43xx_dma_tx_suspend/resume. [PATCH] bcm43xx: receive TX status on MMIO or DMA unconditionally regarding the 80211 core rev. [PATCH] bcm43xx: fix some stuff, add a few missing mmiowb(), remove dead code. [PATCH] bcm43xx: Remove the mmio access printing facility overhead. [PATCH] bcm43xx: Abstract the locking mechanism. [PATCH] bcm43xx: Set both, the DMAmask and the coherent DMAmask. [PATCH] bcm43xx: fix DMA TX skb freeing in case of fragmented packets. [PATCH] bcm43xx: Add sysfs attributes for device specific tunables. [PATCH] bcm43xx: Move TX/RX related functions to its own file. Add basic RTS/CTS code. [PATCH] bcm43xx: add assert(bcm->initialized) to periodic_tasks_setup(). [PATCH] bcm43xx: move initialized = 1 to the end of init_board. [PATCH] bcm43xx: Workaround init_board vs IRQ race. [PATCH] bcm43xx: Fix Kconfig typo (transfer mode default) [PATCH] bcm43xx: remove old unused struct. [PATCH] bcm43xx: split the channel helper functions, so that they can be used without a valid running core. [PATCH] bcm43xx: make bcm43xx_sprom_crc() static. [PATCH] bcm43xx: Move sprom lowlevel reading/writing to its own functions. [PATCH] bcm43xx: Code cleanups. This removes various "inline" statements and reduces codesize. [PATCH] bcm43xx: rewrite and simplify the periodic task handling. [PATCH] bcm43xx: fix LED code. [PATCH] bcm43xx: update README [PATCH] bcm43xx: add a note that not all devices support PIO. [PATCH] bcm43xx: Partially fix PIO code. Add Kconfig option for PIO or DMA mode (or both). [PATCH] bcm43xx: remove WX debugging. [PATCH] bcm43xx: fix compiletime warning (phy_xmitpower) [PATCH] bcm43xx: heavily increase mac_suspend timeout. [PATCH] bcm43xx: enable SPROM writing. [PATCH] bcm43xx: fix txpower reporting in WE. [PATCH] bcm43xx: Wireless Ext update [PATCH] bcm43xx: basic ethtool support [PATCH] bcm43xx: Remove function bcm43xx_channel_is_allowed() [PATCH] bcm43xx: Add more initvals sanity checks and error out, if one sanity check fails. [PATCH] bcm43xx: Fix makefile. Remove all the "out-of-tree" stuff. [PATCH] bcm43xx: add DEBUG Kconfig option. Also fix indention. [PATCH] bcm43xx: remove redundant COPYING file. [PATCH] bcm43xx: Move README file to Documentation directory. [PATCH] bcm43xx: remove linux version compatibility code. [PATCH] bcm43xx: sync with svn.berlios.de [PATCH] bcm43xx: patch Kconfig and wireless/Makefile for import [PATCH] bcm43xx-softmac: Fix an off-by-one condition in handle_irq_noise [PATCH] bcm43xx: enable shared key authentication [PATCH] bcm43xx: workaround init_board vs. IRQ race [PATCH] bcm43xx: use softmac-suggested TX rate [PATCH] bcm43xx: netlink deadlock fix [PATCH] bcm43xx: preemptible periodic work [PATCH] bcm43xx: redesign locking [PATCH] bcm43xx: quiet down log spam from set_security [PATCH] bcm43xx: add PCI ID for bcm4319 [PATCH] bcm43xx: fix whitespace [PATCH] bcm43xx: use pci_iomap() for convenience.
That said, however, many still experience difficulties with this driver. While I sidestep the legal caveats behind the microcode firmware binary issue, I will say that if you are using a kernel greater than 2.6.17, make sure that your wireless-tools package is at least version 27.
Most benefits obtained outside of kernel patches are realized through upgrades to the Wireless Extensions API, and unless you have a recent wireless-tools package, you won't notice a difference.
Furthermore, the bcm43xx driver may hog interrupts in your kernel. You may see figures nearing a half-million interrupts per second in 802.11 dense regions!
Depending on which timer interrupt frequency and preempt options your kernel was built, this may actually affect your performance. As a result, to combat this issue, I recommend building the bcm43xx driver as a module (regardless of your static-vs.-module philosophy).
When you use it, modprobe bcm43xx;
when you're done, modprobe -r bcm43xx.