Chameleon

Chameleon Svn Source Tree

Root/branches/zenith432/i386/libsaio/gma.c

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/*
28Original patch by Nawcom
29http://forum.voodooprojects.org/index.php/topic,1029.0.html
30
31Original Intel HDx000 code from valv
32Intel Ivy Bridge, Haswell and Broadwell 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 "convert.h"
43#include "gma.h"
44#include "vbe.h"
45#include "graphics.h"
46
47#ifndef DEBUG_GMA
48#define DEBUG_GMA 0
49#endif
50
51#ifndef REPLACE_DEVICE_ID
52#define REPLACE_DEVICE_ID 0
53#endif
54
55#if DEBUG_GMA
56#define DBG(x...)printf(x)
57#else
58#define DBG(x...)
59#endif
60
61static booldoit= false;
62
63static uint8_t default_aapl_snb[]={ 0x00,0x03,0x00,0x01 };
64#define AAPL_LEN_SNB ( sizeof(default_aapl_snb) / sizeof(uint8_t) )
65
66static uint8_t default_aapl_ivy[]={ 0x05,0x00,0x62,0x01 }; // ivy_bridge_ig_vals[5]
67#define AAPL_LEN_IVY ( sizeof(default_aapl_ivy) / sizeof(uint8_t) )
68
69static uint8_t default_aapl_haswell[]={ 0x00,0x00,0x26,0x0c }; // haswell_ig_vals[7]
70#define AAPL_LEN_HSW ( sizeof(default_aapl_haswell) / sizeof(uint8_t) )
71
72static uint8_t default_aapl_broadwell[]={ 0x00,0x00,0x1e,0x16 }; // broadwell_ig_vals[2]
73#define AAPL_LEN_BDW ( sizeof(default_aapl_broadwell) / sizeof(uint8_t) )
74
75static uint8_t default_aapl_skylake[]={ 0x00,0x00,0x16,0x19 }; // skylike_ig_vals[2]
76#define AAPL_LEN_SKL ( sizeof(default_aapl_skylake) / sizeof(uint8_t) )
77
78uint8_t GMAX3100_vals[23][4] = {
79{ 0x01,0x00,0x00,0x00 },//0 "AAPL,HasPanel"
80{ 0x01,0x00,0x00,0x00 },//1 "AAPL,SelfRefreshSupported"
81{ 0x01,0x00,0x00,0x00 },//2 "AAPL,aux-power-connected"
82{ 0x00,0x00,0x00,0x08 },//3 "AAPL,backlight-control"
83{ 0x64,0x00,0x00,0x00 },//4 "AAPL00,blackscreen-preferences"
84{ 0x00,0x00,0x00,0x08 },//5 "AAPL01,BacklightIntensity"
85{ 0x01,0x00,0x00,0x00 },//6 "AAPL01,blackscreen-preferences"
86{ 0x20,0x00,0x00,0x00 },//7 "AAPL01,DataJustify"
87{ 0x00,0x00,0x00,0x00 },//8 "AAPL01,Depth"
88{ 0x01,0x00,0x00,0x00 },//9 "AAPL01,Dither"
89{ 0x20,0x03,0x00,0x00 },//10 "AAPL01,DualLink"
90{ 0x00,0x00,0x00,0x00 },//11 "AAPL01,Height"
91{ 0x00,0x00,0x00,0x00 },//12 "AAPL01,Interlace"
92{ 0x00,0x00,0x00,0x00 },//13 "AAPL01,Inverter"
93{ 0x08,0x52,0x00,0x00 },//14 "AAPL01,InverterCurrent"
94{ 0x00,0x00,0x00,0x00 },//15 "AAPL01,InverterCurrency"
95{ 0x00,0x00,0x00,0x00 },//16 "AAPL01,LinkFormat"
96{ 0x01,0x00,0x00,0x00 },//17 "AAPL01,LinkType"
97{ 0x01,0x00,0x00,0x00 },//18 "AAPL01,Pipe"
98{ 0x3B,0x00,0x00,0x00 },//19 "AAPL01,PixelFormat"
99{ 0x00,0x00,0x00,0x00 },//20 "AAPL01,Refresh"
100{ 0x6B,0x10,0x00,0x00 },//21 "AAPL01,Stretch"
101{ 0xc8,0x95,0x00,0x00 },//22 "AAPL01,InverterFrequency"
102};
103
104uint8_t ivy_bridge_ig_vals[12][4] = {
105{ 0x00,0x00,0x66,0x01 },//0 "AAPL,ig-platform-id" //FB: 96MB, Pipes: 3, Ports: 4, FBMem: 3
106{ 0x01,0x00,0x66,0x01 },//1 "AAPL,ig-platform-id" //FB: 96MB, Pipes: 3, Ports: 4, FBMem: 3
107{ 0x02,0x00,0x66,0x01 },//2 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 1, FBMem: 1
108{ 0x03,0x00,0x66,0x01 },//3 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 2, Ports: 2, FBMem: 2
109{ 0x04,0x00,0x66,0x01 },//4 "AAPL,ig-platform-id" //FB: 32MB, Pipes: 3, Ports: 1, FBMem: 1
110{ 0x05,0x00,0x62,0x01 },//5 "AAPL,ig-platform-id" //FB: 32MB, Pipes: 2, Ports: 3, FBMem: 2
111{ 0x06,0x00,0x62,0x01 },//6 "AAPL,ig-platform-id" //FB: 0MB, Pipes: 0, Ports: 0, FBMem: 0
112{ 0x07,0x00,0x62,0x01 },//7 "AAPL,ig-platform-id" //FB: 0MB, Pipes: 0, Ports: 0, FBMem: 0
113{ 0x08,0x00,0x66,0x01 },//8 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3
114{ 0x09,0x00,0x66,0x01 },//9 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3
115{ 0x0a,0x00,0x66,0x01 },//10 "AAPL,ig-platform-id" //FB: 32MB, Pipes: 2, Ports: 3, FBMem: 2
116{ 0x0b,0x00,0x66,0x01 }//11 "AAPL,ig-platform-id" //FB: 32MB, Pipes: 2, Ports: 3, FBMem: 2
117};
118
119uint8_t haswell_ig_vals[17][4] = {
120{ 0x00,0x00,0x06,0x04 },// 0 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3 - mobile GT1
121{ 0x00,0x00,0x06,0x0c },// 1 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3 - SDV mobile GT1
122{ 0x00,0x00,0x16,0x04 },// 2 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3 - mobile GT2
123{ 0x00,0x00,0x16,0x0a },// 3 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3 - ULT mobile GT2
124{ 0x00,0x00,0x16,0x0c },// 4 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3 - SDV mobile GT2
125{ 0x00,0x00,0x26,0x04 },// 5 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3 - mobile GT3
126{ 0x00,0x00,0x26,0x0a },// 6 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3 - ULT mobile GT3
127{ 0x00,0x00,0x26,0x0c },// 7 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3 - SDV mobile GT3
128{ 0x00,0x00,0x26,0x0d },// 8 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3 - CRW mobile GT3
129{ 0x02,0x00,0x16,0x04 },// 9 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 1, Ports: 1, FBMem: 1 - mobile GT2
130{ 0x03,0x00,0x22,0x0d },// 10 "AAPL,ig-platform-id" //FB: 0MB, Pipes: 0, Ports: 0, FBMem: 0 - CRW Desktop GT3
131{ 0x05,0x00,0x26,0x0a },// 11 "AAPL,ig-platform-id" //FB: 32MB, Pipes: 3, Ports: 3, FBMem: 3 - ULT mobile GT3
132{ 0x06,0x00,0x26,0x0a },// 12 "AAPL,ig-platform-id" //FB: 32MB, Pipes: 3, Ports: 3, FBMem: 3 - ULT mobile GT3
133{ 0x07,0x00,0x26,0x0d },// 13 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 4, FBMem: 3 - CRW mobile GT3
134{ 0x08,0x00,0x26,0x0a },// 14 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3 - ULT mobile GT3
135{ 0x08,0x00,0x2e,0x0a },// 15 "AAPL,ig-platform-id" //FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3 - ULT reserved GT3
136{ 0x04,0x00,0x12,0x04 }// 16 "AAPL,ig-platform-id" //FB: 32MB, Pipes: 3, Ports: 3, FBMem: 3 - ULT mobile GT3
137//0x0412000b
138//0x0d260009
139};
140
141uint8_t broadwell_ig_vals[20][4] = {
142{ 0x00,0x00,0x06,0x16 },// 0 - 16060000 Broadwell GT1 (Intel HD Graphics)
143{ 0x00,0x00,0x0e,0x16 },// 1 - 160e0000 Broadwell GT1 (Intel HD Graphics)
144{ 0x00,0x00,0x16,0x16 },// 2 - 16160000 Broadwell GT2 (Intel HD Graphics 5500)
145{ 0x00,0x00,0x1e,0x16 },// 3 - 161e0000 Broadwell GT2 (MacBook) (Intel HD Graphics 5300)
146{ 0x00,0x00,0x26,0x16 },// 4 - 16260000 Broadwell GT3 (MacBook Air) (Intel HD Graphics 6000)
147{ 0x00,0x00,0x2b,0x16 },// 5 - 162b0000 Broadwell GT3 (MacBook Pro) (Intel Iris Graphics 6100)
148{ 0x00,0x00,0x22,0x16 },// 6 - 16220000 Broadwell GT3 (Intel Iris Pro Graphics 6200)
149{ 0x01,0x00,0x0e,0x16 },// 7 - 160e0001 Broadwell GT1 (Intel HD Graphics)
150{ 0x01,0x00,0x1e,0x16 },// 8 - 161e0001 Broadwell GT2 (MacBook) (Intel HD Graphics 5300)
151{ 0x02,0x00,0x06,0x16 },// 9 - 16060002 Broadwell GT1 (Intel HD Graphics)
152{ 0x02,0x00,0x16,0x16 },// 10 - 16160002 Broadwell GT2 (Intel HD Graphics 5500)
153{ 0x02,0x00,0x26,0x16 },// 11 - 16260002 Broadwell GT3 (MacBook Air) (Intel HD Graphics 6000)
154{ 0x02,0x00,0x22,0x16 },// 12 - 16220002 Broadwell GT3 (Intel Iris Pro Graphics 6200)
155{ 0x02,0x00,0x2b,0x16 },// 13 - 162b0002 Broadwell GT3 (MacBook Pro) (Intel Iris Graphics 6100)
156{ 0x03,0x00,0x12,0x16 },// 14 - 16120003 Broadwell GT2 (Intel HD Graphics 5600)
157{ 0x04,0x00,0x2b,0x16 },// 15 - 162b0004 Broadwell GT3 (MacBook Pro) (Intel Iris Graphics 6100)
158{ 0x04,0x00,0x26,0x16 },// 16 - 16260004 Broadwell GT3 (MacBook Air) (Intel HD Graphics 6000)
159{ 0x05,0x00,0x26,0x16 },// 17 - 16260005 Broadwell GT3 (MacBook Air) (Intel HD Graphics 6000)
160{ 0x06,0x00,0x26,0x16 },// 18 - 16260006 Broadwell GT3 (MacBook Air) (Intel HD Graphics 6000)
161{ 0x07,0x00,0x22,0x16 }// 19 - 16260006 Broadwell GT3 (iMac Retina 21") (Intel Iris Pro 6200)
162};
163
164uint8_t skylake_ig_vals[12][4] = {
165{ 0x00,0x00,0xe0,0x19 }, // 0 - 191e0000 – Skylake ULX GT2
166{ 0x00,0x00,0x16,0x19 }, // 1 - 19160000 – Skylake ULT GT2
167{ 0x00,0x00,0x26,0x19 }, // 2 - 19260000 – Skylake ULT GT3
168{ 0x00,0x00,0x1b,0x19 }, // 3 - 191b0000 – Skylake HALO GT2
169{ 0x00,0x00,0x12,0x19 }, // 4 - 19120000 – Skylake Desktop GT2
170{ 0x01,0x00,0x02,0x19 }, // 5 - 19020001 – Skylake Desktop GT1
171{ 0x01,0x00,0x17,0x19 }, // 6 - 19170001 – Skylake Desktop GT1.5
172{ 0x01,0x00,0x12,0x19 }, // 7 - 19120001 – Skylake Desktop GT2
173{ 0x01,0x00,0x32,0x19 }, // 8 - 19320001 – Skylake Desktop GT4
174{ 0x02,0x00,0x16,0x19 }, // 9 - 19160002 – Skylake ULT GT2
175{ 0x02,0x00,0x26,0x19 }, // 10 - 19260002 – Skylake ULT GT3
176{ 0x03,0x00,0x1e,0x19 } // 11 - 191e0003 – Skylake ULX GT2
177};
178
179uint8_t HD2000_vals[16][4] = {
180{ 0x00,0x00,0x00,0x00 }, //0 "AAPL00,PixelFormat"
181{ 0x00,0x00,0x00,0x00 }, //1 "AAPL00,T1"
182{ 0x14,0x00,0x00,0x00 }, //2 "AAPL00,T2"
183{ 0xfa,0x00,0x00,0x00 }, //3 "AAPL00,T3"
184{ 0x2c,0x01,0x00,0x00 }, //4 "AAPL00,T4"
185{ 0x00,0x00,0x00,0x00 }, //5 "AAPL00,T5"
186{ 0x14,0x00,0x00,0x00 }, //6 "AAPL00,T6"
187{ 0xf4,0x01,0x00,0x00 }, //7 "AAPL00,T7"
188{ 0x00,0x00,0x00,0x00 }, //8 "AAPL00,LinkType"
189{ 0x00,0x00,0x00,0x00 }, //9 "AAPL00,LinkFormat"
190{ 0x00,0x00,0x00,0x00 }, //10 "AAPL00,DualLink"
191{ 0x00,0x00,0x00,0x00 }, //11 "AAPL00,Dither"
192{ 0x00,0x00,0x00,0x00 }, //12 "AAPL00,DataJustify"
193{ 0x00,0x00,0x00,0x00 }, //13 "graphic-options"
194{ 0x00,0x00,0x00,0x00 }, //14
195{ 0x01,0x00,0x00,0x00 } //15
196};
197
198uint8_t HD3000_vals[17][4] = {
199{ 0x00,0x00,0x00,0x00 }, //0 "AAPL00,PixelFormat"
200{ 0x00,0x00,0x00,0x00 }, //1 "AAPL00,T1"
201{ 0x14,0x00,0x00,0x00 }, //2 "AAPL00,T2"
202{ 0xfa,0x00,0x00,0x00 }, //3 "AAPL00,T3"
203{ 0x2c,0x01,0x00,0x00 }, //4 "AAPL00,T4"
204{ 0x00,0x00,0x00,0x00 }, //5 "AAPL00,T5"
205{ 0x14,0x00,0x00,0x00 }, //6 "AAPL00,T6"
206{ 0xf4,0x01,0x00,0x00 }, //7 "AAPL00,T7"
207{ 0x00,0x00,0x00,0x00 }, //8 "AAPL00,LinkType"
208{ 0x00,0x00,0x00,0x00 }, //9 "AAPL00,LinkFormat"
209{ 0x00,0x00,0x00,0x00 }, //10 "AAPL00,DualLink"
210{ 0x00,0x00,0x00,0x00 }, //11 "AAPL00,Dither"
211{ 0x00,0x00,0x00,0x00 }, //12 "AAPL00,DataJustify"
212{ 0x00,0x00,0x00,0x00 }, //13 "graphic-options"
213{ 0x00,0x00,0x00,0x00 }, //14
214{ 0x01,0x00,0x00,0x00 }, //15
215{ 0x00,0x00,0x01,0x00 } //16 AAPL,snb-platform-id
216};
217
218uint8_t HD4000_vals[15][4] = {
219{ 0x00,0x00,0x00,0x00 }, //0 "AAPL00,PixelFormat"
220{ 0x00,0x00,0x00,0x00 }, //1 "AAPL00,T1"
221{ 0x01,0x00,0x00,0x00 }, //2 "AAPL00,T2"
222{ 0xc8,0x00,0x00,0x00 }, //3 "AAPL00,T3"
223{ 0xc8,0x00,0x00,0x00 }, //4 "AAPL00,T4"
224{ 0x01,0x00,0x00,0x00 }, //5 "AAPL00,T5"
225{ 0x00,0x00,0x00,0x00 }, //6 "AAPL00,T6"
226{ 0x90,0x01,0x00,0x00 }, //7 "AAPL00,T7"
227{ 0x01,0x00,0x00,0x00 }, //8 "AAPL00,LinkType"
228{ 0x00,0x00,0x00,0x00 }, //9 "AAPL00,LinkFormat"
229{ 0x01,0x00,0x00,0x00 }, //10 "AAPL00,DualLink"
230{ 0x00,0x00,0x00,0x00 }, //11 "AAPL00,Dither"
231{ 0xc3,0x8c,0x64,0x00 }, //12 "AAPL,gray-value"
232{ 0x01,0x00,0x00,0x00 }, //13 "AAPL,gray-page"
233{ 0x0c,0x00,0x00,0x00 } //14 "graphics-options"
234};
235
236// http://www.insanelymac.com/forum/topic/286092-guide-1st-generation-intel-hd-graphics-qeci/
237uint8_t HDx000_os_info[20] = {
2380x30,0x49,0x01,0x11,0x01,0x10,0x08,0x00,0x00,0x01,
2390x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF
240};
241
242uint8_t HD2000_tbl_info[18] = {
2430x30,0x44,0x02,0x02,0x02,0x02,0x00,0x00,0x00,
2440x00,0x01,0x02,0x02,0x02,0x00,0x01,0x02,0x02
245};
246uint8_t HD2000_os_info[20] = {
2470x30,0x49,0x01,0x11,0x11,0x11,0x08,0x00,0x00,0x01,
2480xf0,0x1f,0x01,0x00,0x00,0x00,0x10,0x07,0x00,0x00
249};
250
251// The following values came from a Sandy Bridge MacBook Air
252uint8_t HD3000_tbl_info[18] = {
2530x30,0x44,0x02,0x02,0x02,0x02,0x00,0x00,0x00,
2540x00,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01
255};
256
257// The following values came from a Sandy Bridge MacBook Air
258uint8_t HD3000_os_info[20] = {
2590x30,0x49,0x01,0x12,0x12,0x12,0x08,0x00,0x00,0x01,
2600xf0,0x1f,0x01,0x00,0x00,0x00,0x10,0x07,0x00,0x00
261};
262
263
264uint8_t reg_TRUE[]= { 0x01, 0x00, 0x00, 0x00 };
265uint8_t reg_FALSE[] = { 0x00, 0x00, 0x00, 0x00 };
266
267// https://en.wikipedia.org/wiki/Comparison_of_Intel_graphics_processing_units#Seventh_generation
268
269/* http://cgit.freedesktop.org/xorg/driver/xf86-video-intel/tree/src/intel_module.c */
270
271static intel_gfx_info_t intel_gfx_chipsets[] = {
272{GMA_I810,"i810"},
273{GMA_I810_DC100,"i810-dc100"},
274{GMA_I810_E,"i810e"},
275{GMA_I815,"i815"},
276{GMA_I830_M,"i830M"},
277{GMA_845_G,"845G"},
278{GMA_I854,"854"},
279{GMA_I855_GM,"852GM/855GM"},
280{GMA_I865_G,"865G"},
281{GMA_I915_G,"915G"},
282{GMA_E7221_G,"E7221 (i915)"},
283{GMA_I915_GM,"915GM"},
284{GMA_I945_G,"945G"},
285// 2776 /* Desktop GMA950 */
286// 2782 /* GMA 915 */
287// 2792 /* Mobile GMA915 */
288{GMA_I945_GM,"945GM"},
289{GMA_I945_GME,"945GME"},
290// 27A6 /* Mobile GMA950 */
291// 29C3 /* Desktop GMA3100 */
292{GMA_PINEVIEW_M,"Pineview GM"},
293{GMA_GMA3150_M,"Pineview GM"},// A012 /* Mobile GMA3150 */
294{GMA_PINEVIEW_G,"Pineview G"},
295{GMA_GMA3150_D,"Desktop GMA3150"},// A002 /* Desktop GMA3150 */
296{GMA_I965_G,"965G"},
297{GMA_G35_G,"G35"},
298{GMA_I965_Q,"965Q"},
299{GMA_I946_GZ,"946GZ"},
300{GMA_I965_GM,"965GM"},
301{GMA_I965_GME,"965GME/GLE"},
302{GMA_G33_G,"G33"},
303// 2A13 /* GMAX3100 */
304// 2A43 /* GMAX3100 */
305{GMA_Q35_G,"Q35"},
306{GMA_Q33_G,"Q33"},
307{GMA_GM45_GM,"GM45"},
308{GMA_G45_E_G,"4 Series"},
309{GMA_G45_G,"G45/G43"},
310{GMA_Q45_G,"Q45/Q43"},
311{GMA_G41_G,"G41"},
312{GMA_B43_G,"B43"},
313{GMA_B43_G1,"B43"},
314/**/
315{GMA_IRONLAKE_D_G,HD_GRAPHICS},
316{GMA_IRONLAKE_M_G,HD_GRAPHICS},
317// 004A /* HD2000 */
318
319/* Sandy */
320{GMA_SANDYBRIDGE_GT1,HD_GRAPHICS_2000 },
321{GMA_SANDYBRIDGE_GT2,HD_GRAPHICS_3000 },
322{GMA_SANDYBRIDGE_GT2_PLUS,HD_GRAPHICS_3000 },
323{GMA_SANDYBRIDGE_M_GT1,HD_GRAPHICS_2000 },
324{GMA_SANDYBRIDGE_M_GT2,HD_GRAPHICS_3000 },
325{GMA_SANDYBRIDGE_M_GT2_PLUS,HD_GRAPHICS_3000 },
326{GMA_SANDYBRIDGE_S_GT,"HD Graphics P3000" }, /* 010a */
327// 010B /* ??? */
328// 010E /* ??? */
329
330/* Ivy */
331{GMA_IVYBRIDGE_M_GT1,HD_GRAPHICS_2500 },/* 0156 */
332{GMA_IVYBRIDGE_M_GT2,HD_GRAPHICS_4000 },/* 0166 */
333{GMA_IVYBRIDGE_D_GT1,HD_GRAPHICS_2500 },/* 0152 */
334{GMA_IVYBRIDGE_D_GT2,HD_GRAPHICS_4000 },/* 0162 */
335{GMA_IVYBRIDGE_S_GT1,HD_GRAPHICS },/* 015a */
336{GMA_IVYBRIDGE_S_GT2,"HD Graphics P4000" }, /* 016a */
337{GMA_IVYBRIDGE_S_GT3,HD_GRAPHICS },/* 015e */
338{GMA_IVYBRIDGE_S_GT4,HD_GRAPHICS_2500 },/* 0172 */
339 {GMA_IVYBRIDGE_S_GT5,HD_GRAPHICS_2500 },/* 0176 */
340
341/* Haswell */
342// 0090 /* ??? */
343// 0091 /* ??? */
344// 0092 /* ??? */
345{GMA_HASWELL_D_GT1,HD_GRAPHICS },/* 0422 */
346{GMA_HASWELL_D_GT2,HD_GRAPHICS_4600 },/* 0412 */
347{GMA_HASWELL_D_GT3,HD_GRAPHICS_5000 },/* 0422 */
348{GMA_HASWELL_M_GT1,HD_GRAPHICS },/* 0426 */
349{GMA_HASWELL_M_GT2,HD_GRAPHICS_4600 },/* 0416 */
350{GMA_HASWELL_M_GT3,HD_GRAPHICS_5000 },/* 0426 */
351{GMA_HASWELL_S_GT1,HD_GRAPHICS },/* 040a */
352{GMA_HASWELL_S_GT2,"HD Graphics P4600/P4700" }, /* 041a */
353{GMA_HASWELL_S_GT3,HD_GRAPHICS_5000 },/* 042a */
354{GMA_HASWELL_B_GT1,HD_GRAPHICS },/* 040b */
355{GMA_HASWELL_B_GT2,HD_GRAPHICS },/* 041b */
356{GMA_HASWELL_B_GT3,HD_GRAPHICS },/* 042b */
357{GMA_HASWELL_E_GT1,HD_GRAPHICS },/* 040e */
358{GMA_HASWELL_E_GT2,HD_GRAPHICS_4400 },/* 041e */
359{GMA_HASWELL_E_GT3,HD_GRAPHICS },/* 042e */
360{GMA_HASWELL_ULT_D_GT1,HD_GRAPHICS },/* 0a02 */
361{GMA_HASWELL_ULT_D_GT2,HD_GRAPHICS },/* 0a12 */
362{GMA_HASWELL_ULT_D_GT3,IRIS_5100 },/* 0a22 */
363{GMA_HASWELL_ULT_M_GT1,HD_GRAPHICS },/* 0a06 */
364{GMA_HASWELL_ULT_M_GT2,HD_GRAPHICS_4400 },/* 0a16 */
365{GMA_HASWELL_ULT_M_GT3,HD_GRAPHICS_5000 },/* 0a26 */
366{GMA_HASWELL_ULT_S_GT1,HD_GRAPHICS },/* 0a0a */
367{GMA_HASWELL_ULT_S_GT2,HD_GRAPHICS },/* 0a1a */
368{GMA_HASWELL_ULT_S_GT3,IRIS_5100 },/* 0a2a */
369{GMA_HASWELL_ULT_B_GT1,HD_GRAPHICS },/* 0a0b */
370{GMA_HASWELL_ULT_B_GT2,HD_GRAPHICS },/* 0a1b */
371{GMA_HASWELL_ULT_B_GT3,IRIS_5100 },/* 0a2b */
372{GMA_HASWELL_ULT_E_GT1,HD_GRAPHICS_4400 },/* 0a0e */
373{GMA_HASWELL_ULT_E_GT2,HD_GRAPHICS_4200 },/* 0a1e */
374// 0A2A /* ??? */
375{GMA_HASWELL_ULT_E_GT3,IRIS_5100 },/* 0a2e */
376{GMA_HASWELL_SDV_D_GT1_IG,HD_GRAPHICS },// 0C02 /* Intel Haswell HD Graphics - GTL */
377// 0C04 /* DRAM Controller */
378{GMA_HASWELL_SDV_M_GT1_IG,HD_GRAPHICS },// 0C06 /* Intel Haswell HD Graphics - GTL */
379{GMA_HASWELL_SDV_D_GT2_IG,HD_GRAPHICS },// 0C12 /* Intel Haswell HD Graphics - GTM */
380{GMA_HASWELL_SDV_M_GT2_IG,HD_GRAPHICS },// 0C16 /* Intel Haswell HD Graphics - GTH */
381{GMA_HASWELL_SDV_D_GT2_PLUS_IG,HD_GRAPHICS },// 0C22 /* Intel Haswell HD Graphics - GTH */
382{GMA_HASWELL_SDV_M_GT2_PLUS_IG,HD_GRAPHICS },// 0C26 /* Intel Haswell HD Graphics - GTH */
383
384//{GMA_HASWELL_SDV_S_GT1_IG,HD_GRAPHICS }, /* 0c0a */
385//{GMA_HASWELL_SDV_S_GT2_IG,HD_GRAPHICS }, /* 0c1a */
386//{GMA_HASWELL_SDV_S_GT2_PLUS_IG,HD_GRAPHICS }, /* 0c2a */
387
388{GMA_HASWELL_CRW_D_GT1,HD_GRAPHICS },/* 0d02 */
389{GMA_HASWELL_CRW_D_GT2,HD_GRAPHICS_4600 },/* 0d12 */
390{GMA_HASWELL_CRW_D_GT3,IRIS_5200 },/* 0d22 */
391//{GMA_HASWELL_CRW_D_GT2_PLUS_IG,HD_GRAPHICS },/* 0d32 */
392{GMA_HASWELL_CRW_M_GT1,HD_GRAPHICS },/* 0d06 */
393{GMA_HASWELL_CRW_M_GT2,HD_GRAPHICS_4600 },/* 0d16 */
394{GMA_HASWELL_CRW_M_GT3,IRIS_5200 },/* 0d26 */
395{GMA_HASWELL_CRW_S_GT1,HD_GRAPHICS },/* 0d0a */
396{GMA_HASWELL_CRW_S_GT2,HD_GRAPHICS },/* 0d1a */
397{GMA_HASWELL_CRW_S_GT3,IRIS_5200 },/* 0d2a */
398{GMA_HASWELL_CRW_B_GT1,HD_GRAPHICS },/* 0d0b */
399{GMA_HASWELL_CRW_B_GT2,HD_GRAPHICS },/* 0d1b */
400{GMA_HASWELL_CRW_B_GT3,IRIS_5200 },/* 0d2b */
401{GMA_HASWELL_CRW_E_GT1,HD_GRAPHICS },/* 0d0e */
402{GMA_HASWELL_CRW_E_GT2,HD_GRAPHICS },/* od1e */
403{GMA_HASWELL_CRW_E_GT3,IRIS_5200 },/* 0d2e */
404{GMA_HASWELL_CRW_M_GT2_PLUS_IG,HD_GRAPHICS },/* 0d36 */
405{GMA_HASWELL_CRW_S_GT2_PLUS_IG,HD_GRAPHICS },/* 0d3a */
406
407/* Broadwell */
408{GMA_BROADWELL_BDW_0bd0,HD_GRAPHICS },/* 0bd0 */
409{GMA_BROADWELL_BDW_0bd1,HD_GRAPHICS },/* 0bd1 */
410{GMA_BROADWELL_BDW_0bd2,HD_GRAPHICS },/* 0bd2 */
411{GMA_BROADWELL_BDW_0bd3,HD_GRAPHICS },/* 0bd3 */
412{GMA_BROADWELL_BDW_0bd4,HD_GRAPHICS },/* 0bd4 */
413
414{GMA_BROADWELL_BDW_1602,HD_GRAPHICS },/* 1602 */
415{GMA_BROADWELL_BDW_U_GT1,HD_GRAPHICS },/* 1606 */
416{GMA_BROADWELL_BDW_160B,HD_GRAPHICS },/* 160b */
417{GMA_BROADWELL_BDW_160A,HD_GRAPHICS },/* 160a */
418{GMA_BROADWELL_BDW_160D,HD_GRAPHICS },/* 160d */
419{GMA_BROADWELL_BDW_160E,HD_GRAPHICS },/* 160e */
420{GMA_BROADWELL_BDW_1612,HD_GRAPHICS_5600},/* 1612 */
421 {GMA_BROADWELL_BDW_U_GT2,HD_GRAPHICS_5500 },/* 1616 */
422{GMA_BROADWELL_BDW_161B,HD_GRAPHICS },/* 161b */
423{GMA_BROADWELL_BDW_161A,HD_GRAPHICS },/* 161a */
424{GMA_BROADWELL_BDW_161D,HD_GRAPHICS },/* 161d */
425{GMA_BROADWELL_BDW_Y_GT2,HD_GRAPHICS_5300 },/* 161e */
426{GMA_BROADWELL_BDW_1622,IRIS_6200},/* 1622 */
427{GMA_BROADWELL_BDW_U_GT3,HD_GRAPHICS_6000 },/* 1626 */
428{GMA_BROADWELL_BDW_162A,IRIS_6300},/* 162a */
429{GMA_BROADWELL_BDW_U_GT3_2,IRIS_6100 },/* 162b */
430{GMA_BROADWELL_BDW_162D,IRIS_6300 },/* 162d */
431{GMA_BROADWELL_BDW_162E,HD_GRAPHICS },/* 162e */
432{GMA_BROADWELL_BDW_1632,HD_GRAPHICS },/* 1632 */
433{GMA_BROADWELL_BDW_1636,HD_GRAPHICS },/* 1636 */
434{GMA_BROADWELL_BDW_163B,HD_GRAPHICS },/* 163b */
435{GMA_BROADWELL_BDW_163A,HD_GRAPHICS },/* 163a */
436{GMA_BROADWELL_BDW_163D,HD_GRAPHICS },/* 163d */
437{GMA_BROADWELL_BDW_163E,HD_GRAPHICS },/* 163e */
438
439/* Skylake */
440{GMA_SKYLAKE_ULT_GT1,HD_GRAPHICS_510 },/* 1906 */
441{GMA_SKYLAKE_ULT_GT15,HD_GRAPHICS_510 },/* 1913 */
442{GMA_SKYLAKE_ULT_GT2,HD_GRAPHICS_520 },/* 1916 */
443{GMA_SKYLAKE_ULX_GT1,HD_GRAPHICS },/* 190E */
444{GMA_SKYLAKE_ULX_GT2,HD_GRAPHICS_515 },/* 191E */
445{GMA_SKYLAKE_DT_GT2,HD_GRAPHICS_530 },/* 1912 */
446{GMA_SKYLAKE_1921,HD_GRAPHICS_520 },/* 1921 */
447{GMA_SKYLAKE_ULT_GT3_E,IRIS_540 },/* 1926 */
448{GMA_SKYLAKE_ULT_GT3,HD_GRAPHICS_535 },/* 1923 */
449{GMA_SKYLAKE_ULT_GT3_28W,HD_GRAPHICS_550 },/* 1927 */
450{GMA_SKYLAKE_DT_GT15,HD_GRAPHICS_530 },/* 1917 */
451{GMA_SKYLAKE_DT_GT1,HD_GRAPHICS_510 },/* 1902 */
452{GMA_SKYLAKE_DT_GT4,IRIS_570_580 },/* 1932 */
453{GMA_SKYLAKE_GT4,IRIS_580 },/* 193B */
454{GMA_SKYLAKE_GT3_FE,IRIS },/* 192B */
455{GMA_SKYLAKE_GT2,HD_GRAPHICS_530 },/* 191B */
456{GMA_SKYLAKE_192A,IRIS_P580 },/* 192A */
457{GMA_SKYLAKE_SRW_GT4,IRIS_P580 },/* 193A */
458{GMA_SKYLAKE_WS_GT2,HD_GRAPHICS_P530 },/* 191D */
459{GMA_SKYLAKE_WS_GT4,IRIS_P580 }/* 193D */
460};
461
462#define GFX_DEVICES_LEN (sizeof(intel_gfx_chipsets) / sizeof(intel_gfx_chipsets[0]))
463
464/* END http://cgit.freedesktop.org/xorg/driver/xf86-video-intel/tree/src/intel_module.c */
465
466/* Get Intel GFX device name */
467static char *get_gma_controller_name(uint16_t device_id, uint16_t vendor_id)
468{
469int i = 0;
470static char desc[128];
471
472for (i = 0; i < GFX_DEVICES_LEN; i++)
473{
474if (intel_gfx_chipsets[i].model == ((device_id << 16) | vendor_id))
475{
476snprintf(desc, sizeof(desc), "%s %s", INTEL_NAME, intel_gfx_chipsets[i].label_info);
477return desc;
478}
479}
480snprintf(desc, sizeof(desc), "Unknown %s Graphics card", INTEL_NAME);
481return desc;
482}
483
484bool setup_gma_devprop(pci_dt_t *gma_dev)
485{
486char*devicepath = NULL;
487volatile uint8_t*regs;
488uint32_tbar[7];
489char*model = NULL;
490uint8_t BuiltIn =0x00;
491uint16_tvendor_id = gma_dev->vendor_id;
492uint16_tdevice_id = gma_dev->device_id;
493uint8_t ClassFix[4] = { 0x00, 0x00, 0x03, 0x00 };
494intn_igs = 0;
495intlen;
496const char*value;
497devicepath = get_pci_dev_path(gma_dev);
498
499bar[0] = pci_config_read32(gma_dev->dev.addr, 0x10);
500regs = (uint8_t *) (bar[0] & ~0x0f);
501
502model = get_gma_controller_name(device_id, vendor_id);
503
504verbose("\tClass code: [%04X]\n", gma_dev->class_id);
505
506verbose("\t%s [%04x:%04x] (rev %02x)\nSubsystem: [%04x:%04x] :: %s\n",
507model, 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);
508
509if (!string)
510{
511string = devprop_create_string();
512}
513
514struct DevPropDevice *device = devprop_add_device(string, devicepath);
515if (!device)
516{
517printf("\t[setup_gma_devprop] Failed initializing dev-prop string dev-entry!\n");
518pause();
519return false;
520}
521
522devprop_add_value(device, "model", (uint8_t *)model, (strlen(model) + 1));
523devprop_add_value(device, "device_type", (uint8_t *)"display", 8);
524
525if (getBoolForKey(kUseIntelHDMI, &doit, &bootInfo->chameleonConfig) && doit)
526{
527devprop_add_value(device, "hda-gfx", (uint8_t *)"onboard-1", 10);
528}
529else
530{
531devprop_add_value(device, "hda-gfx", (uint8_t *)"onboard-2", 10);
532}
533
534switch ((device_id << 16) | vendor_id)
535{
536case GMA_IRONLAKE_D_G: // 0042
537case GMA_IRONLAKE_M_G: // 0046
538devprop_add_value(device, "built-in",&BuiltIn, 1);
539devprop_add_value(device, "class-code",ClassFix, 4);
540devprop_add_value(device, "AAPL,os-info",HDx000_os_info, 20);
541break;
542/* 27A2, 27AE, 27A6, A001, A011, A012, */
543case GMA_I945_GM: // Mobile GMA950 Mobile GMA3150
544case GMA_I945_GME:
545//case GMA_945GM:
546case GMA_PINEVIEW_G:
547case GMA_PINEVIEW_M:
548case GMA_GMA3150_M:
549devprop_add_value(device, "AAPL,HasPanel",reg_TRUE, 4);
550devprop_add_value(device, "built-in",&BuiltIn, 1);
551devprop_add_value(device, "class-code",ClassFix, 4);
552break;
553
554/* 2772 ,2776, A002 */
555case GMA_I945_G: // Desktop GMA950 Desktop GMA3150
556//case GMA_82945G:
557case GMA_GMA3150_D:
558BuiltIn = 0x01;
559devprop_add_value(device, "built-in",&BuiltIn, 1);
560devprop_add_value(device, "class-code",ClassFix, 4);
561break;
562
563/* 2A02, 2A12, 2A13, 2A42, 2A43 */
564case GMA_I965_GM: // GMAX3100
565case GMA_I965_GME:
566//case 0x80862A13:
567case GMA_GM45_GM:
568//case GMA_GM45_GM2:
569devprop_add_value(device, "AAPL,HasPanel",GMAX3100_vals[0], 4);
570devprop_add_value(device, "AAPL,SelfRefreshSupported",GMAX3100_vals[1], 4);
571devprop_add_value(device, "AAPL,aux-power-connected",GMAX3100_vals[2], 4);
572devprop_add_value(device, "AAPL,backlight-control",GMAX3100_vals[3], 4);
573devprop_add_value(device, "AAPL00,blackscreen-preferences",GMAX3100_vals[4], 4);
574devprop_add_value(device, "AAPL01,BacklightIntensity",GMAX3100_vals[5], 4);
575devprop_add_value(device, "AAPL01,blackscreen-preferences",GMAX3100_vals[6], 4);
576devprop_add_value(device, "AAPL01,DataJustify",GMAX3100_vals[7], 4);
577devprop_add_value(device, "AAPL01,Depth",GMAX3100_vals[8], 4);
578devprop_add_value(device, "AAPL01,Dither",GMAX3100_vals[9], 4);
579devprop_add_value(device, "AAPL01,DualLink",GMAX3100_vals[10], 4);
580devprop_add_value(device, "AAPL01,Height",GMAX3100_vals[11], 4);
581devprop_add_value(device, "AAPL01,Interlace",GMAX3100_vals[12], 4);
582devprop_add_value(device, "AAPL01,Inverter",GMAX3100_vals[13], 4);
583devprop_add_value(device, "AAPL01,InverterCurrent",GMAX3100_vals[14], 4);
584devprop_add_value(device, "AAPL01,InverterCurrency",GMAX3100_vals[15], 4);
585devprop_add_value(device, "AAPL01,LinkFormat",GMAX3100_vals[16], 4);
586devprop_add_value(device, "AAPL01,LinkType",GMAX3100_vals[17], 4);
587devprop_add_value(device, "AAPL01,Pipe",GMAX3100_vals[18], 4);
588devprop_add_value(device, "AAPL01,PixelFormat",GMAX3100_vals[19], 4);
589devprop_add_value(device, "AAPL01,Refresh",GMAX3100_vals[20], 4);
590devprop_add_value(device, "AAPL01,Stretch",GMAX3100_vals[21], 4);
591//devprop_add_value(device, "AAPL01,InverterFrequency",GMAX3100_vals[22], 4);
592devprop_add_value(device, "class-code",ClassFix, 4);
593break;
594
595/* 0106 */
596case GMA_SANDYBRIDGE_M_GT1: // HD Graphics 2000 Mobile
597devprop_add_value(device, "class-code",ClassFix, 4);
598devprop_add_value(device, "AAPL00,PixelFormat",HD2000_vals[0], 4);
599devprop_add_value(device, "AAPL00,T1",HD2000_vals[1], 4);
600devprop_add_value(device, "AAPL00,T2",HD2000_vals[2], 4);
601devprop_add_value(device, "AAPL00,T3",HD2000_vals[3], 4);
602devprop_add_value(device, "AAPL00,T4",HD2000_vals[4], 4);
603devprop_add_value(device, "AAPL00,T5",HD2000_vals[5], 4);
604devprop_add_value(device, "AAPL00,T6",HD2000_vals[6], 4);
605devprop_add_value(device, "AAPL00,T7",HD2000_vals[7], 4);
606devprop_add_value(device, "AAPL00,LinkType",HD2000_vals[8], 4);
607devprop_add_value(device, "AAPL00,LinkFormat",HD2000_vals[9], 4);
608devprop_add_value(device, "AAPL00,DualLink",HD2000_vals[10], 4);
609devprop_add_value(device, "AAPL00,Dither",HD2000_vals[11], 4);
610devprop_add_value(device, "AAPL00,DataJustify",HD3000_vals[12], 4);
611devprop_add_value(device, "graphic-options",HD2000_vals[13], 4);
612devprop_add_value(device, "AAPL,tbl-info",HD2000_tbl_info, 18);
613devprop_add_value(device, "AAPL,os-info",HD2000_os_info, 20);
614if (getValueForKey(kAAPLCustomIG, &value, &len, &bootInfo->chameleonConfig) && len == AAPL_LEN_SNB * 2)
615{
616uint8_t new_aapl0[AAPL_LEN_SNB];
617
618if (hex2bin(value, new_aapl0, AAPL_LEN_SNB) == 0)
619{
620memcpy(default_aapl_snb, new_aapl0, AAPL_LEN_SNB);
621
622verbose("\tUsing user supplied AAPL,snb-platform-id\n");
623verbose("\tAAPL,snb-platform-id: %02x%02x%02x%02x\n",
624default_aapl_snb[0], default_aapl_snb[1], default_aapl_snb[2], default_aapl_snb[3]);
625}
626devprop_add_value(device, "AAPL,snb-platform-id", default_aapl_snb, AAPL_LEN_SNB);
627}
628else
629{
630uint32_t ig_platform_id = 0x00030010; // set the default platform ig
631devprop_add_value(device, "AAPL,snb-platform-id", (uint8_t *)&ig_platform_id, 4);
632}
633break;
634
635/* 0116, 0126 */
636case GMA_SANDYBRIDGE_M_GT2: // HD Graphics 3000 Mobile
637case GMA_SANDYBRIDGE_M_GT2_PLUS:
638devprop_add_value(device, "class-code",ClassFix, 4);
639devprop_add_value(device, "AAPL00,PixelFormat",HD3000_vals[0], 4);
640devprop_add_value(device, "AAPL00,T1",HD3000_vals[1], 4);
641devprop_add_value(device, "AAPL00,T2",HD3000_vals[2], 4);
642devprop_add_value(device, "AAPL00,T3",HD3000_vals[3], 4);
643devprop_add_value(device, "AAPL00,T4",HD3000_vals[4], 4);
644devprop_add_value(device, "AAPL00,T5",HD3000_vals[5], 4);
645devprop_add_value(device, "AAPL00,T6",HD3000_vals[6], 4);
646devprop_add_value(device, "AAPL00,T7",HD3000_vals[7], 4);
647devprop_add_value(device, "AAPL00,LinkType",HD3000_vals[8], 4);
648devprop_add_value(device, "AAPL00,LinkFormat",HD3000_vals[9], 4);
649devprop_add_value(device, "AAPL00,DualLink",HD3000_vals[10], 4);
650devprop_add_value(device, "AAPL00,Dither",HD3000_vals[11], 4);
651devprop_add_value(device, "AAPL00,DataJustify",HD3000_vals[12], 4);
652devprop_add_value(device, "graphic-options",HD3000_vals[13], 4);
653devprop_add_value(device, "AAPL,tbl-info",HD3000_tbl_info, 18);
654devprop_add_value(device, "AAPL,os-info",HD3000_os_info, 20);
655
656if (getValueForKey(kAAPLCustomIG, &value, &len, &bootInfo->chameleonConfig) && len == AAPL_LEN_SNB * 2)
657{
658uint8_t new_aapl0[AAPL_LEN_SNB];
659
660if (hex2bin(value, new_aapl0, AAPL_LEN_SNB) == 0)
661{
662memcpy(default_aapl_snb, new_aapl0, AAPL_LEN_SNB);
663
664verbose("\tUsing user supplied AAPL,snb-platform-id\n");
665verbose("\tAAPL,snb-platform-id: %02x%02x%02x%02x\n",
666default_aapl_snb[0], default_aapl_snb[1], default_aapl_snb[2], default_aapl_snb[3]);
667}
668devprop_add_value(device, "AAPL,snb-platform-id", default_aapl_snb, AAPL_LEN_SNB);
669}
670else
671{
672uint32_t ig_platform_id = 0x00010000; // set the default platform ig
673devprop_add_value(device, "AAPL,snb-platform-id", (uint8_t *)&ig_platform_id, 4);
674}
675
676break;
677
678/* 0102 */
679/* HD Graphics 2000 */
680case GMA_SANDYBRIDGE_GT1: // 0102
681device_id = 0x00000102;// Inject a valid mobile GPU device id instead of patching kexts
682devprop_add_value(device, "built-in",&BuiltIn, 1);
683devprop_add_value(device, "class-code",ClassFix, 4);
684devprop_add_value(device, "device-id",(uint8_t *)&device_id, sizeof(device_id));
685devprop_add_value(device, "AAPL,tbl-info",HD2000_tbl_info, 18);
686devprop_add_value(device, "AAPL,os-info",HD2000_os_info, 20);
687
688if (getValueForKey(kAAPLCustomIG, &value, &len, &bootInfo->chameleonConfig) && len == AAPL_LEN_SNB * 2)
689{
690uint8_t new_aapl0[AAPL_LEN_SNB];
691
692if (hex2bin(value, new_aapl0, AAPL_LEN_SNB) == 0)
693{
694memcpy(default_aapl_snb, new_aapl0, AAPL_LEN_SNB);
695
696verbose("\tUsing user supplied AAPL,snb-platform-id\n");
697verbose("\tAAPL,snb-platform-id: %02x%02x%02x%02x\n",
698default_aapl_snb[0], default_aapl_snb[1], default_aapl_snb[2], default_aapl_snb[3]);
699}
700devprop_add_value(device, "AAPL,snb-platform-id", default_aapl_snb, AAPL_LEN_SNB);
701}
702else
703{
704uint32_t ig_platform_id = 0x00030010; // set the default platform ig
705devprop_add_value(device, "AAPL,snb-platform-id", (uint8_t *)&ig_platform_id, 4);
706}
707
708break;
709
710/* Sandy Bridge */
711/* HD Graphics 3000 */
712case GMA_SANDYBRIDGE_GT2: // 0112
713case GMA_SANDYBRIDGE_GT2_PLUS: // 0122
714devprop_add_value(device, "built-in",&BuiltIn, 1);
715devprop_add_value(device, "class-code",ClassFix, 4);
716
717// patch by ikunikun for i3-2125 and i5-2500K to enable HD3000.
718if(((device_id << 16) | vendor_id) != GMA_SANDYBRIDGE_GT2)
719{
720devprop_add_value(device, "vendor-id",(uint8_t *)INTEL_VENDORID, 4);
721}
722else
723{
724device_id = 0x00000126;
725devprop_add_value(device, "device-id", (uint8_t *)&device_id, sizeof(device_id));
726verbose("\tInjeting done: was [%04x:%04x] now is [%04x:%04x]\n", gma_dev->vendor_id, gma_dev->device_id, gma_dev->vendor_id, device_id);
727}
728
729devprop_add_value(device, "AAPL,tbl-info",HD3000_tbl_info, 18);
730devprop_add_value(device, "AAPL,os-info",HD3000_os_info, 20);
731
732if (getValueForKey(kAAPLCustomIG, &value, &len, &bootInfo->chameleonConfig) && len == AAPL_LEN_SNB * 2)
733{
734uint8_t new_aapl0[AAPL_LEN_SNB];
735
736if (hex2bin(value, new_aapl0, AAPL_LEN_SNB) == 0)
737{
738memcpy(default_aapl_snb, new_aapl0, AAPL_LEN_SNB);
739
740verbose("\tUsing user supplied AAPL,snb-platform-id\n");
741verbose("\tAAPL,snb-platform-id: %02x%02x%02x%02x\n",
742default_aapl_snb[0], default_aapl_snb[1], default_aapl_snb[2], default_aapl_snb[3]);
743}
744devprop_add_value(device, "AAPL,snb-platform-id", default_aapl_snb, AAPL_LEN_SNB);
745}
746else
747{
748uint32_t ig_platform_id = 0x00030010; // set the default platform ig
749devprop_add_value(device, "AAPL,snb-platform-id", (uint8_t *)&ig_platform_id, 4);
750}
751
752break;
753
754/* Ivy Bridge */
755/* HD Graphics 4000, HD Graphics 4000 Mobile, HD Graphics P4000, HD Graphics 2500 HD, Graphics 2500 Mobile */
756case GMA_IVYBRIDGE_D_GT1: // 0152
757case GMA_IVYBRIDGE_M_GT1: // 0156
758case GMA_IVYBRIDGE_S_GT1: // 015A
759case GMA_IVYBRIDGE_S_GT3: // 015e
760case GMA_IVYBRIDGE_D_GT2: // 0162
761case GMA_IVYBRIDGE_M_GT2: // 0166
762case GMA_IVYBRIDGE_S_GT2: // 016A
763case GMA_IVYBRIDGE_S_GT4: // 0172
764case GMA_IVYBRIDGE_S_GT5: // 0176
765
766if (getValueForKey(kAAPLCustomIG, &value, &len, &bootInfo->chameleonConfig) && len == AAPL_LEN_IVY * 2)
767{
768uint8_t new_aapl0[AAPL_LEN_IVY];
769
770if (hex2bin(value, new_aapl0, AAPL_LEN_IVY) == 0)
771{
772memcpy(default_aapl_ivy, new_aapl0, AAPL_LEN_IVY);
773
774verbose("\tUsing user supplied AAPL,ig-platform-id\n");
775verbose("\tAAPL,ig-platform-id: %02x%02x%02x%02x\n",
776default_aapl_ivy[0], default_aapl_ivy[1], default_aapl_ivy[2], default_aapl_ivy[3]);
777}
778devprop_add_value(device, "AAPL,ig-platform-id", default_aapl_ivy, AAPL_LEN_IVY);
779}
780else if (getIntForKey(kIntelCapriFB, &n_igs, &bootInfo->chameleonConfig))
781{
782if ((n_igs >= 0) || (n_igs <= 11))
783{
784verbose("\tAAPL,ig-platform-id was set in org.chameleon.Boot.plist with value %d\n", n_igs);
785devprop_add_value(device, "AAPL,ig-platform-id", ivy_bridge_ig_vals[n_igs], 4);
786}
787else
788{
789verbose("\tAAPL,ig-platform-id was set in org.chameleon.Boot.plist with bad value please choose a number between 0 and 11.\n");
790}
791}
792else
793{
794uint32_t ig_platform_id;
795uint32_t ram = (((getVBEVideoRam() + 512) / 1024) + 512) / 1024;
796switch (ram)
797{
798case 96:
799ig_platform_id = 0x01660000; // 96mb Mobile
800break;
801
802case 64:
803ig_platform_id = 0x01660009; // 64mb Mobile
804break;
805
806case 32:
807ig_platform_id = 0x01620005; // 32mb Desktop
808break;
809
810default:
811printf("\tPlease specify 96, 64, or 32MB RAM for the HD4000 in the bios.\n"
812"\tThe selected %dMB RAM configuration is not supported for the HD4000.\n", ram);
813pause();
814return false;// Exit early before the AAPL,ig-platform-id property is set.
815break;
816}
817devprop_add_value(device, "AAPL,ig-platform-id", (uint8_t *)&ig_platform_id, 4);
818}
819
820devprop_add_value(device, "AAPL00,DualLink", HD4000_vals[10], 4);
821devprop_add_value(device, "built-in", &BuiltIn, 1);
822devprop_add_value(device, "class-code", ClassFix, 4);
823
824break;
825
826/* Haswell */
827/* HD Graphics 5000, HD Graphics 5000 Mobile, HD Graphics P5000, HD Graphics 4600, HD Graphics 4600 Mobile */
828//case 0x80860090:
829//case 0x80860091:
830//case 0x80860092:
831case GMA_HASWELL_M_GT2: // 0416
832case GMA_HASWELL_E_GT2: // 041e
833case GMA_HASWELL_ULT_M_GT2: // 0a16
834case GMA_HASWELL_ULT_E_GT2: // 0a1e
835#if REPLACE_DEVICE_ID
836verbose("\tInjecting a valid desktop GPU device id (0x0412) instead of patching kexts.\n");
837device_id = 0x00000412;// Inject a valid desktop GPU device id (0x0412) instead of patching kexts
838devprop_add_value(device, "vendor-id",(uint8_t *)INTEL_VENDORID, 4);
839devprop_add_value(device, "device-id",(uint8_t *)&device_id, sizeof(device_id));
840verbose("\tInjeting done: was [%04x:%04x] now is [%04x:%04x]\n", gma_dev->vendor_id, gma_dev->device_id, gma_dev->vendor_id, device_id);
841#endif // REPLACE_DEVICE_ID
842case GMA_HASWELL_D_GT1: // 0402
843case GMA_HASWELL_M_GT1: // 0406
844case GMA_HASWELL_S_GT1: // 040a
845case GMA_HASWELL_D_GT2: // 0412
846case GMA_HASWELL_S_GT2: // 041a
847case GMA_HASWELL_E_GT1: // 040e
848case GMA_HASWELL_E_GT3: // 042e
849case GMA_HASWELL_D_GT3: // 0422
850case GMA_HASWELL_M_GT3: // 0426
851case GMA_HASWELL_S_GT3: // 042a
852case GMA_HASWELL_ULT_M_GT1: // 0a06
853case GMA_HASWELL_ULT_E_GT1: // 0a0e
854case GMA_HASWELL_ULT_D_GT3: // 0a22
855case GMA_HASWELL_ULT_M_GT3: // 0a26
856case GMA_HASWELL_ULT_S_GT3: // 0a2a
857case GMA_HASWELL_ULT_E_GT3: // 0a2e
858case GMA_HASWELL_SDV_D_GT1_IG: // 0c02
859case GMA_HASWELL_SDV_M_GT1_IG: // 0c06
860case GMA_HASWELL_SDV_D_GT2_IG: // 0c12
861case GMA_HASWELL_SDV_M_GT2_IG: // 0c16
862case GMA_HASWELL_SDV_D_GT2_PLUS_IG: // 0c22
863case GMA_HASWELL_SDV_M_GT2_PLUS_IG: // 0c26
864case GMA_HASWELL_CRW_D_GT1: // 0d02
865case GMA_HASWELL_CRW_D_GT2: // 0d12
866case GMA_HASWELL_CRW_D_GT3: // 0d22
867case GMA_HASWELL_CRW_M_GT1: // 0d06
868case GMA_HASWELL_CRW_M_GT2: // 0d16
869case GMA_HASWELL_CRW_M_GT3: // 0d26
870case GMA_HASWELL_CRW_S_GT1: // 0d0a
871case GMA_HASWELL_CRW_S_GT2: // 0d1a
872case GMA_HASWELL_CRW_S_GT3: // 0d2a
873case GMA_HASWELL_CRW_B_GT1: // 0d0b
874case GMA_HASWELL_CRW_B_GT2: // 0d1b
875case GMA_HASWELL_CRW_B_GT3: // 0d2b
876case GMA_HASWELL_CRW_E_GT1: // 0d0e
877case GMA_HASWELL_CRW_E_GT2: // 0d1e
878case GMA_HASWELL_CRW_E_GT3: // 0d2e
879case GMA_HASWELL_CRW_M_GT2_PLUS_IG: // 0d36
880case GMA_HASWELL_CRW_S_GT2_PLUS_IG: // 0d3a
881
882if (getValueForKey(kAAPLCustomIG, &value, &len, &bootInfo->chameleonConfig) && len == AAPL_LEN_HSW * 2)
883{
884uint8_t new_aapl0[AAPL_LEN_HSW];
885
886if (hex2bin(value, new_aapl0, AAPL_LEN_HSW) == 0)
887{
888memcpy(default_aapl_haswell, new_aapl0, AAPL_LEN_HSW);
889
890verbose("\tUsing user supplied AAPL,ig-platform-id\n");
891verbose("\tAAPL,ig-platform-id: %02x%02x%02x%02x\n",
892default_aapl_haswell[0], default_aapl_haswell[1], default_aapl_haswell[2], default_aapl_haswell[3]);
893}
894devprop_add_value(device, "AAPL,ig-platform-id", default_aapl_haswell, AAPL_LEN_HSW);
895}
896else if (getIntForKey(kIntelAzulFB, &n_igs, &bootInfo->chameleonConfig))
897{
898if ((n_igs >= 0) || (n_igs <= 16))
899{
900verbose("\tAAPL,ig-platform-id was set in org.chameleon.Boot.plist with value %d\n", n_igs);
901devprop_add_value(device, "AAPL,ig-platform-id", haswell_ig_vals[n_igs], 4);
902}
903else
904{
905verbose("\tAAPL,ig-platform-id was set in org.chameleon.Boot.plist with bad value please choose a number between 0 and 16.\n");
906}
907}
908else
909{
910uint32_t ig_platform_id = 0x0000260c; // set the default platform ig
911devprop_add_value(device, "AAPL,ig-platform-id", (uint8_t *)&ig_platform_id, 4);
912}
913
914devprop_add_value(device, "AAPL00,DualLink", HD4000_vals[10], 4);
915devprop_add_value(device, "built-in", &BuiltIn, 1);
916devprop_add_value(device, "class-code", ClassFix, 4);
917
918break;
919
920/* Broadwell */
921/* HD Graphics 5300 Mobile, HD Graphics 6000 Mobile, HD Graphics 6100 Mobile */
922case GMA_BROADWELL_BDW_0bd0: // 0bd0
923case GMA_BROADWELL_BDW_0bd1: // 0bd1
924case GMA_BROADWELL_BDW_0bd2: // 0bd2
925case GMA_BROADWELL_BDW_0bd3: // 0bd3
926case GMA_BROADWELL_BDW_0bd4: // 0bd4
927case GMA_BROADWELL_BDW_1602: // 1602
928case GMA_BROADWELL_BDW_U_GT1: // 1606
929case GMA_BROADWELL_BDW_160B: // 160b
930case GMA_BROADWELL_BDW_160A: // 160a
931case GMA_BROADWELL_BDW_160D: // 160d
932case GMA_BROADWELL_BDW_160E: // 160e
933case GMA_BROADWELL_BDW_1612: // 1612
934case GMA_BROADWELL_BDW_U_GT2: // 1616
935case GMA_BROADWELL_BDW_161B: // 161b
936case GMA_BROADWELL_BDW_161A: // 161a
937case GMA_BROADWELL_BDW_161D: // 161d
938case GMA_BROADWELL_BDW_Y_GT2: // 161e (MacBook) Intel HD Graphics 5300
939case GMA_BROADWELL_BDW_1622: // 1622 (iMac 21") Intel Iris Pro 6200
940case GMA_BROADWELL_BDW_U_GT3: // 1626 (MacBook Air) Intel HD Graphics 6000
941case GMA_BROADWELL_BDW_162A: // 162a
942case GMA_BROADWELL_BDW_U_GT3_2: // 162b (MacBook Pro) Intel Iris Graphics 6100
943case GMA_BROADWELL_BDW_162D: // 162d
944case GMA_BROADWELL_BDW_162E: // 162e
945case GMA_BROADWELL_BDW_1632: // 1632
946case GMA_BROADWELL_BDW_1636: // 1636
947case GMA_BROADWELL_BDW_163B: // 163b
948case GMA_BROADWELL_BDW_163A: // 163a
949case GMA_BROADWELL_BDW_163D: // 163d
950case GMA_BROADWELL_BDW_163E: // 163e
951
952if (getValueForKey(kAAPLCustomIG, &value, &len, &bootInfo->chameleonConfig) && len == AAPL_LEN_BDW * 2)
953{
954uint8_t new_aapl0[AAPL_LEN_BDW];
955
956if (hex2bin(value, new_aapl0, AAPL_LEN_BDW) == 0)
957{
958memcpy(default_aapl_broadwell, new_aapl0, AAPL_LEN_BDW);
959
960verbose("\tUsing user supplied AAPL,ig-platform-id\n");
961verbose("\tAAPL,ig-platform-id: %02x%02x%02x%02x\n",
962default_aapl_broadwell[0], default_aapl_broadwell[1], default_aapl_broadwell[2], default_aapl_broadwell[3]);
963}
964devprop_add_value(device, "AAPL,ig-platform-id", default_aapl_broadwell, AAPL_LEN_BDW);
965}
966else if (getIntForKey(kIntelBdwFB, &n_igs, &bootInfo->chameleonConfig))
967{
968if ((n_igs >= 0) || (n_igs <= 20))
969{
970verbose("\tAAPL,ig-platform-id was set in org.chameleon.Boot.plist with value %d\n", n_igs);
971devprop_add_value(device, "AAPL,ig-platform-id", broadwell_ig_vals[n_igs], 4);
972}
973else
974{
975verbose("\tAAPL,ig-platform-id was set in org.chameleon.Boot.plist with bad value please choose a number between 0 and 19.\n");
976}
977}
978else
979{
980uint32_t ig_platform_id;
981if ( ( (device_id << 16) | vendor_id ) == GMA_BROADWELL_BDW_1622 )
982{
983ig_platform_id = 0x16220007; // Iris Pro 6200 (i5 5675C & i7 5775C)
984}
985else
986{
987ig_platform_id = 0x16160000; // set the default platform ig
988}
989devprop_add_value(device, "AAPL,ig-platform-id", (uint8_t *)&ig_platform_id, 4);
990}
991
992devprop_add_value(device, "AAPL00,DualLink", HD4000_vals[10], 4);
993devprop_add_value(device, "built-in", &BuiltIn, 1);
994devprop_add_value(device, "class-code", ClassFix, 4);
995
996break;
997
998/* Skylake */
999/* HD Graphics */
1000case GMA_SKYLAKE_ULT_GT1:// 1906
1001case GMA_SKYLAKE_ULT_GT15:// 1913
1002case GMA_SKYLAKE_ULT_GT2:// 1916
1003case GMA_SKYLAKE_ULX_GT1:// 190E
1004case GMA_SKYLAKE_ULX_GT2:// 191E
1005case GMA_SKYLAKE_DT_GT2:// 1912
1006case GMA_SKYLAKE_1921:// 1921
1007case GMA_SKYLAKE_ULT_GT3_E:// 1926
1008case GMA_SKYLAKE_ULT_GT3:// 1923
1009case GMA_SKYLAKE_ULT_GT3_28W:// 1927
1010case GMA_SKYLAKE_DT_GT15:// 1917
1011case GMA_SKYLAKE_DT_GT1:// 1902
1012case GMA_SKYLAKE_DT_GT4:// 1932
1013case GMA_SKYLAKE_GT4:// 193B
1014case GMA_SKYLAKE_GT3_FE:// 192B
1015case GMA_SKYLAKE_GT2:// 191B
1016case GMA_SKYLAKE_192A:// 192A
1017case GMA_SKYLAKE_SRW_GT4:// 193A
1018case GMA_SKYLAKE_WS_GT2:// 191D
1019case GMA_SKYLAKE_WS_GT4:// 193D
1020
1021if (getValueForKey(kAAPLCustomIG, &value, &len, &bootInfo->chameleonConfig) && len == AAPL_LEN_SKL * 2)
1022{
1023uint8_t new_aapl0[AAPL_LEN_SKL];
1024
1025if (hex2bin(value, new_aapl0, AAPL_LEN_SKL) == 0)
1026{
1027memcpy(default_aapl_skylake, new_aapl0, AAPL_LEN_SKL);
1028
1029verbose("\tUsing user supplied AAPL,ig-platform-id\n");
1030verbose("\tAAPL,ig-platform-id: %02x%02x%02x%02x\n",
1031default_aapl_skylake[0], default_aapl_skylake[1], default_aapl_skylake[2], default_aapl_skylake[3]);
1032}
1033devprop_add_value(device, "AAPL,ig-platform-id", default_aapl_skylake, AAPL_LEN_SKL);
1034}
1035else if (getIntForKey(kIntelSklFB, &n_igs, &bootInfo->chameleonConfig))
1036{
1037if ((n_igs >= 0) || (n_igs <= 12))
1038{
1039verbose("\tAAPL,ig-platform-id was set in org.chameleon.Boot.plist with value %d\n", n_igs);
1040devprop_add_value(device, "AAPL,ig-platform-id", skylake_ig_vals[n_igs], 4);
1041}
1042else
1043{
1044verbose("\tAAPL,ig-platform-id was set in org.chameleon.Boot.plist with bad value please choose a number between 0 and 12.\n");
1045}
1046}
1047else
1048{
1049uint32_t ig_platform_id = 0x19260000; // set the default platform ig
1050devprop_add_value(device, "AAPL,ig-platform-id", (uint8_t *)&ig_platform_id, 4);
1051}
1052
1053devprop_add_value(device, "AAPL00,DualLink", HD4000_vals[10], 4);
1054devprop_add_value(device, "built-in", &BuiltIn, 1);
1055devprop_add_value(device, "class-code", ClassFix, 4);
1056
1057break;
1058
1059default:
1060break;
1061}
1062
1063stringdata = malloc(sizeof(uint8_t) * string->length);
1064if (!stringdata)
1065{
1066printf("\t[setup_gma_devprop] No stringdata!\n");
1067pause();
1068return false;
1069}
1070
1071memcpy(stringdata, (uint8_t *)devprop_generate_string(string), string->length);
1072stringlength = string->length;
1073
1074return true;
1075}
1076

Archive Download this file

Revision: 2805