61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * XFree86 vbe module
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Copyright 2000 Egbert Eich
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync *
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * The mode query/save/set/restore functions from the vesa driver
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * have been moved here.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Copyright (c) 2000 by Conectiva S.A. (http://www.conectiva.com)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Authors: Paulo César Pereira de Andrade <pcpa@conectiva.com.br>
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#ifndef _VBE_H
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define _VBE_H
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#include "xf86int10.h"
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#include "xf86DDC.h"
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsynctypedef enum {
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync DDC_UNCHECKED,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync DDC_NONE,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync DDC_1,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync DDC_2,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync DDC_1_2
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync} ddc_lvl;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsynctypedef struct {
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync xf86Int10InfoPtr pInt10;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int version;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync void *memory;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int real_mode_base;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int num_pages;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync Bool init_int10;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync ddc_lvl ddc;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync Bool ddc_blank;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync} vbeInfoRec, *vbeInfoPtr;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define VBE_VERSION_MAJOR(x) *((CARD8*)(&x) + 1)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define VBE_VERSION_MINOR(x) (CARD8)(x)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern _X_EXPORT vbeInfoPtr VBEInit(xf86Int10InfoPtr pInt, int entityIndex);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern _X_EXPORT vbeInfoPtr VBEExtendedInit(xf86Int10InfoPtr pInt,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int entityIndex, int Flags);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern _X_EXPORT void vbeFree(vbeInfoPtr pVbe);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern _X_EXPORT xf86MonPtr vbeDoEDID(vbeInfoPtr pVbe, void *pDDCModule);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#pragma pack(1)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsynctypedef struct vbeControllerInfoBlock {
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 VbeSignature[4];
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD16 VbeVersion;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD32 OemStringPtr;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 Capabilities[4];
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD32 VideoModePtr;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD16 TotalMem;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD16 OemSoftwareRev;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD32 OemVendorNamePtr;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD32 OemProductNamePtr;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD32 OemProductRevPtr;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 Scratch[222];
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 OemData[256];
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync} vbeControllerInfoRec, *vbeControllerInfoPtr;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#if defined(__GNUC__) || defined(__USLC__) || defined(__SUNPRO_C)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#pragma pack() /* All GCC versions recognise this syntax */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#else
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#pragma pack(0)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#endif
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#if !( defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) )
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define __attribute__(a)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#endif
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsynctypedef struct _VbeInfoBlock VbeInfoBlock;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsynctypedef struct _VbeModeInfoBlock VbeModeInfoBlock;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsynctypedef struct _VbeCRTCInfoBlock VbeCRTCInfoBlock;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * INT 0
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncstruct _VbeInfoBlock {
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /* VESA 1.2 fields */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 VESASignature[4]; /* VESA */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD16 VESAVersion; /* Higher byte major, lower byte minor */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /*CARD32 */ char *OEMStringPtr;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /* Pointer to OEM string */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 Capabilities[4]; /* Capabilities of the video environment */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /*CARD32 */ CARD16 *VideoModePtr;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /* pointer to supported Super VGA modes */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD16 TotalMemory; /* Number of 64kb memory blocks on board */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /* if not VESA 2, 236 scratch bytes follow (256 bytes total size) */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /* VESA 2 fields */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD16 OemSoftwareRev; /* VBE implementation Software revision */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /*CARD32 */ char *OemVendorNamePtr;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /* Pointer to Vendor Name String */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /*CARD32 */ char *OemProductNamePtr;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /* Pointer to Product Name String */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /*CARD32 */ char *OemProductRevPtr;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /* Pointer to Product Revision String */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 Reserved[222]; /* Reserved for VBE implementation */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 OemData[256]; /* Data Area for OEM Strings */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync} __attribute__ ((packed));
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/* Return Super VGA Information */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern _X_EXPORT VbeInfoBlock *VBEGetVBEInfo(vbeInfoPtr pVbe);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern _X_EXPORT void VBEFreeVBEInfo(VbeInfoBlock * block);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * INT 1
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncstruct _VbeModeInfoBlock {
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD16 ModeAttributes; /* mode attributes */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 WinAAttributes; /* window A attributes */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 WinBAttributes; /* window B attributes */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD16 WinGranularity; /* window granularity */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD16 WinSize; /* window size */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD16 WinASegment; /* window A start segment */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD16 WinBSegment; /* window B start segment */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD32 WinFuncPtr; /* real mode pointer to window function */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD16 BytesPerScanline; /* bytes per scanline */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /* Mandatory information for VBE 1.2 and above */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD16 XResolution; /* horizontal resolution in pixels or characters */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD16 YResolution; /* vertical resolution in pixels or characters */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 XCharSize; /* character cell width in pixels */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 YCharSize; /* character cell height in pixels */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 NumberOfPlanes; /* number of memory planes */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 BitsPerPixel; /* bits per pixel */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 NumberOfBanks; /* number of banks */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 MemoryModel; /* memory model type */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 BankSize; /* bank size in KB */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 NumberOfImages; /* number of images */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 Reserved; /* 1 *//* reserved for page function */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /* Direct color fields (required for direct/6 and YUV/7 memory models) */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 RedMaskSize; /* size of direct color red mask in bits */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 RedFieldPosition; /* bit position of lsb of red mask */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 GreenMaskSize; /* size of direct color green mask in bits */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 GreenFieldPosition; /* bit position of lsb of green mask */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 BlueMaskSize; /* size of direct color blue mask in bits */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 BlueFieldPosition; /* bit position of lsb of blue mask */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 RsvdMaskSize; /* size of direct color reserved mask in bits */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 RsvdFieldPosition; /* bit position of lsb of reserved mask */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 DirectColorModeInfo; /* direct color mode attributes */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /* Mandatory information for VBE 2.0 and above */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD32 PhysBasePtr; /* physical address for flat memory frame buffer */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD32 Reserved32; /* 0 *//* Reserved - always set to 0 */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD16 Reserved16; /* 0 *//* Reserved - always set to 0 */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /* Mandatory information for VBE 3.0 and above */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD16 LinBytesPerScanLine; /* bytes per scan line for linear modes */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 BnkNumberOfImagePages; /* number of images for banked modes */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 LinNumberOfImagePages; /* number of images for linear modes */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 LinRedMaskSize; /* size of direct color red mask (linear modes) */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 LinRedFieldPosition; /* bit position of lsb of red mask (linear modes) */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 LinGreenMaskSize; /* size of direct color green mask (linear modes) */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 LinGreenFieldPosition; /* bit position of lsb of green mask (linear modes) */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 LinBlueMaskSize; /* size of direct color blue mask (linear modes) */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 LinBlueFieldPosition; /* bit position of lsb of blue mask (linear modes) */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 LinRsvdMaskSize; /* size of direct color reserved mask (linear modes) */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 LinRsvdFieldPosition; /* bit position of lsb of reserved mask (linear modes) */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD32 MaxPixelClock; /* maximum pixel clock (in Hz) for graphics mode */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 Reserved2[189]; /* remainder of VbeModeInfoBlock */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync} __attribute__ ((packed));
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/* Return VBE Mode Information */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern _X_EXPORT VbeModeInfoBlock *VBEGetModeInfo(vbeInfoPtr pVbe, int mode);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern _X_EXPORT void VBEFreeModeInfo(VbeModeInfoBlock * block);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * INT2
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define CRTC_DBLSCAN (1<<0)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define CRTC_INTERLACE (1<<1)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define CRTC_NHSYNC (1<<2)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define CRTC_NVSYNC (1<<3)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncstruct _VbeCRTCInfoBlock {
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD16 HorizontalTotal; /* Horizontal total in pixels */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD16 HorizontalSyncStart; /* Horizontal sync start in pixels */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD16 HorizontalSyncEnd; /* Horizontal sync end in pixels */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD16 VerticalTotal; /* Vertical total in lines */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD16 VerticalSyncStart; /* Vertical sync start in lines */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD16 VerticalSyncEnd; /* Vertical sync end in lines */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 Flags; /* Flags (Interlaced, Double Scan etc) */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD32 PixelClock; /* Pixel clock in units of Hz */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD16 RefreshRate; /* Refresh rate in units of 0.01 Hz */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 Reserved[40]; /* remainder of ModeInfoBlock */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync} __attribute__ ((packed));
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/* VbeCRTCInfoBlock is in the VESA 3.0 specs */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern _X_EXPORT Bool VBESetVBEMode(vbeInfoPtr pVbe, int mode,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VbeCRTCInfoBlock * crtc);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * INT 3
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern _X_EXPORT Bool VBEGetVBEMode(vbeInfoPtr pVbe, int *mode);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * INT 4
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/* Save/Restore Super VGA video state */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/* function values are (values stored in VESAPtr):
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * 0 := query & allocate amount of memory to save state
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * 1 := save state
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * 2 := restore state
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync *
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * function 0 called automatically if function 1 called without
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * a previous call to function 0.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsynctypedef enum {
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync MODE_QUERY,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync MODE_SAVE,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync MODE_RESTORE
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync} vbeSaveRestoreFunction;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern _X_EXPORT Bool
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncVBESaveRestore(vbeInfoPtr pVbe, vbeSaveRestoreFunction fuction,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync void **memory, int *size, int *real_mode_pages);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * INT 5
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern _X_EXPORT Bool
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VBEBankSwitch(vbeInfoPtr pVbe, unsigned int iBank, int window);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * INT 6
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsynctypedef enum {
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync SCANWID_SET,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync SCANWID_GET,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync SCANWID_SET_BYTES,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync SCANWID_GET_MAX
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync} vbeScanwidthCommand;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define VBESetLogicalScanline(pVbe, width) \
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VBESetGetLogicalScanlineLength(pVbe, SCANWID_SET, width, \
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync NULL, NULL, NULL)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define VBESetLogicalScanlineBytes(pVbe, width) \
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VBESetGetLogicalScanlineLength(pVbe, SCANWID_SET_BYTES, width, \
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync NULL, NULL, NULL)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define VBEGetLogicalScanline(pVbe, pixels, bytes, max) \
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VBESetGetLogicalScanlineLength(pVbe, SCANWID_GET, 0, \
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync pixels, bytes, max)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define VBEGetMaxLogicalScanline(pVbe, pixels, bytes, max) \
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VBESetGetLogicalScanlineLength(pVbe, SCANWID_GET_MAX, 0, \
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync pixels, bytes, max)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern _X_EXPORT Bool VBESetGetLogicalScanlineLength(vbeInfoPtr pVbe,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync vbeScanwidthCommand
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync command, int width,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int *pixels, int *bytes,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int *max);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * INT 7
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/* 16 bit code */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern _X_EXPORT Bool VBESetDisplayStart(vbeInfoPtr pVbe, int x, int y,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync Bool wait_retrace);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern _X_EXPORT Bool VBEGetDisplayStart(vbeInfoPtr pVbe, int *x, int *y);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * INT 8
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/* if bits is 0, then it is a GET */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern _X_EXPORT int VBESetGetDACPaletteFormat(vbeInfoPtr pVbe, int bits);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * INT 9
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * If getting a palette, the data argument is not used. It will return
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * the data.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * If setting a palette, it will return the pointer received on success,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * NULL on failure.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern _X_EXPORT CARD32 *VBESetGetPaletteData(vbeInfoPtr pVbe, Bool set,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int first, int num, CARD32 *data,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync Bool secondary,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync Bool wait_retrace);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define VBEFreePaletteData(data) free(data)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * INT A
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsynctypedef struct _VBEpmi {
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int seg_tbl;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int tbl_off;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int tbl_len;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync} VBEpmi;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern _X_EXPORT VBEpmi *VBEGetVBEpmi(vbeInfoPtr pVbe);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define VESAFreeVBEpmi(pmi) free(pmi)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/* high level helper functions */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsynctypedef struct _vbeModeInfoRec {
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int width;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int height;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int bpp;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int n;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync struct _vbeModeInfoRec *next;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync} vbeModeInfoRec, *vbeModeInfoPtr;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsynctypedef struct {
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 *state;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 *pstate;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int statePage;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int stateSize;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int stateMode;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync} vbeSaveRestoreRec, *vbeSaveRestorePtr;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern _X_EXPORT void
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncVBEVesaSaveRestore(vbeInfoPtr pVbe, vbeSaveRestorePtr vbe_sr,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync vbeSaveRestoreFunction function);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern _X_EXPORT int VBEGetPixelClock(vbeInfoPtr pVbe, int mode, int Clock);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern _X_EXPORT Bool VBEDPMSSet(vbeInfoPtr pVbe, int mode);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncstruct vbePanelID {
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync short hsize;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync short vsize;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync short fptype;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync char redbpp;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync char greenbpp;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync char bluebpp;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync char reservedbpp;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int reserved_offscreen_mem_size;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int reserved_offscreen_mem_pointer;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync char reserved[14];
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync};
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern _X_EXPORT void VBEInterpretPanelID(ScrnInfoPtr pScrn,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync struct vbePanelID *data);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern _X_EXPORT struct vbePanelID *VBEReadPanelID(vbeInfoPtr pVbe);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#endif