/* cp->lock held. note: the last put_page will free the buffer */
 static int cas_page_free(struct cas *cp, cas_page_t *page)
 {
-       pci_unmap_page(cp->pdev, page->dma_addr, cp->page_size,
-                      PCI_DMA_FROMDEVICE);
+       dma_unmap_page(&cp->pdev->dev, page->dma_addr, cp->page_size,
+                      DMA_FROM_DEVICE);
        __free_pages(page->buffer, cp->page_order);
        kfree(page);
        return 0;
        page->buffer = alloc_pages(flags, cp->page_order);
        if (!page->buffer)
                goto page_err;
-       page->dma_addr = pci_map_page(cp->pdev, page->buffer, 0,
-                                     cp->page_size, PCI_DMA_FROMDEVICE);
+       page->dma_addr = dma_map_page(&cp->pdev->dev, page->buffer, 0,
+                                     cp->page_size, DMA_FROM_DEVICE);
        return page;
 
 page_err:
                        daddr = le64_to_cpu(txd->buffer);
                        dlen = CAS_VAL(TX_DESC_BUFLEN,
                                       le64_to_cpu(txd->control));
-                       pci_unmap_page(cp->pdev, daddr, dlen,
-                                      PCI_DMA_TODEVICE);
+                       dma_unmap_page(&cp->pdev->dev, daddr, dlen,
+                                      DMA_TO_DEVICE);
                        entry = TX_DESC_NEXT(ring, entry);
 
                        /* tiny buffer may follow */
                i = hlen;
                if (!dlen) /* attach FCS */
                        i += cp->crc_size;
-               pci_dma_sync_single_for_cpu(cp->pdev, page->dma_addr + off, i,
-                                   PCI_DMA_FROMDEVICE);
+               dma_sync_single_for_cpu(&cp->pdev->dev, page->dma_addr + off,
+                                       i, DMA_FROM_DEVICE);
                addr = cas_page_map(page->buffer);
                memcpy(p, addr + off, i);
-               pci_dma_sync_single_for_device(cp->pdev, page->dma_addr + off, i,
-                                   PCI_DMA_FROMDEVICE);
+               dma_sync_single_for_device(&cp->pdev->dev,
+                                          page->dma_addr + off, i,
+                                          DMA_FROM_DEVICE);
                cas_page_unmap(addr);
                RX_USED_ADD(page, 0x100);
                p += hlen;
                i = hlen;
                if (i == dlen)  /* attach FCS */
                        i += cp->crc_size;
-               pci_dma_sync_single_for_cpu(cp->pdev, page->dma_addr + off, i,
-                                   PCI_DMA_FROMDEVICE);
+               dma_sync_single_for_cpu(&cp->pdev->dev, page->dma_addr + off,
+                                       i, DMA_FROM_DEVICE);
 
                /* make sure we always copy a header */
                swivel = 0;
                if (p == (char *) skb->data) { /* not split */
                        addr = cas_page_map(page->buffer);
                        memcpy(p, addr + off, RX_COPY_MIN);
-                       pci_dma_sync_single_for_device(cp->pdev, page->dma_addr + off, i,
-                                       PCI_DMA_FROMDEVICE);
+                       dma_sync_single_for_device(&cp->pdev->dev,
+                                                  page->dma_addr + off, i,
+                                                  DMA_FROM_DEVICE);
                        cas_page_unmap(addr);
                        off += RX_COPY_MIN;
                        swivel = RX_COPY_MIN;
 
                        i = CAS_VAL(RX_COMP2_NEXT_INDEX, words[1]);
                        page = cp->rx_pages[CAS_VAL(RX_INDEX_RING, i)][CAS_VAL(RX_INDEX_NUM, i)];
-                       pci_dma_sync_single_for_cpu(cp->pdev, page->dma_addr,
-                                           hlen + cp->crc_size,
-                                           PCI_DMA_FROMDEVICE);
-                       pci_dma_sync_single_for_device(cp->pdev, page->dma_addr,
-                                           hlen + cp->crc_size,
-                                           PCI_DMA_FROMDEVICE);
+                       dma_sync_single_for_cpu(&cp->pdev->dev,
+                                               page->dma_addr,
+                                               hlen + cp->crc_size,
+                                               DMA_FROM_DEVICE);
+                       dma_sync_single_for_device(&cp->pdev->dev,
+                                                  page->dma_addr,
+                                                  hlen + cp->crc_size,
+                                                  DMA_FROM_DEVICE);
 
                        skb_shinfo(skb)->nr_frags++;
                        skb->data_len += hlen;
                i = hlen;
                if (i == dlen) /* attach FCS */
                        i += cp->crc_size;
-               pci_dma_sync_single_for_cpu(cp->pdev, page->dma_addr + off, i,
-                                   PCI_DMA_FROMDEVICE);
+               dma_sync_single_for_cpu(&cp->pdev->dev, page->dma_addr + off,
+                                       i, DMA_FROM_DEVICE);
                addr = cas_page_map(page->buffer);
                memcpy(p, addr + off, i);
-               pci_dma_sync_single_for_device(cp->pdev, page->dma_addr + off, i,
-                                   PCI_DMA_FROMDEVICE);
+               dma_sync_single_for_device(&cp->pdev->dev,
+                                          page->dma_addr + off, i,
+                                          DMA_FROM_DEVICE);
                cas_page_unmap(addr);
                if (p == (char *) skb->data) /* not split */
                        RX_USED_ADD(page, cp->mtu_stride);
                        p += hlen;
                        i = CAS_VAL(RX_COMP2_NEXT_INDEX, words[1]);
                        page = cp->rx_pages[CAS_VAL(RX_INDEX_RING, i)][CAS_VAL(RX_INDEX_NUM, i)];
-                       pci_dma_sync_single_for_cpu(cp->pdev, page->dma_addr,
-                                           dlen + cp->crc_size,
-                                           PCI_DMA_FROMDEVICE);
+                       dma_sync_single_for_cpu(&cp->pdev->dev,
+                                               page->dma_addr,
+                                               dlen + cp->crc_size,
+                                               DMA_FROM_DEVICE);
                        addr = cas_page_map(page->buffer);
                        memcpy(p, addr, dlen + cp->crc_size);
-                       pci_dma_sync_single_for_device(cp->pdev, page->dma_addr,
-                                           dlen + cp->crc_size,
-                                           PCI_DMA_FROMDEVICE);
+                       dma_sync_single_for_device(&cp->pdev->dev,
+                                                  page->dma_addr,
+                                                  dlen + cp->crc_size,
+                                                  DMA_FROM_DEVICE);
                        cas_page_unmap(addr);
                        RX_USED_ADD(page, dlen + cp->crc_size);
                }
 
        nr_frags = skb_shinfo(skb)->nr_frags;
        len = skb_headlen(skb);
-       mapping = pci_map_page(cp->pdev, virt_to_page(skb->data),
-                              offset_in_page(skb->data), len,
-                              PCI_DMA_TODEVICE);
+       mapping = dma_map_page(&cp->pdev->dev, virt_to_page(skb->data),
+                              offset_in_page(skb->data), len, DMA_TO_DEVICE);
 
        tentry = entry;
        tabort = cas_calc_tabort(cp, (unsigned long) skb->data, len);
                        daddr = le64_to_cpu(txd[ent].buffer);
                        dlen  =  CAS_VAL(TX_DESC_BUFLEN,
                                         le64_to_cpu(txd[ent].control));
-                       pci_unmap_page(cp->pdev, daddr, dlen,
-                                      PCI_DMA_TODEVICE);
+                       dma_unmap_page(&cp->pdev->dev, daddr, dlen,
+                                      DMA_TO_DEVICE);
 
                        if (frag != skb_shinfo(skb)->nr_frags) {
                                i++;
                if (!cp->tx_tiny_bufs[i])
                        continue;
 
-               pci_free_consistent(pdev, TX_TINY_BUF_BLOCK,
-                                   cp->tx_tiny_bufs[i],
-                                   cp->tx_tiny_dvma[i]);
+               dma_free_coherent(&pdev->dev, TX_TINY_BUF_BLOCK,
+                                 cp->tx_tiny_bufs[i], cp->tx_tiny_dvma[i]);
                cp->tx_tiny_bufs[i] = NULL;
        }
 }
 
        for (i = 0; i < N_TX_RINGS; i++) {
                cp->tx_tiny_bufs[i] =
-                       pci_alloc_consistent(pdev, TX_TINY_BUF_BLOCK,
-                                            &cp->tx_tiny_dvma[i]);
+                       dma_alloc_coherent(&pdev->dev, TX_TINY_BUF_BLOCK,
+                                          &cp->tx_tiny_dvma[i], GFP_KERNEL);
                if (!cp->tx_tiny_bufs[i]) {
                        cas_tx_tiny_free(cp);
                        return -1;
 
 
        /* Configure DMA attributes. */
-       if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
+       if (!dma_set_mask(&pdev->dev, DMA_BIT_MASK(64))) {
                pci_using_dac = 1;
-               err = pci_set_consistent_dma_mask(pdev,
-                                                 DMA_BIT_MASK(64));
+               err = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64));
                if (err < 0) {
                        dev_err(&pdev->dev, "Unable to obtain 64-bit DMA "
                               "for consistent allocations\n");
                }
 
        } else {
-               err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
+               err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
                if (err) {
                        dev_err(&pdev->dev, "No usable DMA configuration, "
                               "aborting\n");
                cas_saturn_firmware_init(cp);
 
        cp->init_block =
-               pci_alloc_consistent(pdev, sizeof(struct cas_init_block),
-                                    &cp->block_dvma);
+               dma_alloc_coherent(&pdev->dev, sizeof(struct cas_init_block),
+                                  &cp->block_dvma, GFP_KERNEL);
        if (!cp->init_block) {
                dev_err(&pdev->dev, "Cannot allocate init block, aborting\n");
                goto err_out_iounmap;
        return 0;
 
 err_out_free_consistent:
-       pci_free_consistent(pdev, sizeof(struct cas_init_block),
-                           cp->init_block, cp->block_dvma);
+       dma_free_coherent(&pdev->dev, sizeof(struct cas_init_block),
+                         cp->init_block, cp->block_dvma);
 
 err_out_iounmap:
        mutex_lock(&cp->pm_mutex);
                                      cp->orig_cacheline_size);
        }
 #endif
-       pci_free_consistent(pdev, sizeof(struct cas_init_block),
-                           cp->init_block, cp->block_dvma);
+       dma_free_coherent(&pdev->dev, sizeof(struct cas_init_block),
+                         cp->init_block, cp->block_dvma);
        pci_iounmap(pdev, cp->regs);
        free_netdev(dev);
        pci_release_regions(pdev);