tran_start(9e) 맨 페이지 - 윈디하나의 솔라나라

개요

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

tran_start(9e)

tran_start(9E)                Driver Entry Points               tran_start(9E)



NAME
       tran_start - request to transport a SCSI command

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

       int prefixtran_start(struct scsi_address *ap,
            struct scsi_pkt *pkt);

INTERFACE LEVEL
       Solaris architecture specific (Solaris DDI).

PARAMETERS
       pkt    Pointer to the scsi_pkt(9S) structure that is about to be trans‐
              ferred.


       ap     Pointer to a scsi_address(9S) structure.


DESCRIPTION
       The tran_start() vector in the scsi_hba_tran(9S) structure must be ini‐
       tialized  during  the  HBA driver's attach(9E) to point to an HBA entry
       point to be called when a target driver calls scsi_transport(9F).


       tran_start() must perform the necessary operations on the HBA  hardware
       to  transport the SCSI command in the pkt structure to the target/logi‐
       cal unit device specified in the ap structure.


       If the flag FLAG_NOINTR is set in pkt_flags in pkt, tran_start() should
       not return until the command has been completed. The command completion
       callback  pkt_comp  in  pkt  must  not  be  called  for  commands  with
       FLAG_NOINTR  set,  since  the  return  is made directly to the function
       invoking scsi_transport(9F).


       When the flag FLAG_NOINTR is not set, tran_start() must queue the  com‐
       mand  for  execution on the hardware and return immediately. The member
       pkt_comp in pkt indicates a callback routine to be called upon  command
       completion.


       Refer  to  scsi_pkt(9S)  for  other bits in pkt_flags for which the HBA
       driver may need to adjust how the command is managed.


       If the auto_rqsense capability has been  set,  and  the  status  length
       allocated   in   tran_init_pkt(9E)   is   greater   than  or  equal  to
       sizeof(struct scsi_arq_status), automatic request sense is enabled  for
       this  pkt.  If  the  command terminates with a Check Condition, the HBA
       driver must arrange for a Request Sense command to  be  transported  to
       that target/logical unit, and the members of the scsi_arq_status struc‐
       ture pointed to by pkt_scbp updated with the results  of  this  Request
       Sense  command  before  the HBA driver completes the command pointed by
       pkt.


       The member pkt_time in pkt is the maximum number of  seconds  in  which
       the  command should complete. Timeout starts when the command is trans‐
       mitted on the SCSI bus. A pkt_time of 0 means no timeout should be per‐
       formed.


       For  a  command  which  has timed out, the HBA driver must perform some
       recovery operation to clear the command in  the  target,  typically  an
       Abort  message,  or a Device or Bus Reset. The pkt_reason member of the
       timed out pkt should be set to CMD_TIMEOUT, and  pkt_statistics   OR'ed
       with  STAT_TIMEOUT. If the HBA driver can successfully recover from the
       timeout, pkt_statistics must also be OR'ed with  one  of  STAT_ABORTED,
       STAT_BUS_RESET,  or  STAT_DEV_RESET,  as  appropriate. This informs the
       target driver that  timeout  recovery  has  already  been  successfully
       accomplished  for  the timed out command. The pkt_comp completion call‐
       back, if not NULL, must also be called at the conclusion of the timeout
       recovery.


       If  the  timeout  recovery  was accomplished with an Abort Tag message,
       only the timed out packet is affected, and the packet must be  returned
       with pkt_statistics  OR'ed with STAT_ABORTED and STAT_TIMEOUT.


       If  the  timeout  recovery  was accomplished with an Abort message, all
       commands active in that target are affected. All corresponding  packets
       must  be  returned  with  pkt_reason,  CMD_TIMEOUT,  and pkt_statistics
       OR'ed with STAT_TIMEOUT and STAT_ABORTED.


       If the timeout recovery was accomplished with a Device Reset, all pack‐
       ets  corresponding to commands active in the target must be returned in
       the transport layer for this target. Packets corresponding to  commands
       active  in  the target must be returned returned with pkt_reason set to
       CMD_TIMEOUT,  and  pkt_statistics   OR'ed   with   STAT_DEV_RESET   and
       STAT_TIMEOUT.  Currently  inactive packets queued for the device should
       be returned with pkt_reason set to CMD_RESET and pkt_statistics   OR'ed
       with STAT_ABORTED.


       If  the timeout recovery was accomplished with a Bus Reset, all packets
       corresponding to commands active in the target must be returned in  the
       transport layer. Packets corresponding to commands active in the target
       must be returned with pkt_reason set to CMD_TIMEOUT and  pkt_statistics
       OR'ed  with  STAT_TIMEOUT  and  STAT_BUS_RESET.  All queued packets for
       other targets on this bus must  be  returned  with  pkt_reason  set  to
       CMD_RESET and pkt_statistics  OR'ed with STAT_ABORTED.


       Note  that  after  either a Device Reset or a Bus Reset, the HBA driver
       must enforce a reset delay  time  of  'scsi-reset-delay'  milliseconds,
       during  which  time  no  commands should be sent to that device, or any
       device on the bus, respectively.


       tran_start() should initialize the following members in pkt to 0.  Upon
       command  completion,  the  HBA  driver should ensure that the values in
       these members are updated to  accurately  reflect  the  states  through
       which the command transitioned while in the transport layer.

       pkt_resid         For  commands with data transfer, this member must be
                         updated to indicate the residual of the  data  trans‐
                         ferred.


       pkt_reason        The  reason  for  the  command completion. This field
                         should be  set  to  CMD_CMPLT  at  the  beginning  of
                         tran_start(),  then updated if the command ever tran‐
                         sitions to an abnormal termination  state.  To  avoid
                         losing  information,  do  not  set  pkt_reason to any
                         other error state unless it still  has  its  original
                         CMD_CMPLT value.


       pkt_statistics    Bit field of transport-related statistics.


       pkt_state         Bit  field with the major states through which a SCSI
                         command can  transition.  Note:  The  members  listed
                         above,  and  pkt_hba_private  member,  are  the  only
                         fields in the scsi_pkt(9S)  structure  which  may  be
                         modified by the transport layer.


RETURN VALUES
       tran_start() must return:

       TRAN_ACCEPT         The packet was accepted by the transport layer.


       TRAN_BUSY           The  packet could not be accepted because there was
                           already a packet in progress for this  target/logi‐
                           cal  unit,  the  HBA  queue was full, or the target
                           device queue was full.


       TRAN_BADPKT         The DMA  count  in  the  packet  exceeded  the  DMA
                           engine's  maximum DMA size, or the packet could not
                           be accepted for other reasons.


       TRAN_FATAL_ERROR    A fatal error has occurred in the HBA.


CONTEXT
       The tran_start() function can be called from user or interrupt context.
       This requirement comes from scsi_transport().

SEE ALSO
       attach(9E), tran_init_pkt(9E), scsi_hba_attach(9F), scsi_transport(9F),
       scsi_address(9S), scsi_arq_status(9S), scsi_hba_tran(9S), scsi_pkt(9S)


       Writing Device Drivers in Oracle Solaris 11.4



Oracle Solaris 11.4               17 Aug 2005                   tran_start(9E)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3