Root/
Source at commit 1446 created 12 years 11 months ago. By jrcs, Fix multiboot | |
---|---|
1 | /*␊ |
2 | * edid.h␊ |
3 | * ␊ |
4 | *␊ |
5 | * Created by Evan Lojewski on 12/1/09.␊ |
6 | * Copyright 2009. All rights reserved.␊ |
7 | *␊ |
8 | * Slice 2010, based on Joblo works␊ |
9 | */␊ |
10 | //#ifndef __EDID_H__␊ |
11 | //#define __EDID_H__␊ |
12 | ␊ |
13 | ␊ |
14 | #include "libsaio.h"␊ |
15 | ␊ |
16 | #define EDID_BLOCK_SIZE␉128␊ |
17 | #define EDID_V1_BLOCKS_TO_GO_OFFSET 126␊ |
18 | //Slice - some more info about EDID␊ |
19 | #define EDID_LENGTH␉␉␉␉0x80␊ |
20 | #define EDID_HEADER␉␉␉␉0x00␊ |
21 | #define EDID_HEADER_END␉␉␉␉0x07␊ |
22 | ␊ |
23 | #define ID_MANUFACTURER_NAME␉␉␉0x08␊ |
24 | #define ID_MANUFACTURER_NAME_END␉␉0x09␊ |
25 | #define ID_MODEL␉␉␉␉0x0a␊ |
26 | ␊ |
27 | #define ID_SERIAL_NUMBER␉␉␉0x0c␊ |
28 | ␊ |
29 | #define MANUFACTURE_WEEK␉␉␉0x10␊ |
30 | #define MANUFACTURE_YEAR␉␉␉0x11␊ |
31 | ␊ |
32 | #define EDID_STRUCT_VERSION␉␉␉0x12␊ |
33 | #define EDID_STRUCT_REVISION␉␉␉0x13␊ |
34 | ␊ |
35 | #define EDID_STRUCT_DISPLAY 0x14␊ |
36 | ␊ |
37 | #define DPMS_FLAGS␉␉␉␉0x18␊ |
38 | #define ESTABLISHED_TIMING_1␉␉␉0x23␊ |
39 | #define ESTABLISHED_TIMING_2␉␉␉0x24␊ |
40 | #define MANUFACTURERS_TIMINGS␉␉␉0x25␊ |
41 | ␊ |
42 | /* standard timings supported */␊ |
43 | #define STD_TIMING 8␊ |
44 | #define STD_TIMING_DESCRIPTION_SIZE 2␊ |
45 | #define STD_TIMING_DESCRIPTIONS_START 0x26␊ |
46 | ␊ |
47 | #define DETAILED_TIMING_DESCRIPTIONS_START␉0x36␊ |
48 | #define DETAILED_TIMING_DESCRIPTION_SIZE␉18␊ |
49 | #define NO_DETAILED_TIMING_DESCRIPTIONS␉␉4␊ |
50 | ␊ |
51 | #define DETAILED_TIMING_DESCRIPTION_1␉␉0x36␊ |
52 | #define DETAILED_TIMING_DESCRIPTION_2␉␉0x48␊ |
53 | #define DETAILED_TIMING_DESCRIPTION_3␉␉0x5a␊ |
54 | #define DETAILED_TIMING_DESCRIPTION_4␉␉0x6c␊ |
55 | ␊ |
56 | #define DESCRIPTOR_DATA␉␉␉␉5␊ |
57 | ␊ |
58 | #define UPPER_NIBBLE( x ) \␊ |
59 | (((128|64|32|16) & (x)) >> 4)␊ |
60 | ␊ |
61 | #define LOWER_NIBBLE( x ) \␊ |
62 | ((1|2|4|8) & (x))␊ |
63 | ␊ |
64 | #define COMBINE_HI_8LO( hi, lo ) \␊ |
65 | ( (((unsigned)hi) << 8) | (unsigned)lo )␊ |
66 | ␊ |
67 | #define COMBINE_HI_4LO( hi, lo ) \␊ |
68 | ( (((unsigned)hi) << 4) | (unsigned)lo )␊ |
69 | ␊ |
70 | #define PIXEL_CLOCK_LO (unsigned)block[ 0 ]␊ |
71 | #define PIXEL_CLOCK_HI (unsigned)block[ 1 ]␊ |
72 | #define PIXEL_CLOCK␉ (COMBINE_HI_8LO( PIXEL_CLOCK_HI,PIXEL_CLOCK_LO )*10000)␊ |
73 | #define H_ACTIVE_LO (unsigned)block[ 2 ]␊ |
74 | #define H_BLANKING_LO (unsigned)block[ 3 ]␊ |
75 | #define H_ACTIVE_HI UPPER_NIBBLE( (unsigned)block[ 4 ] )␊ |
76 | #define H_ACTIVE COMBINE_HI_8LO( H_ACTIVE_HI, H_ACTIVE_LO )␊ |
77 | #define H_BLANKING_HI LOWER_NIBBLE( (unsigned)block[ 4 ] )␊ |
78 | #define H_BLANKING COMBINE_HI_8LO( H_BLANKING_HI, H_BLANKING_LO )␊ |
79 | ␊ |
80 | #define V_ACTIVE_LO (unsigned)block[ 5 ]␊ |
81 | #define V_BLANKING_LO (unsigned)block[ 6 ]␊ |
82 | #define V_ACTIVE_HI UPPER_NIBBLE( (unsigned)block[ 7 ] )␊ |
83 | #define V_ACTIVE COMBINE_HI_8LO( V_ACTIVE_HI, V_ACTIVE_LO )␊ |
84 | #define V_BLANKING_HI LOWER_NIBBLE( (unsigned)block[ 7 ] )␊ |
85 | #define V_BLANKING COMBINE_HI_8LO( V_BLANKING_HI, V_BLANKING_LO )␊ |
86 | ␊ |
87 | #define H_SYNC_OFFSET_LO (unsigned)block[ 8 ]␊ |
88 | #define H_SYNC_WIDTH_LO (unsigned)block[ 9 ]␊ |
89 | ␊ |
90 | #define V_SYNC_OFFSET_LO UPPER_NIBBLE( (unsigned)block[ 10 ] )␊ |
91 | #define V_SYNC_WIDTH_LO LOWER_NIBBLE( (unsigned)block[ 10 ] )␊ |
92 | ␊ |
93 | #define V_SYNC_WIDTH_HI ((unsigned)block[ 11 ] & (1|2))␊ |
94 | #define V_SYNC_OFFSET_HI (((unsigned)block[ 11 ] & (4|8)) >> 2)␊ |
95 | ␊ |
96 | #define H_SYNC_WIDTH_HI (((unsigned)block[ 11 ] & (16|32)) >> 4)␊ |
97 | #define H_SYNC_OFFSET_HI (((unsigned)block[ 11 ] & (64|128)) >> 6)␊ |
98 | ␊ |
99 | #define V_SYNC_WIDTH COMBINE_HI_4LO( V_SYNC_WIDTH_HI, V_SYNC_WIDTH_LO )␊ |
100 | #define V_SYNC_OFFSET COMBINE_HI_4LO( V_SYNC_OFFSET_HI, V_SYNC_OFFSET_LO )␊ |
101 | ␊ |
102 | #define H_SYNC_WIDTH COMBINE_HI_4LO( H_SYNC_WIDTH_HI, H_SYNC_WIDTH_LO )␊ |
103 | #define H_SYNC_OFFSET COMBINE_HI_4LO( H_SYNC_OFFSET_HI, H_SYNC_OFFSET_LO )␊ |
104 | ␊ |
105 | #define H_SIZE_LO (unsigned)block[ 12 ]␊ |
106 | #define V_SIZE_LO (unsigned)block[ 13 ]␊ |
107 | ␊ |
108 | #define H_SIZE_HI UPPER_NIBBLE( (unsigned)block[ 14 ] )␊ |
109 | #define V_SIZE_HI LOWER_NIBBLE( (unsigned)block[ 14 ] )␊ |
110 | ␊ |
111 | #define H_SIZE COMBINE_HI_8LO( H_SIZE_HI, H_SIZE_LO )␊ |
112 | #define V_SIZE COMBINE_HI_8LO( V_SIZE_HI, V_SIZE_LO )␊ |
113 | ␊ |
114 | #define H_BORDER (unsigned)block[ 15 ]␊ |
115 | #define V_BORDER (unsigned)block[ 16 ]␊ |
116 | ␊ |
117 | #define FLAGS (unsigned)block[ 17 ]␊ |
118 | ␊ |
119 | #define INTERLACED (FLAGS&128)␊ |
120 | #define SYNC_TYPE (FLAGS&3<<3)␉/* bits 4,3 */␊ |
121 | #define SYNC_SEPARATE (3<<3)␊ |
122 | #define HSYNC_POSITIVE (FLAGS & 4)␊ |
123 | #define VSYNC_POSITIVE (FLAGS & 2)␊ |
124 | ␊ |
125 | #define V_MIN_RATE block[ 5 ]␊ |
126 | #define V_MAX_RATE block[ 6 ]␊ |
127 | #define H_MIN_RATE block[ 7 ]␊ |
128 | #define H_MAX_RATE block[ 8 ]␊ |
129 | #define MAX_PIXEL_CLOCK (((int)block[ 9 ]) * 10)␊ |
130 | #define GTF_SUPPORT␉␉block[10]␊ |
131 | ␊ |
132 | #define DPMS_ACTIVE_OFF␉␉(1 << 5)␊ |
133 | #define DPMS_SUSPEND␉␉(1 << 6)␊ |
134 | #define DPMS_STANDBY␉␉(1 << 7)␊ |
135 | ␊ |
136 | struct EDID␊ |
137 | {␊ |
138 | UInt8␉header[8];␉␉␉//0␊ |
139 | UInt8␉vendorProduct[4];␉//8␊ |
140 | UInt8␉serialNumber[4];␉//12␊ |
141 | UInt8␉weekOfManufacture;␉//16␊ |
142 | UInt8␉yearOfManufacture;␉//17␊ |
143 | UInt8␉version;␉␉␉//18␊ |
144 | UInt8␉revision;␉␉␉//19␊ |
145 | UInt8␉displayParams[5];␉//20␊ |
146 | UInt8␉colorCharacteristics[10];␉//25␊ |
147 | UInt8␉establishedTimings[3];␉␉//35␊ |
148 | UInt16␉standardTimings[8];␉␉␉//38␊ |
149 | UInt8␉detailedTimings[72];␉␉//54␊ |
150 | UInt8␉extension;␉␉␉␉␉//126␊ |
151 | UInt8␉checksum;␉␉␉␉␉//127␊ |
152 | };␊ |
153 | ␊ |
154 | ␊ |
155 | typedef struct _edid_mode {␊ |
156 | ␉unsigned short pixel_clock;␊ |
157 | ␉unsigned short h_active;␊ |
158 | ␉unsigned short h_blanking;␊ |
159 | ␉unsigned short v_active;␊ |
160 | ␉unsigned short v_blanking;␊ |
161 | ␉unsigned short h_sync_offset;␊ |
162 | ␉unsigned short h_sync_width;␊ |
163 | ␉unsigned short v_sync_offset;␊ |
164 | ␉unsigned short v_sync_width;␊ |
165 | } edid_mode;␊ |
166 | ␊ |
167 | ␊ |
168 | char* readEDID();␊ |
169 | void getResolution(UInt32* x, UInt32* y, UInt32* bp);␊ |
170 | int fb_parse_edid(struct EDID *edid, edid_mode* var);␊ |
171 | int getEDID( void * edidBlock, UInt8 block);␊ |
172 | //#endif |