|
|
1.1 root 1: /*
2: * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * The contents of this file constitute Original Code as defined in and
7: * are subject to the Apple Public Source License Version 1.1 (the
8: * "License"). You may not use this file except in compliance with the
9: * License. Please obtain a copy of the License at
10: * http://www.apple.com/publicsource and read it before using this file.
11: *
12: * This Original Code and all software distributed under the License are
13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17: * License for the specific language governing rights and limitations
18: * under the License.
19: *
20: * @APPLE_LICENSE_HEADER_END@
21: */
22: #ifndef _USBHUB_H
23: #define _USBHUB_H
24:
25: /* Hub defines*/
26:
27:
28: enum {
29: kUSBHubDescriptorType = 0x29
30: };
31:
32: enum {
33:
34: kUSBHubLocalPowerChangeFeature = 0, /* Hub features */
35: kUSBHubOverCurrentChangeFeature = 1,
36:
37: kUSBHubPortConnectionFeature = 0, /* port features */
38: kUSBHubPortEnableFeature = 1,
39: kUSBHubPortSuspendFeature = 2,
40: kUSBHubPortOverCurrentFeature = 3,
41: kUSBHubPortResetFeature = 4,
42: kUSBHubPortPowerFeature = 8,
43: kUSBHubPortLowSpeedFeature = 9,
44: kUSBHubPortConnectionChangeFeature = 16,
45: kUSBHubPortEnableChangeFeature = 17,
46: kUSBHubPortSuspendChangeFeature = 18,
47: kUSBHubPortOverCurrentChangeFeature = 19,
48: kUSBHubPortResetChangeFeature = 20
49: };
50:
51: enum {
52: kHubPortConnection = 1,
53: kHubPortEnabled = 2,
54: kHubPortSuspend = 4,
55: kHubPortOverCurrent = 8,
56: kHubPortBeingReset = 16,
57: kHubPortPower = 0x0100,
58: kHubPortSpeed = 0x0200
59: };
60:
61:
62: enum {
63: kHubLocalPowerStatus = 1,
64: kHubOverCurrentIndicator = 2,
65: kHubLocalPowerStatusChange = 1,
66: kHubOverCurrentIndicatorChange = 2
67: };
68:
69: // hub characteristics
70: enum {
71: kPerPortSwitchingBit = (1 << 0),
72: kNoPowerSwitchingBit = (1 << 1),
73: kCompoundDeviceBit = (1 << 2),
74: kPerPortOverCurrentBit = (1 << 3),
75: kNoOverCurrentBit = (1 << 4)
76: };
77:
78: enum {
79: /*
80: Class-specific Requests
81:
82: Request bmRequestType bRequest wValue wIndex wLength Data
83: ClearHubFeature 0010 0000B CLEAR_FEATURE Feature Zero Zero None
84: ClearPortFeature 0010 0011B Feature Port Zero None
85:
86: GetBusState 1010 0011B GET_STATE Zero Port One Port Bus State
87:
88: GetHubDescriptor 1010 0000B GET_DESCRIPTOR Type Zero Length Descriptor
89:
90: GetHubStatus 1010 0000B GET_STATUS Zero Zero Four Hub Status
91: GetPortStatus 1010 0011B Zero Port Four Port Status
92:
93: SetHubDescriptor 0010 0000B SET_DESCRIPTOR Type Zero Length Descriptor
94:
95: SetHubFeature 0010 0000B SET_FEATURE Feature Zero Zero None
96: SetPortFeature 0010 0011B Feature Port Zero None
97: */
98: kClearHubFeature
99: = EncodeRequest(kUSBRqClearFeature, kUSBOut, kUSBClass, kUSBDevice),
100: kClearPortFeature
101: = EncodeRequest(kUSBRqClearFeature, kUSBOut, kUSBClass, kUSBOther),
102: kGetPortState
103: = EncodeRequest(kUSBRqGetState, kUSBIn, kUSBClass, kUSBOther),
104: kGetHubDescriptor
105: = EncodeRequest(kUSBRqGetDescriptor, kUSBIn, kUSBClass, kUSBDevice),
106: kGetHubStatus
107: = EncodeRequest(kUSBRqGetStatus, kUSBIn, kUSBClass, kUSBDevice),
108: kGetPortStatus
109: = EncodeRequest(kUSBRqGetStatus, kUSBIn, kUSBClass, kUSBOther),
110: kSetHubDescriptor
111: = EncodeRequest(kUSBRqGetDescriptor, kUSBOut, kUSBClass, kUSBDevice),
112: kSetHubFeature
113: = EncodeRequest(kUSBRqSetFeature, kUSBOut, kUSBClass, kUSBDevice),
114: kSetPortFeature
115: = EncodeRequest(kUSBRqSetFeature, kUSBOut, kUSBClass, kUSBOther),
116: };
117:
118:
119: struct IOUSBHubDescriptor {
120: UInt8 length;
121: UInt8 hubType;
122: UInt8 numPorts;
123: UInt16 characteristics __attribute__((packed));
124: UInt8 powerOnToGood; /* Port settling time, in 2ms */
125: UInt8 hubCurrent;
126:
127: /* These are received packed, will have to be unpacked */
128: UInt8 removablePortFlags[8];
129: UInt8 pwrCtlPortFlags[8];
130: };
131:
132: typedef struct IOUSBHubDescriptor IOUSBHubDescriptor;
133:
134: struct IOUSBHubStatus {
135: UInt16 statusFlags; /* Port status flags */
136: UInt16 changeFlags; /* Port changed flags */
137: };
138: typedef struct IOUSBHubStatus IOUSBHubStatus;
139: typedef IOUSBHubStatus * IOUSBHubStatusPtr;
140:
141: typedef struct IOUSBHubStatus IOUSBHubPortStatus;
142: typedef IOUSBHubPortStatus * IOUSBHubPortStatusPtr;
143:
144: #endif /* _USBHUB_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.