scsi: smartpqi: fully convert to the generic DMA API
authorChristoph Hellwig <hch@lst.de>
Thu, 11 Oct 2018 07:47:59 +0000 (09:47 +0200)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 18 Oct 2018 01:58:53 +0000 (21:58 -0400)
The driver is currently using an odd mix of legacy PCI DMA API and
generic DMA API calls, switch it over to the generic API entirely.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Tested-by: Don Brace <don.brace@microchip.com>
Acked-by: Don Brace <don.brace@microchip.com>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/smartpqi/smartpqi_init.c
drivers/scsi/smartpqi/smartpqi_sis.c

index 2112ea6723c60f65252b61f0ad9471ce327d60f7..a25a07a0b7f0afdfb4121be2053d8158874bbf6e 100644 (file)
@@ -349,16 +349,16 @@ static inline u32 pqi_read_heartbeat_counter(struct pqi_ctrl_info *ctrl_info)
 
 static int pqi_map_single(struct pci_dev *pci_dev,
        struct pqi_sg_descriptor *sg_descriptor, void *buffer,
-       size_t buffer_length, int data_direction)
+       size_t buffer_length, enum dma_data_direction data_direction)
 {
        dma_addr_t bus_address;
 
-       if (!buffer || buffer_length == 0 || data_direction == PCI_DMA_NONE)
+       if (!buffer || buffer_length == 0 || data_direction == DMA_NONE)
                return 0;
 
-       bus_address = pci_map_single(pci_dev, buffer, buffer_length,
+       bus_address = dma_map_single(&pci_dev->dev, buffer, buffer_length,
                data_direction);
-       if (pci_dma_mapping_error(pci_dev, bus_address))
+       if (dma_mapping_error(&pci_dev->dev, bus_address))
                return -ENOMEM;
 
        put_unaligned_le64((u64)bus_address, &sg_descriptor->address);
@@ -370,15 +370,15 @@ static int pqi_map_single(struct pci_dev *pci_dev,
 
 static void pqi_pci_unmap(struct pci_dev *pci_dev,
        struct pqi_sg_descriptor *descriptors, int num_descriptors,
-       int data_direction)
+       enum dma_data_direction data_direction)
 {
        int i;
 
-       if (data_direction == PCI_DMA_NONE)
+       if (data_direction == DMA_NONE)
                return;
 
        for (i = 0; i < num_descriptors; i++)
-               pci_unmap_single(pci_dev,
+               dma_unmap_single(&pci_dev->dev,
                        (dma_addr_t)get_unaligned_le64(&descriptors[i].address),
                        get_unaligned_le32(&descriptors[i].length),
                        data_direction);
@@ -387,10 +387,9 @@ static void pqi_pci_unmap(struct pci_dev *pci_dev,
 static int pqi_build_raid_path_request(struct pqi_ctrl_info *ctrl_info,
        struct pqi_raid_path_request *request, u8 cmd,
        u8 *scsi3addr, void *buffer, size_t buffer_length,
-       u16 vpd_page, int *pci_direction)
+       u16 vpd_page, enum dma_data_direction *dir)
 {
        u8 *cdb;
-       int pci_dir;
 
        memset(request, 0, sizeof(*request));
 
@@ -458,23 +457,21 @@ static int pqi_build_raid_path_request(struct pqi_ctrl_info *ctrl_info,
 
        switch (request->data_direction) {
        case SOP_READ_FLAG:
-               pci_dir = PCI_DMA_FROMDEVICE;
+               *dir = DMA_FROM_DEVICE;
                break;
        case SOP_WRITE_FLAG:
-               pci_dir = PCI_DMA_TODEVICE;
+               *dir = DMA_TO_DEVICE;
                break;
        case SOP_NO_DIRECTION_FLAG:
-               pci_dir = PCI_DMA_NONE;
+               *dir = DMA_NONE;
                break;
        default:
-               pci_dir = PCI_DMA_BIDIRECTIONAL;
+               *dir = DMA_BIDIRECTIONAL;
                break;
        }
 
-       *pci_direction = pci_dir;
-
        return pqi_map_single(ctrl_info->pci_dev, &request->sg_descriptors[0],
-               buffer, buffer_length, pci_dir);
+               buffer, buffer_length, *dir);
 }
 
 static inline void pqi_reinit_io_request(struct pqi_io_request *io_request)
@@ -516,21 +513,19 @@ static int pqi_identify_controller(struct pqi_ctrl_info *ctrl_info,
        struct bmic_identify_controller *buffer)
 {
        int rc;
-       int pci_direction;
+       enum dma_data_direction dir;
        struct pqi_raid_path_request request;
 
        rc = pqi_build_raid_path_request(ctrl_info, &request,
                BMIC_IDENTIFY_CONTROLLER, RAID_CTLR_LUNID, buffer,
-               sizeof(*buffer), 0, &pci_direction);
+               sizeof(*buffer), 0, &dir);
        if (rc)
                return rc;
 
        rc = pqi_submit_raid_request_synchronous(ctrl_info, &request.header, 0,
                NULL, NO_TIMEOUT);
 
-       pqi_pci_unmap(ctrl_info->pci_dev, request.sg_descriptors, 1,
-               pci_direction);
-
+       pqi_pci_unmap(ctrl_info->pci_dev, request.sg_descriptors, 1, dir);
        return rc;
 }
 
@@ -538,21 +533,19 @@ static int pqi_scsi_inquiry(struct pqi_ctrl_info *ctrl_info,
        u8 *scsi3addr, u16 vpd_page, void *buffer, size_t buffer_length)
 {
        int rc;
-       int pci_direction;
+       enum dma_data_direction dir;
        struct pqi_raid_path_request request;
 
        rc = pqi_build_raid_path_request(ctrl_info, &request,
                INQUIRY, scsi3addr, buffer, buffer_length, vpd_page,
-               &pci_direction);
+               &dir);
        if (rc)
                return rc;
 
        rc = pqi_submit_raid_request_synchronous(ctrl_info, &request.header, 0,
                NULL, NO_TIMEOUT);
 
-       pqi_pci_unmap(ctrl_info->pci_dev, request.sg_descriptors, 1,
-               pci_direction);
-
+       pqi_pci_unmap(ctrl_info->pci_dev, request.sg_descriptors, 1, dir);
        return rc;
 }
 
@@ -562,13 +555,13 @@ static int pqi_identify_physical_device(struct pqi_ctrl_info *ctrl_info,
        size_t buffer_length)
 {
        int rc;
-       int pci_direction;
+       enum dma_data_direction dir;
        u16 bmic_device_index;
        struct pqi_raid_path_request request;
 
        rc = pqi_build_raid_path_request(ctrl_info, &request,
                BMIC_IDENTIFY_PHYSICAL_DEVICE, RAID_CTLR_LUNID, buffer,
-               buffer_length, 0, &pci_direction);
+               buffer_length, 0, &dir);
        if (rc)
                return rc;
 
@@ -579,9 +572,7 @@ static int pqi_identify_physical_device(struct pqi_ctrl_info *ctrl_info,
        rc = pqi_submit_raid_request_synchronous(ctrl_info, &request.header,
                0, NULL, NO_TIMEOUT);
 
-       pqi_pci_unmap(ctrl_info->pci_dev, request.sg_descriptors, 1,
-               pci_direction);
-
+       pqi_pci_unmap(ctrl_info->pci_dev, request.sg_descriptors, 1, dir);
        return rc;
 }
 
@@ -590,8 +581,8 @@ static int pqi_flush_cache(struct pqi_ctrl_info *ctrl_info,
 {
        int rc;
        struct pqi_raid_path_request request;
-       int pci_direction;
        struct bmic_flush_cache *flush_cache;
+       enum dma_data_direction dir;
 
        /*
         * Don't bother trying to flush the cache if the controller is
@@ -608,16 +599,14 @@ static int pqi_flush_cache(struct pqi_ctrl_info *ctrl_info,
 
        rc = pqi_build_raid_path_request(ctrl_info, &request,
                SA_FLUSH_CACHE, RAID_CTLR_LUNID, flush_cache,
-               sizeof(*flush_cache), 0, &pci_direction);
+               sizeof(*flush_cache), 0, &dir);
        if (rc)
                goto out;
 
        rc = pqi_submit_raid_request_synchronous(ctrl_info, &request.header,
                0, NULL, NO_TIMEOUT);
 
-       pqi_pci_unmap(ctrl_info->pci_dev, request.sg_descriptors, 1,
-               pci_direction);
-
+       pqi_pci_unmap(ctrl_info->pci_dev, request.sg_descriptors, 1, dir);
 out:
        kfree(flush_cache);
 
@@ -629,20 +618,18 @@ static int pqi_write_host_wellness(struct pqi_ctrl_info *ctrl_info,
 {
        int rc;
        struct pqi_raid_path_request request;
-       int pci_direction;
+       enum dma_data_direction dir;
 
        rc = pqi_build_raid_path_request(ctrl_info, &request,
                BMIC_WRITE_HOST_WELLNESS, RAID_CTLR_LUNID, buffer,
-               buffer_length, 0, &pci_direction);
+               buffer_length, 0, &dir);
        if (rc)
                return rc;
 
        rc = pqi_submit_raid_request_synchronous(ctrl_info, &request.header,
                0, NULL, NO_TIMEOUT);
 
-       pqi_pci_unmap(ctrl_info->pci_dev, request.sg_descriptors, 1,
-               pci_direction);
-
+       pqi_pci_unmap(ctrl_info->pci_dev, request.sg_descriptors, 1, dir);
        return rc;
 }
 
@@ -793,20 +780,18 @@ static int pqi_report_luns(struct pqi_ctrl_info *ctrl_info, u8 cmd,
        void *buffer, size_t buffer_length)
 {
        int rc;
-       int pci_direction;
+       enum dma_data_direction dir;
        struct pqi_raid_path_request request;
 
        rc = pqi_build_raid_path_request(ctrl_info, &request,
-               cmd, RAID_CTLR_LUNID, buffer, buffer_length, 0, &pci_direction);
+               cmd, RAID_CTLR_LUNID, buffer, buffer_length, 0, &dir);
        if (rc)
                return rc;
 
        rc = pqi_submit_raid_request_synchronous(ctrl_info, &request.header, 0,
                NULL, NO_TIMEOUT);
 
-       pqi_pci_unmap(ctrl_info->pci_dev, request.sg_descriptors, 1,
-               pci_direction);
-
+       pqi_pci_unmap(ctrl_info->pci_dev, request.sg_descriptors, 1, dir);
        return rc;
 }
 
@@ -1089,7 +1074,7 @@ static int pqi_get_raid_map(struct pqi_ctrl_info *ctrl_info,
        struct pqi_scsi_dev *device)
 {
        int rc;
-       int pci_direction;
+       enum dma_data_direction dir;
        struct pqi_raid_path_request request;
        struct raid_map *raid_map;
 
@@ -1099,15 +1084,14 @@ static int pqi_get_raid_map(struct pqi_ctrl_info *ctrl_info,
 
        rc = pqi_build_raid_path_request(ctrl_info, &request,
                CISS_GET_RAID_MAP, device->scsi3addr, raid_map,
-               sizeof(*raid_map), 0, &pci_direction);
+               sizeof(*raid_map), 0, &dir);
        if (rc)
                goto error;
 
        rc = pqi_submit_raid_request_synchronous(ctrl_info, &request.header, 0,
                NULL, NO_TIMEOUT);
 
-       pqi_pci_unmap(ctrl_info->pci_dev, request.sg_descriptors, 1,
-               pci_direction);
+       pqi_pci_unmap(ctrl_info->pci_dev, request.sg_descriptors, 1, dir);
 
        if (rc)
                goto error;
@@ -3822,7 +3806,7 @@ static int pqi_report_device_capability(struct pqi_ctrl_info *ctrl_info)
        rc = pqi_map_single(ctrl_info->pci_dev,
                &request.data.report_device_capability.sg_descriptor,
                capability, sizeof(*capability),
-               PCI_DMA_FROMDEVICE);
+               DMA_FROM_DEVICE);
        if (rc)
                goto out;
 
@@ -3831,7 +3815,7 @@ static int pqi_report_device_capability(struct pqi_ctrl_info *ctrl_info)
 
        pqi_pci_unmap(ctrl_info->pci_dev,
                &request.data.report_device_capability.sg_descriptor, 1,
-               PCI_DMA_FROMDEVICE);
+               DMA_FROM_DEVICE);
 
        if (rc)
                goto out;
@@ -4158,7 +4142,7 @@ static int pqi_configure_events(struct pqi_ctrl_info *ctrl_info,
        rc = pqi_map_single(ctrl_info->pci_dev,
                request.data.report_event_configuration.sg_descriptors,
                event_config, PQI_REPORT_EVENT_CONFIG_BUFFER_LENGTH,
-               PCI_DMA_FROMDEVICE);
+               DMA_FROM_DEVICE);
        if (rc)
                goto out;
 
@@ -4167,7 +4151,7 @@ static int pqi_configure_events(struct pqi_ctrl_info *ctrl_info,
 
        pqi_pci_unmap(ctrl_info->pci_dev,
                request.data.report_event_configuration.sg_descriptors, 1,
-               PCI_DMA_FROMDEVICE);
+               DMA_FROM_DEVICE);
 
        if (rc)
                goto out;
@@ -4194,7 +4178,7 @@ static int pqi_configure_events(struct pqi_ctrl_info *ctrl_info,
        rc = pqi_map_single(ctrl_info->pci_dev,
                request.data.report_event_configuration.sg_descriptors,
                event_config, PQI_REPORT_EVENT_CONFIG_BUFFER_LENGTH,
-               PCI_DMA_TODEVICE);
+               DMA_TO_DEVICE);
        if (rc)
                goto out;
 
@@ -4203,7 +4187,7 @@ static int pqi_configure_events(struct pqi_ctrl_info *ctrl_info,
 
        pqi_pci_unmap(ctrl_info->pci_dev,
                request.data.report_event_configuration.sg_descriptors, 1,
-               PCI_DMA_TODEVICE);
+               DMA_TO_DEVICE);
 
 out:
        kfree(event_config);
@@ -5534,7 +5518,7 @@ static int pqi_passthru_ioctl(struct pqi_ctrl_info *ctrl_info, void __user *arg)
 
                rc = pqi_map_single(ctrl_info->pci_dev,
                        &request.sg_descriptors[0], kernel_buffer,
-                       iocommand.buf_size, PCI_DMA_BIDIRECTIONAL);
+                       iocommand.buf_size, DMA_BIDIRECTIONAL);
                if (rc)
                        goto out;
 
@@ -5548,7 +5532,7 @@ static int pqi_passthru_ioctl(struct pqi_ctrl_info *ctrl_info, void __user *arg)
 
        if (iocommand.buf_size > 0)
                pqi_pci_unmap(ctrl_info->pci_dev, request.sg_descriptors, 1,
-                       PCI_DMA_BIDIRECTIONAL);
+                       DMA_BIDIRECTIONAL);
 
        memset(&iocommand.error_info, 0, sizeof(iocommand.error_info));
 
index 5141bd4c9f06135e5e3a5dc30277200a112dc998..ea91658c7060d3704ce140f6d0e0d1d6552e73db 100644 (file)
@@ -316,9 +316,9 @@ int sis_init_base_struct_addr(struct pqi_ctrl_info *ctrl_info)
        put_unaligned_le32(ctrl_info->max_io_slots,
                &base_struct->error_buffer_num_elements);
 
-       bus_address = pci_map_single(ctrl_info->pci_dev, base_struct,
-               sizeof(*base_struct), PCI_DMA_TODEVICE);
-       if (pci_dma_mapping_error(ctrl_info->pci_dev, bus_address)) {
+       bus_address = dma_map_single(&ctrl_info->pci_dev->dev, base_struct,
+               sizeof(*base_struct), DMA_TO_DEVICE);
+       if (dma_mapping_error(&ctrl_info->pci_dev->dev, bus_address)) {
                rc = -ENOMEM;
                goto out;
        }
@@ -331,9 +331,8 @@ int sis_init_base_struct_addr(struct pqi_ctrl_info *ctrl_info)
        rc = sis_send_sync_cmd(ctrl_info, SIS_CMD_INIT_BASE_STRUCT_ADDRESS,
                &params);
 
-       pci_unmap_single(ctrl_info->pci_dev, bus_address, sizeof(*base_struct),
-               PCI_DMA_TODEVICE);
-
+       dma_unmap_single(&ctrl_info->pci_dev->dev, bus_address,
+                       sizeof(*base_struct), DMA_TO_DEVICE);
 out:
        kfree(base_struct_unaligned);