Copyright (c) 2004, Sun Microsystems, Inc.,
All Rights Reserved
The contents of this file are subject to the terms of the Common Development and Distribution License (the "License"). You may not use this file except in compliance with the License.
You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing. See the License for the specific language governing permissions and limitations under the License.
When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE. If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
#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);
Solaris DDI specific (Solaris DDI)
For usb_client_attach(): dip
Pointer to the device's dev_info structure.
Must be set to USBDRV_VERSION. (See below.)
Not used.
For usb_client_detach(): dip
Pointer to the device's dev_info structure.
Pointer to a usb_client_dev_data_t to free. Can be NULL.
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.
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.
For usb_client_attach(): USB_SUCCESS
Registration is successful.
dip is NULL.
Called from interrupt context. Not called from an attach routine context.
Version passed in version is invalid.
Other internal error.
For usb_client_detach(): USB_INVALID_ARGS
dip is NULL.
Not called from an attach routine 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).
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); }
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE ATTRIBUTE VALUE |
Architecture PCI-based systems |
Interface stability Committed |
attributes(5), attach(9E), detach(9E), usb_get_dev_data(9F)