diff options
author | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2011-06-10 14:30:30 -0400 |
---|---|---|
committer | Wey-Yi Guy <wey-yi.w.guy@intel.com> | 2011-06-18 11:18:17 -0400 |
commit | 08321c062f77e379c4a539f1522220b83ab1e84e (patch) | |
tree | 35faf11f885e60d2da7de4f72f4d86d184216d5e /drivers/net/wireless | |
parent | 85aed7c48113dfcdc913008481c46346af0db69e (diff) |
iwlagn: add a get_irq method to iwl_bus_ops and use it
In order to remove a few more dereference to priv->pdev that will be killed
[Asoon, there is now a method to get the IRQ number.
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')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 9 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-dev.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-pci.c | 6 |
4 files changed, 14 insertions, 5 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index 1ff8e4b3e960..e2b319f3c5f8 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
@@ -3610,10 +3610,11 @@ int iwl_probe(void *bus_specific, struct iwl_bus_ops *bus_ops, | |||
3610 | ********************/ | 3610 | ********************/ |
3611 | iwl_alloc_isr_ict(priv); | 3611 | iwl_alloc_isr_ict(priv); |
3612 | 3612 | ||
3613 | err = request_irq(priv->pci_dev->irq, iwl_isr_ict, | 3613 | err = request_irq(priv->bus.ops->get_irq(&priv->bus), iwl_isr_ict, |
3614 | IRQF_SHARED, DRV_NAME, priv); | 3614 | IRQF_SHARED, DRV_NAME, priv); |
3615 | if (err) { | 3615 | if (err) { |
3616 | IWL_ERR(priv, "Error allocating IRQ %d\n", priv->pci_dev->irq); | 3616 | IWL_ERR(priv, "Error allocating IRQ %d\n", |
3617 | priv->bus.ops->get_irq(&priv->bus)); | ||
3617 | goto out_uninit_drv; | 3618 | goto out_uninit_drv; |
3618 | } | 3619 | } |
3619 | 3620 | ||
@@ -3650,7 +3651,7 @@ int iwl_probe(void *bus_specific, struct iwl_bus_ops *bus_ops, | |||
3650 | out_destroy_workqueue: | 3651 | out_destroy_workqueue: |
3651 | destroy_workqueue(priv->workqueue); | 3652 | destroy_workqueue(priv->workqueue); |
3652 | priv->workqueue = NULL; | 3653 | priv->workqueue = NULL; |
3653 | free_irq(priv->pci_dev->irq, priv); | 3654 | free_irq(priv->bus.ops->get_irq(&priv->bus), priv); |
3654 | iwl_free_isr_ict(priv); | 3655 | iwl_free_isr_ict(priv); |
3655 | out_uninit_drv: | 3656 | out_uninit_drv: |
3656 | iwl_uninit_drv(priv); | 3657 | iwl_uninit_drv(priv); |
@@ -3722,7 +3723,7 @@ void __devexit iwl_remove(struct iwl_priv * priv) | |||
3722 | priv->workqueue = NULL; | 3723 | priv->workqueue = NULL; |
3723 | iwl_free_traffic_mem(priv); | 3724 | iwl_free_traffic_mem(priv); |
3724 | 3725 | ||
3725 | free_irq(priv->pci_dev->irq, priv); | 3726 | free_irq(priv->bus.ops->get_irq(&priv->bus), priv); |
3726 | priv->bus.ops->set_drv_data(&priv->bus, NULL); | 3727 | priv->bus.ops->set_drv_data(&priv->bus, NULL); |
3727 | 3728 | ||
3728 | iwl_uninit_drv(priv); | 3729 | iwl_uninit_drv(priv); |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.h b/drivers/net/wireless/iwlwifi/iwl-agn.h index 346386927990..848a6c3a56ad 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.h +++ b/drivers/net/wireless/iwlwifi/iwl-agn.h | |||
@@ -125,7 +125,7 @@ irqreturn_t iwl_isr_ict(int irq, void *data); | |||
125 | static inline void iwl_synchronize_irq(struct iwl_priv *priv) | 125 | static inline void iwl_synchronize_irq(struct iwl_priv *priv) |
126 | { | 126 | { |
127 | /* wait to make sure we flush pending tasklet*/ | 127 | /* wait to make sure we flush pending tasklet*/ |
128 | synchronize_irq(priv->pci_dev->irq); | 128 | synchronize_irq(priv->bus.ops->get_irq(&priv->bus)); |
129 | tasklet_kill(&priv->irq_tasklet); | 129 | tasklet_kill(&priv->irq_tasklet); |
130 | } | 130 | } |
131 | 131 | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h index 1099944cc2b0..f6b54c6d878d 100644 --- a/drivers/net/wireless/iwlwifi/iwl-dev.h +++ b/drivers/net/wireless/iwlwifi/iwl-dev.h | |||
@@ -1198,6 +1198,7 @@ struct iwl_bus; | |||
1198 | * @apm_config: will be called during the config of the APM configuration | 1198 | * @apm_config: will be called during the config of the APM configuration |
1199 | * @set_drv_data: set the priv pointer to the bus layer | 1199 | * @set_drv_data: set the priv pointer to the bus layer |
1200 | * @get_dev: returns the device struct | 1200 | * @get_dev: returns the device struct |
1201 | * @get_irq: returns the irq number | ||
1201 | * @get_hw_id: prints the hw_id in the provided buffer | 1202 | * @get_hw_id: prints the hw_id in the provided buffer |
1202 | * @write8: write a byte to register at offset ofs | 1203 | * @write8: write a byte to register at offset ofs |
1203 | * @write32: write a dword to register at offset ofs | 1204 | * @write32: write a dword to register at offset ofs |
@@ -1208,6 +1209,7 @@ struct iwl_bus_ops { | |||
1208 | void (*apm_config)(struct iwl_bus *bus); | 1209 | void (*apm_config)(struct iwl_bus *bus); |
1209 | void (*set_drv_data)(struct iwl_bus *bus, void *priv); | 1210 | void (*set_drv_data)(struct iwl_bus *bus, void *priv); |
1210 | struct device *(*get_dev)(const struct iwl_bus *bus); | 1211 | struct device *(*get_dev)(const struct iwl_bus *bus); |
1212 | unsigned int (*get_irq)(const struct iwl_bus *bus); | ||
1211 | void (*get_hw_id)(struct iwl_bus *bus, char buf[], int buf_len); | 1213 | void (*get_hw_id)(struct iwl_bus *bus, char buf[], int buf_len); |
1212 | void (*write8)(struct iwl_bus *bus, u32 ofs, u8 val); | 1214 | void (*write8)(struct iwl_bus *bus, u32 ofs, u8 val); |
1213 | void (*write32)(struct iwl_bus *bus, u32 ofs, u32 val); | 1215 | void (*write32)(struct iwl_bus *bus, u32 ofs, u32 val); |
diff --git a/drivers/net/wireless/iwlwifi/iwl-pci.c b/drivers/net/wireless/iwlwifi/iwl-pci.c index adbc9621c3ec..7328fbff7f7b 100644 --- a/drivers/net/wireless/iwlwifi/iwl-pci.c +++ b/drivers/net/wireless/iwlwifi/iwl-pci.c | |||
@@ -141,6 +141,11 @@ static struct device *iwl_pci_get_dev(const struct iwl_bus *bus) | |||
141 | return &(IWL_BUS_GET_PCI_DEV(bus)->dev); | 141 | return &(IWL_BUS_GET_PCI_DEV(bus)->dev); |
142 | } | 142 | } |
143 | 143 | ||
144 | static unsigned int iwl_pci_get_irq(const struct iwl_bus *bus) | ||
145 | { | ||
146 | return IWL_BUS_GET_PCI_DEV(bus)->irq; | ||
147 | } | ||
148 | |||
144 | static void iwl_pci_get_hw_id(struct iwl_bus *bus, char buf[], | 149 | static void iwl_pci_get_hw_id(struct iwl_bus *bus, char buf[], |
145 | int buf_len) | 150 | int buf_len) |
146 | { | 151 | { |
@@ -171,6 +176,7 @@ static struct iwl_bus_ops pci_ops = { | |||
171 | .apm_config = iwl_pci_apm_config, | 176 | .apm_config = iwl_pci_apm_config, |
172 | .set_drv_data = iwl_pci_set_drv_data, | 177 | .set_drv_data = iwl_pci_set_drv_data, |
173 | .get_dev = iwl_pci_get_dev, | 178 | .get_dev = iwl_pci_get_dev, |
179 | .get_irq = iwl_pci_get_irq, | ||
174 | .get_hw_id = iwl_pci_get_hw_id, | 180 | .get_hw_id = iwl_pci_get_hw_id, |
175 | .write8 = iwl_pci_write8, | 181 | .write8 = iwl_pci_write8, |
176 | .write32 = iwl_pci_write32, | 182 | .write32 = iwl_pci_write32, |