Branch data Line data Source code
1 : : // SPDX-License-Identifier: GPL-2.0 2 : : /* 3 : : * SCSI library functions depending on DMA 4 : : */ 5 : : 6 : : #include <linux/blkdev.h> 7 : : #include <linux/device.h> 8 : : #include <linux/export.h> 9 : : #include <linux/kernel.h> 10 : : 11 : : #include <scsi/scsi.h> 12 : : #include <scsi/scsi_cmnd.h> 13 : : #include <scsi/scsi_device.h> 14 : : #include <scsi/scsi_host.h> 15 : : 16 : : /** 17 : : * scsi_dma_map - perform DMA mapping against command's sg lists 18 : : * @cmd: scsi command 19 : : * 20 : : * Returns the number of sg lists actually used, zero if the sg lists 21 : : * is NULL, or -ENOMEM if the mapping failed. 22 : : */ 23 : 0 : int scsi_dma_map(struct scsi_cmnd *cmd) 24 : : { 25 : : int nseg = 0; 26 : : 27 : 0 : if (scsi_sg_count(cmd)) { 28 : 0 : struct device *dev = cmd->device->host->dma_dev; 29 : : 30 : 0 : nseg = dma_map_sg(dev, scsi_sglist(cmd), scsi_sg_count(cmd), 31 : : cmd->sc_data_direction); 32 : 0 : if (unlikely(!nseg)) 33 : : return -ENOMEM; 34 : : } 35 : 0 : return nseg; 36 : : } 37 : : EXPORT_SYMBOL(scsi_dma_map); 38 : : 39 : : /** 40 : : * scsi_dma_unmap - unmap command's sg lists mapped by scsi_dma_map 41 : : * @cmd: scsi command 42 : : */ 43 : 0 : void scsi_dma_unmap(struct scsi_cmnd *cmd) 44 : : { 45 : 0 : if (scsi_sg_count(cmd)) { 46 : 0 : struct device *dev = cmd->device->host->dma_dev; 47 : : 48 : 0 : dma_unmap_sg(dev, scsi_sglist(cmd), scsi_sg_count(cmd), 49 : : cmd->sc_data_direction); 50 : : } 51 : 0 : } 52 : : EXPORT_SYMBOL(scsi_dma_unmap);