|
|
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: * Copyright (c) 1997 Apple Computer, Inc.
26: *
27: *
28: * HISTORY
29: *
30: * Simon Douglas 22 Oct 97
31: * - first checked in.
32: */
33:
34:
35: /*
36: File: Video.h
37:
38: Contains: Video Driver Interfaces.
39:
40: Version: System 7.5
41:
42: DRI: Fernando Urbina
43:
44: Copyright: � 1984-1996 by Apple Computer, Inc.
45: All rights reserved.
46:
47: Warning: *** APPLE INTERNAL USE ONLY ***
48: This file may contain unreleased API's
49:
50: BuildInfo: Built by: Simon Douglas
51: With Interfacer: 2.0d13 (PowerPC native)
52: From: Video.i
53: Revision: 53
54: Dated: 12/13/96
55: Last change by: IH
56: Last comment: Define a bit for built-in display modes.
57:
58: Bugs: Report bugs to Radar component �System Interfaces�, �Latest�
59: List the version information (from above) in the Problem Description.
60:
61: */
62: #ifndef __IOMACOSVIDEO__
63: #define __IOMACOSVIDEO__
64:
65:
66: #ifdef __cplusplus
67: extern "C" {
68: #endif
69:
70: #pragma import on
71:
72: #pragma options align=mac68k
73:
74:
75: enum {
76: mBaseOffset = 1, /*Id of mBaseOffset.*/
77: mRowBytes = 2, /*Video sResource parameter Id's */
78: mBounds = 3, /*Video sResource parameter Id's */
79: mVersion = 4, /*Video sResource parameter Id's */
80: mHRes = 5, /*Video sResource parameter Id's */
81: mVRes = 6, /*Video sResource parameter Id's */
82: mPixelType = 7, /*Video sResource parameter Id's */
83: mPixelSize = 8, /*Video sResource parameter Id's */
84: mCmpCount = 9, /*Video sResource parameter Id's */
85: mCmpSize = 10, /*Video sResource parameter Id's */
86: mPlaneBytes = 11, /*Video sResource parameter Id's */
87: mVertRefRate = 14, /*Video sResource parameter Id's */
88: mVidParams = 1, /*Video parameter block id.*/
89: mTable = 2, /*Offset to the table.*/
90: mPageCnt = 3, /*Number of pages*/
91: mDevType = 4, /*Device Type*/
92: oneBitMode = 128, /*Id of OneBitMode Parameter list.*/
93: twoBitMode = 129, /*Id of TwoBitMode Parameter list.*/
94: fourBitMode = 130, /*Id of FourBitMode Parameter list.*/
95: eightBitMode = 131 /*Id of EightBitMode Parameter list.*/
96: };
97:
98:
99: enum {
100: sixteenBitMode = 132, /*Id of SixteenBitMode Parameter list.*/
101: thirtyTwoBitMode = 133, /*Id of ThirtyTwoBitMode Parameter list.*/
102: firstVidMode = 128, /*The new, better way to do the above. */
103: secondVidMode = 129, /* QuickDraw only supports six video */
104: thirdVidMode = 130, /* at this time. */
105: fourthVidMode = 131,
106: fifthVidMode = 132,
107: sixthVidMode = 133,
108: spGammaDir = 64,
109: spVidNamesDir = 65
110: };
111:
112: /* csTimingFormat values in VDTimingInfo */
113: /* look in the declaration rom for timing info */
114:
115: enum {
116: kDeclROMtables = 0x6465636c //'decl'
117: };
118:
119: /* Size of a block of EDID (Extended Display Identification Data) */
120:
121: enum {
122: kDDCBlockSize = 128
123: };
124:
125: /* ddcBlockType constants*/
126:
127: enum {
128: kDDCBlockTypeEDID = 0 /* EDID block type. */
129: };
130:
131: /* ddcFlags constants*/
132:
133: enum {
134: kDDCForceReadBit = 0, /* Force a new read of the EDID. */
135: kDDCForceReadMask = (1 << kDDCForceReadBit) /* Mask for kddcForceReadBit. */
136: };
137:
138: /*
139: Timing mode constants for Display Manager MultiMode support
140: Corresponding .h equates are in Video.h
141: .a equates are in Video.a
142: .r equates are in DepVideoEqu.r
143:
144: The second enum is the old names (for compatibility).
145: The first enum is the new names.
146: */
147:
148: enum {
149: timingInvalid = 0, /* Unknown timing� force user to confirm. */
150: timingInvalid_SM_T24 = 8, /* Work around bug in SM Thunder24 card.*/
151: timingApple_FixedRateLCD = 42, /* Lump all fixed-rate LCDs into one category.*/
152: timingApple_512x384_60hz = 130, /* 512x384 (60 Hz) Rubik timing. */
153: timingApple_560x384_60hz = 135, /* 560x384 (60 Hz) Rubik-560 timing. */
154: timingApple_640x480_67hz = 140, /* 640x480 (67 Hz) HR timing. */
155: timingApple_640x400_67hz = 145, /* 640x400 (67 Hz) HR-400 timing. */
156: timingVESA_640x480_60hz = 150, /* 640x480 (60 Hz) VGA timing. */
157: timingVESA_640x480_72hz = 152, /* 640x480 (72 Hz) VGA timing. */
158: timingVESA_640x480_75hz = 154, /* 640x480 (75 Hz) VGA timing. */
159: timingVESA_640x480_85hz = 158, /* 640x480 (85 Hz) VGA timing. */
160: timingApple_640x870_75hz = 160, /* 640x870 (75 Hz) FPD timing.*/
161: timingApple_640x818_75hz = 165, /* 640x818 (75 Hz) FPD-818 timing.*/
162: timingApple_832x624_75hz = 170, /* 832x624 (75 Hz) GoldFish timing.*/
163: timingVESA_800x600_56hz = 180, /* 800x600 (56 Hz) SVGA timing. */
164: timingVESA_800x600_60hz = 182, /* 800x600 (60 Hz) SVGA timing. */
165: timingVESA_800x600_72hz = 184, /* 800x600 (72 Hz) SVGA timing. */
166: timingVESA_800x600_75hz = 186, /* 800x600 (75 Hz) SVGA timing. */
167: timingVESA_800x600_85hz = 188, /* 800x600 (85 Hz) SVGA timing. */
168: timingVESA_1024x768_60hz = 190, /* 1024x768 (60 Hz) VESA 1K-60Hz timing. */
169: timingVESA_1024x768_70hz = 200, /* 1024x768 (70 Hz) VESA 1K-70Hz timing. */
170: timingVESA_1024x768_75hz = 204, /* 1024x768 (75 Hz) VESA 1K-75Hz timing (very similar to timingApple_1024x768_75hz). */
171: timingVESA_1024x768_85hz = 208, /* 1024x768 (85 Hz) VESA timing. */
172: timingApple_1024x768_75hz = 210, /* 1024x768 (75 Hz) Apple 19" RGB. */
173: timingApple_1152x870_75hz = 220, /* 1152x870 (75 Hz) Apple 21" RGB. */
174: timingAppleNTSC_ST = 230, /* 512x384 (60 Hz, interlaced, non-convolved). */
175: timingAppleNTSC_FF = 232, /* 640x480 (60 Hz, interlaced, non-convolved). */
176: timingAppleNTSC_STconv = 234, /* 512x384 (60 Hz, interlaced, convolved). */
177: timingAppleNTSC_FFconv = 236, /* 640x480 (60 Hz, interlaced, convolved). */
178: timingApplePAL_ST = 238, /* 640x480 (50 Hz, interlaced, non-convolved). */
179: timingApplePAL_FF = 240, /* 768x576 (50 Hz, interlaced, non-convolved). */
180: timingApplePAL_STconv = 242, /* 640x480 (50 Hz, interlaced, convolved). */
181: timingApplePAL_FFconv = 244, /* 768x576 (50 Hz, interlaced, convolved). */
182: timingVESA_1280x960_75hz = 250, /* 1280x960 (75 Hz) */
183: timingVESA_1280x1024_60hz = 260, /* 1280x1024 (60 Hz) */
184: timingVESA_1280x1024_75hz = 262, /* 1280x1024 (75 Hz) */
185: timingVESA_1280x1024_85hz = 268, /* 1280x1024 (85 Hz) */
186: timingVESA_1600x1200_60hz = 280, /* 1600x1200 (60 Hz) VESA proposed timing. */
187: timingVESA_1600x1200_65hz = 282, /* 1600x1200 (65 Hz) VESA proposed timing. */
188: timingVESA_1600x1200_70hz = 284, /* 1600x1200 (70 Hz) VESA proposed timing. */
189: timingVESA_1600x1200_75hz = 286, /* 1600x1200 (75 Hz) VESA proposed timing. */
190: timingVESA_1600x1200_80hz = 288, /* 1600x1200 (80 Hz) VESA proposed timing (pixel clock is 216 Mhz dot clock). */
191: timingSMPTE240M_60hz = 400, /* 60Hz V, 33.75KHz H, interlaced timing, 16:9 aspect, typical resolution of 1920x1035. */
192: timingFilmRate_48hz = 410 /* 48Hz V, 25.20KHz H, non-interlaced timing, typical resolution of 640x480. */
193: };
194:
195:
196: enum {
197: timingApple12 = timingApple_512x384_60hz,
198: timingApple12x = timingApple_560x384_60hz,
199: timingApple13 = timingApple_640x480_67hz,
200: timingApple13x = timingApple_640x400_67hz,
201: timingAppleVGA = timingVESA_640x480_60hz,
202: timingApple15 = timingApple_640x870_75hz,
203: timingApple15x = timingApple_640x818_75hz,
204: timingApple16 = timingApple_832x624_75hz,
205: timingAppleSVGA = timingVESA_800x600_56hz,
206: timingApple1Ka = timingVESA_1024x768_60hz,
207: timingApple1Kb = timingVESA_1024x768_70hz,
208: timingApple19 = timingApple_1024x768_75hz,
209: timingApple21 = timingApple_1152x870_75hz
210: };
211:
212: /* csConnectFlags values in VDDisplayConnectInfo */
213:
214: enum {
215: kAllModesValid = 0, /* All modes not trimmed by primary init are good close enough to try */
216: kAllModesSafe = 1, /* All modes not trimmed by primary init are know to be safe */
217: kReportsTagging = 2, /* Can detect tagged displays (to identify smart monitors) */
218: kHasDirectConnection = 3, /* True implies that driver can talk directly to device (e.g. serial data link via sense lines) */
219: kIsMonoDev = 4, /* Says whether there�s an RGB (0) or Monochrome (1) connection. */
220: kUncertainConnection = 5, /* There may not be a display (no sense lines?). */
221: kTaggingInfoNonStandard = 6, /* Set when csConnectTaggedType/csConnectTaggedData are non-standard (i.e., not the Apple CRT sense codes). */
222: kReportsDDCConnection = 7, /* Card can do ddc (set kHasDirectConnect && kHasDDCConnect if you actually found a ddc display). */
223: kHasDDCConnection = 8, /* Card has ddc connect now. */
224: kConnectionInactive = 9, /* Set when the connection is NOT currently active (generally used in a multiconnection environment). */
225: kDependentConnection = 10, /* Set when some ascpect of THIS connection depends on another (will generally be set in a kModeSimulscan environment). */
226: kBuiltInConnection = 11 /* Set when connection is KNOWN to be built-in (this is not the same as kHasDirectConnection). */
227: };
228:
229: /* csDisplayType values in VDDisplayConnectInfo */
230:
231: enum {
232: kUnknownConnect = 1, /* Not sure how we�ll use this, but seems like a good idea. */
233: kPanelConnect = 2, /* For use with fixed-in-place LCD panels. */
234: kPanelTFTConnect = 2, /* Alias for kPanelConnect */
235: kFixedModeCRTConnect = 3, /* For use with fixed-mode (i.e., very limited range) displays. */
236: kMultiModeCRT1Connect = 4, /* 320x200 maybe, 12" maybe, 13" (default), 16" certain, 19" maybe, 21" maybe */
237: kMultiModeCRT2Connect = 5, /* 320x200 maybe, 12" maybe, 13" certain, 16" (default), 19" certain, 21" maybe */
238: kMultiModeCRT3Connect = 6, /* 320x200 maybe, 12" maybe, 13" certain, 16" certain, 19" default, 21" certain */
239: kMultiModeCRT4Connect = 7, /* Expansion to large multi mode (not yet used) */
240: kModelessConnect = 8, /* Expansion to modeless model (not yet used) */
241: kFullPageConnect = 9, /* 640x818 (to get 8bpp in 512K case) and 640x870 (these two only) */
242: kVGAConnect = 10, /* 640x480 VGA default -- question everything else */
243: kNTSCConnect = 11, /* NTSC ST (default), FF, STconv, FFconv */
244: kPALConnect = 12, /* PAL ST (default), FF, STconv, FFconv */
245: kHRConnect = 13, /* Straight-6 connect -- 640x480 and 640x400 (to get 8bpp in 256K case) (these two only) */
246: kPanelFSTNConnect = 14, /* For use with fixed-in-place LCD FSTN (aka �Supertwist�) panels */
247: kMonoTwoPageConnect = 15, /* 1152x870 Apple color two-page display */
248: kColorTwoPageConnect = 16, /* 1152x870 Apple B&W two-page display */
249: kColor16Connect = 17, /* 832x624 Apple B&W two-page display */
250: kColor19Connect = 18, /* 1024x768 Apple B&W two-page display */
251: kGenericCRT = 19, /* Indicates nothing except that connection is CRT in nature. */
252: kGenericLCD = 20, /* Indicates nothing except that connection is LCD in nature. */
253: kDDCConnect = 21 /* DDC connection, always set kHasDDCConnection */
254: };
255:
256: /* csTimingFlags values in VDTimingInfoRec */
257:
258: enum {
259: kModeValid = 0, /* Says that this mode should NOT be trimmed. */
260: kModeSafe = 1, /* This mode does not need confirmation */
261: kModeDefault = 2, /* This is the default mode for this type of connection */
262: kModeShowNow = 3, /* This mode should always be shown (even though it may require a confirm) */
263: kModeNotResize = 4, /* This mode should not be used to resize the display (eg. mode selects a different connector on card) */
264: kModeRequiresPan = 5, /* This mode has more pixels than are actually displayed */
265: kModeInterlaced = 6, /* This mode is interlaced (single pixel lines look bad). */
266: kModeShowNever = 7, /* This mode should not be shown in the user interface. */
267: kModeSimulscan = 8, /* Indicates that more than one display connection can be driven from a single framebuffer controller. */
268: kModeNotPreset = 9, /* Indicates that the timing is not a factory preset for the current display (geometry may need correction) */
269: 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 */
270: };
271:
272: /* csDepthFlags in VDVideoParametersInfoRec */
273:
274: enum {
275: kDepthDependent = 0 /* Says that this depth mode may cause dependent changes in other framebuffers (and . */
276: };
277:
278: /* csResolutionFlags bit flags for VDResolutionInfoRec */
279:
280: enum {
281: kResolutionHasMultipleDepthSizes = 0 /* Says that this mode has different csHorizontalPixels, csVerticalLines at different depths (usually slightly larger at lower depths) */
282: };
283:
284:
285: enum {
286: /* Power Mode constants for VDPowerStateRec.powerState. */
287: kAVPowerOff = 0,
288: kAVPowerStandby = 1,
289: kAVPowerSuspend = 2,
290: kAVPowerOn = 3
291: };
292:
293:
294: enum {
295: /* Power Mode masks and bits for VDPowerStateRec.powerFlags. */
296: kPowerStateNeedsRefresh = 0,
297: kPowerStateNeedsRefreshMask = (1L << 0)
298: };
299:
300:
301: enum {
302: /* Control Codes */
303: cscReset = 0,
304: cscKillIO = 1,
305: cscSetMode = 2,
306: cscSetEntries = 3,
307: cscSetGamma = 4,
308: cscGrayPage = 5,
309: cscGrayScreen = 5,
310: cscSetGray = 6,
311: cscSetInterrupt = 7,
312: cscDirectSetEntries = 8,
313: cscSetDefaultMode = 9,
314: cscSwitchMode = 10,
315: cscSetSync = 11,
316: cscSavePreferredConfiguration = 16,
317: cscSetHardwareCursor = 22,
318: cscDrawHardwareCursor = 23,
319: cscSetConvolution = 24,
320: cscSetPowerState = 25,
321: cscPrivateControlCall = 26, /* Takes a VDPrivateSelectorDataRec*/
322: cscSetMultiConnect = 28, /* From a GDI point of view, this call should be implemented completely in the HAL and not at all in the core.*/
323: cscSetClutBehavior = 29, /* Takes a VDClutBehavior */
324: cscUnusedCall = 127 /* This call used to expend the scrn resource. Its imbedded data contains more control info */
325: };
326:
327:
328: enum {
329: /* Status Codes */
330: cscGetMode = 2,
331: cscGetEntries = 3,
332: cscGetPageCnt = 4,
333: cscGetPages = 4, /* This is what C&D 2 calls it. */
334: cscGetPageBase = 5,
335: cscGetBaseAddr = 5, /* This is what C&D 2 calls it. */
336: cscGetGray = 6,
337: cscGetInterrupt = 7,
338: cscGetGamma = 8,
339: cscGetDefaultMode = 9,
340: cscGetCurMode = 10,
341: cscGetSync = 11,
342: cscGetConnection = 12, /* Return information about the connection to the display */
343: cscGetModeTiming = 13, /* Return timing info for a mode */
344: cscGetModeBaseAddress = 14, /* Return base address information about a particular mode */
345: cscGetScanProc = 15, /* QuickTime scan chasing routine */
346: cscGetPreferredConfiguration = 16,
347: cscGetNextResolution = 17,
348: cscGetVideoParameters = 18,
349: cscGetGammaInfoList = 20,
350: cscRetrieveGammaTable = 21,
351: cscSupportsHardwareCursor = 22,
352: cscGetHardwareCursorDrawState = 23,
353: cscGetConvolution = 24,
354: cscGetPowerState = 25,
355: cscPrivateStatusCall = 26, /* Takes a VDPrivateSelectorDataRec*/
356: cscGetDDCBlock = 27, /* Takes a VDDDCBlockRec */
357: cscGetMultiConnect = 28, /* From a GDI point of view, this call should be implemented completely in the HAL and not at all in the core.*/
358: cscGetClutBehavior = 29 /* Takes a VDClutBehavior */
359: };
360:
361: /* Bit definitions for the Get/Set Sync call*/
362:
363: enum {
364: kDisableHorizontalSyncBit = 0,
365: kDisableVerticalSyncBit = 1,
366: kDisableCompositeSyncBit = 2,
367: kEnableSyncOnBlue = 3,
368: kEnableSyncOnGreen = 4,
369: kEnableSyncOnRed = 5,
370: kNoSeparateSyncControlBit = 6,
371: kTriStateSyncBit = 7,
372: kHorizontalSyncMask = 0x01,
373: kVerticalSyncMask = 0x02,
374: kCompositeSyncMask = 0x04,
375: kDPMSSyncMask = 0x07,
376: kTriStateSyncMask = 0x80,
377: kSyncOnBlueMask = 0x08,
378: kSyncOnGreenMask = 0x10,
379: kSyncOnRedMask = 0x20,
380: kSyncOnMask = 0x38
381: };
382:
383:
384: enum {
385: /* Power Mode constants for translating DPMS modes to Get/SetSync calls. */
386: kDPMSSyncOn = 0,
387: kDPMSSyncStandby = 1,
388: kDPMSSyncSuspend = 2,
389: kDPMSSyncOff = 7
390: };
391:
392: /* Bit definitions for the Get/Set Convolution call*/
393:
394: enum {
395: kConvolved = 0,
396: kLiveVideoPassThru = 1,
397: kConvolvedMask = 0x01,
398: kLiveVideoPassThruMask = 0x02
399: };
400:
401: struct VPBlock {
402: long vpBaseOffset; /*Offset to page zero of video RAM (From minorBaseOS).*/
403: short vpRowBytes; /*Width of each row of video memory.*/
404: Rect vpBounds; /*BoundsRect for the video display (gives dimensions).*/
405: short vpVersion; /*PixelMap version number.*/
406: short vpPackType;
407: long vpPackSize;
408: long vpHRes; /*Horizontal resolution of the device (pixels per inch).*/
409: long vpVRes; /*Vertical resolution of the device (pixels per inch).*/
410: short vpPixelType; /*Defines the pixel type.*/
411: short vpPixelSize; /*Number of bits in pixel.*/
412: short vpCmpCount; /*Number of components in pixel.*/
413: short vpCmpSize; /*Number of bits per component*/
414: long vpPlaneBytes; /*Offset from one plane to the next.*/
415: };
416: typedef struct VPBlock VPBlock;
417:
418: typedef VPBlock *VPBlockPtr;
419: struct VDEntryRecord {
420: Ptr csTable; /*(long) pointer to color table entry=value, r,g,b:INTEGER*/
421: };
422: typedef struct VDEntryRecord VDEntryRecord;
423:
424: typedef VDEntryRecord *VDEntRecPtr;
425: /* Parm block for SetGray control call */
426: struct VDGrayRecord {
427: Boolean csMode; /*Same as GDDevType value (0=color, 1=mono)*/
428: SInt8 filler;
429: };
430: typedef struct VDGrayRecord VDGrayRecord;
431:
432: typedef VDGrayRecord *VDGrayPtr;
433: /* Parm block for SetInterrupt call */
434: struct VDFlagRecord {
435: SInt8 csMode;
436: SInt8 filler;
437: };
438: typedef struct VDFlagRecord VDFlagRecord;
439:
440: typedef VDFlagRecord *VDFlagRecPtr;
441: /* Parm block for SetEntries control call */
442: struct VDSetEntryRecord {
443: ColorSpec * csTable; /*Pointer to an array of color specs*/
444: short csStart; /*Which spec in array to start with, or -1*/
445: short csCount; /*Number of color spec entries to set*/
446: };
447: typedef struct VDSetEntryRecord VDSetEntryRecord;
448:
449: typedef VDSetEntryRecord *VDSetEntryPtr;
450: /* Parm block for SetGamma control call */
451: struct VDGammaRecord {
452: Ptr csGTable; /*pointer to gamma table*/
453: };
454: typedef struct VDGammaRecord VDGammaRecord;
455:
456: typedef VDGammaRecord *VDGamRecPtr;
457: struct VDBaseAddressInfoRec {
458: long csDevData; /* LONGINT - (long) timing mode */
459: long csDevBase; /* LONGINT - (long) base address of the mode */
460: short csModeReserved; /* INTEGER - (short) will some day be the depth */
461: long csModeBase; /* LONGINT - (long) reserved */
462: };
463: typedef struct VDBaseAddressInfoRec VDBaseAddressInfoRec;
464:
465: typedef VDBaseAddressInfoRec *VDBaseAddressInfoPtr;
466: struct VDSwitchInfoRec {
467: unsigned short csMode; /*(word) mode depth*/
468: unsigned long csData; /*(long) functional sResource of mode*/
469: unsigned short csPage; /*(word) page to switch in*/
470: Ptr csBaseAddr; /*(long) base address of page (return value)*/
471: unsigned long csReserved; /*(long) Reserved (set to 0) */
472: };
473: typedef struct VDSwitchInfoRec VDSwitchInfoRec;
474:
475: typedef VDSwitchInfoRec *VDSwitchInfoPtr;
476: struct VDTimingInfoRec {
477: unsigned long csTimingMode; /* LONGINT - (long) timing mode (a la InitGDevice) */
478: unsigned long csTimingReserved; /* LONGINT - (long) reserved */
479: unsigned long csTimingFormat; /* LONGINT - (long) what format is the timing info */
480: unsigned long csTimingData; /* LONGINT - (long) data supplied by driver */
481: unsigned long csTimingFlags; /* LONGINT - (long) mode within device */
482: };
483: typedef struct VDTimingInfoRec VDTimingInfoRec;
484:
485: typedef VDTimingInfoRec *VDTimingInfoPtr;
486: struct VDDisplayConnectInfoRec {
487: unsigned short csDisplayType; /* INTEGER - (word) Type of display connected */
488: unsigned char csConnectTaggedType; /* BYTE - type of tagging */
489: unsigned char csConnectTaggedData; /* BYTE - tagging data */
490: unsigned long csConnectFlags; /* LONGINT - (long) tell us about the connection */
491: unsigned long csDisplayComponent; /* LONGINT - (long) if the card has a direct connection to the display, it returns the display component here (FUTURE) */
492: unsigned long csConnectReserved; /* LONGINT - (long) reserved */
493: };
494: typedef struct VDDisplayConnectInfoRec VDDisplayConnectInfoRec;
495:
496: typedef VDDisplayConnectInfoRec *VDDisplayConnectInfoPtr;
497: struct VDMultiConnectInfoRec {
498: unsigned long csDisplayCountOrNumber; /* For GetMultiConnect, returns count n of 1..n connections; otherwise, indicates the ith connection.*/
499: VDDisplayConnectInfoRec csConnectInfo; /* Standard VDDisplayConnectionInfo for connection i.*/
500: };
501: typedef struct VDMultiConnectInfoRec VDMultiConnectInfoRec;
502:
503: typedef VDMultiConnectInfoRec *VDMultiConnectInfoPtr;
504: /*
505: RawSenseCode
506: This abstract data type is not exactly abstract. Rather, it is merely enumerated constants
507: for the possible raw sense code values when 'standard' sense code hardware is implemented.
508:
509: For 'standard' sense code hardware, the raw sense is obtained as follows:
510: � Instruct the frame buffer controller NOT to actively drive any of the monitor sense lines
511: � Read the state of the monitor sense lines 2, 1, and 0. (2 is the MSB, 0 the LSB)
512:
513: IMPORTANT Note:
514: When the 'kTaggingInfoNonStandard' bit of 'csConnectFlags' is FALSE, then these constants
515: are valid 'csConnectTaggedType' values in 'VDDisplayConnectInfo'
516:
517: */
518: typedef unsigned char RawSenseCode;
519:
520: enum {
521: kRSCZero = 0,
522: kRSCOne = 1,
523: kRSCTwo = 2,
524: kRSCThree = 3,
525: kRSCFour = 4,
526: kRSCFive = 5,
527: kRSCSix = 6,
528: kRSCSeven = 7
529: };
530:
531: /*
532: ExtendedSenseCode
533: This abstract data type is not exactly abstract. Rather, it is merely enumerated constants
534: for the values which are possible when the extended sense algorithm is applied to hardware
535: which implements 'standard' sense code hardware.
536:
537: For 'standard' sense code hardware, the extended sense code algorithm is as follows:
538: (Note: as described here, sense line 'A' corresponds to '2', 'B' to '1', and 'C' to '0')
539: � Drive sense line 'A' low and read the values of 'B' and 'C'.
540: � Drive sense line 'B' low and read the values of 'A' and 'C'.
541: � Drive sense line 'C' low and read the values of 'A' and 'B'.
542:
543: In this way, a six-bit number of the form BC/AC/AB is generated.
544:
545: IMPORTANT Note:
546: When the 'kTaggingInfoNonStandard' bit of 'csConnectFlags' is FALSE, then these constants
547: are valid 'csConnectTaggedData' values in 'VDDisplayConnectInfo'
548:
549: */
550: typedef unsigned char ExtendedSenseCode;
551:
552: enum {
553: kESCZero21Inch = 0x00, /* 21" RGB */
554: kESCOnePortraitMono = 0x14, /* Portrait Monochrome */
555: kESCTwo12Inch = 0x21, /* 12" RGB */
556: kESCThree21InchRadius = 0x31, /* 21" RGB (Radius) */
557: kESCThree21InchMonoRadius = 0x34, /* 21" Monochrome (Radius) */
558: kESCThree21InchMono = 0x35, /* 21" Monochrome */
559: kESCFourNTSC = 0x0A, /* NTSC */
560: kESCFivePortrait = 0x1E, /* Portrait RGB */
561: kESCSixMSB1 = 0x03, /* MultiScan Band-1 (12" thru 1Six") */
562: kESCSixMSB2 = 0x0B, /* MultiScan Band-2 (13" thru 19") */
563: kESCSixMSB3 = 0x23, /* MultiScan Band-3 (13" thru 21") */
564: kESCSixStandard = 0x2B, /* 13"/14" RGB or 12" Monochrome */
565: kESCSevenPAL = 0x00, /* PAL */
566: kESCSevenNTSC = 0x14, /* NTSC */
567: kESCSevenVGA = 0x17, /* VGA */
568: kESCSeven16Inch = 0x2D, /* 16" RGB (GoldFish) */
569: kESCSevenPALAlternate = 0x30, /* PAL (Alternate) */
570: kESCSeven19Inch = 0x3A, /* Third-Party 19� */
571: kESCSevenNoDisplay = 0x3F /* No display connected */
572: };
573:
574: /*
575: DepthMode
576: This abstract data type is used to to reference RELATIVE pixel depths.
577: Its definition is largely derived from its past usage, analogous to 'xxxVidMode'
578:
579: Bits per pixel DOES NOT directly map to 'DepthMode' For example, on some
580: graphics hardware, 'kDepthMode1' may represent 1 BPP, whereas on other
581: hardware, 'kDepthMode1' may represent 8BPP.
582:
583: DepthMode IS considered to be ordinal, i.e., operations such as <, >, ==, etc.
584: behave as expected. The values of the constants which comprise the set are such
585: that 'kDepthMode4 < kDepthMode6' behaves as expected.
586: */
587: typedef unsigned short DepthMode;
588:
589: enum {
590: kDepthMode1 = 128,
591: kDepthMode2 = 129,
592: kDepthMode3 = 130,
593: kDepthMode4 = 131,
594: kDepthMode5 = 132,
595: kDepthMode6 = 133
596: };
597:
598:
599: enum {
600: kFirstDepthMode = 128, /* These constants are obsolete, and just included */
601: kSecondDepthMode = 129, /* for clients that have converted to the above */
602: kThirdDepthMode = 130, /* kDepthModeXXX constants. */
603: kFourthDepthMode = 131,
604: kFifthDepthMode = 132,
605: kSixthDepthMode = 133
606: };
607:
608: struct VDPageInfo {
609: short csMode; /*(word) mode within device*/
610: long csData; /*(long) data supplied by driver*/
611: short csPage; /*(word) page to switch in*/
612: Ptr csBaseAddr; /*(long) base address of page*/
613: };
614: typedef struct VDPageInfo VDPageInfo;
615:
616: typedef VDPageInfo *VDPgInfoPtr;
617: struct VDSizeInfo {
618: short csHSize; /*(word) desired/returned h size*/
619: short csHPos; /*(word) desired/returned h position*/
620: short csVSize; /*(word) desired/returned v size*/
621: short csVPos; /*(word) desired/returned v position*/
622: };
623: typedef struct VDSizeInfo VDSizeInfo;
624:
625: typedef VDSizeInfo *VDSzInfoPtr;
626: struct VDSettings {
627: short csParamCnt; /*(word) number of params*/
628: short csBrightMax; /*(word) max brightness*/
629: short csBrightDef; /*(word) default brightness*/
630: short csBrightVal; /*(word) current brightness*/
631: short csCntrstMax; /*(word) max contrast*/
632: short csCntrstDef; /*(word) default contrast*/
633: short csCntrstVal; /*(word) current contrast*/
634: short csTintMax; /*(word) max tint*/
635: short csTintDef; /*(word) default tint*/
636: short csTintVal; /*(word) current tint*/
637: short csHueMax; /*(word) max hue*/
638: short csHueDef; /*(word) default hue*/
639: short csHueVal; /*(word) current hue*/
640: short csHorizDef; /*(word) default horizontal*/
641: short csHorizVal; /*(word) current horizontal*/
642: short csHorizMax; /*(word) max horizontal*/
643: short csVertDef; /*(word) default vertical*/
644: short csVertVal; /*(word) current vertical*/
645: short csVertMax; /*(word) max vertical*/
646: };
647: typedef struct VDSettings VDSettings;
648:
649: typedef VDSettings *VDSettingsPtr;
650: struct VDDefMode {
651: UInt8 csID;
652: SInt8 filler;
653: };
654: typedef struct VDDefMode VDDefMode;
655:
656: typedef VDDefMode *VDDefModePtr;
657: struct VDSyncInfoRec {
658: UInt8 csMode;
659: UInt8 csFlags;
660: };
661: typedef struct VDSyncInfoRec VDSyncInfoRec;
662:
663: typedef VDSyncInfoRec *VDSyncInfoPtr;
664: typedef unsigned long DisplayModeID;
665: typedef unsigned long VideoDeviceType;
666: typedef unsigned long GammaTableID;
667: /* Constants for the GetNextResolution call */
668:
669: enum {
670: kDisplayModeIDCurrent = 0x00, /* Reference the Current DisplayModeID */
671: kDisplayModeIDInvalid = 0xFFFFFFFF, /* A bogus DisplayModeID in all cases */
672: kDisplayModeIDFindFirstResolution = 0xFFFFFFFE, /* Used in cscGetNextResolution to reset iterator */
673: kDisplayModeIDNoMoreResolutions = 0xFFFFFFFD /* Used in cscGetNextResolution to indicate End Of List */
674: };
675:
676: /* Constants for the GetGammaInfoList call */
677:
678: enum {
679: kGammaTableIDFindFirst = 0xFFFFFFFE, /* Get the first gamma table ID */
680: kGammaTableIDNoMoreTables = 0xFFFFFFFD, /* Used to indicate end of list */
681: kGammaTableIDSpecific = 0x00 /* Return the info for the given table id */
682: };
683:
684: /* Constants for GetMultiConnect call*/
685:
686: enum {
687: kGetConnectionCount = 0xFFFFFFFF, /* Used to get the number of possible connections in a �multi-headed� framebuffer environment.*/
688: kActivateConnection = (0 << kConnectionInactive), /* Used for activating a connection (csConnectFlags value).*/
689: kDeactivateConnection = (1 << kConnectionInactive) /* Used for deactivating a connection (csConnectFlags value.)*/
690: };
691:
692: struct VDResolutionInfoRec {
693: DisplayModeID csPreviousDisplayModeID; /* ID of the previous resolution in a chain */
694: DisplayModeID csDisplayModeID; /* ID of the next resolution */
695: unsigned long csHorizontalPixels; /* # of pixels in a horizontal line at the max depth */
696: unsigned long csVerticalLines; /* # of lines in a screen at the max depth */
697: Fixed csRefreshRate; /* Vertical Refresh Rate in Hz */
698: DepthMode csMaxDepthMode; /* 0x80-based number representing max bit depth */
699: unsigned long csResolutionFlags; /* Reserved - flag bits */
700: unsigned long csReserved; /* Reserved */
701: };
702: typedef struct VDResolutionInfoRec VDResolutionInfoRec;
703:
704: typedef VDResolutionInfoRec *VDResolutionInfoPtr;
705: struct VDVideoParametersInfoRec {
706: DisplayModeID csDisplayModeID; /* the ID of the resolution we want info on */
707: DepthMode csDepthMode; /* The bit depth we want the info on (0x80 based) */
708: VPBlockPtr csVPBlockPtr; /* Pointer to a video parameter block */
709: unsigned long csPageCount; /* Number of pages supported by the resolution */
710: VideoDeviceType csDeviceType; /* Device Type: Direct, Fixed or CLUT; */
711: UInt32 csDepthFlags; /* Flags */
712: };
713: typedef struct VDVideoParametersInfoRec VDVideoParametersInfoRec;
714:
715: typedef VDVideoParametersInfoRec *VDVideoParametersInfoPtr;
716: struct VDGammaInfoRec {
717: GammaTableID csLastGammaID; /* the ID of the previous gamma table */
718: GammaTableID csNextGammaID; /* the ID of the next gamma table */
719: Ptr csGammaPtr; /* Ptr to a gamma table data */
720: unsigned long csReserved; /* Reserved */
721: };
722: typedef struct VDGammaInfoRec VDGammaInfoRec;
723:
724: typedef VDGammaInfoRec *VDGammaInfoPtr;
725: struct VDGetGammaListRec {
726: GammaTableID csPreviousGammaTableID; /* ID of the previous gamma table */
727: GammaTableID csGammaTableID; /* ID of the gamma table following csPreviousDisplayModeID */
728: unsigned long csGammaTableSize; /* Size of the gamma table in bytes */
729: char * csGammaTableName; /* Gamma table name (c-string) */
730: };
731: typedef struct VDGetGammaListRec VDGetGammaListRec;
732:
733: typedef VDGetGammaListRec *VDGetGammaListPtr;
734: struct VDRetrieveGammaRec {
735: GammaTableID csGammaTableID; /* ID of gamma table to retrieve */
736: GammaTbl * csGammaTablePtr; /* Location to copy desired gamma to */
737: };
738: typedef struct VDRetrieveGammaRec VDRetrieveGammaRec;
739:
740: typedef VDRetrieveGammaRec *VDRetrieveGammaPtr;
741: struct VDSetHardwareCursorRec {
742: void * csCursorRef; /* reference to cursor data */
743: UInt32 csReserved1; /* reserved for future use */
744: UInt32 csReserved2; /* should be ignored */
745: };
746: typedef struct VDSetHardwareCursorRec VDSetHardwareCursorRec;
747:
748: typedef VDSetHardwareCursorRec *VDSetHardwareCursorPtr;
749: struct VDDrawHardwareCursorRec {
750: SInt32 csCursorX; /* x coordinate */
751: SInt32 csCursorY; /* y coordinate */
752: UInt32 csCursorVisible; /* true if cursor is must be visible */
753: UInt32 csReserved1; /* reserved for future use */
754: UInt32 csReserved2; /* should be ignored */
755: };
756: typedef struct VDDrawHardwareCursorRec VDDrawHardwareCursorRec;
757:
758: typedef VDDrawHardwareCursorRec *VDDrawHardwareCursorPtr;
759: struct VDSupportsHardwareCursorRec {
760: UInt32 csSupportsHardwareCursor;
761: /* true if hardware cursor is supported */
762: UInt32 csReserved1; /* reserved for future use */
763: UInt32 csReserved2; /* must be zero */
764: };
765: typedef struct VDSupportsHardwareCursorRec VDSupportsHardwareCursorRec;
766:
767: typedef VDSupportsHardwareCursorRec *VDSupportsHardwareCursorPtr;
768: struct VDHardwareCursorDrawStateRec {
769: SInt32 csCursorX; /* x coordinate */
770: SInt32 csCursorY; /* y coordinate */
771: UInt32 csCursorVisible; /* true if cursor is visible */
772: UInt32 csCursorSet; /* true if cursor successfully set by last set control call */
773: UInt32 csReserved1; /* reserved for future use */
774: UInt32 csReserved2; /* must be zero */
775: };
776: typedef struct VDHardwareCursorDrawStateRec VDHardwareCursorDrawStateRec;
777:
778: typedef VDHardwareCursorDrawStateRec *VDHardwareCursorDrawStatePtr;
779: struct VDConvolutionInfoRec {
780: DisplayModeID csDisplayModeID; /* the ID of the resolution we want info on */
781: DepthMode csDepthMode; /* The bit depth we want the info on (0x80 based) */
782: unsigned long csPage;
783: UInt32 csFlags;
784: UInt32 csReserved;
785: };
786: typedef struct VDConvolutionInfoRec VDConvolutionInfoRec;
787:
788: typedef VDConvolutionInfoRec *VDConvolutionInfoPtr;
789: struct VDPowerStateRec {
790: unsigned long powerState;
791: unsigned long powerFlags;
792:
793: unsigned long powerReserved1;
794: unsigned long powerReserved2;
795: };
796: typedef struct VDPowerStateRec VDPowerStateRec;
797:
798: typedef VDPowerStateRec *VDPowerStatePtr;
799: /*
800: Private Data to video drivers.
801:
802: In versions of MacOS with multiple address spaces (System 8), the OS
803: must know the extent of parameters in order to move them between the caller
804: and driver. The old private-selector model for video drivers does not have
805: this information so:
806:
807: For post-7.x Systems private calls should be implemented using the cscPrivateCall
808: */
809: struct VDPrivateSelectorDataRec {
810: LogicalAddress privateParameters; /* Caller's parameters*/
811: ByteCount privateParametersSize; /* Size of data sent from caller to driver*/
812: LogicalAddress privateResults; /* Caller's return area. Can be nil, or same as privateParameters.*/
813: ByteCount privateResultsSize; /* Size of data driver returns to caller. Can be nil, or same as privateParametersSize.*/
814: };
815: typedef struct VDPrivateSelectorDataRec VDPrivateSelectorDataRec;
816:
817: struct VDPrivateSelectorRec {
818: UInt32 reserved; /* Reserved (set to 0). */
819: VDPrivateSelectorDataRec data[1];
820: };
821: typedef struct VDPrivateSelectorRec VDPrivateSelectorRec;
822:
823: struct VDDDCBlockRec {
824: UInt32 ddcBlockNumber; /* Input -- DDC EDID (Extended Display Identification Data) number (1-based) */
825: ResType ddcBlockType; /* Input -- DDC block type (EDID/VDIF) */
826: UInt32 ddcFlags; /* Input -- DDC Flags*/
827: UInt32 ddcReserved; /* Reserved */
828: Byte ddcBlockData[128]; /* Output -- DDC EDID/VDIF data (kDDCBlockSize) */
829: };
830: typedef struct VDDDCBlockRec VDDDCBlockRec;
831:
832: typedef VDDDCBlockRec *VDDDCBlockPtr;
833: typedef UInt32 VDClutBehavior;
834: typedef VDClutBehavior *VDClutBehaviorPtr;
835:
836: enum {
837: kSetClutAtSetEntries = 0, /* SetEntries behavior is to update clut during SetEntries call*/
838: kSetClutAtVBL = 1 /* SetEntries behavior is to upate clut at next vbl*/
839: };
840:
841:
842: #pragma options align=reset
843:
844: #pragma import off
845:
846: #ifdef __cplusplus
847: }
848: #endif
849:
850: #endif /* __IOMACOSVIDEO__ */
851:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.