/* * Copyright (c) 1998-2002 Apple Computer, Inc. All rights reserved. * * @APPLE_LICENSE_HEADER_START@ * * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved. * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in * compliance with the License. Please obtain a copy of the License at * http://www.opensource.apple.com/apsl/ and read it before using this * file. * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. * Please see the License for the specific language governing rights and * limitations under the License. * * @APPLE_LICENSE_HEADER_END@ */ /* * Copyright (c) 1999-2002 Apple Computer, Inc. All rights reserved. * * HISTORY * */ #ifndef _IOKIT_IOFIREWIREBUS_H #define _IOKIT_IOFIREWIREBUS_H #include #include #include #include #include extern const OSSymbol *gFireWireROM; extern const OSSymbol *gFireWireNodeID; extern const OSSymbol *gFireWireSelfIDs; extern const OSSymbol *gFireWireSpeed; extern const OSSymbol *gFireWireUnit_Spec_ID; extern const OSSymbol *gFireWireUnit_SW_Version; extern const OSSymbol *gFireWireVendor_ID; extern const OSSymbol *gFireWire_GUID; extern const OSSymbol *gFireWireVendor_Name; extern const OSSymbol *gFireWireProduct_Name; class IOFireWireDevice; class IOLocalConfigDirectory; class IOFWLocalIsochPort; class IOFireWirePowerManager; class IOFireWireBus; #pragma mark - /*! @class IOFireWireBusAux */ class IOFireWireBusAux : public OSObject { OSDeclareDefaultStructors(IOFireWireBusAux) friend class IOFireWireBus; protected: /*! @struct ExpansionData @discussion This structure will be used to expand the capablilties of the class in the future. */ struct ExpansionData { }; /*! @var reserved Reserved for future use. (Internal use only) */ ExpansionData * reserved; private: OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 0); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 1); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 2); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 3); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 4); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 5); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 6); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 7); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 8); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 9); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 10); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 11); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 12); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 13); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 14); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 15); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 16); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 17); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 18); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 19); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 20); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 21); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 22); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 23); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 24); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 25); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 26); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 27); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 28); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 29); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 30); OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 31); }; #pragma mark - class IOFireWireBus : public IOService { OSDeclareAbstractStructors(IOFireWireBus) public: typedef void (CallUserProc)(void *refcon, void * userProc, void * dclCommand); typedef struct _DCLTaskInfo { task_t fTask; // Task DCL addresses are valid in vm_address_t fDCLBaseAddr; UInt32 fDCLSize; // In bytes vm_address_t fDataBaseAddr; UInt32 fDataSize; CallUserProc *fCallUser; // Routine to handle DCLCallCommandProcs void *fCallRefCon; // Refcon for user call } DCLTaskInfo; static const IORegistryPlane * gIOFireWirePlane; IOFireWireBusAux * fAuxiliary; // Create an Isochronous Channel object virtual IOFWIsochChannel *createIsochChannel( bool doIRM, UInt32 bandwidth, IOFWSpeed prefSpeed, IOFWIsochChannel::ForceStopNotificationProc stopProc=NULL, void *stopRefCon=NULL) = 0; // Create a local isochronous port to run the given DCL program virtual IOFWLocalIsochPort *createLocalIsochPort(bool talking, DCLCommand *opcodes, DCLTaskInfo *info = 0, UInt32 startEvent = 0, UInt32 startState = 0, UInt32 startMask = 0) = 0; virtual IOReturn getCycleTime(UInt32 &cycleTime) = 0; virtual IOReturn getBusCycleTime(UInt32 &busTime, UInt32 &cycleTime) = 0; // Methods to manipulate the local Config ROM virtual IOReturn AddUnitDirectory(IOLocalConfigDirectory *unitDir) = 0; virtual IOReturn RemoveUnitDirectory(IOLocalConfigDirectory *unitDir) = 0; // Cause a bus reset virtual IOReturn resetBus() = 0; // Convert a firewire nodeID into the IOFireWireDevice for it virtual IOFireWireDevice * nodeIDtoDevice(UInt32 generation, UInt16 nodeID) = 0; // Execute specified function on workloop after specified delay // Returned command is for delay, call it's cancel() function to cancel timeout. virtual IOFWDelayCommand * createDelayedCmd(UInt32 uSecDelay, FWBusCallback func, void *refcon) = 0; virtual IOFWPhysicalAddressSpace *createPhysicalAddressSpace(IOMemoryDescriptor *mem) = 0; virtual IOFWPseudoAddressSpace *createPseudoAddressSpace(FWAddress *addr, UInt32 len, FWReadCallback reader, FWWriteCallback writer, void *refcon) = 0; // Extract info about the async request virtual bool isLockRequest(IOFWRequestRefCon refcon) = 0; virtual bool isQuadRequest(IOFWRequestRefCon refcon) = 0; virtual UInt32 getExtendedTCode(IOFWRequestRefCon refcon) = 0; // How big (as a power of two) can packets sent to/received from the node be? virtual int maxPackLog(bool forSend, UInt16 nodeAddress) const = 0; // How big (as a power of two) can packets sent from A to B be? virtual int maxPackLog(UInt16 nodeA, UInt16 nodeB) const = 0; // Force given node to be root (via root holdoff Phy packet) virtual IOReturn makeRoot(UInt32 generation, UInt16 nodeID) = 0; // Create address space at fixed address in initial register space virtual IOFWPseudoAddressSpace *createInitialAddressSpace(UInt32 addressLo, UInt32 len, FWReadCallback reader, FWWriteCallback writer, void *refcon) = 0; // Get address space object for given address, if any virtual IOFWAddressSpace *getAddressSpace(FWAddress address) = 0; // Extract info about the async request - was the request ack'ed complete already? virtual bool isCompleteRequest(IOFWRequestRefCon refcon) = 0; virtual IOFWAsyncStreamCommand *createAsyncStreamCommand( UInt32 generation, UInt32 channel, UInt32 sync, UInt32 tag, IOMemoryDescriptor *hostMem, UInt32 size, int speed,FWAsyncStreamCallback completion=NULL, void *refcon=NULL) = 0; virtual UInt32 hopCount(UInt16 nodeAAddress, UInt16 nodeBAddress ) = 0; virtual UInt32 hopCount(UInt16 nodeAAddress ) = 0; virtual IOFireWirePowerManager * getBusPowerManager( void ) = 0; protected: virtual IOFireWireBusAux * createAuxiliary( void ) = 0; private: OSMetaClassDeclareReservedUsed(IOFireWireBus, 0); OSMetaClassDeclareReservedUsed(IOFireWireBus, 1); OSMetaClassDeclareReservedUsed(IOFireWireBus, 2); OSMetaClassDeclareReservedUsed(IOFireWireBus, 3); OSMetaClassDeclareReservedUsed(IOFireWireBus, 4); OSMetaClassDeclareReservedUsed(IOFireWireBus, 5); OSMetaClassDeclareReservedUsed(IOFireWireBus, 6); OSMetaClassDeclareReservedUsed(IOFireWireBus, 7); }; #endif /* ! _IOKIT_IOFIREWIREBUS_H */