Chameleon

Chameleon Svn Source Tree

Root/tags/2.0/i386/modules/Resolution/include/edid.h

Source at commit 1733 created 12 years 6 months ago.
By blackosx, Use the result from an intitial check to find if the target volume has an EFI system partition, later on in the installation process before checking for previous Chameleon installations. Add some feedback to the installer log.
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_SIZE128
17#define EDID_V1_BLOCKS_TO_GO_OFFSET 126
18//Slice - some more info about EDID
19#define EDID_LENGTH0x80
20#define EDID_HEADER0x00
21#define EDID_HEADER_END0x07
22
23#define ID_MANUFACTURER_NAME0x08
24#define ID_MANUFACTURER_NAME_END0x09
25#define ID_MODEL0x0a
26
27#define ID_SERIAL_NUMBER0x0c
28
29#define MANUFACTURE_WEEK0x10
30#define MANUFACTURE_YEAR0x11
31
32#define EDID_STRUCT_VERSION0x12
33#define EDID_STRUCT_REVISION0x13
34
35#define EDID_STRUCT_DISPLAY 0x14
36
37#define DPMS_FLAGS0x18
38#define ESTABLISHED_TIMING_10x23
39#define ESTABLISHED_TIMING_20x24
40#define MANUFACTURERS_TIMINGS0x25
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_START0x36
48#define DETAILED_TIMING_DESCRIPTION_SIZE18
49#define NO_DETAILED_TIMING_DESCRIPTIONS4
50
51#define DETAILED_TIMING_DESCRIPTION_10x36
52#define DETAILED_TIMING_DESCRIPTION_20x48
53#define DETAILED_TIMING_DESCRIPTION_30x5a
54#define DETAILED_TIMING_DESCRIPTION_40x6c
55
56#define DESCRIPTOR_DATA5
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_SUPPORTblock[10]
131
132#define DPMS_ACTIVE_OFF(1 << 5)
133#define DPMS_SUSPEND(1 << 6)
134#define DPMS_STANDBY(1 << 7)
135
136struct EDID
137{
138 UInt8header[8];//0
139 UInt8vendorProduct[4];//8
140 UInt8serialNumber[4];//12
141 UInt8weekOfManufacture;//16
142 UInt8yearOfManufacture;//17
143 UInt8version;//18
144 UInt8revision;//19
145 UInt8displayParams[5];//20
146 UInt8colorCharacteristics[10];//25
147 UInt8establishedTimings[3];//35
148 UInt16standardTimings[8];//38
149 UInt8detailedTimings[72];//54
150 UInt8extension;//126
151 UInt8checksum;//127
152};
153
154
155typedef struct _edid_mode {
156unsigned short pixel_clock;
157unsigned short h_active;
158unsigned short h_blanking;
159unsigned short v_active;
160unsigned short v_blanking;
161unsigned short h_sync_offset;
162unsigned short h_sync_width;
163unsigned short v_sync_offset;
164unsigned short v_sync_width;
165} edid_mode;
166
167
168char* readEDID();
169void getResolution(UInt32* x, UInt32* y, UInt32* bp);
170int fb_parse_edid(struct EDID *edid, edid_mode* var);
171int getEDID( void * edidBlock, UInt8 block);
172//#endif

Archive Download this file

Revision: 1733