b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* $XFree86: xc/programs/Xserver/hw/xfree86/ddc/vdif.h,v 1.4tsi Exp $ */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#ifndef _VDIF_H
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define _VDIF_H
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define VDIF_MONITOR_MONOCHROME 0
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define VDIF_MONITOR_COLOR 1
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define VDIF_VIDEO_TTL 0
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define VDIF_VIDEO_ANALOG 1
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define VDIF_VIDEO_ECL 2
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define VDIF_VIDEO_DECL 3
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define VDIF_VIDEO_OTHER 4
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define VDIF_SYNC_SEPARATE 0
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define VDIF_SYNC_C 1
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define VDIF_SYNC_CP 2
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define VDIF_SYNC_G 3
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define VDIF_SYNC_GP 4
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define VDIF_SYNC_OTHER 5
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define VDIF_SCAN_NONINTERLACED 0
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define VDIF_SCAN_INTERLACED 1
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define VDIF_SCAN_OTHER 2
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define VDIF_POLARITY_NEGATIVE 0
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define VDIF_POLARITY_POSITIVE 1
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#include <X11/Xmd.h>
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#undef CARD32
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define CARD32 unsigned int /* ... on all supported platforms */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef struct _VDIF { /* Monitor Description: */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD8 VDIFId[4]; /* alway "VDIF" */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 FileLength; /* lenght of the whole file */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 Checksum; /* sum of all bytes in the file after*/
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync /* this field */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 VDIFVersion; /* structure version number */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 VDIFRevision; /* structure revision number */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 Date[3]; /* file date Year/Month/Day */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 DateManufactured[3]; /* date Year/Month/Day */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 FileRevision; /* file revision string */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 Manufacturer; /* ASCII ID of the manufacturer */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 ModelNumber; /* ASCII ID of the model */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 MinVDIFIndex; /* ASCII ID of Minimum VDIF index */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 Version; /* ASCII ID of the model version */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 SerialNumber; /* ASCII ID of the serial number */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD8 MonitorType; /* Monochrome or Color */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD8 CRTSize; /* inches */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD8 BorderRed; /* percent */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD8 BorderGreen; /* percent */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD8 BorderBlue; /* percent */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD8 Reserved1; /* padding */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 Reserved2; /* padding */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 RedPhosphorDecay; /* microseconds */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 GreenPhosphorDecay; /* microseconds */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 BluePhosphorDecay; /* microseconds */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 WhitePoint_x; /* WhitePoint in CIExyY (scale 1000) */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 WhitePoint_y;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 WhitePoint_Y;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 RedChromaticity_x; /* Red chromaticity in x,y */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 RedChromaticity_y;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 GreenChromaticity_x; /* Green chromaticity in x,y */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 GreenChromaticity_y;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 BlueChromaticity_x; /* Blue chromaticity in x,y */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 BlueChromaticity_y;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 RedGamma; /* Gamme curve exponent (scale 1000) */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 GreenGamma;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 BlueGamma;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 NumberOperationalLimits;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 OffsetOperationalLimits;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 NumberOptions; /* optinal sections (gamma table) */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 OffsetOptions;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 OffsetStringTable;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync} xf86VdifRec, *xf86VdifPtr;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef enum { /* Tags for section identification */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync VDIF_OPERATIONAL_LIMITS_TAG = 1,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync VDIF_PREADJUSTED_TIMING_TAG,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync VDIF_GAMMA_TABLE_TAG
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync} VDIFScnTag;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef struct _VDIFScnHdr { /* Generic Section Header: */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 ScnLength; /* lenght of section */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 ScnTag; /* tag for section identification */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync} VDIFScnHdrRec, *VDIFScnHdrPtr;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef struct _VDIFLimits { /* Operational Limits: */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync VDIFScnHdrRec Header; /* common section info */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 MaxHorPixel; /* pixels */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 MaxVerPixel; /* lines */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 MaxHorActiveLength; /* millimeters */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 MaxVerActiveHeight; /* millimeters */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD8 VideoType; /* TTL / Analog / ECL / DECL */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD8 SyncType; /* TTL / Analog / ECL / DECL */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD8 SyncConfiguration; /* separate / composite / other */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD8 Reserved1; /* padding */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 Reserved2; /* padding */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 TerminationResistance; /* */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 WhiteLevel; /* millivolts */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 BlackLevel; /* millivolts */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 BlankLevel; /* millivolts */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 SyncLevel; /* millivolts */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 MaxPixelClock; /* kiloHertz */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 MinHorFrequency; /* Hertz */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 MaxHorFrequency; /* Hertz */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 MinVerFrequency; /* milliHertz */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 MaxVerFrequency; /* milliHertz */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 MinHorRetrace; /* nanoseconds */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 MinVerRetrace; /* microseconds */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 NumberPreadjustedTimings;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 OffsetNextLimits;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync} xf86VdifLimitsRec, *xf86VdifLimitsPtr;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef struct _VDIFTiming { /* Preadjusted Timing: */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync VDIFScnHdrRec Header; /* common section info */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 PreadjustedTimingName; /* SVGA/SVPMI mode number */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 HorPixel; /* pixels */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 VerPixel; /* lines */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 HorAddrLength; /* millimeters */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 VerAddrHeight; /* millimeters */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD8 PixelWidthRatio; /* gives H:V */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD8 PixelHeightRatio;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD8 Reserved1; /* padding */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD8 ScanType; /* noninterlaced / interlaced / other*/
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD8 HorSyncPolarity; /* negative / positive */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD8 VerSyncPolarity; /* negative / positive */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 CharacterWidth; /* pixels */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 PixelClock; /* kiloHertz */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 HorFrequency; /* Hertz */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 VerFrequency; /* milliHertz */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 HorTotalTime; /* nanoseconds */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD32 VerTotalTime; /* microseconds */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 HorAddrTime; /* nanoseconds */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 HorBlankStart; /* nanoseconds */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 HorBlankTime; /* nanoseconds */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 HorSyncStart; /* nanoseconds */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 HorSyncTime; /* nanoseconds */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 VerAddrTime; /* microseconds */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 VerBlankStart; /* microseconds */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 VerBlankTime; /* microseconds */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 VerSyncStart; /* microseconds */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 VerSyncTime; /* microseconds */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync} xf86VdifTimingRec, *xf86VdifTimingPtr;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef struct _VDIFGamma { /* Gamma Table: */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync VDIFScnHdrRec Header; /* common section info */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 GammaTableEntries; /* count of grays or RGB 3-tuples */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CARD16 Unused1;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync} xf86VdifGammaRec, *xf86VdifGammaPtr;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* access macros */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define VDIF_OPERATIONAL_LIMITS(vdif) \
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync((xf86VdifLimitsPtr)((char*)(vdif) + (vdif)->OffsetOperationalLimits))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define VDIF_NEXT_OPERATIONAL_LIMITS(limits) limits = \
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ((xf86VdifLimitsPtr)((char*)(limits) + (limits)->OffsetNextLimits))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define VDIF_PREADJUSTED_TIMING(limits) \
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync((xf86VdifTimingPtr)((char*)(limits) + (limits)->Header.ScnLength))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define VDIF_NEXT_PREADJUSTED_TIMING(timing) timing = \
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ((xf86VdifTimingPtr)((char*)(timing) + (timing)->Header.ScnLength))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define VDIF_OPTIONS(vdif) \
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ((VDIFScnHdrPtr)((char*)(vdif) + (vdif)->OffsetOptions))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define VDIF_NEXT_OPTIONS(options) options = \
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ((xf86VdifGammaPtr)((char*)(options) + (options)->Header.ScnLength))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define VDIF_STRING(vdif, string) \
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ((char*)((char*)vdif + vdif->OffsetStringTable + (string)))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef struct _vdif {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync xf86VdifPtr vdif;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync xf86VdifLimitsPtr *limits;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync xf86VdifTimingPtr *timings;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync xf86VdifGammaPtr *gamma;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync char * strings;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync} xf86vdif, *xf86vdifPtr;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#undef CARD32
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif