On Wed, 15 Mar 2006 09:40:52 -0800, Jouni Malinen wrote: > This breaks bcm43xx-d80211 build. Do you happen to have a patch to fix > it?
Yes, I do. Sorry for not posting it. This is a first part; it's just ugly and quick (but working) fix. Index: dscape/drivers/net/wireless/bcm43xx-d80211/bcm43xx.h =================================================================== --- dscape.orig/drivers/net/wireless/bcm43xx-d80211/bcm43xx.h 2006-03-06 15:37:20.000000000 +0100 +++ dscape/drivers/net/wireless/bcm43xx-d80211/bcm43xx.h 2006-03-15 17:29:08.000000000 +0100 @@ -720,6 +720,7 @@ struct bcm43xx_private { /* Informational stuff. */ char nick[IW_ESSID_MAX_SIZE + 1]; u8 bssid[ETH_ALEN]; + int interfaces; /* encryption/decryption */ u16 security_offset; Index: dscape/drivers/net/wireless/bcm43xx-d80211/bcm43xx_main.c =================================================================== --- dscape.orig/drivers/net/wireless/bcm43xx-d80211/bcm43xx_main.c 2006-03-06 15:37:20.000000000 +0100 +++ dscape/drivers/net/wireless/bcm43xx-d80211/bcm43xx_main.c 2006-03-15 17:29:08.000000000 +0100 @@ -4409,9 +4409,6 @@ static int bcm43xx_net_config(struct net if (conf->channel != radio->channel) bcm43xx_radio_selectchannel(bcm, conf->channel, 0); - if (conf->mode != bcm->iw_mode) - bcm43xx_set_iwmode(bcm, conf->mode); - if (conf->short_slot_time != bcm->short_slot) { assert(phy->type == BCM43xx_PHYTYPE_G); if (conf->short_slot_time) @@ -4578,6 +4575,33 @@ static int bcm43xx_net_stop(struct net_d return 0; } +static int bcm43xx_add_interface(struct net_device *net_dev, + struct ieee80211_if_conf *conf) +{ + struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); + + if (bcm->interfaces > 0) + return -ENOBUFS; + if (memcmp(bcm->net_dev->dev_addr, conf->mac_addr, ETH_ALEN) != 0) + return -EADDRNOTAVAIL; + if (conf->type == IEEE80211_SUB_IF_TYPE_STA) + bcm->iw_mode = IW_MODE_INFRA; + else if (conf->type == IEEE80211_SUB_IF_TYPE_IBSS) + bcm->iw_mode = IW_MODE_ADHOC; + else + return -EOPNOTSUPP; + bcm->interfaces++; + return 0; +} + +static void bcm43xx_remove_interface(struct net_device *net_dev, + struct ieee80211_if_conf *conf) +{ + struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); + + bcm->interfaces--; +} + /* Initialization of struct net_device, just after allocation. */ static void bcm43xx_netdev_setup(struct net_device *net_dev) { @@ -4659,6 +4683,8 @@ static int __devinit bcm43xx_init_one(st ieee->tx = bcm43xx_net_hard_start_xmit; ieee->open = bcm43xx_net_open; ieee->stop = bcm43xx_net_stop; + ieee->add_interface = bcm43xx_add_interface; + ieee->remove_interface = bcm43xx_remove_interface; ieee->reset = bcm43xx_net_reset; ieee->config = bcm43xx_net_config; //TODO ieee->set_key = bcm43xx_net_set_key; -- Jiri Benc SUSE Labs - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html