File: [local] / sys / dev / vesa / vbe.h (download)
Revision 1.1, Tue Mar 4 16:14:46 2008 UTC (16 years, 4 months ago) by nbrk
Branch point for: MAIN
Initial revision
|
/*
* Copyright (c) 2007 Gordon Willem Klok <gwk@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/*
* Information taken from VESA Bios Extention (VBE) Core Functions Standard
* Version 3.0 found at http://www.vesa.org/public/VBE/vbe3.pdf
*/
#ifndef VBE_H
#define VBE_H
#define BIOS_VIDEO_INTR 0x10
/* A well know address to locate a page at in the vm86 task */
#define KVM86_CALL_TASKVA 0x2000
/* Information contained in AH following a VBE function call */
/* Low byte determins call support */
#define VBECALL_SUPPORT(v) (v & 0xff)
#define VBECALL_SUPPORTED 0x4f
/* High byte determins call sucess */
#define VBECALL_SUCESS(v) (v >> 8 & 0xFF)
#define VBECALL_SUCCEDED 0x00
#define VBECALL_FAILED 0x01
#define VBECALL_MISMATCH 0x02 /* BIOS SUPPORTS HW DOES NOT */
#define VBECALL_INVALID 0x03 /* INVALID IN CURRENT MODE */
/* VBE Standard Function Calls */
#define VBE_FUNC_CTRLINFO 0x4F00
#define VBE_FUNC_MODEINFO 0x4F01
#define VBE_FUNC_SETMODE 0x4F02
#define VBE_FUNC_GETMODE 0x4F03
#define VBE_FUNC_SAVEREST 0x4F04
#define VBE_FUNC_DWC 0x4F05 /* Display window control */
#define VBE_FUNC_LSLL 0x4F06 /* Logical Scan Line Length */
#define VBE_FUNC_START 0x4F07 /* Set/Get Display Start */
#define VBE_FUNC_DAC 0x4F08 /* Set/Get DAC Pallete Format */
#define VBE_FUNC_PALETTE 0x4F09 /* Set/Get Pallete Data */
#define VBE_FUNC_PMI 0x4F0A /* Protected Mode Interface */
#define VBE_FUNC_PIXELCLOCK 0x4F0B
/* VBE Supplemental Function Calls */
#define VBE_FUNC_PM 0x4F10 /* Power Management Interface */
#define VBE_FUNC_FLATPANEL 0x4F11 /* Flat Panel Interface */
#define VBE_FUNC_AUDIO 0x4F13 /* Audio Interface */
#define VBE_FUNC_OEM 0x4F14 /* OEM Extentions */
#define VBE_FUNC_DDC 0x4F15 /* Display Data Channel (DDC) */
#define VBE_CTRLINFO_VERSION(v) (v >> 8)
#define VBE_CTRLINFO_REVISION(v) (v & 0xff)
#define VBE_DDC_GET 0x01
struct edid_chroma {
uint8_t chroma_rglow;
uint8_t chroma_bwlow;
uint8_t chroma_redx;
uint8_t chroma_redy;
uint8_t chroma_greenx;
uint8_t chroma_greeny;
uint8_t chroma_bluex;
uint8_t chroma_bluey;
uint8_t chroma_whitex;
uint8_t chroma_whitey;
} __packed;
struct edid_db {
uint16_t db_pixelclock;
uint8_t db_stor[16];
} __packed;
#define EDID_DB_FLAG_INTERLACED 0x80
#define EDID_DB_FLAG_STEREO 0x10
#define EDID_DB_POSITIVE_HSYNC 0x04
#define EDID_DB_POSITIVE_VSYNC 0x02
/* Types of Descriptor Blocks */
#define EDID_DB_BT_MONSERIAL 0xff
#define EDID_DB_BT_ASCIISTR 0xfe
#define EDID_DB_BT_RANGELIMITS 0xfd
#define EDID_DB_BT_MONITORNAME 0xfc
#define EDID_DB_BT_COLORPOINT 0xfb
#define EDID_DB_BT_STDTIMEDATA 0xfa
#define EDID_DB_BT_UNDEF 0xf9
#define EDID_DB_BT_MANUFDEF 0xf8
struct edid_ranges {
uint8_t range_minvertfreq;
uint8_t range_maxvertfreq;
uint8_t range_minhorizfreq;
uint8_t range_maxhorizfreq;
uint8_t range_pixelclock;
uint16_t range_secgtftoggle;
uint8_t range_starthorizfreq;
uint8_t range_c;
uint16_t range_m;
uint16_t range_k;
uint16_t range_y;
} __packed;
struct edid_timing {
uint8_t timing_estb1;
uint8_t timing_estb2;
uint8_t timing_manu;
uint16_t timing_std1;
uint16_t timing_std2;
uint16_t timing_std3;
uint16_t timing_std4;
uint16_t timing_std5;
uint16_t timing_std6;
uint16_t timing_std7;
uint16_t timing_std8;
} __packed;
struct edid {
uint8_t edid_header[8];
uint16_t edid_manufacture;
uint16_t edid_product;
uint32_t edid_serialno;
uint8_t edid_week;
uint8_t edid_year;
uint8_t edid_version;
uint8_t edid_revision;
uint8_t edid_vidid;
uint8_t edid_maxhoriz_isize;
uint8_t edid_maxvert_isize;
uint8_t edid_gamma;
uint8_t edid_pmfeatures;
struct edid_chroma edid_chroma;
struct edid_timing edid_timing;
struct edid_db edid_db1;
struct edid_db edid_db2;
struct edid_db edid_db3;
struct edid_db edid_db4;
uint8_t edid_extblocks;
uint8_t edid_chksum;
} __packed;
#endif