[802.11] Set channels early on to avoid tuning to an undefined channel
authorJoshua Oreman <oremanj@rwcr.net>
Sat, 1 Aug 2009 16:52:59 +0000 (09:52 -0700)
committerMichael Brown <mcb30@etherboot.org>
Sat, 8 Aug 2009 23:11:33 +0000 (00:11 +0100)
Some cards (such as ath5k) always need to tune to a particular channel
when they are reset; the reset may happen upon open(), which is before
the channels array would be set up (in prepare_probe()). Avoid tuning
the card to an inconsistent state by copying the hardware
supported-channels array to the 802.11 device's allowable-channels
array even before channels are "properly" set up.

Signed-off-by: Michael Brown <mcb30@etherboot.org>
src/net/80211/net80211.c

index 32547b5..1b2ffd3 100644 (file)
@@ -794,6 +794,11 @@ int net80211_register ( struct net80211_device *dev,
        memcpy ( dev->hw, hw, sizeof ( *hw ) );
        memcpy ( dev->netdev->ll_addr, hw->hwaddr, ETH_ALEN );
 
+       /* Set some sensible channel defaults for driver's open() function */
+       memcpy ( dev->channels, dev->hw->channels,
+                NET80211_MAX_CHANNELS * sizeof ( dev->channels[0] ) );
+       dev->channel = 0;
+
        list_add_tail ( &dev->list, &net80211_devices );
        return register_netdev ( dev->netdev );
 }