usb_callback_flags man page on SunOS

Man page or keyword search:  
man Server   20652 pages
apropos Keyword Search (all sections)
Output format
SunOS logo
[printable version]

usb_callback_flags(9S)	  Data Structures for Drivers	usb_callback_flags(9S)

NAME
       usb_callback_flags - USB callback flag definitions

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

INTERFACE LEVEL
       Solaris DDI specific (Solaris DDI)

DESCRIPTION
       If  the	USB  framework detects an error during a request execution, it
       calls the client driver's exception callback  handler  to  report  what
       happened.  Callback flags (which are set prior to calling the exception
       callback handler) detail errors discovered during the exception	recov‐
       ery  process,  and  summarize recovery actions taken by the USBA frame‐
       work.

       Information from the callback flags supplements	information  from  the
       original	 transport  error. For transfers, the original transport error
       status is returned to the callback handler through the original request
       (whose  completion  reason  field  contains any transport error indica‐
       tion).  For command completion callbacks, the callback's rval  argument
       contains	 the  transport error status. A completion reason of USB_CR_OK
       means the transfer completed with no errors detected.

       The usb_cb_flags_t enumerated type contains the following definitions:

       USB_CB_NO_INFO

	   No additional errors discovered or recovery actions taken.

       USB_CB_FUNCTIONAL_STALL

	   A functional stall  occurred	 during	 the  transfer.	 A  functional
	   stall is usually caused by a hardware error, and must be explicitly
	   cleared. A functional stall is fatal if it cannot be	 cleared.  The
	   default control pipe never shows a functional stall.

       USB_CB_STALL_CLEARED

	   A  functional  stall	 has  been cleared by the USBA framework. This
	   can happen  if  USB_ATTRS_AUTOCLEARING  is  set  in	the  request's
	   xxxx_attributes field.

       USB_CB_PROTOCOL_STALL

	   A protocol stall has occurred during the transfer. A protocol stall
	   is caused usually by an invalid or  misunderstood  command.	It  is
	   cleared   automatically   when   the	  device  is  given  its  next
	   command. The USBA framework treats stalls detected on default  pipe
	   transfers as protocol stalls.

       USB_CB_RESET_PIPE

	   A  pipe with a stall has been reset automatically via autoclearing,
	   or via an explicit call to usb_pipe_reset(9F).   Resetting  a  pipe
	   consists  of	 stopping all transactions on a pipe, setting the pipe
	   to the idle state, and if the pipe is not the default pipe,	flush‐
	   ing all pending requests. The request which has the error, plus all
	   pending requests which are flushed, show USB_CB_RESET_PIPE  set  in
	   the usb_cb_flags_t when their exception callback is called.

       USB_CB_ASYNC_REQ_FAILED

	   Resources   could   not   be	  allocated   to   process   callbacks
	   asynchronously. Callbacks receiving this flag must not block, since
	   those  callbacks  are  executing in a context which holds resources
	   shared by the rest of the system.  Note  that  exception  callbacks
	   with	 USB_CB_ASYNC_REQ_FAILED set may execute out of order from the
	   requests which preceded  them.  Normal  callbacks  may  be  already
	   queued when an exception hits that the USBA is unable to queue.

       USB_CB_SUBMIT_FAILED

	   A  queued  request  was submitted to the host controller driver and
	   was rejected. The usb_completion_reason shows why the  request  was
	   rejected by the host controller.

       USB_CB_NO_RESOURCES

	   Insufficient resources were available for recovery to proceed.

       USB_CB_INTR_CONTEXT

	   Callback is executing in interrupt context and should not block.

       The usb_cb_flags_t enumerated type defines a bitmask. Multiple bits can
       be set, reporting back multiple statuses to the exception callback han‐
       dler.

   CALLBACK HANDLER
       The  USBA framework supports callback handling as a way of asynchronous
       client driver notification. There are three kinds of callbacks:	Normal
       completion  transfer  callback,	exception  (error) completion transfer
       callback, and command completion callback, each described below.

       Callback handlers are called whenever they are specified in  a  request
       or command, regardless of whether or not that request or command speci‐
       fies the USB_FLAGS_SLEEP flag. (USB_FLAGS_SLEEP tells  the  request  or
       command to block until completed.)  Callback handlers must be specified
       whenever an asynchronous transfer is requested.

   PIPE POLICY
       Each pipe is associated with a pool of threads that  are	 used  to  run
       callbacks  associated with requests on that pipe.  All transfer comple‐
       tion callbacks for a particular pipe  are  run  serially	 by  a	single
       thread.

       Pipes  taking  requests	with callbacks which can block must have their
       pipe policy properly initialized. If a callback blocks on  a  condition
       that is only met by another thread associated with the same pipe, there
       must be sufficient threads available. Otherwise	that  callback	thread
       will  block  forever.   Similarly,  problems  will ensue when callbacks
       overlap and there are not enough threads to handle the number of	 over‐
       lapping callbacks.

       The  pp_max_async_reqs  field of the pipe_policy provides a hint of how
       many threads to allocate for asynchronous processing of	request	 call‐
       backs  on  a  pipe.  Set this value high enough per pipe to accommodate
       all of the pipe's possible asynchronous conditions.  The pipe_policy is
       passed to usb_pipe_open(9F).

       Transfer completion callbacks (normal completion and exception):

       Most transfer completion callbacks are allowed to block, but only under
       certain conditions:

       1.  No callback	is  allowed  to	 block	if  the	 callback  flags  show
	   USB_CB_INTR_CONTEXT	set,  since that flag indicates that the call‐
	   back is running in interrupt context	 instead  of  kernel  context.
	   Isochronous	  normal   completion	callbacks,   plus  those  with
	   USB_CB_ASYNC_REQ_FAILED set, execute in interrupt  context.

       2.  Any callback except for isochronous normal completion can block for
	   resources (for example to allocate memory).

       3.  No  callback can block for synchronous completion of a command (for
	   example, a call to usb_pipe_close(9F) with the USB_FLAGS_SLEEP flag
	   passed) done on the same pipe. The command could wait for all call‐
	   backs to complete, including the callback which  issued  that  com‐
	   mand,  causing  all	operations  on the pipe to deadlock. Note that
	   asynchronous commands can start from a callback, providing that the
	   pipe's policy pp_max_async_reqs field is initialized to accommodate
	   them.

       4.  Avoid callbacks that block for synchronous completion  of  commands
	   done on other pipes. Such conditions can cause complex dependencies
	   and unpredictable results.

       5.  No callback can block waiting for a synchronous transfer request to
	   complete.  (Note that making an asynchronous request to start a new
	   transfer or start polling does not block, and is OK.)

       6.  No callback can block waiting for  another  callback	 to  complete.
	   (This is because all callbacks are done by a single thread.)

       7.  Note that if a callback blocks, other callbacks awaiting processing
	   can backup behind it, impacting system resources.

       A transfer request can specify a non-null  normal-completion  callback.
       Such  requests  conclude by calling the normal-completion callback when
       the transfer completes normally.	 Similarly,  a	transfer  request  can
       specify	a non-null exception callback. Such requests conclude by call‐
       ing the exception callback when the transfer completes abnormally. Note
       that  the  same	callback  can  be  used for both normal completion and
       exception callback handling. A completion reason of  USB_CR_OK  defines
       normal completion.

       All  request-callbacks  take  as	 arguments  a  usb_pipe_handle_t and a
       pointer to the request:

       xxxx_cb(usb_pipe_handle_t ph, struct usb_ctrl_req *req);

       Such callbacks can retrieve saved state or other information  from  the
       private	area of the pipe handle.  (See usb_pipe_set_private(9F).) Han‐
       dlers also have access to the completion reason (usb_cr_t) and callback
       flags (usb_cb_flags_t) through the request argument they are passed.

       Request	information  follows. In the data below, xxxx below represents
       the type of request (ctrl, intr, isoc or bulk.)

		   Request structure name is usb_xxxx_req_t.

		   Normal completion callback handler field is xxxx_cb.

		   Exception callback handler field is xxxx_exc_cb.

		   Completion reason field is xxxx_completion_reason.

		   Callback flags field is xxxx_cb_flags.

   COMMAND COMPLETION CALLBACKS
       Calls to some non-transfer functions can be set up for callback notifi‐
       cation.	  These	   include   usb_pipe_close(9F),   usb_pipe_reset(9F),
       usb_pipe_drain_reqs(9F),	  usb_set_cfg(9F),   usb_set_alt_if(9F)	   and
       usb_clr_feature(9F).

       The signature of a command completion callback is as follows:

		       command_cb(
			   usb_pipe_handle_t cb_pipe_handle,
			   usb_opaque_t arg,
			   int rval,
			   usb_cb_flags_t flags);

       As  with	 transfer  completion  callbacks, command completion callbacks
       take a usb_pipe_handle_t to retrieve saved state or  other  information
       from  the  pipe's  private area. Also, command completion callbacks are
       provided with an additional user-definable argument (usb_opaque_t arg),
       the  return status of the executed command (int rval), and the callback
       flags (usb_cb_flags_t flags).

       The rval argument is roughly equivalent to the completion reason	 of  a
       transfer	 callback, indicating the overall status.  See the return val‐
       ues of the relevant function for possible  rval	values	which  can  be
       passed to the callback.

       The  callback  flags can be checked when rval indicates failure status.
       Just as for transfer completion callbacks, callback flags return	 addi‐
       tional information on execution events.

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

       ┌─────────────────────────────┬─────────────────────────────┐
       │      ATTRIBUTE TYPE	     │	    ATTRIBUTE VALUE	   │
       ├─────────────────────────────┼─────────────────────────────┤
       │Architecture		     │PCI-based systems		   │
       ├─────────────────────────────┼─────────────────────────────┤
       │Interface stability	     │Evolving			   │
       ├─────────────────────────────┼─────────────────────────────┤
       │Availability		     │SUNWusb, SUNWusbu		   │
       └─────────────────────────────┴─────────────────────────────┘

SEE ALSO
       usb_alloc_request(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_ctrl_request(9S), usb_intr_request(9S), usb_isoc_request(9S)

SunOS 5.10			  5 Jan 2004		usb_callback_flags(9S)
[top]

List of man pages available for SunOS

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net