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