Switch from the legacy PCI DMA API to the generic DMA API.

Signed-off-by: Christoph Hellwig <h...@lst.de>
Reviewed-by: Johannes Thumshirn <jthumsh...@suse.de>
Reviewed-by: Jack Wang <jinpu.w...@profitbricks.com>
---
 drivers/scsi/pm8001/pm8001_hwi.c  | 22 +++++++++++-----------
 drivers/scsi/pm8001/pm8001_init.c | 28 +++++-----------------------
 drivers/scsi/pm8001/pm8001_sas.c  |  8 ++++----
 drivers/scsi/pm8001/pm80xx_hwi.c  | 22 +++++++++++-----------
 4 files changed, 31 insertions(+), 49 deletions(-)

diff --git a/drivers/scsi/pm8001/pm8001_hwi.c b/drivers/scsi/pm8001/pm8001_hwi.c
index e37ab9789ba6..d0bb357034d8 100644
--- a/drivers/scsi/pm8001/pm8001_hwi.c
+++ b/drivers/scsi/pm8001/pm8001_hwi.c
@@ -2420,7 +2420,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, 
void *piomb)
                        sata_resp = &psataPayload->sata_resp[0];
                        resp = (struct ata_task_resp *)ts->buf;
                        if (t->ata_task.dma_xfer == 0 &&
-                       t->data_dir == PCI_DMA_FROMDEVICE) {
+                           t->data_dir == DMA_FROM_DEVICE) {
                                len = sizeof(struct pio_setup_fis);
                                PM8001_IO_DBG(pm8001_ha,
                                pm8001_printk("PIO read len = %d\n", len));
@@ -4203,12 +4203,12 @@ static int process_oq(struct pm8001_hba_info 
*pm8001_ha, u8 vec)
        return ret;
 }
 
-/* PCI_DMA_... to our direction translation. */
+/* DMA_... to our direction translation. */
 static const u8 data_dir_flags[] = {
-       [PCI_DMA_BIDIRECTIONAL] = DATA_DIR_BYRECIPIENT,/* UNSPECIFIED */
-       [PCI_DMA_TODEVICE]      = DATA_DIR_OUT,/* OUTBOUND */
-       [PCI_DMA_FROMDEVICE]    = DATA_DIR_IN,/* INBOUND */
-       [PCI_DMA_NONE]          = DATA_DIR_NONE,/* NO TRANSFER */
+       [DMA_BIDIRECTIONAL]     = DATA_DIR_BYRECIPIENT, /* UNSPECIFIED */
+       [DMA_TO_DEVICE]         = DATA_DIR_OUT,         /* OUTBOUND */
+       [DMA_FROM_DEVICE]       = DATA_DIR_IN,          /* INBOUND */
+       [DMA_NONE]              = DATA_DIR_NONE,        /* NO TRANSFER */
 };
 void
 pm8001_chip_make_sg(struct scatterlist *scatter, int nr, void *prd)
@@ -4255,13 +4255,13 @@ static int pm8001_chip_smp_req(struct pm8001_hba_info 
*pm8001_ha,
         * DMA-map SMP request, response buffers
         */
        sg_req = &task->smp_task.smp_req;
-       elem = dma_map_sg(pm8001_ha->dev, sg_req, 1, PCI_DMA_TODEVICE);
+       elem = dma_map_sg(pm8001_ha->dev, sg_req, 1, DMA_TO_DEVICE);
        if (!elem)
                return -ENOMEM;
        req_len = sg_dma_len(sg_req);
 
        sg_resp = &task->smp_task.smp_resp;
-       elem = dma_map_sg(pm8001_ha->dev, sg_resp, 1, PCI_DMA_FROMDEVICE);
+       elem = dma_map_sg(pm8001_ha->dev, sg_resp, 1, DMA_FROM_DEVICE);
        if (!elem) {
                rc = -ENOMEM;
                goto err_out;
@@ -4294,10 +4294,10 @@ static int pm8001_chip_smp_req(struct pm8001_hba_info 
*pm8001_ha,
 
 err_out_2:
        dma_unmap_sg(pm8001_ha->dev, &ccb->task->smp_task.smp_resp, 1,
-                       PCI_DMA_FROMDEVICE);
+                       DMA_FROM_DEVICE);
 err_out:
        dma_unmap_sg(pm8001_ha->dev, &ccb->task->smp_task.smp_req, 1,
-                       PCI_DMA_TODEVICE);
+                       DMA_TO_DEVICE);
        return rc;
 }
 
@@ -4376,7 +4376,7 @@ static int pm8001_chip_sata_req(struct pm8001_hba_info 
*pm8001_ha,
        u32  opc = OPC_INB_SATA_HOST_OPSTART;
        memset(&sata_cmd, 0, sizeof(sata_cmd));
        circularQ = &pm8001_ha->inbnd_q_tbl[0];
-       if (task->data_dir == PCI_DMA_NONE) {
+       if (task->data_dir == DMA_NONE) {
                ATAP = 0x04;  /* no data*/
                PM8001_IO_DBG(pm8001_ha, pm8001_printk("no data\n"));
        } else if (likely(!task->ata_task.device_control_reg_update)) {
diff --git a/drivers/scsi/pm8001/pm8001_init.c 
b/drivers/scsi/pm8001/pm8001_init.c
index 501830caba21..d71e7e4ec29c 100644
--- a/drivers/scsi/pm8001/pm8001_init.c
+++ b/drivers/scsi/pm8001/pm8001_init.c
@@ -152,7 +152,7 @@ static void pm8001_free(struct pm8001_hba_info *pm8001_ha)
 
        for (i = 0; i < USI_MAX_MEMCNT; i++) {
                if (pm8001_ha->memoryMap.region[i].virt_ptr != NULL) {
-                       pci_free_consistent(pm8001_ha->pdev,
+                       dma_free_coherent(&pm8001_ha->pdev->dev,
                                (pm8001_ha->memoryMap.region[i].total_len +
                                pm8001_ha->memoryMap.region[i].alignment),
                                pm8001_ha->memoryMap.region[i].virt_ptr,
@@ -501,30 +501,12 @@ static int pci_go_44(struct pci_dev *pdev)
 {
        int rc;
 
-       if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(44))) {
-               rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(44));
-               if (rc) {
-                       rc = pci_set_consistent_dma_mask(pdev,
-                               DMA_BIT_MASK(32));
-                       if (rc) {
-                               dev_printk(KERN_ERR, &pdev->dev,
-                                       "44-bit DMA enable failed\n");
-                               return rc;
-                       }
-               }
-       } else {
-               rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
-               if (rc) {
+       rc = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(44));
+       if (rc) {
+               rc = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
+               if (rc)
                        dev_printk(KERN_ERR, &pdev->dev,
                                "32-bit DMA enable failed\n");
-                       return rc;
-               }
-               rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
-               if (rc) {
-                       dev_printk(KERN_ERR, &pdev->dev,
-                               "32-bit consistent DMA enable failed\n");
-                       return rc;
-               }
        }
        return rc;
 }
diff --git a/drivers/scsi/pm8001/pm8001_sas.c b/drivers/scsi/pm8001/pm8001_sas.c
index 84092e4e1aa9..b3be49d41375 100644
--- a/drivers/scsi/pm8001/pm8001_sas.c
+++ b/drivers/scsi/pm8001/pm8001_sas.c
@@ -116,8 +116,8 @@ int pm8001_mem_alloc(struct pci_dev *pdev, void **virt_addr,
        u64 align_offset = 0;
        if (align)
                align_offset = (dma_addr_t)align - 1;
-       mem_virt_alloc = pci_zalloc_consistent(pdev, mem_size + align,
-                                              &mem_dma_handle);
+       mem_virt_alloc = dma_zalloc_coherent(&pdev->dev, mem_size + align,
+                       &mem_dma_handle, GFP_KERNEL);
        if (!mem_virt_alloc) {
                pm8001_printk("memory allocation error\n");
                return -1;
@@ -533,9 +533,9 @@ void pm8001_ccb_task_free(struct pm8001_hba_info *pm8001_ha,
        switch (task->task_proto) {
        case SAS_PROTOCOL_SMP:
                dma_unmap_sg(pm8001_ha->dev, &task->smp_task.smp_resp, 1,
-                       PCI_DMA_FROMDEVICE);
+                       DMA_FROM_DEVICE);
                dma_unmap_sg(pm8001_ha->dev, &task->smp_task.smp_req, 1,
-                       PCI_DMA_TODEVICE);
+                       DMA_TO_DEVICE);
                break;
 
        case SAS_PROTOCOL_SATA:
diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c
index 9864a3c7547b..63e4f7d34d6c 100644
--- a/drivers/scsi/pm8001/pm80xx_hwi.c
+++ b/drivers/scsi/pm8001/pm80xx_hwi.c
@@ -2133,7 +2133,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, 
void *piomb)
                        sata_resp = &psataPayload->sata_resp[0];
                        resp = (struct ata_task_resp *)ts->buf;
                        if (t->ata_task.dma_xfer == 0 &&
-                       t->data_dir == PCI_DMA_FROMDEVICE) {
+                           t->data_dir == DMA_FROM_DEVICE) {
                                len = sizeof(struct pio_setup_fis);
                                PM8001_IO_DBG(pm8001_ha,
                                pm8001_printk("PIO read len = %d\n", len));
@@ -3855,12 +3855,12 @@ static int process_oq(struct pm8001_hba_info 
*pm8001_ha, u8 vec)
        return ret;
 }
 
-/* PCI_DMA_... to our direction translation. */
+/* DMA_... to our direction translation. */
 static const u8 data_dir_flags[] = {
-       [PCI_DMA_BIDIRECTIONAL] = DATA_DIR_BYRECIPIENT,/* UNSPECIFIED */
-       [PCI_DMA_TODEVICE]      = DATA_DIR_OUT,/* OUTBOUND */
-       [PCI_DMA_FROMDEVICE]    = DATA_DIR_IN,/* INBOUND */
-       [PCI_DMA_NONE]          = DATA_DIR_NONE,/* NO TRANSFER */
+       [DMA_BIDIRECTIONAL]     = DATA_DIR_BYRECIPIENT, /* UNSPECIFIED */
+       [DMA_TO_DEVICE]         = DATA_DIR_OUT,         /* OUTBOUND */
+       [DMA_FROM_DEVICE]       = DATA_DIR_IN,          /* INBOUND */
+       [DMA_NONE]              = DATA_DIR_NONE,        /* NO TRANSFER */
 };
 
 static void build_smp_cmd(u32 deviceID, __le32 hTag,
@@ -3902,13 +3902,13 @@ static int pm80xx_chip_smp_req(struct pm8001_hba_info 
*pm8001_ha,
         * DMA-map SMP request, response buffers
         */
        sg_req = &task->smp_task.smp_req;
-       elem = dma_map_sg(pm8001_ha->dev, sg_req, 1, PCI_DMA_TODEVICE);
+       elem = dma_map_sg(pm8001_ha->dev, sg_req, 1, DMA_TO_DEVICE);
        if (!elem)
                return -ENOMEM;
        req_len = sg_dma_len(sg_req);
 
        sg_resp = &task->smp_task.smp_resp;
-       elem = dma_map_sg(pm8001_ha->dev, sg_resp, 1, PCI_DMA_FROMDEVICE);
+       elem = dma_map_sg(pm8001_ha->dev, sg_resp, 1, DMA_FROM_DEVICE);
        if (!elem) {
                rc = -ENOMEM;
                goto err_out;
@@ -3999,10 +3999,10 @@ static int pm80xx_chip_smp_req(struct pm8001_hba_info 
*pm8001_ha,
 
 err_out_2:
        dma_unmap_sg(pm8001_ha->dev, &ccb->task->smp_task.smp_resp, 1,
-                       PCI_DMA_FROMDEVICE);
+                       DMA_FROM_DEVICE);
 err_out:
        dma_unmap_sg(pm8001_ha->dev, &ccb->task->smp_task.smp_req, 1,
-                       PCI_DMA_TODEVICE);
+                       DMA_TO_DEVICE);
        return rc;
 }
 
@@ -4226,7 +4226,7 @@ static int pm80xx_chip_sata_req(struct pm8001_hba_info 
*pm8001_ha,
        q_index = (u32) (pm8001_ha_dev->id & 0x00ffffff) % PM8001_MAX_INB_NUM;
        circularQ = &pm8001_ha->inbnd_q_tbl[q_index];
 
-       if (task->data_dir == PCI_DMA_NONE) {
+       if (task->data_dir == DMA_NONE) {
                ATAP = 0x04; /* no data*/
                PM8001_IO_DBG(pm8001_ha, pm8001_printk("no data\n"));
        } else if (likely(!task->ata_task.device_control_reg_update)) {
-- 
2.19.1

Reply via email to