summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl-pci.c
diff options
context:
space:
mode:
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>2012-02-02 14:16:59 -0800
committerWey-Yi Guy <wey-yi.w.guy@intel.com>2012-02-02 14:18:15 -0800
commitb52e7ea109cfe4ea7fea99b1cd20f57ccd95476a (patch)
treed53ced31d0d60702ec5bce58527500588df83586 /drivers/net/wireless/iwlwifi/iwl-pci.c
parente81fb554cfe082dc59a707767c426cbd2e361033 (diff)
downloadop-kernel-dev-b52e7ea109cfe4ea7fea99b1cd20f57ccd95476a.zip
op-kernel-dev-b52e7ea109cfe4ea7fea99b1cd20f57ccd95476a.tar.gz
iwlwifi: allocate the transport from the bus layer
Change the way we alloc the transport on the way. Since the transport is allocated from a bus specific area, we can give the bus specific parameters (i.e. pci_dev for PCI) to the transport. This will be useful when the bus layer will be killed. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-pci.c')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-pci.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-pci.c b/drivers/net/wireless/iwlwifi/iwl-pci.c
index a3ca0a7..c0d62e7 100644
--- a/drivers/net/wireless/iwlwifi/iwl-pci.c
+++ b/drivers/net/wireless/iwlwifi/iwl-pci.c
@@ -463,14 +463,28 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
bus->ops = &bus_ops_pci;
#ifdef CONFIG_IWLWIFI_IDI
+ trans(bus) = iwl_trans_idi_alloc(bus->shrd, pdev, ent);
+ if (trans(bus) == NULL) {
+ err = -ENOMEM;
+ goto out_disable_msi;
+ }
+
err = iwl_probe(bus, &trans_ops_idi, cfg);
#else
+ trans(bus) = iwl_trans_pcie_alloc(bus->shrd, pdev, ent);
+ if (trans(bus) == NULL) {
+ err = -ENOMEM;
+ goto out_disable_msi;
+ }
+
err = iwl_probe(bus, &trans_ops_pcie, cfg);
#endif
if (err)
- goto out_disable_msi;
+ goto out_free_trans;
return 0;
+out_free_trans:
+ iwl_trans_free(trans(bus));
out_disable_msi:
pci_disable_msi(pdev);
pci_iounmap(pdev, pci_bus->hw_base);
@@ -493,6 +507,7 @@ static void __devexit iwl_pci_remove(struct pci_dev *pdev)
struct iwl_shared *shrd = bus->shrd;
iwl_remove(shrd->priv);
+ iwl_trans_free(shrd->trans);
pci_disable_msi(pci_dev);
pci_iounmap(pci_dev, pci_bus->hw_base);
OpenPOWER on IntegriCloud