brintos

brintos / linux-shallow public Read only

0
0
Text · 1.2 KiB · 5723915 Raw
53 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * SCSI library functions depending on DMA4 */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 lists18 * @cmd:	scsi command19 *20 * Returns the number of sg lists actually used, zero if the sg lists21 * 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_map41 * @cmd:	scsi command42 */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);53