kfree(chunk->alloc_addr);
 }
 
+/*
+ * Allocate a DMA consistent chunk of memory intended to act as a communication
+ * mechanism (to hold descriptors, status, queues, etc.) shared by the driver
+ * and the adapter.
+ */
+static int
+fore200e_dma_chunk_alloc(struct fore200e *fore200e, struct chunk *chunk,
+               int size, int nbr, int alignment)
+{
+       /* returned chunks are page-aligned */
+       chunk->alloc_size = size * nbr;
+       chunk->alloc_addr = dma_alloc_coherent(fore200e->dev, chunk->alloc_size,
+                                              &chunk->dma_addr, GFP_KERNEL);
+       if (!chunk->alloc_addr)
+               return -ENOMEM;
+       chunk->align_addr = chunk->alloc_addr;
+       return 0;
+}
+
+/*
+ * Free a DMA consistent chunk of memory.
+ */
+static void
+fore200e_dma_chunk_free(struct fore200e* fore200e, struct chunk* chunk)
+{
+       dma_free_coherent(fore200e->dev, chunk->alloc_size, chunk->alloc_addr,
+                         chunk->dma_addr);
+}
 
 static void
 fore200e_spin(int msecs)
            struct chunk* rbd_block = &fore200e->host_bsq[ scheme ][ magn ].rbd_block;
            
            if (status->alloc_addr)
-               fore200e->bus->dma_chunk_free(fore200e, status);
+               fore200e_dma_chunk_free(fore200e, status);
            
            if (rbd_block->alloc_addr)
-               fore200e->bus->dma_chunk_free(fore200e, rbd_block);
+               fore200e_dma_chunk_free(fore200e, rbd_block);
        }
     }
 }
 
        /* fall through */
     case FORE200E_STATE_INIT_RXQ:
-       fore200e->bus->dma_chunk_free(fore200e, &fore200e->host_rxq.status);
-       fore200e->bus->dma_chunk_free(fore200e, &fore200e->host_rxq.rpd);
+       fore200e_dma_chunk_free(fore200e, &fore200e->host_rxq.status);
+       fore200e_dma_chunk_free(fore200e, &fore200e->host_rxq.rpd);
 
        /* fall through */
     case FORE200E_STATE_INIT_TXQ:
-       fore200e->bus->dma_chunk_free(fore200e, &fore200e->host_txq.status);
-       fore200e->bus->dma_chunk_free(fore200e, &fore200e->host_txq.tpd);
+       fore200e_dma_chunk_free(fore200e, &fore200e->host_txq.status);
+       fore200e_dma_chunk_free(fore200e, &fore200e->host_txq.tpd);
 
        /* fall through */
     case FORE200E_STATE_INIT_CMDQ:
-       fore200e->bus->dma_chunk_free(fore200e, &fore200e->host_cmdq.status);
+       fore200e_dma_chunk_free(fore200e, &fore200e->host_cmdq.status);
 
        /* fall through */
     case FORE200E_STATE_INITIALIZE:
     writel(cpu_to_le32(val), addr);
 }
 
-/* allocate a DMA consistent chunk of memory intended to act as a communication mechanism
-   (to hold descriptors, status, queues, etc.) shared by the driver and the adapter */
-
-static int
-fore200e_pca_dma_chunk_alloc(struct fore200e* fore200e, struct chunk* chunk,
-                            int size, int nbr, int alignment)
-{
-    /* returned chunks are page-aligned */
-    chunk->alloc_size = size * nbr;
-    chunk->alloc_addr = dma_alloc_coherent(fore200e->dev,
-                                          chunk->alloc_size,
-                                          &chunk->dma_addr,
-                                          GFP_KERNEL);
-    
-    if ((chunk->alloc_addr == NULL) || (chunk->dma_addr == 0))
-       return -ENOMEM;
-
-    chunk->align_addr = chunk->alloc_addr;
-    
-    return 0;
-}
-
-
-/* free a DMA consistent chunk of memory */
-
-static void
-fore200e_pca_dma_chunk_free(struct fore200e* fore200e, struct chunk* chunk)
-{
-    dma_free_coherent(fore200e->dev,
-                       chunk->alloc_size,
-                       chunk->alloc_addr,
-                       chunk->dma_addr);
-}
-
-
 static int
 fore200e_pca_irq_check(struct fore200e* fore200e)
 {
        .status_alignment       = 32,
        .read                   = fore200e_pca_read,
        .write                  = fore200e_pca_write,
-       .dma_chunk_alloc        = fore200e_pca_dma_chunk_alloc,
-       .dma_chunk_free         = fore200e_pca_dma_chunk_free,
        .configure              = fore200e_pca_configure,
        .map                    = fore200e_pca_map,
        .reset                  = fore200e_pca_reset,
     sbus_writel(val, addr);
 }
 
-/* Allocate a DVMA consistent chunk of memory intended to act as a communication mechanism
- * (to hold descriptors, status, queues, etc.) shared by the driver and the adapter.
- */
-static int fore200e_sba_dma_chunk_alloc(struct fore200e *fore200e, struct chunk *chunk,
-                                       int size, int nbr, int alignment)
-{
-       chunk->alloc_size = size * nbr;
-
-       /* returned chunks are page-aligned */
-       chunk->alloc_addr = dma_alloc_coherent(fore200e->dev, chunk->alloc_size,
-                                              &chunk->dma_addr, GFP_ATOMIC);
-
-       if ((chunk->alloc_addr == NULL) || (chunk->dma_addr == 0))
-               return -ENOMEM;
-
-       chunk->align_addr = chunk->alloc_addr;
-    
-       return 0;
-}
-
-/* free a DVMA consistent chunk of memory */
-static void fore200e_sba_dma_chunk_free(struct fore200e *fore200e, struct chunk *chunk)
-{
-       dma_free_coherent(fore200e->dev, chunk->alloc_size,
-                         chunk->alloc_addr, chunk->dma_addr);
-}
-
 static void fore200e_sba_irq_enable(struct fore200e *fore200e)
 {
        u32 hcr = fore200e->bus->read(fore200e->regs.sba.hcr) & SBA200E_HCR_STICKY;
        .status_alignment       = 32,
        .read                   = fore200e_sba_read,
        .write                  = fore200e_sba_write,
-       .dma_chunk_alloc        = fore200e_sba_dma_chunk_alloc,
-       .dma_chunk_free         = fore200e_sba_dma_chunk_free,
        .configure              = fore200e_sba_configure,
        .map                    = fore200e_sba_map,
        .reset                  = fore200e_sba_reset,
            bsq = &fore200e->host_bsq[ scheme ][ magn ];
 
            /* allocate and align the array of status words */
-           if (fore200e->bus->dma_chunk_alloc(fore200e,
+           if (fore200e_dma_chunk_alloc(fore200e,
                                               &bsq->status,
                                               sizeof(enum status), 
                                               QUEUE_SIZE_BS,
            }
 
            /* allocate and align the array of receive buffer descriptors */
-           if (fore200e->bus->dma_chunk_alloc(fore200e,
+           if (fore200e_dma_chunk_alloc(fore200e,
                                               &bsq->rbd_block,
                                               sizeof(struct rbd_block),
                                               QUEUE_SIZE_BS,
                                               fore200e->bus->descr_alignment) < 0) {
                
-               fore200e->bus->dma_chunk_free(fore200e, &bsq->status);
+               fore200e_dma_chunk_free(fore200e, &bsq->status);
                return -ENOMEM;
            }
            
     DPRINTK(2, "receive queue is being initialized\n");
 
     /* allocate and align the array of status words */
-    if (fore200e->bus->dma_chunk_alloc(fore200e,
+    if (fore200e_dma_chunk_alloc(fore200e,
                                       &rxq->status,
                                       sizeof(enum status), 
                                       QUEUE_SIZE_RX,
     }
 
     /* allocate and align the array of receive PDU descriptors */
-    if (fore200e->bus->dma_chunk_alloc(fore200e,
+    if (fore200e_dma_chunk_alloc(fore200e,
                                       &rxq->rpd,
                                       sizeof(struct rpd), 
                                       QUEUE_SIZE_RX,
                                       fore200e->bus->descr_alignment) < 0) {
        
-       fore200e->bus->dma_chunk_free(fore200e, &rxq->status);
+       fore200e_dma_chunk_free(fore200e, &rxq->status);
        return -ENOMEM;
     }
 
     DPRINTK(2, "transmit queue is being initialized\n");
 
     /* allocate and align the array of status words */
-    if (fore200e->bus->dma_chunk_alloc(fore200e,
+    if (fore200e_dma_chunk_alloc(fore200e,
                                       &txq->status,
                                       sizeof(enum status), 
                                       QUEUE_SIZE_TX,
     }
 
     /* allocate and align the array of transmit PDU descriptors */
-    if (fore200e->bus->dma_chunk_alloc(fore200e,
+    if (fore200e_dma_chunk_alloc(fore200e,
                                       &txq->tpd,
                                       sizeof(struct tpd), 
                                       QUEUE_SIZE_TX,
                                       fore200e->bus->descr_alignment) < 0) {
        
-       fore200e->bus->dma_chunk_free(fore200e, &txq->status);
+       fore200e_dma_chunk_free(fore200e, &txq->status);
        return -ENOMEM;
     }
 
     DPRINTK(2, "command queue is being initialized\n");
 
     /* allocate and align the array of status words */
-    if (fore200e->bus->dma_chunk_alloc(fore200e,
+    if (fore200e_dma_chunk_alloc(fore200e,
                                       &cmdq->status,
                                       sizeof(enum status), 
                                       QUEUE_SIZE_CMD,