|
|
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) 1997 Apple Computer, Inc. ! 24: * ! 25: * ! 26: * HISTORY ! 27: * ! 28: * sdouglas 22 Oct 97 - first checked in. ! 29: * sdouglas 21 July 98 - start IOKit ! 30: */ ! 31: ! 32: ! 33: #ifndef __IONDRVINTERFACE__ ! 34: #define __IONDRVINTERFACE__ ! 35: ! 36: #include <IOKit/IORegistryEntry.h> ! 37: #include <IOKit/IOInterruptEventSource.h> ! 38: ! 39: #include <IOKit/ndrvsupport/IOMacOSTypes.h> ! 40: ! 41: #pragma options align=mac68k ! 42: ! 43: #ifdef __cplusplus ! 44: extern "C" { ! 45: #endif ! 46: ! 47: typedef void * RegEntryID[4]; ! 48: ! 49: struct DriverInitInfo { ! 50: UInt16 refNum; ! 51: RegEntryID deviceEntry; ! 52: }; ! 53: ! 54: #define MAKE_REG_ENTRY(regEntryID,obj) \ ! 55: regEntryID[ 0 ] = (void *) obj; \ ! 56: regEntryID[ 1 ] = (void *) ~(UInt32)obj; \ ! 57: regEntryID[ 2 ] = (void *) 0x53696d65; \ ! 58: regEntryID[ 3 ] = (void *) 0x52756c7a; ! 59: ! 60: #define REG_ENTRY_TO_OBJ(regEntryID,obj) \ ! 61: if( (UInt32)((obj = ((IORegistryEntry **)regEntryID)[ 0 ])) \ ! 62: != ~((UInt32 *)regEntryID)[ 1 ] ) \ ! 63: return( -2538); ! 64: ! 65: #define REG_ENTRY_TO_OBJ_RET(regEntryID,obj,ret) \ ! 66: if( (UInt32)((obj = ((IORegistryEntry **)regEntryID)[ 0 ])) \ ! 67: != ~((UInt32 *)regEntryID)[ 1 ] ) \ ! 68: return( ret); ! 69: ! 70: #define REG_ENTRY_TO_PT(regEntryID,obj) \ ! 71: IORegistryEntry * obj; \ ! 72: if( (UInt32)((obj = ((IORegistryEntry **)regEntryID)[ 0 ])) \ ! 73: != ~((UInt32 *)regEntryID)[ 1 ] ) \ ! 74: return( -2538); ! 75: ! 76: #define REG_ENTRY_TO_SERVICE(regEntryID,type,obj) \ ! 77: IORegistryEntry * regEntry; \ ! 78: type * obj; \ ! 79: if( (UInt32)((regEntry = ((IORegistryEntry **)regEntryID)[ 0 ])) \ ! 80: != ~((UInt32 *)regEntryID)[ 1 ] ) \ ! 81: return( -2538); \ ! 82: if( 0 == (obj = OSDynamicCast( type, regEntry))) \ ! 83: return( -2542); ! 84: ! 85: struct CntrlParam { ! 86: void * qLink; ! 87: short qType; ! 88: short ioTrap; ! 89: void * ioCmdAddr; ! 90: void * ioCompletion; ! 91: short ioResult; ! 92: char * ioNamePtr; ! 93: short ioVRefNum; ! 94: short ioCRefNum; ! 95: short csCode; ! 96: void * csParams; ! 97: short csParam[9]; ! 98: }; ! 99: typedef struct CntrlParam CntrlParam, *CntrlParamPtr; ! 100: ! 101: #pragma options align=reset ! 102: ! 103: enum { ! 104: kOpenCommand = 0, ! 105: kCloseCommand = 1, ! 106: kReadCommand = 2, ! 107: kWriteCommand = 3, ! 108: kControlCommand = 4, ! 109: kStatusCommand = 5, ! 110: kKillIOCommand = 6, ! 111: kInitializeCommand = 7, /* init driver and device*/ ! 112: kFinalizeCommand = 8, /* shutdown driver and device*/ ! 113: kReplaceCommand = 9, /* replace an old driver*/ ! 114: kSupersededCommand = 10 /* prepare to be replaced by a new driver*/ ! 115: }; ! 116: enum { ! 117: kSynchronousIOCommandKind = 0x00000001, ! 118: kAsynchronousIOCommandKind = 0x00000002, ! 119: kImmediateIOCommandKind = 0x00000004 ! 120: }; ! 121: ! 122: struct InterruptSetMember { ! 123: void * setID; ! 124: UInt32 member; ! 125: }; ! 126: typedef struct InterruptSetMember InterruptSetMember; ! 127: ! 128: typedef SInt32 (*InterruptHandler)( InterruptSetMember setMember, void *refCon, UInt32 theIntCount); ! 129: typedef void (*InterruptEnabler)( InterruptSetMember setMember, void *refCon); ! 130: typedef Boolean (*InterruptDisabler)( InterruptSetMember setMember, void *refCon); ! 131: ! 132: enum { ! 133: kFirstMemberNumber = 1, ! 134: kIsrIsComplete = 0, ! 135: kIsrIsNotComplete = -1, ! 136: kMemberNumberParent = -2 ! 137: }; ! 138: ! 139: enum { ! 140: kReturnToParentWhenComplete = 0x00000001, ! 141: kReturnToParentWhenNotComplete = 0x00000002 ! 142: }; ! 143: ! 144: enum { ! 145: kISTChipInterruptSource = 0, ! 146: kISTOutputDMAInterruptSource = 1, ! 147: kISTInputDMAInterruptSource = 2, ! 148: kISTPropertyMemberCount = 3 ! 149: }; ! 150: #define kISTPropertyName "driver-ist" ! 151: ! 152: extern OSStatus CallTVector( ! 153: void * p1, void * p2, void * p3, void * p4, void * p5, void * p6, ! 154: struct TVector * entry ); ! 155: ! 156: #ifdef __cplusplus ! 157: } ! 158: #endif ! 159: ! 160: ! 161: class IONDRV : public OSObject ! 162: { ! 163: OSDeclareDefaultStructors(IONDRV) ! 164: ! 165: private: ! 166: void * pcInst; ! 167: struct TVector * fDoDriverIO; ! 168: struct DriverDescription * theDriverDesc; ! 169: ! 170: public: ! 171: static IONDRV * instantiate( IOLogicalAddress container, ! 172: IOByteCount containerSize ); ! 173: ! 174: static IONDRV * fromRegistryEntry( IORegistryEntry * regEntry ); ! 175: ! 176: virtual void free( void ); ! 177: ! 178: virtual IOReturn getSymbol( const char * symbolName, ! 179: IOLogicalAddress * address ); ! 180: ! 181: virtual const char * driverName( void ); ! 182: ! 183: virtual IOReturn doDriverIO( UInt32 commandID, void * contents, ! 184: UInt32 commandCode, UInt32 commandKind ); ! 185: ! 186: }; ! 187: ! 188: struct IONDRVInterruptSource { ! 189: void * refCon; ! 190: struct TVector * handler; ! 191: struct TVector * enabler; ! 192: struct TVector * disabler; ! 193: bool enabled; ! 194: }; ! 195: ! 196: class IONDRVInterruptSet : public OSObject { ! 197: ! 198: OSDeclareDefaultStructors(IONDRVInterruptSet) ! 199: ! 200: public: ! 201: IOService * provider; ! 202: IOOptionBits options; ! 203: UInt32 count; ! 204: IONDRVInterruptSource * sources; ! 205: IONDRVInterruptSet * child; ! 206: ! 207: static IONDRVInterruptSet * with(IOService * provider, ! 208: IOOptionBits options, SInt32 count); ! 209: void free(); ! 210: }; ! 211: ! 212: #endif /* __IONDRVINTERFACE__ */ ! 213:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.