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;
                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++) {