1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #ifndef VBE_H
22 #define VBE_H
23
24 #define BIOS_VIDEO_INTR 0x10
25
26
27 #define KVM86_CALL_TASKVA 0x2000
28
29
30
31 #define VBECALL_SUPPORT(v) (v & 0xff)
32 #define VBECALL_SUPPORTED 0x4f
33
34
35 #define VBECALL_SUCESS(v) (v >> 8 & 0xFF)
36 #define VBECALL_SUCCEDED 0x00
37 #define VBECALL_FAILED 0x01
38 #define VBECALL_MISMATCH 0x02
39 #define VBECALL_INVALID 0x03
40
41
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
48 #define VBE_FUNC_LSLL 0x4F06
49 #define VBE_FUNC_START 0x4F07
50 #define VBE_FUNC_DAC 0x4F08
51 #define VBE_FUNC_PALETTE 0x4F09
52 #define VBE_FUNC_PMI 0x4F0A
53 #define VBE_FUNC_PIXELCLOCK 0x4F0B
54
55
56 #define VBE_FUNC_PM 0x4F10
57 #define VBE_FUNC_FLATPANEL 0x4F11
58 #define VBE_FUNC_AUDIO 0x4F13
59 #define VBE_FUNC_OEM 0x4F14
60 #define VBE_FUNC_DDC 0x4F15
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
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