USB_LOOKUP_EP_DATA(9F) | Kernel Functions for Drivers | USB_LOOKUP_EP_DATA(9F) |
usb_lookup_ep_data - Lookup endpoint information
#include <sys/usb/usba.h> usb_ep_data_t *usb_lookup_ep_data(dev_info_t *dip,
usb_client_dev_data_t *dev_datap, uint_t interface,
uint_t alternate, uint_t skip, uint_t type, uint_t direction);
illumos DDI specific (illumos DDI)
dip
dev_datap
interface
alternate
skip
type
direction
The usb_lookup_ep_data() function returns endpoint information from the tree embedded in client data returned from usb_get_dev_data. It operates on the current configuration (pointed to by the dev_curr_cfg field of the usb_client_dev_data_t argument). It skips the first <skip> number of endpoints it finds which match the specifications of the other arguments, and then retrieves information on the next matching endpoint it finds. Note that it does not make a copy of the data, but points to the tree itself.
On success: the tree node corresponding to the desired endpoint.
On failure: returns NULL. Fails if dip or dev_datap are NULL, if the desired endpoint does not exist in the tree, or no tree is present in dev_datap.
May be called from user, kernel or interrupt context.
Retrieve the polling interval for the second interrupt endpoint at interface 0, alt 3:
uint8_t interval = 0;
usb_ep_data_t *ep_node = usb_lookup_ep_data(
dip, dev_datap, 0, 3, 1, USB_EP_ATTR_INTR, USB_EP_DIR_IN);
if (ep_node != NULL) {
interval = ep_node->ep_descr.bInterval;
}
Retrieve the maximum packet size for the first control pipe at interface 0, alt 4:
uint16_t maxPacketSize = 0;
usb_ep_data_t *ep_node = usb_lookup_ep_data(
dip, dev_datap, 0, 4, 0, USB_EP_ATTR_CONTROL, 0);
if (ep_node != NULL) {
maxPacketSize = ep_node->ep_descr.wMaxPacketSize;
}
See attributes(7) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
Architecture | PCI-based systems |
Interface stability | Committed |
attributes(7), usb_get_dev_data(9F), usb_pipe_open(9F), usb_cfg_descr(9S), usb_ep_descr(9S), usb_if_descr(9S)
September 16, 2016 | OmniOS |