VSCSI(4)                  OpenBSD Programmer's Manual                 VSCSI(4)

NAME
     vscsi - virtual SCSI controller

SYNOPSIS
     vscsi0 at root
     scsibus* at vscsi?

     #include <sys/types.h>
     #include <sys/ioctl.h>
     #include <sys/scsi/scsi_all.h>
     #include <sys/dev/vscsivar.h>

DESCRIPTION
     The vscsi device takes commands from the kernel SCSI midlayer and makes
     them available to userland for handling.  Using this interface it is pos-
     sible to implement virtual SCSI devices that are usable by the kernel.

     The following ioctl(2) commands are provided to allow userland to dequeue
     SCSI commands and reply to them:

     VSCSI_I2T (struct vscsi_ioc_i2t *)
             Dequeue a SCSI command.

                   struct vscsi_ioc_i2t {
                           int                     tag;

                           u_int                   target;
                           u_int                   lun;

                           struct scsi_generic     cmd;
                           size_t                  cmdlen;

                           size_t                  datalen;
                           int                     direction;
                   #define VSCSI_DIR_NONE          0
                   #define VSCSI_DIR_READ          1
                   #define VSCSI_DIR_WRITE         2
                   };

     VSCSI_DATA_READ (struct vscsi_ioc_data *)
     VSCSI_DATA_WRITE (struct vscsi_ioc_data *)
             Read or write data in response to a SCSI command identified by
             tag.

                   struct vscsi_ioc_data {
                           int                     tag;

                           void *                  data;
                           size_t                  datalen;
                   };

     VSCSI_T2I (struct vscsi_ioc_t2i *)
             Signal completion of a SCSI command identified by tag.

                   struct vscsi_ioc_t2i {
                           int                     tag;

                           int                     status;
                   #define VSCSI_STAT_DONE         0
                   #define VSCSI_STAT_SENSE        1
                   #define VSCSI_STAT_ERR          2
                           struct scsi_sense_data  sense;
                           size_t                  senselen;
                   };

     VSCSI_REQPROBE (struct vscsi_ioc_devevent *)
     VSCSI_REQDETACH (struct vscsi_ioc_devevent *)
             Request a probe or a detach of the device at the addresses speci-
             fied by the target and lun fields.

                   struct vscsi_ioc_devevent {
                           u_int                   target;
                           u_int                   lun;
                   };

FILES
     /dev/vscsi0

SEE ALSO
     ioctl(2), intro(4), scsi(4), MAKEDEV(8)

HISTORY
     The vscsi driver first appeared in OpenBSD 4.5.

AUTHORS
     David Gwynne <dlg@openbsd.org>.

OpenBSD 4.7                     March 13, 2010                               2
