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 0 : 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 0 : return -ENOMEM; 34 : } 35 : 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);