Annotation of XNU/iokit/Drivers/usb/drvAppleOHCI/AppleOHCI.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * The contents of this file constitute Original Code as defined in and
                      7:  * are subject to the Apple Public Source License Version 1.1 (the
                      8:  * "License").  You may not use this file except in compliance with the
                      9:  * License.  Please obtain a copy of the License at
                     10:  * http://www.apple.com/publicsource and read it before using this file.
                     11:  * 
                     12:  * This Original Code and all software distributed under the License are
                     13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     17:  * License for the specific language governing rights and limitations
                     18:  * under the License.
                     19:  * 
                     20:  * @APPLE_LICENSE_HEADER_END@
                     21:  */
                     22: /*
                     23:  * Copyright (c) 1998 Apple Computer, Inc.  All rights reserved.
                     24:  *
                     25:  * HISTORY
                     26:  *
                     27:  */
                     28: 
                     29: 
                     30: #ifndef _IOKIT_APPLEOHCI_H
                     31: #define _IOKIT_APPLEOHCI_H
                     32: 
                     33: #include <libkern/c++/OSData.h>
                     34: #include <IOKit/IOService.h>
                     35: #include <IOKit/IOInterruptEventSource.h>
                     36: #include <IOKit/pci/IOPCIBridge.h>
                     37: #include <IOKit/pci/IOPCIDevice.h>
                     38: 
                     39: #include <IOKit/usb/IOUSBController.h>
                     40: #include <IOKit/usb/USB.h>
                     41: #include <IOKit/usb/USBHub.h>
                     42: 
                     43: #include "OHCI.h"
                     44: #include "OHCIRootHub.h"
                     45: 
                     46: #define USB_CONSTANT16(x)      ((((x) >> 8) & 0x0ff) | ((x & 0xff) << 8))
                     47: #define MICROSECOND            (1)
                     48: #define MILLISECOND            (1000)
                     49: 
                     50: #ifdef __ppc__
                     51: #define IOSync eieio
                     52: #endif
                     53: 
                     54: extern "C" {
                     55:     extern int kvtophys(vm_offset_t);
                     56:     extern void delay(int);
                     57: };
                     58: 
                     59: struct InterruptTransaction {
                     60:     IOMemoryDescriptor *       buf;
                     61:     UInt32                     bufLen;
                     62:     IOUSBCompletion            completion;
                     63: };
                     64: #define kMaxOutstandingTrans 4
                     65: 
                     66: class IONaturalMemoryCursor;
                     67: 
                     68: class AppleOHCI : public IOUSBController
                     69: {
                     70:     OSDeclareDefaultStructors(AppleOHCI)
                     71: 
                     72: protected:
                     73: 
                     74:     char *usbBuffer;
                     75:     IOPCIDevice *              _device;
                     76:     IOMemoryMap *      _deviceBase;
                     77:     IONaturalMemoryCursor * _genCursor;
                     78:     IONaturalMemoryCursor * _isoCursor;
                     79:     OHCIGeneralTransferDescriptorPtr _pendingHead, _pendingTail;
                     80:     UInt16             _vendorID;
                     81:     UInt16             _deviceID;
                     82:     UInt16             _revisionID;
                     83: 
                     84:     static void OHCIUIMInterruptHandler(OSObject *owner,
                     85:                                         IOInterruptEventSource * source,
                     86:                                         int count);
                     87:     void       SetVendorInfo(void);
                     88:     void       finishPending();
                     89: 
                     90:     OHCIUIMDataPtr             pOHCIUIMData;
                     91:     IOInterruptEventSource     *interruptSource;
                     92:     IOLock *                   _intLock;
                     93:     struct InterruptTransaction        _outstandingTrans[kMaxOutstandingTrans];
                     94: 
                     95:     IOReturn OHCIUIMControlInitialize(void);
                     96:     IOReturn OHCIUIMBulkInitialize (void);
                     97:     IOReturn OHCIUIMIsochronousInitialize(void);
                     98:     IOReturn OHCIUIMInterruptInitialize (void);
                     99: 
                    100:     // Memory routines
                    101:     UInt32 OHCIUIMGetLogicalAddress(UInt32 pPhysicalAddress);
                    102:     UInt32 OHCIUIMGetPhysicalAddress(UInt32 LogicalAddress,
                    103:                                      UInt32 count);
                    104:     UInt32 OHCIUIMCreatePhysicalAddress(UInt32 pLogicalAddress,
                    105:                                         UInt32 count);
                    106:     IOReturn OHCIUIMAllocateMemory(int num_of_TDs,
                    107:                                    int num_of_EDs,
                    108:                                    int num_of_ITDs);
                    109:     void doCallback(OHCIGeneralTransferDescriptorPtr   nextTD,
                    110:                     UInt32                             transferStatus,
                    111:                     UInt32                             bufferSizeRemaining);
                    112:     UInt32 findBufferRemaining (OHCIGeneralTransferDescriptorPtr pCurrentTD);
                    113:     OHCIIsochTransferDescriptorPtr OHCIUIMAllocateITD(void);
                    114:     OHCIGeneralTransferDescriptorPtr OHCIUIMAllocateTD(void);
                    115:     OHCIEndpointDescriptorPtr OHCIUIMAllocateED(void);
                    116:     IOReturn OHCIUIMDeallocateITD (OHCIIsochTransferDescriptorPtr pTD);
                    117:     IOReturn OHCIUIMDeallocateTD (OHCIGeneralTransferDescriptorPtr pTD);
                    118:     IOReturn OHCIUIMDeallocateED (OHCIEndpointDescriptorPtr pED);
                    119:     IOReturn RemoveAllTDs(OHCIEndpointDescriptorPtr pED);
                    120:     IOReturn RemoveTDs(OHCIEndpointDescriptorPtr pED);
                    121:     IOReturn DoDoneQueueProcessing(OHCIGeneralTransferDescriptorPtr pHCDoneTD,
                    122:                                    IOUSBCompletionAction safeAction);
                    123:     void UIMProcessDoneQueue(IOUSBCompletionAction safeAction=0);
                    124:     void UIMRootHubStatusChange(void);
                    125:     void SimulateRootHubInt(
                    126:             UInt8                                      endpoint,
                    127:             IOMemoryDescriptor *                       buf,
                    128:             UInt32                                     bufLen,
                    129:             IOUSBCompletion                            completion);
                    130:     
                    131:     OHCIEndpointDescriptorPtr AddEmptyEndPoint(
                    132:             UInt8                                      functionAddress,
                    133:             UInt8                                      endpointNumber,
                    134:             UInt16                                     maxPacketSize,
                    135:             UInt8                                      speed,
                    136:             UInt8                                      direction,
                    137:             OHCIEndpointDescriptorPtr                  pED,
                    138:             OHCIEDFormat                               format);
                    139: 
                    140:     OHCIEndpointDescriptorPtr FindEndpoint (
                    141:             short                                      functionNumber,
                    142:             short                                      endpointNumber,
                    143:             short                                      direction,
                    144:             OHCIEndpointDescriptorPtr                  *pEDQueueBack,
                    145:             UInt32                                     *controlMask);
                    146: 
                    147:     OHCIEndpointDescriptorPtr FindControlEndpoint (
                    148:             short                                      functionNumber,
                    149:             short                                      endpointNumber,
                    150:             OHCIEndpointDescriptorPtr                  *pEDBack);
                    151: 
                    152:     OHCIEndpointDescriptorPtr FindBulkEndpoint (
                    153:             short                                      functionNumber,
                    154:             short                                      endpointNumber,
                    155:             short                                      direction,
                    156:             OHCIEndpointDescriptorPtr                  *pEDBack);
                    157: 
                    158:     OHCIEndpointDescriptorPtr FindIsochronousEndpoint(
                    159:             short                                      functionNumber,
                    160:             short                                      endpointNumber,
                    161:             short                                      direction,
                    162:             OHCIEndpointDescriptorPtr                  *pEDBack);
                    163:             
                    164:     OHCIEndpointDescriptorPtr FindInterruptEndpoint(
                    165:             short                                      functionNumber,
                    166:             short                                      endpointNumber,
                    167:             short                                      direction,
                    168:             OHCIEndpointDescriptorPtr                  *pEDBack);
                    169: 
                    170:     
                    171:     void DoOptiFix(OHCIEndpointDescriptorPtr pIsochHead);
                    172:     void OptiLSHSFix(void);
                    173:     void dumpRegs(void);
                    174:     bool DetermineInterruptOffset(UInt32          pollingRate,
                    175:                             UInt32          reserveBandwidth,
                    176:                             int             *offset);
                    177:     void ReturnTransactions(
                    178:                 OHCIGeneralTransferDescriptor  *transaction,
                    179:                 UInt32                         tail);
                    180: 
                    181: public:
                    182:     bool init(OSDictionary * propTable);
                    183: 
                    184:     /*
                    185:      * UIM methods
                    186:      */
                    187:     IOReturn UIMInitialize(IOService * provider);
                    188:     IOReturn UIMFinalize();
                    189:     // Control
                    190:     virtual IOReturn UIMCreateControlEndpoint(
                    191:             UInt8                              functionNumber,
                    192:             UInt8                              endpointNumber,
                    193:             UInt16                             maxPacketSize,
                    194:             UInt8                              speed);
                    195: 
                    196:    virtual IOReturn UIMCreateControlTransfer(
                    197:             short                              functionNumber,
                    198:             short                              endpointNumber,
                    199:             IOUSBCompletion                    completion,
                    200:             void *                             CBP,
                    201:             bool                               bufferRounding,
                    202:             UInt32                             bufferSize,
                    203:             short                              direction);
                    204: 
                    205:     virtual IOReturn UIMCreateControlTransfer(
                    206:             short                              functionNumber,
                    207:             short                              endpointNumber,
                    208:             IOUSBCompletion                    completion,
                    209:             IOMemoryDescriptor *               CBP,
                    210:             bool                               bufferRounding,
                    211:             UInt32                             bufferSize,
                    212:             short                              direction);
                    213: 
                    214:     // Bulk
                    215:     virtual IOReturn UIMCreateBulkEndpoint(
                    216:             UInt8                              functionNumber,
                    217:             UInt8                              endpointNumber,
                    218:             UInt8                              direction,
                    219:             UInt8                              speed,
                    220:             UInt8                              maxPacketSize);
                    221: 
                    222:     virtual IOReturn UIMCreateBulkTransfer(
                    223:             short                              functionNumber,
                    224:             short                              endpointNumber,
                    225:             IOUSBCompletion                    completion,
                    226:             IOMemoryDescriptor *               CBP,
                    227:             bool                               bufferRounding,
                    228:             UInt32                             bufferSize,
                    229:             short                              direction);
                    230: 
                    231:     virtual IOReturn UIMCreateGeneralTransfer(
                    232:             OHCIEndpointDescriptorPtr          queue,
                    233:             IOUSBCompletion                    completion,
                    234:             IOMemoryDescriptor *               CBP,
                    235:             UInt32                             bufferSize,
                    236:             UInt32                             flags,
                    237:             UInt32                             type,
                    238:             UInt32                             kickBits);
                    239: 
                    240:     // Interrupt
                    241:     virtual IOReturn UIMCreateInterruptEndpoint(
                    242:             short                              functionAddress,
                    243:             short                              endpointNumber,
                    244:             UInt8                              direction,
                    245:             short                              speed,
                    246:             UInt16                             maxPacketSize,
                    247:             short                              pollingRate);
                    248: 
                    249:     virtual IOReturn UIMCreateInterruptTransfer(
                    250:             short                              functionNumber,
                    251:             short                              endpointNumber,
                    252:             IOUSBCompletion                    completion,
                    253:             IOMemoryDescriptor *               CBP,
                    254:             bool                               bufferRounding,
                    255:             UInt32                             bufferSize,
                    256:             short                              direction);
                    257: 
                    258:     // Isoch
                    259:     virtual IOReturn UIMCreateIsochEndpoint(
                    260:             short                              functionAddress,
                    261:             short                              endpointNumber,
                    262:             UInt32                             maxPacketSize,
                    263:             UInt8                              direction);
                    264: 
                    265:     virtual IOReturn UIMCreateIsochTransfer(
                    266:        short                           functionAddress,
                    267:        short                           endpointNumber,
                    268:        IOUSBIsocCompletion             completion,
                    269:        UInt8                           direction,
                    270:        UInt64                          frameStart,
                    271:        IOMemoryDescriptor *            pBuffer,
                    272:        UInt32                          frameCount,
                    273:        IOUSBIsocFrame                  *pFrames);
                    274: 
                    275:     virtual IOReturn UIMAbortEndpoint(
                    276:             short                              functionNumber,
                    277:             short                              endpointNumber,
                    278:             short                              direction);
                    279:     virtual IOReturn UIMDeleteEndpoint(
                    280:             short                              functionNumber,
                    281:             short                              endpointNumber,
                    282:             short                              direction);
                    283:     virtual IOReturn UIMClearEndpointStall(
                    284:             short                              functionNumber,
                    285:             short                              endpointNumber,
                    286:             short                              direction);
                    287:     /*
                    288:      * Root hub methods
                    289:      */
                    290:     IOReturn getRootHubDeviceDescriptor(IOUSBDeviceDescriptor *desc);
                    291:     IOReturn getRootHubDescriptor(IOUSBHubDescriptor *desc);
                    292:     IOReturn setRootHubDescriptor(OSData *buffer);
                    293:     IOReturn getRootHubConfDescriptor(OSData *desc);
                    294:     IOReturn getRootHubStatus(IOUSBHubStatus *status);
                    295:     IOReturn setRootHubFeature(UInt16 wValue);
                    296:     IOReturn clearRootHubFeature(UInt16 wValue);
                    297:     IOReturn getRootHubPortStatus(IOUSBHubPortStatus *status, UInt16 port);
                    298:     IOReturn setRootHubPortFeature(UInt16 wValue, UInt16 port);
                    299:     IOReturn clearRootHubPortFeature(UInt16 wValue, UInt16 port);
                    300:     IOReturn getRootHubPortState(UInt8 *state, UInt16 port);
                    301:     IOReturn setHubAddress(UInt16 wValue);
                    302: 
                    303:     void OHCIRootHubPower(bool on);
                    304:     void OHCIRootHubResetChangeConnection(UInt16 port);
                    305:     void OHCIRootHubResetResetChange(UInt16 port);
                    306:     void OHCIRootHubResetSuspendChange(UInt16 port);
                    307:     void OHCIRootHubResetEnableChange(UInt16 port);
                    308:     void OHCIRootHubResetOverCurrentChange(UInt16 port);
                    309:     void OHCIRootHubResetPort (UInt16 port);
                    310:     void OHCIRootHubPortEnable(UInt16 port, bool on);
                    311:     void OHCIRootHubPortSuspend(UInt16 port, bool on);
                    312:     void OHCIRootHubPortPower(UInt16 port, bool on);
                    313: 
                    314:     virtual UInt32 GetBandwidthAvailable();
                    315:     virtual UInt64 GetFrameNumber();
                    316:     virtual UInt32 GetFrameNumber32();
                    317: 
                    318:     virtual void pollInterrupts(IOUSBCompletionAction safeAction=0);
                    319: 
                    320: };
                    321: 
                    322: #endif /* _IOKIT_APPLEOHCI_H */

unix.superglobalmegacorp.com

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