2
File: DriverFamilyMatching.p
4
Contains: Interfaces for create native drivers NDRV
6
Version: Universal Interfaces 3.4.2
8
Copyright: � 1995-2002 by Apple Computer, Inc., all rights reserved.
10
Bugs?: For bug reports, consult the following page on
13
http://www.freepascal.org/bugs.html
19
Modified for use with Free Pascal
21
Please report any bugs to <gpc@microbizz.nl>
30
unit DriverFamilyMatching;
32
{$setc UNIVERSAL_INTERFACES_VERSION := $0342}
33
{$setc GAP_INTERFACES_VERSION := $0200}
35
{$ifc not defined USE_CFSTR_CONSTANT_MACROS}
36
{$setc USE_CFSTR_CONSTANT_MACROS := TRUE}
39
{$ifc defined CPUPOWERPC and defined CPUI386}
40
{$error Conflicting initial definitions for CPUPOWERPC and CPUI386}
42
{$ifc defined FPC_BIG_ENDIAN and defined FPC_LITTLE_ENDIAN}
43
{$error Conflicting initial definitions for FPC_BIG_ENDIAN and FPC_LITTLE_ENDIAN}
46
{$ifc not defined __ppc__ and defined CPUPOWERPC}
51
{$ifc not defined __i386__ and defined CPUI386}
57
{$ifc defined __ppc__ and __ppc__ and defined __i386__ and __i386__}
58
{$error Conflicting definitions for __ppc__ and __i386__}
61
{$ifc defined __ppc__ and __ppc__}
62
{$setc TARGET_CPU_PPC := TRUE}
63
{$setc TARGET_CPU_X86 := FALSE}
64
{$elifc defined __i386__ and __i386__}
65
{$setc TARGET_CPU_PPC := FALSE}
66
{$setc TARGET_CPU_X86 := TRUE}
68
{$error Neither __ppc__ nor __i386__ is defined.}
70
{$setc TARGET_CPU_PPC_64 := FALSE}
72
{$ifc defined FPC_BIG_ENDIAN}
73
{$setc TARGET_RT_BIG_ENDIAN := TRUE}
74
{$setc TARGET_RT_LITTLE_ENDIAN := FALSE}
75
{$elifc defined FPC_LITTLE_ENDIAN}
76
{$setc TARGET_RT_BIG_ENDIAN := FALSE}
77
{$setc TARGET_RT_LITTLE_ENDIAN := TRUE}
79
{$error Neither FPC_BIG_ENDIAN nor FPC_LITTLE_ENDIAN are defined.}
81
{$setc ACCESSOR_CALLS_ARE_FUNCTIONS := TRUE}
82
{$setc CALL_NOT_IN_CARBON := FALSE}
83
{$setc OLDROUTINENAMES := FALSE}
84
{$setc OPAQUE_TOOLBOX_STRUCTS := TRUE}
85
{$setc OPAQUE_UPP_TYPES := TRUE}
86
{$setc OTCARBONAPPLICATION := TRUE}
87
{$setc OTKERNEL := FALSE}
88
{$setc PM_USE_SESSION_APIS := TRUE}
89
{$setc TARGET_API_MAC_CARBON := TRUE}
90
{$setc TARGET_API_MAC_OS8 := FALSE}
91
{$setc TARGET_API_MAC_OSX := TRUE}
92
{$setc TARGET_CARBON := TRUE}
93
{$setc TARGET_CPU_68K := FALSE}
94
{$setc TARGET_CPU_MIPS := FALSE}
95
{$setc TARGET_CPU_SPARC := FALSE}
96
{$setc TARGET_OS_MAC := TRUE}
97
{$setc TARGET_OS_UNIX := FALSE}
98
{$setc TARGET_OS_WIN32 := FALSE}
99
{$setc TARGET_RT_MAC_68881 := FALSE}
100
{$setc TARGET_RT_MAC_CFM := FALSE}
101
{$setc TARGET_RT_MAC_MACHO := TRUE}
102
{$setc TYPED_FUNCTION_POINTERS := TRUE}
103
{$setc TYPE_BOOL := FALSE}
104
{$setc TYPE_EXTENDED := FALSE}
105
{$setc TYPE_LONGLONG := TRUE}
106
uses MacTypes,NameRegistry,CodeFragments;
112
##############################################
113
Well known properties in the Name Registry
114
##############################################
118
#########################################################
119
Descriptor for Drivers and NDRVs
120
#########################################################
123
QuickTime 3.0: "DriverType" has a name collision with cross-platform code.
124
Use Mac prefix to avoid collision
126
{ Driver Typing Information Used to Match Drivers With Devices }
129
MacDriverTypePtr = ^MacDriverType;
130
MacDriverType = record
131
nameInfoStr: Str31; { Driver Name/Info String }
132
version: NumVersion; { Driver Version Number }
136
DriverType = MacDriverType;
137
DriverTypePtr = ^DriverType;
138
{$endc} {TARGET_OS_MAC}
140
{ OS Runtime Information Used to Setup and Maintain a Driver's Runtime Environment }
141
RuntimeOptions = OptionBits;
144
kDriverIsLoadedUponDiscovery = $00000001; { auto-load driver when discovered }
145
kDriverIsOpenedUponLoad = $00000002; { auto-open driver when loaded }
146
kDriverIsUnderExpertControl = $00000004; { I/O expert handles loads/opens }
147
kDriverIsConcurrent = $00000008; { supports concurrent requests }
148
kDriverQueuesIOPB = $00000010; { device manager doesn't queue IOPB }
149
kDriverIsLoadedAtBoot = $00000020; { Driver is loaded at the boot time }
150
kDriverIsForVirtualDevice = $00000040; { Driver is for a virtual Device }
151
kDriverSupportDMSuspendAndResume = $00000080; { Driver supports Device Manager Suspend and Resume command }
155
DriverOSRuntimePtr = ^DriverOSRuntime;
156
DriverOSRuntime = record
157
driverRuntime: RuntimeOptions; { Options for OS Runtime }
158
driverName: Str31; { Driver's name to the OS }
159
driverDescReserved: array [0..7] of UInt32; { Reserved area }
162
{ OS Service Information Used To Declare What APIs a Driver Supports }
163
ServiceCount = UInt32;
164
DriverServiceInfoPtr = ^DriverServiceInfo;
165
DriverServiceInfo = record
166
serviceCategory: OSType; { Service Category Name }
167
serviceType: OSType; { Type within Category }
168
serviceVersion: NumVersion; { Version of service }
171
DriverOSServicePtr = ^DriverOSService;
172
DriverOSService = record
173
nServices: ServiceCount; { Number of Services Supported }
174
service: array [0..0] of DriverServiceInfo; { The List of Services (at least one) }
180
kServiceCategoryDisplay = $64697370 (* 'disp' *); { Display Manager }
181
kServiceCategoryOpenTransport = $6F74616E (* 'otan' *); { Open Transport }
182
kServiceCategoryBlockStorage = $626C6F6B (* 'blok' *); { Block Storage }
183
kServiceCategoryNdrvDriver = $6E647276 (* 'ndrv' *); { Generic Native Driver }
184
kServiceCategoryScsiSIM = $73637369 (* 'scsi' *); { SCSI }
185
kServiceCategoryFileManager = $66696C65 (* 'file' *); { File Manager }
186
kServiceCategoryIDE = $6964652D (* 'ide-' *); { ide }
187
kServiceCategoryADB = $6164622D (* 'adb-' *); { adb }
188
kServiceCategoryPCI = $7063692D (* 'pci-' *); { pci bus }
190
kServiceCategoryDFM = $64666D2D (* 'dfm-' *); { DFM }
191
kServiceCategoryMotherBoard = $6D726264 (* 'mrbd' *); { mother Board }
192
kServiceCategoryKeyboard = $6B796264 (* 'kybd' *); { Keyboard }
193
kServiceCategoryPointing = $706F6974 (* 'poit' *); { Pointing }
194
kServiceCategoryRTC = $7274632D (* 'rtc-' *); { RTC }
195
kServiceCategoryNVRAM = $6E72616D (* 'nram' *); { NVRAM }
196
kServiceCategorySound = $736F6E64 (* 'sond' *); { Sound (1/3/96 MCS) }
197
kServiceCategoryPowerMgt = $70676D74 (* 'pgmt' *); { Power Management }
198
kServiceCategoryGeneric = $67656E72 (* 'genr' *); { Generic Service Category to receive general Events }
200
{ Ndrv ServiceCategory Types }
201
kNdrvTypeIsGeneric = $67656E72 (* 'genr' *); { generic }
202
kNdrvTypeIsVideo = $7669646F (* 'vido' *); { video }
203
kNdrvTypeIsBlockStorage = $626C6F6B (* 'blok' *); { block storage }
204
kNdrvTypeIsNetworking = $6E657477 (* 'netw' *); { networking }
205
kNdrvTypeIsSerial = $7365726C (* 'serl' *); { serial }
206
kNdrvTypeIsParallel = $7061726C (* 'parl' *); { parallel }
207
kNdrvTypeIsSound = $736F6E64 (* 'sond' *); { sound }
208
kNdrvTypeIsBusBridge = $62726467 (* 'brdg' *);
209
kNdrvTypeIsFWConference = $63727368 (* 'crsh' *); { FireWire conference camera }
210
kNdrvTypeIsAVC = $61766320 (* 'avc ' *); { FireWire AVC devices (DV cameras) }
214
DriverDescVersion = UInt32;
215
DriverDescVersion_GAP_Private_field_type_fix = DriverDescVersion; { used as field type when a record declaration contains a DriverDescVersion field identifier }
216
{ The Driver Description }
219
kTheDescriptionSignature = $6D74656A (* 'mtej' *);
220
kDriverDescriptionSignature = $70646573 (* 'pdes' *);
222
kInitialDriverDescriptor = 0;
223
kVersionOneDriverDescriptor = 1;
227
DriverDescriptionPtr = ^DriverDescription;
228
DriverDescription = record
229
driverDescSignature: OSType; { Signature field of this structure }
230
driverDescVersion: DriverDescVersion_GAP_Private_field_type_fix; { Version of this data structure }
231
driverType: MacDriverType; { Type of Driver }
232
driverOSRuntimeInfo: DriverOSRuntime; { OS Runtime Requirements of Driver }
233
driverServices: DriverOSService; { Apple Service API Membership }