Chameleon

Chameleon Svn Source Tree

Root/branches/ErmaC/Modules/i386/include/IOKit/graphics/IOGraphicsTypes.h

1/*
2 * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
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.
11 *
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
18 * under the License.
19 *
20 * @APPLE_LICENSE_HEADER_END@
21 */
22
23#ifndef _IOKIT_IOGRAPHICSTYPES_H
24#define _IOKIT_IOGRAPHICSTYPES_H
25
26
27#include <IOKit/IOTypes.h>
28#include <IOKit/IOKitKeys.h>
29
30#ifdef __cplusplus
31extern "C" {
32#endif
33
34#define IOGRAPHICSTYPES_REV 24
35
36typedef SInt32 IOIndex;
37typedef UInt32 IOSelect;
38typedef UInt32 IOFixed1616;
39typedef UInt32 IODisplayVendorID;
40typedef UInt32 IODisplayProductID;
41
42typedef SInt32 IODisplayModeID;
43enum {
44 // This is the ID given to a programmable timing used at boot time
45 kIODisplayModeIDBootProgrammable = (IODisplayModeID)0xFFFFFFFB,
46 // Lowest (unsigned) DisplayModeID reserved by Apple
47 kIODisplayModeIDReservedBase = (IODisplayModeID)0x80000000
48};
49
50enum {
51 kIOMaxPixelBits = 64
52};
53typedef char IOPixelEncoding[ kIOMaxPixelBits ];
54
55// Common Apple pixel formats
56
57#define IO1BitIndexedPixels "P"
58#define IO2BitIndexedPixels "PP"
59#define IO4BitIndexedPixels "PPPP"
60#define IO8BitIndexedPixels "PPPPPPPP"
61#define IO16BitDirectPixels "-RRRRRGGGGGBBBBB"
62#define IO32BitDirectPixels "--------RRRRRRRRGGGGGGGGBBBBBBBB"
63
64#define kIO30BitDirectPixels "--RRRRRRRRRRGGGGGGGGGGBBBBBBBBBB"
65#define kIO64BitDirectPixels "-16R16G16B16"
66
67#define kIO16BitFloatPixels "-16FR16FG16FB16"
68#define kIO32BitFloatPixels "-32FR32FG32FB32"
69
70// other possible pixel formats
71
72#define IOYUV422Pixels "Y4U2V2"
73#define IO8BitOverlayPixels "O8"
74// page flipping
75#define IOPagedPixels "Page1"
76
77#define IO_SampleTypeAlpha 'A'
78#define IO_SampleTypeSkip '-'
79
80// Info about a pixel format
81enum {
82 kIOCLUTPixels = 0,
83 kIOFixedCLUTPixels = 1,
84 kIORGBDirectPixels = 2,
85 kIOMonoDirectPixels = 3,
86 kIOMonoInverseDirectPixels = 4,
87 kIORGBSignedDirectPixels = 5,
88 kIORGBSignedFloatingPointPixels = 6
89};
90
91/*!
92 * @struct IOPixelInformation
93 * @abstract A structure defining the format of a framebuffer.
94 * @discussion This structure is used by IOFramebuffer to define the format of the pixels.
95 * @field bytesPerRow The number of bytes per row.
96 * @field bytesPerPlane Not used.
97 * @field bitsPerPixel The number of bits per pixel, including unused bits and alpha.
98 * @field pixelType One of kIOCLUTPixels (indexed pixels with changeable CLUT), kIORGBDirectPixels (direct pixels).
99 * @field componentCount One for indexed pixels, three for direct pixel formats.
100 * @field bitsPerComponent Number of bits per component in each pixel.
101 * @field componentMasks Mask of the bits valid for each component of the pixel - in R, G, B order for direct pixels.
102 * @field pixelFormat String description of the pixel format - IO32BitDirectPixels, IO16BitDirectPixels etc.
103 * @field flags None defined - set to zero.
104 * @field activeWidth Number of pixels visible per row.
105 * @field activeHeight Number of visible pixel rows.
106 * @field reserved Set to zero.
107 */
108
109struct IOPixelInformation {
110 UInt32 bytesPerRow;
111 UInt32 bytesPerPlane;
112 UInt32 bitsPerPixel;
113 UInt32 pixelType;
114 UInt32 componentCount;
115 UInt32 bitsPerComponent;
116 UInt32 componentMasks[ 8 * 2 ];
117 IOPixelEncoding pixelFormat;
118 UInt32 flags;
119 UInt32 activeWidth;
120 UInt32 activeHeight;
121 UInt32 reserved[ 2 ];
122};
123typedef struct IOPixelInformation IOPixelInformation;
124
125// ID for industry standard display timings
126typedef UInt32 IOAppleTimingID;
127
128/*!
129 * @struct IODisplayModeInformation
130 * @abstract A structure defining the format of a framebuffer.
131 * @discussion This structure is used by IOFramebuffer to define the format of the pixels.
132 * @field nominalWidth Number of pixels visible per row.
133 * @field nominalHeight Number of visible pixel rows.
134 * @field refreshRate Refresh rate in fixed point 16.16.
135 * @field maxDepthIndex Highest depth index available in this display mode.
136 * @field flags Flags for the mode, including: <br>
137 * kDisplayModeInterlacedFlag mode is interlaced. <br>
138 * kDisplayModeSimulscanFlag mode is available on multiple display connections. <br>
139 * kDisplayModeNotPresetFlag mode is not a factory preset for the display (geometry may need correction). <br>
140 * kDisplayModeStretchedFlag mode is stretched/distorted to match the display aspect ratio. <br>
141 * @field reserved Set to zero.
142 */
143
144struct IODisplayModeInformation {
145 UInt32 nominalWidth;
146 UInt32 nominalHeight;
147 IOFixed1616 refreshRate;
148 IOIndex maxDepthIndex;
149 UInt32 flags;
150 UInt32 reserved[ 4 ];
151};
152typedef struct IODisplayModeInformation IODisplayModeInformation;
153
154// flags
155enum {
156 kDisplayModeSafetyFlags = 0x00000007,
157
158 kDisplayModeAlwaysShowFlag = 0x00000008,
159 kDisplayModeNeverShowFlag = 0x00000080,
160 kDisplayModeNotResizeFlag = 0x00000010,
161 kDisplayModeRequiresPanFlag = 0x00000020,
162
163 kDisplayModeInterlacedFlag = 0x00000040,
164
165 kDisplayModeSimulscanFlag = 0x00000100,
166 kDisplayModeBuiltInFlag = 0x00000400,
167 kDisplayModeNotPresetFlag = 0x00000200,
168 kDisplayModeStretchedFlag = 0x00000800,
169 kDisplayModeNotGraphicsQualityFlag = 0x00001000,
170 kDisplayModeValidateAgainstDisplay = 0x00002000,
171 kDisplayModeTelevisionFlag = 0x00100000,
172 kDisplayModeValidForMirroringFlag = 0x00200000
173};
174enum {
175 kDisplayModeValidFlag = 0x00000001,
176 kDisplayModeSafeFlag = 0x00000002,
177 kDisplayModeDefaultFlag = 0x00000004
178};
179
180#ifndef KERNEL
181// Framebuffer info - obsolete
182
183struct IOFramebufferInformation {
184 IOPhysicalAddress baseAddress;
185 UInt32 activeWidth;
186 UInt32 activeHeight;
187 IOByteCount bytesPerRow;
188 IOByteCount bytesPerPlane;
189 UInt32 bitsPerPixel;
190 UInt32 pixelType;
191 UInt32 flags;
192 UInt32 reserved[ 4 ];
193};
194typedef struct IOFramebufferInformation IOFramebufferInformation;
195#endif
196
197// flags
198enum {
199 kFramebufferSupportsCopybackCache = 0x00010000,
200 kFramebufferSupportsWritethruCache = 0x00020000,
201 kFramebufferSupportsGammaCorrection = 0x00040000,
202 kFramebufferDisableAltivecAccess = 0x00080000
203};
204
205// Aperture is an index into supported pixel formats for a mode & depth
206typedef IOIndex IOPixelAperture;
207enum {
208 kIOFBSystemAperture = 0
209};
210
211//// CLUTs
212
213typedef UInt16 IOColorComponent;
214
215/*!
216 * @struct IOColorEntry
217 * @abstract A structure defining one entry of a color lookup table.
218 * @discussion This structure is used by IOFramebuffer to define an entry of a color lookup table.
219 * @field index Number of pixels visible per row.
220 * @field red Value of red component 0-65535.
221 * @field green Value of green component 0-65535.
222 * @field blue Value of blue component 0-65535.
223 */
224
225struct IOColorEntry {
226 UInt16 index;
227 IOColorComponent red;
228 IOColorComponent green;
229 IOColorComponent blue;
230};
231typedef struct IOColorEntry IOColorEntry;
232
233// options (masks)
234enum {
235 kSetCLUTByValue = 0x00000001, // else at index
236 kSetCLUTImmediately = 0x00000002, // else at VBL
237 kSetCLUTWithLuminance = 0x00000004 // else RGB
238};
239
240//// Controller attributes
241
242enum {
243 kIOPowerStateAttribute = 'pwrs',
244 kIOPowerAttribute = 'powr',
245 kIODriverPowerAttribute = 'dpow',
246 kIOHardwareCursorAttribute = 'crsr',
247
248 kIOMirrorAttribute = 'mirr',
249 kIOMirrorDefaultAttribute = 'mrdf',
250
251 kIOCapturedAttribute = 'capd',
252
253 kIOCursorControlAttribute = 'crsc',
254
255 kIOSystemPowerAttribute = 'spwr',
256 kIOVRAMSaveAttribute = 'vrsv',
257 kIODeferCLUTSetAttribute = 'vclt',
258
259 kIOClamshellStateAttribute = 'clam'
260};
261
262// values for kIOMirrorAttribute
263enum {
264 kIOMirrorIsPrimary = 0x80000000,
265 kIOMirrorHWClipped = 0x40000000
266};
267
268// values for kIOMirrorDefaultAttribute
269enum {
270 kIOMirrorDefault = 0x00000001,
271 kIOMirrorForced = 0x00000002
272};
273
274//// Display mode timing information
275
276struct IODetailedTimingInformationV1 {
277 // from EDID defn
278 UInt32 pixelClock; // Hertz
279 UInt32 horizontalActive; // pixels
280 UInt32 horizontalBlanking; // pixels
281 UInt32 horizontalBorder; // pixels
282 UInt32 horizontalSyncOffset; // pixels
283 UInt32 horizontalSyncWidth; // pixels
284 UInt32 verticalActive; // lines
285 UInt32 verticalBlanking; // lines
286 UInt32 verticalBorder; // lines
287 UInt32 verticalSyncOffset; // lines
288 UInt32 verticalSyncWidth; // lines
289};
290typedef struct IODetailedTimingInformationV1 IODetailedTimingInformationV1;
291
292/*!
293 * @struct IODetailedTimingInformationV2
294 * @abstract A structure defining the detailed timing information of a display mode.
295 * @discussion This structure is used by IOFramebuffer to define detailed timing information for a display mode. The VESA EDID document has more information.
296 * @field __reservedA Set to zero.
297 * @field horizontalScaledInset If the mode is scaled, sets the number of active pixels to remove the left and right edges in order to display an underscanned image.
298 * @field verticalScaledInset If the mode is scaled, sets the number of active lines to remove the top and bottom edges in order to display an underscanned image.
299 * @field scalerFlags If the mode is scaled,
300 * kIOScaleStretchToFit may be set to allow stretching.
301 * kIOScaleRotateFlags is mask which may have the value given by kIOScaleRotate90, kIOScaleRotate180, kIOScaleRotate270 to display a rotated framebuffer.
302 * @field horizontalScaled If the mode is scaled, sets the size of the image before scaling or rotation.
303 * @field verticalScaled If the mode is scaled, sets the size of the image before scaling or rotation.
304 * @field signalConfig
305 * kIOAnalogSetupExpected set if display expects a blank-to-black setup or pedestal. See VESA signal standards. <br>
306 * kIOInterlacedCEATiming set for a CEA style interlaced timing:<br>
307 * Field 1 vertical blanking = half specified vertical blanking lines. <br>
308 * Field 2 vertical blanking = (half vertical blanking lines) + 1 line. <br>
309 * Field 1 vertical offset = half specified vertical sync offset. <br>
310 * Field 2 vertical offset = (half specified vertical sync offset) + 0.5 lines. <br>
311 * @field signalLevels One of:<br>
312 * kIOAnalogSignalLevel_0700_0300 0.700 - 0.300 V p-p.<br>
313 * kIOAnalogSignalLevel_0714_0286 0.714 - 0.286 V p-p.<br>
314 * kIOAnalogSignalLevel_1000_0400 1.000 - 0.400 V p-p.<br>
315 * kIOAnalogSignalLevel_0700_0000 0.700 - 0.000 V p-p.<br>
316 * @field pixelClock Pixel clock frequency in Hz.
317 * @field minPixelClock Minimum pixel clock frequency in Hz, with error.
318 * @field maxPixelClock Maximum pixel clock frequency in Hz, with error.
319 * @field horizontalActive Pixel clocks per line.
320 * @field horizontalBlanking Blanking clocks per line.
321 * @field horizontalSyncOffset First clock of horizontal sync.
322 * @field horizontalSyncPulseWidth Width of horizontal sync.
323 * @field verticalActive Number of lines per frame.
324 * @field verticalBlanking Blanking lines per frame.
325 * @field verticalSyncOffset First line of vertical sync.
326 * @field verticalSyncPulseWidth Height of vertical sync.
327 * @field horizontalBorderLeft Number of pixels in left horizontal border.
328 * @field horizontalBorderRight Number of pixels in right horizontal border.
329 * @field verticalBorderTop Number of lines in top vertical border.
330 * @field verticalBorderBottom Number of lines in bottom vertical border.
331 * @field horizontalSyncConfig kIOSyncPositivePolarity for positive polarity horizontal sync (0 for negative).
332 * @field horizontalSyncLevel Zero.
333 * @field verticalSyncConfig kIOSyncPositivePolarity for positive polarity vertical sync (0 for negative).
334 * @field verticalSyncLevel Zero.
335 * @field numLinks number of links to be used by a dual link timing, if zero, assume one link.
336 * @field __reservedB Reserved set to zero.
337 */
338
339struct IODetailedTimingInformationV2 {
340
341 UInt32 __reservedA[3]; // Init to 0
342 UInt32 horizontalScaledInset; // pixels
343 UInt32 verticalScaledInset; // lines
344
345 UInt32 scalerFlags;
346 UInt32 horizontalScaled;
347 UInt32 verticalScaled;
348
349 UInt32 signalConfig;
350 UInt32 signalLevels;
351
352 UInt64 pixelClock; // Hz
353
354 UInt64 minPixelClock; // Hz - With error what is slowest actual clock
355 UInt64 maxPixelClock; // Hz - With error what is fasted actual clock
356
357 UInt32 horizontalActive; // pixels
358 UInt32 horizontalBlanking; // pixels
359 UInt32 horizontalSyncOffset; // pixels
360 UInt32 horizontalSyncPulseWidth; // pixels
361
362 UInt32 verticalActive; // lines
363 UInt32 verticalBlanking; // lines
364 UInt32 verticalSyncOffset; // lines
365 UInt32 verticalSyncPulseWidth; // lines
366
367 UInt32 horizontalBorderLeft; // pixels
368 UInt32 horizontalBorderRight; // pixels
369 UInt32 verticalBorderTop; // lines
370 UInt32 verticalBorderBottom; // lines
371
372 UInt32 horizontalSyncConfig;
373 UInt32 horizontalSyncLevel; // Future use (init to 0)
374 UInt32 verticalSyncConfig;
375 UInt32 verticalSyncLevel; // Future use (init to 0)
376 UInt32 numLinks;
377
378 UInt32 __reservedB[7]; // Init to 0
379};
380typedef struct IODetailedTimingInformationV2 IODetailedTimingInformationV2;
381typedef struct IODetailedTimingInformationV2 IODetailedTimingInformation;
382
383struct IOTimingInformation {
384 IOAppleTimingID appleTimingID; // kIOTimingIDXXX const
385 UInt32 flags;
386 union {
387 IODetailedTimingInformationV1 v1;
388 IODetailedTimingInformationV2 v2;
389 } detailedInfo;
390};
391typedef struct IOTimingInformation IOTimingInformation;
392
393enum {
394 // IOTimingInformation flags
395 kIODetailedTimingValid = 0x80000000,
396 kIOScalingInfoValid = 0x40000000
397};
398
399enum {
400 // scalerFlags
401 kIOScaleStretchToFit = 0x00000001,
402
403 kIOScaleRotateFlags = 0x000000f0,
404
405 kIOScaleSwapAxes = 0x00000010,
406 kIOScaleInvertX = 0x00000020,
407 kIOScaleInvertY = 0x00000040,
408
409 kIOScaleRotate0 = 0x00000000,
410 kIOScaleRotate90 = kIOScaleSwapAxes | kIOScaleInvertX,
411 kIOScaleRotate180 = kIOScaleInvertX | kIOScaleInvertY,
412 kIOScaleRotate270 = kIOScaleSwapAxes | kIOScaleInvertY
413};
414
415
416#pragma pack(push, 4)
417struct IOFBDisplayModeDescription {
418 IODisplayModeInformation info;
419 IOTimingInformation timingInfo;
420};
421typedef struct IOFBDisplayModeDescription IOFBDisplayModeDescription;
422#pragma pack(pop)
423
424/*!
425 * @struct IODisplayTimingRange
426 * @abstract A structure defining the limits and attributes of a display or framebuffer.
427 * @discussion This structure is used to define the limits for modes programmed as detailed timings by the OS. The VESA EDID is useful background information for many of these fields. A data property with this structure under the key kIOFBTimingRangeKey in a framebuffer will allow the OS to program detailed timings that fall within its range.
428 * @field __reservedA Set to zero.
429 * @field version Set to zero.
430 * @field __reservedB Set to zero.
431 * @field minPixelClock minimum pixel clock frequency in range, in Hz.
432 * @field minPixelClock maximum pixel clock frequency in range, in Hz.
433 * @field maxPixelError largest variation between specified and actual pixel clock frequency, in Hz.
434 * @field supportedSyncFlags mask of supported sync attributes. The following are defined:<br>
435 * kIORangeSupportsSeparateSyncs - digital separate syncs.<br>
436 * kIORangeSupportsSyncOnGreen - sync on green.<br>
437 * kIORangeSupportsCompositeSync - composite sync.<br>
438 * kIORangeSupportsVSyncSerration - vertical sync has serration and equalization pulses.<br>
439 * @field supportedSignalLevels mask of possible signal levels. The following are defined:<br>
440 * kIORangeSupportsSignal_0700_0300 0.700 - 0.300 V p-p.<br>
441 * kIORangeSupportsSignal_0714_0286 0.714 - 0.286 V p-p.<br>
442 * kIORangeSupportsSignal_1000_0400 1.000 - 0.400 V p-p.<br>
443 * kIORangeSupportsSignal_0700_0000 0.700 - 0.000 V p-p.<br>
444 * @field supportedSignalConfigs mask of possible signal configurations. The following are defined:<br>
445 * kIORangeSupportsInterlacedCEATiming Supports CEA style interlaced timing:<br>
446 * Field 1 vertical blanking = specified vertical blanking lines. <br>
447 * Field 2 vertical blanking = vertical blanking lines + 1 line. <br>
448 * Field 1 vertical offset = specified vertical sync offset. <br>
449 * Field 2 vertical offset = specified vertical sync offset + 0.5 lines. <br>
450 * kIORangeSupportsInterlacedCEATimingWithConfirm Supports CEA style interlaced timing, but require a confirm.
451 * @field minFrameRate minimum frame rate (vertical refresh frequency) in range, in Hz.
452 * @field maxFrameRate maximum frame rate (vertical refresh frequency) in range, in Hz.
453 * @field minLineRate minimum line rate (horizontal refresh frequency) in range, in Hz.
454 * @field maxLineRate maximum line rate (horizontal refresh frequency) in range, in Hz.
455 * @field maxHorizontalTotal maximum clocks in horizontal line (active + blanking).
456 * @field maxVerticalTotal maximum lines in vertical frame (active + blanking).
457 * @field __reservedD Set to zero.
458 * @field charSizeHorizontalActive horizontalActive must be a multiple of charSizeHorizontalActive.
459 * @field charSizeHorizontalBlanking horizontalBlanking must be a multiple of charSizeHorizontalBlanking.
460 * @field charSizeHorizontalSyncOffset horizontalSyncOffset must be a multiple of charSizeHorizontalSyncOffset.
461 * @field charSizeHorizontalSyncPulse horizontalSyncPulse must be a multiple of charSizeHorizontalSyncPulse.
462 * @field charSizeVerticalActive verticalActive must be a multiple of charSizeVerticalActive.
463 * @field charSizeVerticalBlanking verticalBlanking must be a multiple of charSizeVerticalBlanking.
464 * @field charSizeVerticalSyncOffset verticalSyncOffset must be a multiple of charSizeVerticalSyncOffset.
465 * @field charSizeVerticalSyncPulse verticalSyncPulse must be a multiple of charSizeVerticalSyncPulse.
466 * @field charSizeHorizontalBorderLeft horizontalBorderLeft must be a multiple of charSizeHorizontalBorderLeft.
467 * @field charSizeHorizontalBorderRight horizontalBorderRight must be a multiple of charSizeHorizontalBorderRight.
468 * @field charSizeVerticalBorderTop verticalBorderTop must be a multiple of charSizeVerticalBorderTop.
469 * @field charSizeVerticalBorderBottom verticalBorderBottom must be a multiple of charSizeVerticalBorderBottom.
470 * @field charSizeHorizontalTotal (horizontalActive + horizontalBlanking) must be a multiple of charSizeHorizontalTotal.
471 * @field charSizeVerticalTotal (verticalActive + verticalBlanking) must be a multiple of charSizeVerticalTotal.
472 * @field __reservedE Set to zero.
473 * @field minHorizontalActiveClocks minimum value of horizontalActive.
474 * @field maxHorizontalActiveClocks maximum value of horizontalActive.
475 * @field minHorizontalBlankingClocks minimum value of horizontalBlanking.
476 * @field maxHorizontalBlankingClocks maximum value of horizontalBlanking.
477 * @field minHorizontalSyncOffsetClocks minimum value of horizontalSyncOffset.
478 * @field maxHorizontalSyncOffsetClocks maximum value of horizontalSyncOffset.
479 * @field minHorizontalPulseWidthClocks minimum value of horizontalPulseWidth.
480 * @field maxHorizontalPulseWidthClocks maximum value of horizontalPulseWidth.
481 * @field minVerticalActiveClocks minimum value of verticalActive.
482 * @field maxVerticalActiveClocks maximum value of verticalActive.
483 * @field minVerticalBlankingClocks minimum value of verticalBlanking.
484 * @field maxVerticalBlankingClocks maximum value of verticalBlanking.
485 * @field minVerticalSyncOffsetClocks minimum value of verticalSyncOffset.
486 * @field maxVerticalSyncOffsetClocks maximum value of verticalSyncOffset.
487 * @field minVerticalPulseWidthClocks minimum value of verticalPulseWidth.
488 * @field maxVerticalPulseWidthClocks maximum value of verticalPulseWidth.
489 * @field minHorizontalBorderLeft minimum value of horizontalBorderLeft.
490 * @field maxHorizontalBorderLeft maximum value of horizontalBorderLeft.
491 * @field minHorizontalBorderRight minimum value of horizontalBorderRight.
492 * @field maxHorizontalBorderRight maximum value of horizontalBorderRight.
493 * @field minVerticalBorderTop minimum value of verticalBorderTop.
494 * @field maxVerticalBorderTop maximum value of verticalBorderTop.
495 * @field minVerticalBorderBottom minimum value of verticalBorderBottom.
496 * @field maxVerticalBorderBottom maximum value of verticalBorderBottom.
497 * @field maxNumLinks number of links supported, if zero, 1 link is assumed.
498 * @field minLink0PixelClock minimum pixel clock for link 0 (kHz).
499 * @field maxLink0PixelClock maximum pixel clock for link 0 (kHz).
500 * @field minLink1PixelClock minimum pixel clock for link 1 (kHz).
501 * @field maxLink1PixelClock maximum pixel clock for link 1 (kHz).
502 * @field __reservedF Set to zero.
503 */
504
505struct IODisplayTimingRange
506{
507 UInt32 __reservedA[2]; // Init to 0
508 UInt32 version; // Init to 0
509 UInt32 __reservedB[5]; // Init to 0
510
511 UInt64 minPixelClock; // Min dot clock in Hz
512 UInt64 maxPixelClock; // Max dot clock in Hz
513
514 UInt32 maxPixelError; // Max dot clock error
515 UInt32 supportedSyncFlags;
516 UInt32 supportedSignalLevels;
517 UInt32 supportedSignalConfigs;
518
519 UInt32 minFrameRate; // Hz
520 UInt32 maxFrameRate; // Hz
521 UInt32 minLineRate; // Hz
522 UInt32 maxLineRate; // Hz
523
524 UInt32 maxHorizontalTotal; // Clocks - Maximum total (active + blanking)
525 UInt32 maxVerticalTotal; // Clocks - Maximum total (active + blanking)
526 UInt32 __reservedD[2]; // Init to 0
527
528 UInt8 charSizeHorizontalActive;
529 UInt8 charSizeHorizontalBlanking;
530 UInt8 charSizeHorizontalSyncOffset;
531 UInt8 charSizeHorizontalSyncPulse;
532
533 UInt8 charSizeVerticalActive;
534 UInt8 charSizeVerticalBlanking;
535 UInt8 charSizeVerticalSyncOffset;
536 UInt8 charSizeVerticalSyncPulse;
537
538 UInt8 charSizeHorizontalBorderLeft;
539 UInt8 charSizeHorizontalBorderRight;
540 UInt8 charSizeVerticalBorderTop;
541 UInt8 charSizeVerticalBorderBottom;
542
543 UInt8 charSizeHorizontalTotal; // Character size for active + blanking
544 UInt8 charSizeVerticalTotal; // Character size for active + blanking
545 UInt16 __reservedE; // Reserved (Init to 0)
546
547 UInt32 minHorizontalActiveClocks;
548 UInt32 maxHorizontalActiveClocks;
549 UInt32 minHorizontalBlankingClocks;
550 UInt32 maxHorizontalBlankingClocks;
551
552 UInt32 minHorizontalSyncOffsetClocks;
553 UInt32 maxHorizontalSyncOffsetClocks;
554 UInt32 minHorizontalPulseWidthClocks;
555 UInt32 maxHorizontalPulseWidthClocks;
556
557 UInt32 minVerticalActiveClocks;
558 UInt32 maxVerticalActiveClocks;
559 UInt32 minVerticalBlankingClocks;
560 UInt32 maxVerticalBlankingClocks;
561
562 UInt32 minVerticalSyncOffsetClocks;
563 UInt32 maxVerticalSyncOffsetClocks;
564 UInt32 minVerticalPulseWidthClocks;
565 UInt32 maxVerticalPulseWidthClocks;
566
567 UInt32 minHorizontalBorderLeft;
568 UInt32 maxHorizontalBorderLeft;
569 UInt32 minHorizontalBorderRight;
570 UInt32 maxHorizontalBorderRight;
571
572 UInt32 minVerticalBorderTop;
573 UInt32 maxVerticalBorderTop;
574 UInt32 minVerticalBorderBottom;
575 UInt32 maxVerticalBorderBottom;
576 UInt32 maxNumLinks; // number of links, if zero, assume link 1
577 UInt32 minLink0PixelClock; // min pixel clock for link 0 (kHz)
578 UInt32 maxLink0PixelClock; // max pixel clock for link 0 (kHz)
579 UInt32 minLink1PixelClock; // min pixel clock for link 1 (kHz)
580 UInt32 maxLink1PixelClock; // max pixel clock for link 1 (kHz)
581
582 UInt32 __reservedF[3]; // Init to 0
583};
584typedef struct IODisplayTimingRange IODisplayTimingRange;
585
586enum {
587 // supportedSignalLevels
588 kIORangeSupportsSignal_0700_0300 = 0x00000001,
589 kIORangeSupportsSignal_0714_0286 = 0x00000002,
590 kIORangeSupportsSignal_1000_0400 = 0x00000004,
591 kIORangeSupportsSignal_0700_0000 = 0x00000008
592};
593enum {
594 // supportedSyncFlags
595 kIORangeSupportsSeparateSyncs = 0x00000001,
596 kIORangeSupportsSyncOnGreen = 0x00000002,
597 kIORangeSupportsCompositeSync = 0x00000004,
598 kIORangeSupportsVSyncSerration = 0x00000008
599};
600enum {
601 // supportedSignalConfigs
602 kIORangeSupportsInterlacedCEATiming = 0x00000004,
603 kIORangeSupportsInterlacedCEATimingWithConfirm = 0x00000008
604};
605
606enum {
607 // signalConfig
608 kIODigitalSignal = 0x00000001,
609 kIOAnalogSetupExpected = 0x00000002,
610 kIOInterlacedCEATiming = 0x00000004,
611 kIONTSCTiming = 0x00000008,
612 kIOPALTiming = 0x00000010
613};
614
615enum {
616 // signalLevels for analog
617 kIOAnalogSignalLevel_0700_0300 = 0,
618 kIOAnalogSignalLevel_0714_0286 = 1,
619 kIOAnalogSignalLevel_1000_0400 = 2,
620 kIOAnalogSignalLevel_0700_0000 = 3
621};
622
623enum {
624 // horizontalSyncConfig and verticalSyncConfig
625 kIOSyncPositivePolarity = 0x00000001
626};
627
628/*!
629 * @struct IODisplayScalerInformation
630 * @abstract A structure defining the scaling capabilities of a framebuffer.
631 * @discussion This structure is used to define the limits for modes programmed as detailed timings by the OS. A data property with this structure under the key kIOFBScalerInfoKey in a framebuffer will allow the OS to program detailed timings that are scaled to a displays native resolution.
632 * @field __reservedA Set to zero.
633 * @field version Set to zero.
634 * @field __reservedB Set to zero.
635 * @field scalerFeatures Mask of scaling features. The following are defined:<br>
636 * kIOScaleStretchOnly If set the framebuffer can only provide stretched scaling with non-square pixels, without borders.<br>
637 * kIOScaleCanUpSamplePixels If set framebuffer can scale up from a smaller number of source pixels to a larger native timing (eg. 640x480 pixels on a 1600x1200 timing).<br>
638 * kIOScaleCanDownSamplePixels If set framebuffer can scale down from a larger number of source pixels to a smaller native timing (eg. 1600x1200 pixels on a 640x480 timing).<br>
639 * kIOScaleCanScaleInterlaced If set framebuffer can scale an interlaced detailed timing.<br>
640 * kIOScaleCanSupportInset If set framebuffer can support scaled modes with non-zero horizontalScaledInset, verticalScaledInset fields.<br>
641 * kIOScaleCanRotate If set framebuffer can support some of the flags in the kIOScaleRotateFlags mask.<br>
642 * kIOScaleCanBorderInsetOnly If set framebuffer can support scaled modes with non-zero horizontalScaledInset, verticalScaledInset fields, but requires the active pixels to be equal in size to the inset area, ie. can do insets with a border versus scaling an image.<br>
643 * @field maxHorizontalPixels Maximum number of horizontal source pixels (horizontalScaled).<br>
644 * @field maxVerticalPixels Maximum number of vertical source pixels (verticalScaled).<br>
645 * @field __reservedC Set to zero.
646 */
647
648struct IODisplayScalerInformation {
649 UInt32 __reservedA[1]; // Init to 0
650 UInt32 version; // Init to 0
651 UInt32 __reservedB[2]; // Init to 0
652
653 IOOptionBits scalerFeatures;
654 UInt32 maxHorizontalPixels;
655 UInt32 maxVerticalPixels;
656 UInt32 __reservedC[5]; // Init to 0
657};
658typedef struct IODisplayScalerInformation IODisplayScalerInformation;
659
660enum {
661 /* scalerFeatures */
662 kIOScaleStretchOnly = 0x00000001,
663 kIOScaleCanUpSamplePixels = 0x00000002,
664 kIOScaleCanDownSamplePixels = 0x00000004,
665 kIOScaleCanScaleInterlaced = 0x00000008,
666 kIOScaleCanSupportInset = 0x00000010,
667 kIOScaleCanRotate = 0x00000020,
668 kIOScaleCanBorderInsetOnly = 0x00000040
669};
670
671//// Connections
672
673enum {
674 kOrConnections = 0xffffffe,
675 kAndConnections = 0xffffffd
676};
677
678enum {
679 kConnectionFlags = 'flgs',
680 kConnectionSyncEnable = 'sync',
681 kConnectionSyncFlags = 'sycf',
682 kConnectionSupportsAppleSense = 'asns',
683 kConnectionSupportsLLDDCSense = 'lddc',
684 kConnectionSupportsHLDDCSense = 'hddc',
685 kConnectionEnable = 'enab',
686 kConnectionCheckEnable = 'cena',
687 kConnectionProbe = 'prob',
688 kConnectionChanged = 'chng',
689 kConnectionPower = 'powr',
690 kConnectionPostWake = 'pwak',
691 kConnectionDisplayParameterCount = 'pcnt',
692 kConnectionDisplayParameters = 'parm',
693 kConnectionOverscan = 'oscn',
694 kConnectionVideoBest = 'vbst',
695
696 kConnectionRedGammaScale = 'rgsc',
697 kConnectionGreenGammaScale = 'ggsc',
698 kConnectionBlueGammaScale = 'bgsc',
699
700 kConnectionHandleDisplayPortEvent = 'dpir',
701
702 kConnectionPanelTimingDisable = 'pnlt',
703
704 kConnectionColorMode = 'cyuv',
705 kConnectionColorModesSupported = 'colr',
706 kConnectionColorDepthsSupported = ' bpc',
707
708 kConnectionControllerDepthsSupported = '\0grd',
709 kConnectionControllerColorDepth = '\0dpd',
710 kConnectionControllerDitherControl = '\0gdc',
711
712 kConnectionDisplayFlags = 'dflg',
713};
714
715// kConnectionFlags values
716enum {
717 kIOConnectionBuiltIn = 0x00000800,
718 kIOConnectionStereoSync = 0x00008000
719};
720
721// kConnectionSyncControl values
722enum {
723 kIOHSyncDisable = 0x00000001,
724 kIOVSyncDisable = 0x00000002,
725 kIOCSyncDisable = 0x00000004,
726 kIONoSeparateSyncControl = 0x00000040,
727 kIOTriStateSyncs = 0x00000080,
728 kIOSyncOnBlue = 0x00000008,
729 kIOSyncOnGreen = 0x00000010,
730 kIOSyncOnRed = 0x00000020
731};
732
733// kConnectionHandleDisplayPortEvent values
734enum {
735 kIODPEventStart = 1,
736 kIODPEventIdle = 2,
737
738 kIODPEventForceRetrain = 3,
739
740 kIODPEventRemoteControlCommandPending = 256,
741 kIODPEventAutomatedTestRequest = 257,
742 kIODPEventContentProtection = 258,
743 kIODPEventMCCS = 259,
744 kIODPEventSinkSpecific = 260
745};
746
747#define kIODisplayAttributesKey "IODisplayAttributes"
748
749#define kIODisplaySupportsUnderscanKey "IODisplaySupportsUnderscan"
750#define kIODisplaySupportsBasicAudioKey "IODisplaySupportsBasicAudio"
751#define kIODisplaySupportsYCbCr444Key "IODisplaySupportsYCbCr444"
752#define kIODisplaySupportsYCbCr422Key "IODisplaySupportsYCbCr422"
753
754enum
755{
756 kIODisplayColorMode = kConnectionColorMode,
757};
758
759#if 0
760enum
761{
762 // kConnectionColorMode attribute
763 kIODisplayColorModeReserved = 0x00000000,
764 kIODisplayColorModeRGB = 0x00000001,
765 kIODisplayColorModeYCbCr422 = 0x00000010,
766 kIODisplayColorModeYCbCr444 = 0x00000100,
767 kIODisplayColorModeRGBLimited = 0x00001000,
768 kIODisplayColorModeAuto = 0x10000000,
769};
770#endif
771
772enum
773{
774 // kConnectionColorDepthsSupported attribute
775 kIODisplayRGBColorComponentBitsUnknown = 0x00000000,
776 kIODisplayRGBColorComponentBits6 = 0x00000001,
777 kIODisplayRGBColorComponentBits8 = 0x00000002,
778 kIODisplayRGBColorComponentBits10 = 0x00000004,
779 kIODisplayRGBColorComponentBits12 = 0x00000008,
780 kIODisplayRGBColorComponentBits14 = 0x00000010,
781 kIODisplayRGBColorComponentBits16 = 0x00000020,
782
783 kIODisplayYCbCr444ColorComponentBitsUnknown = 0x00000000,
784 kIODisplayYCbCr444ColorComponentBits6 = 0x00000100,
785 kIODisplayYCbCr444ColorComponentBits8 = 0x00000200,
786 kIODisplayYCbCr444ColorComponentBits10 = 0x00000400,
787 kIODisplayYCbCr444ColorComponentBits12 = 0x00000800,
788 kIODisplayYCbCr444ColorComponentBits14 = 0x00001000,
789 kIODisplayYCbCr444ColorComponentBits16 = 0x00002000,
790
791 kIODisplayYCbCr422ColorComponentBitsUnknown = 0x00000000,
792 kIODisplayYCbCr422ColorComponentBits6 = 0x00010000,
793 kIODisplayYCbCr422ColorComponentBits8 = 0x00020000,
794 kIODisplayYCbCr422ColorComponentBits10 = 0x00040000,
795 kIODisplayYCbCr422ColorComponentBits12 = 0x00080000,
796 kIODisplayYCbCr422ColorComponentBits14 = 0x00100000,
797 kIODisplayYCbCr422ColorComponentBits16 = 0x00200000,
798};
799
800enum
801{
802 // kConnectionDitherControl attribute
803 kIODisplayDitherDisable = 0x00000000,
804 kIODisplayDitherSpatial = 0x00000001,
805 kIODisplayDitherTemporal = 0x00000002,
806 kIODisplayDitherFrameRateControl = 0x00000004,
807 kIODisplayDitherDefault = 0x00000080,
808 kIODisplayDitherAll = 0x000000FF,
809 kIODisplayDitherRGBShift = 0,
810 kIODisplayDitherYCbCr444Shift = 8,
811 kIODisplayDitherYCbCr422Shift = 16,
812};
813
814enum
815{
816 // kConnectionDisplayFlags attribute
817 kIODisplayNeedsCEAUnderscan = 0x00000001,
818};
819
820
821#define IO_DISPLAY_CAN_FILL 0x00000040
822#define IO_DISPLAY_CAN_BLIT 0x00000020
823
824#define IO_24BPP_TRANSFER_TABLE_SIZE 256
825#define IO_15BPP_TRANSFER_TABLE_SIZE 256
826#define IO_8BPP_TRANSFER_TABLE_SIZE 256
827#define IO_12BPP_TRANSFER_TABLE_SIZE 256
828#define IO_2BPP_TRANSFER_TABLE_SIZE 256
829
830#define STDFB_BM256_TO_BM38_MAP_SIZE 256
831#define STDFB_BM38_TO_BM256_MAP_SIZE 256
832#define STDFB_BM38_TO_256_WITH_LOGICAL_SIZE \
833 (STDFB_BM38_TO_BM256_MAP_SIZE + (256/sizeof(int)))
834
835#define STDFB_4BPS_TO_5BPS_MAP_SIZE 16
836#define STDFB_5BPS_TO_4BPS_MAP_SIZE 32
837
838enum {
839 // connection types for IOServiceOpen
840 kIOFBServerConnectType = 0,
841 kIOFBSharedConnectType = 1
842};
843
844enum {
845 // options for IOServiceRequestProbe()
846 kIOFBUserRequestProbe = 0x00000001
847};
848
849struct IOGPoint {
850 SInt16 x;
851 SInt16 y;
852};
853typedef struct IOGPoint IOGPoint;
854
855struct IOGSize {
856 SInt16 width;
857 SInt16 height;
858};
859typedef struct IOGSize IOGSize;
860
861struct IOGBounds {
862 SInt16 minx;
863 SInt16 maxx;
864 SInt16 miny;
865 SInt16 maxy;
866};
867typedef struct IOGBounds IOGBounds;
868
869#ifndef kIODescriptionKey
870
871#if !defined(__Point__) && !defined(BINTREE_H) && !defined(__MACTYPES__)
872#define __Point__
873typedef IOGPoint Point;
874#endif
875
876#if !defined(__Bounds__) && !defined(BINTREE_H) && !defined(__MACTYPES__)
877#define __Bounds__
878typedef IOGBounds Bounds;
879#endif
880
881#endif /* !kIODescriptionKey */
882
883// cursor description
884
885enum {
886 kTransparentEncoding = 0,
887 kInvertingEncoding
888};
889
890enum {
891 kTransparentEncodingShift = (kTransparentEncoding << 1),
892 kTransparentEncodedPixel = (0x01 << kTransparentEncodingShift),
893
894 kInvertingEncodingShift = (kInvertingEncoding << 1),
895 kInvertingEncodedPixel = (0x01 << kInvertingEncodingShift)
896};
897
898enum {
899 kHardwareCursorDescriptorMajorVersion = 0x0001,
900 kHardwareCursorDescriptorMinorVersion = 0x0000
901};
902
903/*!
904 * @struct IOHardwareCursorDescriptor
905 * @abstract A structure defining the format of a hardware cursor.
906 * @discussion This structure is used by IOFramebuffer to define the format of a hardware cursor.
907 * @field majorVersion Set to kHardwareCursorDescriptorMajorVersion.
908 * @field minorVersion Set to kHardwareCursorDescriptorMinorVersion.
909 * @field height Maximum size of the cursor.
910 * @field width Maximum size of the cursor.
911 * @field bitDepth Number bits per pixel, or a QD/QT pixel type, for example kIO8IndexedPixelFormat, kIO32ARGBPixelFormat.
912 * @field maskBitDepth Unused.
913 * @field numColors Number of colors for indexed pixel types.
914 * @field colorEncodings An array pointer specifying the pixel values corresponding to the indices into the color table, for indexed pixel types.
915 * @field flags None defined, set to zero.
916 * @field supportedSpecialEncodings Mask of supported special pixel values, eg. kTransparentEncodedPixel, kInvertingEncodedPixel.
917 * @field specialEncodings Array of pixel values for each supported special encoding.
918 */
919
920struct IOHardwareCursorDescriptor {
921 UInt16 majorVersion;
922 UInt16 minorVersion;
923 UInt32 height;
924 UInt32 width;
925 UInt32 bitDepth; // bits per pixel, or a QD/QT pixel type
926 UInt32 maskBitDepth; // unused
927 UInt32 numColors; // number of colors in the colorMap. ie.
928 UInt32 * colorEncodings;
929 UInt32 flags;
930 UInt32 supportedSpecialEncodings;
931 UInt32 specialEncodings[16];
932};
933typedef struct IOHardwareCursorDescriptor IOHardwareCursorDescriptor;
934
935enum {
936 kHardwareCursorInfoMajorVersion = 0x0001,
937 kHardwareCursorInfoMinorVersion = 0x0000
938};
939
940/*!
941 * @struct IOHardwareCursorInfo
942 * @abstract A structure defining the converted data of a hardware cursor.
943 * @discussion This structure is used by IOFramebuffer to return the data of a hardware cursor by convertCursorImage() after conversion based on the IOHardwareCursorDescriptor passed to that routine.
944 * @field majorVersion Set to kHardwareCursorInfoMajorVersion.
945 * @field minorVersion Set to kHardwareCursorInfoMinorVersion.
946 * @field cursorHeight The actual size of the cursor is returned.
947 * @field cursorWidth The actual size of the cursor is returned.
948 * @field colorMap Pointer to array of IOColorEntry structures, with the number of elements set by the numColors field of the IOHardwareCursorDescriptor. Zero should be passed for direct pixel formats.
949 * @field hardwareCursorData Buffer to receive the converted cursor data.
950 * @field cursorHotSpotX Cursor's hotspot.
951 * @field cursorHotSpotY Cursor's hotspot.
952 * @field reserved Reserved, set to zero.
953 */
954
955struct IOHardwareCursorInfo {
956 UInt16 majorVersion;
957 UInt16 minorVersion;
958 UInt32 cursorHeight;
959 UInt32 cursorWidth;
960 // nil or big enough for hardware's max colors
961 IOColorEntry * colorMap;
962 UInt8 * hardwareCursorData;
963 UInt16 cursorHotSpotX;
964 UInt16 cursorHotSpotY;
965 UInt32 reserved[5];
966};
967typedef struct IOHardwareCursorInfo IOHardwareCursorInfo;
968
969// interrupt types
970
971enum {
972 kIOFBVBLInterruptType = 'vbl ',
973 kIOFBHBLInterruptType = 'hbl ',
974 kIOFBFrameInterruptType = 'fram',
975 // Demand to check configuration (Hardware unchanged)
976 kIOFBConnectInterruptType = 'dci ',
977 // Demand to rebuild (Hardware has reinitialized on dependent change)
978 kIOFBChangedInterruptType = 'chng',
979 // Demand to remove framebuffer (Hardware not available on dependent change -- but must not buserror)
980 kIOFBOfflineInterruptType = 'remv',
981 // Notice that hardware is available (after being removed)
982 kIOFBOnlineInterruptType = 'add ',
983 // DisplayPort short pulse
984 kIOFBDisplayPortInterruptType = 'dpir',
985 // DisplayPort link event
986 kIOFBDisplayPortLinkChangeInterruptType = 'dplk',
987 // MCCS
988 kIOFBMCCSInterruptType = 'mccs'
989};
990
991// IOAppleTimingID's
992enum {
993 kIOTimingIDInvalid = 0, /* Not a standard timing */
994 kIOTimingIDApple_FixedRateLCD = 42, /* Lump all fixed-rate LCDs into one category.*/
995 kIOTimingIDApple_512x384_60hz = 130, /* 512x384 (60 Hz) Rubik timing. */
996 kIOTimingIDApple_560x384_60hz = 135, /* 560x384 (60 Hz) Rubik-560 timing. */
997 kIOTimingIDApple_640x480_67hz = 140, /* 640x480 (67 Hz) HR timing. */
998 kIOTimingIDApple_640x400_67hz = 145, /* 640x400 (67 Hz) HR-400 timing. */
999 kIOTimingIDVESA_640x480_60hz = 150, /* 640x480 (60 Hz) VGA timing. */
1000 kIOTimingIDVESA_640x480_72hz = 152, /* 640x480 (72 Hz) VGA timing. */
1001 kIOTimingIDVESA_640x480_75hz = 154, /* 640x480 (75 Hz) VGA timing. */
1002 kIOTimingIDVESA_640x480_85hz = 158, /* 640x480 (85 Hz) VGA timing. */
1003 kIOTimingIDGTF_640x480_120hz = 159, /* 640x480 (120 Hz) VESA Generalized Timing Formula */
1004 kIOTimingIDApple_640x870_75hz = 160, /* 640x870 (75 Hz) FPD timing.*/
1005 kIOTimingIDApple_640x818_75hz = 165, /* 640x818 (75 Hz) FPD-818 timing.*/
1006 kIOTimingIDApple_832x624_75hz = 170, /* 832x624 (75 Hz) GoldFish timing.*/
1007 kIOTimingIDVESA_800x600_56hz = 180, /* 800x600 (56 Hz) SVGA timing. */
1008 kIOTimingIDVESA_800x600_60hz = 182, /* 800x600 (60 Hz) SVGA timing. */
1009 kIOTimingIDVESA_800x600_72hz = 184, /* 800x600 (72 Hz) SVGA timing. */
1010 kIOTimingIDVESA_800x600_75hz = 186, /* 800x600 (75 Hz) SVGA timing. */
1011 kIOTimingIDVESA_800x600_85hz = 188, /* 800x600 (85 Hz) SVGA timing. */
1012 kIOTimingIDVESA_1024x768_60hz = 190, /* 1024x768 (60 Hz) VESA 1K-60Hz timing. */
1013 kIOTimingIDVESA_1024x768_70hz = 200, /* 1024x768 (70 Hz) VESA 1K-70Hz timing. */
1014 kIOTimingIDVESA_1024x768_75hz = 204, /* 1024x768 (75 Hz) VESA 1K-75Hz timing (very similar to kIOTimingIDApple_1024x768_75hz). */
1015 kIOTimingIDVESA_1024x768_85hz = 208, /* 1024x768 (85 Hz) VESA timing. */
1016 kIOTimingIDApple_1024x768_75hz = 210, /* 1024x768 (75 Hz) Apple 19" RGB. */
1017 kIOTimingIDApple_1152x870_75hz = 220, /* 1152x870 (75 Hz) Apple 21" RGB. */
1018 kIOTimingIDAppleNTSC_ST = 230, /* 512x384 (60 Hz, interlaced, non-convolved). */
1019 kIOTimingIDAppleNTSC_FF = 232, /* 640x480 (60 Hz, interlaced, non-convolved). */
1020 kIOTimingIDAppleNTSC_STconv = 234, /* 512x384 (60 Hz, interlaced, convolved). */
1021 kIOTimingIDAppleNTSC_FFconv = 236, /* 640x480 (60 Hz, interlaced, convolved). */
1022 kIOTimingIDApplePAL_ST = 238, /* 640x480 (50 Hz, interlaced, non-convolved). */
1023 kIOTimingIDApplePAL_FF = 240, /* 768x576 (50 Hz, interlaced, non-convolved). */
1024 kIOTimingIDApplePAL_STconv = 242, /* 640x480 (50 Hz, interlaced, convolved). */
1025 kIOTimingIDApplePAL_FFconv = 244, /* 768x576 (50 Hz, interlaced, convolved). */
1026 kIOTimingIDVESA_1280x960_75hz = 250, /* 1280x960 (75 Hz) */
1027 kIOTimingIDVESA_1280x960_60hz = 252, /* 1280x960 (60 Hz) */
1028 kIOTimingIDVESA_1280x960_85hz = 254, /* 1280x960 (85 Hz) */
1029 kIOTimingIDVESA_1280x1024_60hz = 260, /* 1280x1024 (60 Hz) */
1030 kIOTimingIDVESA_1280x1024_75hz = 262, /* 1280x1024 (75 Hz) */
1031 kIOTimingIDVESA_1280x1024_85hz = 268, /* 1280x1024 (85 Hz) */
1032 kIOTimingIDVESA_1600x1200_60hz = 280, /* 1600x1200 (60 Hz) VESA timing. */
1033 kIOTimingIDVESA_1600x1200_65hz = 282, /* 1600x1200 (65 Hz) VESA timing. */
1034 kIOTimingIDVESA_1600x1200_70hz = 284, /* 1600x1200 (70 Hz) VESA timing. */
1035 kIOTimingIDVESA_1600x1200_75hz = 286, /* 1600x1200 (75 Hz) VESA timing (pixel clock is 189.2 Mhz dot clock). */
1036 kIOTimingIDVESA_1600x1200_80hz = 288, /* 1600x1200 (80 Hz) VESA timing (pixel clock is 216>? Mhz dot clock) - proposed only. */
1037 kIOTimingIDVESA_1600x1200_85hz = 289, /* 1600x1200 (85 Hz) VESA timing (pixel clock is 229.5 Mhz dot clock). */
1038 kIOTimingIDVESA_1792x1344_60hz = 296, /* 1792x1344 (60 Hz) VESA timing (204.75 Mhz dot clock). */
1039 kIOTimingIDVESA_1792x1344_75hz = 298, /* 1792x1344 (75 Hz) VESA timing (261.75 Mhz dot clock). */
1040 kIOTimingIDVESA_1856x1392_60hz = 300, /* 1856x1392 (60 Hz) VESA timing (218.25 Mhz dot clock). */
1041 kIOTimingIDVESA_1856x1392_75hz = 302, /* 1856x1392 (75 Hz) VESA timing (288 Mhz dot clock). */
1042 kIOTimingIDVESA_1920x1440_60hz = 304, /* 1920x1440 (60 Hz) VESA timing (234 Mhz dot clock). */
1043 kIOTimingIDVESA_1920x1440_75hz = 306, /* 1920x1440 (75 Hz) VESA timing (297 Mhz dot clock). */
1044 kIOTimingIDSMPTE240M_60hz = 400, /* 60Hz V, 33.75KHz H, interlaced timing, 16:9 aspect, typical resolution of 1920x1035. */
1045 kIOTimingIDFilmRate_48hz = 410, /* 48Hz V, 25.20KHz H, non-interlaced timing, typical resolution of 640x480. */
1046 kIOTimingIDSony_1600x1024_76hz = 500, /* 1600x1024 (76 Hz) Sony timing (pixel clock is 170.447 Mhz dot clock). */
1047 kIOTimingIDSony_1920x1080_60hz = 510, /* 1920x1080 (60 Hz) Sony timing (pixel clock is 159.84 Mhz dot clock). */
1048 kIOTimingIDSony_1920x1080_72hz = 520, /* 1920x1080 (72 Hz) Sony timing (pixel clock is 216.023 Mhz dot clock). */
1049 kIOTimingIDSony_1920x1200_76hz = 540, /* 1900x1200 (76 Hz) Sony timing (pixel clock is 243.20 Mhz dot clock). */
1050 kIOTimingIDApple_0x0_0hz_Offline = 550, /* Indicates that this timing will take the display off-line and remove it from the system. */
1051 kIOTimingIDVESA_848x480_60hz = 570, /* 848x480 (60 Hz) VESA timing. */
1052 kIOTimingIDVESA_1360x768_60hz = 590 /* 1360x768 (60 Hz) VESA timing. */
1053};
1054
1055// framebuffer property keys
1056
1057#define kIOFramebufferInfoKey "IOFramebufferInformation"
1058
1059#define kIOFBWidthKey "IOFBWidth"
1060#define kIOFBHeightKey "IOFBHeight"
1061#define kIOFBRefreshRateKey "IOFBRefreshRate"
1062#define kIOFBFlagsKey "IOFBFlags"
1063#define kIOFBBytesPerRowKey "IOFBBytesPerRow"
1064#define kIOFBBytesPerPlaneKey "IOFBBytesPerPlane"
1065#define kIOFBBitsPerPixelKey "IOFBBitsPerPixel"
1066#define kIOFBComponentCountKey "IOFBComponentCount"
1067#define kIOFBBitsPerComponentKey "IOFBBitsPerComponent"
1068
1069#define kIOFBDetailedTimingsKey "IOFBDetailedTimings"
1070#define kIOFBTimingRangeKey "IOFBTimingRange"
1071#define kIOFBScalerInfoKey "IOFBScalerInfo"
1072#define kIOFBCursorInfoKey "IOFBCursorInfo"
1073
1074#define kIOFBHostAccessFlagsKey "IOFBHostAccessFlags"
1075
1076#define kIOFBMemorySizeKey "IOFBMemorySize"
1077
1078#define kIOFBProbeOptionsKey "IOFBProbeOptions"
1079
1080#define kIOFBGammaWidthKey "IOFBGammaWidth"
1081#define kIOFBGammaCountKey "IOFBGammaCount"
1082#define kIOFBCLUTDeferKey "IOFBCLUTDefer"
1083
1084// exists on the hibernate progress display device
1085#ifndef kIOHibernatePreviewActiveKey
1086#define kIOHibernatePreviewActiveKey "IOHibernatePreviewActive"
1087// values for kIOHibernatePreviewActiveKey set by driver
1088enum {
1089 kIOHibernatePreviewActive = 0x00000001,
1090 kIOHibernatePreviewUpdates = 0x00000002
1091};
1092#endif
1093
1094// CFNumber/CFData
1095#define kIOFBAVSignalTypeKey "av-signal-type"
1096enum {
1097 kIOFBAVSignalTypeUnknown = 0x00000000,
1098 kIOFBAVSignalTypeVGA = 0x00000001,
1099 kIOFBAVSignalTypeDVI = 0x00000002,
1100 kIOFBAVSignalTypeHDMI = 0x00000008,
1101 kIOFBAVSignalTypeDP = 0x00000010,
1102};
1103
1104// diagnostic keys
1105
1106#define kIOFBConfigKey "IOFBConfig"
1107#define kIOFBModesKey "IOFBModes"
1108#define kIOFBModeIDKey "ID"
1109#define kIOFBModeDMKey "DM"
1110#define kIOFBModeTMKey "TM"
1111#define kIOFBModeAIDKey "AID"
1112#define kIOFBModeDFKey "DF"
1113
1114// display property keys
1115
1116#define kIODisplayEDIDKey "IODisplayEDID"
1117#define kIODisplayLocationKey "IODisplayLocation" // CFString
1118#define kIODisplayConnectFlagsKey "IODisplayConnectFlags" // CFNumber
1119#define kIODisplayHasBacklightKey "IODisplayHasBacklight" // CFBoolean
1120#define kIODisplayIsDigitalKey "IODisplayIsDigital" // CFBoolean
1121#define kDisplayBundleKey "DisplayBundle"
1122
1123#define kAppleDisplayTypeKey "AppleDisplayType"
1124#define kAppleSenseKey "AppleSense"
1125
1126#define kIODisplayMCCSVersionKey "IODisplayMCCSVersion"
1127#define kIODisplayTechnologyTypeKey "IODisplayTechnologyType"
1128#define kIODisplayUsageTimeKey "IODisplayUsageTime"
1129#define kIODisplayFirmwareLevelKey "IODisplayFirmwareLevel"
1130
1131enum {
1132 kDisplayVendorIDUnknown = 'unkn',
1133 kDisplayProductIDGeneric = 0x717
1134};
1135
1136#define kDisplayVendorID "DisplayVendorID" // CFNumber
1137#define kDisplayProductID "DisplayProductID" // CFNumber
1138#define kDisplaySerialNumber "DisplaySerialNumber" // CFNumber
1139#define kDisplaySerialString "DisplaySerialString" // CFString
1140#define kDisplayWeekOfManufacture "DisplayWeekManufacture" // CFNumber
1141#define kDisplayYearOfManufacture "DisplayYearManufacture" // CFNumber
1142
1143// CFDictionary of language-locale keys, name values
1144// eg. "en"="Color LCD", "en-GB"="Colour LCD"
1145#define kDisplayProductName "DisplayProductName"
1146
1147// all CFNumber or CFArray of CFNumber (floats)
1148#define kDisplayWhitePointX "DisplayWhitePointX"
1149#define kDisplayWhitePointY "DisplayWhitePointY"
1150#define kDisplayRedPointX "DisplayRedPointX"
1151#define kDisplayRedPointY "DisplayRedPointY"
1152#define kDisplayGreenPointX "DisplayGreenPointX"
1153#define kDisplayGreenPointY "DisplayGreenPointY"
1154#define kDisplayBluePointX "DisplayBluePointX"
1155#define kDisplayBluePointY "DisplayBluePointY"
1156#define kDisplayWhiteGamma "DisplayWhiteGamma"
1157#define kDisplayRedGamma "DisplayRedGamma"
1158#define kDisplayGreenGamma "DisplayGreenGamma"
1159#define kDisplayBlueGamma "DisplayBlueGamma"
1160
1161// Display gamma
1162#define kDisplayGammaChannels "DisplayGammaChannels" // CFNumber 1 or 3 channel count
1163#define kDisplayGammaEntryCount "DisplayGammaEntryCount" // CFNumber 1-based count of entries per channel
1164#define kDisplayGammaEntrySize "DisplayGammaEntrySize" // CFNumber size in bytes of each table entry
1165#define kDisplayGammaTable "DisplayGammaTable" // CFData
1166
1167// CFBoolean
1168#define kDisplayBrightnessAffectsGamma "DisplayBrightnessAffectsGamma"
1169#define kDisplayViewAngleAffectsGamma "DisplayViewAngleAffectsGamma"
1170
1171// CFData
1172#define kDisplayCSProfile "DisplayCSProfile"
1173
1174// CFNumber
1175#define kDisplayHorizontalImageSize "DisplayHorizontalImageSize"
1176#define kDisplayVerticalImageSize "DisplayVerticalImageSize"
1177
1178// Pixel description
1179
1180// CFBoolean
1181#define kDisplayFixedPixelFormat "DisplayFixedPixelFormat"
1182
1183enum {
1184 kDisplaySubPixelLayoutUndefined = 0x00000000,
1185 kDisplaySubPixelLayoutRGB = 0x00000001,
1186 kDisplaySubPixelLayoutBGR = 0x00000002,
1187 kDisplaySubPixelLayoutQuadGBL = 0x00000003,
1188 kDisplaySubPixelLayoutQuadGBR = 0x00000004,
1189
1190 kDisplaySubPixelConfigurationUndefined = 0x00000000,
1191 kDisplaySubPixelConfigurationDelta = 0x00000001,
1192 kDisplaySubPixelConfigurationStripe = 0x00000002,
1193 kDisplaySubPixelConfigurationStripeOffset = 0x00000003,
1194 kDisplaySubPixelConfigurationQuad = 0x00000004,
1195
1196 kDisplaySubPixelShapeUndefined = 0x00000000,
1197 kDisplaySubPixelShapeRound = 0x00000001,
1198 kDisplaySubPixelShapeSquare = 0x00000002,
1199 kDisplaySubPixelShapeRectangular = 0x00000003,
1200 kDisplaySubPixelShapeOval = 0x00000004,
1201 kDisplaySubPixelShapeElliptical = 0x00000005
1202};
1203
1204// CFNumbers
1205#define kDisplaySubPixelLayout "DisplaySubPixelLayout"
1206#define kDisplaySubPixelConfiguration "DisplaySubPixelConfiguration"
1207#define kDisplaySubPixelShape "DisplaySubPixelShape"
1208
1209#define kIODisplayOverrideMatchingKey "IODisplayOverrideMatching"
1210
1211// Display parameters
1212
1213#define kIODisplayParametersKey "IODisplayParameters"
1214#define kIODisplayGUIDKey "IODisplayGUID"
1215
1216#define kIODisplayValueKey "value"
1217#define kIODisplayMinValueKey "min"
1218#define kIODisplayMaxValueKey "max"
1219
1220#define kIODisplayBrightnessKey "brightness"
1221#define kIODisplayContrastKey "contrast"
1222#define kIODisplayHorizontalPositionKey "horizontal-position"
1223#define kIODisplayHorizontalSizeKey "horizontal-size"
1224#define kIODisplayVerticalPositionKey "vertical-position"
1225#define kIODisplayVerticalSizeKey "vertical-size"
1226#define kIODisplayTrapezoidKey "trapezoid"
1227#define kIODisplayPincushionKey "pincushion"
1228#define kIODisplayParallelogramKey "parallelogram"
1229#define kIODisplayRotationKey "rotation"
1230#define kIODisplayTheatreModeKey "theatre-mode"
1231#define kIODisplayTheatreModeWindowKey "theatre-mode-window"
1232#define kIODisplayOverscanKey "oscn"
1233#define kIODisplayVideoBestKey "vbst"
1234
1235#define kIODisplaySpeakerVolumeKey "speaker-volume"
1236#define kIODisplaySpeakerSelectKey "speaker-select"
1237#define kIODisplayMicrophoneVolumeKey "microphone-volume"
1238#define kIODisplayAmbientLightSensorKey "ambient-light-sensor"
1239#define kIODisplayAudioMuteAndScreenBlankKey "audio-mute-and-screen-blank"
1240#define kIODisplayAudioTrebleKey "audio-treble"
1241#define kIODisplayAudioBassKey "audio-bass"
1242#define kIODisplayAudioBalanceLRKey "audio-balance-LR"
1243#define kIODisplayAudioProcessorModeKey "audio-processor-mode"
1244#define kIODisplayPowerModeKey "power-mode"
1245#define kIODisplayManufacturerSpecificKey "manufacturer-specific"
1246
1247
1248#define kIODisplayRedGammaScaleKey "rgsc"
1249#define kIODisplayGreenGammaScaleKey "ggsc"
1250#define kIODisplayBlueGammaScaleKey "bgsc"
1251
1252#define kIODisplayParametersCommitKey "commit"
1253#define kIODisplayParametersDefaultKey "defaults"
1254#define kIODisplayParametersFlushKey "flush"
1255
1256#ifdef __cplusplus
1257}
1258#endif
1259
1260#endif /* ! _IOKIT_IOGRAPHICSTYPES_H */
1261

Archive Download this file

Revision: 1621