1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 #ifndef _SYS_USB_HUB_H 27 #define _SYS_USB_HUB_H 28 29 30 #ifdef __cplusplus 31 extern "C" { 32 #endif 33 34 #define USB_DESCR_TYPE_SETUP_HUB 0x2900 35 36 /* 37 * Section 11.11.2.1 allows up to 255 ports. 38 * For simplicity, only a maximum of 31 ports is currently allowed 39 */ 40 #define MAX_PORTS 31 41 42 typedef struct usb_hub_descr { 43 uchar_t bDescLength; /* size of descriptor */ 44 uchar_t bDescriptorType; /* descriptor type */ 45 uchar_t bNbrPorts; /* number of ports */ 46 uint16_t wHubCharacteristics; /* hub characteristics */ 47 uchar_t bPwrOn2PwrGood; /* time in ms from the time */ 48 /* power on sequence begins on a port */ 49 /* until power is good on that port */ 50 uchar_t bHubContrCurrent; /* max current requirements */ 51 uchar_t DeviceRemovable; 52 /* removable device attached */ 53 uchar_t PortPwrCtrlMask; 54 /* power control mask */ 55 } usb_hub_descr_t; 56 57 #define ROOT_HUB_DESCRIPTOR_LENGTH 9 58 #define ROOT_HUB_DESCRIPTOR_TYPE 0x29 59 #define ROOT_HUB_ADDR 0x01 /* address of root hub */ 60 61 /* Values for wHubCharacteristics */ 62 #define HUB_CHARS_POWER_SWITCHING_MODE 0x03 63 #define HUB_CHARS_GANGED_POWER 0x00 64 #define HUB_CHARS_INDIVIDUAL_PORT_POWER 0x01 65 #define HUB_CHARS_NO_POWER_SWITCHING 0x02 66 #define HUB_CHARS_COMPOUND_DEV 0x04 67 #define HUB_CHARS_GLOBAL_OVER_CURRENT 0x00 68 #define HUB_CHARS_INDIV_OVER_CURRENT 0x08 69 #define HUB_CHARS_NO_OVER_CURRENT 0x10 70 #define HUB_CHARS_TT_THINK_TIME 0x60 71 #define HUB_CHARS_TT_16FS_TIME 0x20 72 #define HUB_CHARS_TT_24FS_TIME 0x40 73 #define HUB_CHARS_TT_32FS_TIME 0x60 74 #define HUB_CHARS_PORT_INDICATOR 0x80 75 76 /* Default Power On to Power Good time */ 77 #define HUB_DEFAULT_POPG 10 78 79 /* Hub Status */ 80 #define HUB_CHANGE_STATUS 0x01 81 82 /* Class Specific bmRequestType values Table 11-10 */ 83 #define HUB_HANDLE_PORT_FEATURE_TYPE (USB_DEV_REQ_HOST_TO_DEV \ 84 |USB_DEV_REQ_TYPE_CLASS \ 85 |USB_DEV_REQ_RCPT_OTHER) 86 87 #define HUB_GET_PORT_STATUS_TYPE (USB_DEV_REQ_DEV_TO_HOST \ 88 |USB_DEV_REQ_TYPE_CLASS \ 89 |USB_DEV_REQ_RCPT_OTHER) 90 91 #define HUB_CLASS_REQ_TYPE (USB_DEV_REQ_DEV_TO_HOST \ 92 |USB_DEV_REQ_TYPE_CLASS) 93 94 #define HUB_HANDLE_HUB_FEATURE_TYPE USB_DEV_REQ_TYPE_CLASS 95 96 /* bmRequestType for getting device status */ 97 #define HUB_GET_DEVICE_STATUS_TYPE (USB_DEV_REQ_DEV_TO_HOST \ 98 |USB_DEV_REQ_TYPE_STANDARD \ 99 |USB_DEV_REQ_RCPT_DEV) 100 101 /* Port Status Field Bits - Table 11-15 */ 102 #define PORT_STATUS_CCS 0x0001 /* port connection status */ 103 #define PORT_STATUS_PES 0x0002 /* port enable status */ 104 #define PORT_STATUS_PSS 0x0004 /* port suspend status */ 105 #define PORT_STATUS_POCI 0x0008 /* port over current indicator */ 106 #define PORT_STATUS_PRS 0x0010 /* port reset status */ 107 #define PORT_STATUS_PPS 0x0100 /* port power status */ 108 #define PORT_STATUS_LSDA 0x0200 /* low speed device */ 109 #define PORT_STATUS_HSDA 0x0400 /* high speed device */ 110 #define PORT_STATUS_PIC 0x1000 /* port indicator control */ 111 112 #define PORT_STATUS_MASK 0x171f 113 #define PORT_STATUS_OK 0x103 /* connected, enabled, power */ 114 115 /* Port Change Field Bits - Table 11-16 */ 116 #define PORT_CHANGE_CSC 0x0001 /* connect status change */ 117 #define PORT_CHANGE_PESC 0x0002 /* port enable change */ 118 #define PORT_CHANGE_PSSC 0x0004 /* port suspend change */ 119 #define PORT_CHANGE_OCIC 0x0008 /* over current change */ 120 #define PORT_CHANGE_PRSC 0x0010 /* port reset change */ 121 122 #define PORT_CHANGE_MASK 0x001f 123 124 /* Hub status Field Bits - Table 11-14 */ 125 #define HUB_LOCAL_POWER_STATUS 0x0001 /* state of the power supply */ 126 #define HUB_OVER_CURRENT 0x0002 /* global hub OC condition */ 127 128 /* Hub change clear feature selectors - Table 11-15 */ 129 #define C_HUB_LOCAL_POWER_STATUS 0x0001 /* state of the power supply */ 130 #define C_HUB_OVER_CURRENT 0x0002 /* global hub OC condition */ 131 132 /* hub class feature selectors - Table 11-12 */ 133 #define CFS_C_HUB_LOCAL_POWER 0 134 #define CFS_C_HUB_OVER_CURRENT 1 135 #define CFS_PORT_CONNECTION 0 136 #define CFS_PORT_ENABLE 1 137 #define CFS_PORT_SUSPEND 2 138 #define CFS_PORT_OVER_CURRENT 3 139 #define CFS_PORT_RESET 4 140 #define CFS_PORT_POWER 8 141 #define CFS_PORT_LOW_SPEED 9 142 #define CFS_C_PORT_CONNECTION 16 143 #define CFS_C_PORT_ENABLE 17 144 #define CFS_C_PORT_SUSPEND 18 145 #define CFS_C_PORT_OVER_CURRENT 19 146 #define CFS_C_PORT_RESET 20 147 148 #ifdef __cplusplus 149 } 150 #endif 151 152 #endif /* _SYS_USB_HUB_H */ 153