static void rt2400pci_txdone(struct rt2x00_dev *rt2x00dev,
                             const enum data_queue_qid queue_idx)
 {
-       struct data_queue *queue = rt2x00queue_get_queue(rt2x00dev, queue_idx);
+       struct data_queue *queue = rt2x00queue_get_tx_queue(rt2x00dev, queue_idx);
        struct queue_entry_priv_pci *entry_priv;
        struct queue_entry *entry;
        struct txdone_entry_desc txdesc;
 
 static void rt2500pci_txdone(struct rt2x00_dev *rt2x00dev,
                             const enum data_queue_qid queue_idx)
 {
-       struct data_queue *queue = rt2x00queue_get_queue(rt2x00dev, queue_idx);
+       struct data_queue *queue = rt2x00queue_get_tx_queue(rt2x00dev, queue_idx);
        struct queue_entry_priv_pci *entry_priv;
        struct queue_entry *entry;
        struct txdone_entry_desc txdesc;
 
        if (queue < rt2x00dev->ops->tx_queues && rt2x00dev->tx)
                return &rt2x00dev->tx[queue];
 
+       if (queue == QID_ATIM)
+               return rt2x00dev->atim;
+
        return NULL;
 }
 
 
                goto exit_fail;
 
        /*
-        * Determine which queue to put packet on.
+        * Use the ATIM queue if appropriate and present.
         */
        if (tx_info->flags & IEEE80211_TX_CTL_SEND_AFTER_DTIM &&
            test_bit(DRIVER_REQUIRE_ATIM_QUEUE, &rt2x00dev->flags))
-               queue = rt2x00queue_get_queue(rt2x00dev, QID_ATIM);
-       else
-               queue = rt2x00queue_get_tx_queue(rt2x00dev, qid);
+               qid = QID_ATIM;
+
+       queue = rt2x00queue_get_tx_queue(rt2x00dev, qid);
        if (unlikely(!queue)) {
                ERROR(rt2x00dev,
                      "Attempt to send packet over invalid queue %d.\n"