USBA_HCDI_PIPE_STOP_INTR_POLLING(9E)                     Driver Entry Points
NAME
     usba_hcdi_pipe_stop_intr_polling, 
usba_hcdi_pipe_stop_isoc_polling -
     stop polling on an interrupt or isochronous pipe
SYNOPSIS
     #include <sys/usb/usba/hcdi.h>     int     prefix_hcdi_pipe_stop_intr_polling(
usba_pipe_handle_data_t *ph,         
usba_flags_t usb_flags);     
int     prefix_hcdi_pipe_stop_isoc_polling(
usba_pipe_handle_data_t *ph,         
usba_flags_t usb_flags);
INTERFACE LEVEL
     Volatile - illumos USB HCD private function
     This is a private function that is not part of the stable DDI.  It may
     be removed or changed at any time.
PARAMETERS
     ph            A pointer to a USB pipe handle as defined in                   
usba_pipe_handle_data(9S).     
usb_flags     Flags which describe how allocations should be performed.
                   Valid flags are:                   
USB_FLAGS_NOSLEEP                           Do not block waiting for memory.  If memory is
                           not available the allocation will fail.                   
USB_FLAGS_SLEEP                           Perform a blocking allocation.  If memory is not
                           available, the function will wait until memory is
                           made available.
                           Note, the request may still fail even if                           
USB_FLAGS_SLEEP is specified.
DESCRIPTION
     The 
usba_hcdi_pipe_stop_intr_polling() and     
usba_hcdi_pipe_stop_isoc_polling() entry points are called when a
     client driver wishes to cease polling on an interrupt or isochronous
     pipe as describe by 
ph.  While these functions should only be called on
     pipes that have outstanding periodic interrupt and isochronous requests
     started through calls to either 
usba_hcdi_pipe_intr_xfer(9E) or     
usba_hcdi_pipe_isoc_xfer(9E), as part of device driver hardening,
     device drivers should verify that there are outstanding transfers.
     For interrupt transfers, 
ph, may refer to the root hub and so the
     driver may need to cease any synthetic polling it is performing.
     Isochronous transfers are forbidden on the root hub, so the     
usba_hcdi_pipe_stop_isoc_polling() will only be called on a pipe that
     corresponds to an actual device.
     These functions are 
synchronous requests.  In all cases, the driver
     should take the following steps before returning from these entry
     points:
     1.   Quiesce and stop the endpoint.
     2.   Remove any remaining scheduled transfers.
     3.   Call 
usba_hcdi_cb(9F) on the original interrupt or isochronous
          request with the code 
USB_CR_STOPPED_POLLING.
     4.   Optionally, free all associated resources.  If resources aren't
          freed at this time, they must be freed when          
usba_hcdi_pipe_close(9E) is called.
     5.   Any other steps needed such that a call to perform one-shot or
          periodic transfers on this endpoint again may be enabled.
     It is possible that this function may be called concurrently with a
     call to the 
usba_hcdi_pipe_reset(9E) entry point.  In such cases, the
     host controller driver is required to perform synchronization on its
     data structures.
RETURN VALUES
     Upon successful completion, the 
usba_hcdi_pipe_stop_intr_polling() and     
uba_hcdi_pipe_stop_isoc_polling() functions should return 
USB_SUCCESS.
     Otherwise, it should return the appropriate USB error.  If uncertain,
     use 
USB_FAILURE.
SEE ALSO
     usba_hcdi_pipe_close(9E), 
usba_hcdi_pipe_intr_xfer(9E),     
usba_hcdi_pipe_isoc_xfer(9E), 
usba_hcdi_pipe_reset(9E),     
usba_hcdi_cb(9F), 
usba_pipe_handle_data(9S)illumos                       December 20, 2016                      illumos