vfs: check userland buffers before reading them.
[haiku.git] / headers / private / graphics / common / edid.h
blob5938f1aad1449bc8182d50f894f027f8ccbe77de
1 /*
2 * Copyright 2003, Thomas Kurschel. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 */
5 #ifndef _EDID_H
6 #define _EDID_H
8 //! Extended Display Identification Data (EDID)
10 #include "edid_raw.h"
13 // vendor info
14 typedef struct {
15 char manufacturer[4];
16 uint16 prod_id;
17 uint32 serial;
18 uint8 week;
19 uint16 year;
20 } edid1_vendor;
22 // version info
23 typedef struct {
24 uint8 version;
25 uint8 revision;
26 } edid1_version;
28 // display info
29 typedef struct {
30 BBITFIELD8_7 (
31 input_type : 1, // 1 : digital
32 input_voltage : 2, // 0=0.7V/0.3V, 1=0.714V/0.286,
33 // 2=1V/0.4V, 3=0.7V/0V
34 setup : 1, // true if voltage configurable
35 sep_sync : 1,
36 comp_sync : 1,
37 sync_on_green : 1,
38 sync_serr : 1
40 uint8 h_size;
41 uint8 v_size;
42 uint8 gamma; // (x+100)/100
43 BBITFIELD8_7 (
44 dpms_standby : 1,
45 dpms_suspend : 1,
46 dpms_off : 1,
47 display_type : 2, // 0=mono, 1=rgb, 2=multicolour
48 // since EDID version 1.1
49 std_colour_space : 1,
50 preferred_timing_mode : 1,
51 gtf_supported : 1
53 uint16 red_x; // all colours are 0.10 fixed point
54 uint16 red_y;
55 uint16 green_x;
56 uint16 green_y;
57 uint16 blue_x;
58 uint16 blue_y;
59 uint16 white_x;
60 uint16 white_y;
61 } edid1_display;
63 // standard timing data
64 typedef struct {
65 uint16 h_size;
66 uint16 v_size;
67 uint16 id;
68 uint8 ratio;
69 uint8 refresh;
70 } edid1_std_timing;
72 // additional whitepoint
73 typedef struct {
74 uint8 index;
75 uint16 white_x;
76 uint16 white_y;
77 uint8 gamma; // (x+100)/100
78 } edid1_whitepoint;
80 // detailed timing description
81 typedef struct {
82 uint16 pixel_clock; // in 10 kHz
83 uint16 h_active;
84 uint16 h_blank;
85 uint16 v_active;
86 uint16 v_blank;
87 uint16 h_sync_off;
88 uint16 h_sync_width;
89 uint16 v_sync_off;
90 uint16 v_sync_width;
91 uint16 h_size;
92 uint16 v_size;
93 uint16 h_border;
94 uint16 v_border;
95 BBITFIELD8_4 (
96 interlaced : 1,
97 stereo : 2, // upper bit set - left on sync
98 // lower bit set - right on sync
99 sync : 2,
100 misc : 2
102 } edid1_detailed_timing;
104 // detailed monitor description
105 typedef struct {
106 uint8 monitor_desc_type;
107 union {
108 char serial_number[EDID1_EXTRA_STRING_LEN];
109 char ascii_data[EDID1_EXTRA_STRING_LEN];
110 edid1_monitor_range monitor_range;
111 char monitor_name[EDID1_EXTRA_STRING_LEN];
112 edid1_whitepoint whitepoint[EDID1_NUM_EXTRA_WHITEPOINTS];
113 edid1_std_timing std_timing[EDID1_NUM_EXTRA_STD_TIMING];
114 edid1_detailed_timing detailed_timing;
115 } data;
116 } edid1_detailed_monitor;
118 // EDID data block
119 typedef struct edid1_info {
120 edid1_vendor vendor;
121 edid1_version version;
122 edid1_display display;
123 edid1_established_timing established_timing;
124 edid1_std_timing std_timing[EDID1_NUM_STD_TIMING];
126 // since EDID version 1.2
127 edid1_detailed_monitor detailed_monitor[EDID1_NUM_DETAILED_MONITOR_DESC];
129 uint8 num_sections;
130 } edid1_info;
132 #define EDID_VERSION_1 1
134 #ifdef __cplusplus
135 extern "C" {
136 #endif
138 void edid_decode(edid1_info *edid, const edid1_raw *raw);
139 void edid_dump(edid1_info *edid);
141 #ifdef __cplusplus
143 #endif
145 #endif // _EDID_H