Annotation of kernel/bsd/dev/ppc/drvUSBCMD/USB.h, revision 1.1

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:           USB.h
        !            27:  
        !            28:        Contains:       Public API for USB Services Library (and associated components)
        !            29:  
        !            30:        Version:        
        !            31:  
        !            32:        DRI:            Craig Keithley
        !            33:  
        !            34:        Copyright:      � 1998 by Apple Computer, Inc., all rights reserved.
        !            35:  
        !            36:        Warning:        *** APPLE INTERNAL USE ONLY ***
        !            37:                                This file may contain unreleased API's
        !            38:  
        !            39:        BuildInfo:      Built by:                       Naga Pappireddi
        !            40:                                With Interfacer:        3.0d9 (PowerPC native)
        !            41:                                From:                           USB.i
        !            42:                                        Revision:               71
        !            43:                                        Dated:                  10/29/98
        !            44:                                        Last change by: TC
        !            45:                                        Last comment:   [2280793]  Add constant kUSBDeviceDescriptorLength.
        !            46:  
        !            47:        Bugs:           Report bugs to Radar component "System Interfaces", "Latest"
        !            48:                                List the version information (from above) in the Problem Description.
        !            49:  
        !            50: */
        !            51: #ifndef __USB__
        !            52: #define __USB__
        !            53: 
        !            54: #ifndef __MACTYPES__
        !            55: #include "mactypes.h"
        !            56: #endif
        !            57: #ifndef __NAMEREGISTRY__
        !            58: //#include <NameRegistry.h>
        !            59: #endif
        !            60: #ifndef __CODEFRAGMENTS__
        !            61: //#include <CodeFragments.h>
        !            62: #endif
        !            63: #ifndef __DEVICES__
        !            64: //#include <Devices.h>
        !            65: #endif
        !            66: 
        !            67: 
        !            68: 
        !            69: #if PRAGMA_ONCE
        !            70: #pragma once
        !            71: #endif
        !            72: 
        !            73: #ifdef __cplusplus
        !            74: extern "C" {
        !            75: #endif
        !            76: 
        !            77: #if PRAGMA_IMPORT
        !            78: #pragma import on
        !            79: #endif
        !            80: 
        !            81: #if PRAGMA_STRUCT_ALIGN
        !            82:        #pragma options align=mac68k
        !            83: #elif PRAGMA_STRUCT_PACKPUSH
        !            84:        #pragma pack(push, 2)
        !            85: #elif PRAGMA_STRUCT_PACK
        !            86:        #pragma pack(2)
        !            87: #endif
        !            88: 
        !            89: /* ************* Constants ************* */
        !            90: 
        !            91: enum {
        !            92:        kUSBNoErr                                       = 0,
        !            93:        kUSBNoTran                                      = 0,
        !            94:        kUSBNoDelay                                     = 0,
        !            95:        kUSBPending                                     = 1,                                                    /* */
        !            96:                                                                                                                                /* USB assigned error numbers in range -6900 .. -6999 */
        !            97:        kUSBBaseError                           = -7000,                                                /* */
        !            98:                                                                                                                                /* USB Services Errors */
        !            99:        kUSBInternalErr                         = -6999,                                                /* Internal error */
        !           100:        kUSBUnknownDeviceErr            = -6998,                                                /*  device ref not recognised */
        !           101:        kUSBUnknownPipeErr                      = -6997,                                                /*  Pipe ref not recognised */
        !           102:        kUSBTooManyPipesErr                     = -6996,                                                /*  Too many pipes */
        !           103:        kUSBIncorrectTypeErr            = -6995,                                                /*  Incorrect type */
        !           104:        kUSBRqErr                                       = -6994,                                                /*  Request error */
        !           105:        kUSBUnknownRequestErr           = -6993,                                                /*  Unknown request */
        !           106:        kUSBTooManyTransactionsErr      = -6992,                                                /*  Too many transactions */
        !           107:        kUSBAlreadyOpenErr                      = -6991,                                                /*  Already open */
        !           108:        kUSBNoDeviceErr                         = -6990,                                                /*  No device */
        !           109:        kUSBDeviceErr                           = -6989,                                                /*  Device error */
        !           110:        kUSBOutOfMemoryErr                      = -6988,                                                /*  Out of memory */
        !           111:        kUSBNotFound                            = -6987,                                                /*  Not found */
        !           112:        kUSBPBVersionError                      = -6986,                                                /*  Wrong pbVersion */
        !           113:        kUSBPBLengthError                       = -6985,                                                /*  pbLength too small */
        !           114:        kUSBCompletionError                     = -6984,                                                /*  no completion routine specified */
        !           115:        kUSBFlagsError                          = -6983,                                                /*  Unused flags not zeroed */
        !           116:        kUSBAbortedError                        = -6982,                                                /*  Pipe aborted */
        !           117:        kUSBNoBandwidthError            = -6981,                                                /*  Not enough bandwidth available */
        !           118:        kUSBPipeIdleError                       = -6980,                                                /*  Pipe is Idle, it will not accept transactions */
        !           119:        kUSBPipeStalledError            = -6979,                                                /*  Pipe has stalled, error needs to be cleared */
        !           120:        kUSBUnknownInterfaceErr         = -6978,                                                /*  Interface ref not recognised */
        !           121:        kUSBDeviceBusy                          = -6977,                                                /*  Device is already being configured */
        !           122:        kUSBDevicePowerProblem          = -6976,                                                /*  Device has a power problem */
        !           123:                                                                                                                                /* */
        !           124:                                                                                                                                /* USB Manager Errors */
        !           125:        kUSBBadDispatchTable            = -6950,                                                /* Improper driver dispatch table */
        !           126:        kUSBUnknownNotification         = -6949,                                                /* Notification type not defined */
        !           127:        kUSBQueueFull                           = -6948,                                                /* Internal queue maxxed */
        !           128:                                                                                                                                /* */
        !           129:                                                                                                                                /* Hardware Errors */
        !           130:                                                                                                                                /* Note pipe stalls are communication */
        !           131:                                                                                                                                /* errors. The affected pipe can not */
        !           132:                                                                                                                                /* be used until USBClearPipeStallByReference  */
        !           133:                                                                                                                                /* is used */
        !           134:                                                                                                                                /* kUSBEndpointStallErr is returned in */
        !           135:                                                                                                                                /* response to a stall handshake */
        !           136:                                                                                                                                /* from a device. The device has to be */
        !           137:                                                                                                                                /* cleared before a USBClearPipeStallByReference */
        !           138:                                                                                                                                /* can be used */
        !           139:        kUSBLinkErr                                     = -6916,
        !           140:        kUSBCRCErr                                      = -6915,                                                /*  Pipe stall, bad CRC */
        !           141:        kUSBBitstufErr                          = -6914,                                                /*  Pipe stall, bitstuffing */
        !           142:        kUSBDataToggleErr                       = -6913,                                                /*  Pipe stall, Bad data toggle */
        !           143:        kUSBEndpointStallErr            = -6912,                                                /*  Device didn't understand */
        !           144:        kUSBNotRespondingErr            = -6911,                                                /*  Pipe stall, No device, device hung */
        !           145:        kUSBPIDCheckErr                         = -6910,                                                /*  Pipe stall, PID CRC error */
        !           146:        kUSBWrongPIDErr                         = -6909,                                                /*  Pipe stall, Bad or wrong PID */
        !           147:        kUSBOverRunErr                          = -6908,                                                /*  Packet too large or more data than buffer */
        !           148:        kUSBUnderRunErr                         = -6907,                                                /*  Less data than buffer */
        !           149:        kUSBRes1Err                                     = -6906,
        !           150:        kUSBRes2Err                                     = -6905,
        !           151:        kUSBBufOvrRunErr                        = -6904,                                                /*  Host hardware failure on data in, PCI busy? */
        !           152:        kUSBBufUnderRunErr                      = -6903,                                                /*  Host hardware failure on data out, PCI busy? */
        !           153:        kUSBNotSent1Err                         = -6902,                                                /*  Transaction not sent */
        !           154:        kUSBNotSent2Err                         = -6901                                                 /*  Transaction not sent */
        !           155: };
        !           156: 
        !           157: 
        !           158: enum {
        !           159:                                                                                                                                /* Flags */
        !           160:        kUSBTaskTimeFlag                        = 1,
        !           161:        kUSBHubPower                            = 2,
        !           162:        kUSBPowerReset                          = 4,
        !           163:        kUSBHubReaddress                        = 8,
        !           164:        kUSBAddressRequest                      = 16
        !           165: };
        !           166: 
        !           167: 
        !           168: enum {
        !           169:                                                                                                                                /* Hub messages */
        !           170:        kUSBHubPortResetRequest         = 1
        !           171: };
        !           172: 
        !           173: /* ************* types ************* */
        !           174: 
        !           175: typedef SInt32                                                         USBReference;
        !           176: typedef USBReference                                   USBDeviceRef;
        !           177: typedef USBReference                                   USBInterfaceRef;
        !           178: typedef USBReference                                   USBPipeRef;
        !           179: typedef USBReference                                   USBBusRef;
        !           180: typedef UInt32                                                         USBPipeState;
        !           181: typedef UInt32                                                         USBCount;
        !           182: typedef UInt32                                                         USBFlags;
        !           183: typedef UInt8                                                  USBRequest;
        !           184: typedef UInt8                                                  USBDirection;
        !           185: typedef UInt8                                                  USBRqRecipient;
        !           186: typedef UInt8                                                  USBRqType;
        !           187: typedef UInt16                                                         USBRqIndex;
        !           188: typedef UInt16                                                         USBRqValue;
        !           189: 
        !           190: 
        !           191: 
        !           192: struct usbControlBits {
        !           193:        UInt8                                                   BMRequestType;
        !           194:        UInt8                                                   BRequest;
        !           195:        USBRqValue                                              WValue;
        !           196:        USBRqIndex                                              WIndex;
        !           197:        UInt16                                                  reserved4;
        !           198: };
        !           199: typedef struct usbControlBits                  usbControlBits;
        !           200: 
        !           201: struct USBIsocFrame {
        !           202:        OSStatus                                                frStatus;
        !           203:        UInt16                                                  frReqCount;
        !           204:        UInt16                                                  frActCount;
        !           205: };
        !           206: typedef struct USBIsocFrame                            USBIsocFrame;
        !           207: 
        !           208: struct usbIsocBits {
        !           209:        USBIsocFrame *                                  FrameList;
        !           210:        UInt32                                                  NumFrames;
        !           211: };
        !           212: typedef struct usbIsocBits                             usbIsocBits;
        !           213: 
        !           214: struct usbHubBits {
        !           215:        UInt32                                                  Request;
        !           216:        UInt32                                                  Spare;
        !           217: };
        !           218: typedef struct usbHubBits                              usbHubBits;
        !           219: typedef struct USBPB                                   USBPB;
        !           220: typedef CALLBACK_API_C( void , USBCompletion )(USBPB *pb);
        !           221: 
        !           222: struct USBPB {
        !           223: 
        !           224:        void *                                                  qlink;
        !           225:        UInt16                                                  qType;
        !           226:        UInt16                                                  pbLength;
        !           227:        UInt16                                                  pbVersion;
        !           228:        UInt16                                                  reserved1;
        !           229:        UInt32                                                  reserved2;
        !           230: 
        !           231:        OSStatus                                                usbStatus;
        !           232:        USBCompletion                                   usbCompletion;
        !           233:        UInt32                                                  usbRefcon;
        !           234: 
        !           235:        USBReference                                    usbReference;
        !           236: 
        !           237:        void *                                                  usbBuffer;
        !           238:        USBCount                                                usbReqCount;
        !           239:        USBCount                                                usbActCount;
        !           240: 
        !           241:        USBFlags                                                usbFlags;
        !           242: 
        !           243:     union{
        !           244: 
        !           245:        usbControlBits                                  cntl;
        !           246:  
        !           247: 
        !           248:        usbIsocBits                                             isoc;
        !           249: 
        !           250:        usbHubBits                                              hub;
        !           251: 
        !           252:     }usb;
        !           253: 
        !           254:        UInt32                                                  usbFrame;
        !           255: 
        !           256:        UInt8                                                   usbClassType;
        !           257:        UInt8                                                   usbSubclass;
        !           258:        UInt8                                                   usbProtocol;
        !           259:        UInt8                                                   usbOther;
        !           260: 
        !           261:        UInt32                                                  reserved6;
        !           262:        UInt16                                                  reserved7;
        !           263:        UInt16                                                  reserved8;
        !           264: 
        !           265: };
        !           266: 
        !           267: #if !defined(OLDUSBNAMES)
        !           268: #define OLDUSBNAMES 0
        !           269: #endif
        !           270: 
        !           271: //naga#if OLDUSBNAMES
        !           272: #define usbBMRequestType  usb.cntl.BMRequestType
        !           273: #define usbBRequest       usb.cntl.BRequest
        !           274: #define usbWValue         usb.cntl.WValue
        !           275: #define usbWIndex         usb.cntl.WIndex
        !           276: //naga#endif
        !           277: //naga  
        !           278: typedef int CFragConnectionID;
        !           279: 
        !           280: 
        !           281: struct uslReq {
        !           282:        USBDirection                                    usbDirection;
        !           283:        USBRqType                                               usbType;
        !           284:        USBRqRecipient                                  usbRecipient;
        !           285:        USBRequest                                              usbRequest;
        !           286: };
        !           287: typedef struct uslReq                                  uslReq;
        !           288: 
        !           289: 
        !           290: enum {
        !           291:                                                                                                                                /* BT 19Aug98, bump up to v1.10 for Isoc*/
        !           292:        kUSBCurrentPBVersion            = 0x0100,                                               /* v1.00*/
        !           293:        kUSBIsocPBVersion                       = 0x0109,                                               /* v1.10*/
        !           294:        kUSBCurrentHubPB                        = kUSBIsocPBVersion
        !           295: };
        !           296: 
        !           297: 
        !           298: 
        !           299: 
        !           300: #define kUSBNoCallBack ((void *)-1L)
        !           301: 
        !           302: 
        !           303: typedef UInt8                                                  bcdUSB;
        !           304: 
        !           305: enum {
        !           306:        kUSBControl                                     = 0,
        !           307:        kUSBIsoc                                        = 1,
        !           308:        kUSBBulk                                        = 2,
        !           309:        kUSBInterrupt                           = 3,
        !           310:        kUSBAnyType                                     = 0xFF
        !           311: };
        !           312: 
        !           313: /* endpoint type */
        !           314: 
        !           315: enum {
        !           316:        kUSBOut                                         = 0,
        !           317:        kUSBIn                                          = 1,
        !           318:        kUSBNone                                        = 2,
        !           319:        kUSBAnyDirn                                     = 3
        !           320: };
        !           321: 
        !           322: /*USBDirection*/
        !           323: 
        !           324: enum {
        !           325:        kUSBStandard                            = 0,
        !           326:        kUSBClass                                       = 1,
        !           327:        kUSBVendor                                      = 2
        !           328: };
        !           329: 
        !           330: /*USBRqType*/
        !           331: 
        !           332: enum {
        !           333:        kUSBDevice                                      = 0,
        !           334:        kUSBInterface                           = 1,
        !           335:        kUSBEndpoint                            = 2,
        !           336:        kUSBOther                                       = 3
        !           337: };
        !           338: 
        !           339: /*USBRqRecipient*/
        !           340: 
        !           341: enum {
        !           342:        kUSBRqGetStatus                         = 0,
        !           343:        kUSBRqClearFeature                      = 1,
        !           344:        kUSBRqReserved1                         = 2,
        !           345:        kUSBRqSetFeature                        = 3,
        !           346:        kUSBRqReserved2                         = 4,
        !           347:        kUSBRqSetAddress                        = 5,
        !           348:        kUSBRqGetDescriptor                     = 6,
        !           349:        kUSBRqSetDescriptor                     = 7,
        !           350:        kUSBRqGetConfig                         = 8,
        !           351:        kUSBRqSetConfig                         = 9,
        !           352:        kUSBRqGetInterface                      = 10,
        !           353:        kUSBRqSetInterface                      = 11,
        !           354:        kUSBRqSyncFrame                         = 12
        !           355: };
        !           356: 
        !           357: /*USBRequest*/
        !           358: 
        !           359: 
        !           360: enum {
        !           361:        kUSBDeviceDesc                          = 1,
        !           362:        kUSBConfDesc                            = 2,
        !           363:        kUSBStringDesc                          = 3,
        !           364:        kUSBInterfaceDesc                       = 4,
        !           365:        kUSBEndpointDesc                        = 5,
        !           366:        kUSBHIDDesc                                     = 0x21,
        !           367:        kUSBReportDesc                          = 0x22,
        !           368:        kUSBPhysicalDesc                        = 0x23,
        !           369:        kUSBHUBDesc                                     = 0x29
        !           370: };
        !           371: 
        !           372: /* descriptorType */
        !           373: 
        !           374: enum {
        !           375:        kUSBActive                                      = 0,                                                    /* Pipe can accept new transactions*/
        !           376:        kUSBIdle                                        = 1,                                                    /* Pipe will not accept new transactions*/
        !           377:        kUSBStalled                                     = 2                                                             /* An error occured on the pipe*/
        !           378: };
        !           379: 
        !           380: 
        !           381: enum {
        !           382:        kUSB100mAAvailable                      = 50,
        !           383:        kUSB500mAAvailable                      = 250,
        !           384:        kUSB100mA                                       = 50,
        !           385:        kUSBAtrBusPowered                       = 0x80,
        !           386:        kUSBAtrSelfPowered                      = 0x40,
        !           387:        kUSBAtrRemoteWakeup                     = 0x20
        !           388: };
        !           389: 
        !           390: 
        !           391: enum {
        !           392:        kUSBRel10                                       = 0x0100
        !           393: };
        !           394: 
        !           395: #define USB_CONSTANT16(x)      ((((x) >> 8) & 0x0ff) | ((x & 0xff) << 8))
        !           396: 
        !           397: enum {
        !           398:        kUSBDeviceDescriptorLength      = 0x12
        !           399: };
        !           400: 
        !           401: 
        !           402: struct USBDeviceDescriptor {
        !           403:        UInt8                                                   length;
        !           404:        UInt8                                                   descType;
        !           405:        UInt16                                                  usbRel;
        !           406:        UInt8                                                   deviceClass;
        !           407:        UInt8                                                   deviceSubClass;
        !           408:        UInt8                                                   protocol;
        !           409:        UInt8                                                   maxPacketSize;
        !           410:        UInt16                                                  vendor;
        !           411:        UInt16                                                  product;
        !           412:        UInt16                                                  devRel;
        !           413:        UInt8                                                   manuIdx;
        !           414:        UInt8                                                   prodIdx;
        !           415:        UInt8                                                   serialIdx;
        !           416:        UInt8                                                   numConf;
        !           417:        UInt16                                                  descEnd;                                        /* was "end", but this is reserved in some languages*/
        !           418: };
        !           419: typedef struct USBDeviceDescriptor             USBDeviceDescriptor;
        !           420: #ifndef OLDCLASSNAMES
        !           421: #ifndef __cplusplus
        !           422: #define class deviceClass
        !           423: #define subClass deviceSubClass
        !           424: #endif
        !           425: #endif
        !           426: typedef USBDeviceDescriptor *                  USBDeviceDescriptorPtr;
        !           427: 
        !           428: struct USBDescriptorHeader {
        !           429:        UInt8                                                   length;
        !           430:        UInt8                                                   descriptorType;
        !           431: };
        !           432: typedef struct USBDescriptorHeader             USBDescriptorHeader;
        !           433: typedef USBDescriptorHeader *                  USBDescriptorHeaderPtr;
        !           434: 
        !           435: struct USBConfigurationDescriptor {
        !           436:        UInt8                                                   length;
        !           437:        UInt8                                                   descriptorType;
        !           438:        UInt16                                                  totalLength;
        !           439:        UInt8                                                   numInterfaces;
        !           440:        UInt8                                                   configValue;
        !           441:        UInt8                                                   configStrIndex;
        !           442:        UInt8                                                   attributes;
        !           443:        UInt8                                                   maxPower;
        !           444: };
        !           445: typedef struct USBConfigurationDescriptor USBConfigurationDescriptor;
        !           446: typedef USBConfigurationDescriptor *   USBConfigurationDescriptorPtr;
        !           447: 
        !           448: struct USBInterfaceDescriptor {
        !           449:        UInt8                                                   length;
        !           450:        UInt8                                                   descriptorType;
        !           451:        UInt8                                                   interfaceNumber;
        !           452:        UInt8                                                   alternateSetting;
        !           453:        UInt8                                                   numEndpoints;
        !           454:        UInt8                                                   interfaceClass;
        !           455:        UInt8                                                   interfaceSubClass;
        !           456:        UInt8                                                   interfaceProtocol;
        !           457:        UInt8                                                   interfaceStrIndex;
        !           458: };
        !           459: typedef struct USBInterfaceDescriptor  USBInterfaceDescriptor;
        !           460: typedef USBInterfaceDescriptor *               USBInterfaceDescriptorPtr;
        !           461: 
        !           462: struct USBEndPointDescriptor {
        !           463:        UInt8                                                   length;
        !           464:        UInt8                                                   descriptorType;
        !           465:        UInt8                                                   endpointAddress;
        !           466:        UInt8                                                   attributes;
        !           467:        UInt16                                                  maxPacketSize;
        !           468:        UInt8                                                   interval;
        !           469: };
        !           470: typedef struct USBEndPointDescriptor   USBEndPointDescriptor;
        !           471: typedef USBEndPointDescriptor *                        USBEndPointDescriptorPtr;
        !           472: 
        !           473: struct USBHIDDescriptor {
        !           474:        UInt8                                                   descLen;
        !           475:        UInt8                                                   descType;
        !           476:        UInt16                                                  descVersNum;
        !           477:        UInt8                                                   hidCountryCode;
        !           478:        UInt8                                                   hidNumDescriptors;
        !           479:        UInt8                                                   hidDescriptorType;
        !           480:        UInt8                                                   hidDescriptorLengthLo;          /* can't make this a single 16bit value or the compiler will add a filler byte*/
        !           481:        UInt8                                                   hidDescriptorLengthHi;
        !           482: };
        !           483: typedef struct USBHIDDescriptor                        USBHIDDescriptor;
        !           484: typedef USBHIDDescriptor *                             USBHIDDescriptorPtr;
        !           485: 
        !           486: struct USBHIDReportDesc {
        !           487:        UInt8                                                   hidDescriptorType;
        !           488:        UInt8                                                   hidDescriptorLengthLo;          /* can't make this a single 16bit value or the compiler will add a filler byte*/
        !           489:        UInt8                                                   hidDescriptorLengthHi;
        !           490: };
        !           491: typedef struct USBHIDReportDesc                        USBHIDReportDesc;
        !           492: typedef USBHIDReportDesc *                             USBHIDReportDescPtr;
        !           493: 
        !           494: struct USBHubPortStatus {
        !           495:        UInt16                                                  portFlags;                                      /* Port status flags */
        !           496:        UInt16                                                  portChangeFlags;                        /* Port changed flags */
        !           497: };
        !           498: typedef struct USBHubPortStatus                        USBHubPortStatus;
        !           499: typedef USBHubPortStatus *                             USBHubPortStatusPtr;
        !           500: /* ********* ProtoTypes *************** */
        !           501: /* For dealing with endianisms */
        !           502: EXTERN_API_C( UInt16 )
        !           503: HostToUSBWord                                  (UInt16                                 value);
        !           504: 
        !           505: EXTERN_API_C( UInt16 )
        !           506: USBToHostWord                                  (UInt16                                 value);
        !           507: 
        !           508: EXTERN_API_C( UInt32 )
        !           509: HostToUSBLong                                  (UInt32                                 value);
        !           510: 
        !           511: EXTERN_API_C( UInt32 )
        !           512: USBToHostLong                                  (UInt32                                 value);
        !           513: 
        !           514: /* Main prototypes */
        !           515: /* Transfer commands */
        !           516: EXTERN_API_C( OSStatus )
        !           517: USBDeviceRequest                               (USBPB *                                pb);
        !           518: 
        !           519: EXTERN_API_C( OSStatus )
        !           520: USBOpenPipe                                            (USBPB *                                pb);
        !           521: 
        !           522: EXTERN_API_C( OSStatus )
        !           523: USBClosePipe                                   (USBPB *                                pb);
        !           524: 
        !           525: EXTERN_API_C( OSStatus )
        !           526: USBBulkWrite                                   (USBPB *                                pb);
        !           527: 
        !           528: EXTERN_API_C( OSStatus )
        !           529: USBBulkRead                                            (USBPB *                                pb);
        !           530: 
        !           531: EXTERN_API_C( OSStatus )
        !           532: USBIntRead                                             (USBPB *                                pb);
        !           533: 
        !           534: EXTERN_API_C( OSStatus )
        !           535: USBIsocRead                                            (USBPB *                                pb);
        !           536: 
        !           537: EXTERN_API_C( OSStatus )
        !           538: USBIsocWrite                                   (USBPB *                                pb);
        !           539: 
        !           540: /* Pipe state control */
        !           541: EXTERN_API_C( OSStatus )
        !           542: USBClearPipeStallByReference   (USBPipeRef                     ref);
        !           543: 
        !           544: EXTERN_API_C( OSStatus )
        !           545: USBAbortPipeByReference                        (USBReference                   ref);
        !           546: 
        !           547: EXTERN_API_C( OSStatus )
        !           548: USBResetPipeByReference                        (USBReference                   ref);
        !           549: 
        !           550: EXTERN_API_C( OSStatus )
        !           551: USBSetPipeIdleByReference              (USBPipeRef                     ref);
        !           552: 
        !           553: EXTERN_API_C( OSStatus )
        !           554: USBSetPipeActiveByReference            (USBPipeRef                     ref);
        !           555: 
        !           556: EXTERN_API_C( OSStatus )
        !           557: USBClosePipeByReference                        (USBPipeRef                     ref);
        !           558: 
        !           559: EXTERN_API_C( OSStatus )
        !           560: USBGetPipeStatusByReference            (USBReference                   ref,
        !           561:                                                                 USBPipeState *                 state);
        !           562: 
        !           563: 
        !           564: /* Configuration services */
        !           565: EXTERN_API_C( OSStatus )
        !           566: USBFindNextInterface                   (USBPB *                                pb);
        !           567: 
        !           568: EXTERN_API_C( OSStatus )
        !           569: USBOpenDevice                                  (USBPB *                                pb);
        !           570: 
        !           571: EXTERN_API_C( OSStatus )
        !           572: USBNewInterfaceRef                             (USBPB *                                pb);
        !           573: 
        !           574: EXTERN_API_C( OSStatus )
        !           575: USBDisposeInterfaceRef                 (USBPB *                                pb);
        !           576: 
        !           577: EXTERN_API_C( OSStatus )
        !           578: USBConfigureInterface                  (USBPB *                                pb);
        !           579: 
        !           580: EXTERN_API_C( OSStatus )
        !           581: USBFindNextPipe                                        (USBPB *                                pb);
        !           582: 
        !           583: 
        !           584: /* Dealing with descriptors. */
        !           585: /* Note most of this is temprorary */
        !           586: EXTERN_API_C( OSStatus )
        !           587: USBGetConfigurationDescriptor  (USBPB *                                pb);
        !           588: 
        !           589: EXTERN_API_C( OSStatus )
        !           590: USBGetFullConfigurationDescriptor (USBPB *                             pb);
        !           591: 
        !           592: EXTERN_API_C( OSStatus )
        !           593: USBFindNextEndpointDescriptorImmediate (USBPB *                        pb);
        !           594: 
        !           595: EXTERN_API_C( OSStatus )
        !           596: USBFindNextInterfaceDescriptorImmediate (USBPB *               pb);
        !           597: 
        !           598: EXTERN_API_C( OSStatus )
        !           599: USBFindNextAssociatedDescriptor        (USBPB *                                pb);
        !           600: 
        !           601: 
        !           602: 
        !           603: /* Utility functions */
        !           604: EXTERN_API_C( OSStatus )
        !           605: USBResetDevice                                 (USBPB *                                pb);
        !           606: 
        !           607: EXTERN_API_C( OSStatus )
        !           608: USBGetFrameNumberImmediate             (USBPB *                                pb);
        !           609: 
        !           610: EXTERN_API_C( OSStatus )
        !           611: USBDelay                                               (USBPB *                                pb);
        !           612: 
        !           613: EXTERN_API_C( OSStatus )
        !           614: USBAllocMem                                            (USBPB *                                pb);
        !           615: 
        !           616: EXTERN_API_C( OSStatus )
        !           617: USBDeallocMem                                  (USBPB *                                pb);
        !           618: 
        !           619: /* Expert interface functions */
        !           620: EXTERN_API_C( OSStatus )
        !           621: USBExpertInstallInterfaceDriver        (USBDeviceRef                   ref,
        !           622:                                                                 USBDeviceDescriptorPtr  desc,
        !           623:                                                                 USBInterfaceDescriptorPtr  interfacePtr,
        !           624:                                                                 USBReference                   hubRef,
        !           625:                                                                 UInt32                                 busPowerAvailable);
        !           626: 
        !           627: EXTERN_API_C( OSStatus )
        !           628: USBExpertRemoveInterfaceDriver (USBDeviceRef                   ref);
        !           629: 
        !           630: EXTERN_API_C( OSStatus )
        !           631: USBExpertInstallDeviceDriver   (USBDeviceRef                   ref,
        !           632:                                                                 USBDeviceDescriptorPtr  desc,
        !           633:                                                                 USBReference                   hubRef,
        !           634:                                                                 UInt32                                 port,
        !           635:                                                                 UInt32                                 busPowerAvailable);
        !           636: 
        !           637: EXTERN_API_C( OSStatus )
        !           638: USBExpertRemoveDeviceDriver            (USBDeviceRef                   ref);
        !           639: 
        !           640: EXTERN_API_C( OSStatus )
        !           641: USBExpertStatus                                        (USBDeviceRef                   ref,
        !           642:                                                                 void *                                 pointer,
        !           643:                                                                 UInt32                                 value);
        !           644: 
        !           645: EXTERN_API_C( OSStatus )
        !           646: USBExpertFatalError                            (USBDeviceRef                   ref,
        !           647:                                                                 OSStatus                               status,
        !           648:                                                                 void *                                 pointer,
        !           649:                                                                 UInt32                                 value);
        !           650: 
        !           651: EXTERN_API_C( OSStatus )
        !           652: USBExpertNotify                                        (void *                                 note);
        !           653: 
        !           654: EXTERN_API_C( OSStatus )
        !           655: USBExpertSetDevicePowerStatus  (USBDeviceRef                   ref,
        !           656:                                                                 UInt32                                 reserved1,
        !           657:                                                                 UInt32                                 reserved2,
        !           658:                                                                 UInt32                                 powerStatus,
        !           659:                                                                 UInt32                                 busPowerAvailable,
        !           660:                                                                 UInt32                                 busPowerNeeded);
        !           661: 
        !           662: 
        !           663: enum {
        !           664:        kUSBDevicePower_PowerOK         = 0,
        !           665:        kUSBDevicePower_BusPowerInsufficient = 1,
        !           666:        kUSBDevicePower_BusPowerNotAllFeatures = 2,
        !           667:        kUSBDevicePower_SelfPowerInsufficient = 3,
        !           668:        kUSBDevicePower_SelfPowerNotAllFeatures = 4,
        !           669:        kUSBDevicePower_HubPortOk       = 5,
        !           670:        kUSBDevicePower_HubPortOverCurrent = 6,
        !           671:        kUSBDevicePower_BusPoweredHubOnLowPowerPort = 7,
        !           672:        kUSBDevicePower_BusPoweredHubToBusPoweredHub = 8,
        !           673:        kUSBDevicePower_Reserved3       = 9,
        !           674:        kUSBDevicePower_Reserved4       = 10
        !           675: };
        !           676: 
        !           677: 
        !           678: /* For hubs only */
        !           679: EXTERN_API_C( OSStatus )
        !           680: USBHubAddDevice                                        (USBPB *                                pb);
        !           681: 
        !           682: EXTERN_API_C( OSStatus )
        !           683: USBHubConfigurePipeZero                        (USBPB *                                pb);
        !           684: 
        !           685: EXTERN_API_C( OSStatus )
        !           686: USBHubSetAddress                               (USBPB *                                pb);
        !           687: 
        !           688: EXTERN_API_C( OSStatus )
        !           689: USBHubDeviceRemoved                            (USBPB *                                pb);
        !           690: 
        !           691: 
        !           692: EXTERN_API_C( UInt8 )
        !           693: USBMakeBMRequestType                   (UInt8                                  direction,
        !           694:                                                                 UInt8                                  reqtype,
        !           695:                                                                 UInt8                                  recipient);
        !           696: 
        !           697: /* This not implemented until someone shows me a test case */
        !           698: /*OSStatus USBControlRequest(USBPB *pb);*/
        !           699: 
        !           700: typedef UInt32                                                         USBLocationID;
        !           701: 
        !           702: enum {
        !           703:        kUSBLocationNibbleFormat        = 0                                                             /* Other values are reserved for future types (like when we have more than 16 ports per hub)*/
        !           704: };
        !           705: 
        !           706: 
        !           707: 
        !           708: enum {
        !           709:        kNoDeviceRef                            = -1
        !           710: };
        !           711: 
        !           712: /* Expert Notification Types*/
        !           713: typedef UInt8                                                  USBNotificationType;
        !           714: typedef UInt8                                                  USBDriverMessage;
        !           715: 
        !           716: enum {
        !           717:        kNotifyAddDevice                        = 0x00,
        !           718:        kNotifyRemoveDevice                     = 0x01,
        !           719:        kNotifyAddInterface                     = 0x02,
        !           720:        kNotifyRemoveInterface          = 0x03,
        !           721:        kNotifyGetDeviceDescriptor      = 0x04,
        !           722:        kNotifyGetInterfaceDescriptor = 0x05,
        !           723:        kNotifyGetNextDeviceByClass     = 0x06,
        !           724:        kNotifyGetDriverConnectionID = 0x07,
        !           725:        kNotifyInstallDeviceNotification = 0x08,
        !           726:        kNotifyRemoveDeviceNotification = 0x09,
        !           727:        kNotifyDeviceRefToBusRef        = 0x0A,
        !           728:        kNotifyDriverNotify                     = 0x0C,
        !           729:        kNotifyParentNotify                     = 0x0D,
        !           730:        kNotifyAddDriverForReference = 0x0E,
        !           731:        kNotifyAnyEvent                         = 0xFF,
        !           732:        kNotifyPowerState                       = 0x17,
        !           733:        kNotifyStatus                           = 0x18,
        !           734:        kNotifyFatalError                       = 0x19
        !           735: };
        !           736: 
        !           737: /*
        !           738:    USB Manager wildcard constants for USBGetNextDeviceByClass
        !           739:    and USBInstallDeviceNotification.
        !           740: */
        !           741: typedef UInt16                                                         USBManagerWildcard;
        !           742: 
        !           743: enum {
        !           744:        kUSBAnyClass                            = 0xFFFF,
        !           745:        kUSBAnySubClass                         = 0xFFFF,
        !           746:        kUSBAnyProtocol                         = 0xFFFF,
        !           747:        kUSBAnyVendor                           = 0xFFFF,
        !           748:        kUSBAnyProduct                          = 0xFFFF
        !           749: };
        !           750: 
        !           751: 
        !           752: 
        !           753: 
        !           754: struct ExpertNotificationData {
        !           755:        USBNotificationType                     notification;
        !           756:        UInt8                                                   filler[1];                                      /* unused due to 2-byte 68k alignment*/
        !           757:        USBDeviceRef *                                  deviceRef;
        !           758:        UInt32                                                  busPowerAvailable;
        !           759:        void *                                                  data;
        !           760:        UInt32                                                  info1;
        !           761:        UInt32                                                  info2;
        !           762: };
        !           763: typedef struct ExpertNotificationData  ExpertNotificationData;
        !           764: typedef ExpertNotificationData *               ExpertNotificationDataPtr;
        !           765: /* Definition of function pointer passed in ExpertEntryProc*/
        !           766: typedef CALLBACK_API_C( OSStatus , ExpertNotificationProcPtr )(ExpertNotificationDataPtr pNotificationData);
        !           767: /* Definition of expert's callback installation function*/
        !           768: typedef CALLBACK_API_C( OSStatus , ExpertEntryProcPtr )(ExpertNotificationProcPtr pExpertNotify);
        !           769: /* Device Notification Callback Routine*/
        !           770: typedef CALLBACK_API_C( void , USBDeviceNotificationCallbackProcPtr )(void *pb);
        !           771: /* Device Notification Parameter Block*/
        !           772: 
        !           773: struct USBDeviceNotificationParameterBlock {
        !           774:        UInt16                                                  pbLength;
        !           775:        UInt16                                                  pbVersion;
        !           776:        USBNotificationType                     usbDeviceNotification;
        !           777:        UInt8                                                   reserved1[1];                           /* needed because of 2-byte 68k alignment*/
        !           778:        USBDeviceRef                                    usbDeviceRef;
        !           779:        UInt16                                                  usbClass;
        !           780:        UInt16                                                  usbSubClass;
        !           781:        UInt16                                                  usbProtocol;
        !           782:        UInt16                                                  usbVendor;
        !           783:        UInt16                                                  usbProduct;
        !           784:        OSStatus                                                result;
        !           785:        UInt32                                                  token;
        !           786:        USBDeviceNotificationCallbackProcPtr  callback;
        !           787:        UInt32                                                  refcon;
        !           788: };
        !           789: typedef struct USBDeviceNotificationParameterBlock USBDeviceNotificationParameterBlock;
        !           790: /* Forward declaration*/
        !           791: typedef USBDeviceNotificationParameterBlock * USBDeviceNotificationParameterBlockPtr;
        !           792: /* Definition of USBDriverNotificationCallback Routine*/
        !           793: typedef CALLBACK_API_C( void , USBDriverNotificationCallbackPtr )(OSStatus status, UInt32 refcon);
        !           794: /* Public Functions*/
        !           795: EXTERN_API_C( OSStatus )
        !           796: USBGetNextDeviceByClass                        (USBDeviceRef *                 deviceRef,
        !           797:                                                                 CFragConnectionID *    connID,
        !           798:                                                                 UInt16                                 theClass,
        !           799:                                                                 UInt16                                 theSubClass,
        !           800:                                                                 UInt16                                 theProtocol);
        !           801: 
        !           802: EXTERN_API_C( OSStatus )
        !           803: USBGetDeviceDescriptor                 (USBDeviceRef *                 deviceRef,
        !           804:                                                                 USBDeviceDescriptor *  deviceDescriptor,
        !           805:                                                                 UInt32                                 size);
        !           806: 
        !           807: EXTERN_API_C( OSStatus )
        !           808: USBGetInterfaceDescriptor              (USBInterfaceRef *              interfaceRef,
        !           809:                                                                 USBInterfaceDescriptor * interfaceDescriptor,
        !           810:                                                                 UInt32                                 size);
        !           811: 
        !           812: EXTERN_API_C( OSStatus )
        !           813: USBGetDriverConnectionID               (USBDeviceRef *                 deviceRef,
        !           814:                                                                 CFragConnectionID *    connID);
        !           815: 
        !           816: EXTERN_API_C( void )
        !           817: USBInstallDeviceNotification   (USBDeviceNotificationParameterBlock * pb);
        !           818: 
        !           819: EXTERN_API_C( OSStatus )
        !           820: USBRemoveDeviceNotification            (UInt32                                 token);
        !           821: 
        !           822: EXTERN_API_C( OSStatus )
        !           823: USBDeviceRefToBusRef                   (USBDeviceRef *                 deviceRef,
        !           824:                                                                 USBBusRef *                    busRef);
        !           825: 
        !           826: EXTERN_API_C( OSStatus )
        !           827: USBDriverNotify                                        (USBReference                   reference,
        !           828:                                                                 USBDriverMessage               mesg,
        !           829:                                                                 UInt32                                 refcon,
        !           830:                                                                 USBDriverNotificationCallbackPtr  callback);
        !           831: 
        !           832: EXTERN_API_C( OSStatus )
        !           833: USBExpertNotifyParent                  (USBReference                   reference,
        !           834:                                                                 void *                                 pointer);
        !           835: 
        !           836: EXTERN_API_C( OSStatus )
        !           837: USBAddDriverForReference               (USBReference                   reference);
        !           838: 
        !           839: typedef CALLBACK_API_C( void , HIDInterruptProcPtr )(UInt32 refcon, void *theData);
        !           840: /* HID Install Interrupt prototype*/
        !           841: typedef CALLBACK_API_C( OSStatus , USBHIDInstallInterruptProcPtr )(HIDInterruptProcPtr pInterruptProc, UInt32 refcon);
        !           842: /* HID Poll Device prototype*/
        !           843: typedef CALLBACK_API_C( OSStatus , USBHIDPollDeviceProcPtr )(void );
        !           844: /* HID Control Device prototype*/
        !           845: typedef CALLBACK_API_C( OSStatus , USBHIDControlDeviceProcPtr )(UInt32 theControlSelector, void *theControlData);
        !           846: /* HID Get Device Info prototype*/
        !           847: typedef CALLBACK_API_C( OSStatus , USBHIDGetDeviceInfoProcPtr )(UInt32 theInfoSelector, void *theInfo);
        !           848: /* HID Enter Polled Mode prototype*/
        !           849: typedef CALLBACK_API_C( OSStatus , USBHIDEnterPolledModeProcPtr )(void );
        !           850: /* HID Exit Polled Mode prototype*/
        !           851: typedef CALLBACK_API_C( OSStatus , USBHIDExitPolledModeProcPtr )(void );
        !           852: 
        !           853: struct USBHIDModuleDispatchTable {
        !           854:        UInt32                                                  hidDispatchVersion;
        !           855:        USBHIDInstallInterruptProcPtr   pUSBHIDInstallInterrupt;
        !           856:        USBHIDPollDeviceProcPtr                 pUSBHIDPollDevice;
        !           857:        USBHIDControlDeviceProcPtr              pUSBHIDControlDevice;
        !           858:        USBHIDGetDeviceInfoProcPtr              pUSBHIDGetDeviceInfo;
        !           859:        USBHIDEnterPolledModeProcPtr    pUSBHIDEnterPolledMode;
        !           860:        USBHIDExitPolledModeProcPtr     pUSBHIDExitPolledMode;
        !           861: };
        !           862: typedef struct USBHIDModuleDispatchTable USBHIDModuleDispatchTable;
        !           863: typedef USBHIDModuleDispatchTable *            USBHIDModuleDispatchTablePtr;
        !           864: /*     Prototypes Tue, Mar 17, 1998 4:54:30 PM */
        !           865: EXTERN_API_C( OSStatus )
        !           866: USBHIDInstallInterrupt                 (HIDInterruptProcPtr    HIDInterruptFunction,
        !           867:                                                                 UInt32                                 refcon);
        !           868: 
        !           869: EXTERN_API_C( OSStatus )
        !           870: USBHIDPollDevice                               (void);
        !           871: 
        !           872: EXTERN_API_C( OSStatus )
        !           873: USBHIDControlDevice                            (UInt32                                 theControlSelector,
        !           874:                                                                 void *                                 theControlData);
        !           875: 
        !           876: EXTERN_API_C( OSStatus )
        !           877: USBHIDGetDeviceInfo                            (UInt32                                 theInfoSelector,
        !           878:                                                                 void *                                 theInfo);
        !           879: 
        !           880: EXTERN_API_C( OSStatus )
        !           881: USBHIDEnterPolledMode                  (void);
        !           882: 
        !           883: EXTERN_API_C( OSStatus )
        !           884: USBHIDExitPolledMode                   (void);
        !           885: 
        !           886: EXTERN_API_C( void )
        !           887: HIDNotification                                        (UInt32                                 devicetype,
        !           888:                                                                 UInt8                                  NewHIDData[],
        !           889:                                                                 UInt8                                  OldHIDData[]);
        !           890: 
        !           891: 
        !           892: enum {
        !           893:        kHIDRqGetReport                         = 1,
        !           894:        kHIDRqGetIdle                           = 2,
        !           895:        kHIDRqGetProtocol                       = 3,
        !           896:        kHIDRqSetReport                         = 9,
        !           897:        kHIDRqSetIdle                           = 10,
        !           898:        kHIDRqSetProtocol                       = 11
        !           899: };
        !           900: 
        !           901: 
        !           902: enum {
        !           903:        kHIDRtInputReport                       = 1,
        !           904:        kHIDRtOutputReport                      = 2,
        !           905:        kHIDRtFeatureReport                     = 3
        !           906: };
        !           907: 
        !           908: 
        !           909: enum {
        !           910:        kHIDBootProtocolValue           = 0,
        !           911:        kHIDReportProtocolValue         = 1
        !           912: };
        !           913: 
        !           914: 
        !           915: enum {
        !           916:        kHIDKeyboardInterfaceProtocol = 1,
        !           917:        kHIDMouseInterfaceProtocol      = 2
        !           918: };
        !           919: 
        !           920: 
        !           921: enum {
        !           922:        kHIDSetLEDStateByBits           = 1,
        !           923:        kHIDSetLEDStateByBitMask        = 1,
        !           924:        kHIDSetLEDStateByIDNumber       = 2,
        !           925:        kHIDRemoveInterruptHandler      = 3,
        !           926:        kHIDEnableDemoMode                      = 4,
        !           927:        kHIDDisableDemoMode                     = 5
        !           928: };
        !           929: 
        !           930: 
        !           931: enum {
        !           932:        kHIDGetLEDStateByBits           = 1,                                                    /* not supported in 1.0 of keyboard module*/
        !           933:        kHIDGetLEDStateByBitMask        = 1,                                                    /* not supported in 1.0 of keyboard module*/
        !           934:        kHIDGetLEDStateByIDNumber       = 2,
        !           935:        kHIDGetDeviceCountryCode        = 3,                                                    /* not supported in 1.0 HID modules*/
        !           936:        kHIDGetDeviceUnitsPerInch       = 4,                                                    /* only supported in mouse HID module*/
        !           937:        kHIDGetInterruptHandler         = 5,
        !           938:        kHIDGetCurrentKeys                      = 6,                                                    /* only supported in keyboard HID module*/
        !           939:        kHIDGetInterruptRefcon          = 7,
        !           940:        kHIDGetVendorID                         = 8,
        !           941:        kHIDGetProductID                        = 9
        !           942: };
        !           943: 
        !           944: 
        !           945: 
        !           946: enum {
        !           947:        kNumLockLED                                     = 0,
        !           948:        kCapsLockLED                            = 1,
        !           949:        kScrollLockLED                          = 2,
        !           950:        kComposeLED                                     = 3,
        !           951:        kKanaLED                                        = 4
        !           952: };
        !           953: 
        !           954: 
        !           955: enum {
        !           956:        kNumLockLEDMask                         = 1 << kNumLockLED,
        !           957:        kCapsLockLEDMask                        = 1 << kCapsLockLED,
        !           958:        kScrollLockLEDMask                      = 1 << kScrollLockLED,
        !           959:        kComposeLEDMask                         = 1 << kComposeLED,
        !           960:        kKanaLEDMask                            = 1 << kKanaLED
        !           961: };
        !           962: 
        !           963: 
        !           964: enum {
        !           965:        kUSBCapsLockKey                         = 0x39,
        !           966:        kUSBNumLockKey                          = 0x53,
        !           967:        kUSBScrollLockKey                       = 0x47
        !           968: };
        !           969: 
        !           970: 
        !           971: struct USBMouseData {
        !           972:        UInt16                                                  buttons;
        !           973:        SInt16                                                  XDelta;
        !           974:        SInt16                                                  YDelta;
        !           975: };
        !           976: typedef struct USBMouseData                            USBMouseData;
        !           977: typedef USBMouseData *                                 USBMouseDataPtr;
        !           978: 
        !           979: struct USBKeyboardData {
        !           980:        UInt16                                                  keycount;
        !           981:        UInt16                                                  usbkeycode[32];
        !           982: };
        !           983: typedef struct USBKeyboardData                 USBKeyboardData;
        !           984: typedef USBKeyboardData *                              USBKeyboardDataPtr;
        !           985: 
        !           986: union USBHIDData {
        !           987:        USBKeyboardData                                 kbd;
        !           988:        USBMouseData                                    mouse;
        !           989: };
        !           990: typedef union USBHIDData                               USBHIDData;
        !           991: typedef USBHIDData *                                   USBHIDDataPtr;
        !           992: EXTERN_API_C( void )
        !           993: StartCompoundClassDriver               (USBDeviceRef                   device,
        !           994:                                                                 UInt16                                 classID,
        !           995:                                                                 UInt16                                 subClass);
        !           996: 
        !           997: 
        !           998: enum {
        !           999:        kUSBCompositeClass                      = 0,
        !          1000:        kUSBAudioClass                          = 1,
        !          1001:        kUSBCommClass                           = 2,
        !          1002:        kUSBHIDClass                            = 3,
        !          1003:        kUSBDisplayClass                        = 4,
        !          1004:        kUSBPrintingClass                       = 7,
        !          1005:        kUSBMassStorageClass            = 8,
        !          1006:        kUSBHubClass                            = 9,
        !          1007:        kUSBDataClass                           = 10,
        !          1008:        kUSBVendorSpecificClass         = 0xFF
        !          1009: };
        !          1010: 
        !          1011: 
        !          1012: enum {
        !          1013:        kUSBCompositeSubClass           = 0,
        !          1014:        kUSBHubSubClass                         = 1
        !          1015: };
        !          1016: 
        !          1017: 
        !          1018: enum {
        !          1019:        kUSBHIDInterfaceClass           = 0x03
        !          1020: };
        !          1021: 
        !          1022: 
        !          1023: enum {
        !          1024:        kUSBNoInterfaceSubClass         = 0x00,
        !          1025:        kUSBBootInterfaceSubClass       = 0x01
        !          1026: };
        !          1027: 
        !          1028: 
        !          1029: enum {
        !          1030:        kUSBNoInterfaceProtocol         = 0x00,
        !          1031:        kUSBKeyboardInterfaceProtocol = 0x01,
        !          1032:        kUSBMouseInterfaceProtocol      = 0x02
        !          1033: };
        !          1034: 
        !          1035: 
        !          1036: 
        !          1037: 
        !          1038: enum {
        !          1039:        kServiceCategoryUSB                     = FOUR_CHAR_CODE('usb ')                /* USB*/
        !          1040: };
        !          1041: 
        !          1042: /* SOMETHING NEEDS TO BE DONE WITH THIS - */
        !          1043: 
        !          1044: enum {
        !          1045:        kUSBTypeIsHub                           = FOUR_CHAR_CODE('hubd'),               /* Hub*/
        !          1046:        kUSBTypeIsHID                           = FOUR_CHAR_CODE('HIDd'),               /* Human Interface Device*/
        !          1047:        kUSBTypeIsDisplay                       = FOUR_CHAR_CODE('disp'),               /* Display */
        !          1048:        kUSBTypeIsModem                         = FOUR_CHAR_CODE('modm')                /* Modem*/
        !          1049: };
        !          1050: 
        !          1051: 
        !          1052: enum {
        !          1053:        kUSBDriverFileType                      = FOUR_CHAR_CODE('ndrv'),
        !          1054:        kUSBDriverRsrcType                      = FOUR_CHAR_CODE('usbd'),
        !          1055:        kUSBShimRsrcType                        = FOUR_CHAR_CODE('usbs')
        !          1056: };
        !          1057: 
        !          1058: 
        !          1059: enum {
        !          1060:        kTheUSBDriverDescriptionSignature = FOUR_CHAR_CODE('usbd')
        !          1061: };
        !          1062: 
        !          1063: 
        !          1064: enum {
        !          1065:        kInitialUSBDriverDescriptor     = 0
        !          1066: };
        !          1067: 
        !          1068: 
        !          1069: 
        !          1070: typedef UInt32                                                         USBDriverDescVersion;
        !          1071: /*  Driver Loading Options*/
        !          1072: typedef UInt32                                                         USBDriverLoadingOptions;
        !          1073: 
        !          1074: enum {
        !          1075:        kUSBDoNotMatchGenericDevice     = 0x00000001,                                   /* Driver's VendorID must match Device's VendorID*/
        !          1076:        kUSBDoNotMatchInterface         = 0x00000002,                                   /* Do not load this driver as an interface driver.*/
        !          1077:        kUSBProtocolMustMatch           = 0x00000004,                                   /* Do not load this driver if protocol field doesn't match.*/
        !          1078:        kUSBInterfaceMatchOnly          = 0x00000008                                    /* Only load this driver as an interface driver.*/
        !          1079: };
        !          1080: 
        !          1081: 
        !          1082: enum {
        !          1083:        kClassDriverPluginVersion       = 0x00001100
        !          1084: };
        !          1085: 
        !          1086: 
        !          1087: 
        !          1088: 
        !          1089: struct USBDeviceInfo {
        !          1090:        UInt16                                                  usbVendorID;                            /* USB Vendor ID*/
        !          1091:        UInt16                                                  usbProductID;                           /* USB Product ID.*/
        !          1092:        UInt16                                                  usbDeviceReleaseNumber;         /* Release Number of Device*/
        !          1093:        UInt16                                                  usbDeviceProtocol;                      /* Protocol Info.*/
        !          1094: };
        !          1095: typedef struct USBDeviceInfo                   USBDeviceInfo;
        !          1096: typedef USBDeviceInfo *                                        USBDeviceInfoPtr;
        !          1097: 
        !          1098: struct USBInterfaceInfo {
        !          1099:        UInt8                                                   usbConfigValue;                         /* Configuration Value*/
        !          1100:        UInt8                                                   usbInterfaceNum;                        /* Interface Number*/
        !          1101:        UInt8                                                   usbInterfaceClass;                      /* Interface Class*/
        !          1102:        UInt8                                                   usbInterfaceSubClass;           /* Interface SubClass*/
        !          1103:        UInt8                                                   usbInterfaceProtocol;           /* Interface Protocol*/
        !          1104: };
        !          1105: typedef struct USBInterfaceInfo                        USBInterfaceInfo;
        !          1106: typedef USBInterfaceInfo *                             USBInterfaceInfoPtr;
        !          1107: 
        !          1108: struct USBDriverType {
        !          1109:        Str31                                                   nameInfoStr;                            /* Driver's name when loading into the Name Registry.*/
        !          1110:        UInt8                                                   usbDriverClass;                         /* USB Class this driver belongs to.*/
        !          1111:        UInt8                                                   usbDriverSubClass;                      /* Module type*/
        !          1112:        NumVersion                                              usbDriverVersion;                       /* Class driver version number.*/
        !          1113: };
        !          1114: typedef struct USBDriverType                   USBDriverType;
        !          1115: typedef USBDriverType *                                        USBDriverTypePtr;
        !          1116: 
        !          1117: struct USBDriverDescription {
        !          1118:        OSType                                                  usbDriverDescSignature;         /* Signature field of this structure.*/
        !          1119:        USBDriverDescVersion                    usbDriverDescVersion;           /* Version of this data structure.*/
        !          1120:        USBDeviceInfo                                   usbDeviceInfo;                          /* Product & Vendor Info*/
        !          1121:        USBInterfaceInfo                                usbInterfaceInfo;                       /* Interface info*/
        !          1122:        USBDriverType                                   usbDriverType;                          /* Driver Info.*/
        !          1123:        USBDriverLoadingOptions                 usbDriverLoadingOptions;        /* Options for class driver loading.*/
        !          1124: };
        !          1125: typedef struct USBDriverDescription            USBDriverDescription;
        !          1126: typedef USBDriverDescription *                 USBDriverDescriptionPtr;
        !          1127: /*
        !          1128:    Dispatch Table
        !          1129:    Definition of class driver's HW Validation proc.
        !          1130: */
        !          1131: typedef CALLBACK_API_C( OSStatus , USBDValidateHWProcPtr )(USBDeviceRef device, USBDeviceDescriptorPtr pDesc);
        !          1132: /*
        !          1133:    Definition of class driver's device initialization proc.
        !          1134:    Called if the driver is being loaded for a device
        !          1135: */
        !          1136: typedef CALLBACK_API_C( OSStatus , USBDInitializeDeviceProcPtr )(USBDeviceRef device, USBDeviceDescriptorPtr pDesc, UInt32 busPowerAvailable);
        !          1137: /* Definition of class driver's interface initialization proc.*/
        !          1138: typedef CALLBACK_API_C( OSStatus , USBDInitializeInterfaceProcPtr )(UInt32 interfaceNum, USBInterfaceDescriptorPtr pInterface, USBDeviceDescriptorPtr pDevice, USBInterfaceRef interfaceRef);
        !          1139: /* Definition of class driver's finalization proc.*/
        !          1140: typedef CALLBACK_API_C( OSStatus , USBDFinalizeProcPtr )(USBDeviceRef device, USBDeviceDescriptorPtr pDesc);
        !          1141: 
        !          1142: typedef UInt32                                                         USBDriverNotification;
        !          1143: 
        !          1144: enum {
        !          1145:        kNotifySystemSleepRequest       = 0x00000001,
        !          1146:        kNotifySystemSleepDemand        = 0x00000002,
        !          1147:        kNotifyHubEnumQuery                     = 0x00000006,
        !          1148:        kNotifyChildMessage                     = 0x00000007,
        !          1149:        kNotifyDriverBeingRemoved       = 0x0000000B
        !          1150: };
        !          1151: 
        !          1152: /*
        !          1153:    Definition of driver's notificatipn proc.      
        !          1154:    Added refcon for 1.1 version of dispatch table
        !          1155: */
        !          1156: typedef CALLBACK_API_C( OSStatus , USBDDriverNotifyProcPtr )(USBDriverNotification notification, void *pointer, UInt32 refcon);
        !          1157: 
        !          1158: struct USBClassDriverPluginDispatchTable {
        !          1159:        UInt32                                                  pluginVersion;
        !          1160:        USBDValidateHWProcPtr                   validateHWProc;                         /* Proc for driver to verify proper HW*/
        !          1161:        USBDInitializeDeviceProcPtr     initializeDeviceProc;           /* Proc that initializes the class driver.*/
        !          1162:        USBDInitializeInterfaceProcPtr  initializeInterfaceProc;        /* Proc that initializes a particular interface in the class driver.*/
        !          1163:        USBDFinalizeProcPtr                     finalizeProc;                           /* Proc that finalizes the class driver.*/
        !          1164:        USBDDriverNotifyProcPtr                 notificationProc;                       /* Proc to pass notifications to the driver.*/
        !          1165: };
        !          1166: typedef struct USBClassDriverPluginDispatchTable USBClassDriverPluginDispatchTable;
        !          1167: typedef USBClassDriverPluginDispatchTable * USBClassDriverPluginDispatchTablePtr;
        !          1168: /* Hub defines*/
        !          1169: 
        !          1170: 
        !          1171: 
        !          1172: enum {
        !          1173:        kUSBHubDescriptorType           = 0x29
        !          1174: };
        !          1175: 
        !          1176: 
        !          1177: enum {
        !          1178:                                                                                                                                /* Hub features */
        !          1179:        kUSBHubLocalPowerChangeFeature = 0,
        !          1180:        kUSBHubOverCurrentChangeFeature = 1,                                            /* port features */
        !          1181:        kUSBHubPortConnectionFeature = 0,
        !          1182:        kUSBHubPortEnablenFeature       = 1,
        !          1183:        kUSBHubPortSuspecdFeature       = 2,
        !          1184:        kUSBHubPortOverCurrentFeature = 3,
        !          1185:        kUSBHubPortResetFeature         = 4,
        !          1186:        kUSBHubPortPowerFeature         = 8,
        !          1187:        kUSBHubPortLowSpeedFeature      = 9,
        !          1188:        kUSBHubPortConnectionChangeFeature = 16,
        !          1189:        kUSBHubPortEnableChangeFeature = 17,
        !          1190:        kUSBHubPortSuspendChangeFeature = 18,
        !          1191:        kUSBHubPortOverCurrentChangeFeature = 19,
        !          1192:        kUSBHubPortResetChangeFeature = 20
        !          1193: };
        !          1194: 
        !          1195: 
        !          1196: 
        !          1197: enum {
        !          1198:        kHubPortConnection                      = 1,
        !          1199:        kHubPortEnabled                         = 2,
        !          1200:        kHubPortSuspend                         = 4,
        !          1201:        kHubPortOverCurrent                     = 8,
        !          1202:        kHubPortBeingReset                      = 16,
        !          1203:        kHubPortPower                           = 0x0100,
        !          1204:        kHubPortSpeed                           = 0x0200
        !          1205: };
        !          1206: 
        !          1207: 
        !          1208: enum {
        !          1209:        kHubLocalPowerStatus            = 1,
        !          1210:        kHubOverCurrentIndicator        = 2,
        !          1211:        kHubLocalPowerStatusChange      = 1,
        !          1212:        kHubOverCurrentIndicatorChange = 2
        !          1213: };
        !          1214: 
        !          1215: 
        !          1216: enum {
        !          1217:        off                                                     = false,
        !          1218:        on                                                      = true
        !          1219: };
        !          1220: 
        !          1221: 
        !          1222: 
        !          1223: struct hubDescriptor {
        !          1224:                                                                                                                                /* See usbDoc pg 250?? */
        !          1225:        UInt8                                                   dummy;                                          /* to align charcteristics */
        !          1226: 
        !          1227:        UInt8                                                   length;
        !          1228:        UInt8                                                   hubType;
        !          1229:        UInt8                                                   numPorts;
        !          1230: 
        !          1231:        UInt16                                                  characteristics;
        !          1232:        UInt8                                                   powerOnToGood;                          /* Port settling time, in 2ms */
        !          1233:        UInt8                                                   hubCurrent;
        !          1234: 
        !          1235:                                                                                                                                /* These are received packed, will have to be unpacked */
        !          1236:        UInt8                                                   removablePortFlags[8];
        !          1237:        UInt8                                                   pwrCtlPortFlags[8];
        !          1238: };
        !          1239: typedef struct hubDescriptor                   hubDescriptor;
        !          1240: 
        !          1241: 
        !          1242: 
        !          1243: #if PRAGMA_STRUCT_ALIGN
        !          1244:        #pragma options align=reset
        !          1245: #elif PRAGMA_STRUCT_PACKPUSH
        !          1246:        #pragma pack(pop)
        !          1247: #elif PRAGMA_STRUCT_PACK
        !          1248:        #pragma pack()
        !          1249: #endif
        !          1250: 
        !          1251: #ifdef PRAGMA_IMPORT_OFF
        !          1252: #pragma import off
        !          1253: #elif PRAGMA_IMPORT
        !          1254: #pragma import reset
        !          1255: #endif
        !          1256: 
        !          1257: #ifdef __cplusplus
        !          1258: }
        !          1259: #endif
        !          1260: 
        !          1261: #endif /* __USB__ */
        !          1262: #define kprintf usb_donone
        !          1263: #define printf  usb_donone
        !          1264: void usb_donone(char *x,...);

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.