17689e82eSCornelia Huck /* 27689e82eSCornelia Huck * SCSI library functions depending on DMA 37689e82eSCornelia Huck */ 47689e82eSCornelia Huck 57689e82eSCornelia Huck #include <linux/blkdev.h> 67689e82eSCornelia Huck #include <linux/device.h> 7*09703660SPaul Gortmaker #include <linux/export.h> 87689e82eSCornelia Huck #include <linux/kernel.h> 97689e82eSCornelia Huck 107689e82eSCornelia Huck #include <scsi/scsi.h> 117689e82eSCornelia Huck #include <scsi/scsi_cmnd.h> 127689e82eSCornelia Huck #include <scsi/scsi_device.h> 137689e82eSCornelia Huck #include <scsi/scsi_host.h> 147689e82eSCornelia Huck 157689e82eSCornelia Huck /** 167689e82eSCornelia Huck * scsi_dma_map - perform DMA mapping against command's sg lists 177689e82eSCornelia Huck * @cmd: scsi command 187689e82eSCornelia Huck * 197689e82eSCornelia Huck * Returns the number of sg lists actually used, zero if the sg lists 207689e82eSCornelia Huck * is NULL, or -ENOMEM if the mapping failed. 217689e82eSCornelia Huck */ 227689e82eSCornelia Huck int scsi_dma_map(struct scsi_cmnd *cmd) 237689e82eSCornelia Huck { 247689e82eSCornelia Huck int nseg = 0; 257689e82eSCornelia Huck 267689e82eSCornelia Huck if (scsi_sg_count(cmd)) { 27d139b9bdSJames Bottomley struct device *dev = cmd->device->host->dma_dev; 287689e82eSCornelia Huck 297689e82eSCornelia Huck nseg = dma_map_sg(dev, scsi_sglist(cmd), scsi_sg_count(cmd), 307689e82eSCornelia Huck cmd->sc_data_direction); 317689e82eSCornelia Huck if (unlikely(!nseg)) 327689e82eSCornelia Huck return -ENOMEM; 337689e82eSCornelia Huck } 347689e82eSCornelia Huck return nseg; 357689e82eSCornelia Huck } 367689e82eSCornelia Huck EXPORT_SYMBOL(scsi_dma_map); 377689e82eSCornelia Huck 387689e82eSCornelia Huck /** 397689e82eSCornelia Huck * scsi_dma_unmap - unmap command's sg lists mapped by scsi_dma_map 407689e82eSCornelia Huck * @cmd: scsi command 417689e82eSCornelia Huck */ 427689e82eSCornelia Huck void scsi_dma_unmap(struct scsi_cmnd *cmd) 437689e82eSCornelia Huck { 447689e82eSCornelia Huck if (scsi_sg_count(cmd)) { 45d139b9bdSJames Bottomley struct device *dev = cmd->device->host->dma_dev; 467689e82eSCornelia Huck 477689e82eSCornelia Huck dma_unmap_sg(dev, scsi_sglist(cmd), scsi_sg_count(cmd), 487689e82eSCornelia Huck cmd->sc_data_direction); 497689e82eSCornelia Huck } 507689e82eSCornelia Huck } 517689e82eSCornelia Huck EXPORT_SYMBOL(scsi_dma_unmap); 52