cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

scsi_lib_dma.c (1187B)


      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 */
     23int scsi_dma_map(struct scsi_cmnd *cmd)
     24{
     25	int nseg = 0;
     26
     27	if (scsi_sg_count(cmd)) {
     28		struct device *dev = cmd->device->host->dma_dev;
     29
     30		nseg = dma_map_sg(dev, scsi_sglist(cmd), scsi_sg_count(cmd),
     31				  cmd->sc_data_direction);
     32		if (unlikely(!nseg))
     33			return -ENOMEM;
     34	}
     35	return nseg;
     36}
     37EXPORT_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 */
     43void scsi_dma_unmap(struct scsi_cmnd *cmd)
     44{
     45	if (scsi_sg_count(cmd)) {
     46		struct device *dev = cmd->device->host->dma_dev;
     47
     48		dma_unmap_sg(dev, scsi_sglist(cmd), scsi_sg_count(cmd),
     49			     cmd->sc_data_direction);
     50	}
     51}
     52EXPORT_SYMBOL(scsi_dma_unmap);