aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorAssaf Krauss <assaf.krauss@intel.com>2008-03-14 13:38:48 -0400
committerJohn W. Linville <linville@tuxdriver.com>2008-03-25 16:41:51 -0400
commit1d0a082d38decb62ceb3e26a4bb1a3ca78843a23 (patch)
tree4563baeb92331e953803a151f84abbdaac204481 /drivers/net
parent00acbc91354f7c548ce12a9ebb7fd25c4c3861ae (diff)
iwlwifi: Probe Flow - Performing allocation in a separate function
Performing allocation in a separate function (previously handled in 'probe') Signed-off-by: Assaf Krauss <assaf.krauss@intel.com> Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-core.c27
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-core.h7
-rw-r--r--drivers/net/wireless/iwlwifi/iwl4965-base.c13
3 files changed, 39 insertions, 8 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c
index 3a9fc905e6bc..244318af53fc 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.c
+++ b/drivers/net/wireless/iwlwifi/iwl-core.c
@@ -29,12 +29,15 @@
29#include <linux/kernel.h> 29#include <linux/kernel.h>
30#include <linux/module.h> 30#include <linux/module.h>
31#include <linux/version.h> 31#include <linux/version.h>
32#include <net/mac80211.h>
32 33
33struct iwl_priv; /* FIXME: remove */ 34struct iwl_priv; /* FIXME: remove */
34#include "iwl-debug.h" 35#include "iwl-debug.h"
35#include "iwl-eeprom.h" 36#include "iwl-eeprom.h"
36#include "iwl-core.h" 37#include "iwl-core.h"
37 38
39#include "iwl-4965.h" /* FIXME: remove */
40
38MODULE_DESCRIPTION("iwl core"); 41MODULE_DESCRIPTION("iwl core");
39MODULE_VERSION(IWLWIFI_VERSION); 42MODULE_VERSION(IWLWIFI_VERSION);
40MODULE_AUTHOR(DRV_COPYRIGHT); 43MODULE_AUTHOR(DRV_COPYRIGHT);
@@ -44,3 +47,27 @@ MODULE_LICENSE("GPL");
44u32 iwl_debug_level; 47u32 iwl_debug_level;
45EXPORT_SYMBOL(iwl_debug_level); 48EXPORT_SYMBOL(iwl_debug_level);
46#endif 49#endif
50
51/* This function both allocates and initializes hw and priv. */
52struct ieee80211_hw *iwl_alloc_all(struct iwl_cfg *cfg,
53 struct ieee80211_ops *hw_ops)
54{
55 struct iwl_priv *priv;
56
57 /* mac80211 allocates memory for this device instance, including
58 * space for this driver's private structure */
59 struct ieee80211_hw *hw =
60 ieee80211_alloc_hw(sizeof(struct iwl_priv), hw_ops);
61 if (hw == NULL) {
62 IWL_ERROR("Can not allocate network device\n");
63 goto out;
64 }
65
66 priv = hw->priv;
67 priv->hw = hw;
68
69out:
70 return hw;
71}
72EXPORT_SYMBOL(iwl_alloc_all);
73
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h
index fb4ce081807b..33bef1fecf4d 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.h
+++ b/drivers/net/wireless/iwlwifi/iwl-core.h
@@ -103,4 +103,11 @@ struct iwl_cfg {
103 const struct iwl_mod_params *mod_params; 103 const struct iwl_mod_params *mod_params;
104}; 104};
105 105
106/***************************
107 * L i b *
108 ***************************/
109
110struct ieee80211_hw *iwl_alloc_all(struct iwl_cfg *cfg,
111 struct ieee80211_ops *hw_ops);
112
106#endif /* __iwl_core_h__ */ 113#endif /* __iwl_core_h__ */
diff --git a/drivers/net/wireless/iwlwifi/iwl4965-base.c b/drivers/net/wireless/iwlwifi/iwl4965-base.c
index 465918cf77f1..a8fa1bfa570b 100644
--- a/drivers/net/wireless/iwlwifi/iwl4965-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl4965-base.c
@@ -8531,21 +8531,18 @@ static int iwl4965_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e
8531 iwl4965_hw_ops.hw_scan = NULL; 8531 iwl4965_hw_ops.hw_scan = NULL;
8532 } 8532 }
8533 8533
8534 /* mac80211 allocates memory for this device instance, including 8534 hw = iwl_alloc_all(cfg, &iwl4965_hw_ops);
8535 * space for this driver's private structure */ 8535 if (!hw) {
8536 hw = ieee80211_alloc_hw(sizeof(struct iwl_priv), &iwl4965_hw_ops);
8537 if (hw == NULL) {
8538 IWL_ERROR("Can not allocate network device\n");
8539 err = -ENOMEM; 8536 err = -ENOMEM;
8540 goto out; 8537 goto out;
8541 } 8538 }
8539 priv = hw->priv;
8540 /* At this point both hw and priv are allocated. */
8541
8542 SET_IEEE80211_DEV(hw, &pdev->dev); 8542 SET_IEEE80211_DEV(hw, &pdev->dev);
8543 8543
8544 IWL_DEBUG_INFO("*** LOAD DRIVER ***\n"); 8544 IWL_DEBUG_INFO("*** LOAD DRIVER ***\n");
8545 priv = hw->priv;
8546 priv->hw = hw;
8547 priv->cfg = cfg; 8545 priv->cfg = cfg;
8548
8549 priv->pci_dev = pdev; 8546 priv->pci_dev = pdev;
8550 8547
8551#ifdef CONFIG_IWLWIFI_DEBUG 8548#ifdef CONFIG_IWLWIFI_DEBUG