blob: 17962a64e30c7976164fdc07411a3680935b9f91 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
/*
* 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 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SYS_USB_HUB_H
#define _SYS_USB_HUB_H
#pragma ident "%Z%%M% %I% %E% SMI"
#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 */
|