|
|
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.