1 | /*␊ |
2 | * Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.␊ |
3 | * All Rights Reserved.␊ |
4 | * Copyright © 2010 Intel Corporation␊ |
5 | *␊ |
6 | * Permission is hereby granted, free of charge, to any person obtaining a␊ |
7 | * copy of this software and associated documentation files (the "Software"),␊ |
8 | * to deal in the Software without restriction, including without limitation␊ |
9 | * the rights to use, copy, modify, merge, publish, distribute, sublicense,␊ |
10 | * and/or sell copies of the Software, and to permit persons to whom the␊ |
11 | * Software is furnished to do so, subject to the following conditions:␊ |
12 | *␊ |
13 | * The above copyright notice and this permission notice (including the next␊ |
14 | * paragraph) shall be included in all copies or substantial portions of the␊ |
15 | * Software.␊ |
16 | *␊ |
17 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR␊ |
18 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,␊ |
19 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL␊ |
20 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER␊ |
21 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,␊ |
22 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE␊ |
23 | * SOFTWARE.␊ |
24 | *␊ |
25 | */␊ |
26 | ␊ |
27 | /*␊ |
28 | ␉Original patch by Nawcom␊ |
29 | ␉http://forum.voodooprojects.org/index.php/topic,1029.0.html␊ |
30 | ␊ |
31 | ␉Original Intel HDx000 code from valv␊ |
32 | ␉Intel Ivy Bridge and Haswell code from ErmaC:␊ |
33 | ␉- http://www.insanelymac.com/forum/topic/288241-intel-hd4000-inject-aaplig-platform-id/␊ |
34 | */␊ |
35 | ␊ |
36 | #include "libsa.h"␊ |
37 | #include "saio_internal.h"␊ |
38 | #include "bootstruct.h"␊ |
39 | #include "pci.h"␊ |
40 | #include "platform.h"␊ |
41 | #include "device_inject.h"␊ |
42 | #include "gma.h"␊ |
43 | #include "vbe.h"␊ |
44 | #include "graphics.h"␊ |
45 | ␊ |
46 | #ifndef DEBUG_GMA␊ |
47 | #define DEBUG_GMA 0␊ |
48 | #endif␊ |
49 | ␊ |
50 | #if DEBUG_GMA␊ |
51 | #define DBG(x...)␉printf(x)␊ |
52 | #else␊ |
53 | #define DBG(x...)␊ |
54 | #endif␊ |
55 | ␊ |
56 | static bool␉doit␉= false;␊ |
57 | static uint8_t default_aapl_ivy[]␉␉=␉{ 0x05,0x00,0x62,0x01 }; // ivy_bridge_ig_vals[5]␊ |
58 | #define AAPL_LEN_IVY ( sizeof(default_aapl_ivy) / sizeof(uint8_t) )␊ |
59 | static uint8_t default_aapl_haswell[]␉␉=␉{ 0x00,0x00,0x26,0x0c }; // haswell_ig_vals[7]␊ |
60 | #define AAPL_LEN_HSW ( sizeof(default_aapl_haswell) / sizeof(uint8_t) )␊ |
61 | ␊ |
62 | uint8_t GMAX3100_vals[23][4] = {␊ |
63 | ␉{ 0x01,0x00,0x00,0x00 },␉//0 "AAPL,HasPanel"␊ |
64 | ␉{ 0x01,0x00,0x00,0x00 },␉//1 "AAPL,SelfRefreshSupported"␊ |
65 | ␉{ 0x01,0x00,0x00,0x00 },␉//2 "AAPL,aux-power-connected"␊ |
66 | ␉{ 0x00,0x00,0x00,0x08 },␉//3 "AAPL,backlight-control"␊ |
67 | ␉{ 0x64,0x00,0x00,0x00 },␉//4 "AAPL00,blackscreen-preferences"␊ |
68 | ␉{ 0x00,0x00,0x00,0x08 },␉//5 "AAPL01,BacklightIntensity"␊ |
69 | ␉{ 0x01,0x00,0x00,0x00 },␉//6 "AAPL01,blackscreen-preferences"␊ |
70 | ␉{ 0x20,0x00,0x00,0x00 },␉//7 "AAPL01,DataJustify"␊ |
71 | ␉{ 0x00,0x00,0x00,0x00 },␉//8 "AAPL01,Depth"␊ |
72 | ␉{ 0x01,0x00,0x00,0x00 },␉//9 "AAPL01,Dither"␊ |
73 | ␉{ 0x20,0x03,0x00,0x00 },␉//10 "AAPL01,DualLink"␊ |
74 | ␉{ 0x00,0x00,0x00,0x00 },␉//11 "AAPL01,Height"␊ |
75 | ␉{ 0x00,0x00,0x00,0x00 },␉//12 "AAPL01,Interlace"␊ |
76 | ␉{ 0x00,0x00,0x00,0x00 },␉//13 "AAPL01,Inverter"␊ |
77 | ␉{ 0x08,0x52,0x00,0x00 },␉//14 "AAPL01,InverterCurrent"␊ |
78 | ␉{ 0x00,0x00,0x00,0x00 },␉//15 "AAPL01,InverterCurrency"␊ |
79 | ␉{ 0x00,0x00,0x00,0x00 },␉//16 "AAPL01,LinkFormat"␊ |
80 | ␉{ 0x01,0x00,0x00,0x00 },␉//17 "AAPL01,LinkType"␊ |
81 | ␉{ 0x01,0x00,0x00,0x00 },␉//18 "AAPL01,Pipe"␊ |
82 | ␉{ 0x3B,0x00,0x00,0x00 },␉//19 "AAPL01,PixelFormat"␊ |
83 | ␉{ 0x00,0x00,0x00,0x00 },␉//20 "AAPL01,Refresh"␊ |
84 | ␉{ 0x6B,0x10,0x00,0x00 },␉//21 "AAPL01,Stretch"␊ |
85 | ␉{ 0xc8,0x95,0x00,0x00 },␉//22 "AAPL01,InverterFrequency"␊ |
86 | };␊ |
87 | ␊ |
88 | uint8_t ivy_bridge_ig_vals[12][4] = {␊ |
89 | ␉{ 0x00,0x00,0x66,0x01 },␉//0 "AAPL,ig-platform-id" //FB: 96MB, Pipes: 3, Ports: 4, FBMem: 3␊ |
90 | ␉{ 0x01,0x00,0x66,0x01 },␉//1 "AAPL,ig-platform-id" //FB: 96MB, Pipes: 3, Ports: 4, FBMem: 3␊ |
91 | ␉{ 0x02,0x00,0x66,0x01 },␉//2 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 1, FBMem: 1␊ |
92 | ␉{ 0x03,0x00,0x66,0x01 },␉//3 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 2, Ports: 2, FBMem: 2␊ |
93 | ␉{ 0x04,0x00,0x66,0x01 },␉//4 "AAPL,ig-platform-id" //FB: 32MB, Pipes: 3, Ports: 1, FBMem: 1␊ |
94 | ␉{ 0x05,0x00,0x62,0x01 },␉//5 "AAPL,ig-platform-id" //FB: 32MB, Pipes: 2, Ports: 3, FBMem: 2␊ |
95 | ␉{ 0x06,0x00,0x62,0x01 },␉//6 "AAPL,ig-platform-id" //FB: 0MB, Pipes: 0, Ports: 0, FBMem: 0␊ |
96 | ␉{ 0x07,0x00,0x62,0x01 },␉//7 "AAPL,ig-platform-id" //FB: 0MB, Pipes: 0, Ports: 0, FBMem: 0␊ |
97 | ␉{ 0x08,0x00,0x66,0x01 },␉//8 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3␊ |
98 | ␉{ 0x09,0x00,0x66,0x01 },␉//9 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3␊ |
99 | ␉{ 0x0a,0x00,0x66,0x01 },␉//10 "AAPL,ig-platform-id" //FB: 32MB, Pipes: 2, Ports: 3, FBMem: 2␊ |
100 | ␉{ 0x0b,0x00,0x66,0x01 }␉␉//11 "AAPL,ig-platform-id" //FB: 32MB, Pipes: 2, Ports: 3, FBMem: 2␊ |
101 | };␊ |
102 | ␊ |
103 | uint8_t haswell_ig_vals[16][4] = { /* - TESTING DATA --*/␊ |
104 | ␉{ 0x00,0x00,0x06,0x04 },␉// 0 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3 - mobile GT1␊ |
105 | ␉{ 0x00,0x00,0x06,0x0c },␉// 1 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3 - SDV mobile GT1␊ |
106 | ␉{ 0x00,0x00,0x16,0x04 },␉// 2 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3 - mobile GT2␊ |
107 | ␉{ 0x00,0x00,0x16,0x0a },␉// 3 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3 - ULT mobile GT2␊ |
108 | ␉{ 0x00,0x00,0x16,0x0c },␉// 4 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3 - SDV mobile GT2␊ |
109 | ␉{ 0x00,0x00,0x26,0x04 },␉// 5 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3 - mobile GT3␊ |
110 | ␉{ 0x00,0x00,0x26,0x0a },␉// 6 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3 - ULT mobile GT3␊ |
111 | ␉{ 0x00,0x00,0x26,0x0c },␉// 7 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3 - SDV mobile GT3␊ |
112 | ␉{ 0x00,0x00,0x26,0x0d },␉// 8 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3 - CRW mobile GT3␊ |
113 | ␉{ 0x02,0x00,0x16,0x04 },␉// 9 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 1, Ports: 1, FBMem: 1 - mobile GT2␊ |
114 | ␉{ 0x03,0x00,0x22,0x0d },␉// 10 "AAPL,ig-platform-id" //FB: 0MB, Pipes: 0, Ports: 0, FBMem: 0 - CRW Desktop GT3␊ |
115 | //␉{ 0x04,0x00,0x12,0x04 },␉// ?? "AAPL,ig-platform-id" //FB: 32MB, Pipes: 3, Ports: 3, FBMem: 3 - ULT mobile GT3␊ |
116 | ␉{ 0x05,0x00,0x26,0x0a },␉// 11 "AAPL,ig-platform-id" //FB: 32MB, Pipes: 3, Ports: 3, FBMem: 3 - ULT mobile GT3␊ |
117 | ␉{ 0x06,0x00,0x26,0x0a },␉// 12 "AAPL,ig-platform-id" //FB: 32MB, Pipes: 3, Ports: 3, FBMem: 3 - ULT mobile GT3␊ |
118 | ␉{ 0x07,0x00,0x26,0x0d },␉// 13 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 4, FBMem: 3 - CRW mobile GT3␊ |
119 | ␉{ 0x08,0x00,0x26,0x0a },␉// 14 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3 - ULT mobile GT3␊ |
120 | ␉{ 0x08,0x00,0x2e,0x0a },␉// 15 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3 - ULT reserved GT3␊ |
121 | };␊ |
122 | ␊ |
123 | uint8_t HD2000_vals[16][4] = {␊ |
124 | ␉{ 0x00,0x00,0x00,0x00 }, //0 "AAPL00,PixelFormat"␊ |
125 | ␉{ 0x00,0x00,0x00,0x00 }, //1 "AAPL00,T1"␊ |
126 | ␉{ 0x14,0x00,0x00,0x00 }, //2 "AAPL00,T2"␊ |
127 | ␉{ 0xfa,0x00,0x00,0x00 }, //3 "AAPL00,T3"␊ |
128 | ␉{ 0x2c,0x01,0x00,0x00 }, //4 "AAPL00,T4"␊ |
129 | ␉{ 0x00,0x00,0x00,0x00 }, //5 "AAPL00,T5"␊ |
130 | ␉{ 0x14,0x00,0x00,0x00 }, //6 "AAPL00,T6"␊ |
131 | ␉{ 0xf4,0x01,0x00,0x00 }, //7 "AAPL00,T7"␊ |
132 | ␉{ 0x00,0x00,0x00,0x00 }, //8 "AAPL00,LinkType"␊ |
133 | ␉{ 0x00,0x00,0x00,0x00 }, //9 "AAPL00,LinkFormat"␊ |
134 | ␉{ 0x00,0x00,0x00,0x00 }, //10 "AAPL00,DualLink"␊ |
135 | ␉{ 0x00,0x00,0x00,0x00 }, //11 "AAPL00,Dither"␊ |
136 | ␉{ 0x00,0x00,0x00,0x00 }, //12 "AAPL00,DataJustify"␊ |
137 | ␉{ 0x00,0x00,0x00,0x00 }, //13 "graphic-options"␊ |
138 | ␉{ 0x00,0x00,0x00,0x00 }, //14␊ |
139 | ␉{ 0x01,0x00,0x00,0x00 } //15␊ |
140 | };␊ |
141 | ␊ |
142 | uint8_t HD3000_vals[17][4] = {␊ |
143 | ␉{ 0x00,0x00,0x00,0x00 }, //0 "AAPL00,PixelFormat"␊ |
144 | ␉{ 0x00,0x00,0x00,0x00 }, //1 "AAPL00,T1"␊ |
145 | ␉{ 0x14,0x00,0x00,0x00 }, //2 "AAPL00,T2"␊ |
146 | ␉{ 0xfa,0x00,0x00,0x00 }, //3 "AAPL00,T3"␊ |
147 | ␉{ 0x2c,0x01,0x00,0x00 }, //4 "AAPL00,T4"␊ |
148 | ␉{ 0x00,0x00,0x00,0x00 }, //5 "AAPL00,T5"␊ |
149 | ␉{ 0x14,0x00,0x00,0x00 }, //6 "AAPL00,T6"␊ |
150 | ␉{ 0xf4,0x01,0x00,0x00 }, //7 "AAPL00,T7"␊ |
151 | ␉{ 0x00,0x00,0x00,0x00 }, //8 "AAPL00,LinkType"␊ |
152 | ␉{ 0x00,0x00,0x00,0x00 }, //9 "AAPL00,LinkFormat"␊ |
153 | ␉{ 0x00,0x00,0x00,0x00 }, //10 "AAPL00,DualLink"␊ |
154 | ␉{ 0x00,0x00,0x00,0x00 }, //11 "AAPL00,Dither"␊ |
155 | ␉{ 0x00,0x00,0x00,0x00 }, //12 "AAPL00,DataJustify"␊ |
156 | ␉{ 0x00,0x00,0x00,0x00 }, //13 "graphic-options"␊ |
157 | ␉{ 0x00,0x00,0x00,0x00 }, //14␊ |
158 | ␉{ 0x01,0x00,0x00,0x00 }, //15␊ |
159 | ␉{ 0x00,0x00,0x01,0x00 } //16 AAPL,snb-platform-id␊ |
160 | };␊ |
161 | ␊ |
162 | uint8_t HD4000_vals[15][4] = {␊ |
163 | ␉{ 0x00,0x00,0x00,0x00 }, //0 "AAPL00,PixelFormat"␊ |
164 | ␉{ 0x00,0x00,0x00,0x00 }, //1 "AAPL00,T1"␊ |
165 | ␉{ 0x01,0x00,0x00,0x00 }, //2 "AAPL00,T2"␊ |
166 | ␉{ 0xc8,0x00,0x00,0x00 }, //3 "AAPL00,T3"␊ |
167 | ␉{ 0xc8,0x00,0x00,0x00 }, //4 "AAPL00,T4"␊ |
168 | ␉{ 0x01,0x00,0x00,0x00 }, //5 "AAPL00,T5"␊ |
169 | ␉{ 0x00,0x00,0x00,0x00 }, //6 "AAPL00,T6"␊ |
170 | ␉{ 0x90,0x01,0x00,0x00 }, //7 "AAPL00,T7"␊ |
171 | ␉{ 0x01,0x00,0x00,0x00 }, //8 "AAPL00,LinkType"␊ |
172 | ␉{ 0x00,0x00,0x00,0x00 }, //9 "AAPL00,LinkFormat"␊ |
173 | ␉{ 0x01,0x00,0x00,0x00 }, //10 "AAPL00,DualLink"␊ |
174 | ␉{ 0x00,0x00,0x00,0x00 }, //11 "AAPL00,Dither"␊ |
175 | ␉{ 0xc3,0x8c,0x64,0x00 }, //12 "AAPL,gray-value"␊ |
176 | ␉{ 0x01,0x00,0x00,0x00 }, //13 "AAPL,gray-page"␊ |
177 | ␉{ 0x0c,0x00,0x00,0x00 } //14 "graphics-options"␊ |
178 | };␊ |
179 | ␊ |
180 | // http://www.insanelymac.com/forum/topic/286092-guide-1st-generation-intel-hd-graphics-qeci/␊ |
181 | uint8_t HDx000_os_info[20] = {␊ |
182 | ␉0x30,0x49,0x01,0x11,0x01,0x10,0x08,0x00,0x00,0x01,␊ |
183 | ␉0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF␊ |
184 | };␊ |
185 | ␊ |
186 | uint8_t HD2000_tbl_info[18] = {␊ |
187 | ␉0x30,0x44,0x02,0x02,0x02,0x02,0x00,0x00,0x00,␊ |
188 | ␉0x00,0x01,0x02,0x02,0x02,0x00,0x01,0x02,0x02␊ |
189 | };␊ |
190 | uint8_t HD2000_os_info[20] = {␊ |
191 | ␉0x30,0x49,0x01,0x11,0x11,0x11,0x08,0x00,0x00,0x01,␊ |
192 | ␉0xf0,0x1f,0x01,0x00,0x00,0x00,0x10,0x07,0x00,0x00␊ |
193 | };␊ |
194 | ␊ |
195 | // The following values came from a Sandy Bridge MacBook Air␊ |
196 | uint8_t HD3000_tbl_info[18] = {␊ |
197 | ␉0x30,0x44,0x02,0x02,0x02,0x02,0x00,0x00,0x00,␊ |
198 | ␉0x00,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01␊ |
199 | };␊ |
200 | ␊ |
201 | // The following values came from a Sandy Bridge MacBook Air␊ |
202 | uint8_t HD3000_os_info[20] = {␊ |
203 | ␉0x30,0x49,0x01,0x12,0x12,0x12,0x08,0x00,0x00,0x01,␊ |
204 | ␉0xf0,0x1f,0x01,0x00,0x00,0x00,0x10,0x07,0x00,0x00␊ |
205 | };␊ |
206 | ␊ |
207 | ␊ |
208 | uint8_t reg_TRUE[]␉= { 0x01, 0x00, 0x00, 0x00 };␊ |
209 | uint8_t reg_FALSE[] = { 0x00, 0x00, 0x00, 0x00 };␊ |
210 | ␊ |
211 | // https://en.wikipedia.org/wiki/Comparison_of_Intel_graphics_processing_units#Seventh_generation␊ |
212 | ␊ |
213 | /* http://cgit.freedesktop.org/xorg/driver/xf86-video-intel/tree/src/intel_module.c */␊ |
214 | ␊ |
215 | static intel_gfx_info_t intel_gfx_chipsets[] = {␊ |
216 | ␉{GMA_I810,␉␉␉"i810"},␊ |
217 | ␉{GMA_I810_DC100,␉␉"i810-dc100"},␊ |
218 | ␉{GMA_I810_E,␉␉␉"i810e"},␊ |
219 | ␉{GMA_I815,␉␉␉"i815"},␊ |
220 | ␉{GMA_I830_M,␉␉␉"i830M"},␊ |
221 | ␉{GMA_845_G,␉␉␉"845G"},␊ |
222 | ␉{GMA_I854,␉␉␉"854"},␊ |
223 | ␉{GMA_I855_GM,␉␉␉"852GM/855GM"},␊ |
224 | ␉{GMA_I865_G,␉␉␉"865G"},␊ |
225 | ␉{GMA_I915_G,␉␉␉"915G"},␊ |
226 | ␉{GMA_E7221_G,␉␉␉"E7221 (i915)"},␊ |
227 | ␉{GMA_I915_GM,␉␉␉"915GM"},␊ |
228 | ␉{GMA_I945_G,␉␉␉"945G"},␊ |
229 | ␉// 2776 /* Desktop GMA950 */␊ |
230 | ␉// 2782 /* GMA 915 */␊ |
231 | ␉// 2792 /* Mobile GMA915 */␊ |
232 | ␉{GMA_I945_GM,␉␉␉"945GM"},␊ |
233 | ␉{GMA_I945_GME,␉␉␉"945GME"},␊ |
234 | ␉// 27A6 /* Mobile GMA950 */␊ |
235 | ␉// 29C3 /* Desktop GMA3100 */␊ |
236 | ␉{GMA_PINEVIEW_M,␉␉"Pineview GM"},␊ |
237 | ␉{GMA_GMA3150_M,␉␉␉"Pineview GM"},␉␉// A012 /* Mobile GMA3150 */␊ |
238 | ␉{GMA_PINEVIEW_G,␉␉"Pineview G"},␊ |
239 | ␉{GMA_GMA3150_D,␉␉␉"Desktop GMA3150"},␉// A002 /* Desktop GMA3150 */␊ |
240 | ␉{GMA_I965_G,␉␉␉"965G"},␊ |
241 | ␉{GMA_G35_G,␉␉␉"G35"},␊ |
242 | ␉{GMA_I965_Q,␉␉␉"965Q"},␊ |
243 | ␉{GMA_I946_GZ,␉␉␉"946GZ"},␊ |
244 | ␉{GMA_I965_GM,␉␉␉"965GM"},␊ |
245 | ␉{GMA_I965_GME,␉␉␉"965GME/GLE"},␊ |
246 | ␉{GMA_G33_G,␉␉␉"G33"},␊ |
247 | ␉// 2A13 /* GMAX3100 */␊ |
248 | ␉// 2A43 /* GMAX3100 */␊ |
249 | ␉{GMA_Q35_G,␉␉␉"Q35"},␊ |
250 | ␉{GMA_Q33_G,␉␉␉"Q33"},␊ |
251 | ␉{GMA_GM45_GM,␉␉␉"GM45"},␊ |
252 | ␉{GMA_G45_E_G,␉␉␉"4 Series"},␊ |
253 | ␉{GMA_G45_G,␉␉␉"G45/G43"},␊ |
254 | ␉{GMA_Q45_G,␉␉␉"Q45/Q43"},␊ |
255 | ␉{GMA_G41_G,␉␉␉"G41"},␊ |
256 | ␉{GMA_B43_G,␉␉␉"B43"},␊ |
257 | ␉{GMA_B43_G1,␉␉␉"B43"},␊ |
258 | ␉/**/␊ |
259 | ␉{GMA_IRONLAKE_D_G,␉␉HD_GRAPHICS},␊ |
260 | ␉{GMA_IRONLAKE_M_G,␉␉HD_GRAPHICS},␊ |
261 | ␉// 004A /* HD2000 */␊ |
262 | ␊ |
263 | ␉/* Sandy */␊ |
264 | ␉{GMA_SANDYBRIDGE_GT1,␉␉HD_GRAPHICS_2000 },␊ |
265 | ␉{GMA_SANDYBRIDGE_GT2,␉␉HD_GRAPHICS_3000 },␊ |
266 | ␉{GMA_SANDYBRIDGE_GT2_PLUS,␉HD_GRAPHICS_3000 },␊ |
267 | ␉{GMA_SANDYBRIDGE_M_GT1,␉␉HD_GRAPHICS_2000 },␊ |
268 | ␉{GMA_SANDYBRIDGE_M_GT2,␉␉HD_GRAPHICS_3000 },␊ |
269 | ␉{GMA_SANDYBRIDGE_M_GT2_PLUS,␉HD_GRAPHICS_3000 },␊ |
270 | ␉{GMA_SANDYBRIDGE_S_GT,␉␉HD_GRAPHICS },␊ |
271 | ␉// 010B /* ??? */␊ |
272 | ␉// 010E /* ??? */␊ |
273 | ␊ |
274 | ␉/* Ivy */␊ |
275 | ␉{GMA_IVYBRIDGE_M_GT1,␉␉HD_GRAPHICS_2500 },␊ |
276 | ␉{GMA_IVYBRIDGE_M_GT2,␉␉HD_GRAPHICS_4000 },␊ |
277 | ␉{GMA_IVYBRIDGE_D_GT1,␉␉HD_GRAPHICS_2500 },␊ |
278 | ␉{GMA_IVYBRIDGE_D_GT2,␉␉HD_GRAPHICS_4000 },␊ |
279 | ␉{GMA_IVYBRIDGE_S_GT1,␉␉HD_GRAPHICS },␊ |
280 | ␉{GMA_IVYBRIDGE_S_GT2,␉␉"HD Graphics P4000" },␊ |
281 | ␉{GMA_IVYBRIDGE_S_GT3,␉␉ HD_GRAPHICS },␉␉// 015e␊ |
282 | ␉{GMA_IVYBRIDGE_S_GT4,␉␉HD_GRAPHICS_2500 },␉// 0172 /* HD Graphics 2500 Mobile */␊ |
283 | ␉{GMA_IVYBRIDGE_S_GT5,␉␉HD_GRAPHICS_2500 },␉// 0176 /* HD Graphics 2500 Mobile */␊ |
284 | ␊ |
285 | ␉/* Haswell */␊ |
286 | ␉// 0090 /* ??? */␊ |
287 | ␉// 0091 /* ??? */␊ |
288 | ␉// 0092 /* ??? */␊ |
289 | ␉{GMA_HASWELL_D_GT1,␉␉HD_GRAPHICS },␊ |
290 | ␉{GMA_HASWELL_D_GT2,␉␉HD_GRAPHICS_4600 },␉/* 0412 */␊ |
291 | ␉{GMA_HASWELL_D_GT3,␉␉HD_GRAPHICS_5000 },␉/* ??? */␊ |
292 | ␉{GMA_HASWELL_M_GT1,␉␉HD_GRAPHICS },␊ |
293 | ␉{GMA_HASWELL_M_GT2,␉␉HD_GRAPHICS_4600 },␉/* 0416 */␊ |
294 | ␉{GMA_HASWELL_M_GT3,␉␉HD_GRAPHICS_5000 },␉/* ??? */␊ |
295 | ␉{GMA_HASWELL_S_GT1,␉␉HD_GRAPHICS },␊ |
296 | ␉{GMA_HASWELL_S_GT2,␉␉"HD Graphics P4600/P4700" },␊ |
297 | ␉{GMA_HASWELL_S_GT3,␉␉HD_GRAPHICS_5000 },␉/* ??? */␊ |
298 | ␉{GMA_HASWELL_B_GT1,␉␉HD_GRAPHICS },␉␉/* ??? */␊ |
299 | ␉{GMA_HASWELL_B_GT2,␉␉HD_GRAPHICS },␉␉/* ??? */␊ |
300 | ␉{GMA_HASWELL_B_GT3,␉␉HD_GRAPHICS },␉␉/* ??? */␊ |
301 | ␉{GMA_HASWELL_E_GT1,␉␉HD_GRAPHICS },␊ |
302 | ␉{GMA_HASWELL_E_GT2,␉␉HD_GRAPHICS_4400 },␉/* 041e */␊ |
303 | ␉{GMA_HASWELL_E_GT3,␉␉HD_GRAPHICS },␉␉/* ??? */␊ |
304 | ␉{GMA_HASWELL_ULT_D_GT1,␉␉HD_GRAPHICS },␉␉/* ??? */␊ |
305 | ␉{GMA_HASWELL_ULT_D_GT2,␉␉HD_GRAPHICS },␉␉/* ??? */␊ |
306 | ␉{GMA_HASWELL_ULT_D_GT3,␉␉IRIS_5100 },␊ |
307 | ␉{GMA_HASWELL_ULT_M_GT1,␉␉HD_GRAPHICS },␊ |
308 | ␉{GMA_HASWELL_ULT_M_GT2,␉␉HD_GRAPHICS_4400 },␉/* 0a16 */␊ |
309 | ␉{GMA_HASWELL_ULT_M_GT3,␉␉HD_GRAPHICS_5000 },␉/* 0a26 */␊ |
310 | ␉{GMA_HASWELL_ULT_S_GT1,␉␉HD_GRAPHICS },␉␉/* ??? */␊ |
311 | ␉{GMA_HASWELL_ULT_S_GT2,␉␉HD_GRAPHICS },␉␉/* ??? */␊ |
312 | ␉{GMA_HASWELL_ULT_S_GT3,␉␉IRIS_5100 },␊ |
313 | ␉{GMA_HASWELL_ULT_B_GT1,␉␉HD_GRAPHICS },␉␉/* ??? */␊ |
314 | ␉{GMA_HASWELL_ULT_B_GT2,␉␉HD_GRAPHICS },␉␉/* ??? */␊ |
315 | ␉{GMA_HASWELL_ULT_B_GT3,␉␉IRIS_5100 },␊ |
316 | ␉{GMA_HASWELL_ULT_E_GT1,␉␉HD_GRAPHICS_4400 },␉/* 0a0e */␊ |
317 | ␉{GMA_HASWELL_ULT_E_GT2,␉␉HD_GRAPHICS_4200 },␉/* 0a1e */␊ |
318 | ␉// 0A2A /* ??? */␊ |
319 | ␉{GMA_HASWELL_ULT_E_GT3,␉␉IRIS_5100 },␊ |
320 | ␉{GMA_HASWELL_SDV_D_GT1_IG,␉HD_GRAPHICS },␉␉// 0C02 /* Intel Haswell HD Graphics - GTL */␊ |
321 | ␉// 0C04 /* DRAM Controller */␊ |
322 | ␉{GMA_HASWELL_SDV_M_GT1_IG,␉HD_GRAPHICS },␉␉// 0C06 /* Intel Haswell HD Graphics - GTL */␊ |
323 | ␉{GMA_HASWELL_SDV_D_GT2_IG,␉HD_GRAPHICS },␉␉// 0C12 /* Intel Haswell HD Graphics - GTM */␊ |
324 | ␉{GMA_HASWELL_SDV_M_GT2_IG,␉HD_GRAPHICS },␉␉// 0C16 /* Intel Haswell HD Graphics - GTH */␊ |
325 | ␉{GMA_HASWELL_SDV_D_GT2_PLUS_IG,␉HD_GRAPHICS },␉␉// 0C22 /* Intel Haswell HD Graphics - GTH */␊ |
326 | ␉{GMA_HASWELL_SDV_M_GT2_PLUS_IG,␉HD_GRAPHICS },␉␉// 0C26 /* Intel Haswell HD Graphics - GTH */␊ |
327 | ␉{GMA_HASWELL_CRW_D_GT1,␉␉HD_GRAPHICS },␉␉/* 0d02 */␊ |
328 | ␉{GMA_HASWELL_CRW_D_GT2,␉␉HD_GRAPHICS_4600 },␊ |
329 | ␉{GMA_HASWELL_CRW_D_GT3,␉␉IRIS_5200 },␉␉/* 0d22 */␊ |
330 | ␉{GMA_HASWELL_CRW_M_GT1,␉␉HD_GRAPHICS },␉␉/* 0d06 */␊ |
331 | ␉{GMA_HASWELL_CRW_M_GT2,␉␉HD_GRAPHICS_4600 },␉/* 0d16 */␊ |
332 | ␉{GMA_HASWELL_CRW_M_GT3,␉␉IRIS_5200 },␉␉/* 0d26 */␊ |
333 | ␉{GMA_HASWELL_CRW_S_GT1,␉␉HD_GRAPHICS },␉␉/* 0d0a */␊ |
334 | ␉{GMA_HASWELL_CRW_S_GT2,␉␉HD_GRAPHICS },␉␉/* 0d1a */␊ |
335 | ␉{GMA_HASWELL_CRW_S_GT3,␉␉IRIS_5200 },␊ |
336 | ␉{GMA_HASWELL_CRW_B_GT1,␉␉HD_GRAPHICS },␉␉/* 0d0b */␊ |
337 | ␉{GMA_HASWELL_CRW_B_GT2,␉␉HD_GRAPHICS },␉␉/* 0d1b */␊ |
338 | ␉{GMA_HASWELL_CRW_B_GT3,␉␉IRIS_5200 },␊ |
339 | ␉{GMA_HASWELL_CRW_E_GT1,␉␉HD_GRAPHICS },␉␉/* 0d0e */␊ |
340 | ␉{GMA_HASWELL_CRW_E_GT2,␉␉HD_GRAPHICS },␉␉/* od1e */␊ |
341 | ␉{GMA_HASWELL_CRW_E_GT3,␉␉IRIS_5200 },␊ |
342 | ␉{GMA_HASWELL_CRW_M_GT2_PLUS_IG,␉HD_GRAPHICS }␊ |
343 | };␊ |
344 | ␊ |
345 | #define GFX_DEVICES_LEN (sizeof(intel_gfx_chipsets) / sizeof(intel_gfx_chipsets[0]))␊ |
346 | ␊ |
347 | /* END http://cgit.freedesktop.org/xorg/driver/xf86-video-intel/tree/src/intel_module.c */␊ |
348 | ␊ |
349 | /* Get Intel GFX device name */␊ |
350 | static char *get_gma_controller_name(uint16_t device_id, uint16_t vendor_id)␊ |
351 | {␊ |
352 | ␉int i = 0;␊ |
353 | ␉static char desc[128];␊ |
354 | ␊ |
355 | ␉for (i = 0; i < GFX_DEVICES_LEN; i++)␊ |
356 | ␉{␊ |
357 | ␉␉if (intel_gfx_chipsets[i].model == ((device_id << 16) | vendor_id))␊ |
358 | ␉␉{␊ |
359 | ␉␉␉snprintf(desc, sizeof(desc), "%s %s", INTEL_NAME, intel_gfx_chipsets[i].label_info);␊ |
360 | ␉␉␉return desc;␊ |
361 | ␉␉}␊ |
362 | ␉}␊ |
363 | ␉snprintf(desc, sizeof(desc), "Unknown %s Graphics card", INTEL_NAME);␊ |
364 | ␉return desc;␊ |
365 | }␊ |
366 | ␊ |
367 | bool setup_gma_devprop(pci_dt_t *gma_dev)␊ |
368 | {␊ |
369 | ␉char␉␉␉␉*devicepath = NULL;␊ |
370 | ␉volatile uint8_t␉␉*regs;␊ |
371 | ␉uint32_t␉␉␉bar[7];␊ |
372 | ␉char␉␉␉␉*model = NULL;␊ |
373 | ␉uint8_t BuiltIn =␉␉0x00;␊ |
374 | ␉uint16_t␉␉␉vendor_id = gma_dev->vendor_id;␊ |
375 | ␉uint16_t␉␉␉device_id = gma_dev->device_id;␊ |
376 | ␉uint8_t ClassFix[4] = { 0x00, 0x00, 0x03, 0x00 };␊ |
377 | ␉int␉␉␉␉n_igs = 0;␊ |
378 | ␉int␉␉␉␉len;␊ |
379 | ␉const char␉␉␉*value;␊ |
380 | ␉devicepath = get_pci_dev_path(gma_dev);␊ |
381 | ␊ |
382 | ␉bar[0] = pci_config_read32(gma_dev->dev.addr, 0x10);␊ |
383 | ␉regs = (uint8_t *) (bar[0] & ~0x0f);␊ |
384 | ␊ |
385 | ␉model = get_gma_controller_name(device_id, vendor_id);␊ |
386 | ␊ |
387 | ␉verbose("---------------------------------------------\n");␊ |
388 | ␉verbose("------------ INTEL DEVICE INFO --------------\n");␊ |
389 | ␉verbose("---------------------------------------------\n");␊ |
390 | ␉verbose("Class code: [%04x]\n%s [%04x:%04x] (rev %02x)\nSubsystem: [%04x:%04x] :: %s\n",␊ |
391 | ␉␉␉gma_dev->class_id, model, gma_dev->vendor_id, gma_dev->device_id, gma_dev->revision_id, gma_dev->subsys_id.subsys.vendor_id, gma_dev->subsys_id.subsys.device_id, devicepath);␊ |
392 | ␊ |
393 | ␉if (!string)␊ |
394 | ␉{␊ |
395 | ␉␉string = devprop_create_string();␊ |
396 | ␉}␊ |
397 | ␊ |
398 | ␉struct DevPropDevice *device = devprop_add_device(string, devicepath);␊ |
399 | ␉if (!device)␊ |
400 | ␉{␊ |
401 | ␉␉printf("[setup_gma_devprop] Failed initializing dev-prop string dev-entry!\n");␊ |
402 | ␉␉pause();␊ |
403 | ␉␉return false;␊ |
404 | ␉}␊ |
405 | ␊ |
406 | ␉devprop_add_value(device, "model", (uint8_t *)model, (strlen(model) + 1));␊ |
407 | ␉devprop_add_value(device, "device_type", (uint8_t *)"display", 8);␊ |
408 | ␊ |
409 | ␉if (getBoolForKey(kUseIntelHDMI, &doit, &bootInfo->chameleonConfig) && doit)␊ |
410 | ␉{␊ |
411 | ␉␉devprop_add_value(device, "hda-gfx", (uint8_t *)"onboard-1", 10);␊ |
412 | ␉}␊ |
413 | ␉else␊ |
414 | ␉{␊ |
415 | ␉␉devprop_add_value(device, "hda-gfx", (uint8_t *)"onboard-2", 10);␊ |
416 | ␉}␊ |
417 | ␊ |
418 | ␉switch ((device_id << 16) | vendor_id)␊ |
419 | ␉{␊ |
420 | ␉␉case GMA_IRONLAKE_D_G: // 0042␊ |
421 | ␉␉case GMA_IRONLAKE_M_G: // 0046␊ |
422 | ␉␉␉devprop_add_value(device, "built-in",␉␉&BuiltIn, 1);␊ |
423 | ␉␉␉devprop_add_value(device, "class-code",␉␉ClassFix, 4);␊ |
424 | ␉␉␉//devprop_add_value(device, "hda-gfx",␉␉(uint8_t *)"onboard-1", 10);␊ |
425 | ␉␉␉devprop_add_value(device, "AAPL,os-info",␉HDx000_os_info, 20);␊ |
426 | ␉␉␉break;␊ |
427 | ␉␉/* 27A2, 27AE, 27A6, A001, A011, A012, */␊ |
428 | ␉␉case GMA_I945_GM: // Mobile GMA950 Mobile GMA3150␊ |
429 | ␉␉case GMA_I945_GME:␊ |
430 | ␉␉//case GMA_945GM:␊ |
431 | ␉␉case GMA_PINEVIEW_G:␊ |
432 | ␉␉case GMA_PINEVIEW_M:␊ |
433 | ␉␉case GMA_GMA3150_M:␊ |
434 | ␉␉␉devprop_add_value(device, "AAPL,HasPanel",␉reg_TRUE, 4);␊ |
435 | ␉␉␉devprop_add_value(device, "built-in",␉␉&BuiltIn, 1);␊ |
436 | ␉␉␉devprop_add_value(device, "class-code",␉␉ClassFix, 4);␊ |
437 | ␉␉␉break;␊ |
438 | ␊ |
439 | ␉␉/* 2772 ,2776, A002 */␊ |
440 | ␉␉case GMA_I945_G: // Desktop GMA950 Desktop GMA3150␊ |
441 | ␉␉//case GMA_82945G:␊ |
442 | ␉␉case GMA_GMA3150_D:␊ |
443 | ␉␉␉BuiltIn = 0x01;␊ |
444 | ␉␉␉devprop_add_value(device, "built-in",␉␉&BuiltIn, 1);␊ |
445 | ␉␉␉devprop_add_value(device, "class-code",␉␉ClassFix, 4);␊ |
446 | ␉␉␉break;␊ |
447 | ␊ |
448 | ␉␉/* 2A02, 2A12, 2A13, 2A42, 2A43 */␊ |
449 | ␉␉case GMA_I965_GM: // GMAX3100␊ |
450 | ␉␉case GMA_I965_GME:␊ |
451 | ␉␉//case 0x80862A13:␊ |
452 | ␉␉case GMA_GM45_GM:␊ |
453 | ␉␉//case GMA_GM45_GM2:␊ |
454 | ␉␉␉devprop_add_value(device, "AAPL,HasPanel",␉␉␉GMAX3100_vals[0], 4);␊ |
455 | ␉␉␉devprop_add_value(device, "AAPL,SelfRefreshSupported",␉␉GMAX3100_vals[1], 4);␊ |
456 | ␉␉␉devprop_add_value(device, "AAPL,aux-power-connected",␉␉GMAX3100_vals[2], 4);␊ |
457 | ␉␉␉devprop_add_value(device, "AAPL,backlight-control",␉␉GMAX3100_vals[3], 4);␊ |
458 | ␉␉␉devprop_add_value(device, "AAPL00,blackscreen-preferences",␉GMAX3100_vals[4], 4);␊ |
459 | ␉␉␉devprop_add_value(device, "AAPL01,BacklightIntensity",␉␉GMAX3100_vals[5], 4);␊ |
460 | ␉␉␉devprop_add_value(device, "AAPL01,blackscreen-preferences",␉GMAX3100_vals[6], 4);␊ |
461 | ␉␉␉devprop_add_value(device, "AAPL01,DataJustify",␉␉␉GMAX3100_vals[7], 4);␊ |
462 | ␉␉␉devprop_add_value(device, "AAPL01,Depth",␉␉␉GMAX3100_vals[8], 4);␊ |
463 | ␉␉␉devprop_add_value(device, "AAPL01,Dither",␉␉␉GMAX3100_vals[9], 4);␊ |
464 | ␉␉␉devprop_add_value(device, "AAPL01,DualLink",␉␉␉GMAX3100_vals[10], 4);␊ |
465 | ␉␉␉devprop_add_value(device, "AAPL01,Height",␉␉␉GMAX3100_vals[11], 4);␊ |
466 | ␉␉␉devprop_add_value(device, "AAPL01,Interlace",␉␉␉GMAX3100_vals[12], 4);␊ |
467 | ␉␉␉devprop_add_value(device, "AAPL01,Inverter",␉␉␉GMAX3100_vals[13], 4);␊ |
468 | ␉␉␉devprop_add_value(device, "AAPL01,InverterCurrent",␉␉GMAX3100_vals[14], 4);␊ |
469 | ␉␉␉devprop_add_value(device, "AAPL01,InverterCurrency",␉␉GMAX3100_vals[15], 4);␊ |
470 | ␉␉␉devprop_add_value(device, "AAPL01,LinkFormat",␉␉␉GMAX3100_vals[16], 4);␊ |
471 | ␉␉␉devprop_add_value(device, "AAPL01,LinkType",␉␉␉GMAX3100_vals[17], 4);␊ |
472 | ␉␉␉devprop_add_value(device, "AAPL01,Pipe",␉␉␉GMAX3100_vals[18], 4);␊ |
473 | ␉␉␉devprop_add_value(device, "AAPL01,PixelFormat",␉␉␉GMAX3100_vals[19], 4);␊ |
474 | ␉␉␉devprop_add_value(device, "AAPL01,Refresh",␉␉␉GMAX3100_vals[20], 4);␊ |
475 | ␉␉␉devprop_add_value(device, "AAPL01,Stretch",␉␉␉GMAX3100_vals[21], 4);␊ |
476 | ␉␉␉//devprop_add_value(device, "AAPL01,InverterFrequency",␉␉GMAX3100_vals[22], 4);␊ |
477 | ␉␉␉devprop_add_value(device, "class-code",␉␉␉␉ClassFix, 4);␊ |
478 | ␉␉␉break;␊ |
479 | ␊ |
480 | ␉␉/* 0106 */␊ |
481 | ␉␉case GMA_SANDYBRIDGE_M_GT1: // HD Graphics 2000 Mobile␊ |
482 | ␉␉␉devprop_add_value(device, "class-code", ClassFix, 4);␊ |
483 | ␉␉␉//devprop_add_value(device, "hda-gfx",␉␉␉(uint8_t *)"onboard-1", 10);␊ |
484 | ␉␉␉devprop_add_value(device, "AAPL00,PixelFormat",␉␉HD2000_vals[0], 4);␊ |
485 | ␉␉␉devprop_add_value(device, "AAPL00,T1",␉␉␉HD2000_vals[1], 4);␊ |
486 | ␉␉␉devprop_add_value(device, "AAPL00,T2",␉␉␉HD2000_vals[2], 4);␊ |
487 | ␉␉␉devprop_add_value(device, "AAPL00,T3",␉␉␉HD2000_vals[3], 4);␊ |
488 | ␉␉␉devprop_add_value(device, "AAPL00,T4",␉␉␉HD2000_vals[4], 4);␊ |
489 | ␉␉␉devprop_add_value(device, "AAPL00,T5",␉␉␉HD2000_vals[5], 4);␊ |
490 | ␉␉␉devprop_add_value(device, "AAPL00,T6",␉␉␉HD2000_vals[6], 4);␊ |
491 | ␉␉␉devprop_add_value(device, "AAPL00,T7",␉␉␉HD2000_vals[7], 4);␊ |
492 | ␉␉␉devprop_add_value(device, "AAPL00,LinkType",␉␉HD2000_vals[8], 4);␊ |
493 | ␉␉␉devprop_add_value(device, "AAPL00,LinkFormat",␉␉HD2000_vals[9], 4);␊ |
494 | ␉␉␉devprop_add_value(device, "AAPL00,DualLink",␉␉HD2000_vals[10], 4);␊ |
495 | ␉␉␉devprop_add_value(device, "AAPL00,Dither",␉␉HD2000_vals[11], 4);␊ |
496 | ␉␉␉devprop_add_value(device, "AAPL00,DataJustify",␉␉HD3000_vals[12], 4);␊ |
497 | ␉␉␉devprop_add_value(device, "graphic-options",␉␉HD2000_vals[13], 4);␊ |
498 | ␉␉␉devprop_add_value(device, "AAPL,tbl-info",␉␉HD2000_tbl_info, 18);␊ |
499 | ␉␉␉devprop_add_value(device, "AAPL,os-info",␉␉HD2000_os_info, 20);␊ |
500 | ␉␉␉break;␊ |
501 | ␊ |
502 | ␉␉/* 0116, 0126 */␊ |
503 | ␉␉case GMA_SANDYBRIDGE_M_GT2: // HD Graphics 3000 Mobile␊ |
504 | ␉␉case GMA_SANDYBRIDGE_M_GT2_PLUS:␊ |
505 | ␉␉␉devprop_add_value(device, "class-code",␉␉␉ClassFix, 4);␊ |
506 | ␉␉␉//devprop_add_value(device, "hda-gfx",␉␉␉(uint8_t *)"onboard-1", 10);␊ |
507 | ␉␉␉devprop_add_value(device, "AAPL00,PixelFormat",␉␉HD3000_vals[0], 4);␊ |
508 | ␉␉␉devprop_add_value(device, "AAPL00,T1",␉␉␉HD3000_vals[1], 4);␊ |
509 | ␉␉␉devprop_add_value(device, "AAPL00,T2",␉␉␉HD3000_vals[2], 4);␊ |
510 | ␉␉␉devprop_add_value(device, "AAPL00,T3",␉␉␉HD3000_vals[3], 4);␊ |
511 | ␉␉␉devprop_add_value(device, "AAPL00,T4",␉␉␉HD3000_vals[4], 4);␊ |
512 | ␉␉␉devprop_add_value(device, "AAPL00,T5",␉␉␉HD3000_vals[5], 4);␊ |
513 | ␉␉␉devprop_add_value(device, "AAPL00,T6",␉␉␉HD3000_vals[6], 4);␊ |
514 | ␉␉␉devprop_add_value(device, "AAPL00,T7",␉␉␉HD3000_vals[7], 4);␊ |
515 | ␉␉␉devprop_add_value(device, "AAPL00,LinkType",␉␉HD3000_vals[8], 4);␊ |
516 | ␉␉␉devprop_add_value(device, "AAPL00,LinkFormat",␉␉HD3000_vals[9], 4);␊ |
517 | ␉␉␉devprop_add_value(device, "AAPL00,DualLink",␉␉HD3000_vals[10], 4);␊ |
518 | ␉␉␉devprop_add_value(device, "AAPL00,Dither",␉␉HD3000_vals[11], 4);␊ |
519 | ␉␉␉devprop_add_value(device, "AAPL00,DataJustify",␉␉HD3000_vals[12], 4);␊ |
520 | ␉␉␉devprop_add_value(device, "graphic-options",␉␉HD3000_vals[13], 4);␊ |
521 | ␉␉␉devprop_add_value(device, "AAPL,tbl-info",␉␉HD3000_tbl_info, 18);␊ |
522 | ␉␉␉devprop_add_value(device, "AAPL,os-info",␉␉HD3000_os_info, 20);␊ |
523 | ␉␉␉devprop_add_value(device, "AAPL,snb-platform-id",␉HD3000_vals[16], 4);// previusly commented␊ |
524 | ␉␉break;␊ |
525 | ␊ |
526 | ␉␉/* 0102 */␊ |
527 | ␉␉/* HD Graphics 2000 */␊ |
528 | ␉␉case GMA_SANDYBRIDGE_GT1: // 0102␊ |
529 | ␉␉␉device_id = 0x00000102;␉␉␉␉␉// Inject a valid mobile GPU device id instead of patching kexts␊ |
530 | ␉␉␉devprop_add_value(device, "built-in",␉␉␉&BuiltIn, 1);␊ |
531 | ␉␉␉devprop_add_value(device, "class-code",␉␉␉ClassFix, 4);␊ |
532 | ␉␉␉devprop_add_value(device, "device-id",␉␉␉(uint8_t *)&device_id, sizeof(device_id));␊ |
533 | ␉␉␉//devprop_add_value(device, "hda-gfx",␉␉␉(uint8_t *)"onboard-1", 10);␊ |
534 | ␉␉␉devprop_add_value(device, "AAPL,tbl-info",␉␉␉HD2000_tbl_info, 18);␊ |
535 | ␉␉␉devprop_add_value(device, "AAPL,os-info",␉␉␉HD2000_os_info, 20);␊ |
536 | ␉␉␉break;␊ |
537 | ␊ |
538 | ␉␉/* Sandy Bridge */␊ |
539 | ␉␉/* HD Graphics 3000 */␊ |
540 | ␉␉case GMA_SANDYBRIDGE_GT2: // 0112␊ |
541 | ␉␉case GMA_SANDYBRIDGE_GT2_PLUS: // 0122␊ |
542 | ␉␉␉devprop_add_value(device, "built-in",␉␉␉&BuiltIn, 1);␊ |
543 | ␉␉␉devprop_add_value(device, "class-code",␉␉␉ClassFix, 4);␊ |
544 | ␉␉␉device_id = 0x00000126;␉␉␉␉␉// Inject a valid mobile GPU device id instead of patching kexts␊ |
545 | ␉␉␉devprop_add_value(device, "device-id",␉␉␉(uint8_t *)&device_id, sizeof(device_id));␊ |
546 | ␉␉␉//devprop_add_value(device, "hda-gfx",␉␉␉(uint8_t *)"onboard-1", 10);␊ |
547 | ␉␉␉devprop_add_value(device, "AAPL,tbl-info",␉␉␉HD3000_tbl_info, 18);␊ |
548 | ␉␉␉devprop_add_value(device, "AAPL,os-info",␉␉␉HD3000_os_info, 20);␊ |
549 | ␉␉␉break;␊ |
550 | ␊ |
551 | ␉␉/* Ivy Bridge */␊ |
552 | ␉␉/* HD Graphics 4000, HD Graphics 4000 Mobile, HD Graphics P4000, HD Graphics 2500 HD, Graphics 2500 Mobile */␊ |
553 | ␉␉case GMA_IVYBRIDGE_D_GT1: // 0152␊ |
554 | ␉␉case GMA_IVYBRIDGE_M_GT1: // 0156␊ |
555 | ␉␉case GMA_IVYBRIDGE_S_GT1: // 015A␊ |
556 | ␉␉case GMA_IVYBRIDGE_S_GT3: // 015e␊ |
557 | ␉␉case GMA_IVYBRIDGE_D_GT2: // 0162␊ |
558 | ␉␉case GMA_IVYBRIDGE_M_GT2: // 0166␊ |
559 | ␉␉case GMA_IVYBRIDGE_S_GT2: // 016A␊ |
560 | ␉␉case GMA_IVYBRIDGE_S_GT4: // 0172␊ |
561 | ␉␉case GMA_IVYBRIDGE_S_GT5: // 0176␊ |
562 | ␊ |
563 | ␉␉␉if (getValueForKey(kAAPLCustomIG, &value, &len, &bootInfo->chameleonConfig) && len == AAPL_LEN_IVY * 2)␊ |
564 | ␉␉␉{␊ |
565 | ␉␉␉␉uint8_t new_aapl0[AAPL_LEN_IVY];␊ |
566 | ␊ |
567 | ␉␉␉␉if (hex2bin(value, new_aapl0, AAPL_LEN_IVY) == 0)␊ |
568 | ␉␉␉␉{␊ |
569 | ␉␉␉␉␉memcpy(default_aapl_ivy, new_aapl0, AAPL_LEN_IVY);␊ |
570 | ␊ |
571 | ␉␉␉␉␉verbose("Using user supplied AAPL,ig-platform-id\n");␊ |
572 | ␉␉␉␉␉verbose("AAPL,ig-platform-id: %02x%02x%02x%02x\n",␊ |
573 | ␉␉␉␉␉default_aapl_ivy[0], default_aapl_ivy[1], default_aapl_ivy[2], default_aapl_ivy[3]);␊ |
574 | ␉␉␉␉}␊ |
575 | ␉␉␉␉devprop_add_value(device, "AAPL,ig-platform-id", default_aapl_ivy, AAPL_LEN_IVY);␊ |
576 | ␉␉␉}␊ |
577 | ␉␉␉else if (getIntForKey(kIntelCapriFB, &n_igs, &bootInfo->chameleonConfig))␊ |
578 | ␉␉␉{␊ |
579 | ␉␉␉␉if ((n_igs >= 0) || (n_igs <= 11))␊ |
580 | ␉␉␉␉{␊ |
581 | ␉␉␉␉␉verbose("AAPL,ig-platform-id was set in org.chameleon.Boot.plist with value %d\n", n_igs);␊ |
582 | ␉␉␉␉␉devprop_add_value(device, "AAPL,ig-platform-id", ivy_bridge_ig_vals[n_igs], 4);␊ |
583 | ␉␉␉␉}␊ |
584 | ␉␉␉␉else␊ |
585 | ␉␉␉␉{␊ |
586 | ␉␉␉␉␉verbose("AAPL,ig-platform-id was set in org.chameleon.Boot.plist with bad value please choose a number between 0 and 11.\n");␊ |
587 | ␉␉␉␉}␊ |
588 | ␉␉␉}␊ |
589 | ␉␉␉else␊ |
590 | ␉␉␉{␊ |
591 | ␉␉␉␉uint32_t ig_platform_id;␊ |
592 | ␉␉␉␉uint32_t ram = (((getVBEVideoRam() + 512) / 1024) + 512) / 1024;␊ |
593 | ␉␉␉␉switch (ram)␊ |
594 | ␉␉␉␉{␊ |
595 | ␉␉␉␉␉case 96:␊ |
596 | ␉␉␉␉␉␉ig_platform_id = 0x01660000; // 96mb Mobile␊ |
597 | ␉␉␉␉␉␉break;␊ |
598 | ␊ |
599 | ␉␉␉␉␉case 64:␊ |
600 | ␉␉␉␉␉␉ig_platform_id = 0x01660009; // 64mb Mobile␊ |
601 | ␉␉␉␉␉␉break;␊ |
602 | ␊ |
603 | ␉␉␉␉␉case 32:␊ |
604 | ␉␉␉␉␉␉ig_platform_id = 0x01620005; // 32mb Desktop␊ |
605 | ␉␉␉␉␉␉break;␊ |
606 | ␊ |
607 | ␉␉␉␉␉default:␊ |
608 | ␉␉␉␉␉␉printf("Please specify 96, 64, or 32MB RAM for the HD4000 in the bios.\n"␊ |
609 | ␉␉␉␉␉␉␉"The selected %dMB RAM configuration is not supported for the HD4000.\n", ram);␊ |
610 | ␉␉␉␉␉␉pause();␊ |
611 | ␉␉␉␉␉␉return false;␉// Exit early before the AAPL,ig-platform-id property is set.␊ |
612 | ␉␉␉␉␉␉break;␊ |
613 | ␉␉␉␉}␊ |
614 | ␉␉␉␉devprop_add_value(device, "AAPL,ig-platform-id", (uint8_t *)&ig_platform_id, 4);␊ |
615 | ␉␉␉}␊ |
616 | ␊ |
617 | ␉␉␉devprop_add_value(device, "AAPL00,DualLink", HD4000_vals[10], 4);␊ |
618 | ␉␉␉devprop_add_value(device, "built-in", &BuiltIn, 1);␊ |
619 | ␉␉␉devprop_add_value(device, "class-code", ClassFix, 4);␊ |
620 | ␉␉␉//devprop_add_value(device, "hda-gfx", (uint8_t *)"onboard-1", 10);␊ |
621 | ␉␉␉break;␊ |
622 | ␊ |
623 | ␉␉/* Haswell */␊ |
624 | ␉␉/* HD Graphics 5000, HD Graphics 5000 Mobile, HD Graphics P5000, HD Graphics 4600, HD Graphics 4600 Mobile */␊ |
625 | ␉␉//case 0x80860090:␊ |
626 | ␉␉//case 0x80860091:␊ |
627 | ␉␉//case 0x80860092:␊ |
628 | ␉␉case GMA_HASWELL_M_GT2: // 0416␊ |
629 | ␉␉case GMA_HASWELL_E_GT2: // 041e␊ |
630 | ␉␉case GMA_HASWELL_ULT_M_GT2: // 0a16␊ |
631 | ␉␉case GMA_HASWELL_ULT_E_GT2: // 0a1e␊ |
632 | ␉␉␉verbose("Injecting a valid desktop GPU device id (0x0412) instead of patching kexts.\n");␊ |
633 | ␉␉␉device_id = 0x00000412;␉␉// Inject a valid desktop GPU device id (0x0412) instead of patching kexts␊ |
634 | ␉␉␉devprop_add_value(device, "vendor-id",␉(uint8_t *)INTEL_VENDORID, 4);␊ |
635 | ␉␉␉devprop_add_value(device, "device-id",␉(uint8_t *)&device_id, sizeof(device_id));␊ |
636 | ␉␉␉devprop_add_value(device, "compatible",␉(uint8_t *)"pci8086,0412", 13); // GT2 Desktop␊ |
637 | //␉␉␉devprop_add_value(device, "IOName",␉(uint8_t *)"pci8086,0412", 13); // GT2 Desktop␊ |
638 | ␉␉␉devprop_add_value(device, "name",␉(uint8_t *)"pci8086,0412", 13); // GT2 Desktop␊ |
639 | ␉␉␉verbose("Injeting done: was [%04x:%04x] now is [%04x:%04x]\n", gma_dev->vendor_id, gma_dev->device_id, gma_dev->vendor_id, device_id);␊ |
640 | ␊ |
641 | ␉␉case GMA_HASWELL_D_GT1: // 0402␊ |
642 | ␉␉case GMA_HASWELL_M_GT1: // 0406␊ |
643 | ␉␉case GMA_HASWELL_S_GT1: // 040a␊ |
644 | ␉␉case GMA_HASWELL_D_GT2: // 0412␊ |
645 | ␉␉case GMA_HASWELL_S_GT2: // 041a␊ |
646 | ␉␉case GMA_HASWELL_E_GT1: // 040e␊ |
647 | ␉␉case GMA_HASWELL_E_GT3: // 042e␊ |
648 | ␉␉case GMA_HASWELL_D_GT3: // 0422␊ |
649 | ␉␉case GMA_HASWELL_M_GT3: // 0426␊ |
650 | ␉␉case GMA_HASWELL_S_GT3: // 042a␊ |
651 | ␉␉case GMA_HASWELL_ULT_M_GT1: // 0a06␊ |
652 | ␉␉case GMA_HASWELL_ULT_E_GT1: // 0a0e␊ |
653 | ␉␉case GMA_HASWELL_ULT_D_GT3: // 0a22␊ |
654 | ␉␉case GMA_HASWELL_ULT_M_GT3: // 0a26␊ |
655 | ␉␉case GMA_HASWELL_ULT_S_GT3: // 0a2a␊ |
656 | ␉␉case GMA_HASWELL_ULT_E_GT3: // 0a2e␊ |
657 | ␉␉case GMA_HASWELL_SDV_D_GT1_IG: // 0c02␊ |
658 | ␉␉case GMA_HASWELL_SDV_M_GT1_IG: // 0c06␊ |
659 | ␉␉case GMA_HASWELL_SDV_D_GT2_IG: // 0c12␊ |
660 | ␉␉case GMA_HASWELL_SDV_M_GT2_IG: // 0c16␊ |
661 | ␉␉case GMA_HASWELL_SDV_D_GT2_PLUS_IG: // 0c22␊ |
662 | ␉␉case GMA_HASWELL_SDV_M_GT2_PLUS_IG: // 0c26␊ |
663 | ␉␉case GMA_HASWELL_CRW_D_GT1: // 0d02␊ |
664 | ␉␉case GMA_HASWELL_CRW_D_GT2: // 0d12␊ |
665 | ␉␉case GMA_HASWELL_CRW_D_GT3: // 0d22␊ |
666 | ␉␉case GMA_HASWELL_CRW_M_GT1: // 0d06␊ |
667 | ␉␉case GMA_HASWELL_CRW_M_GT2: // 0d16␊ |
668 | ␉␉case GMA_HASWELL_CRW_M_GT3: // 0d26␊ |
669 | ␉␉case GMA_HASWELL_CRW_S_GT1: // 0d0a␊ |
670 | ␉␉case GMA_HASWELL_CRW_S_GT2: // 0d1a␊ |
671 | ␉␉case GMA_HASWELL_CRW_S_GT3: // 0d2a␊ |
672 | ␉␉case GMA_HASWELL_CRW_B_GT1: // 0d0b␊ |
673 | ␉␉case GMA_HASWELL_CRW_B_GT2: // 0d1b␊ |
674 | ␉␉case GMA_HASWELL_CRW_B_GT3: // 0d2b␊ |
675 | ␉␉case GMA_HASWELL_CRW_E_GT1: // 0d0e␊ |
676 | ␉␉case GMA_HASWELL_CRW_E_GT2: // 0d1e␊ |
677 | ␉␉case GMA_HASWELL_CRW_E_GT3: // 0d2e␊ |
678 | ␉␉case GMA_HASWELL_CRW_M_GT2_PLUS_IG: // 0d36␊ |
679 | ␊ |
680 | ␉␉␉if (getValueForKey(kAAPLCustomIG, &value, &len, &bootInfo->chameleonConfig) && len == AAPL_LEN_HSW * 2)␊ |
681 | ␉␉␉{␊ |
682 | ␉␉␉␉uint8_t new_aapl0[AAPL_LEN_HSW];␊ |
683 | ␊ |
684 | ␉␉␉␉if (hex2bin(value, new_aapl0, AAPL_LEN_HSW) == 0)␊ |
685 | ␉␉␉␉{␊ |
686 | ␉␉␉␉␉memcpy(default_aapl_haswell, new_aapl0, AAPL_LEN_HSW);␊ |
687 | ␊ |
688 | ␉␉␉␉␉verbose("Using user supplied AAPL,ig-platform-id\n");␊ |
689 | ␉␉␉␉␉verbose("AAPL,ig-platform-id: %02x%02x%02x%02x\n",␊ |
690 | ␉␉␉␉␉␉default_aapl_haswell[0], default_aapl_haswell[1], default_aapl_haswell[2], default_aapl_haswell[3]);␊ |
691 | ␉␉␉␉}␊ |
692 | ␉␉␉␉devprop_add_value(device, "AAPL,ig-platform-id", default_aapl_haswell, AAPL_LEN_HSW);␊ |
693 | ␉␉␉}␊ |
694 | ␉␉␉else if (getIntForKey(kIntelAzulFB, &n_igs, &bootInfo->chameleonConfig))␊ |
695 | ␉␉␉{␊ |
696 | ␉␉␉␉if ((n_igs >= 0) || (n_igs <= 15))␊ |
697 | ␉␉␉␉{␊ |
698 | ␉␉␉␉␉verbose("AAPL,ig-platform-id was set in org.chameleon.Boot.plist with value %d\n", n_igs);␊ |
699 | ␉␉␉␉␉devprop_add_value(device, "AAPL,ig-platform-id", haswell_ig_vals[n_igs], 4);␊ |
700 | ␉␉␉␉}␊ |
701 | ␉␉␉␉else␊ |
702 | ␉␉␉␉{␊ |
703 | ␉␉␉␉␉verbose("AAPL,ig-platform-id was set in org.chameleon.Boot.plist with bad value please choose a number between 0 and 15.\n");␊ |
704 | ␉␉␉␉}␊ |
705 | ␉␉␉}␊ |
706 | ␉␉␉else␊ |
707 | ␉␉␉{␊ |
708 | ␉␉␉␉uint32_t ig_platform_id = 0x0000260c; // set the default platform ig␊ |
709 | ␉␉␉␉devprop_add_value(device, "AAPL,ig-platform-id", (uint8_t *)&ig_platform_id, 4);␊ |
710 | ␉␉␉}␊ |
711 | ␊ |
712 | ␉␉␉devprop_add_value(device, "AAPL00,DualLink", HD4000_vals[10], 4);␊ |
713 | ␉␉␉devprop_add_value(device, "built-in", &BuiltIn, 1);␊ |
714 | ␉␉␉devprop_add_value(device, "class-code", ClassFix, 4);␊ |
715 | ␉␉␉//devprop_add_value(device, "hda-gfx", (uint8_t *)"onboard-1", 10);␊ |
716 | ␉␉␉break;␊ |
717 | ␊ |
718 | ␉␉default:␊ |
719 | ␉␉␉break;␊ |
720 | ␉}␊ |
721 | ␊ |
722 | ␉stringdata = malloc(sizeof(uint8_t) * string->length);␊ |
723 | ␉if (!stringdata)␊ |
724 | ␉{␊ |
725 | ␉␉printf("[setup_gma_devprop] No stringdata!\n");␊ |
726 | ␉␉pause();␊ |
727 | ␉␉return false;␊ |
728 | ␉}␊ |
729 | ␊ |
730 | ␉verbose("---------------------------------------------\n");␊ |
731 | ␉memcpy(stringdata, (uint8_t *)devprop_generate_string(string), string->length);␊ |
732 | ␉stringlength = string->length;␊ |
733 | ␊ |
734 | ␉return true;␊ |
735 | }␊ |
736 | |