USB_CLIENT_ATTACH(9F) Kernel Functions for Drivers USB_CLIENT_ATTACH(9F)
NAME
usb_client_attach, usb_client_detach - USBA framework registration of
client USB drivers
SYNOPSIS
#define USBDRV_MAJOR_VER <major>
#define USBDRV_MINOR_VER <minor>
#include <sys/usb/usba.h>
int usb_client_attach(
dev_info_t *dip,
uint_t version,
usb_flags_t flags);
void usb_client_detach(
dev_info_t *dip,
usb_client_dev_data_t *dev_data);
INTERFACE LEVEL
illumos DDI specific (illumos DDI)
PARAMETERS
For
usb_client_attach():
dip Pointer to the device's dev_info structure.
version Must be set to USBDRV_VERSION. (See below.)
flags Not used.
For
usb_client_detach():
dip Pointer to the device's dev_info structure.
dev_data Pointer to a usb_client_dev_data_t to free. Can be NULL.
DESCRIPTION
The
usb_client_attach() function registers a driver with the USBA
framework and must be called before any other USBA function. Usually,
usb_client_attach() is followed by a call to
usb_get_dev_data(9F).
The
usb_client_detach() function unregisters a driver with the USBA
framework. The
usb_client_detach() function releases memory for all
strings, descriptors and trees set up by
usb_get_dev_data(9F) when
its dev_data argument is non-NULL. The
usb_client_detach() function
is the last USBA function a client calls before completing
detach(9E). It is not necessary to call
usb_client_detach() during a
suspend operation.
VERSIONING
USBDRV_VERSION is a macro which creates a version number based on the
USBDRV_MAJOR_VER and USBDRV_MINOR_VER definitions. It must be passed
as the version argument.
For drivers version 2.0 or greater, the value of USBDRV_MAJOR_VERSION
must match its corresponding USBA_MAJOR_VER value in
<
sys/usb/usbai.h>, and the value of USBDRV_MINOR_VERSION must not be
greater than its corresponding USBA_MINOR_VER value also in
<sys/usb/usbai.h>.
Version 0.8 drivers from previous releases are binary compatible and
run on illumos, but are not compilable.
Definitions of USBDRV_MAJOR_VERSION and USBDRV_MINOR_VERSION must
appear in the client driver above the reference to <
sys/usb/usba.h>.
Note that different releases have different USBA_[MAJOR|MINOR]_VER
numbers.
RETURN VALUES
For
usb_client_attach():
USB_SUCCESS Registration is successful.
USB_INVALID_ARGS dip is
NULL.
USB_INVALID_CONTEXT Called from interrupt context. Not called from
an attach routine context.
USB_INVALID_VERSION Version passed in version is invalid.
USB_FAILURE Other internal error.
For
usb_client_detach():
USB_INVALID_ARGS dip is
NULL.
USB_INVALID_CONTEXT Not called from an attach routine context.
CONTEXT
The
usb_client_attach() function may only be called from
attach(9E).
The
usb_client_detach() function may be called only from
attach(9E) or
detach(9E).
EXAMPLES
if (usb_client_attach(dip, USBDRV_VERSION, 0) != USB_SUCCESS) {
cmn_err (CE_WARN, "%s%d: Couldn't register USB device",
ddi_driver_name(dip), ddi_get_instance(dip));
return (USB_FAILURE);
}
if (usb_get_dev_data(dip, &dev_data, USB_PARSE_LVL_IF, 0) !=
USB_SUCCESS) {
cmn_err (CE_WARN, "%s%d: Couldn't get device descriptor data.",
ddi_driver_name(dip), ddi_get_instance(dip));
return (USB_FAILURE);
}
ATTRIBUTES
See
attributes(7) for descriptions of the following attributes:
+--------------------+-------------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+--------------------+-------------------+
|Architecture | PCI-based systems |
+--------------------+-------------------+
|Interface stability | Committed |
+--------------------+-------------------+
SEE ALSO
attributes(7),
attach(9E),
detach(9E),
usb_get_dev_data(9F) October 30, 2016 USB_CLIENT_ATTACH(9F)