2 * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
4 * @APPLE_LICENSE_HEADER_START@
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.
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
20 * @APPLE_LICENSE_HEADER_END@
25 Contains: Video Driver Interfaces.
27 Copyright: (c) 1986-2000 by Apple Computer, Inc., all rights reserved
29 Bugs?: For bug reports, consult the following page on
32 http://developer.apple.com/bugreporter/
35 #ifndef __IOMACOSVIDEO__
36 #define __IOMACOSVIDEO__
40 #define PRAGMA_STRUCT_ALIGN 1
41 #define FOUR_CHAR_CODE(x) (x)
42 #include <IOKit/ndrvsupport/IOMacOSTypes.h>
47 #include <Quickdraw.h>
64 #if PRAGMA_STRUCT_ALIGN
65 #pragma options align=mac68k
66 #elif PRAGMA_STRUCT_PACKPUSH
68 #elif PRAGMA_STRUCT_PACK
73 mBaseOffset
= 1, /*Id of mBaseOffset.*/
74 mRowBytes
= 2, /*Video sResource parameter Id's */
75 mBounds
= 3, /*Video sResource parameter Id's */
76 mVersion
= 4, /*Video sResource parameter Id's */
77 mHRes
= 5, /*Video sResource parameter Id's */
78 mVRes
= 6, /*Video sResource parameter Id's */
79 mPixelType
= 7, /*Video sResource parameter Id's */
80 mPixelSize
= 8, /*Video sResource parameter Id's */
81 mCmpCount
= 9, /*Video sResource parameter Id's */
82 mCmpSize
= 10, /*Video sResource parameter Id's */
83 mPlaneBytes
= 11, /*Video sResource parameter Id's */
84 mVertRefRate
= 14, /*Video sResource parameter Id's */
85 mVidParams
= 1, /*Video parameter block id.*/
86 mTable
= 2, /*Offset to the table.*/
87 mPageCnt
= 3, /*Number of pages*/
88 mDevType
= 4, /*Device Type*/
89 oneBitMode
= 128, /*Id of OneBitMode Parameter list.*/
90 twoBitMode
= 129, /*Id of TwoBitMode Parameter list.*/
91 fourBitMode
= 130, /*Id of FourBitMode Parameter list.*/
92 eightBitMode
= 131 /*Id of EightBitMode Parameter list.*/
96 sixteenBitMode
= 132, /*Id of SixteenBitMode Parameter list.*/
97 thirtyTwoBitMode
= 133, /*Id of ThirtyTwoBitMode Parameter list.*/
98 firstVidMode
= 128, /*The new, better way to do the above. */
99 secondVidMode
= 129, /* QuickDraw only supports six video */
100 thirdVidMode
= 130, /* at this time. */
109 /* csTimingFormat values in VDTimingInfo */
110 /* look in the declaration rom for timing info */
112 kDeclROMtables
= FOUR_CHAR_CODE('decl'),
113 kDetailedTimingFormat
= FOUR_CHAR_CODE('arba') /* Timing is a detailed timing*/
116 /* Size of a block of EDID (Extended Display Identification Data) */
121 /* ddcBlockType constants*/
123 kDDCBlockTypeEDID
= 0 /* EDID block type. */
126 /* ddcFlags constants*/
128 kDDCForceReadBit
= 0, /* Force a new read of the EDID. */
129 kDDCForceReadMask
= (1 << kDDCForceReadBit
) /* Mask for kddcForceReadBit. */
133 /* Timing mode constants for Display Manager MultiMode support
134 Corresponding .h equates are in Video.h
135 .a equates are in Video.a
136 .r equates are in DepVideoEqu.r
138 The second enum is the old names (for compatibility).
139 The first enum is the new names.
142 timingInvalid
= 0, /* Unknown timing... force user to confirm. */
143 timingInvalid_SM_T24
= 8, /* Work around bug in SM Thunder24 card.*/
144 timingApple_FixedRateLCD
= 42, /* Lump all fixed-rate LCDs into one category.*/
145 timingApple_512x384_60hz
= 130, /* 512x384 (60 Hz) Rubik timing. */
146 timingApple_560x384_60hz
= 135, /* 560x384 (60 Hz) Rubik-560 timing. */
147 timingApple_640x480_67hz
= 140, /* 640x480 (67 Hz) HR timing. */
148 timingApple_640x400_67hz
= 145, /* 640x400 (67 Hz) HR-400 timing. */
149 timingVESA_640x480_60hz
= 150, /* 640x480 (60 Hz) VGA timing. */
150 timingVESA_640x480_72hz
= 152, /* 640x480 (72 Hz) VGA timing. */
151 timingVESA_640x480_75hz
= 154, /* 640x480 (75 Hz) VGA timing. */
152 timingVESA_640x480_85hz
= 158, /* 640x480 (85 Hz) VGA timing. */
153 timingGTF_640x480_120hz
= 159, /* 640x480 (120 Hz) VESA Generalized Timing Formula */
154 timingApple_640x870_75hz
= 160, /* 640x870 (75 Hz) FPD timing.*/
155 timingApple_640x818_75hz
= 165, /* 640x818 (75 Hz) FPD-818 timing.*/
156 timingApple_832x624_75hz
= 170, /* 832x624 (75 Hz) GoldFish timing.*/
157 timingVESA_800x600_56hz
= 180, /* 800x600 (56 Hz) SVGA timing. */
158 timingVESA_800x600_60hz
= 182, /* 800x600 (60 Hz) SVGA timing. */
159 timingVESA_800x600_72hz
= 184, /* 800x600 (72 Hz) SVGA timing. */
160 timingVESA_800x600_75hz
= 186, /* 800x600 (75 Hz) SVGA timing. */
161 timingVESA_800x600_85hz
= 188, /* 800x600 (85 Hz) SVGA timing. */
162 timingVESA_1024x768_60hz
= 190, /* 1024x768 (60 Hz) VESA 1K-60Hz timing. */
163 timingVESA_1024x768_70hz
= 200, /* 1024x768 (70 Hz) VESA 1K-70Hz timing. */
164 timingVESA_1024x768_75hz
= 204, /* 1024x768 (75 Hz) VESA 1K-75Hz timing (very similar to timingApple_1024x768_75hz). */
165 timingVESA_1024x768_85hz
= 208, /* 1024x768 (85 Hz) VESA timing. */
166 timingApple_1024x768_75hz
= 210, /* 1024x768 (75 Hz) Apple 19" RGB. */
167 timingApple_1152x870_75hz
= 220, /* 1152x870 (75 Hz) Apple 21" RGB. */
168 timingAppleNTSC_ST
= 230, /* 512x384 (60 Hz, interlaced, non-convolved). */
169 timingAppleNTSC_FF
= 232, /* 640x480 (60 Hz, interlaced, non-convolved). */
170 timingAppleNTSC_STconv
= 234, /* 512x384 (60 Hz, interlaced, convolved). */
171 timingAppleNTSC_FFconv
= 236, /* 640x480 (60 Hz, interlaced, convolved). */
172 timingApplePAL_ST
= 238, /* 640x480 (50 Hz, interlaced, non-convolved). */
173 timingApplePAL_FF
= 240, /* 768x576 (50 Hz, interlaced, non-convolved). */
174 timingApplePAL_STconv
= 242, /* 640x480 (50 Hz, interlaced, convolved). */
175 timingApplePAL_FFconv
= 244, /* 768x576 (50 Hz, interlaced, convolved). */
176 timingVESA_1280x960_75hz
= 250, /* 1280x960 (75 Hz) */
177 timingVESA_1280x960_60hz
= 252, /* 1280x960 (60 Hz) */
178 timingVESA_1280x960_85hz
= 254, /* 1280x960 (85 Hz) */
179 timingVESA_1280x1024_60hz
= 260, /* 1280x1024 (60 Hz) */
180 timingVESA_1280x1024_75hz
= 262, /* 1280x1024 (75 Hz) */
181 timingVESA_1280x1024_85hz
= 268, /* 1280x1024 (85 Hz) */
182 timingVESA_1600x1200_60hz
= 280, /* 1600x1200 (60 Hz) VESA timing. */
183 timingVESA_1600x1200_65hz
= 282, /* 1600x1200 (65 Hz) VESA timing. */
184 timingVESA_1600x1200_70hz
= 284, /* 1600x1200 (70 Hz) VESA timing. */
185 timingVESA_1600x1200_75hz
= 286, /* 1600x1200 (75 Hz) VESA timing (pixel clock is 189.2 Mhz dot clock). */
186 timingVESA_1600x1200_80hz
= 288, /* 1600x1200 (80 Hz) VESA timing (pixel clock is 216>? Mhz dot clock) - proposed only. */
187 timingVESA_1600x1200_85hz
= 289, /* 1600x1200 (85 Hz) VESA timing (pixel clock is 229.5 Mhz dot clock). */
188 timingVESA_1792x1344_60hz
= 296, /* 1792x1344 (60 Hz) VESA timing (204.75 Mhz dot clock). */
189 timingVESA_1792x1344_75hz
= 298, /* 1792x1344 (75 Hz) VESA timing (261.75 Mhz dot clock). */
190 timingVESA_1856x1392_60hz
= 300, /* 1856x1392 (60 Hz) VESA timing (218.25 Mhz dot clock). */
191 timingVESA_1856x1392_75hz
= 302, /* 1856x1392 (75 Hz) VESA timing (288 Mhz dot clock). */
192 timingVESA_1920x1440_60hz
= 304, /* 1920x1440 (60 Hz) VESA timing (234 Mhz dot clock). */
193 timingVESA_1920x1440_75hz
= 306, /* 1920x1440 (75 Hz) VESA timing (297 Mhz dot clock). */
194 timingSMPTE240M_60hz
= 400, /* 60Hz V, 33.75KHz H, interlaced timing, 16:9 aspect, typical resolution of 1920x1035. */
195 timingFilmRate_48hz
= 410, /* 48Hz V, 25.20KHz H, non-interlaced timing, typical resolution of 640x480. */
196 timingSony_1600x1024_76hz
= 500, /* 1600x1024 (76 Hz) Sony timing (pixel clock is 170.447 Mhz dot clock). */
197 timingSony_1920x1080_60hz
= 510, /* 1920x1080 (60 Hz) Sony timing (pixel clock is 159.84 Mhz dot clock). */
198 timingSony_1920x1080_72hz
= 520, /* 1920x1080 (72 Hz) Sony timing (pixel clock is 216.023 Mhz dot clock). */
199 timingSony_1920x1200_76hz
= 540, /* 1900x1200 (76 Hz) Sony timing (pixel clock is 243.20 Mhz dot clock). */
200 timingApple_0x0_0hz_Offline
= 550 /* Indicates that this timing will take the display off-line and remove it from the system. */
204 /* Deprecated timing names.*/
206 timingApple12
= timingApple_512x384_60hz
,
207 timingApple12x
= timingApple_560x384_60hz
,
208 timingApple13
= timingApple_640x480_67hz
,
209 timingApple13x
= timingApple_640x400_67hz
,
210 timingAppleVGA
= timingVESA_640x480_60hz
,
211 timingApple15
= timingApple_640x870_75hz
,
212 timingApple15x
= timingApple_640x818_75hz
,
213 timingApple16
= timingApple_832x624_75hz
,
214 timingAppleSVGA
= timingVESA_800x600_56hz
,
215 timingApple1Ka
= timingVESA_1024x768_60hz
,
216 timingApple1Kb
= timingVESA_1024x768_70hz
,
217 timingApple19
= timingApple_1024x768_75hz
,
218 timingApple21
= timingApple_1152x870_75hz
,
219 timingSony_1900x1200_74hz
= 530, /* 1900x1200 (74 Hz) Sony timing (pixel clock is 236.25 Mhz dot clock). */
220 timingSony_1900x1200_76hz
= timingSony_1920x1200_76hz
/* 1900x1200 (76 Hz) Sony timing (pixel clock is 245.48 Mhz dot clock). */
223 /* csConnectFlags values in VDDisplayConnectInfo */
225 kAllModesValid
= 0, /* All modes not trimmed by primary init are good close enough to try */
226 kAllModesSafe
= 1, /* All modes not trimmed by primary init are know to be safe */
227 kReportsTagging
= 2, /* Can detect tagged displays (to identify smart monitors) */
228 kHasDirectConnection
= 3, /* True implies that driver can talk directly to device (e.g. serial data link via sense lines) */
229 kIsMonoDev
= 4, /* Says whether there's an RGB (0) or Monochrome (1) connection. */
230 kUncertainConnection
= 5, /* There may not be a display (no sense lines?). */
231 kTaggingInfoNonStandard
= 6, /* Set when csConnectTaggedType/csConnectTaggedData are non-standard (i.e., not the Apple CRT sense codes). */
232 kReportsDDCConnection
= 7, /* Card can do ddc (set kHasDirectConnect && kHasDDCConnect if you actually found a ddc display). */
233 kHasDDCConnection
= 8, /* Card has ddc connect now. */
234 kConnectionInactive
= 9, /* Set when the connection is NOT currently active (generally used in a multiconnection environment). */
235 kDependentConnection
= 10, /* Set when some ascpect of THIS connection depends on another (will generally be set in a kModeSimulscan environment). */
236 kBuiltInConnection
= 11, /* Set when connection is KNOWN to be built-in (this is not the same as kHasDirectConnection). */
237 kOverrideConnection
= 12, /* Set when the reported connection is not the true one, but is one that has been forced through a SetConnection call */
238 kFastCheckForDDC
= 13, /* Set when all 3 are true: 1) sense codes indicate DDC display could be attached 2) attempted fast check 3) DDC failed */
239 kReportsHotPlugging
= 14 /* Detects and reports hot pluggging on connector (via VSL also implies DDC will be up to date w/o force read) */
243 /* csDisplayType values in VDDisplayConnectInfo */
245 kUnknownConnect
= 1, /* Not sure how we'll use this, but seems like a good idea. */
246 kPanelConnect
= 2, /* For use with fixed-in-place LCD panels. */
247 kPanelTFTConnect
= 2, /* Alias for kPanelConnect */
248 kFixedModeCRTConnect
= 3, /* For use with fixed-mode (i.e., very limited range) displays. */
249 kMultiModeCRT1Connect
= 4, /* 320x200 maybe, 12" maybe, 13" (default), 16" certain, 19" maybe, 21" maybe */
250 kMultiModeCRT2Connect
= 5, /* 320x200 maybe, 12" maybe, 13" certain, 16" (default), 19" certain, 21" maybe */
251 kMultiModeCRT3Connect
= 6, /* 320x200 maybe, 12" maybe, 13" certain, 16" certain, 19" default, 21" certain */
252 kMultiModeCRT4Connect
= 7, /* Expansion to large multi mode (not yet used) */
253 kModelessConnect
= 8, /* Expansion to modeless model (not yet used) */
254 kFullPageConnect
= 9, /* 640x818 (to get 8bpp in 512K case) and 640x870 (these two only) */
255 kVGAConnect
= 10, /* 640x480 VGA default -- question everything else */
256 kNTSCConnect
= 11, /* NTSC ST (default), FF, STconv, FFconv */
257 kPALConnect
= 12, /* PAL ST (default), FF, STconv, FFconv */
258 kHRConnect
= 13, /* Straight-6 connect -- 640x480 and 640x400 (to get 8bpp in 256K case) (these two only) */
259 kPanelFSTNConnect
= 14, /* For use with fixed-in-place LCD FSTN (aka "Supertwist") panels */
260 kMonoTwoPageConnect
= 15, /* 1152x870 Apple color two-page display */
261 kColorTwoPageConnect
= 16, /* 1152x870 Apple B&W two-page display */
262 kColor16Connect
= 17, /* 832x624 Apple B&W two-page display */
263 kColor19Connect
= 18, /* 1024x768 Apple B&W two-page display */
264 kGenericCRT
= 19, /* Indicates nothing except that connection is CRT in nature. */
265 kGenericLCD
= 20, /* Indicates nothing except that connection is LCD in nature. */
266 kDDCConnect
= 21, /* DDC connection, always set kHasDDCConnection */
267 kNoConnect
= 22 /* No display is connected - load sensing or similar level of hardware detection is assumed (used by resident drivers that support hot plugging when nothing is currently connected) */
270 /* csTimingFlags values in VDTimingInfoRec */
272 kModeValid
= 0, /* Says that this mode should NOT be trimmed. */
273 kModeSafe
= 1, /* This mode does not need confirmation */
274 kModeDefault
= 2, /* This is the default mode for this type of connection */
275 kModeShowNow
= 3, /* This mode should always be shown (even though it may require a confirm) */
276 kModeNotResize
= 4, /* This mode should not be used to resize the display (eg. mode selects a different connector on card) */
277 kModeRequiresPan
= 5, /* This mode has more pixels than are actually displayed */
278 kModeInterlaced
= 6, /* This mode is interlaced (single pixel lines look bad). */
279 kModeShowNever
= 7, /* This mode should not be shown in the user interface. */
280 kModeSimulscan
= 8, /* Indicates that more than one display connection can be driven from a single framebuffer controller. */
281 kModeNotPreset
= 9, /* Indicates that the timing is not a factory preset for the current display (geometry may need correction) */
282 kModeBuiltIn
= 10, /* Indicates that the display mode is for the built-in connect only (on multiconnect devices like the PB 3400) Only the driver is quieried */
283 kModeStretched
= 11 /* Indicates that the display mode will be stretched/distorted to match the display aspect ratio */
286 /* csDepthFlags in VDVideoParametersInfoRec */
288 kDepthDependent
= 0 /* Says that this depth mode may cause dependent changes in other framebuffers (and . */
291 /* csResolutionFlags bit flags for VDResolutionInfoRec */
293 kResolutionHasMultipleDepthSizes
= 0 /* Says that this mode has different csHorizontalPixels, csVerticalLines at different depths (usually slightly larger at lower depths) */
298 /* Power Mode constants for VDPowerStateRec.powerState. Note the numeric order does not match the power state order */
299 kAVPowerOff
= 0, /* Power fully off*/
303 kHardwareSleep
= 128,
305 kHardwareWakeFromSuspend
= 130,
306 kHardwareWakeToDoze
= 131,
307 kHardwareWakeToDozeFromSuspend
= 132
311 /* Power Mode masks and bits for VDPowerStateRec.powerFlags. */
312 kPowerStateNeedsRefresh
= 0, /* When leaving this power mode, a display will need refreshing */
313 kPowerStateSleepAwareBit
= 1, /* if gestaltPCCardDockingSelectorFix, Docking mgr checks this bit before checking kPowerStateSleepAllowedBit */
314 kPowerStateSleepForbiddenBit
= 2, /* if kPowerStateSleepAwareBit, Docking mgr checks this bit before sleeping */
315 kPowerStateSleepCanPowerOffBit
= 3, /* supports power down sleep (ie PCI power off)*/
316 kPowerStateSleepNoDPMSBit
= 4, /* Bug #2425210. Do not use DPMS with this display.*/
317 kPowerStateSleepWaketoDozeBit
= 5, /* Supports Wake to Doze */
318 kPowerStateNeedsRefreshMask
= (1L << kPowerStateNeedsRefresh
),
319 kPowerStateSleepAwareMask
= (1L << kPowerStateSleepAwareBit
),
320 kPowerStateSleepForbiddenMask
= (1L << kPowerStateSleepForbiddenBit
),
321 kPowerStateSleepCanPowerOffMask
= (1L << kPowerStateSleepCanPowerOffBit
),
322 kPowerStateSleepNoDPMSMask
= (1L << kPowerStateSleepNoDPMSBit
),
323 kPowerStateSleepWaketoDozeMask
= (1L << kPowerStateSleepWaketoDozeBit
)
338 cscDirectSetEntries
= 8,
339 cscSetDefaultMode
= 9,
342 cscSavePreferredConfiguration
= 16,
343 cscSetHardwareCursor
= 22,
344 cscDrawHardwareCursor
= 23,
345 cscSetConvolution
= 24,
346 cscSetPowerState
= 25,
347 cscPrivateControlCall
= 26, /* Takes a VDPrivateSelectorDataRec*/
348 cscSetMultiConnect
= 28, /* From a GDI point of view, this call should be implemented completely in the HAL and not at all in the core.*/
349 cscSetClutBehavior
= 29, /* Takes a VDClutBehavior */
350 cscSetDetailedTiming
= 31, /* Takes a VDDetailedTimingPtr */
351 cscDoCommunication
= 33, /* Takes a VDCommunicationPtr */
352 cscUnusedCall
= 127 /* This call used to expend the scrn resource. Its imbedded data contains more control info */
360 cscGetPages
= 4, /* This is what C&D 2 calls it. */
362 cscGetBaseAddr
= 5, /* This is what C&D 2 calls it. */
366 cscGetDefaultMode
= 9,
369 cscGetConnection
= 12, /* Return information about the connection to the display */
370 cscGetModeTiming
= 13, /* Return timing info for a mode */
371 cscGetModeBaseAddress
= 14, /* Return base address information about a particular mode */
372 cscGetScanProc
= 15, /* QuickTime scan chasing routine */
373 cscGetPreferredConfiguration
= 16,
374 cscGetNextResolution
= 17,
375 cscGetVideoParameters
= 18,
376 cscGetGammaInfoList
= 20,
377 cscRetrieveGammaTable
= 21,
378 cscSupportsHardwareCursor
= 22,
379 cscGetHardwareCursorDrawState
= 23,
380 cscGetConvolution
= 24,
381 cscGetPowerState
= 25,
382 cscPrivateStatusCall
= 26, /* Takes a VDPrivateSelectorDataRec*/
383 cscGetDDCBlock
= 27, /* Takes a VDDDCBlockRec */
384 cscGetMultiConnect
= 28, /* From a GDI point of view, this call should be implemented completely in the HAL and not at all in the core.*/
385 cscGetClutBehavior
= 29, /* Takes a VDClutBehavior */
386 cscGetTimingRanges
= 30, /* Takes a VDDisplayTimingRangePtr */
387 cscGetDetailedTiming
= 31, /* Takes a VDDetailedTimingPtr */
388 cscGetCommunicationInfo
= 32 /* Takes a VDCommunicationInfoPtr */
391 /* Bit definitions for the Get/Set Sync call*/
393 kDisableHorizontalSyncBit
= 0,
394 kDisableVerticalSyncBit
= 1,
395 kDisableCompositeSyncBit
= 2,
396 kEnableSyncOnBlue
= 3,
397 kEnableSyncOnGreen
= 4,
398 kEnableSyncOnRed
= 5,
399 kNoSeparateSyncControlBit
= 6,
400 kTriStateSyncBit
= 7,
401 kHorizontalSyncMask
= 0x01,
402 kVerticalSyncMask
= 0x02,
403 kCompositeSyncMask
= 0x04,
404 kDPMSSyncMask
= 0x07,
405 kTriStateSyncMask
= 0x80,
406 kSyncOnBlueMask
= 0x08,
407 kSyncOnGreenMask
= 0x10,
408 kSyncOnRedMask
= 0x20,
413 /* Power Mode constants for translating DPMS modes to Get/SetSync calls. */
415 kDPMSSyncStandby
= 1,
416 kDPMSSyncSuspend
= 2,
420 /* Bit definitions for the Get/Set Convolution call*/
423 kLiveVideoPassThru
= 1,
424 kConvolvedMask
= 0x01,
425 kLiveVideoPassThruMask
= 0x02
431 long vpBaseOffset
; /*Offset to page zero of video RAM (From minorBaseOS).*/
432 short vpRowBytes
; /*Width of each row of video memory.*/
433 Rect vpBounds
; /*BoundsRect for the video display (gives dimensions).*/
434 short vpVersion
; /*PixelMap version number.*/
437 long vpHRes
; /*Horizontal resolution of the device (pixels per inch).*/
438 long vpVRes
; /*Vertical resolution of the device (pixels per inch).*/
439 short vpPixelType
; /*Defines the pixel type.*/
440 short vpPixelSize
; /*Number of bits in pixel.*/
441 short vpCmpCount
; /*Number of components in pixel.*/
442 short vpCmpSize
; /*Number of bits per component*/
443 long vpPlaneBytes
; /*Offset from one plane to the next.*/
445 typedef struct VPBlock VPBlock
;
446 typedef VPBlock
* VPBlockPtr
;
448 struct VDEntryRecord
{
449 Ptr csTable
; /*(long) pointer to color table entry=value, r,g,b:INTEGER*/
451 typedef struct VDEntryRecord VDEntryRecord
;
453 typedef VDEntryRecord
* VDEntRecPtr
;
454 /* Parm block for SetGray control call */
456 struct VDGrayRecord
{
457 Boolean csMode
; /*Same as GDDevType value (0=color, 1=mono)*/
460 typedef struct VDGrayRecord VDGrayRecord
;
462 typedef VDGrayRecord
* VDGrayPtr
;
463 /* Parm block for SetInterrupt call */
465 struct VDFlagRecord
{
469 typedef struct VDFlagRecord VDFlagRecord
;
471 typedef VDFlagRecord
* VDFlagRecPtr
;
472 /* Parm block for SetEntries control call */
474 struct VDSetEntryRecord
{
475 ColorSpec
* csTable
; /*Pointer to an array of color specs*/
476 short csStart
; /*Which spec in array to start with, or -1*/
477 short csCount
; /*Number of color spec entries to set*/
479 typedef struct VDSetEntryRecord VDSetEntryRecord
;
481 typedef VDSetEntryRecord
* VDSetEntryPtr
;
482 /* Parm block for SetGamma control call */
484 struct VDGammaRecord
{
485 Ptr csGTable
; /*pointer to gamma table*/
487 typedef struct VDGammaRecord VDGammaRecord
;
489 typedef VDGammaRecord
* VDGamRecPtr
;
491 struct VDBaseAddressInfoRec
{
492 long csDevData
; /* LONGINT - (long) timing mode */
493 long csDevBase
; /* LONGINT - (long) base address of the mode */
494 short csModeReserved
; /* INTEGER - (short) will some day be the depth */
495 long csModeBase
; /* LONGINT - (long) reserved */
497 typedef struct VDBaseAddressInfoRec VDBaseAddressInfoRec
;
499 typedef VDBaseAddressInfoRec
* VDBaseAddressInfoPtr
;
501 struct VDSwitchInfoRec
{
502 unsigned short csMode
; /*(word) mode depth*/
503 unsigned long csData
; /*(long) functional sResource of mode*/
504 unsigned short csPage
; /*(word) page to switch in*/
505 Ptr csBaseAddr
; /*(long) base address of page (return value)*/
506 unsigned long csReserved
; /*(long) Reserved (set to 0) */
508 typedef struct VDSwitchInfoRec VDSwitchInfoRec
;
510 typedef VDSwitchInfoRec
* VDSwitchInfoPtr
;
512 struct VDTimingInfoRec
{
513 unsigned long csTimingMode
; /* LONGINT - (long) timing mode (a la InitGDevice) */
514 unsigned long csTimingReserved
; /* LONGINT - (long) reserved */
515 unsigned long csTimingFormat
; /* LONGINT - (long) what format is the timing info */
516 unsigned long csTimingData
; /* LONGINT - (long) data supplied by driver */
517 unsigned long csTimingFlags
; /* LONGINT - (long) mode within device */
519 typedef struct VDTimingInfoRec VDTimingInfoRec
;
521 typedef VDTimingInfoRec
* VDTimingInfoPtr
;
523 struct VDDisplayConnectInfoRec
{
524 unsigned short csDisplayType
; /* INTEGER - (word) Type of display connected */
525 unsigned char csConnectTaggedType
; /* BYTE - type of tagging */
526 unsigned char csConnectTaggedData
; /* BYTE - tagging data */
527 unsigned long csConnectFlags
; /* LONGINT - (long) tell us about the connection */
528 unsigned long csDisplayComponent
; /* LONGINT - (long) if the card has a direct connection to the display, it returns the display component here (FUTURE) */
529 unsigned long csConnectReserved
; /* LONGINT - (long) reserved */
531 typedef struct VDDisplayConnectInfoRec VDDisplayConnectInfoRec
;
533 typedef VDDisplayConnectInfoRec
* VDDisplayConnectInfoPtr
;
535 struct VDMultiConnectInfoRec
{
536 unsigned long csDisplayCountOrNumber
; /* For GetMultiConnect, returns count n of 1..n connections; otherwise, indicates the ith connection.*/
537 VDDisplayConnectInfoRec csConnectInfo
; /* Standard VDDisplayConnectionInfo for connection i.*/
539 typedef struct VDMultiConnectInfoRec VDMultiConnectInfoRec
;
541 typedef VDMultiConnectInfoRec
* VDMultiConnectInfoPtr
;
543 This abstract data type is not exactly abstract. Rather, it is merely enumerated constants
544 for the possible raw sense code values when 'standard' sense code hardware is implemented.
546 For 'standard' sense code hardware, the raw sense is obtained as follows:
547 o Instruct the frame buffer controller NOT to actively drive any of the monitor sense lines
548 o Read the state of the monitor sense lines 2, 1, and 0. (2 is the MSB, 0 the LSB)
551 When the 'kTaggingInfoNonStandard' bit of 'csConnectFlags' is FALSE, then these constants
552 are valid 'csConnectTaggedType' values in 'VDDisplayConnectInfo'
555 typedef unsigned char RawSenseCode
;
569 This abstract data type is not exactly abstract. Rather, it is merely enumerated constants
570 for the values which are possible when the extended sense algorithm is applied to hardware
571 which implements 'standard' sense code hardware.
573 For 'standard' sense code hardware, the extended sense code algorithm is as follows:
574 (Note: as described here, sense line 'A' corresponds to '2', 'B' to '1', and 'C' to '0')
575 o Drive sense line 'A' low and read the values of 'B' and 'C'.
576 o Drive sense line 'B' low and read the values of 'A' and 'C'.
577 o Drive sense line 'C' low and read the values of 'A' and 'B'.
579 In this way, a six-bit number of the form BC/AC/AB is generated.
582 When the 'kTaggingInfoNonStandard' bit of 'csConnectFlags' is FALSE, then these constants
583 are valid 'csConnectTaggedData' values in 'VDDisplayConnectInfo'
586 typedef unsigned char ExtendedSenseCode
;
588 kESCZero21Inch
= 0x00, /* 21" RGB */
589 kESCOnePortraitMono
= 0x14, /* Portrait Monochrome */
590 kESCTwo12Inch
= 0x21, /* 12" RGB */
591 kESCThree21InchRadius
= 0x31, /* 21" RGB (Radius) */
592 kESCThree21InchMonoRadius
= 0x34, /* 21" Monochrome (Radius) */
593 kESCThree21InchMono
= 0x35, /* 21" Monochrome */
594 kESCFourNTSC
= 0x0A, /* NTSC */
595 kESCFivePortrait
= 0x1E, /* Portrait RGB */
596 kESCSixMSB1
= 0x03, /* MultiScan Band-1 (12" thru 1Six") */
597 kESCSixMSB2
= 0x0B, /* MultiScan Band-2 (13" thru 19") */
598 kESCSixMSB3
= 0x23, /* MultiScan Band-3 (13" thru 21") */
599 kESCSixStandard
= 0x2B, /* 13"/14" RGB or 12" Monochrome */
600 kESCSevenPAL
= 0x00, /* PAL */
601 kESCSevenNTSC
= 0x14, /* NTSC */
602 kESCSevenVGA
= 0x17, /* VGA */
603 kESCSeven16Inch
= 0x2D, /* 16" RGB (GoldFish) */
604 kESCSevenPALAlternate
= 0x30, /* PAL (Alternate) */
605 kESCSeven19Inch
= 0x3A, /* Third-Party 19" */
606 kESCSevenDDC
= 0x3E, /* DDC display */
607 kESCSevenNoDisplay
= 0x3F /* No display connected */
611 This abstract data type is used to to reference RELATIVE pixel depths.
612 Its definition is largely derived from its past usage, analogous to 'xxxVidMode'
614 Bits per pixel DOES NOT directly map to 'DepthMode' For example, on some
615 graphics hardware, 'kDepthMode1' may represent 1 BPP, whereas on other
616 hardware, 'kDepthMode1' may represent 8BPP.
618 DepthMode IS considered to be ordinal, i.e., operations such as <, >, ==, etc.
619 behave as expected. The values of the constants which comprise the set are such
620 that 'kDepthMode4 < kDepthMode6' behaves as expected.
622 typedef unsigned short DepthMode
;
633 kFirstDepthMode
= 128, /* These constants are obsolete, and just included */
634 kSecondDepthMode
= 129, /* for clients that have converted to the above */
635 kThirdDepthMode
= 130, /* kDepthModeXXX constants. */
636 kFourthDepthMode
= 131,
637 kFifthDepthMode
= 132,
638 kSixthDepthMode
= 133
644 short csMode
; /*(word) mode within device*/
645 long csData
; /*(long) data supplied by driver*/
646 short csPage
; /*(word) page to switch in*/
647 Ptr csBaseAddr
; /*(long) base address of page*/
649 typedef struct VDPageInfo VDPageInfo
;
651 typedef VDPageInfo
* VDPgInfoPtr
;
654 short csHSize
; /*(word) desired/returned h size*/
655 short csHPos
; /*(word) desired/returned h position*/
656 short csVSize
; /*(word) desired/returned v size*/
657 short csVPos
; /*(word) desired/returned v position*/
659 typedef struct VDSizeInfo VDSizeInfo
;
661 typedef VDSizeInfo
* VDSzInfoPtr
;
664 short csParamCnt
; /*(word) number of params*/
665 short csBrightMax
; /*(word) max brightness*/
666 short csBrightDef
; /*(word) default brightness*/
667 short csBrightVal
; /*(word) current brightness*/
668 short csCntrstMax
; /*(word) max contrast*/
669 short csCntrstDef
; /*(word) default contrast*/
670 short csCntrstVal
; /*(word) current contrast*/
671 short csTintMax
; /*(word) max tint*/
672 short csTintDef
; /*(word) default tint*/
673 short csTintVal
; /*(word) current tint*/
674 short csHueMax
; /*(word) max hue*/
675 short csHueDef
; /*(word) default hue*/
676 short csHueVal
; /*(word) current hue*/
677 short csHorizDef
; /*(word) default horizontal*/
678 short csHorizVal
; /*(word) current horizontal*/
679 short csHorizMax
; /*(word) max horizontal*/
680 short csVertDef
; /*(word) default vertical*/
681 short csVertVal
; /*(word) current vertical*/
682 short csVertMax
; /*(word) max vertical*/
684 typedef struct VDSettings VDSettings
;
685 typedef VDSettings
* VDSettingsPtr
;
691 typedef struct VDDefMode VDDefMode
;
692 typedef VDDefMode
* VDDefModePtr
;
694 struct VDSyncInfoRec
{
698 typedef struct VDSyncInfoRec VDSyncInfoRec
;
700 typedef VDSyncInfoRec
* VDSyncInfoPtr
;
701 typedef UInt32 AVIDType
;
702 typedef AVIDType DisplayIDType
;
703 typedef UInt32 DisplayModeID
;
704 typedef UInt32 VideoDeviceType
;
705 typedef UInt32 GammaTableID
;
707 All displayModeID values from 0x80000000 to 0xFFFFFFFF and 0x00
708 are reserved for Apple Computer.
710 /* Constants for the cscGetNextResolution call */
712 kDisplayModeIDCurrent
= 0x00, /* Reference the Current DisplayModeID */
713 kDisplayModeIDInvalid
= (long)0xFFFFFFFF, /* A bogus DisplayModeID in all cases */
714 kDisplayModeIDFindFirstResolution
= (long)0xFFFFFFFE, /* Used in cscGetNextResolution to reset iterator */
715 kDisplayModeIDNoMoreResolutions
= (long)0xFFFFFFFD, /* Used in cscGetNextResolution to indicate End Of List */
716 kDisplayModeIDFindFirstProgrammable
= (long)0xFFFFFFFC, /* Used in cscGetNextResolution to find unused programmable timing */
717 kDisplayModeIDBootProgrammable
= (long)0xFFFFFFFB, /* This is the ID given at boot time by the OF driver to a programmable timing */
718 kDisplayModeIDReservedBase
= (long)0x80000000 /* Lowest (unsigned) DisplayModeID reserved by Apple */
721 /* Constants for the GetGammaInfoList call */
723 kGammaTableIDFindFirst
= (long)0xFFFFFFFE, /* Get the first gamma table ID */
724 kGammaTableIDNoMoreTables
= (long)0xFFFFFFFD, /* Used to indicate end of list */
725 kGammaTableIDSpecific
= 0x00 /* Return the info for the given table id */
728 /* Constants for GetMultiConnect call*/
730 kGetConnectionCount
= (long)0xFFFFFFFF, /* Used to get the number of possible connections in a "multi-headed" framebuffer environment.*/
731 kActivateConnection
= (0 << kConnectionInactive
), /* Used for activating a connection (csConnectFlags value).*/
732 kDeactivateConnection
= (1 << kConnectionInactive
) /* Used for deactivating a connection (csConnectFlags value.)*/
735 /* VDCommunicationRec.csBusID values*/
741 /* VDCommunicationInfoRec.csBusType values*/
743 kVideoBusTypeInvalid
= 0,
748 /* VDCommunicationRec.csSendType and VDCommunicationRec.csReplyType values*/
750 kVideoNoTransactionType
= 0, /* No transaction*/
751 kVideoSimpleI2CType
= 1, /* Simple I2C message*/
752 kVideoDDCciReplyType
= 2 /* DDC/ci message (with imbedded length)*/
758 struct VDResolutionInfoRec
{
759 DisplayModeID csPreviousDisplayModeID
; /* ID of the previous resolution in a chain */
760 DisplayModeID csDisplayModeID
; /* ID of the next resolution */
761 unsigned long csHorizontalPixels
; /* # of pixels in a horizontal line at the max depth */
762 unsigned long csVerticalLines
; /* # of lines in a screen at the max depth */
763 Fixed csRefreshRate
; /* Vertical Refresh Rate in Hz */
764 DepthMode csMaxDepthMode
; /* 0x80-based number representing max bit depth */
765 unsigned long csResolutionFlags
; /* Reserved - flag bits */
766 unsigned long csReserved
; /* Reserved */
768 typedef struct VDResolutionInfoRec VDResolutionInfoRec
;
770 typedef VDResolutionInfoRec
* VDResolutionInfoPtr
;
772 struct VDVideoParametersInfoRec
{
773 DisplayModeID csDisplayModeID
; /* the ID of the resolution we want info on */
774 DepthMode csDepthMode
; /* The bit depth we want the info on (0x80 based) */
775 VPBlockPtr csVPBlockPtr
; /* Pointer to a video parameter block */
776 unsigned long csPageCount
; /* Number of pages supported by the resolution */
777 VideoDeviceType csDeviceType
; /* Device Type: Direct, Fixed or CLUT; */
778 UInt32 csDepthFlags
; /* Flags */
780 typedef struct VDVideoParametersInfoRec VDVideoParametersInfoRec
;
782 typedef VDVideoParametersInfoRec
* VDVideoParametersInfoPtr
;
784 struct VDGammaInfoRec
{
785 GammaTableID csLastGammaID
; /* the ID of the previous gamma table */
786 GammaTableID csNextGammaID
; /* the ID of the next gamma table */
787 Ptr csGammaPtr
; /* Ptr to a gamma table data */
788 unsigned long csReserved
; /* Reserved */
790 typedef struct VDGammaInfoRec VDGammaInfoRec
;
792 typedef VDGammaInfoRec
* VDGammaInfoPtr
;
794 struct VDGetGammaListRec
{
795 GammaTableID csPreviousGammaTableID
; /* ID of the previous gamma table */
796 GammaTableID csGammaTableID
; /* ID of the gamma table following csPreviousDisplayModeID */
797 unsigned long csGammaTableSize
; /* Size of the gamma table in bytes */
798 char * csGammaTableName
; /* Gamma table name (c-string) */
800 typedef struct VDGetGammaListRec VDGetGammaListRec
;
802 typedef VDGetGammaListRec
* VDGetGammaListPtr
;
804 struct VDRetrieveGammaRec
{
805 GammaTableID csGammaTableID
; /* ID of gamma table to retrieve */
806 GammaTbl
* csGammaTablePtr
; /* Location to copy desired gamma to */
808 typedef struct VDRetrieveGammaRec VDRetrieveGammaRec
;
810 typedef VDRetrieveGammaRec
* VDRetrieveGammaPtr
;
812 struct VDSetHardwareCursorRec
{
813 void * csCursorRef
; /* reference to cursor data */
814 UInt32 csReserved1
; /* reserved for future use */
815 UInt32 csReserved2
; /* should be ignored */
817 typedef struct VDSetHardwareCursorRec VDSetHardwareCursorRec
;
819 typedef VDSetHardwareCursorRec
* VDSetHardwareCursorPtr
;
821 struct VDDrawHardwareCursorRec
{
822 SInt32 csCursorX
; /* x coordinate */
823 SInt32 csCursorY
; /* y coordinate */
824 UInt32 csCursorVisible
; /* true if cursor is must be visible */
825 UInt32 csReserved1
; /* reserved for future use */
826 UInt32 csReserved2
; /* should be ignored */
828 typedef struct VDDrawHardwareCursorRec VDDrawHardwareCursorRec
;
830 typedef VDDrawHardwareCursorRec
* VDDrawHardwareCursorPtr
;
832 struct VDSupportsHardwareCursorRec
{
833 UInt32 csSupportsHardwareCursor
;
834 /* true if hardware cursor is supported */
835 UInt32 csReserved1
; /* reserved for future use */
836 UInt32 csReserved2
; /* must be zero */
838 typedef struct VDSupportsHardwareCursorRec VDSupportsHardwareCursorRec
;
840 typedef VDSupportsHardwareCursorRec
* VDSupportsHardwareCursorPtr
;
842 struct VDHardwareCursorDrawStateRec
{
843 SInt32 csCursorX
; /* x coordinate */
844 SInt32 csCursorY
; /* y coordinate */
845 UInt32 csCursorVisible
; /* true if cursor is visible */
846 UInt32 csCursorSet
; /* true if cursor successfully set by last set control call */
847 UInt32 csReserved1
; /* reserved for future use */
848 UInt32 csReserved2
; /* must be zero */
850 typedef struct VDHardwareCursorDrawStateRec VDHardwareCursorDrawStateRec
;
852 typedef VDHardwareCursorDrawStateRec
* VDHardwareCursorDrawStatePtr
;
854 struct VDConvolutionInfoRec
{
855 DisplayModeID csDisplayModeID
; /* the ID of the resolution we want info on */
856 DepthMode csDepthMode
; /* The bit depth we want the info on (0x80 based) */
857 unsigned long csPage
;
861 typedef struct VDConvolutionInfoRec VDConvolutionInfoRec
;
863 typedef VDConvolutionInfoRec
* VDConvolutionInfoPtr
;
865 struct VDPowerStateRec
{
866 unsigned long powerState
;
867 unsigned long powerFlags
;
869 unsigned long powerReserved1
;
870 unsigned long powerReserved2
;
872 typedef struct VDPowerStateRec VDPowerStateRec
;
874 typedef VDPowerStateRec
* VDPowerStatePtr
;
876 Private Data to video drivers.
878 In versions of MacOS with multiple address spaces (System 8), the OS
879 must know the extent of parameters in order to move them between the caller
880 and driver. The old private-selector model for video drivers does not have
883 For post-7.x Systems private calls should be implemented using the cscPrivateCall
886 struct VDPrivateSelectorDataRec
{
887 LogicalAddress privateParameters
; /* Caller's parameters*/
888 ByteCount privateParametersSize
; /* Size of data sent from caller to driver*/
889 LogicalAddress privateResults
; /* Caller's return area. Can be nil, or same as privateParameters.*/
890 ByteCount privateResultsSize
; /* Size of data driver returns to caller. Can be nil, or same as privateParametersSize.*/
892 typedef struct VDPrivateSelectorDataRec VDPrivateSelectorDataRec
;
895 struct VDPrivateSelectorRec
{
896 UInt32 reserved
; /* Reserved (set to 0). */
897 VDPrivateSelectorDataRec data
[1];
899 typedef struct VDPrivateSelectorRec VDPrivateSelectorRec
;
901 struct VDDDCBlockRec
{
902 UInt32 ddcBlockNumber
; /* Input -- DDC EDID (Extended Display Identification Data) number (1-based) */
903 ResType ddcBlockType
; /* Input -- DDC block type (EDID/VDIF) */
904 UInt32 ddcFlags
; /* Input -- DDC Flags*/
905 UInt32 ddcReserved
; /* Reserved */
906 Byte ddcBlockData
[128]; /* Output -- DDC EDID/VDIF data (kDDCBlockSize) */
908 typedef struct VDDDCBlockRec VDDDCBlockRec
;
910 typedef VDDDCBlockRec
* VDDDCBlockPtr
;
913 /* timingSyncConfiguration*/
914 kSyncInterlaceMask
= (1 << 7),
915 kSyncAnalogCompositeMask
= 0,
916 kSyncAnalogCompositeSerrateMask
= (1 << 2),
917 kSyncAnalogCompositeRGBSyncMask
= (1 << 1),
918 kSyncAnalogBipolarMask
= (1 << 3),
919 kSyncAnalogBipolarSerrateMask
= (1 << 2),
920 kSyncAnalogBipolarSRGBSyncMask
= (1 << 1),
921 kSyncDigitalCompositeMask
= (1 << 4),
922 kSyncDigitalCompositeSerrateMask
= (1 << 2),
923 kSyncDigitalCompositeMatchHSyncMask
= (1 << 2),
924 kSyncDigitalSeperateMask
= (1 << 4) + (1 << 3),
925 kSyncDigitalVSyncPositiveMask
= (1 << 2),
926 kSyncDigitalHSyncPositiveMask
= (1 << 1)
932 struct VDDisplayTimingRangeRec
{
933 UInt32 csRangeSize
; /* Init to sizeof(VDDisplayTimingRangeRec) */
934 UInt32 csRangeType
; /* Init to 0 */
935 UInt32 csRangeVersion
; /* Init to 0 */
936 UInt32 csRangeReserved
; /* Init to 0 */
938 UInt32 csRangeBlockIndex
; /* Requested block (first index is 0)*/
939 UInt32 csRangeGroup
; /* set to 0 */
940 UInt32 csRangeBlockCount
; /* # blocks */
941 UInt32 csRangeFlags
; /* dependent video */
943 UInt64 csMinPixelClock
; /* Min dot clock in Hz */
944 UInt64 csMaxPixelClock
; /* Max dot clock in Hz */
946 UInt32 csMaxPixelError
; /* Max dot clock error */
947 UInt32 csTimingRangeSyncFlags
;
948 UInt32 csTimingRangeSignalLevels
;
951 UInt32 csMinFrameRate
; /* Hz */
952 UInt32 csMaxFrameRate
; /* Hz */
953 UInt32 csMinLineRate
; /* Hz */
954 UInt32 csMaxLineRate
; /* Hz */
957 UInt32 csMaxHorizontalTotal
; /* Clocks - Maximum total (active + blanking) */
958 UInt32 csMaxVerticalTotal
; /* Clocks - Maximum total (active + blanking) */
959 UInt32 csMaxTotalReserved1
; /* Reserved */
960 UInt32 csMaxTotalReserved2
; /* Reserved */
964 /* Some cards require that some timing elements*/
965 /* be multiples of a "character size" (often 8*/
966 /* clocks). The "xxxxCharSize" fields document*/
967 /* those requirements.*/
970 UInt8 csCharSizeHorizontalActive
; /* Character size */
971 UInt8 csCharSizeHorizontalBlanking
; /* Character size */
972 UInt8 csCharSizeHorizontalSyncOffset
; /* Character size */
973 UInt8 csCharSizeHorizontalSyncPulse
; /* Character size */
975 UInt8 csCharSizeVerticalActive
; /* Character size */
976 UInt8 csCharSizeVerticalBlanking
; /* Character size */
977 UInt8 csCharSizeVerticalSyncOffset
; /* Character size */
978 UInt8 csCharSizeVerticalSyncPulse
; /* Character size */
980 UInt8 csCharSizeHorizontalBorderLeft
; /* Character size */
981 UInt8 csCharSizeHorizontalBorderRight
; /* Character size */
982 UInt8 csCharSizeVerticalBorderTop
; /* Character size */
983 UInt8 csCharSizeVerticalBorderBottom
; /* Character size */
985 UInt8 csCharSizeHorizontalTotal
; /* Character size for active + blanking */
986 UInt8 csCharSizeVerticalTotal
; /* Character size for active + blanking */
987 UInt16 csCharSizeReserved1
; /* Reserved (Init to 0) */
990 UInt32 csMinHorizontalActiveClocks
;
991 UInt32 csMaxHorizontalActiveClocks
;
992 UInt32 csMinHorizontalBlankingClocks
;
993 UInt32 csMaxHorizontalBlankingClocks
;
995 UInt32 csMinHorizontalSyncOffsetClocks
;
996 UInt32 csMaxHorizontalSyncOffsetClocks
;
997 UInt32 csMinHorizontalPulseWidthClocks
;
998 UInt32 csMaxHorizontalPulseWidthClocks
;
1000 UInt32 csMinVerticalActiveClocks
;
1001 UInt32 csMaxVerticalActiveClocks
;
1002 UInt32 csMinVerticalBlankingClocks
;
1003 UInt32 csMaxVerticalBlankingClocks
;
1005 UInt32 csMinVerticalSyncOffsetClocks
;
1006 UInt32 csMaxVerticalSyncOffsetClocks
;
1007 UInt32 csMinVerticalPulseWidthClocks
;
1008 UInt32 csMaxVerticalPulseWidthClocks
;
1011 UInt32 csMinHorizontalBorderLeft
;
1012 UInt32 csMaxHorizontalBorderLeft
;
1013 UInt32 csMinHorizontalBorderRight
;
1014 UInt32 csMaxHorizontalBorderRight
;
1016 UInt32 csMinVerticalBorderTop
;
1017 UInt32 csMaxVerticalBorderTop
;
1018 UInt32 csMinVerticalBorderBottom
;
1019 UInt32 csMaxVerticalBorderBottom
;
1021 UInt32 csReserved1
; /* Reserved (Init to 0)*/
1022 UInt32 csReserved2
; /* Reserved (Init to 0)*/
1023 UInt32 csReserved3
; /* Reserved (Init to 0)*/
1024 UInt32 csReserved4
; /* Reserved (Init to 0)*/
1026 UInt32 csReserved5
; /* Reserved (Init to 0)*/
1027 UInt32 csReserved6
; /* Reserved (Init to 0)*/
1028 UInt32 csReserved7
; /* Reserved (Init to 0)*/
1029 UInt32 csReserved8
; /* Reserved (Init to 0)*/
1031 typedef struct VDDisplayTimingRangeRec VDDisplayTimingRangeRec
;
1033 typedef VDDisplayTimingRangeRec
* VDDisplayTimingRangePtr
;
1036 /* csDisplayModeState*/
1037 kDMSModeReady
= 0, /* Display Mode ID is configured and ready*/
1038 kDMSModeNotReady
= 1, /* Display Mode ID is is being programmed*/
1039 kDMSModeFree
= 2 /* Display Mode ID is not associated with a timing*/
1043 /* Video driver Errors -10930 to -10959 */
1045 kTimingChangeRestrictedErr
= -10930,
1046 kVideoI2CReplyPendingErr
= -10931,
1047 kVideoI2CTransactionErr
= -10932,
1048 kVideoI2CBusyErr
= -10933,
1049 kVideoI2CTransactionTypeErr
= -10934,
1050 kVideoBufferSizeErr
= -10935
1055 /* csTimingRangeSignalLevels*/
1056 kRangeSupportsSignal_0700_0300_Bit
= 0,
1057 kRangeSupportsSignal_0714_0286_Bit
= 1,
1058 kRangeSupportsSignal_1000_0400_Bit
= 2,
1059 kRangeSupportsSignal_0700_0000_Bit
= 3,
1060 kRangeSupportsSignal_0700_0300_Mask
= (1 << kRangeSupportsSignal_0700_0300_Bit
),
1061 kRangeSupportsSignal_0714_0286_Mask
= (1 << kRangeSupportsSignal_0714_0286_Bit
),
1062 kRangeSupportsSignal_1000_0400_Mask
= (1 << kRangeSupportsSignal_1000_0400_Bit
),
1063 kRangeSupportsSignal_0700_0000_Mask
= (1 << kRangeSupportsSignal_0700_0000_Bit
)
1069 kDigitalSignalBit
= 0, /* Do not set. Mac OS does not currently support arbitrary digital timings*/
1070 kAnalogSetupExpectedBit
= 1, /* Analog displays - display expects a blank-to-black setup or pedestal. See VESA signal standards.*/
1071 kDigitalSignalMask
= (1 << kDigitalSignalBit
),
1072 kAnalogSetupExpectedMask
= (1 << kAnalogSetupExpectedBit
)
1077 /* csSignalLevels for analog*/
1078 kAnalogSignalLevel_0700_0300
= 0,
1079 kAnalogSignalLevel_0714_0286
= 1,
1080 kAnalogSignalLevel_1000_0400
= 2,
1081 kAnalogSignalLevel_0700_0000
= 3
1086 /* csTimingRangeSyncFlags*/
1087 kRangeSupportsSeperateSyncsBit
= 0,
1088 kRangeSupportsSyncOnGreenBit
= 1,
1089 kRangeSupportsCompositeSyncBit
= 2,
1090 kRangeSupportsVSyncSerrationBit
= 3,
1091 kRangeSupportsSeperateSyncsMask
= (1 << kRangeSupportsSeperateSyncsBit
),
1092 kRangeSupportsSyncOnGreenMask
= (1 << kRangeSupportsSyncOnGreenBit
),
1093 kRangeSupportsCompositeSyncMask
= (1 << kRangeSupportsCompositeSyncBit
),
1094 kRangeSupportsVSyncSerrationMask
= (1 << kRangeSupportsVSyncSerrationBit
)
1100 /* csHorizontalSyncConfig and csVerticalSyncConfig*/
1101 kSyncPositivePolarityBit
= 0, /* Digital separate sync polarity for analog interfaces (0 => negative polarity)*/
1102 kSyncPositivePolarityMask
= (1 << kSyncPositivePolarityBit
)
1108 /* For timings with kDetailedTimingFormat.*/
1110 struct VDDetailedTimingRec
{
1111 UInt32 csTimingSize
; /* Init to sizeof(VDDetailedTimingRec)*/
1112 UInt32 csTimingType
; /* Init to 0*/
1113 UInt32 csTimingVersion
; /* Init to 0*/
1114 UInt32 csTimingReserved
; /* Init to 0*/
1116 DisplayModeID csDisplayModeID
; /* Init to 0*/
1117 UInt32 csDisplayModeSeed
; /* */
1118 UInt32 csDisplayModeState
; /* Display Mode state*/
1119 UInt32 csDisplayModeAlias
; /* Mode to use when programmed.*/
1121 UInt32 csSignalConfig
;
1122 UInt32 csSignalLevels
;
1124 UInt64 csPixelClock
; /* Hz*/
1126 UInt64 csMinPixelClock
; /* Hz - With error what is slowest actual clock */
1127 UInt64 csMaxPixelClock
; /* Hz - With error what is fasted actual clock */
1130 UInt32 csHorizontalActive
; /* Pixels*/
1131 UInt32 csHorizontalBlanking
; /* Pixels*/
1132 UInt32 csHorizontalSyncOffset
; /* Pixels*/
1133 UInt32 csHorizontalSyncPulseWidth
; /* Pixels*/
1135 UInt32 csVerticalActive
; /* Lines*/
1136 UInt32 csVerticalBlanking
; /* Lines*/
1137 UInt32 csVerticalSyncOffset
; /* Lines*/
1138 UInt32 csVerticalSyncPulseWidth
; /* Lines*/
1140 UInt32 csHorizontalBorderLeft
; /* Pixels*/
1141 UInt32 csHorizontalBorderRight
; /* Pixels*/
1142 UInt32 csVerticalBorderTop
; /* Lines*/
1143 UInt32 csVerticalBorderBottom
; /* Lines*/
1145 UInt32 csHorizontalSyncConfig
;
1146 UInt32 csHorizontalSyncLevel
; /* Future use (init to 0)*/
1147 UInt32 csVerticalSyncConfig
;
1148 UInt32 csVerticalSyncLevel
; /* Future use (init to 0)*/
1150 UInt32 csReserved1
; /* Init to 0*/
1151 UInt32 csReserved2
; /* Init to 0*/
1152 UInt32 csReserved3
; /* Init to 0*/
1153 UInt32 csReserved4
; /* Init to 0*/
1155 UInt32 csReserved5
; /* Init to 0*/
1156 UInt32 csReserved6
; /* Init to 0*/
1157 UInt32 csReserved7
; /* Init to 0*/
1158 UInt32 csReserved8
; /* Init to 0*/
1160 typedef struct VDDetailedTimingRec VDDetailedTimingRec
;
1162 typedef VDDetailedTimingRec
* VDDetailedTimingPtr
;
1163 typedef UInt32 VDClutBehavior
;
1164 typedef VDClutBehavior
* VDClutBehaviorPtr
;
1166 kSetClutAtSetEntries
= 0, /* SetEntries behavior is to update clut during SetEntries call*/
1167 kSetClutAtVBL
= 1 /* SetEntries behavior is to upate clut at next vbl*/
1172 struct VDCommunicationRec
{
1173 SInt32 csBusID
; /* kVideoDefaultBus for single headed cards.*/
1174 UInt32 csReserved0
; /* Always zero*/
1175 UInt32 csReserved1
; /* Always zero*/
1176 UInt32 csReserved2
; /* Always zero*/
1178 UInt32 csSendAddress
; /* Usually I2C address (eg 0x6E)*/
1179 UInt32 csSendType
; /* See kVideoSimpleI2CType etc.*/
1180 LogicalAddress csSendBuffer
; /* Pointer to the send buffer*/
1181 ByteCount csSendSize
; /* Number of bytes to send*/
1183 UInt32 csReplyAddress
; /* Address from which to read (eg 0x6F for kVideoDDCciReplyType I2C address)*/
1184 UInt32 csReplyType
; /* See kVideoDDCciReplyType etc.*/
1185 LogicalAddress csReplyBuffer
; /* Pointer to the reply buffer*/
1186 ByteCount csReplySize
; /* Max bytes to reply (size of csReplyBuffer)*/
1190 UInt32 csReserved5
; /* Always zero*/
1191 UInt32 csReserved6
; /* Always zero*/
1193 typedef struct VDCommunicationRec VDCommunicationRec
;
1195 typedef VDCommunicationRec
* VDCommunicationPtr
;
1197 struct VDCommunicationInfoRec
{
1198 SInt32 csBusID
; /* kVideoDefaultBus for single headed cards. */
1199 UInt32 csBusType
; /* See kVideoBusI2C etc.*/
1200 SInt32 csMinBus
; /* Minimum bus (usually kVideoDefaultBus). Used to probe additional busses*/
1201 SInt32 csMaxBus
; /* Max bus (usually kVideoDefaultBus). Used to probe additional busses*/
1203 UInt32 csSupportedTypes
; /* Bit field for first 32 supported transaction types. Eg. 0x07 => support for kVideoNoTransactionType, kVideoSimpleI2CType and kVideoDDCciReplyType.*/
1204 UInt32 csReserved1
; /* Always zero*/
1205 UInt32 csReserved2
; /* Always zero*/
1206 UInt32 csReserved3
; /* Always zero*/
1208 UInt32 csReserved4
; /* Always zero*/
1209 UInt32 csReserved5
; /* Always zero*/
1210 UInt32 csReserved6
; /* Always zero*/
1211 UInt32 csReserved7
; /* Always zero*/
1213 typedef struct VDCommunicationInfoRec VDCommunicationInfoRec
;
1215 typedef VDCommunicationInfoRec
* VDCommunicationInfoPtr
;
1217 #if PRAGMA_STRUCT_ALIGN
1218 #pragma options align=reset
1219 #elif PRAGMA_STRUCT_PACKPUSH
1221 #elif PRAGMA_STRUCT_PACK
1225 #ifdef PRAGMA_IMPORT_OFF
1228 #pragma import reset
1235 #endif /* __IOMACOSVIDEO__ */