|
|
1.1 root 1: /*
2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights
7: * Reserved. This file contains Original Code and/or Modifications of
8: * Original Code as defined in and that are subject to the Apple Public
9: * Source License Version 1.1 (the "License"). You may not use this file
10: * except in compliance with the License. Please obtain a copy of the
11: * License at http://www.apple.com/publicsource and read it before using
12: * this file.
13: *
14: * The Original Code and all software distributed under the License are
15: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
19: * License for the specific language governing rights and limitations
20: * under the License.
21: *
22: * @APPLE_LICENSE_HEADER_END@
23: */
24:
25: /*
26: File: DriverServicesPriv.h
27:
28: Contains: Defs for private DriverServices interfaces.
29:
30: Version:
31:
32: DRI: Jonathan Sand
33:
34: Copyright: � 1985-1998 by Apple Computer, Inc., all rights reserved
35:
36: Warning: *** APPLE INTERNAL USE ONLY ***
37: This file contains unreleased SPI's
38:
39: BuildInfo: Built by: Naga Pappireddi
40: With Interfacer: 3.0d9 (PowerPC native)
41: From: DriverServicesPriv.i
42: Revision: 32
43: Dated: 1/22/98
44: Last change by: ngk
45: Last comment: Change Types.i to MacTypes.i
46:
47: Bugs: Report bugs to Radar component "System Interfaces", "Latest"
48: List the version information (from above) in the Problem Description.
49:
50: */
51: /* naga
52: #ifndef __DRIVERSERVICESPRIV__
53: #define __DRIVERSERVICESPRIV__
54:
55: #ifndef __CONDITIONALMACROS__
56: #include <ConditionalMacros.h>
57: #endif
58: #ifndef __MACTYPES__
59: #include <MacTypes.h>
60: #endif
61: #ifndef __OSUTILS__
62: #include <OSUtils.h>
63: #endif
64: #ifndef __MIXEDMODE__
65: #include <MixedMode.h>
66: #endif
67: #ifndef __INTERRUPTSPRIV__
68: #include <InterruptsPriv.h>
69: #endif
70: #ifndef __DRIVERSERVICES__
71: #include <DriverServices.h>
72: #endif
73: #ifndef __KERNEL__
74: #include <Kernel.h>
75: #endif
76: #ifndef __TIMER__
77: #include <Timer.h>
78: #endif
79:
80:
81:
82: #if PRAGMA_ONCE
83: #pragma once
84: #endif
85:
86: #ifdef __cplusplus
87: extern "C" {
88: #endif
89:
90: #if PRAGMA_IMPORT
91: #pragma import on
92: #endif
93:
94: #if PRAGMA_STRUCT_ALIGN
95: #pragma options align=mac68k
96: #elif PRAGMA_STRUCT_PACKPUSH
97: #pragma pack(push, 2)
98: #elif PRAGMA_STRUCT_PACK
99: #pragma pack(2)
100: #endif
101: */
102: /*
103: **
104: ** Our private types and constants...
105: **
106: ** We Make sure all longs that we compare and swap on are aligned on long boundaries.
107: **
108: ** Swis, SIHs, and Timers are preallocated arrays of structures. Each of these structs
109: ** must start on a long word boundary for CompareAndSwap to work.
110: **
111: */
112: /*
113: //////////////////////////////////////////////////////////////////////////
114: Secondary Interrupts
115: */
116:
117: /* # preallocated SIHs from PoolAllocateResident*/
118: #define SIHTaskPoolSize 40
119:
120: struct SIH_Routine {
121: QElem qElement; /* on either available OR*/
122: /* in-use lists*/
123: /* OSType name; // 'SIHT' (Macsbug ready)*/
124: SecondaryInterruptHandler2 theHandler; /* -> handler*/
125: //naga ExceptionHandler theExceptionHandler; /* not used in this implementation*/
126: void * p1; /* first param for handler*/
127: void * p2; /* second param for handler*/
128: UInt32 sihSequenceNumber; /* counts queued sihs*/
129: void * reserved; /* room to grow*/
130: };
131: typedef struct SIH_Routine SIH_Routine;
132: typedef SIH_Routine * SIH_RoutinePtr;
133:
134: struct SIHGlobalsStruct {
135: /* OSType globalsName; // 'SIHG' (Macsbug ready)*/
136: SIH_RoutinePtr taskPool; /* pre-allocated queue records*/
137: UInt32 sihSequenceNumber; /* counts queued sihs*/
138: UInt32 sihLastExecSequenceNumber; /* last sequence number executed.*/
139: void * reserved; /* room to grow*/
140:
141: };
142: typedef struct SIHGlobalsStruct SIHGlobalsStruct;
143:
144: typedef SIHGlobalsStruct * SIHGlobalsPtr;
145: /*
146: //////////////////////////////////////////////////////////////////////////
147: Memory Management
148: */
149:
150: enum {
151: kCacheLineSize = 32
152: };
153:
154: typedef UInt32 LogicalAddressLval;
155: typedef UInt32 PhysicalAddressLval;
156: /*
157: //////////////////////////////////////////////////////////////////////////
158: Software Interrupts
159: */
160: /* # preallocated Swis from PoolAllocateResident*/
161: #define N_SWIS 24
162:
163: struct Swi_Information {
164: QElem Link; /* next SWI sent to this task*/
165: /* OSType Name; // 'SWI!' (Macsbug ready)*/
166: SoftwareInterruptHandler Handler; /* &TVector of handler routine*/
167: SoftwareInterruptID The_Id;
168: TaskID The_Task; /* task to which SWI was or will be sent*/
169: Boolean Privileged; /* whether SWI will run on master stack*/
170: Boolean Temporary; /* whether SWI will be deleted after delivery*/
171: Boolean Sent; /* whether SWI has been sent*/
172: Boolean Overrun; /* whether non-temporary SWI has been sent twice before delivery*/
173: void * P1; /* set at CreateSwi time*/
174: void * P2; /* set at SendSwi time*/
175: void * reserved; /* room to grow*/
176: };
177: typedef struct Swi_Information Swi_Information;
178:
179: typedef Swi_Information * Swi_Info;
180: /*
181: //////////////////////////////////////////////////////////////////////////
182: Timer
183: */
184: /* # preallocated TimerTasks from PoolAllocateResident*/
185: #define TimerTaskPoolSize 32
186:
187: struct TimerTaskStruct {
188: //nagaTMTask tmTask; /* Time Manager Task Elements */
189: UInt16 Pad; /* align to long*/
190: /* OSType name; // 'TIMT' (Macsbug ready)*/
191: struct TimerTaskStruct * pNextTask; /* Timer list elements */
192: TimerID timerID; /* Timer elements */
193: SecondaryInterruptHandler2 theHandler; /* -> SIH to queue*/
194: void * p1; /* == param to SIH*/
195: long frequency; /* persistence frequency*/
196: Boolean persistent; /* if true, task is persistent*/
197: };
198: typedef struct TimerTaskStruct TimerTaskStruct;
199:
200: typedef TimerTaskStruct * TimerTaskPtr;
201:
202: struct TimerGlobalsStruct {
203: /* OSType globalsName; // 'TIMG' (Macsbug ready)*/
204: /* Timer list elements */
205: TimerTaskPtr taskPool; /* pool of pre-allocated */
206: /* task records */
207: TimerTaskPtr taskFreeList; /* list of free tasks */
208: TimerTaskPtr taskList; /* list of pending tasks */
209: TimerID nextUniqueID; /* next unique timer ID */
210:
211: /* Time Manager elements */
212: //nagaTimerUPP tmTaskHandler; /* Timer Manager interrupt */
213: /* handler */
214: void * reserved; /* room to grow*/
215: };
216: typedef struct TimerGlobalsStruct TimerGlobalsStruct;
217:
218: typedef TimerGlobalsStruct * TimerGlobalsPtr;
219:
220: /*
221: **
222: ** Our private globals and external routines...
223: **
224: */
225: /*
226: ** Device Probe
227: */
228: extern OSStatus ProbeSuccess;
229: /*
230: ** InterruptManager.c
231: */
232: //naga
233: #define extern
234: //nagaextern InterruptSetObject *theRootSetOfAllTrees;
235: extern UInt32 gInterruptCount;
236: extern SInt32 inNativeIntDispatcher;
237: EXTERN_API_C( void )
238: _SIHDeferredTaskHandler (void);
239:
240: extern void (*nullInterruptHook)( void );
241: /*
242: ** SynchronizationUnAligned.c
243: */
244: extern UInt32 UnAlignAddAtomicCount;
245: extern UInt32 AddAtomicCount;
246: extern UInt32 UnAlignIncrementAtomicCount;
247: extern UInt32 IncrementAtomicCount;
248: extern UInt32 UnAlignDecrementAtomicCount;
249: extern UInt32 DecrementAtomicCount;
250: extern UInt32 UnAlignBitOrAtomicCount;
251: extern UInt32 BitOrAtomicCount;
252: extern UInt32 UnAlignBitAndAtomicCount;
253: extern UInt32 BitAndAtomicCount;
254: extern UInt32 UnAlignBitXorAtomicCount;
255: extern UInt32 BitXorAtomicCount;
256: extern UInt32 UnAlignCompareAndSwapCount;
257: extern UInt32 CompareAndSwapCount;
258: extern UInt32 UnAlignAddByteAtomicCount;
259: extern UInt32 AddByteAtomicCount;
260: extern UInt32 UnAlignIncrementByteAtomicCount;
261: extern UInt32 IncrementByteAtomicCount;
262: extern UInt32 UnAlignDecrementByteAtomicCount;
263: extern UInt32 DecrementByteAtomicCount;
264: extern UInt32 UnAlignAddHalfwordAtomicCount;
265: extern UInt32 AddHalfwordAtomicCount;
266: extern UInt32 UnAlignIncrementHalfwordAtomicCount;
267: extern UInt32 IncrementHalfwordAtomicCount;
268: extern UInt32 UnAlignDecrementHalfwordAtomicCount;
269: extern UInt32 DecrementHalfwordAtomicCount;
270: extern UInt32 UnAlignBitAndAtomic8Count;
271: extern UInt32 BitAndAtomic8Count;
272: extern UInt32 UnAlignBitOrAtomic8Count;
273: extern UInt32 BitOrAtomic8Count;
274: extern UInt32 UnAlignBitXorAtomic8Count;
275: extern UInt32 BitXorAtomic8Count;
276: extern UInt32 UnAlignBitAndAtomic16Count;
277: extern UInt32 BitAndAtomic16Count;
278: extern UInt32 UnAlignBitOrAtomic16Count;
279: extern UInt32 BitOrAtomic16Count;
280: extern UInt32 UnAlignBitXorAtomic16Count;
281: extern UInt32 BitXorAtomic16Count;
282: extern UInt32 UnAlignTestAndSetCount;
283: extern UInt32 TestAndSetCount;
284: extern UInt32 UnAlignTestAndClearCount;
285: extern UInt32 TestAndClearCount;
286: /*
287: ** Timer.c
288: */
289: extern TimerGlobalsPtr gTimer;
290: /*
291: ** Don't know
292: */
293: EXTERN_API_C( void )
294: FlushRange (LogicalAddressLval theLogicalAddress,
295: ByteCount theLength);
296:
297: EXTERN_API_C( void )
298: InvalidateRange (LogicalAddressLval theLogicalAddress,
299: ByteCount theLength);
300:
301: /*
302: ** DriverServices.c
303: */
304: extern QHdrPtr CreatedSwis;
305: extern QHdrPtr AvailableSwis;
306: extern Swi_Information *AllSwis;
307: /*
308: ** InterruptsControl.c
309: */
310: EXTERN_API_C( UInt16 )
311: Disable68kInterrupts (void);
312:
313: EXTERN_API_C( void )
314: Restore68kInterrupts (UInt16 currentSR);
315:
316: /*
317: ** InterruptManagerSAL.c
318: */
319: //nagaextern Vector * vectorTable;
320: /*
321: ** MemoryManagement.c
322: */
323: extern Ptr gDeallocateQueueHead;
324: extern Ptr gDeallocateQueueTail;
325: /*
326: ** SecondaryInterrupt.c
327: */
328: extern SIHGlobalsPtr gSIH;
329: extern UInt32 atSecondaryInterruptLevel;
330: extern QHdrPtr Available_SIHsPtr;
331: extern QHdrPtr Deferred_SIHsPtr;
332: /*
333: ** Timing.c
334: */
335: typedef AbsoluteTime (*UpTimeProcPtr) (void);
336: extern UpTimeProcPtr gUpTimeProc;
337: extern AbsoluteTime gElapsedTime;
338: extern Boolean gProcessorConversionChanged;
339: extern UInt32 gMinAbsoluteTimeDelta;
340: extern UInt32 gAbsoluteTimeToNanosecondsNumerator;
341: extern UInt32 gAbsoluteTimeToNanosecondsDenominator;
342: extern UInt32 gProcessorToAbsoluteTimeNumerator;
343: extern UInt32 gProcessorToAbsoluteTimeDenominator;
344: EXTERN_API_C( AbsoluteTime )
345: UpTime601 (void);
346:
347: EXTERN_API_C( AbsoluteTime )
348: UpTimePowerPC (void);
349:
350: EXTERN_API_C( void )
351: InitializeTiming601 (void);
352:
353: EXTERN_API_C( void )
354: InitializeTimingPowerPC (void);
355:
356: EXTERN_API_C( void )
357: SetTimeBaseInfo (UInt32 minAbsoluteTimeDelta,
358: UInt32 theAbsoluteTimeToNanosecondNumerator,
359: UInt32 theAbsoluteTimeToNanosecondDenominator,
360: UInt32 theProcessorToAbsoluteTimeNumerator,
361: UInt32 theProcessorToAbsoluteTimeDenominator);
362:
363: typedef OSStatus (*DelayForHwdrProcPtr)(AbsoluteTime theAbsolute);
364: extern DelayForHwdrProcPtr gDelayForHdwrProc;
365: EXTERN_API_C( UInt32 )
366: DSLGetProcessorVersion (void);
367:
368: EXTERN_API_C( OSStatus )
369: DelayForHardwarePPC (AbsoluteTime theAbsolute);
370:
371: EXTERN_API_C( OSStatus )
372: DelayForHardware601 (AbsoluteTime theAbsolute);
373:
374: EXTERN_API_C( UInt32 )
375: DeviceProbe32 (UInt32 * theAddress);
376:
377: EXTERN_API_C( UInt16 )
378: DeviceProbe16 (UInt16 * theAddress);
379:
380: EXTERN_API_C( UInt8 )
381: DeviceProbe8 (UInt8 * theAddress);
382: //naga
383: #undef extern
384: /*naga
385: #if PRAGMA_STRUCT_ALIGN
386: #pragma options align=reset
387: #elif PRAGMA_STRUCT_PACKPUSH
388: #pragma pack(pop)
389: #elif PRAGMA_STRUCT_PACK
390: #pragma pack()
391: #endif
392:
393: #ifdef PRAGMA_IMPORT_OFF
394: #pragma import off
395: #elif PRAGMA_IMPORT
396: #pragma import reset
397: #endif
398:
399: #ifdef __cplusplus
400: }
401: #endif
402:
403: #endif __DRIVERSERVICESPRIV__ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.