hub.h revision d29f5a711240f866521445b1656d114da090335e
/*
* CDDL HEADER START
*
* 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]
*
* CDDL HEADER END
*/
/*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SYS_USB_HUB_H
#define _SYS_USB_HUB_H
#ifdef __cplusplus
extern "C" {
#endif
#define USB_DESCR_TYPE_SETUP_HUB 0x2900
/*
* Section 11.11.2.1 allows up to 255 ports.
* For simplicity, only a maximum of 31 ports is currently allowed
*/
#define MAX_PORTS 31
typedef struct usb_hub_descr {
uchar_t bDescLength; /* size of descriptor */
uchar_t bDescriptorType; /* descriptor type */
uchar_t bNbrPorts; /* number of ports */
uint16_t wHubCharacteristics; /* hub characteristics */
uchar_t bPwrOn2PwrGood; /* time in ms from the time */
/* power on sequence begins on a port */
/* until power is good on that port */
uchar_t bHubContrCurrent; /* max current requirements */
uchar_t DeviceRemovable;
/* removable device attached */
uchar_t PortPwrCtrlMask;
/* power control mask */
} usb_hub_descr_t;
#define ROOT_HUB_DESCRIPTOR_LENGTH 9
#define ROOT_HUB_DESCRIPTOR_TYPE 0x29
#define ROOT_HUB_ADDR 0x01 /* address of root hub */
/* Values for wHubCharacteristics */
#define HUB_CHARS_POWER_SWITCHING_MODE 0x03
#define HUB_CHARS_GANGED_POWER 0x00
#define HUB_CHARS_INDIVIDUAL_PORT_POWER 0x01
#define HUB_CHARS_NO_POWER_SWITCHING 0x02
#define HUB_CHARS_COMPOUND_DEV 0x04
#define HUB_CHARS_GLOBAL_OVER_CURRENT 0x00
#define HUB_CHARS_INDIV_OVER_CURRENT 0x08
#define HUB_CHARS_NO_OVER_CURRENT 0x10
#define HUB_CHARS_TT_THINK_TIME 0x60
#define HUB_CHARS_TT_16FS_TIME 0x20
#define HUB_CHARS_TT_24FS_TIME 0x40
#define HUB_CHARS_TT_32FS_TIME 0x60
#define HUB_CHARS_PORT_INDICATOR 0x80
/* Default Power On to Power Good time */
#define HUB_DEFAULT_POPG 10
/* Hub Status */
#define HUB_CHANGE_STATUS 0x01
/* Class Specific bmRequestType values Table 11-10 */
#define HUB_HANDLE_PORT_FEATURE_TYPE (USB_DEV_REQ_HOST_TO_DEV \
|USB_DEV_REQ_TYPE_CLASS \
|USB_DEV_REQ_RCPT_OTHER)
#define HUB_GET_PORT_STATUS_TYPE (USB_DEV_REQ_DEV_TO_HOST \
|USB_DEV_REQ_TYPE_CLASS \
|USB_DEV_REQ_RCPT_OTHER)
#define HUB_CLASS_REQ_TYPE (USB_DEV_REQ_DEV_TO_HOST \
|USB_DEV_REQ_TYPE_CLASS)
#define HUB_HANDLE_HUB_FEATURE_TYPE USB_DEV_REQ_TYPE_CLASS
/* bmRequestType for getting device status */
#define HUB_GET_DEVICE_STATUS_TYPE (USB_DEV_REQ_DEV_TO_HOST \
|USB_DEV_REQ_TYPE_STANDARD \
|USB_DEV_REQ_RCPT_DEV)
/* Port Status Field Bits - Table 11-15 */
#define PORT_STATUS_CCS 0x0001 /* port connection status */
#define PORT_STATUS_PES 0x0002 /* port enable status */
#define PORT_STATUS_PSS 0x0004 /* port suspend status */
#define PORT_STATUS_POCI 0x0008 /* port over current indicator */
#define PORT_STATUS_PRS 0x0010 /* port reset status */
#define PORT_STATUS_PPS 0x0100 /* port power status */
#define PORT_STATUS_LSDA 0x0200 /* low speed device */
#define PORT_STATUS_HSDA 0x0400 /* high speed device */
#define PORT_STATUS_PIC 0x1000 /* port indicator control */
#define PORT_STATUS_MASK 0x171f
#define PORT_STATUS_OK 0x103 /* connected, enabled, power */
/* Port Change Field Bits - Table 11-16 */
#define PORT_CHANGE_CSC 0x0001 /* connect status change */
#define PORT_CHANGE_PESC 0x0002 /* port enable change */
#define PORT_CHANGE_PSSC 0x0004 /* port suspend change */
#define PORT_CHANGE_OCIC 0x0008 /* over current change */
#define PORT_CHANGE_PRSC 0x0010 /* port reset change */
#define PORT_CHANGE_MASK 0x001f
/* Hub status Field Bits - Table 11-14 */
#define HUB_LOCAL_POWER_STATUS 0x0001 /* state of the power supply */
#define HUB_OVER_CURRENT 0x0002 /* global hub OC condition */
/* Hub change clear feature selectors - Table 11-15 */
#define C_HUB_LOCAL_POWER_STATUS 0x0001 /* state of the power supply */
#define C_HUB_OVER_CURRENT 0x0002 /* global hub OC condition */
/* hub class feature selectors - Table 11-12 */
#define CFS_C_HUB_LOCAL_POWER 0
#define CFS_C_HUB_OVER_CURRENT 1
#define CFS_PORT_CONNECTION 0
#define CFS_PORT_ENABLE 1
#define CFS_PORT_SUSPEND 2
#define CFS_PORT_OVER_CURRENT 3
#define CFS_PORT_RESET 4
#define CFS_PORT_POWER 8
#define CFS_PORT_LOW_SPEED 9
#define CFS_C_PORT_CONNECTION 16
#define CFS_C_PORT_ENABLE 17
#define CFS_C_PORT_SUSPEND 18
#define CFS_C_PORT_OVER_CURRENT 19
#define CFS_C_PORT_RESET 20
#ifdef __cplusplus
}
#endif
#endif /* _SYS_USB_HUB_H */