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

개요

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

usb_request_attributes(9s)

usb_requ...tributes(9S) Kernel & Driver Data Structuresusb_requ...tributes(9S)

NAME
       usb_request_attributes - Definition of USB request attributes

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

INTERFACE LEVEL
       Solaris DDI specific (Solaris DDI)

DESCRIPTION
       Request  attributes specify how the USBA framework handles request exe‐
       cution. Request attributes are specified in the request's  *_attributes
       field and belong to the enumerated type usb_req_attrs_t.


       Supported request attributes are:

       USB_ATTRS_SHORT_XFER_OK       Use   this  attribute  when  the  maximum
                                     transfer size is known, but it is  possi‐
                                     ble  for the request to receive a smaller
                                     amount of data. This attribute tells  the
                                     USBA  framework  to  accept without error
                                     transfers  which  are  shorter  than  ex‐
                                     pected.


       USB_ATTRS_PIPE_RESET          Have the USB framework reset the pipe au‐
                                     tomatically if an error occurs during the
                                     transfer.  Do  not  attempt  to clear any
                                     stall.  The  USB_CB_RESET_PIPE   callback
                                     flag is passed to the client driver's ex‐
                                     ception handler to show the pipe has been
                                     reset.  Pending  requests  on pipes which
                                     are reset are flushed unless the pipe  is
                                     the default pipe.


       USB_ATTRS_AUTOCLEARING        Have the USB framework reset the pipe and
                                     clear  functional stalls automatically if
                                     an error occurs during the transfer.  The
                                     callback  flags passed to the client dri‐
                                     ver's exception handler show  the  status
                                     after the attempt to clear the stall.

                                     USB_CB_FUNCTIONAL_STALL  is  set  in  the
                                     callback flags to indicate that  a  func‐
                                     tional           stall          occurred.
                                     USB_CB_STALL_CLEARED is also set  if  the
                                     stall  is cleared. The default pipe never
                                     shows a functional stall if  the  USB_AT‐
                                     TRS_AUTOCLEARING  attribute  is  set.  If
                                     USB_CB_FUNCTIONAL_STALL is seen when  au‐
                                     toclearing  is  enabled, the device has a
                                     fatal error.

                                     USB_CB_PROTOCOL_STALL  is   set   without
                                     USB_CB_STALL_CLEARED   in   the  callback
                                     flags to indicate that a  protocol  stall
                                     was  seen but was not explicitly cleared.
                                     Protocol stalls are cleared automatically
                                     when a subsequent command is issued.

                                     Autoclearing a stalled  default  pipe  is
                                     not  allowed.  The  USB_CB_PROTOCOL_STALL
                                     callback flag  is  set  in  the  callback
                                     flags  to  indicate  the  default pipe is
                                     stalled.

                                     Autoclearing is not allowed when the  re‐
                                     quest  is  USB_REQ_GET_STATUS  on the de‐
                                     fault pipe.


       USB_ATTRS_ONE_XFER            Applies only  to  interrupt-IN  requests.
                                     Without  this flag, interrupt-IN requests
                                     start periodic polling of  the  interrupt
                                     pipe. This flag specifies to perform only
                                     a  single transfer. Do not start periodic
                                     transfers with this request.


       USB_ATTRS_ISOC_START_FRAME    Applies only to isochronous requests  and
                                     specifies  that a request be started at a
                                     given frame number.  The  starting  frame
                                     number  is  provided in the isoc_frame_no
                                     field of the usb_isoc_req_t.  Please  see
                                     usb_isoc_request(9S) for more information
                                     about isochronous requests.

                                     USB_ATTRS_ISOC_START_FRAME can be used to
                                     delay  a transfer by a few frames, allow‐
                                     ing transfers to an endpoint to  sync  up
                                     with  another source. (For example, sync‐
                                     ing  up  audio  endpoints  to   a   video
                                     source.)  The number of a suitable start‐
                                     ing frame in the near future can be found
                                     by adding  an  offset  number  of  frames
                                     (usually  between  four  and  ten) to the
                                     current  frame   number   returned   from
                                     usb_get_current_frame_number(9F).    Note
                                     that requests with starting frames  which
                                     have passed are rejected.


       USB_ATTRS_ISOC_XFER_ASAP      Applies  only to isochronous requests and
                                     specifies that a request start as soon as
                                     possible.  The  host  controller   driver
                                     picks a starting frame number which imme‐
                                     diately  follows  the  last  frame of the
                                     last queued request. The isoc_frame_no of
                                     the usb_isoc_req_t is ignored. Please see
                                     usb_isoc_request(9S) for more information
                                     about isochronous requests.


       USB_ATTRS_BULK_STREAM         Applies only to bulk requests. This  flag
                                     specifies streams to be used.


EXAMPLES
             /*
              * Allocate, initialize and issue a synchronous bulk-IN request.
              * Allow for short transfers.
              */

             struct buf *bp;
             usb_bulk_req_t bulk_req;
             mblk_t *mblk;

             bulk_req = usb_alloc_bulk_req(dip, bp->b_bcount, USB_FLAGS_SLEEP);

             bulk_req->bulk_attributes =
                 USB_ATTRS_AUTOCLEARING | USB_ATTRS_SHORT_XFER_OK;

             if ((rval = usb_pipe_bulk_xfer(pipe, bulk_req, USB_FLAGS_SLEEP)) !=
                 USB_SUCCESS) {
                     cmn_err (CE_WARN, "%s%d: Error reading bulk data.",
                         ddi_driver_name(dip), ddi_get_instance(dip));
             }

             mblk = bulk_req->bulk_data;
             bcopy(mblk->rptr, buf->b_un.b_addr, mblk->wptr - mblk->rptr);
             bp->b_resid = bp->b_count - (mblk->wptr = mblk->rptr);
             ...
             ...

             ----

             usb_pipe_handle_t handle;
             usb_frame_number_t offset = 10;
             usb_isoc_req_t *isoc_req;

             isoc_req = usb_alloc_isoc_req(...);
               ...
               ...
             isoc_req->isoc_frame_no = usb_get_current_frame_number(dip) + offset;
             isoc_req->isoc_attributes = USB_ATTRS_ISOC_START_FRAME;
               ...
               ...
             if (usb_pipe_isoc_xfer(handle, isoc_req, 0) != USB_SUCCESS) {
               ...
             }


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_get_current_frame_number(9F),
       usb_pipe_bulk_xfer(9F), usb_pipe_ctrl_xfer(9F), usb_pipe_intr_xfer(9F),
       usb_pipe_isoc_xfer(9F),  usb_bulk_request(9S),  usb_callback_flags(9S),
       usb_completion_reason(9S),  usb_ctrl_request(9S), usb_intr_request(9S),
       usb_isoc_request(9S)

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