Annotation of sys/dev/vesa/vbe.h, Revision 1.1.1.1
1.1 nbrk 1: /*
2: * Copyright (c) 2007 Gordon Willem Klok <gwk@openbsd.org>
3: *
4: * Permission to use, copy, modify, and distribute this software for any
5: * purpose with or without fee is hereby granted, provided that the above
6: * copyright notice and this permission notice appear in all copies.
7: *
8: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15: */
16:
17: /*
18: * Information taken from VESA Bios Extention (VBE) Core Functions Standard
19: * Version 3.0 found at http://www.vesa.org/public/VBE/vbe3.pdf
20: */
21: #ifndef VBE_H
22: #define VBE_H
23:
24: #define BIOS_VIDEO_INTR 0x10
25:
26: /* A well know address to locate a page at in the vm86 task */
27: #define KVM86_CALL_TASKVA 0x2000
28:
29: /* Information contained in AH following a VBE function call */
30: /* Low byte determins call support */
31: #define VBECALL_SUPPORT(v) (v & 0xff)
32: #define VBECALL_SUPPORTED 0x4f
33:
34: /* High byte determins call sucess */
35: #define VBECALL_SUCESS(v) (v >> 8 & 0xFF)
36: #define VBECALL_SUCCEDED 0x00
37: #define VBECALL_FAILED 0x01
38: #define VBECALL_MISMATCH 0x02 /* BIOS SUPPORTS HW DOES NOT */
39: #define VBECALL_INVALID 0x03 /* INVALID IN CURRENT MODE */
40:
41: /* VBE Standard Function Calls */
42: #define VBE_FUNC_CTRLINFO 0x4F00
43: #define VBE_FUNC_MODEINFO 0x4F01
44: #define VBE_FUNC_SETMODE 0x4F02
45: #define VBE_FUNC_GETMODE 0x4F03
46: #define VBE_FUNC_SAVEREST 0x4F04
47: #define VBE_FUNC_DWC 0x4F05 /* Display window control */
48: #define VBE_FUNC_LSLL 0x4F06 /* Logical Scan Line Length */
49: #define VBE_FUNC_START 0x4F07 /* Set/Get Display Start */
50: #define VBE_FUNC_DAC 0x4F08 /* Set/Get DAC Pallete Format */
51: #define VBE_FUNC_PALETTE 0x4F09 /* Set/Get Pallete Data */
52: #define VBE_FUNC_PMI 0x4F0A /* Protected Mode Interface */
53: #define VBE_FUNC_PIXELCLOCK 0x4F0B
54:
55: /* VBE Supplemental Function Calls */
56: #define VBE_FUNC_PM 0x4F10 /* Power Management Interface */
57: #define VBE_FUNC_FLATPANEL 0x4F11 /* Flat Panel Interface */
58: #define VBE_FUNC_AUDIO 0x4F13 /* Audio Interface */
59: #define VBE_FUNC_OEM 0x4F14 /* OEM Extentions */
60: #define VBE_FUNC_DDC 0x4F15 /* Display Data Channel (DDC) */
61:
62: #define VBE_CTRLINFO_VERSION(v) (v >> 8)
63: #define VBE_CTRLINFO_REVISION(v) (v & 0xff)
64: #define VBE_DDC_GET 0x01
65:
66: struct edid_chroma {
67: uint8_t chroma_rglow;
68: uint8_t chroma_bwlow;
69: uint8_t chroma_redx;
70: uint8_t chroma_redy;
71: uint8_t chroma_greenx;
72: uint8_t chroma_greeny;
73: uint8_t chroma_bluex;
74: uint8_t chroma_bluey;
75: uint8_t chroma_whitex;
76: uint8_t chroma_whitey;
77: } __packed;
78:
79: struct edid_db {
80: uint16_t db_pixelclock;
81: uint8_t db_stor[16];
82: } __packed;
83:
84: #define EDID_DB_FLAG_INTERLACED 0x80
85: #define EDID_DB_FLAG_STEREO 0x10
86: #define EDID_DB_POSITIVE_HSYNC 0x04
87: #define EDID_DB_POSITIVE_VSYNC 0x02
88:
89: /* Types of Descriptor Blocks */
90: #define EDID_DB_BT_MONSERIAL 0xff
91: #define EDID_DB_BT_ASCIISTR 0xfe
92: #define EDID_DB_BT_RANGELIMITS 0xfd
93: #define EDID_DB_BT_MONITORNAME 0xfc
94: #define EDID_DB_BT_COLORPOINT 0xfb
95: #define EDID_DB_BT_STDTIMEDATA 0xfa
96: #define EDID_DB_BT_UNDEF 0xf9
97: #define EDID_DB_BT_MANUFDEF 0xf8
98:
99: struct edid_ranges {
100: uint8_t range_minvertfreq;
101: uint8_t range_maxvertfreq;
102: uint8_t range_minhorizfreq;
103: uint8_t range_maxhorizfreq;
104: uint8_t range_pixelclock;
105: uint16_t range_secgtftoggle;
106: uint8_t range_starthorizfreq;
107: uint8_t range_c;
108: uint16_t range_m;
109: uint16_t range_k;
110: uint16_t range_y;
111: } __packed;
112:
113: struct edid_timing {
114: uint8_t timing_estb1;
115: uint8_t timing_estb2;
116: uint8_t timing_manu;
117: uint16_t timing_std1;
118: uint16_t timing_std2;
119: uint16_t timing_std3;
120: uint16_t timing_std4;
121: uint16_t timing_std5;
122: uint16_t timing_std6;
123: uint16_t timing_std7;
124: uint16_t timing_std8;
125: } __packed;
126:
127: struct edid {
128: uint8_t edid_header[8];
129: uint16_t edid_manufacture;
130: uint16_t edid_product;
131: uint32_t edid_serialno;
132: uint8_t edid_week;
133: uint8_t edid_year;
134: uint8_t edid_version;
135: uint8_t edid_revision;
136: uint8_t edid_vidid;
137: uint8_t edid_maxhoriz_isize;
138: uint8_t edid_maxvert_isize;
139: uint8_t edid_gamma;
140: uint8_t edid_pmfeatures;
141: struct edid_chroma edid_chroma;
142: struct edid_timing edid_timing;
143: struct edid_db edid_db1;
144: struct edid_db edid_db2;
145: struct edid_db edid_db3;
146: struct edid_db edid_db4;
147: uint8_t edid_extblocks;
148: uint8_t edid_chksum;
149: } __packed;
150:
151: #endif
CVSweb