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