usb_bulk_request(9s) 맨 페이지 - 윈디하나의 솔라나라

개요

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

usb_bulk_request(9s)

Kernel & Driver Data Structures                           usb_bulk_request(9S)



NAME
       usb_bulk_request - USB bulk request structure

SYNOPSIS
       #include  <sys/usb/usba.h>

INTERFACE LEVEL
       Solaris DDI specific (Solaris DDI)

DESCRIPTION
       A bulk request (that is, a request sent through a bulk pipe) is used to
       transfer large amounts of data in reliable but non-time-critical  fash‐
       ion. Please refer to Section 5.8 and Section 4.4.6 of the USB 3.0 spec‐
       ification for information on bulk transfers.  Both  specifications  are
       available at https://www.usb.org/ .


       The  fields  in  the  usb_bulk_req_t are used to format a bulk request.
       Please see below for acceptable combinations of flags and attributes.


       The usb_bulk_req_t fields are:



         uint_t          bulk_len;       /* number of bytes to xfer      */
                                         /* Please see */
                                         /* usb_pipe_get_max_bulk_xfer_size(9F) */
                                         /* for maximum size */
         mblk_t          *bulk_data;     /* the data for the data phase  */
                                         /* IN or OUT: allocated by client */
         uint_t          bulk_timeout;   /* xfer timeout value in secs   */
                                         /* If set to zero, defaults to 5 sec */
         usb_opaque_t    bulk_client_private; /* Client specific information */
         usb_req_attrs_t bulk_attributes; /* xfer-attributes     */

         /* Normal callback function, called upon completion. */
         void            (*bulk_cb)(
                             usb_pipe_handle_t ph, struct usb_bulk_req *req);

         /* Exception callback function, for error handling. */
         void            (*bulk_exc_cb)(
                             usb_pipe_handle_t ph, struct usb_bulk_req *req);

         /* set by USBA/HCD framework on completion */
         usb_cr_t        bulk_completion_reason; /* overall success status */
                                            /* See usb_completion_reason(9S) */
         usb_cb_flags_t  bulk_cb_flags; /* recovery done by callback hndlr */
                                            /* See usb_callback_flags(9S) */
         /* for streams only. */
         uint16_t        bulk_strm_id;      /* stream id */



       Request attributes define special handling for transfers. The following
       attributes are valid for bulk requests:

       USB_ATTRS_SHORT_XFER_OK    USB  framework  accepts transfers where less
                                  data is received than expected.


       USB_ATTRS_AUTOCLEARING     USB framework resets pipe and  clears  func‐
                                  tional stalls automatically on exception.


       USB_ATTRS_PIPE_RESET       USB  framework  resets pipe automatically on
                                  exception.


       USB_ATTRS_BULK_STREAM      USB framework uses streams to  transfer  the
                                  request.



       For more information, see usb_request_attributes(9S) man page.


       Bulk  transfers/requests  are  subject to the following constraints and
       caveats:


       1) The following table indicates combinations  of  usb_pipe_bulk_xfer()
       flags  argument  and fields of the usb_bulk_req_t request argument (X =
       don't care).




         Flags     Type  Attributes       Data   Timeout Semantics
         ---------------------------------------------------------------
          X         X     X                ==NULL X      illegal

          X         X     ONE_XFER         X      X      illegal

          no sleep  IN    !SHORT_XFER_OK   !=NULL 0      See  note (A)

          no sleep  IN    !SHORT_XFER_OK   !=NULL > 0    See  note (B)

          sleep     IN    !SHORT_XFER_OK   !=NULL 0      See  note (C)

          sleep     IN    !SHORT_XFER_OK   !=NULL > 0    See  note (D)

          no sleep  IN    SHORT_XFER_OK    !=NULL 0      See  note (E)

          no sleep  IN    SHORT_XFER_OK    !=NULL > 0    See  note (F)

          sleep     IN    SHORT_XFER_OK    !=NULL 0      See  note (G)

          sleep     IN    SHORT_XFER_OK    !=NULL > 0    See  note (H)

          X         OUT   SHORT_XFER_OK   X       X      illegal

          no sleep  OUT   X               !=NULL  0      See  note (I)

          no sleep  OUT   X               !=NULL  > 0    See  note (J)

          sleep     OUT   X               !=NULL  0      See  note (K)

          sleep     OUT   X               !=NULL  > 0    See  note (L)



       Table notes:
         A). Fill buffer, no timeout, callback when bulk_len is transferred.
         B). Fill buffer, with timeout; callback when bulk_len is transferred.
         C). Fill buffer, no timeout, unblock when bulk_len is transferred; no
         callback.
         D).  Fill  buffer, with timeout; unblock when bulk_len is transferred
         or a timeout occurs; no callback.
         E) Fill buffer, no timeout, callback when bulk_len is transferred  or
         first short packet is received.
         F).  Fill buffer, with timeout; callback when bulk_len is transferred
         or first short packet is received.
         G). Fill buffer, no timeout, unblock when bulk_len is transferred  or
         first short packet is received; no callback.
         H).  Fill buffer, with timeout; unblock when bulk_len is transferred,
         first short packet is received, or a timeout occurs; no callback.
         I). Empty buffer, no timeout; callback when bulk_len is transferred.
         J) Empty buffer, with timeout; callback when bulk_len is  transferred
         or a timeout occurs.
         K).  Empty  buffer, no timeout; unblock when bulk_len is transferred;
         no callback.
         L). Empty buffer, with timeout; unblock when bulk_len is  transferred
         or a timeout occurs; no callback.


       2) bulk_len must be > 0. bulk_data must not be NULL.


       3)  Bulk_residue  is set for both READ and WRITE. If it is set to 0, it
       means that all of the data was transferred  successfully.  In  case  of
       WRITE  it contains data not written and in case of READ it contains the
       data NOT read so far. A residue can only occur because  of  timeout  or
       bus/device  error.  (Note that a short transfer for a request where the
       USB_ATTRS_SHORT_XFER_OK attribute is not set  is  considered  a  device
       error.)  An  exception  callback  is made and completion_reason will be
       non-zero.


       4) Splitting large Bulk xfers: Due to internal  constraints,  the  USBA
       framework  can  only  do  a  limited size bulk data xfer per request. A
       client driver may first determine this limitation by calling  the  USBA
       interface   (usb_pipe_get_max_bulk_xfer_size(9F))   and  then  restrict
       itself to doing transfers in multiples of this fixed size. This  forces
       a  client driver to do data xfers in a loop for a large request, split‐
       ting it into multiple chunks of fixed size.


       The bulk_completion_reason indicates the status of  the  transfer.  See
       usb_completion_reason(9S) for usb_cr_t definitions.


       The  bulk_cb_flags are set prior to calling the exception callback han‐
       dler to summarize recovery actions taken and errors encountered  during
       recovery. See usb_callback_flags(9S) for usb_cb_flags_t definitions.


       The  bulk_strm_id  is set to identify which stream this request will be
       sent to. If the bulk pipe is not a streams pipe, the bulk_strm_id  will
       be ignored.


       --- Callback handling ---


       All  usb  request types share the same callback handling. See usb_call‐
       back_flags(9S) for details.

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  _  ArchitecturePCI-based systems _ Interface Stability‐
       Committed _ Availabilitysystem/io/usb


SEE ALSO
       usb_alloc_request(9F), usb_pipe_bulk_xfer(9F),  usb_pipe_ctrl_xfer(9F),
       usb_pipe_get_max_bulk_transfer_size(9F),        usb_pipe_intr_xfer(9F),
       usb_pipe_isoc_xfer(9F),   usb_callback_flags(9S),   usb_completion_rea‐
       son(9S),           usb_ctrl_request(9S),          usb_intr_request(9S),
       usb_isoc_request(9S), usb_request_attributes(9S)



Oracle Solaris 11.4               5 Jan 2004              usb_bulk_request(9S)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3