|
|
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: #include "AppleOHCI.h" ! 31: #include <libkern/OSByteOrder.h> ! 32: ! 33: #define nil (0) ! 34: ! 35: #define super IOUSBController ! 36: #define self this ! 37: ! 38: void AppleOHCI::DoOptiFix(OHCIEndpointDescriptorPtr pHead) ! 39: { ! 40: OHCIEndpointDescriptorPtr pED; ! 41: OHCIGeneralTransferDescriptorPtr pTD; ! 42: int i = 0; ! 43: ! 44: // DebugStr ((ConstStr255Param) "DoOptiFix"); ! 45: ! 46: for (i=0; i<27; i++) { ! 47: // allocate ED ! 48: pED = OHCIUIMAllocateED(); ! 49: pED->pLogicalNext = nil; ! 50: //make ED and FA = 0 ! 51: pED->flags = 0; ! 52: pTD = OHCIUIMAllocateTD(); ! 53: pED->tdQueueHeadPtr = OSSwapInt32 ((UInt32) pTD->pPhysical); ! 54: pTD->nextTD = pED->tdQueueTailPtr; ! 55: pTD->pEndpoint = pED; ! 56: pTD->pType = kOHCIOptiLSBug; ! 57: pED->tdQueueTailPtr = OSSwapInt32 ((UInt32) pTD->pPhysical); ! 58: ! 59: pED->nextED = pHead->nextED; ! 60: pHead->nextED = OSSwapInt32((UInt32) pED->pPhysical); ! 61: pHead = pED; ! 62: } ! 63: } ! 64: ! 65: void AppleOHCI::OptiLSHSFix(void) ! 66: { ! 67: ! 68: // Do Opti Errata stuff here!!!!!! ! 69: int i; ! 70: OHCIIntHeadPtr pInterruptHead; ! 71: OHCIEndpointDescriptorPtr pControlED; ! 72: OHCIRegistersPtr pOHCIRegisters; ! 73: UInt32 controlState; ! 74: ! 75: pOHCIRegisters = pOHCIUIMData->pOHCIRegisters; ! 76: ! 77: pOHCIUIMData->OptiOn = 1; ! 78: ! 79: //Turn off list processing ! 80: controlState = OSReadLittleInt32(&pOHCIRegisters->hcControl, 0); ! 81: OSWriteLittleInt32(&pOHCIRegisters->hcControl, 0, ! 82: kOHCIFunctionalState_Operational << kOHCIHcControl_HCFSPhase); ! 83: ! 84: // wait a millisecond ! 85: IOSleep(2); ! 86: ! 87: pInterruptHead = pOHCIUIMData->pInterruptHead; ! 88: ! 89: // add dummy EDs to 8ms interrupts ! 90: for ( i = 0; i< 8; i++) ! 91: DoOptiFix(pInterruptHead[48 + i].pHead); ! 92: ! 93: //Assign Tail of Control to point to head of Bulk ! 94: ! 95: pControlED = (OHCIEndpointDescriptorPtr) pOHCIUIMData->pControlTail; ! 96: pControlED->nextED = pOHCIRegisters->hcBulkHeadED; ! 97: ! 98: // add dummy EDs to end of Control ! 99: DoOptiFix( (OHCIEndpointDescriptorPtr) pOHCIUIMData->pControlTail); ! 100: ! 101: // turn on everything previous but Bulk ! 102: controlState &= ~kOHCIHcControl_BLE; ! 103: OSWriteLittleInt32(&pOHCIRegisters->hcControl, 0, controlState); ! 104: ! 105: //End of Opti Fix ! 106: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.