Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:23:41

0001 /**
0002  * @file
0003  *
0004  * @ingroup RTEMSBSPsI386
0005  *
0006  * @brief VESA Bios Extension definitions.
0007  *
0008  * This file contains definitions for constants related to VBE.
0009  *         More information can be found at
0010  *     <http://www.vesa.org/vesa-standards/free-standards/>.
0011  *         VESA public standards may be found at
0012  *     <http://www.vesa.org/wp-content/uploads/2010/12/thankspublic.htm>.
0013  */
0014 
0015 /*
0016  * Copyright (C) 2014  Jan Doležal (dolezj21@fel.cvut.cz)
0017  *                     CTU in Prague.
0018  *
0019  *  The license and distribution terms for this file may be
0020  *  found in the file LICENSE in this distribution or at
0021  *  http://www.rtems.org/license/LICENSE.
0022  */
0023 
0024 #ifndef _VBE_H
0025 #define _VBE_H
0026 
0027 #ifndef ASM /* ASM */
0028 
0029 #include <stdint.h>
0030 
0031 #ifdef __cplusplus
0032 extern "C" {
0033 #endif /* __cplusplus */
0034 
0035 #include <rtems/score/basedefs.h>
0036 
0037 /*  VESA BIOS EXTENSION (VBE) Core functions Standard
0038     Version: 3.0 Date: September 16, 1998               */
0039 
0040 /** AL == 4Fh: Function is supported \n
0041  *  AL != 4Fh: Function is not supported */
0042 #define VBE_functionSupported        0x4F
0043 /** AH == 00h: Function call successful */
0044 #define VBE_callSuccessful           0x00
0045 /** AH == 01h: Function call failed */
0046 #define VBE_callFailed               0x01
0047 /** AH == 02h: Function is not supported in the current hardware configuration*/
0048 #define VBE_notSupportedInCurHWConf  0x02
0049 /** AH == 03h: Function call invalid in current video mode */
0050 #define VBE_callInvalid              0x03
0051 
0052 /* VBE Mode Numbers */
0053 /** D0-D8 =  Mode number */
0054 #define VBE_modeNumberMask         0x01FF
0055 #define VBE_modeNumberShift          0x00
0056 /** If D8 == 0, this is not a VESA defined VBE mode \n
0057     If D8 == 1, this is a VESA defined VBE mode */
0058 #define VBE_VESAmodeMask           0x0100
0059 #define VBE_VESAmodeShift            0x08
0060 /* D9-D10 =  Reserved by VESA for future expansion (= 0) */
0061 /** If D11 == 0, Use current BIOS default refresh rate \n
0062     If D11 == 1, Use user specified CRTC values for refresh rate */
0063 #define VBE_refreshRateCtrlMask    0x0800
0064 #define VBE_refreshRateCtrlShift     0x0B
0065 /* D12-13 = Reserved for VBE/AF (must be 0) */
0066 /** If D14 == 0, Use Banked/Windowed Frame Buffer \n
0067     If D14 == 1, Use Linear/Flat Frame Buffer */
0068 #define VBE_linearFlatFrameBufMask 0x4000
0069 #define VBE_linearFlatFrameBufShift  0x0E
0070 /** If D15 == 0, Clear display memory \n
0071     If D15 == 1, Preserve display memory */
0072 #define VBE_preserveDispMemMask    0x8000
0073 #define VBE_preserveDispMemShift     0x0F
0074 
0075 /* Graphics modes */
0076 /** 15-bit mode, Resolution: 640x400,   Colors: 256  */
0077 #define VBE_R640x400C256      0x100
0078 /** 15-bit mode, Resolution: 640x480,   Colors: 256  */
0079 #define VBE_R640x480C256      0x101
0080 /** 15-bit mode, Resolution: 800x600,   Colors: 16   */
0081 #define VBE_R800x600C16       0x102
0082 /** 7-bit mode,  Resolution: 800x600,   Colors: 16   */
0083 #define VBE_b7R800x600C16     0x6A
0084 /** 15-bit mode, Resolution: 800x600,   Colors: 256  */
0085 #define VBE_R800x600C256      0x103
0086 /** 15-bit mode, Resolution: 1024x768,  Colors: 16   */
0087 #define VBE_R1024x768C16      0x104
0088 /** 15-bit mode, Resolution: 1024x768,  Colors: 256  */
0089 #define VBE_R1024x768C256     0x105
0090 /** 15-bit mode, Resolution: 1280x1024, Colors: 16   */
0091 #define VBE_R1280x1024C16     0x106
0092 /** 15-bit mode, Resolution: 1280x1024, Colors: 256  */
0093 #define VBE_R1280x1024C256    0x107
0094 /** 15-bit mode, Resolution: 320x200,   Colors: 32K   (1:5:5:5) */
0095 #define VBE_R320x200C32K      0x10D
0096 /** 15-bit mode, Resolution: 320x200,   Colors: 64K   (5:6:5)   */
0097 #define VBE_R320x200C64K      0x10E
0098 /** 15-bit mode, Resolution: 320x200,   Colors: 16.8M (8:8:8)   */
0099 #define VBE_R320x200C17M      0x10F
0100 /** 15-bit mode, Resolution: 640x480,   Colors: 32K   (1:5:5:5) */
0101 #define VBE_R640x480C32K      0x110
0102 /** 15-bit mode, Resolution: 640x480,   Colors: 64K   (5:6:5)   */
0103 #define VBE_R640x480C64K      0x111
0104 /** 15-bit mode, Resolution: 640x480,   Colors: 16.8M (8:8:8)   */
0105 #define VBE_R640x480C17M      0x112
0106 /** 15-bit mode, Resolution: 800x600,   Colors: 32K   (1:5:5:5) */
0107 #define VBE_R800x600C32K      0x113
0108 /** 15-bit mode, Resolution: 800x600,   Colors: 64K   (5:6:5)   */
0109 #define VBE_R800x600C64K      0x114
0110 /** 15-bit mode, Resolution: 800x600,   Colors: 16.8M (8:8:8)   */
0111 #define VBE_R800x600C17M      0x115
0112 /** 15-bit mode, Resolution: 1024x768,  Colors: 32K   (1:5:5:5) */
0113 #define VBE_R1024x768C32K     0x116
0114 /** 15-bit mode, Resolution: 1024x768,  Colors: 64K   (5:6:5)   */
0115 #define VBE_R1024x768C64K     0x117
0116 /** 15-bit mode, Resolution: 1024x768,  Colors: 16.8M (8:8:8)   */
0117 #define VBE_R1024x768C17M     0x118
0118 /** 15-bit mode, Resolution: 1280x1024, Colors: 32K   (1:5:5:5) */
0119 #define VBE_R1280x1024C32K    0x119
0120 /** 15-bit mode, Resolution: 1280x1024, Colors: 64K   (5:6:5)   */
0121 #define VBE_R1280x1024C64K    0x11A
0122 /** 15-bit mode, Resolution: 1280x1024, Colors: 16.8M (8:8:8)   */
0123 #define VBE_R1280x1024C17M    0x11B
0124 #define VBE_SpecialMode       0x81FF
0125 
0126 /* Text modes */
0127 #define VBE_C80R60            0x108 /**< 15-bit mode, Columns: 80,  Rows: 60 */
0128 #define VBE_C132R25           0x109 /**< 15-bit mode, Columns: 132, Rows: 25 */
0129 #define VBE_C132R43           0x10A /**< 15-bit mode, Columns: 132, Rows: 43 */
0130 #define VBE_C132R50           0x10B /**< 15-bit mode, Columns: 132, Rows: 50 */
0131 #define VBE_C132R60           0x10C /**< 15-bit mode, Columns: 132, Rows: 60 */
0132 
0133 /* VBE function numbers - passed in AX register */
0134 /** VBE function - Return VBE Controller Information */
0135 #define VBE_RetVBEConInf       0x4F00
0136 /** VBE function - Return VBE Mode Information */
0137 #define VBE_RetVBEModInf       0x4F01
0138 /** VBE function - Set VBE Mode */
0139 #define VBE_SetVBEMod          0x4F02
0140 /** VBE function - Return Current VBE Mode */
0141 #define VBE_RetCurVBEMod       0x4F03
0142 /** VBE function - Save/Restore State */
0143 #define VBE_SavResSta          0x4F04
0144 /** VBE function - Display Window Control */
0145 #define VBE_DisWinCon          0x4F05
0146 /** VBE function - Set/Get Logical Scan Line Length */
0147 #define VBE_SetGetLogScaLinLen 0x4F06
0148 /** VBE function - Set/Get Display Start */
0149 #define VBE_SetGetDisSta       0x4F07
0150 /** VBE function - Set/Get DAC Palette Format */
0151 #define VBE_SetGetDACPalFor    0x4F08
0152 /** VBE function - Set/Get Palette Data */
0153 #define VBE_SetGetPalDat       0x4F09
0154 /** VBE function - Return VBE Protected Mode Interface */
0155 #define VBE_RetVBEProModInt    0x4F0A
0156 /** VBE function - Get/Set pixel clock */
0157 #define VBE_GetSetpixclo       0x4F0B
0158 /** VBE function - Power Management Extensions (PM) */
0159 #define VBE_PowManExt          0x4F10
0160 /** VBE function - Flat Panel Interface Extensions (FP) */
0161 #define VBE_FlaPanIntExt       0x4F11
0162 /** VBE function - Audio Interface Extensions (AI) */
0163 #define VBE_AudIntExt          0x4F13
0164 /** VBE function - OEM Extensions */
0165 #define VBE_OEMExt             0x4F14
0166 /** VBE function - Display Data Channel (DDC), Serial Control Interface (SCI) */
0167 #define VBE_DisDatCha          0x4F15
0168 
0169 /* VBE subfunction numbers - passed in BL register */
0170 #define VBE_RetVBESupSpeInf    0x00  /**< Return VBE Supplemental
0171                                       * Specification Information */
0172 /* *** Structures *** */
0173 /**
0174  * @brief Far pointer as defined by VBE standard.
0175  */
0176 typedef struct {
0177     /** @brief Offset to segment described by \a selector. */
0178     uint16_t offset;
0179     /** @brief Selector or Segment depending on whether this is used from 16bit
0180         protected mode or from real mode. */
0181     uint16_t selector;
0182 } RTEMS_PACKED VBE_far_pointer;
0183 
0184 /**
0185  * @brief Protected mode info block as defined by VBE standard.
0186  */
0187 typedef struct {
0188     /** PM Info Block Signature */
0189     uint8_t   Signature[4];
0190     /** Offset of PM entry point within BIOS */
0191     uint16_t  EntryPoint;
0192     /** Offset of PM initialization entry point */
0193     uint16_t  PMInitialize;
0194     /** Selector to BIOS data area emulation block */
0195     uint16_t  BIOSDataSel;
0196     /** Selector to access A0000h physical memmory */
0197     uint16_t  A0000Sel;
0198     /** Selector to access B0000h physical memmory */
0199     uint16_t  B0000Sel;
0200     /** Selector to access B8000h physical memmory */
0201     uint16_t  B8000Sel;
0202     /** Selector to access code segment as data */
0203     uint16_t  CodeSegSel;
0204     /** Set to 1 when in protected mode */
0205     uint8_t   InProtectMode;
0206     /** Checksum byte for structure. Sum over all structure bytes gives 0. */
0207     uint8_t   Checksum;
0208 } RTEMS_PACKED VBE_protected_mode_info_block;
0209 
0210 /** General VBE signature */
0211 #define VBE_SIGNATURE "VESA"
0212 /** Signature for VBE 2.0 and higher */
0213 #define VBE20plus_SIGNATURE "VBE2"
0214 /** for STUB see VBE CORE FUNCTIONS VERSION 3.0 - Appendix 1 */
0215 #define VBE_STUB_VideoModeList 0xFFFF
0216 #define VBE_END_OF_VideoModeList 0xFFFF
0217 /**
0218  * @brief Information about VBE implementation.
0219  */
0220 typedef struct {
0221     /** VBE Signature */
0222     uint8_t   VbeSignature[4];
0223     /** VBE Version */
0224     uint16_t  VbeVersion;
0225     /** VBE_far_pointer to OEM String */
0226     uint8_t  *OemStringPtr;
0227     /** Capabilities of graphics controller */
0228     uint8_t   Capabilities[4];
0229     /** VBE_far_pointer to VideoModeList */
0230     uint32_t *VideoModePtr;
0231     /** Number of 64kb memory blocks    */
0232     uint16_t  TotalMemory;
0233     /*  Added for VBE 2.0+ */
0234     /** VBE implementation Software revision */
0235     uint16_t  OemSoftwareRev;
0236     /** VBE_far_pointer to Vendor Name String */
0237     uint8_t  *OemVendorNamePtr;
0238     /** VBE_far_pointer to Product Name String */
0239     uint8_t  *OemProductNamePtr;
0240     /** VBE_far_pointer to Product Revision String */
0241     uint8_t  *OemProductRevPtr;
0242     /** Reserved for VBE implementation scratch */
0243     uint8_t   Reserved[222];
0244     /** Data Area for OEM Strings */
0245     uint8_t   OemData[256];
0246 } RTEMS_PACKED VBE_vbe_info_block;
0247 
0248 /**
0249  * @brief Describes graphic's mode parameter.
0250  */
0251 typedef struct {
0252     /*  Mandatory information for all VBE revisions */
0253     /** mode attributes */
0254     uint16_t  ModeAttributes;
0255     /** window A attributes */
0256     uint8_t   WinAAttributes;
0257     /** window B attributes */
0258     uint8_t   WinBAttributes;
0259     /** window granularity */
0260     uint16_t  WinGranularity;
0261     /** window size */
0262     uint16_t  WinSize;
0263     /** window A start segment */
0264     uint16_t  WinASegment;
0265     /** window B start segment */
0266     uint16_t  WinBSegment;
0267     /** real mode pointer to window function */
0268     uint32_t *WinFuncPtr;
0269     /** bytes per scan line */
0270     uint16_t  BytesPerScanLine;
0271     /*  Mandatory information for VBE 1.2 and above */
0272     /** horizontal resolution in px or chars */
0273     uint16_t  XResolution;
0274     /** vertical resolution in px or chars */
0275     uint16_t  YResolution;
0276     /** character cell width in pixels */
0277     uint8_t   XCharSize;
0278     /** character cell height in pixels */
0279     uint8_t   YCharSize;
0280     /** number of memory planes */
0281     uint8_t   NumberOfPlanes;
0282     /** bits per pixel */
0283     uint8_t   BitsPerPixel;
0284     /** number of banks */
0285     uint8_t   NumberOfBanks;
0286     /** memory model type */
0287     uint8_t   MemoryModel;
0288     /** bank size in KB */
0289     uint8_t   BankSize;
0290     /** number of images */
0291     uint8_t   NumberOfImagePages;
0292     /** reserved for page function */
0293     uint8_t   Reserved0;
0294     /*  Direct Color fields (required for direct/6 and YUV/7 memory models) */
0295     /** size of direct color red mask in bits */
0296     uint8_t   RedMaskSize;
0297     /** bit position of lsb of red mask */
0298     uint8_t   RedFieldPosition;
0299     /** size of direct color green mask in b */
0300     uint8_t   GreenMaskSize;
0301     /** bit position of lsb of green mask */
0302     uint8_t   GreenFieldPosition;
0303     /** size of direct color blue mask in b */
0304     uint8_t   BlueMaskSize;
0305     /** bit position of lsb of blue mask */
0306     uint8_t   BlueFieldPosition;
0307     /** size of direct color reserved mask */
0308     uint8_t   RsvdMaskSize;
0309     /** bit position of lsb of reserved mask */
0310     uint8_t   RsvdFieldPosition;
0311     /** direct color mode attributes */
0312     uint8_t   DirectColorModeInfo;
0313     /*  Mandatory information for VBE 2.0 and above */
0314     /** physical address for flat memory frame buffer */
0315     uint32_t *PhysBasePtr;
0316     /** Reserved - always set to 0 */
0317     uint32_t  Reserved1;
0318     /** Reserved - always set to 0 */
0319     uint16_t  Reserved2;
0320     /*  Mandatory information for VBE 3.0 and above */
0321     /** bytes per scan line for linear modes */
0322     uint16_t  LinBytesPerScanLine;
0323     /** number of images for banked modes */
0324     uint8_t   BnkNumberOfImagePages;
0325     /** number of images for linear modes */
0326     uint8_t   LinNumberOfImagePages;
0327         /* linear modes */
0328     /** size of direct color red mask */
0329     uint8_t   LinRedMaskSize;
0330     /** bit position of lsb of red mask */
0331     uint8_t   LinRedFieldPosition;
0332     /** size of direct color green mask  */
0333     uint8_t   LinGreenMaskSize;
0334     /** bit position of lsb of green mask */
0335     uint8_t   LinGreenFieldPosition;
0336     /** size of direct color blue mask  */
0337     uint8_t   LinBlueMaskSize;
0338     /** bit position of lsb of blue mask */
0339     uint8_t   LinBlueFieldPosition;
0340     /** size of direct color reserved mask */
0341     uint8_t   LinRsvdMaskSize;
0342     /** bit position of lsb of reserved mask */
0343     uint8_t   LinRsvdFieldPosition;
0344     /** maximum pixel clock (in Hz) for graphics mode */
0345     uint32_t  MaxPixelClock;
0346     /** remainder of VBE_mode_info_block */
0347     uint8_t   Reserved3[189];
0348 } RTEMS_PACKED VBE_mode_info_block;
0349 
0350 /**
0351  * @brief Describes monitor synchronization.
0352  */
0353 typedef struct {
0354     /** Horizontal total in pixels */
0355     uint16_t  HorizontalTotal;
0356     /** Horizontal sync start in pixels */
0357     uint16_t  HorizontalSyncStart;
0358     /** Horizontal sync end in pixels */
0359     uint16_t  HorizontalSyncEnd;
0360     /** Vertical total in lines */
0361     uint16_t  VerticalTotal;
0362     /** Vertical sync start in lines */
0363     uint16_t  VerticalSyncStart;
0364     /** Vertical sync end in lines */
0365     uint16_t  VerticalSyncEnd;
0366     /** Flags (Interlaced, Double Scan etc) */
0367     uint8_t   Flags;
0368     /** Pixel clock in units of Hz */
0369     uint32_t  PixelClock;
0370     /** Refresh rate in units of 0.01 Hz */
0371     uint16_t  RefreshRate;
0372     /** remainder of VBE_mode_info_block */
0373     uint8_t   Reserved[40];
0374 } RTEMS_PACKED VBE_CRTC_info_block;
0375 
0376 /**
0377  * @brief Describes palette entry.
0378  */
0379 typedef struct {
0380     /** Blue channel value (6 or 8 bits) */
0381     uint8_t   Blue;
0382     /** Green channel value (6 or 8 bits) */
0383     uint8_t   Green;
0384     /** Red channel value(6 or 8 bits) */
0385     uint8_t   Red;
0386     /** DWORD alignment byte (unused) */
0387     uint8_t   Alignment;
0388 } RTEMS_PACKED VBE_palette_entry;
0389 
0390 /**
0391  * @brief Supplemental VBE info block.
0392  */
0393 typedef struct {
0394     /** Supplemental VBE Signature */
0395     uint8_t   SupVbeSignature[7];
0396     /** Supplemental VBE Version */
0397     uint16_t  SupVbeVersion;
0398     /** Bitfield of supported subfunctions */
0399     uint8_t   SupVbeSubFunc[8];
0400     /** OEM Software revision */
0401     uint16_t  OemSoftwareRev;
0402     /** VBE_far_pointer to Vendor Name String */
0403     uint8_t  *OemVendorNamePtr;
0404     /** VBE_far_pointer to Product Name String */
0405     uint8_t  *OemProductNamePtr;
0406     /** VBE_far_pointer to Product Revision String */
0407     uint8_t  *OemProductRevPtr;
0408     /** VBE_far_pointer to OEM String */
0409     uint8_t  *OemStringPtr;
0410     /** Reserved for description strings and future expansion */
0411     uint8_t   Reserved[221];
0412 } RTEMS_PACKED VBE_supplemental_vbe_info_block;
0413 
0414 /* VBE_vbe_info_block Capabilities */
0415 /** VBE Info Block - Capabilities\n
0416     D0 = 0  DAC is fixed width, with 6 bits per primary color \n
0417     D0 = 1 DAC width is switchable to 8 bits per primary color */
0418 #define VBE_DACswitchableMask     0x0001
0419 /** VBE Info Block - Capabilities\n
0420     D1 = 0 Controller is VGA compatible \n
0421     D1 = 1 Controller is not VGA compatible */
0422 #define VBE_notVGAcompatibleMask  0x0002
0423 /** VBE Info Block - Capabilities\n
0424     D2 = 0 Normal RAMDAC operation \n
0425     D2 = 1 When programming large blocks of information to the RAMDAC,
0426             use the blank bit in Function 09h. */
0427 #define VBE_specialRAMDACopMask   0x0004
0428 /** VBE Info Block - Capabilities\n
0429     D3 = 0 No hardware stereoscopic signaling support \n
0430     D3 = 1 Hardware stereoscopic signaling supported by controller */
0431 #define VBE_hwStereoscopicMask    0x0008
0432 /** VBE Info Block - Capabilities\n
0433     D4 = 0 Stereo signaling supported via external VESA stereo connector \n
0434     D4 = 1 Stereo signaling supported via VESA EVC connector */
0435 #define VBE_supportEVCconnMask    0x0010
0436 /*  D5-31 = Reserved */
0437 
0438 /* VBE_mode_info_block ModeAttributes */
0439 /** Mode Info Block - Mode Attributes\n
0440     D0 =  Mode supported by hardware configuration.
0441      0 =  Mode not supported in hardware\n
0442      1 =  Mode supported in hardware */
0443 #define VBE_modSupInHWMask        0x0001
0444 /*  D1 =  1 (Reserved) */
0445 /** Mode Info Block - Mode Attributes\n
0446     D2 =  TTY Output functions supported by BIOS.
0447      0 =  TTY Output functions not supported by BIOS\n
0448      1 =  TTY Output functions supported by BIOS */
0449 #define VBE_TTYOutSupByBIOSMask   0x0004
0450 /** Mode Info Block - Mode Attributes\n
0451     D3 =  Monochrome/color mode (see note below).
0452      0 =  Monochrome mode\n
0453      1 =  Color mode */
0454 #define VBE_ColorModeMask         0x0008
0455 /** Mode Info Block - Mode Attributes\n
0456     D4 =  Mode type.
0457      0 =  Text mode\n
0458      1 =  Graphics mode */
0459 #define VBE_GraphicsModeMask      0x0010
0460 /** Mode Info Block - Mode Attributes\n
0461     D5 =  VGA compatible mode.
0462      0 =  Yes\n
0463      1 =  No */
0464 #define VBE_VGACompModeMask       0x0020
0465 /** Mode Info Block - Mode Attributes\n
0466     D6 =  VGA compatible windowed memory mode is available.
0467      0 =  Yes\n
0468      1 =  No */
0469 #define VBE_VGACompWinMemModeMask 0x0040
0470 /** Mode Info Block - Mode Attributes\n
0471     D7 =  Linear frame buffer mode is available.
0472      0 =  No\n
0473      1 =  Yes */
0474 #define VBE_LinFraBufModeAvaiMask 0x0080
0475 /** Mode Info Block - Mode Attributes\n
0476     D8 =  Double scan mode is available.
0477      0 =  No\n
0478      1 =  Yes */
0479 #define VBE_DblScnModeAvaiMask    0x0100
0480 /** Mode Info Block - Mode Attributes\n
0481     D9 =  Interlaced mode is available.
0482      0 =  No\n
0483      1 =  Yes */
0484 #define VBE_InterlModeAvaiMask    0x0200
0485 /** Mode Info Block - Mode Attributes\n
0486     D10 =  Hardware triple buffering support.
0487      0 =  No\n
0488      1 =  Yes */
0489 #define VBE_HWTripBufSupMask      0x0400
0490 /** Mode Info Block - Mode Attributes\n
0491     D11 =  Hardware stereoscopic display support.
0492      0 =  No\n
0493      1 =  Yes */
0494 #define VBE_HWSterDispSupMask     0x0800
0495 /** Mode Info Block - Mode Attributes\n
0496     D12 =  Dual display start address support.
0497      0 =  No\n
0498      1 =  Yes */
0499 #define VBE_DualDispStAdrSupMask  0x1000
0500 /*  D13-D15 =  Reserved */
0501 
0502 /* VBE_mode_info_block WinXAttributes */
0503 /** D0 =  Relocatable window(s) supported.
0504      0 =  Single non-relocatable window only\n
0505      1 =  Relocatable window(s) are supported */
0506 #define VBE_RelocWinSupMask       0x01
0507 /** D1 =  Window readable.
0508      0 =  Window is not readable\n
0509      1 =  Window is readable */
0510 #define VBE_WinReadableMask       0x02
0511 /** D2 =  Window writeable.
0512      0 =  Window is not writeable\n
0513      1 =  Window is writeable */
0514 #define VBE_WinWritableMask       0x04
0515 /*  D3-D7 =  Reserved */
0516 
0517 /* VBE_mode_info_block MemoryModel */
0518 #define VBE_TextMode              0x00
0519 #define VBE_CGAGraphics           0x01
0520 #define VBE_HerculesGraphics      0x02
0521 #define VBE_Planar                0x03
0522 #define VBE_PackedPixel           0x04
0523 #define VBE_NonChain4Color256     0x05
0524 #define VBE_DirectColor           0x06
0525 #define VBE_YUV                   0x07
0526     /* 0x08-0x0F Reserved, to be defined by VESA */
0527     /* 0x10-0xFF To be defined by OEM */
0528 
0529 /* VBE_mode_info_block DirectColorModeInfo */
0530 /** D0 =  Color ramp is fixed/programmable.
0531      0 =  Color ramp is fixed\n
0532      1 =  Color ramp is programmable */
0533 #define VBE_ColRampProgMask       0x01
0534 /** D1 =  Bits in Rsvd field are usable/reserved.
0535      0 =  Bits in Rsvd field are reserved\n
0536      1 =  Bits in Rsvd field are usable by the application */
0537 #define VBE_RsvdBitsUsableMask    0x02
0538 
0539 /* VBE_CRTC_info_block Flags */
0540 /** CRTC Info Block - Flags\n
0541     D0 =  Double Scan Mode Enable.
0542      0 =  Graphics mode is not double scanned\n
0543      1 =  Graphics mode is double scanned */
0544 #define VBE_GrModeDblScanMask     0x01
0545 /** CRTC Info Block - Flags\n
0546     D1 =  Interlaced Mode Enable.
0547      0 =  Graphics mode is non-interlaced\n
0548      1 =  Graphics mode is interlaced */
0549 #define VBE_GrModeInterlMask      0x02
0550 /** CRTC Info Block - Flags\n
0551     D2 =  Horizontal sync polarity.
0552      0 =  Horizontal sync polarity is positive (+)\n
0553      1 =  Horizontal sync polarity is negative (-) */
0554 #define VBE_HorSncPolNegMask      0x04
0555 /** CRTC Info Block - Flags\n
0556     D3 =  Vertical sync polarity.
0557      0 =  Vertical sync polarity is positive (+)\n
0558      1 =  Vertical sync polarity is negative (-) */
0559 #define VBE_VerSncPolNegMask      0x08
0560 
0561 
0562 /*  VESA BIOS Extensions/Display Data Channel Standard
0563     Version: 1.1 November 18, 1999                      */
0564 
0565 /* VBE/DDC subfunction numbers - passed in BL register */
0566 /** VBE/DDC subfunction - Report VBE/DDC Capabilities */
0567 #define VBEDDC_Capabilities    0x0
0568 /** VBE/DDC subfunction - Read EDID */
0569 #define VBEDDC_ReadEDID        0x1
0570 
0571 /* DDC Capabilities */
0572 /* DDC level supported - returned in BL register */
0573 /** 0 - DDC1 not supported; 1 - DDC1 supported */
0574 #define VBEDDC_1SupportedMask  0x1
0575 /** 0 - DDC2 not supported; 1 - DDC2 supported */
0576 #define VBEDDC_2SupportedMask  0x2
0577 /** 0 - Screen not blanked during data transfer\n
0578     1 - Screen blanked during data transfer */
0579 #define VBEDDC_scrBlnkDatTrMs  0x4
0580 
0581 
0582 /*  VESA BIOS Extensions/Serial Control Interface Standard
0583     Version: 1.0 Revision: 2 Date: July 2, 1997         */
0584 
0585 /* VBE/SCI subfunction numbers - passed in BL register */
0586 /** VBE/SCI subfunction - Report VBE/SCI Capabilities */
0587 #define VBESCI_ReportCapabil   0x10
0588 /** VBE/SCI subfunction - Begin SCL/SDA control */
0589 #define VBESCI_BegSCLSDACtrl   0x11
0590 /** VBE/SCI subfunction - End SCL/SDA control */
0591 #define VBESCI_EndSCLSDACtrl   0x12
0592 /** VBE/SCI subfunction - Write SCL clock line */
0593 #define VBESCI_WrtSCLClkLine   0x13
0594 /** VBE/SCI subfunction - Write SDA data line */
0595 #define VBESCI_WrtSDADatLine   0x14
0596 /** VBE/SCI subfunction - Read SCL clock line */
0597 #define VBESCI_RdySCLClkLine   0x15
0598 /** VBE/SCI subfunction - Read SDA data line */
0599 #define VBESCI_RdySDADatLine   0x16
0600 
0601 /* SCI Capabilities */
0602 /* I2C level supported - returned in BL register */
0603 /** Can write to SCL clock line */
0604 #define VBESCI_capSCLwrtMask   0x1
0605 /** Can write to SDA data line */
0606 #define VBESCI_capSDAwrtMask   0x2
0607 /** Can read from SCL clock line */
0608 #define VBESCI_capSCLrdyMask   0x4
0609 /** Can read from SDA data line */
0610 #define VBESCI_capSDArdyMask   0x8
0611 
0612 
0613 #ifdef __cplusplus
0614 }
0615 #endif /* __cplusplus */
0616 
0617 #endif /* ASM */
0618 
0619 #endif /* _VBE_H */