#ifndef _VBE_H
#define _VBE_H
#include "xf86int10.h"
#include "xf86DDC.h"
typedef enum {
DDC_UNCHECKED,
DDC_NONE,
DDC_1,
DDC_2,
DDC_1_2
}
ddc_lvl;
typedef struct {
xf86Int10InfoPtr pInt10;
int version;
pointer memory;
int real_mode_base;
int num_pages;
Bool init_int10;
ddc_lvl ddc;
Bool ddc_blank;
} vbeInfoRec, *vbeInfoPtr;
#define VBE_VERSION_MAJOR(x) *((CARD8*)(&x) + 1)
#define VBE_VERSION_MINOR(x) (CARD8)(x)
vbeInfoPtr VBEInit(xf86Int10InfoPtr pInt, int entityIndex);
vbeInfoPtr VBEExtendedInit(xf86Int10InfoPtr pInt, int entityIndex, int Flags);
void vbeFree(vbeInfoPtr pVbe);
xf86MonPtr vbeDoEDID(vbeInfoPtr pVbe, pointer pDDCModule);
#pragma pack(1)
typedef struct vbeControllerInfoBlock {
CARD8 VbeSignature[4];
CARD16 VbeVersion;
CARD32 OemStringPtr;
CARD8 Capabilities[4];
CARD32 VideoModePtr;
CARD16 TotalMem;
CARD16 OemSoftwareRev;
CARD32 OemVendorNamePtr;
CARD32 OemProductNamePtr;
CARD32 OemProductRevPtr;
CARD8 Scratch[222];
CARD8 OemData[256];
} vbeControllerInfoRec, *vbeControllerInfoPtr;
#if defined(__GNUC__) || defined(__USLC__) || defined(__SUNPRO_C)
#pragma pack()
#else
#pragma pack(0)
#endif
#ifndef __GNUC__
#define __attribute__(a)
#endif
typedef struct _VbeInfoBlock VbeInfoBlock;
typedef struct _VbeModeInfoBlock VbeModeInfoBlock;
typedef struct _VbeCRTCInfoBlock VbeCRTCInfoBlock;
struct _VbeInfoBlock {
CARD8 VESASignature[4];
CARD16 VESAVersion;
char *OEMStringPtr;
CARD8 Capabilities[4];
CARD16 *VideoModePtr;
CARD16 TotalMemory;
CARD16 OemSoftwareRev;
char *OemVendorNamePtr;
char *OemProductNamePtr;
char *OemProductRevPtr;
CARD8 Reserved[222];
CARD8 OemData[256];
} __attribute__((packed));
VbeInfoBlock *VBEGetVBEInfo(vbeInfoPtr pVbe);
void VBEFreeVBEInfo(VbeInfoBlock *block);
struct _VbeModeInfoBlock {
CARD16 ModeAttributes;
CARD8 WinAAttributes;
CARD8 WinBAttributes;
CARD16 WinGranularity;
CARD16 WinSize;
CARD16 WinASegment;
CARD16 WinBSegment;
CARD32 WinFuncPtr;
CARD16 BytesPerScanline;
CARD16 XResolution;
CARD16 YResolution;
CARD8 XCharSize;
CARD8 YCharSize;
CARD8 NumberOfPlanes;
CARD8 BitsPerPixel;
CARD8 NumberOfBanks;
CARD8 MemoryModel;
CARD8 BankSize;
CARD8 NumberOfImages;
CARD8 Reserved;
CARD8 RedMaskSize;
CARD8 RedFieldPosition;
CARD8 GreenMaskSize;
CARD8 GreenFieldPosition;
CARD8 BlueMaskSize;
CARD8 BlueFieldPosition;
CARD8 RsvdMaskSize;
CARD8 RsvdFieldPosition;
CARD8 DirectColorModeInfo;
CARD32 PhysBasePtr;
CARD32 Reserved32;
CARD16 Reserved16;
CARD16 LinBytesPerScanLine;
CARD8 BnkNumberOfImagePages;
CARD8 LinNumberOfImagePages;
CARD8 LinRedMaskSize;
CARD8 LinRedFieldPosition;
CARD8 LinGreenMaskSize;
CARD8 LinGreenFieldPosition;
CARD8 LinBlueMaskSize;
CARD8 LinBlueFieldPosition;
CARD8 LinRsvdMaskSize;
CARD8 LinRsvdFieldPosition;
CARD32 MaxPixelClock;
CARD8 Reserved2[189];
} __attribute__((packed));
VbeModeInfoBlock *VBEGetModeInfo(vbeInfoPtr pVbe, int mode);
void VBEFreeModeInfo(VbeModeInfoBlock *block);
#define CRTC_DBLSCAN (1<<0)
#define CRTC_INTERLACE (1<<1)
#define CRTC_NHSYNC (1<<2)
#define CRTC_NVSYNC (1<<3)
struct _VbeCRTCInfoBlock {
CARD16 HorizontalTotal;
CARD16 HorizontalSyncStart;
CARD16 HorizontalSyncEnd;
CARD16 VerticalTotal;
CARD16 VerticalSyncStart;
CARD16 VerticalSyncEnd;
CARD8 Flags;
CARD32 PixelClock;
CARD16 RefreshRate;
CARD8 Reserved[40];
} __attribute__((packed));
Bool VBESetVBEMode(vbeInfoPtr pVbe, int mode, VbeCRTCInfoBlock *crtc);
Bool VBEGetVBEMode(vbeInfoPtr pVbe, int *mode);
typedef enum {
MODE_QUERY,
MODE_SAVE,
MODE_RESTORE
} vbeSaveRestoreFunction;
Bool
VBESaveRestore(vbeInfoPtr pVbe, vbeSaveRestoreFunction fuction,
pointer *memory, int *size, int *real_mode_pages);
Bool
VBEBankSwitch(vbeInfoPtr pVbe, unsigned int iBank, int window);
typedef enum {
SCANWID_SET,
SCANWID_GET,
SCANWID_SET_BYTES,
SCANWID_GET_MAX
} vbeScanwidthCommand;
#define VBESetLogicalScanline(pVbe, width) \
VBESetGetLogicalScanlineLength(pVbe, SCANWID_SET, width, \
NULL, NULL, NULL)
#define VBESetLogicalScanlineBytes(pVbe, width) \
VBESetGetLogicalScanlineLength(pVbe, SCANWID_SET_BYTES, width, \
NULL, NULL, NULL)
#define VBEGetLogicalScanline(pVbe, pixels, bytes, max) \
VBESetGetLogicalScanlineLength(pVbe, SCANWID_GET, 0, \
pixels, bytes, max)
#define VBEGetMaxLogicalScanline(pVbe, pixels, bytes, max) \
VBESetGetLogicalScanlineLength(pVbe, SCANWID_GET_MAX, 0, \
pixels, bytes, max)
Bool VBESetGetLogicalScanlineLength(vbeInfoPtr pVbe,
vbeScanwidthCommand command, int width,
int *pixels, int *bytes, int *max);
Bool VBESetDisplayStart(vbeInfoPtr pVbe, int x, int y, Bool wait_retrace);
Bool VBEGetDisplayStart(vbeInfoPtr pVbe, int *x, int *y);
int VBESetGetDACPaletteFormat(vbeInfoPtr pVbe, int bits);
CARD32 *VBESetGetPaletteData(vbeInfoPtr pVbe, Bool set, int first, int num,
CARD32 *data, Bool secondary, Bool wait_retrace);
#define VBEFreePaletteData(data) xfree(data)
typedef struct _VBEpmi {
int seg_tbl;
int tbl_off;
int tbl_len;
} VBEpmi;
VBEpmi *VBEGetVBEpmi(vbeInfoPtr pVbe);
#define VESAFreeVBEpmi(pmi) xfree(pmi)
typedef struct _vbeModeInfoRec {
int width;
int height;
int bpp;
int n;
struct _vbeModeInfoRec *next;
} vbeModeInfoRec, *vbeModeInfoPtr;
vbeModeInfoPtr VBEBuildVbeModeList(vbeInfoPtr pVbe,
VbeInfoBlock *vbe);
unsigned short VBECalcVbeModeIndex(vbeModeInfoPtr m,
DisplayModePtr mode, int bpp);
typedef struct {
CARD8 *state;
CARD8 *pstate;
int statePage;
int stateSize;
int stateMode;
} vbeSaveRestoreRec, *vbeSaveRestorePtr;
void
VBEVesaSaveRestore(vbeInfoPtr pVbe, vbeSaveRestorePtr vbe_sr,
vbeSaveRestoreFunction function);
int VBEGetPixelClock(vbeInfoPtr pVbe, int mode, int Clock);
Bool VBEDPMSSet(vbeInfoPtr pVbe, int mode);
struct vbePanelID {
short hsize;
short vsize;
short fptype;
char redbpp;
char greenbpp;
char bluebpp;
char reservedbpp;
int reserved_offscreen_mem_size;
int reserved_offscreen_mem_pointer;
char reserved[14];
};
void VBEInterpretPanelID(int scrnIndex, struct vbePanelID *data);
struct vbePanelID *VBEReadPanelID(vbeInfoPtr pVbe);
#endif