diff options
| author | Steve French <sfrench@us.ibm.com> | 2005-10-31 08:36:11 -0800 | 
|---|---|---|
| committer | Steve French <sfrench@us.ibm.com> | 2005-10-31 08:36:11 -0800 | 
| commit | 53b2ec5518aa2623e8c0cb36f1c304a797988a46 (patch) | |
| tree | 465d8631ade6c2fcbd7576ff9813d00116c6a1e8 /drivers/net/wireless/hostap/hostap_cs.c | |
| parent | 0753ca7bc2b876dd136e9db11a20f85cbe4e08b1 (diff) | |
| parent | 581c1b14394aee60aff46ea67d05483261ed6527 (diff) | |
Merge with /pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Diffstat (limited to 'drivers/net/wireless/hostap/hostap_cs.c')
| -rw-r--r-- | drivers/net/wireless/hostap/hostap_cs.c | 50 | 
1 files changed, 13 insertions, 37 deletions
diff --git a/drivers/net/wireless/hostap/hostap_cs.c b/drivers/net/wireless/hostap/hostap_cs.c index faa83badf0a..2643976a667 100644 --- a/drivers/net/wireless/hostap/hostap_cs.c +++ b/drivers/net/wireless/hostap/hostap_cs.c @@ -492,42 +492,10 @@ static void prism2_pccard_genesis_reset(local_info_t *local, int hcr)  } -static int prism2_pccard_dev_open(local_info_t *local) -{ -	struct hostap_cs_priv *hw_priv = local->hw_priv; -	hw_priv->link->open++; -	return 0; -} - - -static int prism2_pccard_dev_close(local_info_t *local) -{ -	struct hostap_cs_priv *hw_priv; - -	if (local == NULL || local->hw_priv == NULL) -		return 1; -	hw_priv = local->hw_priv; -	if (hw_priv->link == NULL) -		return 1; - -	if (!hw_priv->link->open) { -		printk(KERN_WARNING "%s: prism2_pccard_dev_close(): " -		       "link not open?!\n", local->dev->name); -		return 1; -	} - -	hw_priv->link->open--; - -	return 0; -} - -  static struct prism2_helper_functions prism2_pccard_funcs =  {  	.card_present	= prism2_pccard_card_present,  	.cor_sreset	= prism2_pccard_cor_sreset, -	.dev_open	= prism2_pccard_dev_open, -	.dev_close	= prism2_pccard_dev_close,  	.genesis_reset	= prism2_pccard_genesis_reset,  	.hw_type	= HOSTAP_HW_PCCARD,  }; @@ -597,13 +565,14 @@ static void prism2_detach(dev_link_t *link)  	*linkp = link->next;  	/* release net devices */  	if (link->priv) { +		struct hostap_cs_priv *hw_priv;  		struct net_device *dev;  		struct hostap_interface *iface;  		dev = link->priv;  		iface = netdev_priv(dev); -		kfree(iface->local->hw_priv); -		iface->local->hw_priv = NULL; +		hw_priv = iface->local->hw_priv;  		prism2_free_local_data(dev); +		kfree(hw_priv);  	}  	kfree(link);  } @@ -883,6 +852,13 @@ static int prism2_event(event_t event, int priority,  {  	dev_link_t *link = args->client_data;  	struct net_device *dev = (struct net_device *) link->priv; +	int dev_open = 0; + +	if (link->state & DEV_CONFIG) { +		struct hostap_interface *iface = netdev_priv(dev); +		if (iface && iface->local) +			dev_open = iface->local->num_dev_open > 0; +	}  	switch (event) {  	case CS_EVENT_CARD_INSERTION: @@ -911,7 +887,7 @@ static int prism2_event(event_t event, int priority,  	case CS_EVENT_RESET_PHYSICAL:  		PDEBUG(DEBUG_EXTRA, "%s: CS_EVENT_RESET_PHYSICAL\n", dev_info);  		if (link->state & DEV_CONFIG) { -			if (link->open) { +			if (dev_open) {  				netif_stop_queue(dev);  				netif_device_detach(dev);  			} @@ -931,8 +907,8 @@ static int prism2_event(event_t event, int priority,  			pcmcia_request_configuration(link->handle,  						     &link->conf);  			prism2_hw_shutdown(dev, 1); -			prism2_hw_config(dev, link->open ? 0 : 1); -			if (link->open) { +			prism2_hw_config(dev, dev_open ? 0 : 1); +			if (dev_open) {  				netif_device_attach(dev);  				netif_start_queue(dev);  			}  | 
