iwl3945: unmap previously mapped memory
authorReinette Chatre <reinette.chatre@intel.com>
Wed, 11 Mar 2009 18:17:58 +0000 (11:17 -0700)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 16 Mar 2009 22:09:46 +0000 (18:09 -0400)
During preparation of TX we create DMA mapping to TX command as part of
preparing the TFD. This mapping needs to be cleared at the time TFD is
freed.

Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/iwlwifi/iwl-3945.c

index 9e6f9ec1a2b8f1d6bdf0410063c2c7fb6b4c0dfc..ba7e720e73c1638a22b07d01c93a18349e332b37 100644 (file)
@@ -741,7 +741,8 @@ int iwl3945_hw_txq_attach_buf_to_tfd(struct iwl_priv *priv,
 void iwl3945_hw_txq_free_tfd(struct iwl_priv *priv, struct iwl_tx_queue *txq)
 {
        struct iwl3945_tfd *tfd_tmp = (struct iwl3945_tfd *)txq->tfds;
-       struct iwl3945_tfd *tfd = &tfd_tmp[txq->q.read_ptr];
+       int index = txq->q.read_ptr;
+       struct iwl3945_tfd *tfd = &tfd_tmp[index];
        struct pci_dev *dev = priv->pci_dev;
        int i;
        int counter;
@@ -759,6 +760,13 @@ void iwl3945_hw_txq_free_tfd(struct iwl_priv *priv, struct iwl_tx_queue *txq)
                return;
        }
 
+       /* Unmap tx_cmd */
+       if (counter)
+               pci_unmap_single(dev,
+                               pci_unmap_addr(&txq->cmd[index]->meta, mapping),
+                               pci_unmap_len(&txq->cmd[index]->meta, len),
+                               PCI_DMA_TODEVICE);
+
        /* unmap chunks if any */
 
        for (i = 1; i < counter; i++) {