diff options
author | Abhijeet Kolekar <abhijeet.kolekar@intel.com> | 2009-03-18 00:51:49 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-03-27 20:12:59 -0400 |
commit | 3e5d238fa75783e1080e7413c7e36dd5203950eb (patch) | |
tree | e4fb79d3cbd6f20b6991b889927c070ef78c0239 /drivers | |
parent | 21c02a1ab2d4b4a439461140e1ac355db32c3f2b (diff) |
iwl3945: use iwl_cmd_queue_free
iwl_cmd_queue_free needs to be used to free up the cmd_queue,
as TFD slots for cmd_queue and tx_queue are different.
Signed-off-by: Abhijeet Kolekar <abhijeet.kolekar@intel.com>
Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-3945.c | 11 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-core.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-tx.c | 6 |
3 files changed, 10 insertions, 8 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.c b/drivers/net/wireless/iwlwifi/iwl-3945.c index 99bb48e0336f..50c61ed23524 100644 --- a/drivers/net/wireless/iwlwifi/iwl-3945.c +++ b/drivers/net/wireless/iwlwifi/iwl-3945.c | |||
@@ -747,11 +747,6 @@ void iwl3945_hw_txq_free_tfd(struct iwl_priv *priv, struct iwl_tx_queue *txq) | |||
747 | int i; | 747 | int i; |
748 | int counter; | 748 | int counter; |
749 | 749 | ||
750 | /* classify bd */ | ||
751 | if (txq->q.id == IWL_CMD_QUEUE_NUM) | ||
752 | /* nothing to cleanup after for host commands */ | ||
753 | return; | ||
754 | |||
755 | /* sanity check */ | 750 | /* sanity check */ |
756 | counter = TFD_CTL_COUNT_GET(le32_to_cpu(tfd->control_flags)); | 751 | counter = TFD_CTL_COUNT_GET(le32_to_cpu(tfd->control_flags)); |
757 | if (counter > NUM_TFD_CHUNKS) { | 752 | if (counter > NUM_TFD_CHUNKS) { |
@@ -1240,7 +1235,11 @@ void iwl3945_hw_txq_ctx_free(struct iwl_priv *priv) | |||
1240 | 1235 | ||
1241 | /* Tx queues */ | 1236 | /* Tx queues */ |
1242 | for (txq_id = 0; txq_id <= priv->hw_params.max_txq_num; txq_id++) | 1237 | for (txq_id = 0; txq_id <= priv->hw_params.max_txq_num; txq_id++) |
1243 | iwl_tx_queue_free(priv, txq_id); | 1238 | if (txq_id == IWL_CMD_QUEUE_NUM) |
1239 | iwl_cmd_queue_free(priv); | ||
1240 | else | ||
1241 | iwl_tx_queue_free(priv, txq_id); | ||
1242 | |||
1244 | } | 1243 | } |
1245 | 1244 | ||
1246 | void iwl3945_hw_txq_ctx_stop(struct iwl_priv *priv) | 1245 | void iwl3945_hw_txq_ctx_stop(struct iwl_priv *priv) |
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h index 27310fec2e43..a8eac8c3c1fa 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.h +++ b/drivers/net/wireless/iwlwifi/iwl-core.h | |||
@@ -264,6 +264,7 @@ void iwl_rx_reply_error(struct iwl_priv *priv, | |||
264 | * RX | 264 | * RX |
265 | ******************************************************/ | 265 | ******************************************************/ |
266 | void iwl_rx_queue_free(struct iwl_priv *priv, struct iwl_rx_queue *rxq); | 266 | void iwl_rx_queue_free(struct iwl_priv *priv, struct iwl_rx_queue *rxq); |
267 | void iwl_cmd_queue_free(struct iwl_priv *priv); | ||
267 | int iwl_rx_queue_alloc(struct iwl_priv *priv); | 268 | int iwl_rx_queue_alloc(struct iwl_priv *priv); |
268 | void iwl_rx_handle(struct iwl_priv *priv); | 269 | void iwl_rx_handle(struct iwl_priv *priv); |
269 | int iwl_rx_queue_update_write_ptr(struct iwl_priv *priv, | 270 | int iwl_rx_queue_update_write_ptr(struct iwl_priv *priv, |
diff --git a/drivers/net/wireless/iwlwifi/iwl-tx.c b/drivers/net/wireless/iwlwifi/iwl-tx.c index dff60fb70214..9e83ee24ea8d 100644 --- a/drivers/net/wireless/iwlwifi/iwl-tx.c +++ b/drivers/net/wireless/iwlwifi/iwl-tx.c | |||
@@ -174,7 +174,7 @@ EXPORT_SYMBOL(iwl_tx_queue_free); | |||
174 | * Free all buffers. | 174 | * Free all buffers. |
175 | * 0-fill, but do not free "txq" descriptor structure. | 175 | * 0-fill, but do not free "txq" descriptor structure. |
176 | */ | 176 | */ |
177 | static void iwl_cmd_queue_free(struct iwl_priv *priv) | 177 | void iwl_cmd_queue_free(struct iwl_priv *priv) |
178 | { | 178 | { |
179 | struct iwl_tx_queue *txq = &priv->txq[IWL_CMD_QUEUE_NUM]; | 179 | struct iwl_tx_queue *txq = &priv->txq[IWL_CMD_QUEUE_NUM]; |
180 | struct iwl_queue *q = &txq->q; | 180 | struct iwl_queue *q = &txq->q; |
@@ -193,12 +193,14 @@ static void iwl_cmd_queue_free(struct iwl_priv *priv) | |||
193 | 193 | ||
194 | /* De-alloc circular buffer of TFDs */ | 194 | /* De-alloc circular buffer of TFDs */ |
195 | if (txq->q.n_bd) | 195 | if (txq->q.n_bd) |
196 | pci_free_consistent(dev, sizeof(struct iwl_tfd) * | 196 | pci_free_consistent(dev, priv->hw_params.tfd_size * |
197 | txq->q.n_bd, txq->tfds, txq->q.dma_addr); | 197 | txq->q.n_bd, txq->tfds, txq->q.dma_addr); |
198 | 198 | ||
199 | /* 0-fill queue descriptor structure */ | 199 | /* 0-fill queue descriptor structure */ |
200 | memset(txq, 0, sizeof(*txq)); | 200 | memset(txq, 0, sizeof(*txq)); |
201 | } | 201 | } |
202 | EXPORT_SYMBOL(iwl_cmd_queue_free); | ||
203 | |||
202 | /*************** DMA-QUEUE-GENERAL-FUNCTIONS ***** | 204 | /*************** DMA-QUEUE-GENERAL-FUNCTIONS ***** |
203 | * DMA services | 205 | * DMA services |
204 | * | 206 | * |