Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
scsi_lib_dma.c
Go to the documentation of this file.
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 
23 {
24  int nseg = 0;
25 
26  if (scsi_sg_count(cmd)) {
27  struct device *dev = cmd->device->host->dma_dev;
28 
29  nseg = dma_map_sg(dev, scsi_sglist(cmd), scsi_sg_count(cmd),
30  cmd->sc_data_direction);
31  if (unlikely(!nseg))
32  return -ENOMEM;
33  }
34  return nseg;
35 }
37 
43 {
44  if (scsi_sg_count(cmd)) {
45  struct device *dev = cmd->device->host->dma_dev;
46 
47  dma_unmap_sg(dev, scsi_sglist(cmd), scsi_sg_count(cmd),
48  cmd->sc_data_direction);
49  }
50 }