topical media & game development
lib-of-vs-libs-QTDevWin-CIncludes-DriverServices.h / h
/*
File: DriverServices.h
Contains: Driver Services Interfaces.
Version: Technology: PowerSurge 1.0.2
Release: QuickTime 6.0.2
Copyright: (c) 1985-2001 by Apple Computer, Inc., all rights reserved
Bugs?: For bug reports, consult the following page on
the World Wide Web:
http://developer.apple.com/bugreporter/
*/
ifndef __DRIVERSERVICES__
define __DRIVERSERVICES__
ifndef __CONDITIONALMACROS__
include <ConditionalMacros.h>
endif
ifndef __MACTYPES__
include <MacTypes.h>
endif
ifndef __MACERRORS__
include <MacErrors.h>
endif
ifndef __MACHINEEXCEPTIONS__
include <MachineExceptions.h>
endif
ifndef __DEVICES__
include <Devices.h>
endif
ifndef __DRIVERSYNCHRONIZATION__
include <DriverSynchronization.h>
endif
ifndef __NAMEREGISTRY__
include <NameRegistry.h>
endif
if PRAGMA_ONCE
#pragma once
endif
ifdef __cplusplus
extern "C" {
endif
if PRAGMA_IMPORT
#pragma import on
endif
if PRAGMA_STRUCT_ALIGN
#pragma options align=power
#elif PRAGMA_STRUCT_PACKPUSH
#pragma pack(push, 2)
#elif PRAGMA_STRUCT_PACK
#pragma pack(2)
endif
****************************************************************
Previously in Kernel.h
****************************************************************
/* Kernel basics*/
typedef struct OpaqueIOPreparationID* IOPreparationID;
typedef struct OpaqueSoftwareInterruptID* SoftwareInterruptID;
typedef struct OpaqueTaskID* TaskID;
typedef struct OpaqueTimerID* TimerID;
/* Tasking*/
typedef UInt32 ExecutionLevel;
enum {
kTaskLevel = 0,
kSoftwareInterruptLevel = 1,
kAcceptFunctionLevel = 2,
kKernelLevel = 3,
kSIHAcceptFunctionLevel = 4,
kSecondaryInterruptLevel = 5,
kHardwareInterruptLevel = 6
};
typedef CALLBACK_API_C( void , SoftwareInterruptHandler )(void *p1, void *p2);
typedef CALLBACK_API_C( OSStatus , SecondaryInterruptHandler2 )(void *p1, void *p2);
define kCurrentAddressSpaceID ((AddressSpaceID) -1)
/* Memory System basics*/
struct LogicalAddressRange {
LogicalAddress address;
ByteCount count;
};
typedef struct LogicalAddressRange LogicalAddressRange;
typedef LogicalAddressRange * LogicalAddressRangePtr;
struct PhysicalAddressRange {
PhysicalAddress address;
ByteCount count;
};
typedef struct PhysicalAddressRange PhysicalAddressRange;
typedef PhysicalAddressRange * PhysicalAddressRangePtr;
/* For PrepareMemoryForIO and CheckpointIO*/
typedef OptionBits IOPreparationOptions;
enum {
kIOMultipleRanges = 0x00000001,
kIOLogicalRanges = 0x00000002,
kIOMinimalLogicalMapping = 0x00000004,
kIOShareMappingTables = 0x00000008,
kIOIsInput = 0x00000010,
kIOIsOutput = 0x00000020,
kIOCoherentDataPath = 0x00000040,
kIOTransferIsLogical = 0x00000080,
kIOClientIsUserMode = 0x00000080
};
typedef OptionBits IOPreparationState;
enum {
kIOStateDone = 0x00000001
};
enum {
kInvalidPageAddress = (-1)
};
struct AddressRange {
void * base;
ByteCount length;
};
typedef struct AddressRange AddressRange;
/* C's treatment of arrays and array pointers is atypical*/
typedef LogicalAddress * LogicalMappingTablePtr;
typedef PhysicalAddress * PhysicalMappingTablePtr;
typedef AddressRange * AddressRangeTablePtr;
struct MultipleAddressRange {
ItemCount entryCount;
AddressRangeTablePtr rangeTable;
};
typedef struct MultipleAddressRange MultipleAddressRange;
/*
Separate C definition so that union has a name. A future version of the interfacer
tool will allow a name (that gets thrown out in Pascal and Asm).
*/
struct IOPreparationTable {
IOPreparationOptions options;
IOPreparationState state;
IOPreparationID preparationID;
AddressSpaceID addressSpace;
ByteCount granularity;
ByteCount firstPrepared;
ByteCount lengthPrepared;
ItemCount mappingEntryCount;
LogicalMappingTablePtr logicalMapping;
PhysicalMappingTablePtr physicalMapping;
union {
AddressRange range;
MultipleAddressRange multipleRanges;
} rangeInfo;
};
typedef struct IOPreparationTable IOPreparationTable;
typedef OptionBits IOCheckpointOptions;
enum {
kNextIOIsInput = 0x00000001,
kNextIOIsOutput = 0x00000002,
kMoreIOTransfers = 0x00000004
};
/* For SetProcessorCacheMode*/
typedef UInt32 ProcessorCacheMode;
enum {
kProcessorCacheModeDefault = 0,
kProcessorCacheModeInhibited = 1,
kProcessorCacheModeWriteThrough = 2,
kProcessorCacheModeCopyBack = 3
};
/*
For GetPageInformation
(Note: if kPageInformationVersion fails, try 0 -- old versions of DSL defined kPageInformationVersion as 0)
*/
enum {
kPageInformationVersion = 1
};
typedef UInt32 PageStateInformation;
enum {
kPageIsProtected = 0x00000001,
kPageIsProtectedPrivileged = 0x00000002,
kPageIsModified = 0x00000004,
kPageIsReferenced = 0x00000008,
kPageIsLockedResident = 0x00000010, /* held and locked resident*/
kPageIsInMemory = 0x00000020,
kPageIsShared = 0x00000040,
kPageIsWriteThroughCached = 0x00000080,
kPageIsCopyBackCached = 0x00000100,
kPageIsHeldResident = 0x00000200, /* held resident - use kPageIsLockedResident to check for locked state*/
kPageIsLocked = kPageIsLockedResident, /* Deprecated*/
kPageIsResident = kPageIsInMemory /* Deprecated*/
};
struct PageInformation {
AreaID area;
ItemCount count;
PageStateInformation information[1];
};
typedef struct PageInformation PageInformation;
typedef PageInformation * PageInformationPtr;
/* Tasks */
if CALL_NOT_IN_CARBON
EXTERN_API_C( ExecutionLevel )
CurrentExecutionLevel (void);
EXTERN_API_C( TaskID )
CurrentTaskID (void);
EXTERN_API_C( OSStatus )
DelayFor (Duration delayDuration);
EXTERN_API_C( Boolean )
InPrivilegedMode (void);
/* Software Interrupts */
EXTERN_API_C( OSStatus )
CreateSoftwareInterrupt (SoftwareInterruptHandler handler,
TaskID task,
void * p1,
Boolean persistent,
SoftwareInterruptID * theSoftwareInterrupt);
EXTERN_API_C( OSStatus )
SendSoftwareInterrupt (SoftwareInterruptID theSoftwareInterrupt,
void * p2);
EXTERN_API_C( OSStatus )
DeleteSoftwareInterrupt (SoftwareInterruptID theSoftwareInterrupt);
endif /* CALL_NOT_IN_CARBON */
if TARGET_OS_MAC
/* Secondary Interrupts */
if CALL_NOT_IN_CARBON
EXTERN_API_C( OSStatus )
CallSecondaryInterruptHandler2 (SecondaryInterruptHandler2 theHandler,
ExceptionHandler exceptionHandler,
void * p1,
void * p2);
EXTERN_API_C( OSStatus )
QueueSecondaryInterruptHandler (SecondaryInterruptHandler2 theHandler,
ExceptionHandler exceptionHandler,
void * p1,
void * p2);
endif /* CALL_NOT_IN_CARBON */
endif /* TARGET_OS_MAC */
/* Timers */
if CALL_NOT_IN_CARBON
EXTERN_API_C( OSStatus )
SetInterruptTimer (const AbsoluteTime * expirationTime,
SecondaryInterruptHandler2 handler,
void * p1,
TimerID * theTimer);
EXTERN_API_C( OSStatus )
SetPersistentTimer (Duration frequency,
SecondaryInterruptHandler2 theHandler,
void * p1,
TimerID * theTimer);
EXTERN_API_C( OSStatus )
CancelTimer (TimerID theTimer,
AbsoluteTime * timeRemaining);
/* I/O related Operations */
EXTERN_API_C( OSStatus )
PrepareMemoryForIO (IOPreparationTable * theIOPreparationTable);
EXTERN_API_C( OSStatus )
CheckpointIO (IOPreparationID theIOPreparation,
IOCheckpointOptions options);
/* Memory Operations */
EXTERN_API_C( OSStatus )
GetPageInformation (AddressSpaceID addressSpace,
ConstLogicalAddress base,
ByteCount length,
PBVersion version,
PageInformation * thePageInfo);
/* Processor Cache Related */
EXTERN_API_C( OSStatus )
SetProcessorCacheMode (AddressSpaceID addressSpace,
ConstLogicalAddress base,
ByteCount length,
ProcessorCacheMode cacheMode);
****************************************************************
Was in DriverSupport.h or DriverServices.h
****************************************************************
define kAAPLDeviceLogicalAddress "AAPL,address"
endif /* CALL_NOT_IN_CARBON */
typedef LogicalAddress * DeviceLogicalAddressPtr;
enum {
durationMicrosecond = -1L, /* Microseconds are negative*/
durationMillisecond = 1L, /* Milliseconds are positive*/
durationSecond = 1000L, /* 1000 * durationMillisecond*/
durationMinute = 60000L, /* 60 * durationSecond,*/
durationHour = 3600000L, /* 60 * durationMinute,*/
durationDay = 86400000L, /* 24 * durationHour,*/
durationNoWait = 0L, /* don't block*/
durationForever = 0x7FFFFFFF /* no time limit*/
};
enum {
k8BitAccess = 0, /* access as 8 bit*/
k16BitAccess = 1, /* access as 16 bit*/
k32BitAccess = 2 /* access as 32 bit*/
};
typedef UnsignedWide Nanoseconds;
if CALL_NOT_IN_CARBON
EXTERN_API_C( OSErr )
IOCommandIsComplete (IOCommandID theID,
OSErr theResult);
EXTERN_API_C( OSErr )
GetIOCommandInfo (IOCommandID theID,
IOCommandContents * theContents,
IOCommandCode * theCommand,
IOCommandKind * theKind);
EXTERN_API_C( void )
UpdateDeviceActivity (RegEntryID * deviceEntry);
EXTERN_API_C( void )
BlockCopy (const void * srcPtr,
void * destPtr,
Size byteCount);
EXTERN_API_C( LogicalAddress )
PoolAllocateResident (ByteCount byteSize,
Boolean clear);
EXTERN_API_C( OSStatus )
PoolDeallocate (LogicalAddress address);
EXTERN_API_C( ByteCount )
GetLogicalPageSize (void);
EXTERN_API_C( ByteCount )
GetDataCacheLineSize (void);
EXTERN_API_C( OSStatus )
FlushProcessorCache (AddressSpaceID spaceID,
LogicalAddress base,
ByteCount length);
EXTERN_API_C( LogicalAddress )
MemAllocatePhysicallyContiguous (ByteCount byteSize,
Boolean clear);
EXTERN_API_C( OSStatus )
MemDeallocatePhysicallyContiguous (LogicalAddress address);
endif /* CALL_NOT_IN_CARBON */
EXTERN_API_C( AbsoluteTime )
UpTime (void);
if CALL_NOT_IN_CARBON
EXTERN_API_C( void )
GetTimeBaseInfo (UInt32 * minAbsoluteTimeDelta,
UInt32 * theAbsoluteTimeToNanosecondNumerator,
UInt32 * theAbsoluteTimeToNanosecondDenominator,
UInt32 * theProcessorToAbsoluteTimeNumerator,
UInt32 * theProcessorToAbsoluteTimeDenominator);
endif /* CALL_NOT_IN_CARBON */
EXTERN_API_C( Nanoseconds )
AbsoluteToNanoseconds (AbsoluteTime absoluteTime);
EXTERN_API_C( Duration )
AbsoluteToDuration (AbsoluteTime absoluteTime);
EXTERN_API_C( AbsoluteTime )
NanosecondsToAbsolute (Nanoseconds nanoseconds);
EXTERN_API_C( AbsoluteTime )
DurationToAbsolute (Duration duration);
EXTERN_API_C( AbsoluteTime )
AddAbsoluteToAbsolute (AbsoluteTime absoluteTime1,
AbsoluteTime absoluteTime2);
EXTERN_API_C( AbsoluteTime )
SubAbsoluteFromAbsolute (AbsoluteTime leftAbsoluteTime,
AbsoluteTime rightAbsoluteTime);
EXTERN_API_C( AbsoluteTime )
AddNanosecondsToAbsolute (Nanoseconds nanoseconds,
AbsoluteTime absoluteTime);
EXTERN_API_C( AbsoluteTime )
AddDurationToAbsolute (Duration duration,
AbsoluteTime absoluteTime);
EXTERN_API_C( AbsoluteTime )
SubNanosecondsFromAbsolute (Nanoseconds nanoseconds,
AbsoluteTime absoluteTime);
EXTERN_API_C( AbsoluteTime )
SubDurationFromAbsolute (Duration duration,
AbsoluteTime absoluteTime);
EXTERN_API_C( Nanoseconds )
AbsoluteDeltaToNanoseconds (AbsoluteTime leftAbsoluteTime,
AbsoluteTime rightAbsoluteTime);
EXTERN_API_C( Duration )
AbsoluteDeltaToDuration (AbsoluteTime leftAbsoluteTime,
AbsoluteTime rightAbsoluteTime);
EXTERN_API_C( Nanoseconds )
DurationToNanoseconds (Duration theDuration);
EXTERN_API_C( Duration )
NanosecondsToDuration (Nanoseconds theNanoseconds);
if CALL_NOT_IN_CARBON
EXTERN_API_C( OSErr )
PBQueueInit (QHdrPtr qHeader);
EXTERN_API_C( OSErr )
PBQueueCreate (QHdrPtr * qHeader);
EXTERN_API_C( OSErr )
PBQueueDelete (QHdrPtr qHeader);
EXTERN_API_C( void )
PBEnqueue (QElemPtr qElement,
QHdrPtr qHeader);
EXTERN_API_C( OSErr )
PBEnqueueLast (QElemPtr qElement,
QHdrPtr qHeader);
EXTERN_API_C( OSErr )
PBDequeue (QElemPtr qElement,
QHdrPtr qHeader);
EXTERN_API_C( OSErr )
PBDequeueFirst (QHdrPtr qHeader,
QElemPtr * theFirstqElem);
EXTERN_API_C( OSErr )
PBDequeueLast (QHdrPtr qHeader,
QElemPtr * theLastqElem);
EXTERN_API_C( char *)
CStrCopy (char * dst,
const char * src);
EXTERN_API_C( StringPtr )
PStrCopy (StringPtr dst,
ConstStr255Param src);
EXTERN_API_C( char *)
CStrNCopy (char * dst,
const char * src,
UInt32 max);
EXTERN_API_C( StringPtr )
PStrNCopy (StringPtr dst,
ConstStr255Param src,
UInt32 max);
EXTERN_API_C( char *)
CStrCat (char * dst,
const char * src);
EXTERN_API_C( StringPtr )
PStrCat (StringPtr dst,
ConstStr255Param src);
EXTERN_API_C( char *)
CStrNCat (char * dst,
const char * src,
UInt32 max);
EXTERN_API_C( StringPtr )
PStrNCat (StringPtr dst,
ConstStr255Param src,
UInt32 max);
EXTERN_API_C( void )
PStrToCStr (char * dst,
ConstStr255Param src);
EXTERN_API_C( void )
CStrToPStr (Str255 dst,
const char * src);
EXTERN_API_C( SInt16 )
CStrCmp (const char * s1,
const char * s2);
EXTERN_API_C( SInt16 )
PStrCmp (ConstStr255Param str1,
ConstStr255Param str2);
EXTERN_API_C( SInt16 )
CStrNCmp (const char * s1,
const char * s2,
UInt32 max);
EXTERN_API_C( SInt16 )
PStrNCmp (ConstStr255Param str1,
ConstStr255Param str2,
UInt32 max);
EXTERN_API_C( UInt32 )
CStrLen (const char * src);
EXTERN_API_C( UInt32 )
PStrLen (ConstStr255Param src);
EXTERN_API_C( OSStatus )
DeviceProbe (void * theSrc,
void * theDest,
UInt32 AccessType);
EXTERN_API_C( OSStatus )
DelayForHardware (AbsoluteTime absoluteTime);
****************************************************************
Was in Interrupts.h
****************************************************************
/* Interrupt types */
endif /* CALL_NOT_IN_CARBON */
typedef struct OpaqueInterruptSetID* InterruptSetID;
typedef long InterruptMemberNumber;
struct InterruptSetMember {
InterruptSetID setID;
InterruptMemberNumber member;
};
typedef struct InterruptSetMember InterruptSetMember;
enum {
kISTChipInterruptSource = 0,
kISTOutputDMAInterruptSource = 1,
kISTInputDMAInterruptSource = 2,
kISTPropertyMemberCount = 3
};
typedef InterruptSetMember ISTProperty[3];
define kISTPropertyName "driver-ist"
typedef long InterruptReturnValue;
enum {
kFirstMemberNumber = 1,
kIsrIsComplete = 0,
kIsrIsNotComplete = -1,
kMemberNumberParent = -2
};
typedef Boolean InterruptSourceState;
enum {
kSourceWasEnabled = true,
kSourceWasDisabled = false
};
typedef CALLBACK_API_C( InterruptMemberNumber , InterruptHandler )(InterruptSetMember ISTmember, void *refCon, UInt32 theIntCount);
typedef CALLBACK_API_C( void , InterruptEnabler )(InterruptSetMember ISTmember, void *refCon);
typedef CALLBACK_API_C( InterruptSourceState , InterruptDisabler )(InterruptSetMember ISTmember, void *refCon);
enum {
kReturnToParentWhenComplete = 0x00000001,
kReturnToParentWhenNotComplete = 0x00000002
};
typedef OptionBits InterruptSetOptions;
/* Interrupt Services */
if CALL_NOT_IN_CARBON
EXTERN_API_C( OSStatus )
CreateInterruptSet (InterruptSetID parentSet,
InterruptMemberNumber parentMember,
InterruptMemberNumber setSize,
InterruptSetID * setID,
InterruptSetOptions options);
EXTERN_API_C( OSStatus )
InstallInterruptFunctions (InterruptSetID setID,
InterruptMemberNumber member,
void * refCon,
InterruptHandler handlerFunction,
InterruptEnabler enableFunction,
InterruptDisabler disableFunction);
EXTERN_API_C( OSStatus )
GetInterruptFunctions (InterruptSetID setID,
InterruptMemberNumber member,
void ** refCon,
InterruptHandler * handlerFunction,
InterruptEnabler * enableFunction,
InterruptDisabler * disableFunction);
EXTERN_API_C( OSStatus )
ChangeInterruptSetOptions (InterruptSetID setID,
InterruptSetOptions options);
EXTERN_API_C( OSStatus )
GetInterruptSetOptions (InterruptSetID setID,
InterruptSetOptions * options);
endif /* CALL_NOT_IN_CARBON */
if PRAGMA_STRUCT_ALIGN
#pragma options align=reset
#elif PRAGMA_STRUCT_PACKPUSH
#pragma pack(pop)
#elif PRAGMA_STRUCT_PACK
#pragma pack()
endif
ifdef PRAGMA_IMPORT_OFF
#pragma import off
#elif PRAGMA_IMPORT
#pragma import reset
endif
ifdef __cplusplus
}
endif
endif /* __DRIVERSERVICES__ */
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.