diff options
author | David S. Miller <davem@davemloft.net> | 2011-09-22 03:23:13 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-09-22 03:23:13 -0400 |
commit | 8decf868790b48a727d7e7ca164f2bcd3c1389c0 (patch) | |
tree | b759a5f861f842af7ea76f9011b579d06e9d5508 /drivers/net/wireless/ipw2x00/ipw2200.c | |
parent | 3fc72370186be2f9d4d6ef06d99e1caa5d92c564 (diff) | |
parent | d93dc5c4478c1fd5de85a3e8aece9aad7bbae044 (diff) |
Merge branch 'master' of github.com:davem330/net
Conflicts:
MAINTAINERS
drivers/net/Kconfig
drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c
drivers/net/ethernet/broadcom/tg3.c
drivers/net/wireless/iwlwifi/iwl-pci.c
drivers/net/wireless/iwlwifi/iwl-trans-tx-pcie.c
drivers/net/wireless/rt2x00/rt2800usb.c
drivers/net/wireless/wl12xx/main.c
Diffstat (limited to 'drivers/net/wireless/ipw2x00/ipw2200.c')
-rw-r--r-- | drivers/net/wireless/ipw2x00/ipw2200.c | 39 |
1 files changed, 26 insertions, 13 deletions
diff --git a/drivers/net/wireless/ipw2x00/ipw2200.c b/drivers/net/wireless/ipw2x00/ipw2200.c index f303df43ed3f..99a710dfe771 100644 --- a/drivers/net/wireless/ipw2x00/ipw2200.c +++ b/drivers/net/wireless/ipw2x00/ipw2200.c | |||
@@ -11426,16 +11426,23 @@ static void ipw_bg_down(struct work_struct *work) | |||
11426 | /* Called by register_netdev() */ | 11426 | /* Called by register_netdev() */ |
11427 | static int ipw_net_init(struct net_device *dev) | 11427 | static int ipw_net_init(struct net_device *dev) |
11428 | { | 11428 | { |
11429 | int rc = 0; | ||
11430 | struct ipw_priv *priv = libipw_priv(dev); | ||
11431 | |||
11432 | mutex_lock(&priv->mutex); | ||
11433 | if (ipw_up(priv)) | ||
11434 | rc = -EIO; | ||
11435 | mutex_unlock(&priv->mutex); | ||
11436 | |||
11437 | return rc; | ||
11438 | } | ||
11439 | |||
11440 | static int ipw_wdev_init(struct net_device *dev) | ||
11441 | { | ||
11429 | int i, rc = 0; | 11442 | int i, rc = 0; |
11430 | struct ipw_priv *priv = libipw_priv(dev); | 11443 | struct ipw_priv *priv = libipw_priv(dev); |
11431 | const struct libipw_geo *geo = libipw_get_geo(priv->ieee); | 11444 | const struct libipw_geo *geo = libipw_get_geo(priv->ieee); |
11432 | struct wireless_dev *wdev = &priv->ieee->wdev; | 11445 | struct wireless_dev *wdev = &priv->ieee->wdev; |
11433 | mutex_lock(&priv->mutex); | ||
11434 | |||
11435 | if (ipw_up(priv)) { | ||
11436 | rc = -EIO; | ||
11437 | goto out; | ||
11438 | } | ||
11439 | 11446 | ||
11440 | memcpy(wdev->wiphy->perm_addr, priv->mac_addr, ETH_ALEN); | 11447 | memcpy(wdev->wiphy->perm_addr, priv->mac_addr, ETH_ALEN); |
11441 | 11448 | ||
@@ -11520,13 +11527,9 @@ static int ipw_net_init(struct net_device *dev) | |||
11520 | set_wiphy_dev(wdev->wiphy, &priv->pci_dev->dev); | 11527 | set_wiphy_dev(wdev->wiphy, &priv->pci_dev->dev); |
11521 | 11528 | ||
11522 | /* With that information in place, we can now register the wiphy... */ | 11529 | /* With that information in place, we can now register the wiphy... */ |
11523 | if (wiphy_register(wdev->wiphy)) { | 11530 | if (wiphy_register(wdev->wiphy)) |
11524 | rc = -EIO; | 11531 | rc = -EIO; |
11525 | goto out; | ||
11526 | } | ||
11527 | |||
11528 | out: | 11532 | out: |
11529 | mutex_unlock(&priv->mutex); | ||
11530 | return rc; | 11533 | return rc; |
11531 | } | 11534 | } |
11532 | 11535 | ||
@@ -11833,14 +11836,22 @@ static int __devinit ipw_pci_probe(struct pci_dev *pdev, | |||
11833 | goto out_remove_sysfs; | 11836 | goto out_remove_sysfs; |
11834 | } | 11837 | } |
11835 | 11838 | ||
11839 | err = ipw_wdev_init(net_dev); | ||
11840 | if (err) { | ||
11841 | IPW_ERROR("failed to register wireless device\n"); | ||
11842 | goto out_unregister_netdev; | ||
11843 | } | ||
11844 | |||
11836 | #ifdef CONFIG_IPW2200_PROMISCUOUS | 11845 | #ifdef CONFIG_IPW2200_PROMISCUOUS |
11837 | if (rtap_iface) { | 11846 | if (rtap_iface) { |
11838 | err = ipw_prom_alloc(priv); | 11847 | err = ipw_prom_alloc(priv); |
11839 | if (err) { | 11848 | if (err) { |
11840 | IPW_ERROR("Failed to register promiscuous network " | 11849 | IPW_ERROR("Failed to register promiscuous network " |
11841 | "device (error %d).\n", err); | 11850 | "device (error %d).\n", err); |
11842 | unregister_netdev(priv->net_dev); | 11851 | wiphy_unregister(priv->ieee->wdev.wiphy); |
11843 | goto out_remove_sysfs; | 11852 | kfree(priv->ieee->a_band.channels); |
11853 | kfree(priv->ieee->bg_band.channels); | ||
11854 | goto out_unregister_netdev; | ||
11844 | } | 11855 | } |
11845 | } | 11856 | } |
11846 | #endif | 11857 | #endif |
@@ -11852,6 +11863,8 @@ static int __devinit ipw_pci_probe(struct pci_dev *pdev, | |||
11852 | 11863 | ||
11853 | return 0; | 11864 | return 0; |
11854 | 11865 | ||
11866 | out_unregister_netdev: | ||
11867 | unregister_netdev(priv->net_dev); | ||
11855 | out_remove_sysfs: | 11868 | out_remove_sysfs: |
11856 | sysfs_remove_group(&pdev->dev.kobj, &ipw_attribute_group); | 11869 | sysfs_remove_group(&pdev->dev.kobj, &ipw_attribute_group); |
11857 | out_release_irq: | 11870 | out_release_irq: |