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