|
|
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: /*
23: * Copyright (c) 1998 Apple Computer, Inc. All rights reserved.
24: *
25: * HISTORY
26: *
27: */
28:
29:
30: #ifndef _IOKIT_IOUSBHUB_H
31: #define _IOKIT_IOUSBHUB_H
32:
33: #include <IOKit/IOLib.h>
34: #include <IOKit/IOService.h>
35: #include <IOKit/IOBufferMemoryDescriptor.h>
36:
37: #include <IOKit/usb/USB.h>
38: #include <IOKit/usb/USBHub.h>
39:
40: enum{
41: kErrataCaptiveOK = 1
42: };
43:
44:
45: class IOUSBController;
46: class IOUSBDevice;
47: class IOUSBInterface;
48: class IOUSBPipe;
49:
50: class IOUSBHub : public IOService
51: {
52: OSDeclareDefaultStructors(IOUSBHub)
53:
54: friend class IOUSBHubPort;
55:
56: IOUSBController * _bus;
57: IOUSBDevice * _device;
58: IOUSBInterface * _hubInterface;
59: IOUSBConfigurationDescriptor *_configDescriptor;
60: IOUSBHubDescriptor _hubDescriptor;
61: USBDeviceAddress _address;
62: IOUSBHubStatus _hubStatus;
63: IOUSBPipe * _interruptPipe;
64: IOBufferMemoryDescriptor * _buffer;
65:
66: // Power stuff
67: bool _busPowered;
68: bool _selfPowered;
69: bool _busPowerGood;
70: bool _selfPowerGood;
71: UInt32 _powerForCaptive;
72:
73: // Port stuff
74: IOUSBHubPort ** _ports; // Allocated at runtime
75: UInt8 _numCaptive;
76:
77: UInt32 _errataBits;
78:
79: public:
80:
81: bool init(OSDictionary * propTable );
82: virtual bool start(IOService * provider);
83: virtual void stop(IOService * provider);
84:
85: // Hub functions
86: void UnpackPortFlags(void);
87: void CountCaptivePorts(void);
88: bool CheckPortPowerRequirements(void);
89: bool AllocatePortMemory(void);
90: bool StartPorts(void);
91: bool StopPorts(void);
92: bool StartHandler(void);
93: bool statusChanged(void);
94: const UInt8 * getStatusChanged(void);
95:
96: IOReturn GetHubDescriptor(IOUSBHubDescriptor *desc);
97: IOReturn GetHubStatus(IOUSBHubStatus *status);
98: IOReturn ClearHubFeature(UInt16 feature);
99:
100: IOReturn GetPortStatus(IOUSBHubPortStatus *status, UInt16 port);
101: IOReturn GetPortState(UInt8 *state, UInt16 port);
102: IOReturn SetPortFeature(UInt16 feature, UInt16 port);
103: IOReturn ClearPortFeature(UInt16 feature, UInt16 port);
104:
105: void PrintHubDescriptor(IOUSBHubDescriptor *desc);
106:
107: void fatalError(IOReturn err, char *str);
108: };
109:
110: /*****************************************************
111: * Port Stuff
112: *****************************************************/
113:
114:
115: typedef IOReturn (IOUSBHubPort::*ChangeHandlerFuncPtr)(UInt16 changeFlags);
116:
117:
118: typedef struct {
119: ChangeHandlerFuncPtr handler;
120: UInt32 bit;
121: UInt32 clearFeature;
122: } portStatusChangeVector;
123:
124: enum{
125: kNumChangeHandlers = 5
126: };
127:
128:
129: class IOUSBHubPort
130: {
131: IOUSBController *_bus;
132: IOUSBHub *_hub;
133: IOUSBHubDescriptor *_hubDesc;
134: IOUSBDevice *_portDevice;
135: bool _devZero;
136:
137: portStatusChangeVector _changeHandler[kNumChangeHandlers];
138:
139: public:
140:
141: IOUSBDeviceDescriptor _desc;
142: UInt8 _speed; // 1 = kUSBLowSpeed, 0 = kUSBHighSpeed
143: UInt32 _portPowerAvailable;
144:
145: int _portNum;
146:
147: void init(IOUSBHub * parent,
148: int portNum,
149: UInt32 powerAvailable);
150: IOReturn start(void);
151: void stop(void);
152:
153: IOReturn addDevice(void);
154: void removeDevice(void);
155:
156: // Reset the device, then restore the old address
157: IOReturn resetDevice();
158:
159: bool statusChanged(void);
160: IOReturn statusChangeHandler(UInt16 changeFlags);
161:
162: void initPortVectors(void);
163: void setPortVector(ChangeHandlerFuncPtr routine,
164: UInt32 condition);
165: IOReturn defaultOverCrntChangeHandler(UInt16 changeFlags);
166: IOReturn defaultResetChangeHandler(UInt16 changeFlags);
167: IOReturn defaultSuspendChangeHandler(UInt16 changeFlags);
168: IOReturn defaultEnableChangeHandler(UInt16 changeFlags);
169: IOReturn defaultConnectionChangeHandler(UInt16 changeFlags);
170: IOReturn addDeviceResetChangeHandler(UInt16 changeFlags);
171: IOReturn handleResetDevice(UInt16 changeFlags);
172:
173: void fatalError(IOReturn err, char *str);
174: };
175:
176: #endif _IOKIT_IOUSBHUB_H
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.