|
@@ -72,6 +72,7 @@
|
|
|
#include "iwl-cfg.h"
|
|
|
#include "iwl-drv.h"
|
|
|
#include "iwl-trans.h"
|
|
|
+#include "iwl-trans-pcie-int.h"
|
|
|
|
|
|
#define IWL_PCI_DEVICE(dev, subdev, cfg) \
|
|
|
.vendor = PCI_VENDOR_ID_INTEL, .device = (dev), \
|
|
@@ -262,11 +263,14 @@ MODULE_DEVICE_TABLE(pci, iwl_hw_card_ids);
|
|
|
/* PCI registers */
|
|
|
#define PCI_CFG_RETRY_TIMEOUT 0x041
|
|
|
|
|
|
+#ifndef CONFIG_IWLWIFI_IDI
|
|
|
+
|
|
|
static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|
|
{
|
|
|
const struct iwl_cfg *cfg = (struct iwl_cfg *)(ent->driver_data);
|
|
|
struct iwl_shared *shrd;
|
|
|
struct iwl_trans *iwl_trans;
|
|
|
+ struct iwl_trans_pcie *trans_pcie;
|
|
|
int err;
|
|
|
|
|
|
shrd = kzalloc(sizeof(*iwl_trans->shrd), GFP_KERNEL);
|
|
@@ -277,11 +281,7 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|
|
goto out_free_bus;
|
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_IWLWIFI_IDI
|
|
|
- iwl_trans = iwl_trans_idi_alloc(shrd, pdev, ent);
|
|
|
-#else
|
|
|
iwl_trans = iwl_trans_pcie_alloc(shrd, pdev, ent);
|
|
|
-#endif
|
|
|
if (iwl_trans == NULL) {
|
|
|
err = -ENOMEM;
|
|
|
goto out_free_bus;
|
|
@@ -290,8 +290,9 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|
|
shrd->trans = iwl_trans;
|
|
|
pci_set_drvdata(pdev, iwl_trans);
|
|
|
|
|
|
- err = iwl_drv_start(shrd, iwl_trans, cfg);
|
|
|
- if (err)
|
|
|
+ trans_pcie = IWL_TRANS_GET_PCIE_TRANS(iwl_trans);
|
|
|
+ trans_pcie->drv = iwl_drv_start(shrd, iwl_trans, cfg);
|
|
|
+ if (!trans_pcie->drv)
|
|
|
goto out_free_trans;
|
|
|
|
|
|
return 0;
|
|
@@ -306,17 +307,20 @@ out_free_bus:
|
|
|
|
|
|
static void __devexit iwl_pci_remove(struct pci_dev *pdev)
|
|
|
{
|
|
|
- struct iwl_trans *iwl_trans = pci_get_drvdata(pdev);
|
|
|
- struct iwl_shared *shrd = iwl_trans->shrd;
|
|
|
+ struct iwl_trans *trans = pci_get_drvdata(pdev);
|
|
|
+ struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
|
|
|
+ struct iwl_shared *shrd = trans->shrd;
|
|
|
|
|
|
- iwl_drv_stop(shrd);
|
|
|
- iwl_trans_free(shrd->trans);
|
|
|
+ iwl_drv_stop(trans_pcie->drv);
|
|
|
+ iwl_trans_free(trans);
|
|
|
|
|
|
pci_set_drvdata(pdev, NULL);
|
|
|
|
|
|
kfree(shrd);
|
|
|
}
|
|
|
|
|
|
+#endif /* CONFIG_IWLWIFI_IDI */
|
|
|
+
|
|
|
#ifdef CONFIG_PM_SLEEP
|
|
|
|
|
|
static int iwl_pci_suspend(struct device *device)
|
|
@@ -361,6 +365,15 @@ static SIMPLE_DEV_PM_OPS(iwl_dev_pm_ops, iwl_pci_suspend, iwl_pci_resume);
|
|
|
|
|
|
#endif
|
|
|
|
|
|
+#ifdef CONFIG_IWLWIFI_IDI
|
|
|
+/*
|
|
|
+ * Defined externally in iwl-idi.c
|
|
|
+ */
|
|
|
+int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent);
|
|
|
+void __devexit iwl_pci_remove(struct pci_dev *pdev);
|
|
|
+
|
|
|
+#endif /* CONFIG_IWLWIFI_IDI */
|
|
|
+
|
|
|
static struct pci_driver iwl_pci_driver = {
|
|
|
.name = DRV_NAME,
|
|
|
.id_table = iwl_hw_card_ids,
|