staging: unisys: include: fix improper use of dma_data_direction
Replace use of standard Linux dma_data_direction with a Unisys- specific uis_dma_data_direction and provide a function to convert from the latter to the former. This is necessary because Unisys s-Par depends on the exact format of this field in multiple OSs and languages, and so using the standard version creates an unnecessary dependency between the kernel and s-Par. Signed-off-by: Steven Matthews <steven.matthews@unisys.com> Signed-off-by: David Kershner <david.kershner@unisys.com> Reviewed-by: Tim Sell <timothy.sell@unisys.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
12cbd49043
commit
55515a30d2
|
@ -28,7 +28,7 @@
|
|||
*/
|
||||
|
||||
#include <linux/uuid.h>
|
||||
#include <linux/dma-direction.h>
|
||||
|
||||
#include "channel.h"
|
||||
|
||||
/*
|
||||
|
@ -60,6 +60,15 @@
|
|||
|
||||
/* Size of cdb - i.e., SCSI cmnd */
|
||||
#define MAX_CMND_SIZE 16
|
||||
|
||||
/* Unisys-specific DMA direction values */
|
||||
enum uis_dma_data_direction {
|
||||
UIS_DMA_BIDIRECTIONAL = 0,
|
||||
UIS_DMA_TO_DEVICE = 1,
|
||||
UIS_DMA_FROM_DEVICE = 2,
|
||||
UIS_DMA_NONE = 3
|
||||
};
|
||||
|
||||
#define MAX_SENSE_SIZE 64
|
||||
#define MAX_PHYS_INFO 64
|
||||
|
||||
|
@ -182,7 +191,7 @@ struct vhba_config_max {
|
|||
* @bufflen: Length of data to be transferred out or in.
|
||||
* @guest_phys_entries: Number of entries in scatter-gather list.
|
||||
* @struct gpi_list: Physical address information for each fragment.
|
||||
* @enum data_dir: Direction of the data, if any.
|
||||
* @data_dir: Direction of the data, if any.
|
||||
* @struct vdest: Identifies the virtual hba, id, channel, lun to which
|
||||
* cmd was sent.
|
||||
* @linuxstat: Original Linux status used by Linux vdisk.
|
||||
|
@ -205,7 +214,7 @@ struct uiscmdrsp_scsi {
|
|||
u32 bufflen;
|
||||
u16 guest_phys_entries;
|
||||
struct guest_phys_info gpi_list[MAX_PHYS_INFO];
|
||||
enum dma_data_direction data_dir;
|
||||
u32 data_dir;
|
||||
struct uisscsi_dest vdest;
|
||||
/* Needed to queue the rsp back to cmd originator. */
|
||||
int linuxstat;
|
||||
|
|
|
@ -477,6 +477,29 @@ static const char *visorhba_get_info(struct Scsi_Host *shp)
|
|||
return "visorhba";
|
||||
}
|
||||
|
||||
/*
|
||||
* dma_data_dir_linux_to_spar - convert dma_data_direction value to
|
||||
* Unisys-specific equivalent
|
||||
* @d: dma direction value to convert
|
||||
*
|
||||
* Returns the Unisys-specific dma direction value corresponding to @d
|
||||
*/
|
||||
static u32 dma_data_dir_linux_to_spar(enum dma_data_direction d)
|
||||
{
|
||||
switch (d) {
|
||||
case DMA_BIDIRECTIONAL:
|
||||
return UIS_DMA_BIDIRECTIONAL;
|
||||
case DMA_TO_DEVICE:
|
||||
return UIS_DMA_TO_DEVICE;
|
||||
case DMA_FROM_DEVICE:
|
||||
return UIS_DMA_FROM_DEVICE;
|
||||
case DMA_NONE:
|
||||
return UIS_DMA_NONE;
|
||||
default:
|
||||
return UIS_DMA_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* visorhba_queue_command_lck - Queues command to the Service Partition
|
||||
* @scsicmd: Command to be queued
|
||||
|
@ -525,7 +548,8 @@ static int visorhba_queue_command_lck(struct scsi_cmnd *scsicmd,
|
|||
cmdrsp->scsi.vdest.id = scsidev->id;
|
||||
cmdrsp->scsi.vdest.lun = scsidev->lun;
|
||||
/* save datadir */
|
||||
cmdrsp->scsi.data_dir = scsicmd->sc_data_direction;
|
||||
cmdrsp->scsi.data_dir =
|
||||
dma_data_dir_linux_to_spar(scsicmd->sc_data_direction);
|
||||
memcpy(cmdrsp->scsi.cmnd, cdb, MAX_CMND_SIZE);
|
||||
cmdrsp->scsi.bufflen = scsi_bufflen(scsicmd);
|
||||
|
||||
|
|
Loading…
Reference in New Issue