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