|
|
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: USBPriv.i ! 27: ! 28: Contains: Private defines & SPI for USB services ! 29: ! 30: Version: ! 31: ! 32: Written by: Barry Twycross ! 33: ! 34: Copyright: (c) 1998 by Apple Computer, Inc., all rights reserved. ! 35: ! 36: File Ownership: ! 37: ! 38: DRI: Craig Keithley ! 39: ! 40: Other Contact: ! 41: ! 42: Technology: I/O ! 43: ! 44: Writers: ! 45: ! 46: (DRF) Dave Falkenburg ! 47: (TC) Tom Clark ! 48: (GG) Guillermo Gallegos ! 49: (BT) Barry Twycross ! 50: (CJK) Craig Keithley ! 51: (DF) David Ferguson ! 52: ! 53: ! 54: Change History (most recent first): ! 55: ! 56: <28> 9/9/98 BT Fix size of refcon in Isoc transfers ! 57: <27> 9/4/98 TC Add definition for 1.0 version of DriverNotifyProc. ! 58: <26> 9/3/98 GG Another Interface tweak. ! 59: <25> 9/3/98 GG Fixed Isochronous interface. ! 60: <24> 8/31/98 GG Changed Isochronous interest. Bumped version Number to 3. Added ! 61: Isoc Callback. ! 62: <23> 8/12/98 BT Move root hub into UIM again. ! 63: <22> 8/11/98 BT Fix semi-colon ! 64: <21> 8/11/98 BT Add UIM dispatch table version ! 65: <20> 7/11/98 TC Back out <USB18>. ! 66: <19> 6/30/98 BT Add hub defs, the hub driver and root hub needs ! 67: <18> 6/30/98 BT Move RH sim to UIM ! 68: <17> 6/15/98 DRF Added definitions for USB ExpandMem contents. ! 69: <16> 6/10/98 CJK add uslGetDeviceRefByID prototype ! 70: <15> 6/5/98 TC Move declaration of uxBusRef to USB.i, then change it to ! 71: USBBusRef. ! 72: <14> 6/4/98 DRF In UIMInitialize & UIMFinalize, add a Ptr to facilitate ! 73: handing-off global state when performing replacement. ! 74: <13> 6/3/98 GG Fixed mistake with comments. ! 75: <12> 6/3/98 GG Add interfaces for UIMFrameCount, IsochEndpointCreate, and ! 76: IsochTransfer ! 77: <11> 6/2/98 DRF Added params to UIMInitialize & UIMFinalize for replacement. ! 78: Also made a few interfacer tweaks for typedef-ed structs. ! 79: <10> 5/20/98 DF add USLPolledProcessDoneQueue prototype ! 80: <9> 5/20/98 TC Include definition USBRegisterExpertNotification. ! 81: <8> 5/5/98 CJK Correct someone's misspelling of my last name. ! 82: <7> 5/5/98 GG Change Buffersize from short to unsigned long in ! 83: uimBulkTransferProc. ! 84: <6> 4/29/98 BT Move common defines to here ! 85: <5> 4/23/98 BT Add reset portsuspend change ! 86: <4> 4/15/98 BT Add over current change reset ! 87: <3> 4/11/98 CJK add back in OHCIPollDoneQueue dispatch table entry. ! 88: <2> 4/9/98 DF Update to for changes made to Neptune 4/8 ! 89: <1> 4/8/98 DF first checked in ! 90: ! 91: ! 92: ! 93: */ ! 94: ! 95: #pragma once ! 96: ! 97: #include "mactypes.h" ! 98: #include "nameregistry.h" ! 99: #include "USB.h" ! 100: ! 101: #pragma push ! 102: ! 103: //typedef void (*USBCtlCallbackFn)(struct USBPB *pb); ! 104: //typedef void (*USBDevCtlCallbackFn)(struct USBPB *pb); ! 105: #define extern ! 106: ! 107: extern void USBIdleTask(void); ! 108: ! 109: extern OSStatus USBAddBus(void *regEntry,void *UIM,USBBusRef bus); ! 110: ! 111: extern OSStatus USBRemoveBus(USBBusRef bus); ! 112: ! 113: extern OSStatus USBServicesInitialise(void * exProc); ! 114: ! 115: extern void USBServicesFinalise(void); ! 116: ! 117: extern OSStatus USBRegisterExpertNotification (ExpertNotificationProcPtr pExpertNotify); ! 118: ! 119: extern OSStatus USBServicesGetVersion(UInt32 ID, VersRec *vers, UInt32 versSize); ! 120: ! 121: extern OSStatus USLPolledProcessDoneQueue(void); ! 122: ! 123: extern USBDeviceRef uslGetDeviceRefByID(unsigned short deviceID, USBBusRef bus); ! 124: ! 125: ! 126: /* ! 127: For casting purposes when we are calling a driver compiled with 1.0 version ! 128: of the driver dispatch table. ! 129: */ ! 130: typedef extern OSStatus (*ONE_OH_USBDDriverNotifyProcPtr) (USBDriverNotification notification, void *pointer); ! 131: ! 132: /* IMPORTANT NOTES! ! 133: This file contains some OHCI specific functions & data structures, which are ! 134: currently required because the USL performs some root hub functions. When the ! 135: root hub simulation in the UIM is fully functional, the OHCI or UHCI specific ! 136: elements should be removed from this file (and placed in the OHCIUIM.H file) ! 137: */ ! 138: ! 139: // Taken out of OHCIUIM.h and uslUIMInterface.c ! 140: enum{ ! 141: EDDeleteErr = -14, ! 142: bandWidthFullErr = -15, ! 143: returnedErr = -16 ! 144: }; ! 145: ! 146: ! 147: typedef UInt8 uslBusRef; ! 148: // Shouldn't this be in USL.H? ! 149: ! 150: struct uslRootHubDescriptor ! 151: { ! 152: ! 153: short numPorts; ! 154: Boolean powerSwitching; /* does it have it? */ ! 155: Boolean gangedSwitching; /* if yes, it is ganged */ ! 156: ! 157: Boolean compoundDevice; ! 158: Boolean overCurrent; /* does it have it? */ ! 159: Boolean globalOverCurrent; /* if yes is it global */ ! 160: UInt8 reserved; /* for alignment */ ! 161: ! 162: UInt8 portFlags[32]; /* Device removable and ganged power flags */ ! 163: ! 164: }; ! 165: ! 166: typedef struct uslRootHubDescriptor *uslRootHubDescriptorPtr; ! 167: ! 168: struct uslRootHubPortStatus ! 169: { ! 170: UInt16 portFlags; /* Port status flags */ ! 171: UInt16 portChangeFlags; /* Port changed flags */ ! 172: }; ! 173: ! 174: typedef struct uslRootHubPortStatus *uslRootHubPortStatusPtr; ! 175: ! 176: ! 177: typedef extern OSStatus (*OHCIGetRootDescriptorPtr)( ! 178: uslBusRef bus, ! 179: uslRootHubDescriptorPtr descr); ! 180: ! 181: typedef extern OSStatus (*OHCIGetInterruptStatusPtr)( ! 182: uslBusRef bus, ! 183: UInt32 *status); ! 184: ! 185: typedef extern OSStatus (*OHCIClearInterruptStatusPtr)( ! 186: uslBusRef bus, ! 187: UInt32 status); ! 188: ! 189: typedef extern OSStatus (*OHCIGetRhStatusPtr)( ! 190: uslBusRef bus, ! 191: UInt32 *status); ! 192: ! 193: ! 194: typedef extern OSStatus (*OHCIRootHubResetChangeConnectionPtr)( ! 195: uslBusRef bus, ! 196: short port); ! 197: ! 198: typedef extern OSStatus (*OHCIRootHubResetResetChangePtr)( ! 199: uslBusRef bus, ! 200: short port); ! 201: ! 202: typedef extern OSStatus (*OHCIRootHubResetSuspendChangePtr)( ! 203: uslBusRef bus, ! 204: short port); ! 205: ! 206: typedef extern OSStatus (*OHCIRootHubResetEnableChangePtr)( ! 207: uslBusRef bus, ! 208: short port); ! 209: ! 210: typedef extern OSStatus (*OHCIRootHubResetOverCurrentChangePtr)( ! 211: uslBusRef bus, ! 212: short port); ! 213: ! 214: typedef extern OSStatus (*OHCIRootHubGetPortStatusPtr)( ! 215: uslBusRef bus, ! 216: short port, ! 217: uslRootHubPortStatusPtr portStatus); ! 218: ! 219: typedef extern void (*OHCIPollRootHubSimPtr)( ! 220: uslBusRef bus); ! 221: ! 222: typedef extern OSStatus (*OHCIResetRootHubPtr)( ! 223: uslBusRef bus); ! 224: ! 225: typedef extern OSStatus (*OHCIRootHubPortSuspendPtr)( ! 226: uslBusRef bus, ! 227: short port, ! 228: Boolean on); ! 229: ! 230: typedef extern OSStatus (*OHCIRootHubPowerPtr)( ! 231: uslBusRef bus, ! 232: Boolean on); ! 233: ! 234: typedef extern OSStatus(* OHCIRootHubResetPortPtr)( ! 235: uslBusRef bus, ! 236: short port); ! 237: ! 238: typedef extern OSStatus (*OHCIRootHubPortEnablePtr)( ! 239: uslBusRef bus, ! 240: short port, ! 241: Boolean on); ! 242: ! 243: typedef extern OSStatus (*OHCIRootHubPortPowerPtr)( ! 244: uslBusRef bus, ! 245: short port, ! 246: Boolean on); ! 247: ! 248: ! 249: //other Functions ! 250: typedef extern OSStatus (*OHCIProcessDoneQueuePtr)(void); ! 251: ! 252: typedef extern UInt64 (*UIMGetCurrentFrameNumberPtr)(void); ! 253: ! 254: ! 255: typedef extern void (*CallBackFuncPtr) (long lParam, OSStatus status, short s16Param); ! 256: typedef extern void (*IsocCallBackFuncPtr) (long lParam, OSStatus status, USBIsocFrame *pFrames); ! 257: //typedef CallBackFunc *CallBackFuncPtr; ! 258: ! 259: typedef void *UIMAbortControlEndpointProcPtr; ! 260: typedef void *UIMEnableControlEndpointProcPtr; ! 261: typedef void *UIMDisableControlEndpointProcPtr; ! 262: typedef void *UIMAbortBulkEndpointProcPtr; ! 263: typedef void *UIMEnableBulkEndpointProcPtr; ! 264: typedef void *UIMDisableBulkEndpointProcPtr; ! 265: typedef void *UIMDeleteInterruptEndPointProcPtr; ! 266: typedef void *UIMAbortInterruptEndpointProcPtr; ! 267: typedef void *UIMEnableInterruptEndpointProcPtr; ! 268: typedef void *UIMDisableInterruptEndpointProcPtr; ! 269: typedef void *UIMDeleteIsochEndPointProcPtr; ! 270: typedef void *UIMAbortIsochEndpointProcPtr; ! 271: typedef void *UIMEnableIsochEndpointProcPtr; ! 272: typedef void *UIMDisableIsochEndpointProcPtr; ! 273: ! 274: typedef extern OSStatus (*UIMInitializeProcPtr)(RegEntryIDPtr UIMregEntryID, Boolean replacingOld, Ptr savedState); ! 275: ! 276: typedef extern OSStatus (*UIMFinalizeProcPtr)(Boolean beingReplaced,Ptr * savedStatePtr); ! 277: ! 278: typedef extern OSStatus (*UIMCreateControlEndpointProcPtr)( ! 279: UInt8 functionNumber, ! 280: UInt8 endpointNumber, ! 281: UInt16 maxPacketSize, ! 282: UInt8 speed); ! 283: ! 284: typedef extern OSStatus (*UIMCreateBulkEndpointProcPtr)( ! 285: UInt8 functionNumber, ! 286: UInt8 endpointNumber, ! 287: UInt8 direction, ! 288: UInt8 maxPacketSize); ! 289: ! 290: typedef extern OSStatus (*UIMCreateControlTransferProcPtr)( ! 291: UInt32 refcon, ! 292: CallBackFuncPtr handler, ! 293: UInt32 CBP, ! 294: Boolean bufferRounding, ! 295: short functionNumber, ! 296: short endpointNumber, ! 297: short bufferSize, ! 298: short direction); ! 299: ! 300: typedef extern OSStatus (*UIMDeleteControlEndPointProcPtr)( ! 301: short functionNumber, ! 302: short endpointNumber); ! 303: ! 304: typedef extern OSStatus (*UIMDeleteBulkEndPointProcPtr)( ! 305: short functionNumber, ! 306: short endpointNumber, ! 307: short direction); ! 308: ! 309: typedef extern OSStatus (*UIMCreateBulkTransferProcPtr)( ! 310: UInt32 refcon, ! 311: CallBackFuncPtr handler, ! 312: UInt32 CBP, ! 313: Boolean bufferRounding, ! 314: short functionNumber, ! 315: short endpointNumber, ! 316: UInt32 bufferSize, ! 317: short direction); ! 318: ! 319: typedef extern OSStatus (*UIMClearEndPointStallProcPtr)( ! 320: short functionNumber, ! 321: short endpointNumber, ! 322: short direction); ! 323: ! 324: typedef extern OSStatus (*UIMCreateInterruptEndpointProcPtr)( ! 325: short functionAddress, ! 326: short endpointNumber, ! 327: short speed, ! 328: UInt16 maxPacketSize, ! 329: short pollingRate, ! 330: UInt32 reserveBandwidth); ! 331: ! 332: typedef extern OSStatus (*UIMCreateInterruptTransferProcPtr)( ! 333: short functionNumber, ! 334: short endpointNumber, ! 335: UInt32 refcon, ! 336: CallBackFuncPtr handler, ! 337: UInt32 CBP, ! 338: Boolean bufferRounding, ! 339: short bufferSize); ! 340: ! 341: typedef extern OSStatus (*UIMAbortEndpointProcPtr)( ! 342: short functionNumber, ! 343: short endpointNumber, ! 344: short direction); ! 345: ! 346: typedef extern OSStatus (*UIMDeleteEndpointProcPtr)( ! 347: short functionNumber, ! 348: short endpointNumber, ! 349: short direction); ! 350: ! 351: typedef extern OSStatus (*UIMCreateIsochEndpointProcPtr)( ! 352: short functionAddress, ! 353: short endpointNumber, ! 354: UInt32 maxPacketSize, ! 355: UInt8 direction); ! 356: ! 357: typedef extern OSStatus (*UIMCreateIsochTransferProcPtr)( ! 358: short functionAddress, ! 359: short endpointNumber, ! 360: UInt32 refcon, ! 361: UInt8 direction, ! 362: IsocCallBackFuncPtr pIsochHandler, ! 363: UInt64 frameStart, ! 364: UInt32 pBufferStart, ! 365: UInt32 frameCount, ! 366: USBIsocFrame *pFrames); ! 367: ! 368: enum{ ! 369: kUIMPluginTableVersion = 3 // BT 11Aug98, bump up with root hub changes ! 370: }; ! 371: ! 372: struct UIMPluginDispatchTable ! 373: { ! 374: UInt32 pluginVersion; ! 375: UIMInitializeProcPtr uimInitializeProc; ! 376: UIMFinalizeProcPtr uimFinalizeProc; ! 377: UIMCreateControlEndpointProcPtr uimCreateControlEndpointProc; ! 378: UIMDeleteControlEndPointProcPtr uimDeleteControlEndpointProc; ! 379: UIMCreateControlTransferProcPtr uimCreateControlTransferProc; ! 380: UIMAbortControlEndpointProcPtr uimAbortControlEndpointProc; ! 381: UIMEnableControlEndpointProcPtr uimEnableControlEndpointProc; ! 382: UIMDisableControlEndpointProcPtr uimDisableControlEndpointProc; ! 383: UIMCreateBulkEndpointProcPtr uimCreateBulkEndpointProc; ! 384: UIMDeleteBulkEndPointProcPtr uimDeleteBulkEndpointProc; ! 385: UIMCreateBulkTransferProcPtr uimCreateBulkTransferProc; ! 386: UIMAbortBulkEndpointProcPtr uimAbortBulkEndpointProc; ! 387: UIMEnableBulkEndpointProcPtr uimEnableBulkEndpointProc; ! 388: UIMDisableBulkEndpointProcPtr uimDisableBulkEndpointProc; ! 389: UIMCreateInterruptEndpointProcPtr uimCreateInterruptEndpointProc; ! 390: UIMDeleteInterruptEndPointProcPtr uimDeleteInterruptEndpointProc; ! 391: UIMCreateInterruptTransferProcPtr uimCreateInterruptTransferProc; ! 392: UIMAbortInterruptEndpointProcPtr uimAbortInterruptEndpointProc; ! 393: UIMEnableInterruptEndpointProcPtr uimEnableInterruptEndpointProc; ! 394: UIMDisableInterruptEndpointProcPtr uimDisableInterruptEndpointProc; ! 395: UIMCreateIsochEndpointProcPtr uimCreateIsochEndpointProc; ! 396: UIMDeleteIsochEndPointProcPtr uimDeleteIsochEndpointProc; ! 397: UIMCreateIsochTransferProcPtr uimCreateIsochTransferProc; ! 398: UIMAbortIsochEndpointProcPtr uimAbortIsochEndpointProc; ! 399: UIMEnableIsochEndpointProcPtr uimEnableIsochEndpointProc; ! 400: UIMDisableIsochEndpointProcPtr uimDisableIsochEndpointProc; ! 401: UIMAbortEndpointProcPtr uimAbortEndpointProc; ! 402: UIMDeleteEndpointProcPtr uimDeleteEndpointProc; ! 403: /* Need this for error recovery */ ! 404: UIMClearEndPointStallProcPtr uimClearEndPointStallProc; ! 405: ! 406: OHCIPollRootHubSimPtr uimPollRootHubSim; ! 407: OHCIResetRootHubPtr uimResetRootHubProc; ! 408: OHCIProcessDoneQueuePtr uimProcessDoneQueueProc; ! 409: UIMGetCurrentFrameNumberPtr uimGetCurrentFrameNumberProc; ! 410: ! 411: }; ! 412: ! 413: typedef struct UIMPluginDispatchTable *UIMPluginDispatchTablePtr; ! 414: ! 415: // extern UIMPluginDispatchTable ThePluginDispatchTable; ! 416: ! 417: // Hub stuff, for root hub ! 418: ! 419: ! 420: ! 421: enum{ ! 422: /* Byte offsets */ ! 423: bmRqType = 0, ! 424: bUsedFlag = bmRqType, ! 425: bRequest, ! 426: /* Word offsets */ ! 427: wValue =1, ! 428: wIndex, ! 429: wLength ! 430: }; ! 431: ! 432: union setupPacket{ ! 433: UInt8 byte[8]; ! 434: UInt16 word[4]; ! 435: }; ! 436: ! 437: typedef union setupPacket setupPacket; ! 438: ! 439: enum{ ! 440: kUSBRqDirnShift = 7, ! 441: kUSBRqDirnMask = 1, ! 442: ! 443: kUSBRqTypeShift = 5, ! 444: kUSBRqTypeMask = 3, ! 445: ! 446: kUSBRqRecipientMask = 0X1F ! 447: }; ! 448: ! 449: ! 450: ! 451: /*************************************************************************** ! 452: ! 453: Proposal for Product ID in Apple USB devices. ! 454: ! 455: Barry Twycross 25Jan98 ! 456: ! 457: ! 458: Background. ! 459: ! 460: All USB devices have a device descriptor which tells the system ! 461: basic information about the device. Amoung the information contained ! 462: therein is a Vendor and a Product code. The Vendor code is assigned ! 463: by the USB implimenters forum, for Apple this is 1452 (decimal) ! 464: 0x5AC (hex). ! 465: ! 466: The product code is left for the implimentor to use as they see fit. ! 467: The product code along with the vendor ID is the highest priority way ! 468: of matching a device to a driver. A driver can claim to be the best ! 469: driver for a particular product by specifying mathcing product/vendor ! 470: codes. ! 471: ! 472: There appears to be no one responsible for assigning these codes, so ! 473: the USB group is making this suggestion in an attempt to impose order ! 474: before chaos reigns. ! 475: ! 476: ! 477: Implimentation. ! 478: ! 479: The Product code in a USB device is a 16 bit field. It is transmitted ! 480: across the USB in Intel byte ordering (swapped from the usual Mac way ! 481: of doing things). This spec uses the logical value of the field. That ! 482: it has to be byte swapped to be decoded sensibly after transmission ! 483: across the bus. ! 484: ! 485: These proposals only apply to devices which have the Apple Vendor ID ! 486: code. ! 487: ! 488: Proposal. ! 489: ! 490: It is proposed that the 16bit Product ID value (expressed in hex) is ! 491: decomposed as follows: ! 492: ! 493: 0xRTNN ! 494: ! 495: There is a 4 bit 'R' (range) field ! 496: There is a 4 bit 'T' (type) field ! 497: There is an 8 bit 'NN' field, which finally specifies a product within a type. ! 498: ! 499: Range (R) ! 500: ! 501: This field specifies the party responsible for naming this series of ! 502: devices. ! 503: ! 504: In general it also specifies a device as internal to a system, or an ! 505: external, standalone, peripheral. ! 506: ! 507: 0-7 Is reserved for external devices. ! 508: 8-F is reserved for internal devices. ! 509: ! 510: Each of the ranges is further farmed out to a responsible entity to ! 511: define the sub fields. Currently assigned are: ! 512: ! 513: 0: Input devices (Harrold Welch). ! 514: 8: USB team (Barry Twycross) ! 515: ! 516: ! 517: Type (T) ! 518: ! 519: This field specifies the type of device within a range of devices. ! 520: The values are specified by the party responsible for the range. ! 521: ! 522: Currently assigned are: ! 523: ! 524: R=0, T specifies a device with this equivalent ADB ID. ! 525: T = 2: Keyboard ! 526: T = 3: Mouse ! 527: ! 528: R=8 ! 529: T = 0: Root hub in a CPU. ! 530: T = 1: Non-root hub in a CPU ! 531: ! 532: ! 533: Product (NN) ! 534: ! 535: This field finally specifies which particular device or a type the ! 536: product actually is. It is expected the first product will be numbered ! 537: 1, and further products are numbered sequentially. ! 538: ! 539: **********************************************************************/ ! 540: ! 541: ! 542: //Known assignments: ! 543: ! 544: //These device IDs are currently known to be assigned: ! 545: ! 546: enum{ ! 547: kAppleVendorID = 0x05AC, // Assigned by USB-if ! 548: ! 549: // 0xRTNN Product ! 550: // These are Harold Welch's ADB device equivalents ! 551: kPrdKBCosmoAnsi = 0x0201, // Ansi Cosmo keyboard ! 552: kPrdKBCosmoIso = 0x0202, // Iso Cosmo keyboard ! 553: kPrdKBCosmoJis = 0x0203, // Jis Cosmo keyboard ! 554: kPrdMseRudi = 0x0301, // Rudi mouse ! 555: // These are the USB root hub simulations ! 556: kPrdRootHubCMD = 0x8001, // CMD chip root hub ! 557: kPrdRootHubOPTI = 0x8002, // Opti chip root hub ! 558: kPrdRootHubLucent = 0x8003 // Lucent chip root hub. ! 559: }; ! 560: ! 561: ! 562: /*************************************************************************** ! 563: ! 564: USBExpandMemGlobals: a structure that will eventually be more important, ! 565: but for now, we use this to keep track of the connection ID of the USB ! 566: FamilyExpertLib so that we can cleanly shut it down from a file-based ! 567: version of USB Expert. ! 568: ! 569: ****************************************************************************/ ! 570: ! 571: struct USBExpandMemGlobals ! 572: { ! 573: UInt32 version; ! 574: CFragConnectionID expertConnectionID; ! 575: }; ! 576: typedef struct USBExpandMemGlobals *USBExpandMemGlobalsPtr; ! 577: ! 578: enum ! 579: { ! 580: kUSBExpandMemVersionOne = 0x0100, ! 581: kUSBExpandMemCurVersion = kUSBExpandMemVersionOne ! 582: }; ! 583: ! 584: #pragma pop ! 585: #undef extern
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.