14d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#ifndef vbe_h_included
24d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define vbe_h_included
34d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
44d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#include "vgabios.h"
54d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
64d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// DISPI helper function
74d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid dispi_set_enable(enable);
84d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
94d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima/** VBE int10 API
104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima *
114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima *  See the function descriptions in vbe.c for more information
124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima */
134d07f569799aaae0d7fccf8e76386d450664987fJun NakajimaBoolean vbe_has_vbe_display();
144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid vbe_biosfn_return_controller_information(AX, ES, DI);
154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid vbe_biosfn_return_mode_information(AX, CX, ES, DI);
164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid vbe_biosfn_set_mode(AX, BX, ES, DI);
174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid vbe_biosfn_save_restore_state(AX, CX, DX, ES, BX);
184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid vbe_biosfn_set_get_palette_data(AX);
194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid vbe_biosfn_return_protected_mode_interface(AX);
204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// The official VBE Information Block
224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimatypedef struct VbeInfoBlock
234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{
244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  VbeSignature[4];
254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u VbeVersion;
264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u OemStringPtr_Off;
274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u OemStringPtr_Seg;
284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  Capabilities[4];
294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u VideoModePtr_Off;
304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u VideoModePtr_Seg;
314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u TotalMemory;
324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u OemSoftwareRev;
334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u OemVendorNamePtr_Off;
344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u OemVendorNamePtr_Seg;
354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u OemProductNamePtr_Off;
364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u OemProductNamePtr_Seg;
374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u OemProductRevPtr_Off;
384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u OemProductRevPtr_Seg;
394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u  Reserved[111]; // used for dynamicly generated mode list
404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  OemData[256];
414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima} VbeInfoBlock;
424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// This one is for compactly storing a static list of mode info blocks
454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// this saves us 189 bytes per block
464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimatypedef struct ModeInfoBlockCompact
474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{
484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Mandatory information for all VBE revisions
494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u ModeAttributes;
504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  WinAAttributes;
514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  WinBAttributes;
524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u WinGranularity;
534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u WinSize;
544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u WinASegment;
554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u WinBSegment;
564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit32u WinFuncPtr;
574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u BytesPerScanLine;
584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Mandatory information for VBE 1.2 and above
594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u XResolution;
604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u YResolution;
614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  XCharSize;
624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  YCharSize;
634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  NumberOfPlanes;
644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  BitsPerPixel;
654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  NumberOfBanks;
664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  MemoryModel;
674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  BankSize;
684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  NumberOfImagePages;
694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  Reserved_page;
704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Direct Color fields (required for direct/6 and YUV/7 memory models)
714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  RedMaskSize;
724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  RedFieldPosition;
734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  GreenMaskSize;
744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  GreenFieldPosition;
754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  BlueMaskSize;
764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  BlueFieldPosition;
774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  RsvdMaskSize;
784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  RsvdFieldPosition;
794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  DirectColorModeInfo;
804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Mandatory information for VBE 2.0 and above
814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit32u PhysBasePtr;
824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit32u OffScreenMemOffset;
834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u OffScreenMemSize;
844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Mandatory information for VBE 3.0 and above
854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u LinBytesPerScanLine;
864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  BnkNumberOfPages;
874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  LinNumberOfPages;
884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  LinRedMaskSize;
894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  LinRedFieldPosition;
904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  LinGreenMaskSize;
914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  LinGreenFieldPosition;
924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  LinBlueMaskSize;
934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  LinBlueFieldPosition;
944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  LinRsvdMaskSize;
954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  LinRsvdFieldPosition;
964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit32u MaxPixelClock;
974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//   Bit8u  Reserved[189]; // DO NOT PUT THIS IN HERE because of Compact Mode Info storage in bios
984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima} ModeInfoBlockCompact;
994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimatypedef struct ModeInfoBlock
1014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{
1024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Mandatory information for all VBE revisions
1034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u ModeAttributes;
1044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  WinAAttributes;
1054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  WinBAttributes;
1064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u WinGranularity;
1074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u WinSize;
1084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u WinASegment;
1094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u WinBSegment;
1104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit32u WinFuncPtr;
1114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u BytesPerScanLine;
1124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Mandatory information for VBE 1.2 and above
1134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u XResolution;
1144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u YResolution;
1154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  XCharSize;
1164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  YCharSize;
1174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  NumberOfPlanes;
1184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  BitsPerPixel;
1194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  NumberOfBanks;
1204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  MemoryModel;
1214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  BankSize;
1224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  NumberOfImagePages;
1234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  Reserved_page;
1244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Direct Color fields (required for direct/6 and YUV/7 memory models)
1254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  RedMaskSize;
1264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  RedFieldPosition;
1274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  GreenMaskSize;
1284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  GreenFieldPosition;
1294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  BlueMaskSize;
1304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  BlueFieldPosition;
1314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  RsvdMaskSize;
1324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  RsvdFieldPosition;
1334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  DirectColorModeInfo;
1344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Mandatory information for VBE 2.0 and above
1354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit32u PhysBasePtr;
1364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit32u OffScreenMemOffset;
1374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u OffScreenMemSize;
1384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Mandatory information for VBE 3.0 and above
1394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit16u LinBytesPerScanLine;
1404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  BnkNumberOfPages;
1414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  LinNumberOfPages;
1424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  LinRedMaskSize;
1434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  LinRedFieldPosition;
1444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  LinGreenMaskSize;
1454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  LinGreenFieldPosition;
1464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  LinBlueMaskSize;
1474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  LinBlueFieldPosition;
1484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  LinRsvdMaskSize;
1494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  LinRsvdFieldPosition;
1504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit32u MaxPixelClock;
1514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   Bit8u  Reserved[189];
1524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima} ModeInfoBlock;
1534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimatypedef struct ModeInfoListItem
1554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{
1564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  Bit16u                mode;
1574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  ModeInfoBlockCompact  info;
1584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima} ModeInfoListItem;
1594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// VBE Return Status Info
1614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// AL
1624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_RETURN_STATUS_SUPPORTED                      0x4F
1634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_RETURN_STATUS_UNSUPPORTED                    0x00
1644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// AH
1654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_RETURN_STATUS_SUCCESSFULL                    0x00
1664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_RETURN_STATUS_FAILED                         0x01
1674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_RETURN_STATUS_NOT_SUPPORTED                  0x02
1684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_RETURN_STATUS_INVALID                        0x03
1694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// VBE Mode Numbers
1714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_VESA_DEFINED                            0x0100
1734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_REFRESH_RATE_USE_CRTC                   0x0800
1744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_LINEAR_FRAME_BUFFER                     0x4000
1754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_PRESERVE_DISPLAY_MEMORY                 0x8000
1764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// VBE GFX Mode Number
1784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_640X400X8                          0x100
1804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_640X480X8                          0x101
1814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_800X600X4                          0x102
1824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_800X600X8                          0x103
1834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1024X768X4                         0x104
1844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1024X768X8                         0x105
1854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1280X1024X4                        0x106
1864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1280X1024X8                        0x107
1874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_320X200X1555                       0x10D
1884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_320X200X565                        0x10E
1894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_320X200X888                        0x10F
1904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_640X480X1555                       0x110
1914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_640X480X565                        0x111
1924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_640X480X888                        0x112
1934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_800X600X1555                       0x113
1944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_800X600X565                        0x114
1954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_800X600X888                        0x115
1964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1024X768X1555                      0x116
1974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1024X768X565                       0x117
1984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1024X768X888                       0x118
1994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1280X1024X1555                     0x119
2004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1280X1024X565                      0x11A
2014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1280X1024X888                      0x11B
2024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1600X1200X8                        0x11C
2034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1600X1200X1555                     0x11D
2044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1600X1200X565                      0x11E
2054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1600X1200X888                      0x11F
2064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// BOCHS/PLEX86 'own' mode numbers
2084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_OWN_MODE_320X200X8888                        0x140
2094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_OWN_MODE_640X400X8888                        0x141
2104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_OWN_MODE_640X480X8888                        0x142
2114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_OWN_MODE_800X600X8888                        0x143
2124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_OWN_MODE_1024X768X8888                       0x144
2134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_OWN_MODE_1280X1024X8888                      0x145
2144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_OWN_MODE_320X200X8                           0x146
2154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_OWN_MODE_1600X1200X8888                      0x147
2164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_OWN_MODE_1152X864X8                          0x148
2174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_OWN_MODE_1152X864X1555                       0x149
2184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_OWN_MODE_1152X864X565                        0x14a
2194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_OWN_MODE_1152X864X888                        0x14b
2204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_OWN_MODE_1152X864X8888                       0x14c
2214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_END_OF_LIST                        0xFFFF
2234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Capabilities
2254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_CAPABILITY_8BIT_DAC                          0x0001
2274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_CAPABILITY_NOT_VGA_COMPATIBLE                0x0002
2284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_CAPABILITY_RAMDAC_USE_BLANK_BIT              0x0004
2294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_CAPABILITY_STEREOSCOPIC_SUPPORT              0x0008
2304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_CAPABILITY_STEREO_VIA_VESA_EVC               0x0010
2314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Mode Attributes
2334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTRIBUTE_SUPPORTED                     0x0001
2354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE  0x0002
2364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTRIBUTE_TTY_BIOS_SUPPORT              0x0004
2374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTRIBUTE_COLOR_MODE                    0x0008
2384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTRIBUTE_GRAPHICS_MODE                 0x0010
2394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTRIBUTE_NOT_VGA_COMPATIBLE            0x0020
2404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTRIBUTE_NO_VGA_COMPATIBLE_WINDOW      0x0040
2414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE      0x0080
2424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTRIBUTE_DOUBLE_SCAN_MODE              0x0100
2434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTRIBUTE_INTERLACE_MODE                0x0200
2444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTRIBUTE_HARDWARE_TRIPLE_BUFFER        0x0400
2454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTRIBUTE_HARDWARE_STEREOSCOPIC_DISPLAY 0x0800
2464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTRIBUTE_DUAL_DISPLAY_START_ADDRESS    0x1000
2474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTTRIBUTE_LFB_ONLY                     ( VBE_MODE_ATTRIBUTE_NO_VGA_COMPATIBLE_WINDOW | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE )
2494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Window attributes
2514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_WINDOW_ATTRIBUTE_RELOCATABLE                 0x01
2534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_WINDOW_ATTRIBUTE_READABLE                    0x02
2544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_WINDOW_ATTRIBUTE_WRITEABLE                   0x04
2554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Memory model
2574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MEMORYMODEL_TEXT_MODE                        0x00
2594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MEMORYMODEL_CGA_GRAPHICS                     0x01
2604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MEMORYMODEL_HERCULES_GRAPHICS                0x02
2614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MEMORYMODEL_PLANAR                           0x03
2624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MEMORYMODEL_PACKED_PIXEL                     0x04
2634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MEMORYMODEL_NON_CHAIN_4_256                  0x05
2644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MEMORYMODEL_DIRECT_COLOR                     0x06
2654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MEMORYMODEL_YUV                              0x07
2664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// DirectColorModeInfo
2684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_DIRECTCOLOR_COLOR_RAMP_PROGRAMMABLE          0x01
2704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_DIRECTCOLOR_RESERVED_BITS_AVAILABLE          0x02
2714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// GUEST <-> HOST Communication API
2734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// FIXME: either dynamicly ask host for this or put somewhere high in physical memory
2754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//        like 0xE0000000
2764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_BANK_ADDRESS           0xA0000
2794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_BANK_SIZE_KB           64
2804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_MAX_XRES               2560
2824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_MAX_YRES               1600
2834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_IOPORT_INDEX           0x01CE
2854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_IOPORT_DATA            0x01CF
2864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_INDEX_ID               0x0
2884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_INDEX_XRES             0x1
2894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_INDEX_YRES             0x2
2904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_INDEX_BPP              0x3
2914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_INDEX_ENABLE           0x4
2924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_INDEX_BANK             0x5
2934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_INDEX_VIRT_WIDTH       0x6
2944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_INDEX_VIRT_HEIGHT      0x7
2954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_INDEX_X_OFFSET         0x8
2964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_INDEX_Y_OFFSET         0x9
2974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_INDEX_VIDEO_MEMORY_64K 0xa
2984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_ID0                    0xB0C0
3004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_ID1                    0xB0C1
3014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_ID2                    0xB0C2
3024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_ID3                    0xB0C3
3034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_ID4                    0xB0C4
3044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_ID5                    0xB0C5
3054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
3064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_DISABLED               0x00
3074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_ENABLED                0x01
3084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_GETCAPS                0x02
3094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_8BIT_DAC               0x20
3104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_LFB_ENABLED            0x40
3114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_NOCLEARMEM             0x80
3124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
3134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define VBE_DISPI_LFB_PHYSICAL_ADDRESS   0xE0000000
3144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
3154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
316