|
|
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.