a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * XFree86 vbe module
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * Copyright 2000 Egbert Eich
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * The mode query/save/set/restore functions from the vesa driver
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * have been moved here.
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * Copyright (c) 2000 by Conectiva S.A. (http://www.conectiva.com)
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * Authors: Paulo César Pereira de Andrade <pcpa@conectiva.com.br>
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsynctypedef enum {
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsynctypedef struct {
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsyncextern _X_EXPORT vbeInfoPtr VBEInit(xf86Int10InfoPtr pInt, int entityIndex);
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsyncextern _X_EXPORT vbeInfoPtr VBEExtendedInit(xf86Int10InfoPtr pInt,
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsyncextern _X_EXPORT xf86MonPtr vbeDoEDID(vbeInfoPtr pVbe, pointer pDDCModule);
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync#if defined(__GNUC__) || defined(__USLC__) || defined(__SUNPRO_C)
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync#pragma pack() /* All GCC versions recognise this syntax */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync#if !( defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) )
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync /* VESA 1.2 fields */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD16 VESAVersion; /* Higher byte major, lower byte minor */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync /* Pointer to OEM string */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 Capabilities[4]; /* Capabilities of the video environment */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync /* pointer to supported Super VGA modes */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD16 TotalMemory; /* Number of 64kb memory blocks on board */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync /* if not VESA 2, 236 scratch bytes follow (256 bytes total size) */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync /* VESA 2 fields */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD16 OemSoftwareRev; /* VBE implementation Software revision */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync /* Pointer to Vendor Name String */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync /* Pointer to Product Name String */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync /* Pointer to Product Revision String */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 Reserved[222]; /* Reserved for VBE implementation */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 OemData[256]; /* Data Area for OEM Strings */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync/* Return Super VGA Information */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsyncextern _X_EXPORT VbeInfoBlock *VBEGetVBEInfo(vbeInfoPtr pVbe);
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsyncextern _X_EXPORT void VBEFreeVBEInfo(VbeInfoBlock * block);
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD32 WinFuncPtr; /* real mode pointer to window function */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync /* Mandatory information for VBE 1.2 and above */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD16 XResolution; /* horizontal resolution in pixels or characters */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD16 YResolution; /* vertical resolution in pixels or characters */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 XCharSize; /* character cell width in pixels */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 YCharSize; /* character cell height in pixels */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 NumberOfPlanes; /* number of memory planes */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 Reserved; /* 1 *//* reserved for page function */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync /* Direct color fields (required for direct/6 and YUV/7 memory models) */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 RedMaskSize; /* size of direct color red mask in bits */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 RedFieldPosition; /* bit position of lsb of red mask */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 GreenMaskSize; /* size of direct color green mask in bits */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 GreenFieldPosition; /* bit position of lsb of green mask */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 BlueMaskSize; /* size of direct color blue mask in bits */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 BlueFieldPosition; /* bit position of lsb of blue mask */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 RsvdMaskSize; /* size of direct color reserved mask in bits */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 RsvdFieldPosition; /* bit position of lsb of reserved mask */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 DirectColorModeInfo; /* direct color mode attributes */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync /* Mandatory information for VBE 2.0 and above */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD32 PhysBasePtr; /* physical address for flat memory frame buffer */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD32 Reserved32; /* 0 *//* Reserved - always set to 0 */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD16 Reserved16; /* 0 *//* Reserved - always set to 0 */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync /* Mandatory information for VBE 3.0 and above */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD16 LinBytesPerScanLine; /* bytes per scan line for linear modes */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 BnkNumberOfImagePages; /* number of images for banked modes */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 LinNumberOfImagePages; /* number of images for linear modes */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 LinRedMaskSize; /* size of direct color red mask (linear modes) */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 LinRedFieldPosition; /* bit position of lsb of red mask (linear modes) */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 LinGreenMaskSize; /* size of direct color green mask (linear modes) */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 LinGreenFieldPosition; /* bit position of lsb of green mask (linear modes) */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 LinBlueMaskSize; /* size of direct color blue mask (linear modes) */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 LinBlueFieldPosition; /* bit position of lsb of blue mask (linear modes) */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 LinRsvdMaskSize; /* size of direct color reserved mask (linear modes) */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 LinRsvdFieldPosition; /* bit position of lsb of reserved mask (linear modes) */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD32 MaxPixelClock; /* maximum pixel clock (in Hz) for graphics mode */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 Reserved2[189]; /* remainder of VbeModeInfoBlock */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync/* Return VBE Mode Information */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsyncextern _X_EXPORT VbeModeInfoBlock *VBEGetModeInfo(vbeInfoPtr pVbe, int mode);
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsyncextern _X_EXPORT void VBEFreeModeInfo(VbeModeInfoBlock * block);
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD16 HorizontalTotal; /* Horizontal total in pixels */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD16 HorizontalSyncStart; /* Horizontal sync start in pixels */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD16 HorizontalSyncEnd; /* Horizontal sync end in pixels */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD16 VerticalTotal; /* Vertical total in lines */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD16 VerticalSyncStart; /* Vertical sync start in lines */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD16 VerticalSyncEnd; /* Vertical sync end in lines */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 Flags; /* Flags (Interlaced, Double Scan etc) */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD32 PixelClock; /* Pixel clock in units of Hz */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD16 RefreshRate; /* Refresh rate in units of 0.01 Hz */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync CARD8 Reserved[40]; /* remainder of ModeInfoBlock */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync/* VbeCRTCInfoBlock is in the VESA 3.0 specs */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsyncextern _X_EXPORT Bool VBESetVBEMode(vbeInfoPtr pVbe, int mode,
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsyncextern _X_EXPORT Bool VBEGetVBEMode(vbeInfoPtr pVbe, int *mode);
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync/* Save/Restore Super VGA video state */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync/* function values are (values stored in VESAPtr):
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * 0 := query & allocate amount of memory to save state
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * 1 := save state
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * 2 := restore state
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * function 0 called automatically if function 1 called without
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * a previous call to function 0.
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsynctypedef enum {
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsyncVBESaveRestore(vbeInfoPtr pVbe, vbeSaveRestoreFunction fuction,
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync VBEBankSwitch(vbeInfoPtr pVbe, unsigned int iBank, int window);
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsynctypedef enum {
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync VBESetGetLogicalScanlineLength(pVbe, SCANWID_SET, width, \
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync VBESetGetLogicalScanlineLength(pVbe, SCANWID_SET_BYTES, width, \
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync#define VBEGetLogicalScanline(pVbe, pixels, bytes, max) \
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync VBESetGetLogicalScanlineLength(pVbe, SCANWID_GET, 0, \
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync#define VBEGetMaxLogicalScanline(pVbe, pixels, bytes, max) \
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync VBESetGetLogicalScanlineLength(pVbe, SCANWID_GET_MAX, 0, \
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsyncextern _X_EXPORT Bool VBESetGetLogicalScanlineLength(vbeInfoPtr pVbe,
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync/* 16 bit code */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsyncextern _X_EXPORT Bool VBESetDisplayStart(vbeInfoPtr pVbe, int x, int y,
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsyncextern _X_EXPORT Bool VBEGetDisplayStart(vbeInfoPtr pVbe, int *x, int *y);
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync/* if bits is 0, then it is a GET */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsyncextern _X_EXPORT int VBESetGetDACPaletteFormat(vbeInfoPtr pVbe, int bits);
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * If getting a palette, the data argument is not used. It will return
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * the data.
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * If setting a palette, it will return the pointer received on success,
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * NULL on failure.
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsyncextern _X_EXPORT CARD32 *VBESetGetPaletteData(vbeInfoPtr pVbe, Bool set,
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsyncextern _X_EXPORT VBEpmi *VBEGetVBEpmi(vbeInfoPtr pVbe);
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync/* high level helper functions */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsynctypedef struct {
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsyncVBEVesaSaveRestore(vbeInfoPtr pVbe, vbeSaveRestorePtr vbe_sr,
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsyncextern _X_EXPORT int VBEGetPixelClock(vbeInfoPtr pVbe, int mode, int Clock);
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsyncextern _X_EXPORT Bool VBEDPMSSet(vbeInfoPtr pVbe, int mode);
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsyncextern _X_EXPORT void VBEInterpretPanelID(ScrnInfoPtr pScrn,