diff options
author | Marc-André Lureau <marcandre.lureau@redhat.com> | 2017-08-17 19:09:10 +0200 |
---|---|---|
committer | Marc-André Lureau <marcandre.lureau@redhat.com> | 2017-10-10 23:31:09 +0200 |
commit | 49a48824384cca914e20b30de3d2a99916d8cf02 (patch) | |
tree | 867d25adaf4010788e88a4e390026781a0bf872b /contrib | |
parent | ca853813f7b5180a2037ce10b781e189adaa7b4c (diff) |
vhost-user-scsi: don't copy iscsi/scsi-lowlevel.h
There is no need to include hw/virtio/virtio-scsi.h, then the conflict
with SCSI_XFER enum goes away.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/vhost-user-scsi/vhost-user-scsi.c | 96 |
1 files changed, 9 insertions, 87 deletions
diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c index c7f9d82142..cfac1ce1fe 100644 --- a/contrib/vhost-user-scsi/vhost-user-scsi.c +++ b/contrib/vhost-user-scsi/vhost-user-scsi.c @@ -12,8 +12,9 @@ #include "qemu/osdep.h" #include "contrib/libvhost-user/libvhost-user.h" -#include "hw/virtio/virtio-scsi.h" +#include "standard-headers/linux/virtio_scsi.h" #include "iscsi/iscsi.h" +#include "iscsi/scsi-lowlevel.h" #include <glib.h> @@ -163,90 +164,11 @@ static void vus_gsrc_new(VusDev *vdev_scsi, int fd, GIOCondition cond, (gpointer)(uintptr_t)id); } -/* from libiscsi's scsi-lowlevel.h ** - * - * nb. We can't directly include scsi-lowlevel.h due to a namespace conflict: - * QEMU's scsi.h also defines "SCSI_XFER_NONE". - */ - -#define SCSI_CDB_MAX_SIZE 16 - -struct scsi_iovector { - struct scsi_iovec *iov; - int niov; - int nalloc; - size_t offset; - int consumed; -}; - -struct scsi_allocated_memory { - struct scsi_allocated_memory *next; - char buf[0]; -}; - -struct scsi_data { - int size; - unsigned char *data; -}; - -enum scsi_sense_key { - SCSI_SENSE_NO_SENSE = 0x00, - SCSI_SENSE_RECOVERED_ERROR = 0x01, - SCSI_SENSE_NOT_READY = 0x02, - SCSI_SENSE_MEDIUM_ERROR = 0x03, - SCSI_SENSE_HARDWARE_ERROR = 0x04, - SCSI_SENSE_ILLEGAL_REQUEST = 0x05, - SCSI_SENSE_UNIT_ATTENTION = 0x06, - SCSI_SENSE_DATA_PROTECTION = 0x07, - SCSI_SENSE_BLANK_CHECK = 0x08, - SCSI_SENSE_VENDOR_SPECIFIC = 0x09, - SCSI_SENSE_COPY_ABORTED = 0x0a, - SCSI_SENSE_COMMAND_ABORTED = 0x0b, - SCSI_SENSE_OBSOLETE_ERROR_CODE = 0x0c, - SCSI_SENSE_OVERFLOW_COMMAND = 0x0d, - SCSI_SENSE_MISCOMPARE = 0x0e -}; - -struct scsi_sense { - unsigned char error_type; - enum scsi_sense_key key; - int ascq; - unsigned sense_specific:1; - unsigned ill_param_in_cdb:1; - unsigned bit_pointer_valid:1; - unsigned char bit_pointer; - uint16_t field_pointer; -}; - -enum scsi_residual { - SCSI_RESIDUAL_NO_RESIDUAL = 0, - SCSI_RESIDUAL_UNDERFLOW, - SCSI_RESIDUAL_OVERFLOW -}; - -struct scsi_task { - int status; - int cdb_size; - int xfer_dir; - int expxferlen; - unsigned char cdb[SCSI_CDB_MAX_SIZE]; - enum scsi_residual residual_status; - size_t residual; - struct scsi_sense sense; - struct scsi_data datain; - struct scsi_allocated_memory *mem; - void *ptr; - - uint32_t itt; - uint32_t cmdsn; - uint32_t lun; - - struct scsi_iovector iovector_in; - struct scsi_iovector iovector_out; -}; - /** libiscsi integration **/ +typedef struct virtio_scsi_cmd_req VirtIOSCSICmdReq; +typedef struct virtio_scsi_cmd_resp VirtIOSCSICmdResp; + static int vus_iscsi_add_lun(VusIscsiLun *lun, char *iscsi_uri) { struct iscsi_url *iscsi_url; @@ -365,12 +287,12 @@ static int handle_cmd_sync(struct iscsi_context *ctx, if (!out_len && !in_len) { dir = SCSI_XFER_NONE; } else if (out_len) { - dir = SCSI_XFER_TO_DEV; + dir = SCSI_XFER_WRITE; for (i = 0; i < out_len; i++) { len += out[i].iov_len; } } else { - dir = SCSI_XFER_FROM_DEV; + dir = SCSI_XFER_READ; for (i = 0; i < in_len; i++) { len += in[i].iov_len; } @@ -378,10 +300,10 @@ static int handle_cmd_sync(struct iscsi_context *ctx, task = scsi_task_new(cdb_len, req->cdb, dir, len); - if (dir == SCSI_XFER_TO_DEV) { + if (dir == SCSI_XFER_WRITE) { task->iovector_out.iov = (struct scsi_iovec *)out; task->iovector_out.niov = out_len; - } else if (dir == SCSI_XFER_FROM_DEV) { + } else if (dir == SCSI_XFER_READ) { task->iovector_in.iov = (struct scsi_iovec *)in; task->iovector_in.niov = in_len; } |