aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2012-04-12 09:24:30 -0400
committerWey-Yi Guy <wey-yi.w.guy@intel.com>2012-04-23 17:30:29 -0400
commitd1ff52536a0d1bd516a628ef43dfaf6fe9c90fe2 (patch)
treebb50fc848b14272b472e9db65b2a793e93069914
parent0db19cde17ece4695cec503f9f6f0a1d4621dac7 (diff)
iwlwifi: use direct calls for transport free
Since the transport allocates and frees itself in the transport specific code, there's no need for virtual functions for it. Remove the free method and call the correct functions directly. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-pci.c4
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-trans-pcie-int.h5
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-trans-pcie.c6
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-trans.h23
4 files changed, 10 insertions, 28 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-pci.c b/drivers/net/wireless/iwlwifi/iwl-pci.c
index 49d2b1886f2f..e80e9aa80883 100644
--- a/drivers/net/wireless/iwlwifi/iwl-pci.c
+++ b/drivers/net/wireless/iwlwifi/iwl-pci.c
@@ -285,7 +285,7 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
285 return 0; 285 return 0;
286 286
287out_free_trans: 287out_free_trans:
288 iwl_trans_free(iwl_trans); 288 iwl_trans_pcie_free(iwl_trans);
289 pci_set_drvdata(pdev, NULL); 289 pci_set_drvdata(pdev, NULL);
290 return -EFAULT; 290 return -EFAULT;
291} 291}
@@ -296,7 +296,7 @@ static void __devexit iwl_pci_remove(struct pci_dev *pdev)
296 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); 296 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
297 297
298 iwl_drv_stop(trans_pcie->drv); 298 iwl_drv_stop(trans_pcie->drv);
299 iwl_trans_free(trans); 299 iwl_trans_pcie_free(trans);
300 300
301 pci_set_drvdata(pdev, NULL); 301 pci_set_drvdata(pdev, NULL);
302} 302}
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-int.h b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-int.h
index 8a175e01f483..6213c05a4b52 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-int.h
+++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-int.h
@@ -301,6 +301,11 @@ iwl_trans_pcie_get_trans(struct iwl_trans_pcie *trans_pcie)
301 trans_specific); 301 trans_specific);
302} 302}
303 303
304struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
305 const struct pci_device_id *ent,
306 const struct iwl_cfg *cfg);
307void iwl_trans_pcie_free(struct iwl_trans *trans);
308
304/***************************************************** 309/*****************************************************
305* RX 310* RX
306******************************************************/ 311******************************************************/
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
index b6522ca2d879..3eab7d52f8ba 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
+++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
@@ -1549,7 +1549,7 @@ static void iwl_trans_pcie_configure(struct iwl_trans *trans,
1549 trans_pcie->command_names = trans_cfg->command_names; 1549 trans_pcie->command_names = trans_cfg->command_names;
1550} 1550}
1551 1551
1552static void iwl_trans_pcie_free(struct iwl_trans *trans) 1552void iwl_trans_pcie_free(struct iwl_trans *trans)
1553{ 1553{
1554 struct iwl_trans_pcie *trans_pcie = 1554 struct iwl_trans_pcie *trans_pcie =
1555 IWL_TRANS_GET_PCIE_TRANS(trans); 1555 IWL_TRANS_GET_PCIE_TRANS(trans);
@@ -2044,7 +2044,7 @@ static int iwl_trans_pcie_dbgfs_register(struct iwl_trans *trans,
2044 2044
2045#endif /*CONFIG_IWLWIFI_DEBUGFS */ 2045#endif /*CONFIG_IWLWIFI_DEBUGFS */
2046 2046
2047const struct iwl_trans_ops trans_ops_pcie = { 2047static const struct iwl_trans_ops trans_ops_pcie = {
2048 .start_hw = iwl_trans_pcie_start_hw, 2048 .start_hw = iwl_trans_pcie_start_hw,
2049 .stop_hw = iwl_trans_pcie_stop_hw, 2049 .stop_hw = iwl_trans_pcie_stop_hw,
2050 .fw_alive = iwl_trans_pcie_fw_alive, 2050 .fw_alive = iwl_trans_pcie_fw_alive,
@@ -2061,8 +2061,6 @@ const struct iwl_trans_ops trans_ops_pcie = {
2061 .tx_agg_disable = iwl_trans_pcie_tx_agg_disable, 2061 .tx_agg_disable = iwl_trans_pcie_tx_agg_disable,
2062 .tx_agg_setup = iwl_trans_pcie_tx_agg_setup, 2062 .tx_agg_setup = iwl_trans_pcie_tx_agg_setup,
2063 2063
2064 .free = iwl_trans_pcie_free,
2065
2066 .dbgfs_register = iwl_trans_pcie_dbgfs_register, 2064 .dbgfs_register = iwl_trans_pcie_dbgfs_register,
2067 2065
2068 .wait_tx_queue_empty = iwl_trans_pcie_wait_tx_queue_empty, 2066 .wait_tx_queue_empty = iwl_trans_pcie_wait_tx_queue_empty,
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans.h b/drivers/net/wireless/iwlwifi/iwl-trans.h
index ba3c09d5472e..7018d313a4e0 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans.h
+++ b/drivers/net/wireless/iwlwifi/iwl-trans.h
@@ -354,10 +354,6 @@ struct iwl_trans;
354 * May sleep 354 * May sleep
355 * @tx_agg_disable: de-configure a Tx queue to send AMPDUs 355 * @tx_agg_disable: de-configure a Tx queue to send AMPDUs
356 * Must be atomic 356 * Must be atomic
357 * @free: release all the ressource for the transport layer itself such as
358 * irq, tasklet etc... From this point on, the device may not issue
359 * any interrupt (incl. RFKILL).
360 * May sleep
361 * @wait_tx_queue_empty: wait until all tx queues are empty 357 * @wait_tx_queue_empty: wait until all tx queues are empty
362 * May sleep 358 * May sleep
363 * @dbgfs_register: add the dbgfs files under this directory. Files will be 359 * @dbgfs_register: add the dbgfs files under this directory. Files will be
@@ -393,8 +389,6 @@ struct iwl_trans_ops {
393 int sta_id, int tid, int frame_limit, u16 ssn); 389 int sta_id, int tid, int frame_limit, u16 ssn);
394 void (*tx_agg_disable)(struct iwl_trans *trans, int queue); 390 void (*tx_agg_disable)(struct iwl_trans *trans, int queue);
395 391
396 void (*free)(struct iwl_trans *trans);
397
398 int (*dbgfs_register)(struct iwl_trans *trans, struct dentry* dir); 392 int (*dbgfs_register)(struct iwl_trans *trans, struct dentry* dir);
399 int (*wait_tx_queue_empty)(struct iwl_trans *trans); 393 int (*wait_tx_queue_empty)(struct iwl_trans *trans);
400#ifdef CONFIG_PM_SLEEP 394#ifdef CONFIG_PM_SLEEP
@@ -564,11 +558,6 @@ static inline void iwl_trans_tx_agg_setup(struct iwl_trans *trans, int queue,
564 frame_limit, ssn); 558 frame_limit, ssn);
565} 559}
566 560
567static inline void iwl_trans_free(struct iwl_trans *trans)
568{
569 trans->ops->free(trans);
570}
571
572static inline int iwl_trans_wait_tx_queue_empty(struct iwl_trans *trans) 561static inline int iwl_trans_wait_tx_queue_empty(struct iwl_trans *trans)
573{ 562{
574 WARN_ONCE(trans->state != IWL_TRANS_FW_ALIVE, 563 WARN_ONCE(trans->state != IWL_TRANS_FW_ALIVE,
@@ -616,19 +605,9 @@ static inline void iwl_trans_set_pmi(struct iwl_trans *trans, bool state)
616} 605}
617 606
618/***************************************************** 607/*****************************************************
619* Transport layers implementations + their allocation function 608* driver (transport) register/unregister functions
620******************************************************/ 609******************************************************/
621struct pci_dev;
622struct pci_device_id;
623extern const struct iwl_trans_ops trans_ops_pcie;
624struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
625 const struct pci_device_id *ent,
626 const struct iwl_cfg *cfg);
627int __must_check iwl_pci_register_driver(void); 610int __must_check iwl_pci_register_driver(void);
628void iwl_pci_unregister_driver(void); 611void iwl_pci_unregister_driver(void);
629 612
630extern const struct iwl_trans_ops trans_ops_idi;
631struct iwl_trans *iwl_trans_idi_alloc(void *pdev_void,
632 const void *ent_void,
633 const struct iwl_cfg *cfg);
634#endif /* __iwl_trans_h__ */ 613#endif /* __iwl_trans_h__ */