Annotation of kernel/bsd/dev/ppc/drvUSBCMD/usbcmd.h, revision 1.1.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: //#import <mach/std_types.h>
                     26: #import <kernserv/ns_timer.h>
                     27: #import <driverkit/IODirectDevice.h>
                     28: #import <driverkit/ppc/IOPCIDevice.h>
                     29: #import <driverkit/IOPower.h>
                     30: #import <machdep/ppc/proc_reg.h>
                     31: #define kSAFE_USB_KMEMSIZE     2 * 1024        //"safe" amount to kalloc() for USB
                     32: #define bit0                   0x00000001
                     33: #define bit1                   0x00000002
                     34: #define bit2                   0x00000004
                     35: #define bit3                   0x00000008
                     36: #define bit4                   0x00000010
                     37: #define bit5                   0x00000020
                     38: #define bit6                   0x00000040
                     39: #define bit7                   0x00000080
                     40: #define bit8                   0x00000100
                     41: #define bit9                   0x00000200
                     42: #define bit10                  0x00000400
                     43: #define bit11                  0x00000800
                     44: #define bit12                  0x00001000
                     45: #define bit13                  0x00002000
                     46: #define bit14                  0x00004000
                     47: #define bit15                  0x00008000
                     48: #define bit16                  0x00010000
                     49: #define bit17                  0x00020000
                     50: #define bit18                  0x00040000
                     51: #define bit19                  0x00080000
                     52: #define bit20                  0x00100000
                     53: #define bit21                  0x00200000
                     54: #define bit22                  0x00400000
                     55: #define bit23                  0x00800000
                     56: #define bit24                  0x01000000
                     57: #define bit25                  0x02000000
                     58: #define bit26                  0x04000000
                     59: #define bit27                  0x08000000
                     60: #define bit28                  0x10000000
                     61: #define bit29                  0x20000000
                     62: #define bit30                  0x40000000
                     63: #define bit31                  0x80000000
                     64: 
                     65: ////////////////////////////////////////////////////////////////////////////////
                     66: //
                     67: // OHCI register file.
                     68: //
                     69: 
                     70: enum
                     71: {
                     72:        kOHCIBit0                                       = (1 << 0),
                     73:        kOHCIBit1                                       = (1 << 1),
                     74:        kOHCIBit2                                       = (1 << 2),
                     75:        kOHCIBit3                                       = (1 << 3),
                     76:        kOHCIBit4                                       = (1 << 4),
                     77:        kOHCIBit5                                       = (1 << 5),
                     78:        kOHCIBit6                                       = (1 << 6),
                     79:        kOHCIBit7                                       = (1 << 7),
                     80:        kOHCIBit8                                       = (1 << 8),
                     81:        kOHCIBit9                                       = (1 << 9),
                     82:        kOHCIBit10                                      = (1 << 10),
                     83:        kOHCIBit11                                      = (1 << 11),
                     84:        kOHCIBit12                                      = (1 << 12),
                     85:        kOHCIBit13                                      = (1 << 13),
                     86:        kOHCIBit14                                      = (1 << 14),
                     87:        kOHCIBit15                                      = (1 << 15),
                     88:        kOHCIBit16                                      = (1 << 16),
                     89:        kOHCIBit17                                      = (1 << 17),
                     90:        kOHCIBit18                                      = (1 << 18),
                     91:        kOHCIBit19                                      = (1 << 19),
                     92:        kOHCIBit20                                      = (1 << 20),
                     93:        kOHCIBit21                                      = (1 << 21),
                     94:        kOHCIBit22                                      = (1 << 22),
                     95:        kOHCIBit23                                      = (1 << 23),
                     96:        kOHCIBit24                                      = (1 << 24),
                     97:        kOHCIBit25                                      = (1 << 25),
                     98:        kOHCIBit26                                      = (1 << 26),
                     99:        kOHCIBit27                                      = (1 << 27),
                    100:        kOHCIBit28                                      = (1 << 28),
                    101:        kOHCIBit29                                      = (1 << 29),
                    102:        kOHCIBit30                                      = (1 << 30),
                    103:        kOHCIBit31                                      = (1 << 31)
                    104: };
                    105: 
                    106: 
                    107: #ifdef OMIT
                    108: #ifndef __APPLE_TYPES_DEFINED__
                    109: #define __APPLE_TYPES_DEFINED__ 1
                    110: 
                    111:     typedef unsigned int    UInt32;         // A 32-bit unsigned integer
                    112:     typedef unsigned char   UInt8;          // A "byte-sized" integer
                    113:     typedef signed char SInt8;
                    114:     typedef signed int      SInt32;         // A 32-bit signed integer
                    115:     typedef boolean_t       Boolean;        // TRUE/FALSE value (YES/NO in NeXT)
                    116:     typedef signed int  OSErr;
                    117:     typedef signed int  OSStatus;
                    118: 
                    119: #endif /* __APPLE_TYPES_DEFINED__ */
                    120: #endif
                    121: 
                    122: 
                    123: typedef long InterruptMemberNumber;
                    124: typedef Boolean InterruptSourceState;
                    125: 
                    126: //typedef InterruptSourceState (*InterruptDisabler)(InterruptSetMember ISTmember, void *refCon);
                    127: typedef InterruptSourceState (*InterruptDisabler)(void  *ISTmember, void *refCon);
                    128: 
                    129: //typedef InterruptMemberNumber (*InterruptHandler)(InterruptSetMember ISTmember, void *refCon, UInt32 theIntCount);
                    130: typedef InterruptMemberNumber (*InterruptHandler)(void *ISTmember, void *refCon, UInt32 theIntCount);
                    131: 
                    132: //typedef void (*InterruptEnabler)(InterruptSetMember ISTmember, void *refCon);
                    133: typedef void (*InterruptEnabler)(void *ISTmember, void *refCon); //fake it since I can't find InterruptSetMember
                    134: 
                    135: /** Can't find OpaqueRef anywhere
                    136: typedef struct OpaqueRef *KernelID;
                    137: typedef KernelID InterruptSetID;  //A.W. doesn't seem that useful in C code
                    138: 
                    139: From Bill's DriverServices.h
                    140: struct InterruptSetMember {
                    141:        InterruptSetID                                  setID;
                    142:        InterruptMemberNumber                   member;
                    143: };
                    144: 
                    145: typedef struct InterruptSetMember              InterruptSetMember;
                    146: 
                    147: enum {
                    148:        kISTChipInterruptSource         = 0,
                    149:        kISTOutputDMAInterruptSource = 1,
                    150:        kISTInputDMAInterruptSource     = 2,
                    151:        kISTPropertyMemberCount         = 3
                    152: };
                    153: 
                    154: 
                    155: typedef InterruptSetMember                             ISTProperty[3];
                    156: ****/
                    157: 
                    158: 
                    159: 
                    160: #define OHCIBitRange(start, end)                                       \
                    161: (                                                                                                      \
                    162:        ((((UInt32) 0xFFFFFFFF) << (31 - (end))) >>             \
                    163:         ((31 - (end)) + (start))) <<                                   \
                    164:        (start)                                                                                 \
                    165: )
                    166: 
                    167: #define OHCIBitRangePhase(start, end)                          \
                    168:        (start)
                    169: 
                    170: 
                    171: 
                    172: #define EndianSwapImm32Bit(data32)                                     \
                    173: (                                                                                                      \
                    174:        (((UInt32) data32) >> 24)                               |               \
                    175:        ((((UInt32) data32) >> 8) & 0xFF00)             |               \
                    176:        ((((UInt32) data32) << 8) & 0xFF0000)   |               \
                    177:        (((UInt32) data32) << 24)                                               \
                    178: )
                    179: 
                    180: typedef struct OHCIRegistersStruct
                    181:                                                                OHCIRegisters,
                    182:                                                                *OHCIRegistersPtr;
                    183: 
                    184: typedef struct OHCIEndpointDescriptorStruct
                    185:                                                                OHCIEndpointDescriptor,
                    186:                                                                *OHCIEndpointDescriptorPtr;
                    187: 
                    188: typedef struct OHCIGeneralTransferDescriptorStruct
                    189:                                                                OHCIGeneralTransferDescriptor,
                    190:                                                                *OHCIGeneralTransferDescriptorPtr;
                    191: 
                    192: 
                    193: struct OHCIPhysicalLogicalStruct
                    194: {
                    195:        UInt32                                          LogicalStart;
                    196:        UInt32                                          LogicalEnd;
                    197:        UInt32                                          PhysicalStart;
                    198:        UInt32                                          PhysicalEnd;
                    199:        UInt32                                          type;
                    200:        UInt32                                          pNext;
                    201:        
                    202: };
                    203: 
                    204: 
                    205: 
                    206: typedef struct OHCIPhysicalLogicalStruct
                    207:                                                                OHCIPhysicalLogical,
                    208:                                                                *OHCIPhysicalLogicalPtr;
                    209: 
                    210: 
                    211: 
                    212: 
                    213: // OHCI register file.
                    214: // The following fields exactly match the OHCI hardware registers
                    215: //      (page 5-1 of CMD specs)
                    216: struct OHCIRegistersStruct
                    217: {
                    218:        // Control and status group.
                    219:        volatile UInt32                         hcRevision;
                    220:        volatile UInt32                         hcControl;
                    221:        volatile UInt32                         hcCommandStatus;
                    222:        volatile UInt32                         hcInterruptStatus;
                    223:        volatile UInt32                         hcInterruptEnable;
                    224:        volatile UInt32                         hcInterruptDisable;
                    225: 
                    226:        // Memory pointer group.
                    227:        volatile UInt32                         hcHCCA;
                    228:        volatile UInt32                         hcPeriodCurrentED;
                    229:        volatile UInt32                         hcControlHeadED;
                    230:        volatile UInt32                         hcControlCurrentED;
                    231:        volatile UInt32                         hcBulkHeadED;
                    232:        volatile UInt32                         hcBulkCurrentED;
                    233:        volatile UInt32                         hcDoneHead;
                    234: 
                    235:        // Frame counter group.
                    236:        volatile UInt32                         hcFmInterval;
                    237:        volatile UInt32                         hcFmRemaining;
                    238:        volatile UInt32                         hcFmNumber;
                    239:        volatile UInt32                         hcPeriodicStart;
                    240:        volatile UInt32                         hcLSThreshold;
                    241: 
                    242:        // Root hub group.
                    243:        volatile UInt32                         hcRhDescriptorA;
                    244:        volatile UInt32                         hcRhDescriptorB;
                    245:        volatile UInt32                         hcRhStatus;
                    246:        volatile UInt32                         hcRhPortStatus[2];
                    247: };
                    248: 
                    249: // hcControl register defs.
                    250: enum
                    251: {
                    252:        kOHCIHcControl_CBSR                     = OHCIBitRange (0, 1),
                    253:        kOHCIHcControl_CBSRPhase        = OHCIBitRangePhase (0, 1),
                    254:        kOHCIHcControl_PLE                      = kOHCIBit2,
                    255:        kOHCIHcControl_IE                       = kOHCIBit3,
                    256:        kOHCIHcControl_CLE                      = kOHCIBit4,
                    257:        kOHCIHcControl_BLE                      = kOHCIBit5,
                    258:        kOHCIHcControl_HCFS                     = OHCIBitRange (6, 7),
                    259:        kOHCIHcControl_HCFSPhase        = OHCIBitRangePhase (6, 7),
                    260:        kOHCIHcControl_IR                       = kOHCIBit8,
                    261:        kOHCIHcControl_RWC                      = kOHCIBit9,
                    262:        kOHCIHcControl_RWE                      = kOHCIBit10,
                    263: 
                    264:        kOHCIHcControl_Reserved         = OHCIBitRange (11, 31),
                    265: 
                    266:        kOHCIFunctionalState_Reset                      = 0,
                    267:        kOHCIFunctionalState_Resume                     = 1,
                    268:        kOHCIFunctionalState_Operational        = 2,
                    269:        kOHCIFunctionalState_Suspend            = 3
                    270: };
                    271: 
                    272: // hcCommandStatus register defs.
                    273: enum
                    274: {
                    275:        kOHCIHcCommandStatus_HCR                = kOHCIBit0,
                    276:        kOHCIHcCommandStatus_CLF                = kOHCIBit1,
                    277:        kOHCIHcCommandStatus_BLF                = kOHCIBit2,
                    278:        kOHCIHcCommandStatus_OCR                = kOHCIBit3,
                    279:        kOHCIHcCommandStatus_SOC                = OHCIBitRange (16, 17),
                    280:        kOHCIHcCommandStatus_SOCPhase   = OHCIBitRangePhase (16, 17),
                    281: 
                    282:        kOHCIHcCommandStatus_Reserved   = OHCIBitRange (4, 15) | OHCIBitRange (18, 31)
                    283: };
                    284: 
                    285: // hcInterrupt register defs.
                    286: enum
                    287: {
                    288:        kOHCIHcInterrupt_SO                             = kOHCIBit0,
                    289:        kOHCIHcInterrupt_WDH                    = kOHCIBit1,
                    290:        kOHCIHcInterrupt_SF                             = kOHCIBit2,
                    291:        kOHCIHcInterrupt_RD                             = kOHCIBit3,
                    292:        kOHCIHcInterrupt_UE                             = kOHCIBit4,
                    293:        kOHCIHcInterrupt_FNO                    = kOHCIBit5,
                    294:        kOHCIHcInterrupt_RHSC                   = kOHCIBit6,
                    295:        kOHCIHcInterrupt_OC                             = kOHCIBit30,
                    296:        kOHCIHcInterrupt_MIE                    = kOHCIBit31
                    297: };
                    298: 
                    299: /* ******************************************************************************
                    300: ** 
                    301: ** RegEntryID  :       The Global x-Namespace Entry Identifier
                    302: //
                    303: */
                    304: /* These are borrowed from nameregistry.h */
                    305: /* Naga Longterm: Better merge this with nameregistry.h */
                    306: struct RegEntryID {
                    307:        UInt8                                                   opaque[16];
                    308: };
                    309: typedef struct RegEntryID RegEntryID, *RegEntryIDPtr;
                    310: typedef UInt32 RegPropertyValueSize;
                    311: typedef char RegPropertyName;
                    312: 
                    313: ////////////////////////////////////////////////////////////////////////////////
                    314: //
                    315: // OHCI UIM data records.
                    316: //
                    317: 
                    318: typedef short RootHubID;
                    319: 
                    320: // Interrupt head struct
                    321: struct OHCIIntHeadStruct
                    322: {
                    323:        OHCIEndpointDescriptorPtr                               pHead;
                    324:        OHCIEndpointDescriptorPtr                               pTail;
                    325:        UInt32                                                                  pHeadPhysical;
                    326:        int                                                                             nodeBandwidth;
                    327: };
                    328: 
                    329: typedef struct OHCIIntHeadStruct
                    330:                                                                OHCIIntHead,
                    331:                                                                *OHCIIntHeadPtr;
                    332: 
                    333: 
                    334: struct OHCIUIMDataStruct
                    335: {
                    336:        RegEntryID                                                      ohciRegEntryID;                 // Name Registry entry of OHCI.
                    337: //     UIMID                                                           uimID;                                  // ID for OHCI UIM.
                    338:        RootHubID                                                       rootHubID;                              // Status of root hub, if 0, not enitialized otherwise has virtual ID number
                    339: 
                    340:        OHCIRegistersPtr                                        pOHCIRegisters;                 // Pointer to base address of OHCI registers.
                    341:        Ptr                                                                     pHCCA,                                  // Pointer to HCCA.
                    342:                                                                                pHCCAAllocation;                // Pointer to memory allocated for HCCA.
                    343:        OHCIIntHead                                                     pInterruptHead[64];             // ptr to private list of all interrupts heads                  
                    344:        UInt32                                                          pIsochHead;                             // ptr to Isochtonous list
                    345:        UInt32                                                          pBulkHead;                              // ptr to Bulk list
                    346:        UInt32                                                          pControlHead;                   // ptr to Control list
                    347:        OHCIPhysicalLogicalPtr                          pPhysicalLogical;               // ptr to list of memory maps
                    348:        OHCIGeneralTransferDescriptorPtr        pFreeTD;                                // list of Availabble Trasfer Descriptors
                    349:        OHCIEndpointDescriptorPtr                       pFreeED;                                // List of available Endpoint Descriptors
                    350:        OHCIGeneralTransferDescriptorPtr        pPendingTD;                             // list of non processed Trasfer Descriptors
                    351: 
                    352:        UInt32                                                          pageSize;
                    353:        
                    354:        // can't find includes for opaque InterruptSetMember                                    interruptSetMember;
                    355:        void                                                            *oldInterruptRefCon;
                    356:        InterruptHandler                                        oldInterruptHandler;
                    357:        InterruptEnabler                                        interruptEnabler;
                    358:        InterruptDisabler                                       interruptDisabler;
                    359:        struct  {
                    360:                UInt32                                                  scheduleOverrun;
                    361:                UInt32                                                  unrecoverableError;
                    362:                UInt32                                                  frameNumberOverflow;
                    363:                UInt32                                                  ownershipChange;
                    364:        } errors;
                    365: 
                    366: };
                    367: 
                    368: 
                    369: typedef struct OHCIUIMDataStruct
                    370:                                                                OHCIUIMData,
                    371:                                                                *OHCIUIMDataPtr;
                    372:                                                        
                    373: 
                    374: struct OHCIEndpointDescriptorStruct
                    375: {
                    376:        UInt32                                          dWord0;                         // control
                    377:        UInt32                                          dWord1;                         // pointer to last TD
                    378:        UInt32                                          dWord2;                         // pointer to first TD
                    379:        UInt32                                          dWord3;                         // Pointer to next ED
                    380:        UInt32                                          pVirtualNext;
                    381:        UInt32                                          pPhysical;
                    382:        UInt32                                          pVirtualTailP;
                    383:        UInt32                                          pVirtualHeadP;
                    384: };
                    385: 
                    386: struct OHCIGeneralTransferDescriptorStruct
                    387: {
                    388:        volatile UInt32                         dWord0;                         // Data controlling transfer.
                    389:        volatile UInt32                         dWord1;                         // Current buffer pointer.
                    390:        volatile UInt32                         dWord2;                         // Pointer to next transfer descriptor.
                    391:        UInt32                                          dWord3;                         // Pointer to end of buffer.
                    392:        //WARNING... remove for now, can't find #include anywhere CallBackFuncPtr                       CallBack;                       // only used if last TD, other wise its  nil
                    393:        long                                            refcon;                         // 
                    394:        UInt32                                          pPhysical;
                    395:        UInt32                                          pVirtualNext;
                    396:        UInt32                                          pIntBack;
                    397:        UInt32                                          pEndpoint;                      // pointer to TD's Endpoint
                    398:        UInt32                                          bufferSize;                     // used only by control transfers to keep track of data buffers size leftover
                    399:        UInt32                                          reserved2;                      // 
                    400: };
                    401: 
                    402: @interface AppleUSBCMD:IODirectDevice 
                    403: {
                    404: 
                    405:        unsigned long   ioBase; // USB Host Controller registers base
                    406:        port_t          port;                   // our interrupt port
                    407:        id                      theirId;                // ADB client's id for input callback
                    408:        unsigned int    reg_HcFmInterval, reg_HcCommandStatus, reg_HcControl;
                    409:        //Globals -yuck from MacOS OHCIUIM.c
                    410: 
                    411: 
                    412: }
                    413: 
                    414: 
                    415: + (Boolean)probe : (IOPCIDevice *) devDesc;    // initialize the driver
                    416: 
                    417: - initFromDeviceDescription : (IODeviceDescription *)deviceDescription;
                    418: 
                    419: //- (Boolean)enableCMDChip; 
                    420: //- (Boolean) SetupHCDLists;
                    421: - free; 
                    422: 
                    423: - (unsigned int) getADBKeyboardID;
                    424: 
                    425: - (void)interruptOccurred;
                    426: 
                    427: @end
                    428: 
                    429: 
                    430: 
                    431: 
                    432: 
                    433: 
                    434: 
                    435: 
                    436: 
                    437: 

unix.superglobalmegacorp.com

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