Saturday, January 27, 2007

Linux Wireless: Almost There

I finally gave up on ever getting my old Broadcom BCM4401 wireless card to work under Linux, so I went out and bought an Intel 3945ABG card (which is actually one of the cards Dell ships with my laptop model, just not the one I happened to get (through no fault of my own)). Out-of-the-box support from the stock ipw3945 driver. Plays nice with the Network Manager and the proprietary nVidia driver. Suspend works. Sweet.

Having taken a moment to appreciate this vast improvement in my computing situation, I will now proceed to bitch. Every now and then---say every 3rd or 4th time I suspend---the wireless card doesn't come on after I resume. All I have to do is "rmmod ipw3945; modprobe ipw3945" and it comes back fine (which is better than manually fussing with the ESSID, which I have often had to do in the past).

I filed a bug on this and one of the maintainers suggested I add the module to the "suspend blacklist". I politely asked both the maintainer and Google what and where the "suspend blacklist" is, but I've gotten no answers. There's a bunch of scripts in /etc/acpi that seem relevant, but from what I can tell, they should already being doing what I want to hack them to do. Which might mean they're not even being used anywhere anyway...

At less frequent intervals---say every 9th or 10th time I suspend---the module is "busy" when I try the unload/reload step and I have to reboot to get things back in order. I can't figure out how to find out which process has a lock on the module either...

Bah!

2 comments:

Anonymous said...

I don't know where to find the "suspend blacklist" either (I suspect that's not its True Name), but with pm-utils the relevant scripts go in /etc/pm/sleep.d; for example in there I have 11airo (11 puts it after the network stop/start script in /usr/lib/pm-utils/sleep.d/) that currently looks like this
[this is meant to be in html code and pre, but blogger doesn't allow these tags]

#!/bin/bash

. /usr/lib/pm-utils/functions

case "$1" in
hibernate|suspend)
rmmod airo;
logger airo removed
;;
thaw|resume)
# will this be forced anyway when the network is restarted?
# modprobe airo
# logger airo installed
;;
*)
;;
esac

exit $?

I haven't finished messing about with it yet, but something like that should work.

Chris said...

Thanks for the tip, Jón. My wireless situation has more or less stabilized.