};
 
 static const struct data_queue_desc rt2400pci_queue_rx = {
-       .entry_num              = RX_ENTRIES,
+       .entry_num              = 24,
        .data_size              = DATA_FRAME_SIZE,
        .desc_size              = RXD_DESC_SIZE,
        .priv_size              = sizeof(struct queue_entry_priv_pci),
 };
 
 static const struct data_queue_desc rt2400pci_queue_tx = {
-       .entry_num              = TX_ENTRIES,
+       .entry_num              = 24,
        .data_size              = DATA_FRAME_SIZE,
        .desc_size              = TXD_DESC_SIZE,
        .priv_size              = sizeof(struct queue_entry_priv_pci),
 };
 
 static const struct data_queue_desc rt2400pci_queue_bcn = {
-       .entry_num              = BEACON_ENTRIES,
+       .entry_num              = 1,
        .data_size              = MGMT_FRAME_SIZE,
        .desc_size              = TXD_DESC_SIZE,
        .priv_size              = sizeof(struct queue_entry_priv_pci),
 };
 
 static const struct data_queue_desc rt2400pci_queue_atim = {
-       .entry_num              = ATIM_ENTRIES,
+       .entry_num              = 8,
        .data_size              = DATA_FRAME_SIZE,
        .desc_size              = TXD_DESC_SIZE,
        .priv_size              = sizeof(struct queue_entry_priv_pci),
 
 };
 
 static const struct data_queue_desc rt2500pci_queue_rx = {
-       .entry_num              = RX_ENTRIES,
+       .entry_num              = 32,
        .data_size              = DATA_FRAME_SIZE,
        .desc_size              = RXD_DESC_SIZE,
        .priv_size              = sizeof(struct queue_entry_priv_pci),
 };
 
 static const struct data_queue_desc rt2500pci_queue_tx = {
-       .entry_num              = TX_ENTRIES,
+       .entry_num              = 32,
        .data_size              = DATA_FRAME_SIZE,
        .desc_size              = TXD_DESC_SIZE,
        .priv_size              = sizeof(struct queue_entry_priv_pci),
 };
 
 static const struct data_queue_desc rt2500pci_queue_bcn = {
-       .entry_num              = BEACON_ENTRIES,
+       .entry_num              = 1,
        .data_size              = MGMT_FRAME_SIZE,
        .desc_size              = TXD_DESC_SIZE,
        .priv_size              = sizeof(struct queue_entry_priv_pci),
 };
 
 static const struct data_queue_desc rt2500pci_queue_atim = {
-       .entry_num              = ATIM_ENTRIES,
+       .entry_num              = 8,
        .data_size              = DATA_FRAME_SIZE,
        .desc_size              = TXD_DESC_SIZE,
        .priv_size              = sizeof(struct queue_entry_priv_pci),
 
 };
 
 static const struct data_queue_desc rt2500usb_queue_rx = {
-       .entry_num              = RX_ENTRIES,
+       .entry_num              = 32,
        .data_size              = DATA_FRAME_SIZE,
        .desc_size              = RXD_DESC_SIZE,
        .priv_size              = sizeof(struct queue_entry_priv_usb),
 };
 
 static const struct data_queue_desc rt2500usb_queue_tx = {
-       .entry_num              = TX_ENTRIES,
+       .entry_num              = 32,
        .data_size              = DATA_FRAME_SIZE,
        .desc_size              = TXD_DESC_SIZE,
        .priv_size              = sizeof(struct queue_entry_priv_usb),
 };
 
 static const struct data_queue_desc rt2500usb_queue_bcn = {
-       .entry_num              = BEACON_ENTRIES,
+       .entry_num              = 1,
        .data_size              = MGMT_FRAME_SIZE,
        .desc_size              = TXD_DESC_SIZE,
        .priv_size              = sizeof(struct queue_entry_priv_usb_bcn),
 };
 
 static const struct data_queue_desc rt2500usb_queue_atim = {
-       .entry_num              = ATIM_ENTRIES,
+       .entry_num              = 8,
        .data_size              = DATA_FRAME_SIZE,
        .desc_size              = TXD_DESC_SIZE,
        .priv_size              = sizeof(struct queue_entry_priv_usb),
 
         * that the TX_STA_FIFO stack has a size of 16. We stick to our
         * tx ring size for now.
         */
-       for (i = 0; i < TX_ENTRIES; i++) {
+       for (i = 0; i < rt2x00dev->ops->tx->entry_num; i++) {
                rt2800_register_read(rt2x00dev, TX_STA_FIFO, ®);
                if (!rt2x00_get_field32(reg, TX_STA_FIFO_VALID))
                        break;
 
         * Since we have only one producer and one consumer we don't
         * need to lock the kfifo.
         */
-       for (i = 0; i < TX_ENTRIES; i++) {
+       for (i = 0; i < rt2x00dev->ops->tx->entry_num; i++) {
                rt2800_register_read(rt2x00dev, TX_STA_FIFO, &status);
 
                if (!rt2x00_get_field32(status, TX_STA_FIFO_VALID))
 };
 
 static const struct data_queue_desc rt2800pci_queue_rx = {
-       .entry_num              = RX_ENTRIES,
+       .entry_num              = 128,
        .data_size              = AGGREGATION_SIZE,
        .desc_size              = RXD_DESC_SIZE,
        .priv_size              = sizeof(struct queue_entry_priv_pci),
 };
 
 static const struct data_queue_desc rt2800pci_queue_tx = {
-       .entry_num              = TX_ENTRIES,
+       .entry_num              = 64,
        .data_size              = AGGREGATION_SIZE,
        .desc_size              = TXD_DESC_SIZE,
        .priv_size              = sizeof(struct queue_entry_priv_pci),
 };
 
 static const struct data_queue_desc rt2800pci_queue_bcn = {
-       .entry_num              = 8 * BEACON_ENTRIES,
+       .entry_num              = 8,
        .data_size              = 0, /* No DMA required for beacons */
        .desc_size              = TXWI_DESC_SIZE,
        .priv_size              = sizeof(struct queue_entry_priv_pci),
 
         * this limit so reduce the number to prevent errors.
         */
        rt2x00_set_field32(®, USB_DMA_CFG_RX_BULK_AGG_LIMIT,
-                          ((RX_ENTRIES * DATA_FRAME_SIZE) / 1024) - 3);
+                          ((rt2x00dev->ops->rx->entry_num * DATA_FRAME_SIZE)
+                           / 1024) - 3);
        rt2x00_set_field32(®, USB_DMA_CFG_RX_BULK_EN, 1);
        rt2x00_set_field32(®, USB_DMA_CFG_TX_BULK_EN, 1);
        rt2800_register_write(rt2x00dev, USB_DMA_CFG, reg);
 };
 
 static const struct data_queue_desc rt2800usb_queue_rx = {
-       .entry_num              = RX_ENTRIES,
+       .entry_num              = 128,
        .data_size              = AGGREGATION_SIZE,
        .desc_size              = RXINFO_DESC_SIZE + RXWI_DESC_SIZE,
        .priv_size              = sizeof(struct queue_entry_priv_usb),
 };
 
 static const struct data_queue_desc rt2800usb_queue_tx = {
-       .entry_num              = TX_ENTRIES,
+       .entry_num              = 64,
        .data_size              = AGGREGATION_SIZE,
        .desc_size              = TXINFO_DESC_SIZE + TXWI_DESC_SIZE,
        .priv_size              = sizeof(struct queue_entry_priv_usb),
 };
 
 static const struct data_queue_desc rt2800usb_queue_bcn = {
-       .entry_num              = 8 * BEACON_ENTRIES,
+       .entry_num              = 8,
        .data_size              = MGMT_FRAME_SIZE,
        .desc_size              = TXINFO_DESC_SIZE + TXWI_DESC_SIZE,
        .priv_size              = sizeof(struct queue_entry_priv_usb),
 
 #define MGMT_FRAME_SIZE                256
 #define AGGREGATION_SIZE       3840
 
-/**
- * DOC: Number of entries per queue
- *
- * Under normal load without fragmentation, 12 entries are sufficient
- * without the queue being filled up to the maximum. When using fragmentation
- * and the queue threshold code, we need to add some additional margins to
- * make sure the queue will never (or only under extreme load) fill up
- * completely.
- * Since we don't use preallocated DMA, having a large number of queue entries
- * will have minimal impact on the memory requirements for the queue.
- */
-#define RX_ENTRIES     24
-#define TX_ENTRIES     24
-#define BEACON_ENTRIES 1
-#define ATIM_ENTRIES   8
-
 /**
  * enum data_queue_qid: Queue identification
  *
 
         * that the TX_STA_FIFO stack has a size of 16. We stick to our
         * tx ring size for now.
         */
-       for (i = 0; i < TX_ENTRIES; i++) {
+       for (i = 0; i < rt2x00dev->ops->tx->entry_num; i++) {
                rt2x00pci_register_read(rt2x00dev, STA_CSR4, ®);
                if (!rt2x00_get_field32(reg, STA_CSR4_VALID))
                        break;
 };
 
 static const struct data_queue_desc rt61pci_queue_rx = {
-       .entry_num              = RX_ENTRIES,
+       .entry_num              = 32,
        .data_size              = DATA_FRAME_SIZE,
        .desc_size              = RXD_DESC_SIZE,
        .priv_size              = sizeof(struct queue_entry_priv_pci),
 };
 
 static const struct data_queue_desc rt61pci_queue_tx = {
-       .entry_num              = TX_ENTRIES,
+       .entry_num              = 32,
        .data_size              = DATA_FRAME_SIZE,
        .desc_size              = TXD_DESC_SIZE,
        .priv_size              = sizeof(struct queue_entry_priv_pci),
 };
 
 static const struct data_queue_desc rt61pci_queue_bcn = {
-       .entry_num              = 4 * BEACON_ENTRIES,
+       .entry_num              = 4,
        .data_size              = 0, /* No DMA required for beacons */
        .desc_size              = TXINFO_SIZE,
        .priv_size              = sizeof(struct queue_entry_priv_pci),
 
 };
 
 static const struct data_queue_desc rt73usb_queue_rx = {
-       .entry_num              = RX_ENTRIES,
+       .entry_num              = 32,
        .data_size              = DATA_FRAME_SIZE,
        .desc_size              = RXD_DESC_SIZE,
        .priv_size              = sizeof(struct queue_entry_priv_usb),
 };
 
 static const struct data_queue_desc rt73usb_queue_tx = {
-       .entry_num              = TX_ENTRIES,
+       .entry_num              = 32,
        .data_size              = DATA_FRAME_SIZE,
        .desc_size              = TXD_DESC_SIZE,
        .priv_size              = sizeof(struct queue_entry_priv_usb),
 };
 
 static const struct data_queue_desc rt73usb_queue_bcn = {
-       .entry_num              = 4 * BEACON_ENTRIES,
+       .entry_num              = 4,
        .data_size              = MGMT_FRAME_SIZE,
        .desc_size              = TXINFO_SIZE,
        .priv_size              = sizeof(struct queue_entry_priv_usb),