1*4882a593Smuzhiyun 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * XFree86 vbe module 4*4882a593Smuzhiyun * Copyright 2000 Egbert Eich 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * The mode query/save/set/restore functions from the vesa driver 7*4882a593Smuzhiyun * have been moved here. 8*4882a593Smuzhiyun * Copyright (c) 2000 by Conectiva S.A. (http://www.conectiva.com) 9*4882a593Smuzhiyun * Authors: Paulo César Pereira de Andrade <pcpa@conectiva.com.br> 10*4882a593Smuzhiyun */ 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #ifndef _VBE_H 13*4882a593Smuzhiyun #define _VBE_H 14*4882a593Smuzhiyun #include "xf86int10.h" 15*4882a593Smuzhiyun #include "xf86DDC.h" 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun typedef enum { 18*4882a593Smuzhiyun DDC_UNCHECKED, 19*4882a593Smuzhiyun DDC_NONE, 20*4882a593Smuzhiyun DDC_1, 21*4882a593Smuzhiyun DDC_2, 22*4882a593Smuzhiyun DDC_1_2 23*4882a593Smuzhiyun } ddc_lvl; 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun typedef struct { 26*4882a593Smuzhiyun xf86Int10InfoPtr pInt10; 27*4882a593Smuzhiyun int version; 28*4882a593Smuzhiyun void *memory; 29*4882a593Smuzhiyun int real_mode_base; 30*4882a593Smuzhiyun int num_pages; 31*4882a593Smuzhiyun Bool init_int10; 32*4882a593Smuzhiyun ddc_lvl ddc; 33*4882a593Smuzhiyun Bool ddc_blank; 34*4882a593Smuzhiyun } vbeInfoRec, *vbeInfoPtr; 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun #define VBE_VERSION_MAJOR(x) *((CARD8*)(&x) + 1) 37*4882a593Smuzhiyun #define VBE_VERSION_MINOR(x) (CARD8)(x) 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun extern _X_EXPORT vbeInfoPtr VBEInit(xf86Int10InfoPtr pInt, int entityIndex); 40*4882a593Smuzhiyun extern _X_EXPORT vbeInfoPtr VBEExtendedInit(xf86Int10InfoPtr pInt, 41*4882a593Smuzhiyun int entityIndex, int Flags); 42*4882a593Smuzhiyun extern _X_EXPORT void vbeFree(vbeInfoPtr pVbe); 43*4882a593Smuzhiyun extern _X_EXPORT xf86MonPtr vbeDoEDID(vbeInfoPtr pVbe, void *pDDCModule); 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun #pragma pack(1) 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun typedef struct vbeControllerInfoBlock { 48*4882a593Smuzhiyun CARD8 VbeSignature[4]; 49*4882a593Smuzhiyun CARD16 VbeVersion; 50*4882a593Smuzhiyun CARD32 OemStringPtr; 51*4882a593Smuzhiyun CARD8 Capabilities[4]; 52*4882a593Smuzhiyun CARD32 VideoModePtr; 53*4882a593Smuzhiyun CARD16 TotalMem; 54*4882a593Smuzhiyun CARD16 OemSoftwareRev; 55*4882a593Smuzhiyun CARD32 OemVendorNamePtr; 56*4882a593Smuzhiyun CARD32 OemProductNamePtr; 57*4882a593Smuzhiyun CARD32 OemProductRevPtr; 58*4882a593Smuzhiyun CARD8 Scratch[222]; 59*4882a593Smuzhiyun CARD8 OemData[256]; 60*4882a593Smuzhiyun } vbeControllerInfoRec, *vbeControllerInfoPtr; 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun #if defined(__GNUC__) || defined(__USLC__) || defined(__SUNPRO_C) 63*4882a593Smuzhiyun #pragma pack() /* All GCC versions recognise this syntax */ 64*4882a593Smuzhiyun #else 65*4882a593Smuzhiyun #pragma pack(0) 66*4882a593Smuzhiyun #endif 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun #if !( defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) ) 69*4882a593Smuzhiyun #define __attribute__(a) 70*4882a593Smuzhiyun #endif 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun typedef struct _VbeInfoBlock VbeInfoBlock; 73*4882a593Smuzhiyun typedef struct _VbeModeInfoBlock VbeModeInfoBlock; 74*4882a593Smuzhiyun typedef struct _VbeCRTCInfoBlock VbeCRTCInfoBlock; 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun /* 77*4882a593Smuzhiyun * INT 0 78*4882a593Smuzhiyun */ 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun struct _VbeInfoBlock { 81*4882a593Smuzhiyun /* VESA 1.2 fields */ 82*4882a593Smuzhiyun CARD8 VESASignature[4]; /* VESA */ 83*4882a593Smuzhiyun CARD16 VESAVersion; /* Higher byte major, lower byte minor */ 84*4882a593Smuzhiyun /*CARD32 */ char *OEMStringPtr; 85*4882a593Smuzhiyun /* Pointer to OEM string */ 86*4882a593Smuzhiyun CARD8 Capabilities[4]; /* Capabilities of the video environment */ 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun /*CARD32 */ CARD16 *VideoModePtr; 89*4882a593Smuzhiyun /* pointer to supported Super VGA modes */ 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun CARD16 TotalMemory; /* Number of 64kb memory blocks on board */ 92*4882a593Smuzhiyun /* if not VESA 2, 236 scratch bytes follow (256 bytes total size) */ 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun /* VESA 2 fields */ 95*4882a593Smuzhiyun CARD16 OemSoftwareRev; /* VBE implementation Software revision */ 96*4882a593Smuzhiyun /*CARD32 */ char *OemVendorNamePtr; 97*4882a593Smuzhiyun /* Pointer to Vendor Name String */ 98*4882a593Smuzhiyun /*CARD32 */ char *OemProductNamePtr; 99*4882a593Smuzhiyun /* Pointer to Product Name String */ 100*4882a593Smuzhiyun /*CARD32 */ char *OemProductRevPtr; 101*4882a593Smuzhiyun /* Pointer to Product Revision String */ 102*4882a593Smuzhiyun CARD8 Reserved[222]; /* Reserved for VBE implementation */ 103*4882a593Smuzhiyun CARD8 OemData[256]; /* Data Area for OEM Strings */ 104*4882a593Smuzhiyun } __attribute__ ((packed)); 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun /* Return Super VGA Information */ 107*4882a593Smuzhiyun extern _X_EXPORT VbeInfoBlock *VBEGetVBEInfo(vbeInfoPtr pVbe); 108*4882a593Smuzhiyun extern _X_EXPORT void VBEFreeVBEInfo(VbeInfoBlock * block); 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun /* 111*4882a593Smuzhiyun * INT 1 112*4882a593Smuzhiyun */ 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun struct _VbeModeInfoBlock { 115*4882a593Smuzhiyun CARD16 ModeAttributes; /* mode attributes */ 116*4882a593Smuzhiyun CARD8 WinAAttributes; /* window A attributes */ 117*4882a593Smuzhiyun CARD8 WinBAttributes; /* window B attributes */ 118*4882a593Smuzhiyun CARD16 WinGranularity; /* window granularity */ 119*4882a593Smuzhiyun CARD16 WinSize; /* window size */ 120*4882a593Smuzhiyun CARD16 WinASegment; /* window A start segment */ 121*4882a593Smuzhiyun CARD16 WinBSegment; /* window B start segment */ 122*4882a593Smuzhiyun CARD32 WinFuncPtr; /* real mode pointer to window function */ 123*4882a593Smuzhiyun CARD16 BytesPerScanline; /* bytes per scanline */ 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun /* Mandatory information for VBE 1.2 and above */ 126*4882a593Smuzhiyun CARD16 XResolution; /* horizontal resolution in pixels or characters */ 127*4882a593Smuzhiyun CARD16 YResolution; /* vertical resolution in pixels or characters */ 128*4882a593Smuzhiyun CARD8 XCharSize; /* character cell width in pixels */ 129*4882a593Smuzhiyun CARD8 YCharSize; /* character cell height in pixels */ 130*4882a593Smuzhiyun CARD8 NumberOfPlanes; /* number of memory planes */ 131*4882a593Smuzhiyun CARD8 BitsPerPixel; /* bits per pixel */ 132*4882a593Smuzhiyun CARD8 NumberOfBanks; /* number of banks */ 133*4882a593Smuzhiyun CARD8 MemoryModel; /* memory model type */ 134*4882a593Smuzhiyun CARD8 BankSize; /* bank size in KB */ 135*4882a593Smuzhiyun CARD8 NumberOfImages; /* number of images */ 136*4882a593Smuzhiyun CARD8 Reserved; /* 1 *//* reserved for page function */ 137*4882a593Smuzhiyun 138*4882a593Smuzhiyun /* Direct color fields (required for direct/6 and YUV/7 memory models) */ 139*4882a593Smuzhiyun CARD8 RedMaskSize; /* size of direct color red mask in bits */ 140*4882a593Smuzhiyun CARD8 RedFieldPosition; /* bit position of lsb of red mask */ 141*4882a593Smuzhiyun CARD8 GreenMaskSize; /* size of direct color green mask in bits */ 142*4882a593Smuzhiyun CARD8 GreenFieldPosition; /* bit position of lsb of green mask */ 143*4882a593Smuzhiyun CARD8 BlueMaskSize; /* size of direct color blue mask in bits */ 144*4882a593Smuzhiyun CARD8 BlueFieldPosition; /* bit position of lsb of blue mask */ 145*4882a593Smuzhiyun CARD8 RsvdMaskSize; /* size of direct color reserved mask in bits */ 146*4882a593Smuzhiyun CARD8 RsvdFieldPosition; /* bit position of lsb of reserved mask */ 147*4882a593Smuzhiyun CARD8 DirectColorModeInfo; /* direct color mode attributes */ 148*4882a593Smuzhiyun 149*4882a593Smuzhiyun /* Mandatory information for VBE 2.0 and above */ 150*4882a593Smuzhiyun CARD32 PhysBasePtr; /* physical address for flat memory frame buffer */ 151*4882a593Smuzhiyun CARD32 Reserved32; /* 0 *//* Reserved - always set to 0 */ 152*4882a593Smuzhiyun CARD16 Reserved16; /* 0 *//* Reserved - always set to 0 */ 153*4882a593Smuzhiyun 154*4882a593Smuzhiyun /* Mandatory information for VBE 3.0 and above */ 155*4882a593Smuzhiyun CARD16 LinBytesPerScanLine; /* bytes per scan line for linear modes */ 156*4882a593Smuzhiyun CARD8 BnkNumberOfImagePages; /* number of images for banked modes */ 157*4882a593Smuzhiyun CARD8 LinNumberOfImagePages; /* number of images for linear modes */ 158*4882a593Smuzhiyun CARD8 LinRedMaskSize; /* size of direct color red mask (linear modes) */ 159*4882a593Smuzhiyun CARD8 LinRedFieldPosition; /* bit position of lsb of red mask (linear modes) */ 160*4882a593Smuzhiyun CARD8 LinGreenMaskSize; /* size of direct color green mask (linear modes) */ 161*4882a593Smuzhiyun CARD8 LinGreenFieldPosition; /* bit position of lsb of green mask (linear modes) */ 162*4882a593Smuzhiyun CARD8 LinBlueMaskSize; /* size of direct color blue mask (linear modes) */ 163*4882a593Smuzhiyun CARD8 LinBlueFieldPosition; /* bit position of lsb of blue mask (linear modes) */ 164*4882a593Smuzhiyun CARD8 LinRsvdMaskSize; /* size of direct color reserved mask (linear modes) */ 165*4882a593Smuzhiyun CARD8 LinRsvdFieldPosition; /* bit position of lsb of reserved mask (linear modes) */ 166*4882a593Smuzhiyun CARD32 MaxPixelClock; /* maximum pixel clock (in Hz) for graphics mode */ 167*4882a593Smuzhiyun CARD8 Reserved2[189]; /* remainder of VbeModeInfoBlock */ 168*4882a593Smuzhiyun } __attribute__ ((packed)); 169*4882a593Smuzhiyun 170*4882a593Smuzhiyun /* Return VBE Mode Information */ 171*4882a593Smuzhiyun extern _X_EXPORT VbeModeInfoBlock *VBEGetModeInfo(vbeInfoPtr pVbe, int mode); 172*4882a593Smuzhiyun extern _X_EXPORT void VBEFreeModeInfo(VbeModeInfoBlock * block); 173*4882a593Smuzhiyun 174*4882a593Smuzhiyun /* 175*4882a593Smuzhiyun * INT2 176*4882a593Smuzhiyun */ 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun #define CRTC_DBLSCAN (1<<0) 179*4882a593Smuzhiyun #define CRTC_INTERLACE (1<<1) 180*4882a593Smuzhiyun #define CRTC_NHSYNC (1<<2) 181*4882a593Smuzhiyun #define CRTC_NVSYNC (1<<3) 182*4882a593Smuzhiyun 183*4882a593Smuzhiyun struct _VbeCRTCInfoBlock { 184*4882a593Smuzhiyun CARD16 HorizontalTotal; /* Horizontal total in pixels */ 185*4882a593Smuzhiyun CARD16 HorizontalSyncStart; /* Horizontal sync start in pixels */ 186*4882a593Smuzhiyun CARD16 HorizontalSyncEnd; /* Horizontal sync end in pixels */ 187*4882a593Smuzhiyun CARD16 VerticalTotal; /* Vertical total in lines */ 188*4882a593Smuzhiyun CARD16 VerticalSyncStart; /* Vertical sync start in lines */ 189*4882a593Smuzhiyun CARD16 VerticalSyncEnd; /* Vertical sync end in lines */ 190*4882a593Smuzhiyun CARD8 Flags; /* Flags (Interlaced, Double Scan etc) */ 191*4882a593Smuzhiyun CARD32 PixelClock; /* Pixel clock in units of Hz */ 192*4882a593Smuzhiyun CARD16 RefreshRate; /* Refresh rate in units of 0.01 Hz */ 193*4882a593Smuzhiyun CARD8 Reserved[40]; /* remainder of ModeInfoBlock */ 194*4882a593Smuzhiyun } __attribute__ ((packed)); 195*4882a593Smuzhiyun 196*4882a593Smuzhiyun /* VbeCRTCInfoBlock is in the VESA 3.0 specs */ 197*4882a593Smuzhiyun 198*4882a593Smuzhiyun extern _X_EXPORT Bool VBESetVBEMode(vbeInfoPtr pVbe, int mode, 199*4882a593Smuzhiyun VbeCRTCInfoBlock * crtc); 200*4882a593Smuzhiyun 201*4882a593Smuzhiyun /* 202*4882a593Smuzhiyun * INT 3 203*4882a593Smuzhiyun */ 204*4882a593Smuzhiyun 205*4882a593Smuzhiyun extern _X_EXPORT Bool VBEGetVBEMode(vbeInfoPtr pVbe, int *mode); 206*4882a593Smuzhiyun 207*4882a593Smuzhiyun /* 208*4882a593Smuzhiyun * INT 4 209*4882a593Smuzhiyun */ 210*4882a593Smuzhiyun 211*4882a593Smuzhiyun /* Save/Restore Super VGA video state */ 212*4882a593Smuzhiyun /* function values are (values stored in VESAPtr): 213*4882a593Smuzhiyun * 0 := query & allocate amount of memory to save state 214*4882a593Smuzhiyun * 1 := save state 215*4882a593Smuzhiyun * 2 := restore state 216*4882a593Smuzhiyun * 217*4882a593Smuzhiyun * function 0 called automatically if function 1 called without 218*4882a593Smuzhiyun * a previous call to function 0. 219*4882a593Smuzhiyun */ 220*4882a593Smuzhiyun 221*4882a593Smuzhiyun typedef enum { 222*4882a593Smuzhiyun MODE_QUERY, 223*4882a593Smuzhiyun MODE_SAVE, 224*4882a593Smuzhiyun MODE_RESTORE 225*4882a593Smuzhiyun } vbeSaveRestoreFunction; 226*4882a593Smuzhiyun 227*4882a593Smuzhiyun extern _X_EXPORT Bool 228*4882a593Smuzhiyun 229*4882a593Smuzhiyun VBESaveRestore(vbeInfoPtr pVbe, vbeSaveRestoreFunction fuction, 230*4882a593Smuzhiyun void **memory, int *size, int *real_mode_pages); 231*4882a593Smuzhiyun 232*4882a593Smuzhiyun /* 233*4882a593Smuzhiyun * INT 5 234*4882a593Smuzhiyun */ 235*4882a593Smuzhiyun 236*4882a593Smuzhiyun extern _X_EXPORT Bool 237*4882a593Smuzhiyun VBEBankSwitch(vbeInfoPtr pVbe, unsigned int iBank, int window); 238*4882a593Smuzhiyun 239*4882a593Smuzhiyun /* 240*4882a593Smuzhiyun * INT 6 241*4882a593Smuzhiyun */ 242*4882a593Smuzhiyun 243*4882a593Smuzhiyun typedef enum { 244*4882a593Smuzhiyun SCANWID_SET, 245*4882a593Smuzhiyun SCANWID_GET, 246*4882a593Smuzhiyun SCANWID_SET_BYTES, 247*4882a593Smuzhiyun SCANWID_GET_MAX 248*4882a593Smuzhiyun } vbeScanwidthCommand; 249*4882a593Smuzhiyun 250*4882a593Smuzhiyun #define VBESetLogicalScanline(pVbe, width) \ 251*4882a593Smuzhiyun VBESetGetLogicalScanlineLength(pVbe, SCANWID_SET, width, \ 252*4882a593Smuzhiyun NULL, NULL, NULL) 253*4882a593Smuzhiyun #define VBESetLogicalScanlineBytes(pVbe, width) \ 254*4882a593Smuzhiyun VBESetGetLogicalScanlineLength(pVbe, SCANWID_SET_BYTES, width, \ 255*4882a593Smuzhiyun NULL, NULL, NULL) 256*4882a593Smuzhiyun #define VBEGetLogicalScanline(pVbe, pixels, bytes, max) \ 257*4882a593Smuzhiyun VBESetGetLogicalScanlineLength(pVbe, SCANWID_GET, 0, \ 258*4882a593Smuzhiyun pixels, bytes, max) 259*4882a593Smuzhiyun #define VBEGetMaxLogicalScanline(pVbe, pixels, bytes, max) \ 260*4882a593Smuzhiyun VBESetGetLogicalScanlineLength(pVbe, SCANWID_GET_MAX, 0, \ 261*4882a593Smuzhiyun pixels, bytes, max) 262*4882a593Smuzhiyun extern _X_EXPORT Bool VBESetGetLogicalScanlineLength(vbeInfoPtr pVbe, 263*4882a593Smuzhiyun vbeScanwidthCommand 264*4882a593Smuzhiyun command, int width, 265*4882a593Smuzhiyun int *pixels, int *bytes, 266*4882a593Smuzhiyun int *max); 267*4882a593Smuzhiyun 268*4882a593Smuzhiyun /* 269*4882a593Smuzhiyun * INT 7 270*4882a593Smuzhiyun */ 271*4882a593Smuzhiyun 272*4882a593Smuzhiyun /* 16 bit code */ 273*4882a593Smuzhiyun extern _X_EXPORT Bool VBESetDisplayStart(vbeInfoPtr pVbe, int x, int y, 274*4882a593Smuzhiyun Bool wait_retrace); 275*4882a593Smuzhiyun extern _X_EXPORT Bool VBEGetDisplayStart(vbeInfoPtr pVbe, int *x, int *y); 276*4882a593Smuzhiyun 277*4882a593Smuzhiyun /* 278*4882a593Smuzhiyun * INT 8 279*4882a593Smuzhiyun */ 280*4882a593Smuzhiyun 281*4882a593Smuzhiyun /* if bits is 0, then it is a GET */ 282*4882a593Smuzhiyun extern _X_EXPORT int VBESetGetDACPaletteFormat(vbeInfoPtr pVbe, int bits); 283*4882a593Smuzhiyun 284*4882a593Smuzhiyun /* 285*4882a593Smuzhiyun * INT 9 286*4882a593Smuzhiyun */ 287*4882a593Smuzhiyun 288*4882a593Smuzhiyun /* 289*4882a593Smuzhiyun * If getting a palette, the data argument is not used. It will return 290*4882a593Smuzhiyun * the data. 291*4882a593Smuzhiyun * If setting a palette, it will return the pointer received on success, 292*4882a593Smuzhiyun * NULL on failure. 293*4882a593Smuzhiyun */ 294*4882a593Smuzhiyun extern _X_EXPORT CARD32 *VBESetGetPaletteData(vbeInfoPtr pVbe, Bool set, 295*4882a593Smuzhiyun int first, int num, CARD32 *data, 296*4882a593Smuzhiyun Bool secondary, 297*4882a593Smuzhiyun Bool wait_retrace); 298*4882a593Smuzhiyun #define VBEFreePaletteData(data) free(data) 299*4882a593Smuzhiyun 300*4882a593Smuzhiyun /* 301*4882a593Smuzhiyun * INT A 302*4882a593Smuzhiyun */ 303*4882a593Smuzhiyun 304*4882a593Smuzhiyun typedef struct _VBEpmi { 305*4882a593Smuzhiyun int seg_tbl; 306*4882a593Smuzhiyun int tbl_off; 307*4882a593Smuzhiyun int tbl_len; 308*4882a593Smuzhiyun } VBEpmi; 309*4882a593Smuzhiyun 310*4882a593Smuzhiyun extern _X_EXPORT VBEpmi *VBEGetVBEpmi(vbeInfoPtr pVbe); 311*4882a593Smuzhiyun 312*4882a593Smuzhiyun #define VESAFreeVBEpmi(pmi) free(pmi) 313*4882a593Smuzhiyun 314*4882a593Smuzhiyun /* high level helper functions */ 315*4882a593Smuzhiyun 316*4882a593Smuzhiyun typedef struct _vbeModeInfoRec { 317*4882a593Smuzhiyun int width; 318*4882a593Smuzhiyun int height; 319*4882a593Smuzhiyun int bpp; 320*4882a593Smuzhiyun int n; 321*4882a593Smuzhiyun struct _vbeModeInfoRec *next; 322*4882a593Smuzhiyun } vbeModeInfoRec, *vbeModeInfoPtr; 323*4882a593Smuzhiyun 324*4882a593Smuzhiyun typedef struct { 325*4882a593Smuzhiyun CARD8 *state; 326*4882a593Smuzhiyun CARD8 *pstate; 327*4882a593Smuzhiyun int statePage; 328*4882a593Smuzhiyun int stateSize; 329*4882a593Smuzhiyun int stateMode; 330*4882a593Smuzhiyun } vbeSaveRestoreRec, *vbeSaveRestorePtr; 331*4882a593Smuzhiyun 332*4882a593Smuzhiyun extern _X_EXPORT void 333*4882a593Smuzhiyun 334*4882a593Smuzhiyun VBEVesaSaveRestore(vbeInfoPtr pVbe, vbeSaveRestorePtr vbe_sr, 335*4882a593Smuzhiyun vbeSaveRestoreFunction function); 336*4882a593Smuzhiyun 337*4882a593Smuzhiyun extern _X_EXPORT int VBEGetPixelClock(vbeInfoPtr pVbe, int mode, int Clock); 338*4882a593Smuzhiyun extern _X_EXPORT Bool VBEDPMSSet(vbeInfoPtr pVbe, int mode); 339*4882a593Smuzhiyun 340*4882a593Smuzhiyun struct vbePanelID { 341*4882a593Smuzhiyun short hsize; 342*4882a593Smuzhiyun short vsize; 343*4882a593Smuzhiyun short fptype; 344*4882a593Smuzhiyun char redbpp; 345*4882a593Smuzhiyun char greenbpp; 346*4882a593Smuzhiyun char bluebpp; 347*4882a593Smuzhiyun char reservedbpp; 348*4882a593Smuzhiyun int reserved_offscreen_mem_size; 349*4882a593Smuzhiyun int reserved_offscreen_mem_pointer; 350*4882a593Smuzhiyun char reserved[14]; 351*4882a593Smuzhiyun }; 352*4882a593Smuzhiyun 353*4882a593Smuzhiyun extern _X_EXPORT void VBEInterpretPanelID(ScrnInfoPtr pScrn, 354*4882a593Smuzhiyun struct vbePanelID *data); 355*4882a593Smuzhiyun extern _X_EXPORT struct vbePanelID *VBEReadPanelID(vbeInfoPtr pVbe); 356*4882a593Smuzhiyun 357*4882a593Smuzhiyun #endif 358