USBA_HCDI_PIPE_STOP_INTR_POLLING(9E) Driver Entry Points USBA_HCDI_PIPE_STOP_INTR_POLLING(9E)

usba_hcdi_pipe_stop_intr_polling, usba_hcdi_pipe_stop_isoc_polling
stop polling on an interrupt or isochronous pipe

#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);

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.

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.

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.

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.

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)
December 20, 2016 OmniOS