uscsi(4i) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

uscsi(4i)

uscsi(4I)         Ioctls for a class of drivers or subsystems        uscsi(4I)

NAME
       uscsi - user SCSI command interface

SYNOPSIS
       #include <sys/scsi/impl/uscsi.h>

       ioctl(int fildes, int request, struct uscsi_cmd *cmd);

DESCRIPTION
       The uscsi command is very powerful and somewhat dangerous; therefore it
       has some permission restrictions. See WARNINGS for more details.


       Drivers  supporting  this ioctl(2) provide a general interface allowing
       user-level applications to cause individual SCSI  commands  to  be  di‐
       rected  to a particular SCSI or ATAPI device under control of that dri‐
       ver. The uscsi command is supported by the sd driver for SCSI disks and
       ATAPI CD-ROM drives, and by the st driver for SCSI tape  drives.  uscsi
       may  also be supported by other device drivers; see the specific device
       driver manual page for complete information.


       Applications must not assume that all Solaris disk device drivers  sup‐
       port  the  uscsi  ioctl  command.  The  SCSI command may include a data
       transfer to or from that device, if appropriate for that command.  Upon
       completion  of the command, the user application can determine how many
       bytes were transferred and the status returned by the device. Also, op‐
       tionally, if the command returns a Check Condition status,  the  driver
       will  automatically  issue a Request Sense command and return the sense
       data along with the original status. See the USCSI_RQENABLE flag  below
       for  this  Request Sense processing. The uscsi_cmd structure is defined
       in <sys/scsi/impl/uscsi.h> and includes the following members:

         int uscsi_flags;               /* read, write, etc. see below */
         short uscsi_status;           /* resulting status */
         short uscsi_timeout;          /* Command Timeout */
         caddr_t uscsi_cdb             /* CDB to send to target */
         caddr_t uscsi_bufaddr;        /* I/O source/destination */
         size_t uscsi_buflen;          /* size of I/O to take place */
         size_t uscsi_resid;           /* resid from I/O operation */
         uchar_t uscsi_cdblen;         /* # of valid CDB bytes */
         uchar_t uscsi_rqlen;          /* size of uscsi_rqbuf */
         uchar_t uscsi_rqstatus;       /* status of request sense cmd */
         uchar_t uscsi_rqresid;        /* resid of request sense cmd */
         caddr_t uscsi_rqbuf;          /* request sense buffer */
         void *uscsi_reserved_5;       /* Reserved for future use */



       The fields of the uscsi_cmd structure have the following meanings:

       uscsi_flags         The I/O direction and other details of how to carry
                           out the SCSI command. Possible values are described
                           below.


       uscsi_status        The SCSI status byte returned by the device is  re‐
                           turned in this field.


       uscsi_timeout       Time in seconds to allow for completion of the com‐
                           mand.


       uscsi_cdb           A  pointer  to  the  SCSI  CDB  (command descriptor
                           block) to be transferred to the device  in  command
                           phase.


       uscsi_bufaddr       The user buffer containing the data to be read from
                           or written to the device.


       uscsi_buflen        The length of uscsi_bufaddr.


       uscsi_resid         If  a data transfer terminates without transferring
                           the entire  requested  amount,  the  remainder,  or
                           residue, is returned in this field.


       uscsi_cdblen        The length of the SCSI CDB to be transferred to the
                           device in command phase.


       uscsi_rqlen         The  length  of  uscsi_rqbuf, the application's Re‐
                           quest Sense buffer.


       uscsi_rqstatus      The SCSI status byte returned for the Request Sense
                           command executed automatically by the driver in re‐
                           sponse to a Check Condition status return.


       uscsi_rqresid       The residue, or untransferred data length,  of  the
                           Request  Sense  data transfer (the number of bytes,
                           less than or equal to uscsi_rqlen, which  were  not
                           filled with sense data).


       uscsi_rqbuf         Points  to a buffer in application address space to
                           which the results of  an  automatic  Request  Sense
                           command are written.


       uscsi_reserved_5    Reserved for future use.



       The uscsi_flags field defines the following:

         USCSI_WRITE                   /* send data to device */
         USCSI_SILENT                  /* no error messages */
         USCSI_DIAGNOSE                /* fail if any error occurs */
         USCSI_ISOLATE                 /* isolate from normal commands */
         USCSI_READ                    /* get data from device */
         USCSI_ASYNC                   /* set bus to asynchronous mode */
         USCSI_SYNC                    /* return bus to sync mode if possible */
         USCSI_RESET                   /* reset target */
         USCSI_RESET_TARGET            /* reset target */
         USCSI_RESET_LUN               /* reset logical unit */
         USCSI_RESET_ALL               /* reset all targets */
         USCSI_RQENABLE                /* enable request sense extensions */
         USCSI_RENEGOT                 /* renegotiate wide/sync on next I/O */



       The uscsi_flags bits have the following interpretation:

       USCSI_WRITE           Data  will  be  written from the initiator to the
                             target.


       USCSI_SILENT          The driver should not  print  any  console  error
                             messages  or  warnings regarding failures associ‐
                             ated with this SCSI command.


       USCSI_DIAGNOSE        The driver should  not  attempt  any  retries  or
                             other  recovery  mechanisms  if this SCSI command
                             terminates abnormally in any way.


       USCSI_ISOLATE         This SCSI command should  not  be  executed  with
                             other commands.


       USCSI_READ            Data  will be read from the target to the initia‐
                             tor.


       USCSI_ASYNC           Set the SCSI bus to asynchronous mode before run‐
                             ning this command.


       USCSI_SYNC            Set the SCSI bus to synchronous mode before  run‐
                             ning this command.


       USCSI_RESET           Send a SCSI bus device reset message to this tar‐
                             get.


       USCSI_RESET_TARGET    Same  as  USCSI_RESET.  Use  this flag to request
                             TARGET RESET. (USCSI_RESET is maintained only for
                             compatibility with old applications).


       USCSI_RESET_LUN       Send a SCSI logical unit reset  message  to  this
                             target.


       USCSI_RESET_ALL       USCSI_RESET_ALL,  USCSI_RESET/USCSI_RESET_TARGET,
                             and USCSI_RESET_LUN are  mutually  exclusive  op‐
                             tions and issuing them in any simultaneous combi‐
                             nation  will  result  in implementation-dependent
                             behavior.

                             When a USCSI reset request is combined with other
                             SCSI commands, the following semantics  take  ef‐
                             fect:

                             If  the  USCSI RESET flag is specified, the other
                             fields (other than uscsi_flags) in the  uscsi_cmd
                             are  ignored.  The  uscsi_cdblen   must be set to
                             zero.


       USCSI_RQENABLE        Enable Request Sense extensions. If the user  ap‐
                             plication is prepared to receive sense data, this
                             bit  must  be  set,  the  fields  uscsi_rqbuf and
                             uscsi_rqbuflen  must   be   non-zero,   and   the
                             uscsi_rqbuf  must point to memory writable by the
                             application.


       USCSI_RENEGOT         Tells USCSI to renegotiate wide mode and synchro‐
                             nous transfer speed before the  transmitted  SCSI
                             command  is  executed. This flag tells the target
                             driver  to  pass  the  FLAG_RENEGOTIATE_WIDE_SYNC
                             flag  in  the SCSI packet before passing the com‐
                             mand to an adapter driver for transport.

                             See   the   scsi_pkt(9S)   flag    FLAG_RENEGOTI‐
                             ATE_WIDE_SYNC for more information.


IOCTLS
       The ioctl supported by drivers providing the uscsi interface is:

       USCSICMD    The  argument  is  a  pointer to a uscsi_cmd structure. The
                   SCSI device addressed by that driver is selected, and given
                   the SCSI command addressed by uscsi_cdb.  If  this  command
                   requires  a  data phase, the uscsi_buflen and uscsi_bufaddr
                   fields must be set appropriately; if data phase occurs, the
                   uscsi_resid is returned as the number of bytes  not  trans‐
                   ferred.  The  status of the command, as returned by the de‐
                   vice, is returned in the uscsi_status field. If the command
                   terminates with Check Condition status, and  Request  Sense
                   is   enabled,   the   sense  data  itself  is  returned  in
                   uscsi_rqbuf. The uscsi_rqresid provides the residue of  the
                   Request Sense data transfer.


ERRORS
       EINVAL    A parameter has an incorrect, or unsupported, value.


       EIO       An error occurred during the execution of the command.


       EPERM     A  process without sufficient privileges tried to execute the
                 USCSICMD ioctl.


       EFAULT    The uscsi_cmd itself, the uscsi_cdb, the  uscsi_buf,  or  the
                 uscsi_rqbuf point to an invalid address.


ATTRIBUTES
       See attributes(7) for descriptions of the following attributes:

       tab()  box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) ATTRIBUTE TYPEAT‐
       TRIBUTE VALUE _ Availabilitysystem/header _ Interface Stability Commit‐
       ted


SEE ALSO
       ioctl(2), sd(4D), st(4D), attributes(7), privileges(7)


       ANSI Small Computer System Interface-2 (SCSI-2)

WARNINGS
       The uscsi command is very powerful, but somewhat dangerous, and so  its
       use  is  restricted  to  processes  running with the {PRIV_SYS_DEVICES}
       privilege, regardless of the file permissions on the device  node.  The
       device  driver code expects to own the device state, and uscsi commands
       can change the state of the device and confuse the device driver. It is
       best to use uscsi commands only with no side effects,  and  avoid  com‐
       mands  such  as Mode Select, as they may cause damage to data stored on
       the drive or system panics. Also, as the commands are  not  checked  in
       any  way  by  the  device driver, any block may be overwritten, and the
       block numbers are absolute block numbers on  the  drive  regardless  of
       which slice number is used to send the command.


       The  uscsi  interface  is not recommended for very large data transfers
       (typically more than 16MB). If the requested transfer size exceeds  the
       maximum  transfer size of the DMA engine, it will not be broken up into
       multiple transfers and DMA errors may result.


       The USCSICMD ioctl associates a struct uscsi_cmd with a device by using
       an open file descriptor to the device. Other  APIs  might  provide  the
       same struct uscsi_cmd programming interface, but perform device associ‐
       ation in some other manner.

Oracle Solaris 11.4               14 Jun 2024                        uscsi(4I)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3