Annotation of XNU/iokit/Drivers/usb/drvAppleOHCI/AppleOHCI.h, revision 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.