|
|
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) 1999 Apple Computer, Inc. All rights reserved. ! 24: * ! 25: * A DCL program to interpret (in software) a program that's too complicated ! 26: * for the DMA engine. ! 27: * ! 28: * HISTORY ! 29: * ! 30: */ ! 31: ! 32: ! 33: #ifndef _IOKIT_IOFWDCLTRANSLATOR_H ! 34: #define _IOKIT_IOFWDCLTRANSLATOR_H ! 35: ! 36: #include <libkern/c++/OSObject.h> ! 37: #include <IOKit/firewire/IOFWDCLProgram.h> ! 38: ! 39: class IODCLTranslator : public IODCLProgram ! 40: { ! 41: OSDeclareAbstractStructors(IODCLTranslator) ! 42: ! 43: protected: ! 44: enum ! 45: { ! 46: kNumPingPongs = 2, ! 47: kNumPacketsPerPingPong = 500, ! 48: kMaxIsochPacketSize = 1000, ! 49: kPingPongBufferSize = ! 50: kNumPingPongs * kNumPacketsPerPingPong * kMaxIsochPacketSize ! 51: }; ! 52: ! 53: // Opcodes and buffer for pingpong program ! 54: DCLLabel fStartLabel; ! 55: DCLTransferPacket fTransfers[kNumPingPongs*kNumPacketsPerPingPong]; ! 56: DCLCallProc fCalls[kNumPingPongs]; ! 57: DCLJump fJumpToStart; ! 58: UInt8 fBuffer[kPingPongBufferSize]; ! 59: ! 60: IODCLProgram * fHWProgram; // Hardware program executing our opcodes ! 61: DCLCommandPtr fToInterpret; // The commands to interpret ! 62: DCLCommandPtr fCurrentDCLCommand; // Current command to interpret ! 63: int fPingCount; // Are we pinging or ponging? ! 64: ! 65: UInt32 fPacketHeader; ! 66: ! 67: static void ListeningDCLPingPongProc(DCLCommandPtr pDCLCommand); ! 68: static void TalkingDCLPingPongProc(DCLCommandPtr pDCLCommand); ! 69: ! 70: public: ! 71: virtual bool init(DCLCommandPtr toInterpret); ! 72: virtual IOReturn allocateHW(IOFWSpeed speed, UInt32 chan); ! 73: virtual IOReturn releaseHW(); ! 74: virtual IOReturn notify(UInt32 notificationType, ! 75: DCLCommandPtr *dclCommandList, UInt32 numDCLCommands); ! 76: virtual void stop(); ! 77: ! 78: DCLCommandPtr getTranslatorOpcodes() {return (DCLCommandPtr)&fStartLabel;} ! 79: void setHWProgram(IODCLProgram *program) {fHWProgram = program;}; ! 80: }; ! 81: ! 82: class IODCLTranslateTalk : public IODCLTranslator ! 83: { ! 84: OSDeclareDefaultStructors(IODCLTranslateTalk) ! 85: ! 86: protected: ! 87: ! 88: public: ! 89: virtual IOReturn compile(IOFWSpeed speed, UInt32 chan); ! 90: virtual IOReturn start(); ! 91: ! 92: }; ! 93: class IODCLTranslateListen : public IODCLTranslator ! 94: { ! 95: OSDeclareDefaultStructors(IODCLTranslateListen) ! 96: ! 97: protected: ! 98: ! 99: public: ! 100: virtual IOReturn compile(IOFWSpeed speed, UInt32 chan); ! 101: virtual IOReturn start(); ! 102: ! 103: }; ! 104: #endif /* ! _IOKIT_IOFWDCLPROGRAM_H */ ! 105:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.