|
|
1.1 root 1: /*
2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights
7: * Reserved. This file contains Original Code and/or Modifications of
8: * Original Code as defined in and that are subject to the Apple Public
9: * Source License Version 1.1 (the "License"). You may not use this file
10: * except in compliance with the License. Please obtain a copy of the
11: * License at http://www.apple.com/publicsource and read it before using
12: * this file.
13: *
14: * The Original Code and all software distributed under the License are
15: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
19: * License for the specific language governing rights and limitations
20: * under the License.
21: *
22: * @APPLE_LICENSE_HEADER_END@
23: */
24:
25: /*
26: File: HubDriverShell.c
27:
28: Contains: Toms wrapper for BT's hub driver. Just the header block etc
29:
30: Version: Neptune 1.0
31:
32: Copyright: � 1997-1998 by Apple Computer, Inc., all rights reserved.
33:
34: File Ownership:
35:
36: DRI: Barry Twycross
37:
38: Other Contact: xxx put other contact here xxx
39:
40: Technology: USB
41:
42: Writers:
43:
44: (TC) Tom Clark
45: (CJK) Craig Keithley
46: (BT) Barry Twycross
47:
48: Change History (most recent first):
49:
50: <USB9> 9/10/98 BT Add are we finished
51: <USB8> 9/4/98 TC Update hubDriverNotifyProc to use version 1.1 of dispatch table.
52: <USB7> 4/14/98 BT Do removed devices when killed
53: <USB6> 4/11/98 CJK remove usbpriv.h include
54: <USB5> 4/9/98 BT Use USB.h
55: <4> 3/6/98 CJK get version info from HubClassVersion.h
56: <3> 2/25/98 BT Add Apple Vendor cods.
57: <2> 2/24/98 BT Change Apple vendor ID.
58: <1> 2/24/98 BT first checked in
59: <15*> 2/19/98 BT Add debbugger
60: <15> 2/8/98 BT Power allocation stuff
61: <14> 2/6/98 BT Power allocation stuff
62: <13> 2/4/98 BT Clean up after TOms changes
63: <12> 2/3/98 TC Update to use latest DispatchTable definition.
64: <11> 2/2/98 TC Make vendor,product & version match root hub simulator
65: <10> 1/26/98 CJK Change to use USBDeviceDescriptor (instead of just
66: devicedescriptor)
67: <9> 1/26/98 BT Fix name changes
68: <8> 1/26/98 BT Mangle names after design review
69: <7> 1/15/98 CJK Change include of USL.h to USBServicesLib.h
70: <6> 1/14/98 BT Change to USBClassDriver.h
71: <5> 1/13/98 BT Making timers internal
72: <4> 12/18/97 BT Changes to dispatch table. Add notify and tickle
73: <3> 12/17/97 CJK Change to use USBDeviceDefines for Class & Subclass values.
74: <2> 12/17/97 BT Add file header
75: <1> 12/17/97 BT First time checkin
76: */
77:
78: #include <Types.h>
79: #include <Devices.h>
80: #include <DriverServices.h>
81:
82: #include <USB.h>
83: #include "hub.h"
84: #include "HubClassVersion.h"
85:
86: //------------------------------------------------------
87: //
88: // Protos
89: //
90: //------------------------------------------------------
91: static OSStatus hubDriverValidateHW(USBDeviceRef device, USBDeviceDescriptorPtr pDesc);
92: static OSStatus hubDriverInitialize(USBDeviceRef device, USBDeviceDescriptorPtr pDesc,
93: UInt32 busPowerAvailable);
94: static OSStatus hubDriverInitInterface(
95: UInt32 interfaceNum,
96: USBInterfaceDescriptorPtr pInterface,
97: USBDeviceDescriptorPtr pDevice,
98: USBDeviceRef device);
99: static OSStatus hubDriverFinalize(USBDeviceRef device, USBDeviceDescriptorPtr pDesc);
100: static OSStatus hubDriverNotifyProc(UInt32 notification, void *pointer, UInt32 refcon);
101:
102: //------------------------------------------------------
103: //
104: // This is the driver description structure that the expert looks for first.
105: // If it's here, the information within is used to match the driver
106: // to the device whose descriptor was passed to the expert.
107: // Information in this block is also used by the expert when an
108: // entry is created in the Name Registry.
109: //
110: //------------------------------------------------------
111: USBDriverDescription TheUSBDriverDescription =
112: {
113: // Signature info
114: kTheUSBDriverDescriptionSignature,
115: kInitialUSBDriverDescriptor,
116:
117: // Device Info
118: 1452, // vendor = Apple (1452 decimal, swapped)
119: 0x8001, // product = CMD chip
120: 0x0001, // version of product = 1.00 (swapped)
121: 0, // protocol = not device specific
122:
123: // Interface Info (* I don't think this would always be required...*)
124: 0, // Configuration Value
125: 0, // Interface Number
126: 0, // Interface Class
127: 0, // Interface SubClass
128: 0, // Interface Protocol
129:
130:
131: // Driver Info
132: "\pUSBHub1Apple", // Driver name for Name Registry
133: kUSBHubClass, // Device Class (from USBDeviceDefines.h)
134: kUSBHubSubClass, // Device Subclass
135: kHUBHexMajorVers,
136: kHUBHexMinorVers,
137: kHUBCurrentRelease,
138: kHUBReleaseStage, // version of driver
139:
140: // Driver Loading Info
141: 0 //kUSBDoNotMatchGenericDevice // Flags (currently undefined)
142: };
143:
144:
145: USBClassDriverPluginDispatchTable TheClassDriverPluginDispatchTable =
146: {
147: kClassDriverPluginVersion, // Version of this structure
148: hubDriverValidateHW, // Hardware Validation Procedure
149: hubDriverInitialize, // Initialization Procedure
150: hubDriverInitInterface, // Interface Initialization Procedure
151: hubDriverFinalize, // Finalization Procedure
152: hubDriverNotifyProc, // Driver Notification Procedure
153: };
154:
155: // Hardware Validation
156: // Called upon load by Expert
157: OSStatus hubDriverValidateHW(USBDeviceRef device, USBDeviceDescriptor *desc)
158: {
159: device = 0;
160: desc = 0;
161: return (OSStatus)noErr;
162: }
163:
164: // Initialization function
165: // Called upon load by Expert
166: static OSStatus hubDriverInitialize(USBDeviceRef device, USBDeviceDescriptorPtr pDesc,
167: UInt32 busPowerAvailable)
168: {
169: HubDriverEntry(device, pDesc, busPowerAvailable);
170: return (OSStatus)noErr;
171: }
172:
173:
174: // hubDriverInitInterface function
175: // Called to initialize driver for an individual interface - either by expert or
176: // internally by driver
177: OSStatus hubDriverInitInterface(
178: UInt32 interfaceNum,
179: USBInterfaceDescriptor *interfaceDesc,
180: USBDeviceDescriptor *deviceDesc,
181: USBDeviceRef device)
182: {
183: interfaceNum = 0;
184: interfaceDesc = 0;
185: deviceDesc = 0;
186: device = 0;
187:
188: return (OSStatus)noErr;
189: }
190:
191:
192: // Termination function
193: // Called by Expert when driver is being shut down
194: OSStatus hubDriverFinalize(USBDeviceRef device, USBDeviceDescriptorPtr pDesc)
195: {
196: pDesc = 0; // Not used, saves message
197: return(killHub(device));
198: }
199:
200:
201: static OSStatus hubDriverNotifyProc(UInt32 notification, void *pointer, UInt32 refcon)
202: {
203: OSStatus status = noErr;
204:
205: switch (notification)
206: {
207: case kNotifyDriverBeingRemoved:
208: break;
209: case kNotifyHubEnumQuery:
210: return(HubAreWeFinishedYet());
211: break;
212: default:
213: break;
214:
215:
216: } // switch
217:
218: pointer = 0;
219: refcon = 0;
220: return(status);
221: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.