1 | /*␊ |
2 | * ATI Graphics Card Enabler, part of the Chameleon Boot Loader Project␊ |
3 | *␊ |
4 | * Copyright 2010 by Islam M. Ahmed Zaid. All rights reserved.␊ |
5 | *␊ |
6 | */␊ |
7 | ␊ |
8 | #include "config.h"␊ |
9 | #include "ati.h"␊ |
10 | #include "convert.h"␊ |
11 | ␊ |
12 | #if DEBUG_ATI␊ |
13 | ␉#define DBG(x...)␉printf(x)␊ |
14 | #else␊ |
15 | ␉#define DBG(x...)␉msglog(x)␊ |
16 | #endif␊ |
17 | ␊ |
18 | /* vals */␊ |
19 | static value_t aty_name;␊ |
20 | static value_t aty_nameparent;␊ |
21 | card_t *card;␊ |
22 | ␊ |
23 | static bool␉doit␉= false;␊ |
24 | ␊ |
25 | static card_config_t card_configs[] = {␊ |
26 | ␉{NULL,␉␉0},␊ |
27 | ␉/* OLDController */␊ |
28 | ␉{"Wormy",␉2},␊ |
29 | ␉{"Alopias",␉2},␊ |
30 | ␉{"Caretta",␉1},␊ |
31 | ␉{"Kakapo",␉3},␊ |
32 | ␉{"Kipunji",␉4},␊ |
33 | ␉{"Peregrine",␉2},␊ |
34 | ␉{"Raven",␉3},␊ |
35 | ␉{"Sphyrna",␉1},␊ |
36 | ␉/* AMD2400Controller */␊ |
37 | ␉{"Iago",␉2},␊ |
38 | ␉/* AMD2600Controller */␊ |
39 | ␉{"Hypoprion",␉2},␊ |
40 | ␉{"Lamna",␉2},␊ |
41 | ␉/* AMD3800Controller */␊ |
42 | ␉{"Megalodon",␉3},␊ |
43 | ␉{"Triakis",␉2},␊ |
44 | ␉/* AMD4600Controller */␊ |
45 | ␉{"Flicker",␉3},␊ |
46 | ␉{"Gliff",␉3},␊ |
47 | ␉{"Shrike",␉3},␊ |
48 | ␉/* AMD4800Controller */␊ |
49 | ␉{"Cardinal",␉2},␊ |
50 | ␉{"Motmot",␉2},␊ |
51 | ␉{"Quail",␉3},␊ |
52 | ␉/* AMD5000Controller */␊ |
53 | ␉{"Douc",␉2},␊ |
54 | ␉{"Langur",␉3},␊ |
55 | ␉{"Uakari",␉4},␊ |
56 | ␉{"Zonalis",␉6},␊ |
57 | ␉{"Alouatta",␉4},␊ |
58 | ␉{"Hoolock",␉1},␊ |
59 | ␉{"Vervet",␉4},␊ |
60 | ␉{"Baboon",␉3},␊ |
61 | ␉{"Eulemur",␉3},␊ |
62 | ␉{"Galago",␉2},␊ |
63 | ␉{"Colobus",␉2},␊ |
64 | ␉{"Mangabey",␉2},␊ |
65 | ␉{"Nomascus",␉5},␊ |
66 | ␉{"Orangutan",␉2},␊ |
67 | ␉/* AMD6000Controller */␊ |
68 | ␉{"Pithecia",␉3},␊ |
69 | ␉{"Bulrushes",␉6},␊ |
70 | ␉{"Cattail",␉4},␊ |
71 | ␉{"Hydrilla",␉5},␊ |
72 | ␉{"Duckweed",␉4},␊ |
73 | ␉{"Fanwort",␉4},␊ |
74 | ␉{"Elodea",␉5},␊ |
75 | ␉{"Kudzu",␉2},␊ |
76 | ␉{"Gibba",␉5},␊ |
77 | ␉{"Lotus",␉3},␊ |
78 | ␉{"Ipomoea",␉3},␊ |
79 | ␉{"Muskgrass",␉4},␊ |
80 | ␉{"Juncus",␉4},␊ |
81 | ␉{"Osmunda", 4},␊ |
82 | ␉{"Pondweed",␉3},␊ |
83 | ␉{"Spikerush", 4},␊ |
84 | ␉{"Typha", 5},␊ |
85 | ␉/* AMD7000Controller */␊ |
86 | ␉{"Ramen",␉6},␊ |
87 | ␉{"Tako",␉6},␊ |
88 | ␉{"Namako",␉4},␊ |
89 | ␉{"Aji",␉␉4},␊ |
90 | ␉{"Buri",␉4},␊ |
91 | ␉{"Chutoro",␉5},␊ |
92 | ␉{"Dashimaki",␉4},␊ |
93 | ␉{"Ebi",␉␉5},␊ |
94 | ␉{"Gari",␉5},␊ |
95 | ␉{"Futomaki",␉5},␊ |
96 | ␉{"Hamachi",␉4},␊ |
97 | ␉{"OPM", 5},␊ |
98 | ␉{"Ikura",␉1},␊ |
99 | ␉{"IkuraS",␉6},␊ |
100 | ␉{"Junsai",␉6},␊ |
101 | ␉{"Kani",␉1},␊ |
102 | ␉{"KaniS",␉6},␊ |
103 | ␉{"DashimakiS",␉4},␊ |
104 | ␉{"Maguro",␉1},␊ |
105 | ␉{"MaguroS",␉6},␊ |
106 | ␉/* AMD8000Controller */␊ |
107 | ␉{"Exmoor",␉6},␊ |
108 | ␉{"Baladi", 6},␊ |
109 | ␉/* AMD9000Controller */␊ |
110 | ␉{"MalteseS",␉1},␊ |
111 | ␉{"Lagotto",␉4},␊ |
112 | ␉{"GreyhoundS",␉1},␊ |
113 | ␉{"Maltese",␉6},␊ |
114 | ␉{"Basset",␉4},␊ |
115 | ␉{"Greyhound",␉6},␊ |
116 | ␉{"Labrador",␉6},␊ |
117 | ␉/* AMD9300Controller */␊ |
118 | ␉{"FlueveSWIP",␉4},␊ |
119 | ␉/* AMD9500Controller */␊ |
120 | ␉{"Acre",␉3},␊ |
121 | ␉{"Dayman",␉6},␊ |
122 | ␉{"Guariba",␉6},␊ |
123 | ␉{"Huallaga", 3},␊ |
124 | ␉{"Orinoco", 5},␊ |
125 | ␉/* AMD9510Controller */␊ |
126 | ␉{"Berbice",␉5},␊ |
127 | ␉/* AMD9515Controller */␊ |
128 | ␉{"Mazaruni", 5},␊ |
129 | ␉{"Longavi", 5},␊ |
130 | ␉/* AMD9520Controller */␊ |
131 | ␉{"Elqui",␉5},␊ |
132 | ␉{"Caroni",␉5},␊ |
133 | ␉{"Florin",␉6}␊ |
134 | };␊ |
135 | ␊ |
136 | static radeon_card_info_t radeon_cards[] = {␊ |
137 | ␉␊ |
138 | ␉// Earlier cards are not supported␊ |
139 | ␉//␊ |
140 | ␉// Layout is device_id, subsys_id (subsystem id plus vendor id), chip_family_name, display name, frame buffer␊ |
141 | ␉// Cards are grouped by device id and vendor id then sorted by subsystem id to make it easier to add new cards␊ |
142 | ␉//␊ |
143 | ␊ |
144 | ␉// KAVERI␊ |
145 | //␉{ 0x1304,␉0x00000000, CHIP_FAMILY_KAVERI,␉␉"AMD Radeon", kNull }, // Mobile␊ |
146 | //␉{ 0x1305,␉0x00000000, CHIP_FAMILY_KAVERI,␉␉"AMD Radeon", kNull },␊ |
147 | //␉{ 0x1306,␉0x00000000, CHIP_FAMILY_KAVERI,␉␉"AMD Radeon", kNull }, // Mobile␊ |
148 | //␉{ 0x1307,␉0x00000000, CHIP_FAMILY_KAVERI,␉␉"AMD Radeon", kNull },␊ |
149 | //␉{ 0x1309,␉0x00000000, CHIP_FAMILY_KAVERI,␉␉"AMD Radeon", kNull }, // Mobile␊ |
150 | //␉{ 0x130A,␉0x00000000, CHIP_FAMILY_KAVERI,␉␉"AMD Radeon", kNull }, // Mobile␊ |
151 | //␉{ 0x130B,␉0x00000000, CHIP_FAMILY_KAVERI,␉␉"AMD Radeon", kNull }, // Mobile␊ |
152 | //␉{ 0x130C,␉0x00000000, CHIP_FAMILY_KAVERI,␉␉"AMD Radeon", kNull }, // Mobile␊ |
153 | //␉{ 0x130D,␉0x00000000, CHIP_FAMILY_KAVERI,␉␉"AMD Radeon", kNull }, // Mobile␊ |
154 | //␉{ 0x130E,␉0x00000000, CHIP_FAMILY_KAVERI,␉␉"AMD Radeon", kNull }, // Mobile␊ |
155 | ␉{ 0x130F,␉0x00000000, CHIP_FAMILY_KAVERI,␉␉"AMD Radeon R7", kNull },␊ |
156 | //␉{ 0x1310,␉0x00000000, CHIP_FAMILY_KAVERI,␉␉"AMD Radeon", kNull },␊ |
157 | //␉{ 0x1311,␉0x00000000, CHIP_FAMILY_KAVERI,␉␉"AMD Radeon", kNull },␊ |
158 | //␉{ 0x1312,␉0x00000000, CHIP_FAMILY_KAVERI,␉␉"AMD Radeon", kNull },␊ |
159 | ␉{ 0x1313,␉0x00000000, CHIP_FAMILY_KAVERI,␉␉"AMD Radeon R7", kNull },␊ |
160 | //␉{ 0x1315,␉0x00000000, CHIP_FAMILY_KAVERI,␉␉"AMD Radeon", kNull },␊ |
161 | ␉{ 0x1316,␉0x00000000, CHIP_FAMILY_KAVERI,␉␉"AMD Radeon R5", kNull },␊ |
162 | //␉{ 0x1317,␉0x00000000, CHIP_FAMILY_KAVERI,␉␉"AMD Radeon", kNull }, // Mobile␊ |
163 | ␉{ 0x1318,␉0x00000000, CHIP_FAMILY_KAVERI,␉␉"AMD Radeon R5", kNull }, // Mobile␊ |
164 | //␉{ 0x131B,␉0x00000000, CHIP_FAMILY_KAVERI,␉␉"AMD Radeon", kNull },␊ |
165 | //␉{ 0x131C,␉0x00000000, CHIP_FAMILY_KAVERI,␉␉"AMD Radeon", kNull },␊ |
166 | //␉{ 0x131D,␉0x00000000, CHIP_FAMILY_KAVERI,␉␉"AMD Radeon", kNull },␊ |
167 | ␊ |
168 | ␉// R423␊ |
169 | ␉{ 0x5D48, 0x00000000, CHIP_FAMILY_R423, "ATI Radeon HD Mobile ",␉kNull␉␉},␊ |
170 | ␉{ 0x5D49, 0x00000000, CHIP_FAMILY_R423, "ATI Radeon HD Mobile ",␉kNull␉␉},␊ |
171 | ␉{ 0x5D4A, 0x00000000, CHIP_FAMILY_R423, "ATI Radeon HD Mobile ",␉kNull␉␉},␊ |
172 | ␉{ 0x5D4C, 0x00000000, CHIP_FAMILY_R423, "ATI Radeon HD Desktop ",␉kNull␉␉},␊ |
173 | ␉{ 0x5D4D, 0x00000000, CHIP_FAMILY_R423, "ATI Radeon HD Desktop ",␉kNull␉␉},␊ |
174 | ␉{ 0x5D4E, 0x00000000, CHIP_FAMILY_R423, "ATI Radeon HD Desktop ",␉kNull␉␉},␊ |
175 | ␉{ 0x5D4F, 0x00000000, CHIP_FAMILY_R423, "ATI Radeon HD Desktop ",␉kNull␉␉},␊ |
176 | ␉{ 0x5D50, 0x00000000, CHIP_FAMILY_R423, "ATI Radeon HD Desktop ",␉kNull␉␉},␊ |
177 | ␉{ 0x5D52, 0x00000000, CHIP_FAMILY_R423, "ATI Radeon HD Desktop ",␉kNull␉␉},␊ |
178 | ␉{ 0x5D57, 0x00000000, CHIP_FAMILY_R423, "ATI Radeon HD Desktop ",␉kNull␉␉},␊ |
179 | ␊ |
180 | ␉// RV410␊ |
181 | ␉{ 0x5E48, 0x00000000, CHIP_FAMILY_RV410, "ATI Radeon HD Desktop ",␉kNull␉␉},␊ |
182 | ␉{ 0x5E4A, 0x00000000, CHIP_FAMILY_RV410, "ATI Radeon HD Desktop ",␉kNull␉␉},␊ |
183 | ␉{ 0x5E4B, 0x00000000, CHIP_FAMILY_RV410, "ATI Radeon HD Desktop ",␉kNull␉␉},␊ |
184 | ␉{ 0x5E4C, 0x00000000, CHIP_FAMILY_RV410, "ATI Radeon HD Desktop ",␉kNull␉␉},␊ |
185 | ␉{ 0x5E4D, 0x00000000, CHIP_FAMILY_RV410, "ATI Radeon HD Desktop ",␉kNull␉␉},␊ |
186 | ␉{ 0x5E4F, 0x00000000, CHIP_FAMILY_RV410, "ATI Radeon HD Desktop ",␉kNull␉␉},␊ |
187 | ␊ |
188 | ␉// OLAND␊ |
189 | ␉{ 0x6600,␉0x00000000, CHIP_FAMILY_OLAND,␉␉"AMD Radeon HD 8600/8700M",␉kNull }, // Mobile␊ |
190 | ␉{ 0x6601,␉0x00000000, CHIP_FAMILY_OLAND,␉␉"AMD Radeon HD 8500/8700M",␉kNull }, // Mobile␊ |
191 | //␉{ 0x6602,␉0x00000000, CHIP_FAMILY_OLAND,␉␉"AMD Radeon",␉␉␉kNull }, // Mobile␊ |
192 | //␉{ 0x6603,␉0x00000000, CHIP_FAMILY_OLAND,␉␉"AMD Radeon",␉␉␉kNull }, // Mobile␊ |
193 | ␉{ 0x6604,␉0x00000000, CHIP_FAMILY_OLAND,␉␉"AMD Radeon R7 M265",␉␉kNull }, // Mobile␊ |
194 | ␉{ 0x6605,␉0x00000000, CHIP_FAMILY_OLAND,␉␉"AMD Radeon R7 M260",␉␉kNull }, // Mobile␊ |
195 | ␉{ 0x6606,␉0x00000000, CHIP_FAMILY_OLAND,␉␉"AMD Radeon HD 8790M",␉␉kNull }, // Mobile␊ |
196 | ␉{ 0x6607,␉0x00000000, CHIP_FAMILY_OLAND,␉␉"AMD Radeon R5 M240",␉␉kNull }, // Mobile␊ |
197 | ␉{ 0x6608,␉0x00000000, CHIP_FAMILY_OLAND,␉␉"AMD FirePro W2100",␉␉kNull },␊ |
198 | ␉{ 0x6610,␉0x00000000, CHIP_FAMILY_OLAND,␉␉"AMD Radeon R7 250",␉␉kFutomaki },␊ |
199 | ␉{ 0x6611,␉0x00000000, CHIP_FAMILY_OLAND,␉␉"AMD Radeon R7 340 Series",␉kNull },␊ |
200 | ␉{ 0x6613,␉0x00000000, CHIP_FAMILY_OLAND,␉␉"AMD Radeon R7 240",␉␉kFutomaki␉},␊ |
201 | //␉{ 0x6620,␉0x00000000, CHIP_FAMILY_OLAND,␉␉"AMD Radeon", kNull }, // Mobile␊ |
202 | //␉{ 0x6621,␉0x00000000, CHIP_FAMILY_OLAND,␉␉"AMD Radeon", kNull }, // Mobile␊ |
203 | //␉{ 0x6623,␉0x00000000, CHIP_FAMILY_OLAND,␉␉"AMD Radeon", kNull }, // Mobile␊ |
204 | //␉{ 0x6631,␉0x00000000, CHIP_FAMILY_OLAND,␉␉"AMD Radeon", kNull },␊ |
205 | ␊ |
206 | ␉// BONAIRE␊ |
207 | ␉{ 0x6640,␉0x00000000, CHIP_FAMILY_BONAIRE,␉"AMD Radeon HD 8950", kNull }, // Mobile␊ |
208 | ␉{ 0x6641,␉0x00000000, CHIP_FAMILY_BONAIRE,␉"AMD Radeon HD 8930M", kNull }, // Mobile␊ |
209 | ␉{ 0x6646,␉0x00000000, CHIP_FAMILY_BONAIRE,␉"AMD Radeon R9 M280X", kNull }, // Mobile␊ |
210 | ␉{ 0x6647,␉0x00000000, CHIP_FAMILY_BONAIRE,␉"AMD Radeon R9 M270X", kNull }, // Mobile␊ |
211 | ␉{ 0x6649,␉0x00000000, CHIP_FAMILY_BONAIRE,␉"AMD FirePro W5100", kNull },␊ |
212 | //␉{ 0x6650,␉0x00000000, CHIP_FAMILY_BONAIRE,␉"AMD Radeon", kNull },␊ |
213 | //␉{ 0x6651,␉0x00000000, CHIP_FAMILY_BONAIRE,␉"AMD Radeon", kNull },␊ |
214 | ␉{ 0x6658,␉0x00000000, CHIP_FAMILY_BONAIRE,␉"AMD Radeon R7 260X", kNull },␊ |
215 | ␉{ 0x665C,␉0x00000000, CHIP_FAMILY_BONAIRE,␉"AMD Radeon HD 7790",␉kFutomaki␉},␊ |
216 | ␉{ 0x665D,␉0x00000000, CHIP_FAMILY_BONAIRE,␉"AMD Radeon R9 260",␉kFutomaki␉},␊ |
217 | ␉{ 0x665F,␉0x00000000, CHIP_FAMILY_BONAIRE,␉"AMD Radeon R9 360",␉kFutomaki␉},␊ |
218 | ␊ |
219 | ␉// HAINAN␊ |
220 | ␉{ 0x6660,␉0x00000000, CHIP_FAMILY_HAINAN,␉␉"AMD Radeon HD 8670M", kNull }, // Mobile␊ |
221 | ␉{ 0x6663,␉0x00000000, CHIP_FAMILY_HAINAN,␉␉"AMD Radeon HD 8570M", kNull }, // Mobile␊ |
222 | ␉{ 0x6664,␉0x00000000, CHIP_FAMILY_HAINAN,␉␉"AMD Radeon R5 M240", kNull }, // Mobile␊ |
223 | ␉{ 0x6665,␉0x00000000, CHIP_FAMILY_HAINAN,␉␉"AMD Radeon R5 M230", kNull }, // Mobile␊ |
224 | ␉{ 0x6667,␉0x00000000, CHIP_FAMILY_HAINAN,␉␉"AMD Radeon R5 M230", kNull }, // Mobile␊ |
225 | ␉{ 0x666F,␉0x00000000, CHIP_FAMILY_HAINAN,␉␉"AMD Radeon HD 8550M", kNull }, // Mobile␊ |
226 | ␊ |
227 | ␉// CAYMAN␊ |
228 | ␉{ 0x6701,␉0x00000000, CHIP_FAMILY_CAYMAN,␉"AMD Radeon HD 6xxx Series",␉kLotus␉␉},␊ |
229 | ␉{ 0x6702,␉0x00000000, CHIP_FAMILY_CAYMAN,␉"AMD Radeon HD 6xxx Series",␉kLotus␉␉},␊ |
230 | ␉{ 0x6703,␉0x00000000, CHIP_FAMILY_CAYMAN,␉"AMD Radeon HD 6xxx Series",␉kLotus␉␉},␊ |
231 | ␉{ 0x6704,␉0x00000000, CHIP_FAMILY_CAYMAN,␉"AMD FirePro V7900",␉kLotus␉␉},␊ |
232 | ␉{ 0x6705,␉0x00000000, CHIP_FAMILY_CAYMAN,␉"AMD Radeon HD 6xxx Series",␉kLotus␉␉},␊ |
233 | ␉{ 0x6706,␉0x00000000, CHIP_FAMILY_CAYMAN,␉"AMD Radeon HD 6xxx Series",␉kLotus␉␉},␊ |
234 | ␉{ 0x6707,␉0x00000000, CHIP_FAMILY_CAYMAN,␉"AMD Radeon HD 6xxx Series",␉kLotus␉␉},␊ |
235 | ␉{ 0x6708,␉0x00000000, CHIP_FAMILY_CAYMAN,␉"AMD FirePro V5900",␉kLotus␉␉},␊ |
236 | ␉{ 0x6709,␉0x00000000, CHIP_FAMILY_CAYMAN,␉"AMD Radeon HD 6xxx Series",␉kLotus␉␉},␊ |
237 | ␉{ 0x6718,␉0x00000000, CHIP_FAMILY_CAYMAN,␉"AMD Radeon HD 6970 Series",␉kLotus␉␉},␊ |
238 | ␉{ 0x6719,␉0x00000000, CHIP_FAMILY_CAYMAN,␉"AMD Radeon HD 6950 Series",␉kLotus␉␉},␊ |
239 | ␉{ 0x671C,␉0x00000000, CHIP_FAMILY_CAYMAN,␉"AMD Radeon HD 6990 Series",␉kLotus␉␉},␊ |
240 | ␉{ 0x671D,␉0x00000000, CHIP_FAMILY_CAYMAN,␉"AMD Radeon HD 6950 Series",␉kLotus␉␉},␊ |
241 | ␉{ 0x671F,␉0x00000000, CHIP_FAMILY_CAYMAN,␉"AMD Radeon HD 6930 Series",␉kLotus␉␉},␊ |
242 | ␊ |
243 | ␉// BARTS␊ |
244 | ␉{ 0x6720,␉0x00000000, CHIP_FAMILY_BARTS,␉"AMD Radeon HD 6970M Series",␉kFanwort␉},␊ |
245 | ␉{ 0x6722,␉0x00000000, CHIP_FAMILY_BARTS,␉"AMD Radeon HD 6900M Series",␉kFanwort␉},␊ |
246 | ␉{ 0x6729,␉0x00000000, CHIP_FAMILY_BARTS,␉"AMD Radeon HD 6900M Series",␉kFanwort␉},␊ |
247 | ␉{ 0x6738,␉0x00000000, CHIP_FAMILY_BARTS,␉"AMD Radeon HD 6870 Series",␉kDuckweed␉},␊ |
248 | ␉{ 0x6739,␉0x00000000, CHIP_FAMILY_BARTS,␉"AMD Radeon HD 6850 X2",␉kDuckweed␉},␊ |
249 | ␉{ 0x673E,␉0x00000000, CHIP_FAMILY_BARTS,␉"AMD Radeon HD 6790 Series",␉kDuckweed␉},␊ |
250 | ␊ |
251 | ␉// TURKS␊ |
252 | ␉{ 0x6740,␉0x00000000, CHIP_FAMILY_TURKS,␉"AMD Radeon HD 6770M Series",␉kCattail␉},␊ |
253 | ␉{ 0x6741,␉0x00000000, CHIP_FAMILY_TURKS,␉"AMD Radeon HD 6750M",␉kCattail␉},␊ |
254 | ␉{ 0x6742,␉0x00000000, CHIP_FAMILY_TURKS,␉"AMD Radeon HD 7500/7600",␉kCattail␉},␊ |
255 | ␉{ 0x6745,␉0x00000000, CHIP_FAMILY_TURKS,␉"AMD Radeon HD 6600M Series",␉kCattail␉},␊ |
256 | ␉{ 0x6749,␉0x00000000, CHIP_FAMILY_TURKS,␉"ATI Radeon FirePro V4900",␉kPithecia␉},␊ |
257 | ␉{ 0x674A,␉0x00000000, CHIP_FAMILY_TURKS,␉"AMD FirePro V3900",␉kPithecia␉},␊ |
258 | ␉{ 0x6750,␉0x00000000, CHIP_FAMILY_TURKS,␉"AMD Radeon HD 6670 Series",␉kPithecia␉},␊ |
259 | ␉{ 0x6758,␉0x00000000, CHIP_FAMILY_TURKS,␉"AMD Radeon HD 6670 Series",␉kPithecia␉},␊ |
260 | ␉{ 0x6759,␉0x00000000, CHIP_FAMILY_TURKS,␉"AMD Radeon HD 6570 Series",␉kPithecia␉},␊ |
261 | ␉{ 0x675B,␉0x00000000, CHIP_FAMILY_TURKS,␉"AMD Radeon HD 7600 Series",␉kPithecia␉},␊ |
262 | ␉{ 0x675D,␉0x00000000, CHIP_FAMILY_TURKS,␉"AMD Radeon HD 7570M Series",␉kCattail␉},␊ |
263 | ␉{ 0x675F,␉0x00000000, CHIP_FAMILY_TURKS,␉"AMD Radeon HD 6510 Series",␉kPithecia␉},␊ |
264 | ␊ |
265 | ␉// CAICOS␊ |
266 | ␉{ 0x6760,␉0x00000000, CHIP_FAMILY_CAICOS,␉"AMD Radeon HD 6470M Series",␉kHydrilla␉},␊ |
267 | ␉{ 0x6761,␉0x00000000, CHIP_FAMILY_CAICOS,␉"AMD Radeon HD 6430M Series",␉kHydrilla␉},␊ |
268 | ␉{ 0x6763,␉0x00000000, CHIP_FAMILY_CAICOS,␉"AMD Radeon E6460 Series",␉kHydrilla␉},␊ |
269 | ␉{ 0x6768,␉0x00000000, CHIP_FAMILY_CAICOS,␉"AMD Radeon HD 6400M Series",␉kHydrilla␉},␊ |
270 | ␉{ 0x6770,␉0x00000000, CHIP_FAMILY_CAICOS,␉"AMD Radeon HD 6400 Series",␉kBulrushes␉},␊ |
271 | ␉{ 0x6771,␉0x00000000, CHIP_FAMILY_CAICOS, "AMD Radeon HD 8490",␉␉kBulrushes␉},␊ |
272 | ␉{ 0x6772,␉0x00000000, CHIP_FAMILY_CAICOS,␉"AMD Radeon HD 7400A Series",␉kBulrushes␉},␊ |
273 | ␉{ 0x6778,␉0x00000000, CHIP_FAMILY_CAICOS,␉"AMD Radeon HD 7470",␉kBulrushes␉},␊ |
274 | ␉{ 0x6779,␉0x00000000, CHIP_FAMILY_CAICOS,␉"AMD Radeon HD 6450/7450/8450/R5 230",␉kBulrushes␉},␊ |
275 | ␉{ 0x677B,␉0x00000000, CHIP_FAMILY_CAICOS,␉"AMD Radeon HD 7400 Series",␉kBulrushes␉},␊ |
276 | ␊ |
277 | ␉// TAHITI␊ |
278 | ␉//Framebuffers: Aji - 4 Desktop, Buri - 4 Mobile, Chutoro - 5 Mobile, Dashimaki - 4, IkuraS - HMDI␊ |
279 | ␉// Ebi - 5 Mobile, Gari - 5 M, Futomaki - 4 D, Hamachi - 4 D, OPM - 6 Server, Ikura - 6␊ |
280 | ␉{ 0x6780,␉0x00000000, CHIP_FAMILY_TAHITI,␉"AMD FirePro W9000",␉kIkuraS␉␉},␊ |
281 | ␉{ 0x6784,␉0x00000000, CHIP_FAMILY_TAHITI,␉"AMD Radeon HD 7900 Series",␉kFutomaki␉},␊ |
282 | ␉{ 0x6788,␉0x00000000, CHIP_FAMILY_TAHITI,␉"AMD Radeon HD 7900 Series",␉kFutomaki␉},␊ |
283 | ␉{ 0x678A,␉0x00000000, CHIP_FAMILY_TAHITI,␉"AMD FirePro W8000",␉␉kFutomaki␉},␊ |
284 | ␉{ 0x6790,␉0x00000000, CHIP_FAMILY_TAHITI,␉"AMD Radeon HD 7970"␉,␉kFutomaki␉},␊ |
285 | ␉{ 0x6791,␉0x00000000, CHIP_FAMILY_TAHITI,␉"AMD Radeon HD 7900 Series",␉kFutomaki␉},␊ |
286 | ␉{ 0x6792,␉0x00000000, CHIP_FAMILY_TAHITI,␉"AMD Radeon HD 7900 Series",␉kFutomaki␉},␊ |
287 | ␉{ 0x6798,␉0x00000000, CHIP_FAMILY_TAHITI,␉"AMD Radeon HD 7970X/8970/R9 280X",␉kFutomaki␉},␊ |
288 | ␉{ 0x6799,␉0x00000000, CHIP_FAMILY_TAHITI,␉"AMD Radeon HD 7990 Series",␉kAji␉␉},␊ |
289 | ␉{ 0x679A,␉0x00000000, CHIP_FAMILY_TAHITI,␉"AMD Radeon HD 7950/8950/R9 280",␉kFutomaki␉},␊ |
290 | ␉{ 0x679B,␉0x00000000, CHIP_FAMILY_TAHITI,␉"AMD Radeon HD 7990 Series",␉kChutoro␉},␊ |
291 | ␉{ 0x679E,␉0x00000000, CHIP_FAMILY_TAHITI,␉"AMD Radeon HD 7870 XT",␉kFutomaki␉},␊ |
292 | ␉{ 0x679F,␉0x00000000, CHIP_FAMILY_TAHITI,␉"AMD Radeon HD 7950 Series",␉kFutomaki␉},␊ |
293 | ␊ |
294 | ␉// HAWAII␊ |
295 | //␉{ 0x67A0,␉0x00000000, CHIP_FAMILY_HAWAII,␉"AMD Radeon", kFutomaki␉},␊ |
296 | //␉{ 0x67A1,␉0x00000000, CHIP_FAMILY_HAWAII,␉"AMD Radeon", kFutomaki␉},␊ |
297 | //␉{ 0x67A2,␉0x00000000, CHIP_FAMILY_HAWAII,␉"AMD Radeon", kFutomaki␉},␊ |
298 | //␉{ 0x67A8,␉0x00000000, CHIP_FAMILY_HAWAII,␉"AMD Radeon", kFutomaki␉},␊ |
299 | //␉{ 0x67A9,␉0x00000000, CHIP_FAMILY_HAWAII,␉"AMD Radeon", kFutomaki␉},␊ |
300 | //␉{ 0x67AA,␉0x00000000, CHIP_FAMILY_HAWAII,␉"AMD Radeon", kFutomaki␉},␊ |
301 | ␉{ 0x67B0,␉0x00000000, CHIP_FAMILY_HAWAII,␉"AMD Radeon R9 290X", kBaladi␉},␊ |
302 | ␉{ 0x67B1,␉0x00000000, CHIP_FAMILY_HAWAII,␉"AMD Radeon R9 290/390", kBaladi␉},␊ |
303 | //␉{ 0x67B8,␉0x00000000, CHIP_FAMILY_HAWAII,␉"AMD Radeon", kFutomaki␉},␊ |
304 | ␉{ 0x67B9,␉0x00000000, CHIP_FAMILY_HAWAII,␉"AMD Radeon R9 200", kFutomaki␉},␊ |
305 | //␉{ 0x67BA,␉0x00000000, CHIP_FAMILY_HAWAII,␉"AMD Radeon", kFutomaki␉},␊ |
306 | //␉{ 0x67BE,␉0x00000000, CHIP_FAMILY_HAWAII,␉"AMD Radeon", kFutomaki␉},␊ |
307 | ␊ |
308 | ␉// Polaris 10␊ |
309 | ␉{ 0x67C0, 0x00000000, CHIP_FAMILY_ELLESMERE, "AMD Radeon Polaris 10", kNull },␊ |
310 | ␉{ 0x67C1, 0x00000000, CHIP_FAMILY_ELLESMERE, "AMD Radeon Polaris 10", kNull },␊ |
311 | ␉{ 0x67C2, 0x00000000, CHIP_FAMILY_ELLESMERE, "AMD Radeon Polaris 10", kNull },␊ |
312 | ␉{ 0x67C4, 0x00000000, CHIP_FAMILY_ELLESMERE, "AMD Radeon Polaris 10", kNull },␊ |
313 | ␉{ 0x67C7, 0x00000000, CHIP_FAMILY_ELLESMERE, "AMD Radeon Polaris 10", kNull },␊ |
314 | ␉{ 0x67C8, 0x00000000, CHIP_FAMILY_ELLESMERE, "AMD Radeon Polaris 10", kNull },␊ |
315 | ␉{ 0x67C9, 0x00000000, CHIP_FAMILY_ELLESMERE, "AMD Radeon Polaris 10", kNull },␊ |
316 | ␉{ 0x67CA, 0x00000000, CHIP_FAMILY_ELLESMERE, "AMD Radeon Polaris 10", kNull },␊ |
317 | ␉{ 0x67CC, 0x00000000, CHIP_FAMILY_ELLESMERE, "AMD Radeon Polaris 10", kNull },␊ |
318 | ␉{ 0x67CF, 0x00000000, CHIP_FAMILY_ELLESMERE, "AMD Radeon Polaris 10", kNull },␊ |
319 | ␉{ 0x67DF, 0x00000000, CHIP_FAMILY_ELLESMERE, "AMD Radeon RX480", kBaladi },␊ |
320 | ␊ |
321 | ␉// Polaris 11␊ |
322 | ␉{ 0x67E0, 0x00000000, CHIP_FAMILY_BAFFIN, "AMD Radeon RX460", kAcre },␊ |
323 | ␉{ 0x67E1, 0x00000000, CHIP_FAMILY_BAFFIN, "AMD Radeon Polaris 11", kNull },␊ |
324 | ␉{ 0x67E3, 0x00000000, CHIP_FAMILY_BAFFIN, "AMD Radeon Polaris 11", kNull },␊ |
325 | ␉{ 0x67E7, 0x00000000, CHIP_FAMILY_BAFFIN, "AMD Radeon Polaris 11", kNull },␊ |
326 | ␉{ 0x67E8, 0x00000000, CHIP_FAMILY_BAFFIN, "AMD Radeon Polaris 11", kNull },␊ |
327 | ␉{ 0x67E9, 0x00000000, CHIP_FAMILY_BAFFIN, "AMD Radeon Polaris 11", kNull },␊ |
328 | ␉{ 0x67EB, 0x00000000, CHIP_FAMILY_BAFFIN, "AMD Radeon Polaris 11", kNull },␊ |
329 | ␉{ 0x67EF, 0x00000000, CHIP_FAMILY_BAFFIN, "AMD Radeon RX460", kAcre },␊ |
330 | ␉{ 0x67FF, 0x00000000, CHIP_FAMILY_BAFFIN, "AMD Radeon RX560", kNull },␊ |
331 | ␊ |
332 | ␉// Polaris 12␊ |
333 | ␉{ 0x6980, 0x00000000, CHIP_FAMILY_GREENLAND, "AMD Radeon Polaris 12", kNull },␊ |
334 | ␉{ 0x6981, 0x00000000, CHIP_FAMILY_GREENLAND, "AMD Radeon Polaris 12", kNull },␊ |
335 | ␉{ 0x6985, 0x00000000, CHIP_FAMILY_GREENLAND, "AMD Radeon Polaris 12", kNull },␊ |
336 | ␉{ 0x6986, 0x00000000, CHIP_FAMILY_GREENLAND, "AMD Radeon Polaris 12", kNull },␊ |
337 | ␉{ 0x6987, 0x00000000, CHIP_FAMILY_GREENLAND, "AMD Radeon Polaris 12", kNull },␊ |
338 | ␉{ 0x6995, 0x00000000, CHIP_FAMILY_GREENLAND, "AMD Radeon Polaris 12", kNull },␊ |
339 | ␉{ 0x699F, 0x00000000, CHIP_FAMILY_GREENLAND, "AMD Radeon RX550", kNull },␊ |
340 | ␊ |
341 | ␉// Vega 10␊ |
342 | ␉{ 0x6860,␉0x00000000, CHIP_FAMILY_VEGA10,␉␉"AMD Radeon Vega 10", kNull },␊ |
343 | ␉{ 0x6861,␉0x00000000, CHIP_FAMILY_VEGA10,␉␉"AMD Radeon Vega 10", kNull },␊ |
344 | ␉{ 0x6862,␉0x00000000, CHIP_FAMILY_VEGA10,␉␉"AMD Radeon Vega 10", kNull },␊ |
345 | ␉{ 0x6863,␉0x00000000, CHIP_FAMILY_VEGA10,␉␉"AMD Radeon Vega 10", kNull },␊ |
346 | ␉{ 0x6864,␉0x00000000, CHIP_FAMILY_VEGA10,␉␉"AMD Radeon Vega 10", kNull },␊ |
347 | ␉{ 0x6867,␉0x00000000, CHIP_FAMILY_VEGA10,␉␉"AMD Radeon Vega 10", kNull },␊ |
348 | ␉{ 0x6868,␉0x00000000, CHIP_FAMILY_VEGA10,␉␉"AMD Radeon Vega 10", kNull },␊ |
349 | ␉{ 0x686C,␉0x00000000, CHIP_FAMILY_VEGA10,␉␉"AMD Radeon Vega 10", kNull },␊ |
350 | ␉{ 0x687F,␉0x00000000, CHIP_FAMILY_VEGA10,␉␉"AMD Radeon Vega 10", kNull },␊ |
351 | ␊ |
352 | ␉// PITCAIRN␊ |
353 | ␉{ 0x6800,␉0x00000000, CHIP_FAMILY_PITCAIRN,␉"AMD Radeon HD 7970M",␉kBuri␉}, // Mobile␊ |
354 | ␉{ 0x6801,␉0x00000000, CHIP_FAMILY_PITCAIRN,␉"AMD Radeon HD 8970M Series",␉kFutomaki␉}, // Mobile␊ |
355 | //␉{ 0x6802,␉0x00000000, CHIP_FAMILY_PITCAIRN,␉"AMD Radeon HD ???M Series",␉kFutomaki␉}, // Mobile␊ |
356 | ␉{ 0x6806,␉0x00000000, CHIP_FAMILY_PITCAIRN,␉"AMD Radeon HD 7600 Series",␉kFutomaki␉},␊ |
357 | ␉{ 0x6808,␉0x00000000, CHIP_FAMILY_PITCAIRN,␉"AMD Radeon HD 7600 Series",␉kFutomaki␉},␊ |
358 | ␉{ 0x6809,␉0x00000000, CHIP_FAMILY_PITCAIRN,␉"ATI FirePro V",␉kNull␉␉},␊ |
359 | ␉{ 0x6810,␉0x00000000, CHIP_FAMILY_PITCAIRN,␉"AMD Radeon R9 270X",␉kNamako␉␉},␊ |
360 | ␉{ 0x6811,␉0x00000000, CHIP_FAMILY_PITCAIRN,␉"AMD Radeon R9 270",␉kFutomaki␉␉},␊ |
361 | //␉{ 0x6816,␉0x00000000, CHIP_FAMILY_PITCAIRN,␉"AMD Radeon",␉kFutomaki␉␉},␊ |
362 | //␉{ 0x6817,␉0x00000000, CHIP_FAMILY_PITCAIRN,␉"AMD Radeon",␉kFutomaki␉␉},␊ |
363 | ␉{ 0x6818,␉0x00000000, CHIP_FAMILY_PITCAIRN,␉"AMD Radeon HD 7870 Series",␉kFutomaki␉},␊ |
364 | ␉{ 0x6819,␉0x00000000, CHIP_FAMILY_PITCAIRN,␉"AMD Radeon HD 7850 Series",␉kFutomaki␉},␊ |
365 | ␊ |
366 | ␉// VERDE␊ |
367 | ␉{ 0x6820,␉0x00000000, CHIP_FAMILY_VERDE,␉"AMD Radeon HD 7700 Series",␉kBuri␉}, // Mobile␊ |
368 | ␉{ 0x6821,␉0x00000000, CHIP_FAMILY_VERDE,␉"AMD Radeon HD 7700 Series",␉kBuri␉}, // Mobile␊ |
369 | ␉{ 0x6822,␉0x00000000, CHIP_FAMILY_VERDE,␉"AMD Radeon E8860",␉kBuri␉}, // Mobile␊ |
370 | ␉{ 0x6823,␉0x00000000, CHIP_FAMILY_VERDE,␉"AMD Radeon HD 8800M Series",␉kBuri␉}, // Mobile␊ |
371 | //␉{ 0x6824,␉0x00000000, CHIP_FAMILY_VERDE,␉"AMD Radeon HD 7700M Series",␉kBuri␉}, // Mobile␊ |
372 | ␉{ 0x6825,␉0x00000000, CHIP_FAMILY_VERDE,␉"AMD Radeon HD 7800M Series",␉kPondweed␉}, // Mobile␊ |
373 | ␉{ 0x6826,␉0x00000000, CHIP_FAMILY_VERDE,␉"AMD Radeon HD 7700 Series",␉kBuri␉}, // Mobile␊ |
374 | ␉{ 0x6827,␉0x00000000, CHIP_FAMILY_VERDE,␉"AMD Radeon HD 7800M Series",␉kPondweed␉}, // Mobile␊ |
375 | ␉{ 0x6828,␉0x00000000, CHIP_FAMILY_VERDE,␉"ATI FirePro V",␉kBuri␉},␊ |
376 | //␉{ 0x6829,␉0x00000000, CHIP_FAMILY_VERDE,␉"AMD Radeon HD ??? Series",␉kBuri␉},␊ |
377 | //␉{ 0x682A,␉0x00000000, CHIP_FAMILY_VERDE,␉"AMD Radeon HD",␉kBuri␉}, // Mobile␊ |
378 | ␉{ 0x682B,␉0x00000000, CHIP_FAMILY_VERDE,␉"AMD Radeon HD 8800M Series",␉kBuri␉}, // Mobile␊ |
379 | ␉{ 0x682D,␉0x00000000, CHIP_FAMILY_VERDE,␉"AMD Radeon HD 7700 Series",␉kBuri␉}, // Mobile␊ |
380 | ␉{ 0x682F,␉0x00000000, CHIP_FAMILY_VERDE,␉"AMD Radeon HD 7730 Series",␉kBuri␉}, // Mobile␊ |
381 | ␉{ 0x6830,␉0x00000000, CHIP_FAMILY_VERDE,␉"AMD Radeon HD 7800M Series",␉kBuri␉}, // Mobile␊ |
382 | ␉{ 0x6831,␉0x00000000, CHIP_FAMILY_VERDE,␉"AMD Radeon HD 7700 Series",␉kBuri␉}, // Mobile␊ |
383 | ␉{ 0x6835,␉0x00000000, CHIP_FAMILY_VERDE,␉"AMD Radeon HD R7 Series",␉kBuri␉},␊ |
384 | ␉{ 0x6837,␉0x00000000, CHIP_FAMILY_VERDE,␉"AMD Radeon HD 7730 Series",␉kFutomaki␉},␊ |
385 | ␉{ 0x6838,␉0x00000000, CHIP_FAMILY_VERDE,␉"AMD Radeon HD 7700 Series",␉kFutomaki␉},␊ |
386 | ␉{ 0x6839,␉0x00000000, CHIP_FAMILY_VERDE,␉"AMD Radeon HD 7700 Series",␉kFutomaki␉},␊ |
387 | ␉{ 0x683B,␉0x00000000, CHIP_FAMILY_VERDE,␉"AMD Radeon HD 7700 Series",␉kFutomaki␉},␊ |
388 | ␉{ 0x683D,␉0x00000000, CHIP_FAMILY_VERDE,␉"AMD Radeon HD 7770 Series",␉kFutomaki␉}, //R7 250X␊ |
389 | ␉{ 0x683F,␉0x00000000, CHIP_FAMILY_VERDE,␉"AMD Radeon HD 7750 Series",␉kFutomaki␉},␊ |
390 | ␊ |
391 | ␉// TURKS␊ |
392 | ␉{ 0x6840,␉0x00000000, CHIP_FAMILY_TURKS,␉"AMD Radeon HD 7670M Series",␉kPondweed␉}, // Mobile␊ |
393 | ␉{ 0x6841,␉0x00000000, CHIP_FAMILY_TURKS,␉"AMD Radeon HD 7650M Series",␉kPondweed␉}, // Mobile␊ |
394 | ␉{ 0x6842,␉0x00000000, CHIP_FAMILY_TURKS,␉"AMD Radeon HD 7600M Series",␉kPondweed␉}, // Mobile␊ |
395 | ␉{ 0x6843,␉0x00000000, CHIP_FAMILY_TURKS,␉"AMD Radeon HD 7670M Series",␉kPondweed␉}, // Mobile␊ |
396 | ␉{ 0x6849,␉0x00000000, CHIP_FAMILY_TURKS,␉"AMD Radeon HD 7600M Series",␉kPondweed␉},␊ |
397 | ␊ |
398 | ␉// PITCAIRN␊ |
399 | //␉{ 0x684C,␉0x00000000, CHIP_FAMILY_PITCAIRN,␉"AMD Radeon HD",␉kNull␉},␊ |
400 | ␊ |
401 | ␉// TURKS␊ |
402 | ␉{ 0x6850,␉0x00000000, CHIP_FAMILY_TURKS,␉"AMD Radeon HD 7600M Series",␉kPondweed },␊ |
403 | ␉{ 0x6858,␉0x00000000, CHIP_FAMILY_TURKS,␉"AMD Radeon HD 7400 Series",␉kPondweed },␊ |
404 | ␉{ 0x6859,␉0x00000000, CHIP_FAMILY_TURKS,␉"AMD Radeon HD 7600M Series",␉kPondweed },␊ |
405 | ␊ |
406 | ␉// CYPRESS␊ |
407 | //␉{ 0x6880,␉0x00000000, CHIP_FAMILY_CYPRESS,␉"ATI Radeon HD",␉kNull␉}, // Mobile␊ |
408 | ␉{ 0x6888,␉0x00000000, CHIP_FAMILY_CYPRESS,␉"ATI FirePro V8800",␉kNull␉},␊ |
409 | ␉{ 0x6889,␉0x00000000, CHIP_FAMILY_CYPRESS,␉"ATI FirePro V7800",␉kNull␉},␊ |
410 | ␉{ 0x688A,␉0x00000000, CHIP_FAMILY_CYPRESS,␉"ATI FirePro V9800",␉kNull␉},␊ |
411 | ␉{ 0x688C,␉0x00000000, CHIP_FAMILY_CYPRESS,␉"AMD FireStream 9370",␉kZonalis␉},␊ |
412 | ␉{ 0x688D,␉0x00000000, CHIP_FAMILY_CYPRESS,␉"AMD FireStream 9350",␉kZonalis␉},␊ |
413 | ␉{ 0x6898,␉0x00000000, CHIP_FAMILY_CYPRESS,␉"ATI Radeon HD 5870 Series",␉kUakari␉},␊ |
414 | ␉{ 0x6899,␉0x00000000, CHIP_FAMILY_CYPRESS,␉"ATI Radeon HD 5850 Series",␉kUakari␉},␊ |
415 | ␉{ 0x689B,␉0x00000000, CHIP_FAMILY_CYPRESS,␉"AMD Radeon HD 6800 Series",␉kNull␉},␊ |
416 | ␊ |
417 | ␉// HEMLOCK␊ |
418 | ␉{ 0x689C,␉0x00000000, CHIP_FAMILY_HEMLOCK,␉"ATI Radeon HD 5970 Series",␉kUakari␉},␊ |
419 | ␉{ 0x689D,␉0x00000000, CHIP_FAMILY_HEMLOCK,␉"ATI Radeon HD 5900 Series",␉kUakari␉},␊ |
420 | ␊ |
421 | ␉// CYPRESS␊ |
422 | ␉{ 0x689E,␉0x00000000, CHIP_FAMILY_CYPRESS,␉"ATI Radeon HD 5830 Series",␉kUakari␉},␊ |
423 | ␊ |
424 | ␉// JUNIPER␊ |
425 | ␉{ 0x68A0,␉0x00000000, CHIP_FAMILY_JUNIPER,␉"ATI Radeon HD 5770 Series",␉kHoolock␉}, // Mobile␊ |
426 | ␉{ 0x68A1,␉0x00000000, CHIP_FAMILY_JUNIPER,␉"ATI Radeon HD 5850 Series",␉kHoolock␉}, // Mobile␊ |
427 | ␉{ 0x68A8,␉0x00000000, CHIP_FAMILY_JUNIPER,␉"ATI Radeon HD 6850M",␉␉kHoolock␉},␊ |
428 | ␉{ 0x68A9,␉0x00000000, CHIP_FAMILY_JUNIPER,␉"ATI FirePro V5800 (FireGL)",␉kHoolock␉},␊ |
429 | ␉{ 0x68B0,␉0x00000000, CHIP_FAMILY_JUNIPER,␉"ATI Radeon HD 5770 Series",␉kHoolock␉}, // Mobile␊ |
430 | ␉{ 0x68B1,␉0x00000000, CHIP_FAMILY_JUNIPER,␉"ATI Radeon HD 5770 Series",␉kHoolock␉},␊ |
431 | ␉{ 0x68B8,␉0x00000000, CHIP_FAMILY_JUNIPER,␉"ATI Radeon HD 5770 Series",␉kVervet␉},␊ |
432 | ␉{ 0x68B9,␉0x00000000, CHIP_FAMILY_JUNIPER,␉"ATI Radeon HD 5700 Series",␉kHoolock␉},␊ |
433 | ␉{ 0x68BA,␉0x00000000, CHIP_FAMILY_JUNIPER,␉"ATI Radeon HD 6770 Series",␉kHoolock␉},␊ |
434 | ␉{ 0x68BC,␉0x00000000, CHIP_FAMILY_JUNIPER,␉"AMD FireStream 9370",␉␉kHoolock␉},␊ |
435 | ␉{ 0x68BD,␉0x00000000, CHIP_FAMILY_JUNIPER,␉"AMD FireStream 9350",␉␉kHoolock␉},␊ |
436 | ␉{ 0x68BE,␉0x00000000, CHIP_FAMILY_JUNIPER,␉"ATI Radeon HD 5750 Series",␉kHoolock␉},␊ |
437 | ␉{ 0x68BF,␉0x00000000, CHIP_FAMILY_JUNIPER,␉"ATI Radeon HD 6750 Series",␉kHoolock␉},␊ |
438 | ␊ |
439 | ␉// REDWOOD␊ |
440 | ␉{ 0x68C0,␉0x00000000, CHIP_FAMILY_REDWOOD,␉"ATI Radeon HD 5730 Series",␉kGalago␉}, // Mobile␊ |
441 | ␉{ 0x68C1,␉0x00000000, CHIP_FAMILY_REDWOOD,␉"ATI Radeon HD 5650 Series",␉kGalago␉}, // Mobile␊ |
442 | ␉{ 0x68C7,␉0x00000000, CHIP_FAMILY_REDWOOD,␉"ATI Mobility Radeon HD 5570",␉kGalago␉}, // Mobile␊ |
443 | ␉{ 0x68C8,␉0x00000000, CHIP_FAMILY_REDWOOD,␉"ATI FirePro v4800", kBaboon␉},␊ |
444 | ␉{ 0x68C9,␉0x00000000, CHIP_FAMILY_REDWOOD,␉"FirePro 3D V3800",␉kBaboon␉},␊ |
445 | ␉{ 0x68D8,␉0x00000000, CHIP_FAMILY_REDWOOD,␉"ATI Radeon HD 5670 Series",␉kBaboon␉},␊ |
446 | ␉{ 0x68D9,␉0x00000000, CHIP_FAMILY_REDWOOD,␉"ATI Radeon HD 5570 Series",␉kBaboon␉},␊ |
447 | ␉{ 0x68DA,␉0x00000000, CHIP_FAMILY_REDWOOD,␉"ATI Radeon HD 5500 Series",␉kBaboon␉},␊ |
448 | ␉{ 0x68DE,␉0x00000000, CHIP_FAMILY_REDWOOD,␉"ATI Radeon HD 5000 Series",␉kNull␉},␊ |
449 | ␊ |
450 | ␉// CEDAR␊ |
451 | ␉{ 0x68E0,␉0x00000000, CHIP_FAMILY_CEDAR,␉"ATI Radeon HD 5470 Series",␉kGalago␉␉},␊ |
452 | ␉{ 0x68E1,␉0x00000000, CHIP_FAMILY_CEDAR,␉"AMD Radeon HD 6230/6350/8350",␉␉kGalago␉␉},␊ |
453 | ␉{ 0x68E4,␉0x00000000, CHIP_FAMILY_CEDAR,␉"ATI Radeon HD 6370M Series",␉kGalago␉␉},␊ |
454 | ␉{ 0x68E5,␉0x00000000, CHIP_FAMILY_CEDAR,␉"ATI Radeon HD 6300M Series",␉kGalago␉␉},␊ |
455 | //␉{ 0x68E8,␉0x00000000, CHIP_FAMILY_CEDAR,␉"ATI Radeon HD ??? Series",␉kNull␉␉},␊ |
456 | //␉{ 0x68E9,␉0x00000000, CHIP_FAMILY_CEDAR,␉"ATI Radeon HD ??? Series",␉kNull␉␉},␊ |
457 | ␉{ 0x68F1,␉0x00000000, CHIP_FAMILY_CEDAR,␉"AMD FirePro 2460",␉kEulemur␉},␊ |
458 | ␉{ 0x68F2,␉0x00000000, CHIP_FAMILY_CEDAR,␉"AMD FirePro 2270",␉kEulemur␉},␊ |
459 | //␉{ 0x68F8,␉0x00000000, CHIP_FAMILY_CEDAR,␉"ATI Radeon HD ??? Series",␉kNull␉␉},␊ |
460 | ␉{ 0x68F9,␉0x00000000, CHIP_FAMILY_CEDAR,␉"ATI Radeon HD 5450 Series",␉kEulemur␉},␊ |
461 | ␉{ 0x68FA,␉0x00000000, CHIP_FAMILY_CEDAR,␉"ATI Radeon HD 7300 Series",␉kEulemur␉},␊ |
462 | //␉{ 0x68FE,␉0x00000000, CHIP_FAMILY_CEDAR,␉"ATI Radeon HD ??? Series",␉kNull␉␉},␊ |
463 | ␊ |
464 | ␉// ␊ |
465 | ␉{ 0x6900,␉0x00000000, CHIP_FAMILY_TOPAZ,␉␉"ATI Radeon R7 M260/M265", kExmoor␉},␊ |
466 | ␉{ 0x6901,␉0x00000000, CHIP_FAMILY_TOPAZ,␉␉"ATI Radeon R5 M255", kExmoor␉},␊ |
467 | ␉{ 0x6920,␉0x00000000, CHIP_FAMILY_AMETHYST,␉"ATI Radeon R9 M395X", kLabrador␉},␊ |
468 | ␉{ 0x6921,␉0x00000000, CHIP_FAMILY_AMETHYST,␉"ATI Radeon R9 M295X", kExmoor␉},␊ |
469 | ␉{ 0x692B,␉0x00000000, CHIP_FAMILY_TONGA,␉␉"ATI Firepro W7100", kBaladi␉},␊ |
470 | ␉{ 0x6938,␉0x00000000, CHIP_FAMILY_AMETHYST,␉"ATI Radeon R9 M295X", kExmoor␉},␊ |
471 | ␉{ 0x6939,␉0x00000000, CHIP_FAMILY_TONGA,␉␉"ATI Radeon R9 285", kBaladi␉},␊ |
472 | ␊ |
473 | ␉// R520␊ |
474 | ␉{ 0x7100, 0x00000000, CHIP_FAMILY_R520, "ATI Radeon HD Desktop ",␉kNull␉␉},␊ |
475 | ␉{ 0x7101, 0x00000000, CHIP_FAMILY_R520, "ATI Radeon HD Mobile ",␉kNull␉␉},␊ |
476 | ␉{ 0x7102, 0x00000000, CHIP_FAMILY_R520, "ATI Radeon HD Mobile ",␉kNull␉␉},␊ |
477 | ␉{ 0x7103, 0x00000000, CHIP_FAMILY_R520, "ATI Radeon HD Mobile ",␉kNull␉␉},␊ |
478 | ␉{ 0x7104, 0x00000000, CHIP_FAMILY_R520, "ATI Radeon HD Desktop ",␉kNull␉␉},␊ |
479 | ␉{ 0x7105, 0x00000000, CHIP_FAMILY_R520, "ATI Radeon HD Desktop ",␉kNull␉␉},␊ |
480 | ␉{ 0x7106, 0x00000000, CHIP_FAMILY_R520, "ATI Radeon HD Mobile ",␉kNull␉␉},␊ |
481 | ␉{ 0x7108, 0x00000000, CHIP_FAMILY_R520, "ATI Radeon HD Desktop ",␉kNull␉␉},␊ |
482 | ␉{ 0x7109, 0x00000000, CHIP_FAMILY_R520, "ATI Radeon HD Desktop ",␉kNull␉␉},␊ |
483 | ␉{ 0x710A, 0x00000000, CHIP_FAMILY_R520, "ATI Radeon HD Desktop ",␉kNull␉␉},␊ |
484 | ␉{ 0x710B, 0x00000000, CHIP_FAMILY_R520, "ATI Radeon HD Desktop ",␉kNull␉␉},␊ |
485 | ␉{ 0x710C, 0x00000000, CHIP_FAMILY_R520, "ATI Radeon HD Desktop ",␉kNull␉␉},␊ |
486 | ␉{ 0x710E, 0x00000000, CHIP_FAMILY_R520, "ATI Radeon HD Desktop ",␉kNull␉␉},␊ |
487 | ␉{ 0x710F, 0x00000000, CHIP_FAMILY_R520, "ATI Radeon HD Desktop ",␉kNull␉␉},␊ |
488 | ␊ |
489 | ␉// RV515␊ |
490 | ␉{ 0x7140, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Desktop ",␉kCaretta␉},␊ |
491 | ␉{ 0x7141, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Desktop ",␉kCaretta␉},␊ |
492 | ␉{ 0x7142, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Desktop ",␉kCaretta␉},␊ |
493 | ␉{ 0x7143, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Desktop ",␉kCaretta␉},␊ |
494 | ␉{ 0x7144, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Mobile ",␉kCaretta␉},␊ |
495 | ␉{ 0x7145, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Mobile ",␉kCaretta␉},␊ |
496 | ␉{ 0x7146, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Desktop ",␉kCaretta␉},␊ |
497 | ␉{ 0x7147, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Desktop ",␉kCaretta␉},␊ |
498 | ␉{ 0x7149, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Mobile ",␉kCaretta␉},␊ |
499 | ␉{ 0x714A, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Mobile ",␉kCaretta␉},␊ |
500 | ␉{ 0x714B, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Mobile ",␉kCaretta␉},␊ |
501 | ␉{ 0x714C, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Mobile ",␉kCaretta␉},␊ |
502 | ␉{ 0x714D, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Desktop ",␉kCaretta␉},␊ |
503 | ␉{ 0x714E, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Desktop ",␉kCaretta␉},␊ |
504 | ␉{ 0x714F, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Desktop ",␉kCaretta␉},␊ |
505 | ␉{ 0x7151, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Desktop ",␉kCaretta␉},␊ |
506 | ␉{ 0x7152, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Desktop ",␉kCaretta␉},␊ |
507 | ␉{ 0x7153, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Desktop ",␉kCaretta␉},␊ |
508 | ␉{ 0x715E, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Desktop ",␉kCaretta␉},␊ |
509 | ␉{ 0x715F, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Desktop ",␉kCaretta␉},␊ |
510 | ␉{ 0x7180, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Desktop ",␉kCaretta␉},␊ |
511 | ␉{ 0x7181, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Desktop ",␉kCaretta␉},␊ |
512 | ␉{ 0x7183, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Desktop ",␉kCaretta␉},␊ |
513 | ␉{ 0x7186, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Mobile ",␉kCaretta␉},␊ |
514 | ␉{ 0x7187, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD1900 ",␉kCaretta␉},␊ |
515 | ␉{ 0x7188, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD2300 Mobile ",␉kCaretta␉},␊ |
516 | ␉{ 0x718A, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Mobile ",␉kCaretta␉},␊ |
517 | ␉{ 0x718B, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Mobile ",␉kCaretta␉},␊ |
518 | ␉{ 0x718C, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Mobile ",␉kCaretta␉},␊ |
519 | ␉{ 0x718D, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Mobile ",␉kCaretta␉},␊ |
520 | ␉{ 0x718F, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Desktop ",␉kCaretta␉},␊ |
521 | ␉{ 0x7193, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Desktop ",␉kCaretta␉},␊ |
522 | ␉{ 0x7196, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Mobile ",␉kCaretta␉},␊ |
523 | ␉{ 0x719B, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Desktop ",␉kCaretta␉},␊ |
524 | ␉{ 0x719F, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Desktop ",␉kCaretta␉},␊ |
525 | ␊ |
526 | ␉// RV530␊ |
527 | ␉{ 0x71C0, 0x00000000, CHIP_FAMILY_RV530, "ATI Radeon HD Desktop ",␉kWormy␉␉},␊ |
528 | ␉{ 0x71C1, 0x00000000, CHIP_FAMILY_RV530, "ATI Radeon HD Desktop ",␉kWormy␉␉},␊ |
529 | ␉{ 0x71C2, 0x00000000, CHIP_FAMILY_RV530, "ATI Radeon HD Desktop ",␉kWormy␉␉},␊ |
530 | ␉{ 0x71C3, 0x00000000, CHIP_FAMILY_RV530, "ATI Radeon HD Desktop ",␉kWormy␉␉},␊ |
531 | ␉{ 0x71C4, 0x00000000, CHIP_FAMILY_RV530, "ATI Radeon HD Mobile ",␉kWormy␉␉},␊ |
532 | ␉{ 0x71C5, 0x00000000, CHIP_FAMILY_RV530, "ATI Radeon HD1600 Mobile ",␉kWormy␉␉},␊ |
533 | ␉{ 0x71C6, 0x00000000, CHIP_FAMILY_RV530, "ATI Radeon HD Desktop ",␉kWormy␉␉},␊ |
534 | ␉{ 0x71C7, 0x00000000, CHIP_FAMILY_RV530, "ATI Radeon HD Desktop ",␉kWormy␉␉},␊ |
535 | ␉{ 0x71CD, 0x00000000, CHIP_FAMILY_RV530, "ATI Radeon HD Desktop ",␉kWormy␉␉},␊ |
536 | ␉{ 0x71CE, 0x00000000, CHIP_FAMILY_RV530, "ATI Radeon HD Desktop ",␉kWormy␉␉},␊ |
537 | ␉{ 0x71D2, 0x00000000, CHIP_FAMILY_RV530, "ATI Radeon HD Desktop ",␉kWormy␉␉},␊ |
538 | ␉{ 0x71D4, 0x00000000, CHIP_FAMILY_RV530, "ATI Mobility FireGL V5250",␉kWormy␉␉},␊ |
539 | ␉{ 0x71D5, 0x00000000, CHIP_FAMILY_RV530, "ATI Radeon HD Mobile ",␉kWormy␉␉},␊ |
540 | ␉{ 0x71D6, 0x00000000, CHIP_FAMILY_RV530, "ATI Radeon HD Mobile ",␉kWormy␉␉},␊ |
541 | ␉{ 0x71DA, 0x00000000, CHIP_FAMILY_RV530, "ATI Radeon HD Desktop ",␉kWormy␉␉},␊ |
542 | ␉{ 0x71DE, 0x00000000, CHIP_FAMILY_RV530, "ASUS M66 ATI Radeon Mobile ",␉kWormy␉␉},␊ |
543 | ␊ |
544 | ␉// RV515␊ |
545 | ␉{ 0x7200, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Desktop ",␉kWormy␉␉},␊ |
546 | ␉{ 0x7210, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Mobile ",␉kWormy␉␉},␊ |
547 | ␉{ 0x7211, 0x00000000, CHIP_FAMILY_RV515, "ATI Radeon HD Mobile ",␉kWormy␉␉},␊ |
548 | ␊ |
549 | ␉// R580␊ |
550 | ␉{ 0x7240, 0x00000000, CHIP_FAMILY_R580, "ATI Radeon HD Desktop ",␉kAlopias␉},␊ |
551 | ␉{ 0x7243, 0x00000000, CHIP_FAMILY_R580, "ATI Radeon HD Desktop ",␉kAlopias␉},␊ |
552 | ␉{ 0x7244, 0x00000000, CHIP_FAMILY_R580, "ATI Radeon HD Desktop ",␉kAlopias␉},␊ |
553 | ␉{ 0x7245, 0x00000000, CHIP_FAMILY_R580, "ATI Radeon HD Desktop ",␉kAlopias␉},␊ |
554 | ␉{ 0x7246, 0x00000000, CHIP_FAMILY_R580, "ATI Radeon HD Desktop ",␉kAlopias␉},␊ |
555 | ␉{ 0x7247, 0x00000000, CHIP_FAMILY_R580, "ATI Radeon HD Desktop ",␉kAlopias␉},␊ |
556 | ␉{ 0x7248, 0x00000000, CHIP_FAMILY_R580, "ATI Radeon HD Desktop ",␉kAlopias␉},␊ |
557 | ␉{ 0x7249, 0x00000000, CHIP_FAMILY_R580, "ATI Radeon HD Desktop ",␉kAlopias␉},␊ |
558 | ␉{ 0x724A, 0x00000000, CHIP_FAMILY_R580, "ATI Radeon HD Desktop ",␉kAlopias␉},␊ |
559 | ␉{ 0x724B, 0x00000000, CHIP_FAMILY_R580, "ATI Radeon HD Desktop ",␉kAlopias␉},␊ |
560 | ␉{ 0x724C, 0x00000000, CHIP_FAMILY_R580, "ATI Radeon HD Desktop ",␉kAlopias␉},␊ |
561 | ␉{ 0x724D, 0x00000000, CHIP_FAMILY_R580, "ATI Radeon HD Desktop ",␉kAlopias␉},␊ |
562 | ␉{ 0x724E, 0x00000000, CHIP_FAMILY_R580, "ATI Radeon HD Desktop ",␉kAlopias␉},␊ |
563 | ␉{ 0x724F, 0x00000000, CHIP_FAMILY_R580, "ATI Radeon HD Desktop ",␉kAlopias␉},␊ |
564 | ␊ |
565 | ␉// RV570␊ |
566 | ␉{ 0x7280, 0x00000000, CHIP_FAMILY_RV570, "ATI Radeon X1950 Pro ",␉kAlopias␉},␊ |
567 | ␊ |
568 | ␉// RV560␊ |
569 | ␉{ 0x7281, 0x00000000, CHIP_FAMILY_RV560, "ATI Radeon HD Desktop ",␉kAlopias␉},␊ |
570 | ␉{ 0x7283, 0x00000000, CHIP_FAMILY_RV560, "ATI Radeon HD Desktop ",␉kAlopias␉},␊ |
571 | ␊ |
572 | ␉// R580␊ |
573 | ␉{ 0x7284, 0x00000000, CHIP_FAMILY_R580, "ATI Radeon HD Mobile ",␉kAlopias␉},␊ |
574 | ␊ |
575 | ␉// RV560␊ |
576 | ␉{ 0x7287, 0x00000000, CHIP_FAMILY_RV560, "ATI Radeon HD Desktop ",␉kAlopias␉},␊ |
577 | ␊ |
578 | ␉// RV570␊ |
579 | ␉{ 0x7288, 0x00000000, CHIP_FAMILY_RV570, "ATI Radeon HD Desktop ",␉kAlopias␉},␊ |
580 | ␉{ 0x7289, 0x00000000, CHIP_FAMILY_RV570, "ATI Radeon HD Desktop ",␉kAlopias␉},␊ |
581 | ␉{ 0x728B, 0x00000000, CHIP_FAMILY_RV570, "ATI Radeon HD Desktop ",␉kAlopias␉},␊ |
582 | ␉{ 0x728C, 0x00000000, CHIP_FAMILY_RV570, "ATI Radeon HD Desktop ",␉kAlopias␉},␊ |
583 | ␊ |
584 | ␉// RV560␊ |
585 | ␉{ 0x7290, 0x00000000, CHIP_FAMILY_RV560, "ATI Radeon HD Desktop ",␉kAlopias␉},␊ |
586 | ␉{ 0x7291, 0x00000000, CHIP_FAMILY_RV560, "ATI Radeon HD Desktop ",␉kAlopias␉},␊ |
587 | ␉{ 0x7293, 0x00000000, CHIP_FAMILY_RV560, "ATI Radeon HD Desktop ",␉kAlopias␉},␊ |
588 | ␉{ 0x7297, 0x00000000, CHIP_FAMILY_RV560, "ATI Radeon HD Desktop ",␉kAlopias␉},␊ |
589 | ␊ |
590 | ␉// RS690␊ |
591 | ␉{ 0x791E,␉0x00000000, CHIP_FAMILY_RS690,␉"ATI Radeon IGP ",␉kNull␉␉␉},␊ |
592 | ␉{ 0x791F,␉0x00000000, CHIP_FAMILY_RS690,␉"ATI Radeon IGP ",␉kNull␉␉␉},␊ |
593 | ␉{ 0x793F,␉0x00000000, CHIP_FAMILY_RS690,␉"ATI Radeon IGP ",␉kNull␉␉␉},␊ |
594 | ␉{ 0x7941,␉0x00000000, CHIP_FAMILY_RS690,␉"ATI Radeon IGP ",␉kNull␉␉␉},␊ |
595 | ␉{ 0x7942,␉0x00000000, CHIP_FAMILY_RS690,␉"ATI Radeon IGP ",␉kNull␉␉␉},␊ |
596 | ␊ |
597 | ␉// RS740␊ |
598 | ␉{ 0x796C,␉0x00000000, CHIP_FAMILY_RS740,␉"ATI Radeon IGP ",␉kNull␉␉␉},␊ |
599 | ␉{ 0x796D,␉0x00000000, CHIP_FAMILY_RS740,␉"ATI Radeon IGP ",␉kNull␉␉␉},␊ |
600 | ␉{ 0x796E,␉0x00000000, CHIP_FAMILY_RS740,␉"ATI Radeon IGP ",␉kNull␉␉␉},␊ |
601 | ␉{ 0x796F,␉0x00000000, CHIP_FAMILY_RS740,␉"ATI Radeon IGP ",␉kNull␉␉␉},␊ |
602 | ␊ |
603 | ␉// RS600␊ |
604 | ␉{ 0x9400,␉0x00000000, CHIP_FAMILY_R600,␉"ATI Radeon HD 2900 XT",␉kNull␉␉},␊ |
605 | ␉{ 0x9401,␉0x00000000, CHIP_FAMILY_R600,␉"ATI Radeon HD 2900 GT",␉kNull␉␉},␊ |
606 | ␉{ 0x9402,␉0x00000000, CHIP_FAMILY_R600,␉"ATI Radeon HD 2900 GT",␉kNull␉␉},␊ |
607 | ␉{ 0x9403,␉0x00000000, CHIP_FAMILY_R600,␉"ATI Radeon HD 2900 GT",␉kNull␉␉},␊ |
608 | ␉{ 0x9405,␉0x00000000, CHIP_FAMILY_R600,␉"ATI Radeon HD 2900 GT",␉kNull␉␉},␊ |
609 | ␉{ 0x940A,␉0x00000000, CHIP_FAMILY_R600,␉"ATI FireGL V8650",␉kNull␉␉},␊ |
610 | ␉{ 0x940B,␉0x00000000, CHIP_FAMILY_R600,␉"ATI FireGL V8600",␉kNull␉␉},␊ |
611 | ␉{ 0x940F,␉0x00000000, CHIP_FAMILY_R600,␉"ATI FireGL V7600",␉kNull␉␉},␊ |
612 | ␊ |
613 | ␉// RV740␊ |
614 | ␉{ 0x94A0,␉0x00000000, CHIP_FAMILY_RV740,␉"ATI Radeon HD 4830M",␉kFlicker␉},␊ |
615 | ␉{ 0x94A1,␉0x00000000, CHIP_FAMILY_RV740,␉"ATI Radeon HD 4860M",␉kFlicker␉},␊ |
616 | ␉{ 0x94A3,␉0x00000000, CHIP_FAMILY_RV740,␉"ATI FirePro M7740",␉kFlicker␉},␊ |
617 | ␉{ 0x94B1,␉0x00000000, CHIP_FAMILY_RV740,␉"ATI Radeon HD",␉kFlicker␉},␊ |
618 | ␉{ 0x94B3,␉0x00000000, CHIP_FAMILY_RV740,␉"ATI Radeon HD 4770",␉kFlicker␉},␊ |
619 | ␉{ 0x94B4,␉0x00000000, CHIP_FAMILY_RV740,␉"ATI Radeon HD 4700 Series",␉kFlicker␉},␊ |
620 | ␉{ 0x94B5,␉0x00000000, CHIP_FAMILY_RV740,␉"ATI Radeon HD 4770",␉kFlicker␉},␊ |
621 | ␉{ 0x94B9,␉0x00000000, CHIP_FAMILY_RV740,␉"ATI Radeon HD",␉kFlicker␉},␊ |
622 | ␊ |
623 | ␉// RV770␊ |
624 | ␉{ 0x9440,␉0x00000000, CHIP_FAMILY_RV770,␉"ATI Radeon HD 4870 ",␉kMotmot␉␉},␊ |
625 | ␉{ 0x9441,␉0x00000000, CHIP_FAMILY_RV770,␉"ATI Radeon HD 4870 X2",␉kMotmot␉␉},␊ |
626 | ␉{ 0x9442,␉0x00000000, CHIP_FAMILY_RV770,␉"ATI Radeon HD 4850 Series",␉kMotmot␉␉},␊ |
627 | ␉{ 0x9443,␉0x00000000, CHIP_FAMILY_RV770,␉"ATI Radeon HD 4850 X2",␉kMotmot␉␉},␊ |
628 | ␉{ 0x9444,␉0x00000000, CHIP_FAMILY_RV770,␉"ATI FirePro V8750 (FireGL)", kMotmot␉␉},␊ |
629 | ␉{ 0x9446,␉0x00000000, CHIP_FAMILY_RV770,␉"ATI FirePro V7770 (FireGL)",␉kMotmot␉␉},␊ |
630 | ␉{ 0x9447,␉0x00000000, CHIP_FAMILY_RV770,␉"ATI FirePro V8700 Duo (FireGL)",␉kMotmot␉␉},␊ |
631 | ␉{ 0x944A,␉0x00000000, CHIP_FAMILY_RV770,␉"ATI Mobility Radeon HD 4850",␉kMotmot␉␉},//iMac - Quail␊ |
632 | ␉{ 0x944B,␉0x00000000, CHIP_FAMILY_RV770,␉"ATI Mobility Radeon HD 4850 X2",␉kMotmot␉␉},//iMac - Quail␊ |
633 | ␉{ 0x944C,␉0x00000000, CHIP_FAMILY_RV770,␉"ATI Radeon HD 4830 Series",␉kMotmot␉␉},␊ |
634 | ␉{ 0x944E,␉0x00000000, CHIP_FAMILY_RV770,␉"ATI Radeon HD 4810 Series",␉kMotmot␉␉},␊ |
635 | ␉{ 0x9450,␉0x00000000, CHIP_FAMILY_RV770,␉"AMD FireStream 9270",␉kMotmot␉␉},␊ |
636 | ␉{ 0x9452,␉0x00000000, CHIP_FAMILY_RV770,␉"AMD FireStream 9250",␉kMotmot␉␉},␊ |
637 | ␉{ 0x9456,␉0x00000000, CHIP_FAMILY_RV770,␉"ATI FirePro V8700 (FireGL)",␉kMotmot␉␉},␊ |
638 | ␉{ 0x945A,␉0x00000000, CHIP_FAMILY_RV770,␉"ATI Mobility Radeon HD 4870",␉kMotmot␉␉},␊ |
639 | ␉{ 0x9460,␉0x00000000, CHIP_FAMILY_RV770,␉"ATI Radeon HD 4890",␉kMotmot␉␉},␊ |
640 | ␉{ 0x9462,␉0x00000000, CHIP_FAMILY_RV770,␉"ATI Radeon HD 4800 Series",␉kMotmot␉␉},␊ |
641 | //␉{ 0x946A,␉0x00000000, CHIP_FAMILY_RV770,␉"ATI Mobility Radeon",␉kMotmot␉␉},␊ |
642 | //␉{ 0x946B,␉0x00000000, CHIP_FAMILY_RV770,␉"ATI Mobility Radeon",␉kMotmot␉␉},␊ |
643 | //␉{ 0x947A,␉0x00000000, CHIP_FAMILY_RV770,␉"ATI Mobility Radeon",␉kMotmot␉␉},␊ |
644 | //␉{ 0x947B,␉0x00000000, CHIP_FAMILY_RV770,␉"ATI Mobility Radeon",␉kMotmot␉␉},␊ |
645 | ␊ |
646 | ␉// RV730␊ |
647 | ␉{ 0x9480,␉0x00000000, CHIP_FAMILY_RV730,␉"ATI Mobility Radeon HD 550v",␉kGliff␉},␊ |
648 | ␉{ 0x9487,␉0x00000000, CHIP_FAMILY_RV730,␉"ATI Radeon HD Series",␉kGliff␉␉},␊ |
649 | ␉{ 0x9488,␉0x00000000, CHIP_FAMILY_RV730,␉"ATI Radeon HD 4650 Series",␉kGliff␉},␊ |
650 | ␉{ 0x9489,␉0x00000000, CHIP_FAMILY_RV730,␉"ATI Radeon HD Series",␉kGliff␉␉},␊ |
651 | ␉{ 0x948A,␉0x00000000, CHIP_FAMILY_RV730,␉"ATI Radeon HD Series",␉kGliff␉␉},␊ |
652 | ␉{ 0x948F,␉0x00000000, CHIP_FAMILY_RV730,␉"ATI Radeon HD Series",␉kGliff␉␉},␊ |
653 | ␉{ 0x9490,␉0x00000000, CHIP_FAMILY_RV730,␉"ATI Radeon HD 4670 Series",␉kGliff␉␉},␊ |
654 | ␉{ 0x9491,␉0x00000000, CHIP_FAMILY_RV730,␉"ATI Radeon HD 4600 Series",␉kGliff␉␉},␊ |
655 | ␉{ 0x9495,␉0x00000000, CHIP_FAMILY_RV730,␉"ATI Radeon HD 4650 Series",␉kGliff␉␉},␊ |
656 | ␉{ 0x9498,␉0x00000000, CHIP_FAMILY_RV730,␉"ATI Radeon HD 4710 Series",␉kGliff␉␉},␊ |
657 | ␉{ 0x949C,␉0x00000000, CHIP_FAMILY_RV730,␉"ATI FirePro V7750 (FireGL)",␉kGliff␉␉},␊ |
658 | ␉{ 0x949E,␉0x00000000, CHIP_FAMILY_RV730,␉"ATI FirePro V5700 (FireGL)",␉kGliff␉␉},␊ |
659 | ␉{ 0x949F,␉0x00000000, CHIP_FAMILY_RV730,␉"ATI FirePro V3750 (FireGL)",␉kGliff␉␉},␊ |
660 | ␊ |
661 | ␉// RV610␊ |
662 | ␉{ 0x94C0,␉0x00000000, CHIP_FAMILY_RV610,␉"ATI Radeon HD Series",␉kIago␉␉},␊ |
663 | ␉{ 0x94C1,␉0x00000000, CHIP_FAMILY_RV610,␉"ATI Radeon HD 2400 Series",␉kIago␉},␊ |
664 | ␉{ 0x94C3,␉0x00000000, CHIP_FAMILY_RV610,␉"ATI Radeon HD 2350 Series",␉kIago␉},␊ |
665 | ␉{ 0x94C4,␉0x00000000, CHIP_FAMILY_RV610,␉"ATI Radeon HD 2400 Series",␉kIago␉},␊ |
666 | ␉{ 0x94C5,␉0x00000000, CHIP_FAMILY_RV610,␉"ATI Radeon HD 2400 Series",␉kIago␉},␊ |
667 | ␉{ 0x94C6,␉0x00000000, CHIP_FAMILY_RV610,␉"ATI Radeon HD 2400 Series",␉kIago␉},␊ |
668 | ␉{ 0x94C7,␉0x00000000, CHIP_FAMILY_RV610,␉"ATI Radeon HD 2350",␉␉kIago␉},␊ |
669 | ␉{ 0x94C8,␉0x00000000, CHIP_FAMILY_RV610,␉"ATI Radeon HD 2400 Series",␉kIago␉},␊ |
670 | ␉{ 0x94C9,␉0x00000000, CHIP_FAMILY_RV610,␉"ATI Radeon HD 2400 Series",␉kIago␉},␊ |
671 | ␉{ 0x94CB,␉0x00000000, CHIP_FAMILY_RV610,␉"ATI Radeon HD 2400 Series",␉kIago␉},␊ |
672 | ␉{ 0x94CC,␉0x00000000, CHIP_FAMILY_RV610,␉"ATI Radeon HD 2400 Series",␉kIago␉},␊ |
673 | ␉{ 0x94CD,␉0x00000000, CHIP_FAMILY_RV610,␉"ATI Radeon HD 2400 PRO Series",␉kIago␉},␊ |
674 | ␊ |
675 | ␉// RV670␊ |
676 | ␉{ 0x9500,␉0x00000000, CHIP_FAMILY_RV670,␉"ATI Radeon HD 3800 Series",␉kMegalodon␉},␊ |
677 | ␉{ 0x9501,␉0x00000000, CHIP_FAMILY_RV670,␉"ATI Radeon HD 3690 Series",␉kMegalodon␉},␊ |
678 | ␉{ 0x9504,␉0x00000000, CHIP_FAMILY_RV670,␉"ATI Radeon HD 3850M Series",␉kMegalodon␉},␊ |
679 | ␉{ 0x9505,␉0x00000000, CHIP_FAMILY_RV670,␉"ATI Radeon HD 3800 Series",␉kMegalodon␉},␊ |
680 | ␉{ 0x9506,␉0x00000000, CHIP_FAMILY_RV670,␉"ATI Radeon HD 3850 X2 M Series",␉kMegalodon␉},␊ |
681 | ␉{ 0x9507,␉0x00000000, CHIP_FAMILY_RV670,␉"ATI Radeon HD 3830",␉kMegalodon␉},␊ |
682 | ␉{ 0x9508,␉0x00000000, CHIP_FAMILY_RV670,␉"ATI Radeon HD 3870M Series",␉kMegalodon␉},␊ |
683 | ␉{ 0x9509,␉0x00000000, CHIP_FAMILY_RV670,␉"ATI Radeon HD 3870 X2 MSeries",␉kMegalodon␉},␊ |
684 | ␉{ 0x950F,␉0x00000000, CHIP_FAMILY_RV670,␉"ATI Radeon HD 3870 X2",␉kMegalodon␉},␊ |
685 | ␉{ 0x9511,␉0x00000000, CHIP_FAMILY_RV670,␉"ATI Radeon HD 3850 X2",␉kMegalodon␉},␊ |
686 | ␉{ 0x9513,␉0x00000000, CHIP_FAMILY_RV670,␉"ATI Radeon HD 3850 X2",␉kMegalodon␉},␊ |
687 | ␉{ 0x9515,␉0x00000000, CHIP_FAMILY_RV670,␉"ATI Radeon HD 3850 Series",␉kMegalodon␉},␊ |
688 | ␉{ 0x9517,␉0x00000000, CHIP_FAMILY_RV670,␉"ATI Radeon HD Series",␉kMegalodon␉},␊ |
689 | ␉{ 0x9519,␉0x00000000, CHIP_FAMILY_RV670,␉"AMD FireStream 9170",␉kMegalodon␉},␊ |
690 | ␊ |
691 | ␉// RV710␊ |
692 | ␉{ 0x9540,␉0x00000000, CHIP_FAMILY_RV710,␉"ATI Radeon HD 4550",␉kFlicker␉},␊ |
693 | ␉{ 0x9541,␉0x00000000, CHIP_FAMILY_RV710,␉"ATI Radeon HD",␉kFlicker␉},␊ |
694 | ␉{ 0x9542,␉0x00000000, CHIP_FAMILY_RV710,␉"ATI Radeon HD",␉kFlicker␉},␊ |
695 | ␉{ 0x954E,␉0x00000000, CHIP_FAMILY_RV710,␉"ATI Radeon HD",␉kFlicker␉},␊ |
696 | ␉{ 0x954F,␉0x00000000, CHIP_FAMILY_RV710,␉"ATI Radeon HD 4350",␉kFlicker␉},␊ |
697 | ␉{ 0x9552,␉0x00000000, CHIP_FAMILY_RV710,␉"ATI Mobility Radeon HD 4330", ␉kShrike },␊ |
698 | ␉{ 0x9553,␉0x00000000, CHIP_FAMILY_RV710,␉"ATI Mobility Radeon HD 4570", ␉kShrike },␊ |
699 | ␉{ 0x9555,␉0x00000000, CHIP_FAMILY_RV710,␉"ATI Mobility Radeon HD 4550", ␉kShrike },␊ |
700 | ␉{ 0x9557,␉0x00000000, CHIP_FAMILY_RV710,␉"ATI FirePro RG220",␉kFlicker␉},␊ |
701 | ␉{ 0x955F,␉0x00000000, CHIP_FAMILY_RV710,␉"ATI Radeon HD 4330M series",␉kFlicker␉},␊ |
702 | ␊ |
703 | ␉// RV630␊ |
704 | ␉{ 0x9580,␉0x00000000, CHIP_FAMILY_RV630,␉"ATI Radeon HD Series",␉kHypoprion␉},␊ |
705 | ␉{ 0x9581,␉0x00000000, CHIP_FAMILY_RV630,␉"ATI Radeon HD 2600 XT",␉kHypoprion },␊ |
706 | ␉{ 0x9583,␉0x00000000, CHIP_FAMILY_RV630,␉"ATI Radeon HD 2600 XT",␉kHypoprion },␊ |
707 | ␉{ 0x9586,␉0x00000000, CHIP_FAMILY_RV630,␉"ATI Radeon HD 2600 XT Series",␉kHypoprion␉},␊ |
708 | ␉{ 0x9587,␉0x00000000, CHIP_FAMILY_RV630,␉"ATI Radeon HD 2600 Pro Series",␉kHypoprion␉},␊ |
709 | ␉{ 0x9588,␉0x00000000, CHIP_FAMILY_RV630,␉"ATI Radeon HD 2600 XT", kHypoprion },␊ |
710 | ␉{ 0x9589,␉0x00000000, CHIP_FAMILY_RV630,␉"ATI Radeon HD 2600 PRO", kHypoprion },␊ |
711 | ␉{ 0x958A,␉0x00000000, CHIP_FAMILY_RV630,␉"ATI Radeon HD 2600 X2 Series",␉kLamna },␊ |
712 | ␉{ 0x958B,␉0x00000000, CHIP_FAMILY_RV630,␉"ATI Radeon HD 2600 X2 Series",␉kLamna },␊ |
713 | ␉{ 0x958C,␉0x00000000, CHIP_FAMILY_RV630,␉"ATI Radeon HD 2600 X2 Series",␉kLamna },␊ |
714 | ␉{ 0x958D,␉0x00000000, CHIP_FAMILY_RV630,␉"ATI Radeon HD 2600 X2 Series",␉kLamna },␊ |
715 | ␉{ 0x958E,␉0x00000000, CHIP_FAMILY_RV630,␉"ATI Radeon HD 2600 X2 Series",␉kLamna },␊ |
716 | ␉{ 0x958F,␉0x00000000, CHIP_FAMILY_RV630,␉"ATI Radeon HD Series",␉kHypoprion␉},␊ |
717 | ␊ |
718 | ␉// RV635␊ |
719 | //␉{ 0x9590,␉0x00000000, CHIP_FAMILY_RV635,␉"ATI Radeon HD",␉kMegalodon },␊ |
720 | ␉{ 0x9591,␉0x00000000, CHIP_FAMILY_RV635,␉"ATI Radeon HD 3600 Series",␉kMegalodon }, // Mobile␊ |
721 | //␉{ 0x9593,␉0x00000000, CHIP_FAMILY_RV635,␉"ATI Radeon HD",␉kMegalodon }, // Mobile␊ |
722 | //␉{ 0x9595,␉0x00000000, CHIP_FAMILY_RV635,␉"ATI Radeon HD",␉kMegalodon }, // Mobile␊ |
723 | //␉{ 0x9596,␉0x00000000, CHIP_FAMILY_RV635,␉"ATI Radeon HD",␉kMegalodon },␊ |
724 | //␉{ 0x9597,␉0x00000000, CHIP_FAMILY_RV635,␉"ATI Radeon HD",␉kMegalodon },␊ |
725 | ␉{ 0x9598,␉0x00000000, CHIP_FAMILY_RV635,␉"ATI Radeon HD 3600 Series",␉kMegalodon },␊ |
726 | //␉{ 0x9599,␉0x00000000, CHIP_FAMILY_RV635,␉"ATI Radeon HD",␉kMegalodon },␊ |
727 | //␉{ 0x959B,␉0x00000000, CHIP_FAMILY_RV635,␉"ATI Radeon HD",␉kMegalodon }, // Mobile␊ |
728 | ␊ |
729 | ␉// RV620␊ |
730 | ␉{ 0x95C0,␉0x00000000, CHIP_FAMILY_RV620,␉"ATI Radeon HD 3550 Series",␉kIago },␊ |
731 | //␉{ 0x95C2,␉0x00000000, CHIP_FAMILY_RV620,␉"ATI Radeon HD",␉kIago }, // Mobile␊ |
732 | ␉{ 0x95C4,␉0x00000000, CHIP_FAMILY_RV620,␉"ATI Radeon HD 3470 Series",␉kIago }, // Mobile␊ |
733 | ␉{ 0x95C5,␉0x00000000, CHIP_FAMILY_RV620,␉"ATI Radeon HD 3450 Series",␉kIago },␊ |
734 | ␉{ 0x95C6,␉0x00000000, CHIP_FAMILY_RV620,␉"ATI Radeon HD 3450 AGP",␉kIago },␊ |
735 | //␉{ 0x95C7,␉0x00000000, CHIP_FAMILY_RV620,␉"ATI Radeon HD",␉kIago },␊ |
736 | //␉{ 0x95C9,␉0x00000000, CHIP_FAMILY_RV620,␉"ATI Radeon HD",␉kIago },␊ |
737 | //␉{ 0x95CC,␉0x00000000, CHIP_FAMILY_RV620,␉"ATI Radeon HD",␉kIago },␊ |
738 | //␉{ 0x95CD,␉0x00000000, CHIP_FAMILY_RV620,␉"ATI Radeon HD",␉kIago },␊ |
739 | //␉{ 0x95CE,␉0x00000000, CHIP_FAMILY_RV620,␉"ATI Radeon HD",␉kIago },␊ |
740 | ␉{ 0x95CF,␉0x00000000, CHIP_FAMILY_RV620,␉"ATI FirePro 2260",␉kIago },␊ |
741 | ␊ |
742 | ␉// RS780␊ |
743 | ␉{ 0x9610,␉0x00000000, CHIP_FAMILY_RS780,␉"ATI Radeon HD 3200 Graphics",␉kNull },␊ |
744 | ␉{ 0x9611,␉0x00000000, CHIP_FAMILY_RS780,␉"ATI Radeon HD 3100 Graphics",␉kNull },␊ |
745 | //␉{ 0x9612,␉0x00000000, CHIP_FAMILY_RS780,␉"ATI Radeon HD",␉kNull },␊ |
746 | //␉{ 0x9613,␉0x00000000, CHIP_FAMILY_RS780,␉"ATI Radeon HD",␉kNull },␊ |
747 | ␉{ 0x9614,␉0x00000000, CHIP_FAMILY_RS780,␉"ATI Radeon HD 3300 Graphics",␉kNull },␊ |
748 | //␉{ 0x9615,␉0x00000000, CHIP_FAMILY_RS780,␉"ATI Radeon HD",␉kNull },␊ |
749 | ␉{ 0x9616,␉0x00000000, CHIP_FAMILY_RS780,␉"AMD 760G", kNull },␊ |
750 | ␊ |
751 | ␉// SUMO␊ |
752 | ␉{ 0x9640,␉0x00000000, CHIP_FAMILY_SUMO,␉"AMD Radeon HD 6550D",␉kNull },␊ |
753 | ␉{ 0x9641,␉0x00000000, CHIP_FAMILY_SUMO,␉"AMD Radeon HD 6620G",␉kNull }, // Mobile␊ |
754 | ␊ |
755 | ␉// SUMO2␊ |
756 | ␉{ 0x9642,␉0x00000000, CHIP_FAMILY_SUMO2,␉"AMD Radeon HD 6370D",␉kNull },␊ |
757 | ␉{ 0x9643,␉0x00000000, CHIP_FAMILY_SUMO2,␉"AMD Radeon HD 6380G",␉kNull }, // Mobile␊ |
758 | ␉{ 0x9644,␉0x00000000, CHIP_FAMILY_SUMO2,␉"AMD Radeon HD 6410D",␉kNull },␊ |
759 | ␉{ 0x9645,␉0x00000000, CHIP_FAMILY_SUMO2,␉"AMD Radeon HD 6410D",␉kNull }, // Mobile␊ |
760 | ␊ |
761 | ␉// SUMO␊ |
762 | ␉{ 0x9647,␉0x00000000, CHIP_FAMILY_SUMO,␉"AMD Radeon HD 6520G",␉kNull }, // Mobile␊ |
763 | ␉{ 0x9648,␉0x00000000, CHIP_FAMILY_SUMO,␉"AMD Radeon HD 6480G",␉kNull }, // Mobile␊ |
764 | ␊ |
765 | ␉// SUMO2␊ |
766 | ␉{ 0x9649,␉0x00000000, CHIP_FAMILY_SUMO2,␉"AMD Radeon(TM) HD 6480G",␉kNull }, // Mobile␊ |
767 | ␊ |
768 | ␉// SUMO␊ |
769 | ␉{ 0x964A,␉0x00000000, CHIP_FAMILY_SUMO,␉"AMD Radeon HD 6530D",␉kNull },␊ |
770 | //␉{ 0x964B,␉0x00000000, CHIP_FAMILY_SUMO,␉"AMD Radeon HD",␉kNull },␊ |
771 | //␉{ 0x964C,␉0x00000000, CHIP_FAMILY_SUMO,␉"AMD Radeon HD",␉kNull },␊ |
772 | //␉{ 0x964E,␉0x00000000, CHIP_FAMILY_SUMO,␉"AMD Radeon HD",␉kNull }, // Mobile␊ |
773 | //␉{ 0x964F,␉0x00000000, CHIP_FAMILY_SUMO,␉"AMD Radeon HD",␉kNull }, // Mobile␊ |
774 | ␊ |
775 | ␉// RS880␊ |
776 | ␉{ 0x9710,␉0x00000000, CHIP_FAMILY_RS880,␉"ATI Radeon HD 4200 Series",␉kNull␉},␊ |
777 | //␉{ 0x9711,␉0x00000000, CHIP_FAMILY_RS880,␉"ATI Radeon HD",␉kNull␉},␊ |
778 | ␉{ 0x9712,␉0x00000000, CHIP_FAMILY_RS880,␉"ATI Radeon HD 4200 Series",␉kNull␉}, // Mobile␊ |
779 | //␉{ 0x9713,␉0x00000000, CHIP_FAMILY_RS880,␉"ATI Radeon HD",␉kNull␉}, // Mobile␊ |
780 | ␉{ 0x9714,␉0x00000000, CHIP_FAMILY_RS880,␉"ATI Radeon HD 4290",␉kNull␉},␊ |
781 | ␉{ 0x9715,␉0x00000000, CHIP_FAMILY_RS880,␉"ATI Radeon HD 4250",␉kNull␉},␊ |
782 | ␉{ 0x9723,␉0x00000000, CHIP_FAMILY_RS880,␉"ATI Radeon HD 5450 Series",␉kNull␉},␊ |
783 | ␊ |
784 | ␉// PALM␊ |
785 | ␉{ 0x9802,␉0x00000000, CHIP_FAMILY_PALM,␉"AMD Radeon HD 6310 Graphics", kNull },␊ |
786 | ␉{ 0x9803,␉0x00000000, CHIP_FAMILY_PALM,␉"AMD Radeon HD 6250 Graphics", kNull },␊ |
787 | ␉{ 0x9804,␉0x00000000, CHIP_FAMILY_PALM,␉"AMD Radeon HD 6250 Graphics", kNull },␊ |
788 | ␉{ 0x9805,␉0x00000000, CHIP_FAMILY_PALM,␉"AMD Radeon HD 6250 Graphics", kNull },␊ |
789 | ␉{ 0x9806,␉0x00000000, CHIP_FAMILY_PALM,␉"AMD Radeon HD 6320 Graphics", kNull },␊ |
790 | ␉{ 0x9807,␉0x00000000, CHIP_FAMILY_PALM,␉"AMD Radeon HD 6290 Graphics", kNull },␊ |
791 | ␉{ 0x9808,␉0x00000000, CHIP_FAMILY_PALM,␉"AMD Radeon HD 7340 Graphics", kNull },␊ |
792 | ␉{ 0x9809,␉0x00000000, CHIP_FAMILY_PALM,␉"AMD Radeon HD 7310 Graphics", kNull },␊ |
793 | ␉{ 0x980A,␉0x00000000, CHIP_FAMILY_PALM,␉"AMD Radeon HD 7290 Graphics", kNull },␊ |
794 | ␊ |
795 | ␉// KABINI␊ |
796 | ␉{ 0x9830,␉0x00000000, CHIP_FAMILY_KABINI,␉"AMD Radeon HD 8400", kNull }, // Mobile␊ |
797 | ␉{ 0x9831,␉0x00000000, CHIP_FAMILY_KABINI,␉"AMD Radeon HD 8400E", kNull },␊ |
798 | ␉{ 0x9832,␉0x00000000, CHIP_FAMILY_KABINI,␉"AMD Radeon HD 8330", kNull }, // Mobile␊ |
799 | ␉{ 0x9833,␉0x00000000, CHIP_FAMILY_KABINI,␉"AMD Radeon HD 8330E", kNull },␊ |
800 | ␉{ 0x9834,␉0x00000000, CHIP_FAMILY_KABINI,␉"AMD Radeon HD 8210", kNull }, // Mobile␊ |
801 | ␉{ 0x9835,␉0x00000000, CHIP_FAMILY_KABINI,␉"AMD Radeon HD 8210E", kNull },␊ |
802 | ␉{ 0x9836,␉0x00000000, CHIP_FAMILY_KABINI,␉"AMD Radeon HD 8280", kNull }, // Mobile␊ |
803 | ␉{ 0x9837,␉0x00000000, CHIP_FAMILY_KABINI,␉"AMD Radeon HD 8280E", kNull },␊ |
804 | ␉{ 0x9838,␉0x00000000, CHIP_FAMILY_KABINI,␉"AMD Radeon HD 8240", kNull }, // Mobile␊ |
805 | ␉{ 0x9839,␉0x00000000, CHIP_FAMILY_KABINI,␉"AMD Radeon HD 8180", kNull }, // Mobile␊ |
806 | //␉{ 0x983A,␉0x00000000, CHIP_FAMILY_KABINI,␉"AMD Radeon HD", kNull },␊ |
807 | //␉{ 0x983B,␉0x00000000, CHIP_FAMILY_KABINI,␉"AMD Radeon HD", kNull }, // Mobile␊ |
808 | //␉{ 0x983C,␉0x00000000, CHIP_FAMILY_KABINI,␉"AMD Radeon HD", kNull },␊ |
809 | ␉{ 0x983D,␉0x00000000, CHIP_FAMILY_KABINI,␉"AMD Radeon HD 8250", kNull },␊ |
810 | //␉{ 0x983E,␉0x00000000, CHIP_FAMILY_KABINI,␉"AMD Radeon HD", kNull },␊ |
811 | //␉{ 0x983F,␉0x00000000, CHIP_FAMILY_KABINI,␉"AMD Radeon HD", kNull },␊ |
812 | ␊ |
813 | ␉// MULLINS␊ |
814 | ␉{ 0x9850,␉0x00000000, CHIP_FAMILY_MULLINS,␉"AMD Radeon HD", kNull }, // Mobile␊ |
815 | ␉{ 0x9851,␉0x00000000, CHIP_FAMILY_MULLINS,␉"AMD Radeon HD", kNull }, // Mobile␊ |
816 | ␉{ 0x9852,␉0x00000000, CHIP_FAMILY_MULLINS,␉"AMD Radeon HD", kNull }, // Mobile␊ |
817 | ␉{ 0x9853,␉0x00000000, CHIP_FAMILY_MULLINS,␉"AMD Radeon HD", kNull }, // Mobile␊ |
818 | ␉{ 0x9854,␉0x00000000, CHIP_FAMILY_MULLINS,␉"AMD Radeon HD", kNull }, // Mobile␊ |
819 | ␉{ 0x9855,␉0x00000000, CHIP_FAMILY_MULLINS,␉"AMD Radeon HD", kNull }, // Mobile␊ |
820 | ␉{ 0x9856,␉0x00000000, CHIP_FAMILY_MULLINS,␉"AMD Radeon HD", kNull }, // Mobile␊ |
821 | ␉{ 0x9857,␉0x00000000, CHIP_FAMILY_MULLINS,␉"AMD Radeon HD", kNull }, // Mobile␊ |
822 | ␉{ 0x9858,␉0x00000000, CHIP_FAMILY_MULLINS,␉"AMD Radeon HD", kNull }, // Mobile␊ |
823 | ␉{ 0x9859,␉0x00000000, CHIP_FAMILY_MULLINS,␉"AMD Radeon HD", kNull }, // Mobile␊ |
824 | ␉{ 0x985A,␉0x00000000, CHIP_FAMILY_MULLINS,␉"AMD Radeon HD", kNull }, // Mobile␊ |
825 | ␉{ 0x985B,␉0x00000000, CHIP_FAMILY_MULLINS,␉"AMD Radeon HD", kNull }, // Mobile␊ |
826 | ␉{ 0x985C,␉0x00000000, CHIP_FAMILY_MULLINS,␉"AMD Radeon HD", kNull }, // Mobile␊ |
827 | ␉{ 0x985D,␉0x00000000, CHIP_FAMILY_MULLINS,␉"AMD Radeon HD", kNull }, // Mobile␊ |
828 | ␉{ 0x985E,␉0x00000000, CHIP_FAMILY_MULLINS,␉"AMD Radeon HD", kNull }, // Mobile␊ |
829 | ␉{ 0x985F,␉0x00000000, CHIP_FAMILY_MULLINS,␉"AMD Radeon HD", kNull }, // Mobile␊ |
830 | ␊ |
831 | ␉// ARUBA␊ |
832 | ␉{ 0x9900,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 7660G", kNull }, // Mobile␊ |
833 | ␉{ 0x9901,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 7660D", kNull },␊ |
834 | ␉{ 0x9903,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 7640G", kNull }, // Mobile␊ |
835 | ␉{ 0x9904,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 7560D", kNull },␊ |
836 | //␉{ 0x9905,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD", kNull },␊ |
837 | ␉{ 0x9906,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD FirePro A300 Series", kNull },␊ |
838 | ␉{ 0x9907,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 7620G", kNull }, // Mobile␊ |
839 | ␉{ 0x9908,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 7600G", kNull }, // Mobile␊ |
840 | //␉{ 0x9909,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD", kNull }, // Mobile␊ |
841 | ␉{ 0x990A,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 7500G", kNull }, // Mobile␊ |
842 | ␉{ 0x990B,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 8650G", kNull }, // Mobile␊ |
843 | ␉{ 0x990C,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 8670D", kNull },␊ |
844 | ␉{ 0x990D,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 8550G", kNull }, // Mobile␊ |
845 | ␉{ 0x990E,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 8570D", kNull },␊ |
846 | ␉{ 0x990F,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 8610G", kNull }, // Mobile␊ |
847 | ␉{ 0x9910,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 7660G", kNull }, // Mobile␊ |
848 | ␉{ 0x9913,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 7640G", kNull }, // Mobile␊ |
849 | ␉{ 0x9917,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 7620G", kNull },␊ |
850 | ␉{ 0x9918,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 7600G", kNull },␊ |
851 | ␉{ 0x9919,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 7500G", kNull },␊ |
852 | ␉{ 0x9990,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 7520G", kNull }, // Mobile␊ |
853 | ␉{ 0x9991,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 7540D", kNull },␊ |
854 | ␉{ 0x9992,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 7420G", kNull }, // Mobile␊ |
855 | ␉{ 0x9993,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 7480D", kNull },␊ |
856 | ␉{ 0x9994,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 7400G", kNull }, // Mobile␊ |
857 | ␉{ 0x9995,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 8450G", kNull }, // Mobile␊ |
858 | ␉{ 0x9996,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 8470D", kNull },␊ |
859 | ␉{ 0x9997,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 8350G", kNull }, // Mobile␊ |
860 | ␉{ 0x9998,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 8370D", kNull },␊ |
861 | ␉{ 0x9999,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 8510G", kNull }, // Mobile␊ |
862 | ␉{ 0x999A,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 8410G", kNull }, // Mobile␊ |
863 | ␉{ 0x999B,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 8310G", kNull }, // Mobile␊ |
864 | ␉{ 0x999C,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 8650D", kNull },␊ |
865 | ␉{ 0x999D,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 8550D", kNull },␊ |
866 | ␉{ 0x99A0,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 7520G", kNull }, // Mobile␊ |
867 | ␉{ 0x99A2,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 7420G", kNull }, // Mobile␊ |
868 | ␉{ 0x99A4,␉0x00000000, CHIP_FAMILY_ARUBA,␉"AMD Radeon HD 7400G", kNull },␊ |
869 | ␊ |
870 | ␉{ 0x0000,␉0x00000000, CHIP_FAMILY_UNKNOW,␉"AMD Unknown",␉␉␉kNull␉␉}␊ |
871 | };␊ |
872 | ␊ |
873 | static const char *chip_family_name[] = {␊ |
874 | ␉"UNKNOW",␊ |
875 | ␉"R420",␊ |
876 | ␉"R423",␊ |
877 | ␉"RV410",␊ |
878 | ␉"RV515",␊ |
879 | ␉"R520",␊ |
880 | ␉"RV530",␊ |
881 | ␉"RV560",␊ |
882 | ␉"RV570",␊ |
883 | ␉"R580",␊ |
884 | ␉/* IGP */␊ |
885 | ␉"RS600",␊ |
886 | ␉"RS690",␊ |
887 | ␉"RS740",␊ |
888 | ␉"RS780",␊ |
889 | ␉"RS880",␊ |
890 | ␉/* R600 */␊ |
891 | ␉"R600",␊ |
892 | ␉"RV610",␊ |
893 | ␉"RV620",␊ |
894 | ␉"RV630",␊ |
895 | ␉"RV635",␊ |
896 | ␉"RV670",␊ |
897 | ␉/* R700 */␊ |
898 | ␉"RV710",␊ |
899 | ␉"RV730",␊ |
900 | ␉"RV740",␊ |
901 | ␉"RV770",␊ |
902 | ␉"RV772",␊ |
903 | ␉"RV790",␊ |
904 | ␉/* Evergreen */␊ |
905 | ␉"Cedar",␊ |
906 | ␉"Cypress",␊ |
907 | ␉"Hemlock",␊ |
908 | ␉"Juniper",␊ |
909 | ␉"Redwood",␊ |
910 | ␉// "Broadway",␊ |
911 | ␉/* Northern Islands */␊ |
912 | ␉"Barts",␊ |
913 | ␉"Caicos",␊ |
914 | ␉"Cayman",␊ |
915 | ␉"Turks",␊ |
916 | ␉/* Southern Islands */␊ |
917 | ␉"Palm",␊ |
918 | ␉"Sumo",␊ |
919 | ␉"Sumo2",␊ |
920 | ␉"Aruba",␊ |
921 | ␉"Tahiti",␊ |
922 | ␉"Pitcairn",␊ |
923 | ␉"Verde",␊ |
924 | ␉"Oland",␊ |
925 | ␉"Hainan",␊ |
926 | ␉"Bonaire",␊ |
927 | ␉"Kaveri",␊ |
928 | ␉"Kabini",␊ |
929 | ␉"Hawaii",␊ |
930 | ␉/* ... */␊ |
931 | ␉"Mullins",␊ |
932 | ␉"Topaz",␊ |
933 | ␉"Amethyst",␊ |
934 | ␉"Tonga",␊ |
935 | ␉"Fiji",␊ |
936 | ␉"Carrizo",␊ |
937 | ␉"Tobago",␊ |
938 | ␉"Ellesmere",␊ |
939 | ␉"Baffin",␊ |
940 | ␉"Greenland",␊ |
941 | ␉"Vega10",␊ |
942 | //␉"Vega11",␊ |
943 | //␉"Navi",␊ |
944 | ␉""␊ |
945 | };␊ |
946 | ␊ |
947 | AtiDevProp ati_devprop_list[] = {␊ |
948 | ␉{FLAGTRUE,␉false,␉"@0,AAPL,boot-display",␉␉get_bootdisplay_val,␉NULVAL␉␉␉␉},␊ |
949 | //␉{FLAGTRUE,␉false,␉"@0,ATY,EFIDisplay",␉␉NULL,␉␉␉STRVAL("TMDSA")␉␉␉},␊ |
950 | ␊ |
951 | //␉{FLAGTRUE,␉true,␉"@0,AAPL,vram-memory",␉␉get_vrammemory_val,␉NULVAL␉␉␉␉},␊ |
952 | ␉{FLAGNOTFAKE,␉true,␉"@0,compatible",␉␉get_name_val,␉␉NULVAL␉␉␉␉},␊ |
953 | ␉{FLAGTRUE,␉true,␉"@0,connector-type",␉␉get_conntype_val,␉NULVAL␉␉␉␉},␊ |
954 | ␉{FLAGTRUE,␉true,␉"@0,device_type",␉␉NULL,␉␉␉STRVAL("display")␉␉},␊ |
955 | //␉{FLAGTRUE,␉false,␉"@0,display-connect-flags",␉NULL,␉␉␉DWRVAL(0)␉␉␉},␊ |
956 | ␊ |
957 | //␉{FLAGTRUE,␉true,␉"@0,display-type",␉␉NULL,␉␉␉STRVAL("NONE")␉␉␉},␊ |
958 | ␉{FLAGTRUE,␉true,␉"@0,name",␉␉␉get_name_val,␉␉NULVAL␉␉␉␉},␊ |
959 | ␉{FLAGTRUE,␉true,␉"@0,VRAM,memsize",␉␉get_vrammemsize_val,␉NULVAL␉␉␉␉},␊ |
960 | //␉{FLAGTRUE,␉true,␉"@0,ATY,memsize",␉␉get_vrammemsize_val,␉NULVAL␉␉␉␉},␊ |
961 | ␊ |
962 | ␉{FLAGTRUE,␉false,␉"AAPL,aux-power-connected",␉NULL,␉␉␉DWRVAL(1)␉␉␉},␊ |
963 | ␉{FLAGTRUE,␉false,␉"AAPL00,DualLink",␉␉get_dual_link_val,␉NULVAL␉␉␉␉},␊ |
964 | ␊ |
965 | //␉{FLAGTRUE,␉false,␉"AAPL,backlight-control",␉NULL,␉␉␉DWRVAL(1)␉␉␉},␊ |
966 | ␊ |
967 | ␉{FLAGTRUE,␉false,␉"ATY,bin_image",␉␉get_binimage_val,␉NULVAL␉␉␉␉},␊ |
968 | ␉{FLAGTRUE,␉false,␉"ATY,Copyright",␉␉NULL,␉␉␉STRVAL("Copyright AMD Inc. All Rights Reserved. 2005-2011") },␊ |
969 | ␉{FLAGTRUE,␉false,␉"ATY,EFIVersion",␉␉NULL,␉␉␉STRVAL("01.00.3180")␉␉},␊ |
970 | ␉{FLAGTRUE,␉false,␉"ATY,Card#",␉␉␉get_romrevision_val,␉NULVAL␉␉␉␉},␊ |
971 | //␉{FLAGTRUE,␉false,␉"ATY,Rom#",␉␉␉NULL,␉␉␉STRVAL("www.amd.com")␉␉},␊ |
972 | ␊ |
973 | ␉{FLAGNOTFAKE,␉false,␉"ATY,VendorID",␉␉␉NULL,␉␉␉WRDVAL(0x1002)␉␉␉},␊ |
974 | ␉{FLAGNOTFAKE,␉false,␉"ATY,DeviceID",␉␉␉get_deviceid_val,␉NULVAL␉␉␉␉},␊ |
975 | ␊ |
976 | //␉{FLAGTRUE,␉false,␉"ATY,MCLK",␉␉␉get_mclk_val,␉␉NULVAL␉␉␉␉},␊ |
977 | //␉{FLAGTRUE,␉false,␉"ATY,SCLK",␉␉␉get_sclk_val,␉␉NULVAL␉␉␉␉},␊ |
978 | ␉{FLAGTRUE,␉false,␉"ATY,RefCLK",␉␉␉get_refclk_val,␉␉DWRVAL(0x0a8c)␉␉␉},␊ |
979 | ␉␊ |
980 | ␉{FLAGTRUE,␉false,␉"ATY,PlatformInfo",␉␉get_platforminfo_val,␉NULVAL␉␉␉␉},␊ |
981 | //␉{FLAGOLD, ␉FALSE,␉"compatible",␉␉␉get_name_pci_val,␉NULVAL␉␉␉␉},␊ |
982 | ␉{FLAGTRUE,␉false,␉"name",␉␉␉␉get_nameparent_val,␉NULVAL␉␉␉␉},␊ |
983 | ␉{FLAGTRUE,␉false,␉"device_type",␉␉␉get_nameparent_val,␉NULVAL␉␉␉␉},␊ |
984 | ␉{FLAGTRUE,␉false,␉"model",␉␉␉get_model_val,␉␉STRVAL("ATI Radeon")␉␉},␊ |
985 | //␉{FLAGTRUE,␉false,␉"VRAM,totalsize",␉␉get_vramtotalsize_val,␉NULVAL␉␉␉␉},␊ |
986 | ␉{FLAGTRUE,␉false,␉"hda-gfx",␉␉␉get_hdmiaudio,␉␉NULVAL␉␉␉␉},␊ |
987 | ␊ |
988 | ␉{FLAGTRUE,␉false,␉NULL,␉␉␉␉NULL,␉␉␉NULVAL␉␉␉␉}␊ |
989 | };␊ |
990 | ␊ |
991 | bool get_bootdisplay_val(value_t *val)␊ |
992 | {␊ |
993 | ␉static uint32_t v = 0;␊ |
994 | ␉␊ |
995 | ␉if (v)␊ |
996 | ␉{␊ |
997 | ␉␉return false;␊ |
998 | ␉}␊ |
999 | ␉if (!card->posted)␊ |
1000 | ␉{␊ |
1001 | ␉␉return false;␊ |
1002 | ␉}␊ |
1003 | ␉v = 1;␊ |
1004 | ␉val->type = kCst;␊ |
1005 | ␉val->size = 4;␊ |
1006 | ␉val->data = (uint8_t *)&v;␊ |
1007 | ␊ |
1008 | ␉return true;␊ |
1009 | }␊ |
1010 | ␊ |
1011 | bool get_dual_link_val(value_t *val)␊ |
1012 | {␊ |
1013 | ␉bool doit = false;␊ |
1014 | ␉if(getBoolForKey(kEnableDualLink, &doit, &bootInfo->chameleonConfig) && doit)␊ |
1015 | ␉{␊ |
1016 | ␉␉uint8_t AAPL00_value[] = {0x01, 0x00, 0x00, 0x00};␊ |
1017 | ␉␉val->type = kStr;␊ |
1018 | ␉␉val->size = strlen("AAPL00,DualLink") + 1;␊ |
1019 | ␉␉val->data = (uint8_t *)AAPL00_value;␊ |
1020 | ␉␉return true;␊ |
1021 | ␉}␊ |
1022 | ␉return false;␊ |
1023 | }␊ |
1024 | ␊ |
1025 | bool get_hdmiaudio(value_t * val)␊ |
1026 | {␊ |
1027 | ␉bool doit = false;␊ |
1028 | ␉if(getBoolForKey(kEnableHDMIAudio, &doit, &bootInfo->chameleonConfig) && doit)␊ |
1029 | ␉{␊ |
1030 | ␉␉val->type = kStr;␊ |
1031 | ␉␉val->size = strlen("onboard-1") + 1;␊ |
1032 | ␉␉val->data = (uint8_t *)"onboard-1";␊ |
1033 | ␊ |
1034 | ␉␉return true;␊ |
1035 | ␉}␊ |
1036 | ␉return false;␊ |
1037 | }␊ |
1038 | ␊ |
1039 | bool get_vrammemory_val(value_t *val)␊ |
1040 | {␊ |
1041 | ␉return false;␊ |
1042 | }␊ |
1043 | ␊ |
1044 | static const char* dtyp[] = {"LCD", "CRT", "DVI", "NONE"};␊ |
1045 | static uint32_t dti = 0;␊ |
1046 | ␊ |
1047 | bool get_display_type(value_t *val)␊ |
1048 | {␊ |
1049 | ␉dti++;␊ |
1050 | ␉if (dti > 3)␊ |
1051 | ␉{␊ |
1052 | ␉␉dti = 0;␊ |
1053 | ␉}␊ |
1054 | ␉val->type = kStr;␊ |
1055 | ␉val->size = 4;␊ |
1056 | ␉val->data = (uint8_t *)dtyp[dti];␊ |
1057 | ␊ |
1058 | ␉return true;␊ |
1059 | }␊ |
1060 | ␊ |
1061 | bool get_name_val(value_t *val)␊ |
1062 | {␊ |
1063 | ␉val->type = aty_name.type;␊ |
1064 | ␉val->size = aty_name.size;␊ |
1065 | ␉val->data = aty_name.data;␊ |
1066 | ␉␊ |
1067 | ␉return true;␊ |
1068 | }␊ |
1069 | ␊ |
1070 | bool get_nameparent_val(value_t *val)␊ |
1071 | {␊ |
1072 | ␉val->type = aty_nameparent.type;␊ |
1073 | ␉val->size = aty_nameparent.size;␊ |
1074 | ␉val->data = aty_nameparent.data;␊ |
1075 | ␉␊ |
1076 | ␉return true;␊ |
1077 | }␊ |
1078 | ␊ |
1079 | ␊ |
1080 | bool get_model_val(value_t *val)␊ |
1081 | {␊ |
1082 | ␉if (!card->info->model_name)␊ |
1083 | ␉␉return false;␊ |
1084 | ␉␊ |
1085 | ␉val->type = kStr;␊ |
1086 | ␉val->size = (uint32_t)strlen(card->info->model_name);␊ |
1087 | ␉val->data = (uint8_t *)card->info->model_name;␊ |
1088 | ␉␊ |
1089 | ␉return true;␊ |
1090 | }␊ |
1091 | ␊ |
1092 | bool get_conntype_val(value_t *val)␊ |
1093 | {␊ |
1094 | //Connector types:␊ |
1095 | //0x00000010: VGA␊ |
1096 | //0x00000004: DL DVI-I␊ |
1097 | //0x00000200: SL DVI-I␊ |
1098 | //0x00000080: S-V␊ |
1099 | //0x00000800: HDMI␊ |
1100 | //0x00000400: DisplayPort␊ |
1101 | //0x00000002: LVDS␊ |
1102 | ␊ |
1103 | ␉return false;␊ |
1104 | }␊ |
1105 | ␊ |
1106 | bool get_vrammemsize_val(value_t *val)␊ |
1107 | {␊ |
1108 | ␉static int idx = -1;␊ |
1109 | ␉static uint64_t memsize;␊ |
1110 | ␉␊ |
1111 | ␉idx++;␊ |
1112 | ␉memsize = ((uint64_t)card->vram_size << 32);␊ |
1113 | ␉if (idx == 0)␊ |
1114 | ␉{␊ |
1115 | ␉␉memsize = memsize | (uint64_t)card->vram_size;␊ |
1116 | ␉}␊ |
1117 | ␉val->type = kCst;␊ |
1118 | ␉val->size = 8;␊ |
1119 | ␉val->data = (uint8_t *)&memsize;␊ |
1120 | ␉␊ |
1121 | ␉return true;␊ |
1122 | }␊ |
1123 | ␊ |
1124 | bool get_binimage_val(value_t *val)␊ |
1125 | {␊ |
1126 | ␉if (!card->rom)␊ |
1127 | ␉{␊ |
1128 | ␉␉return false;␊ |
1129 | ␉}␊ |
1130 | ␉val->type = kPtr;␊ |
1131 | ␉val->size = card->rom_size;␊ |
1132 | ␉val->data = card->rom;␊ |
1133 | ␊ |
1134 | ␉return true;␊ |
1135 | }␊ |
1136 | ␊ |
1137 | bool get_romrevision_val(value_t *val)␊ |
1138 | {␊ |
1139 | ␉char *cRev="109-B77101-00";␊ |
1140 | ␉uint8_t *rev;␊ |
1141 | ␉if (!card->rom)␊ |
1142 | ␉{␊ |
1143 | ␉␉val->type = kPtr;␊ |
1144 | ␉␉val->size = 13;␊ |
1145 | ␉␉val->data = malloc(val->size);␊ |
1146 | ␉␉if (!val->data) {␊ |
1147 | ␉␉␉return false;␊ |
1148 | ␉␉}␊ |
1149 | ␉␉memcpy(val->data, cRev, val->size);␊ |
1150 | ␊ |
1151 | ␉␉return true;␊ |
1152 | ␉}␊ |
1153 | ␊ |
1154 | ␉rev = card->rom + *(uint8_t *)(card->rom + OFFSET_TO_GET_ATOMBIOS_STRINGS_START);␊ |
1155 | ␊ |
1156 | ␉val->type = kPtr;␊ |
1157 | ␉val->size = (uint32_t)strlen((char *)rev);␊ |
1158 | ␉if ((val->size < 3) || (val->size > 30)) //fool proof. Real value 13␊ |
1159 | ␉{␊ |
1160 | ␉␉rev = (uint8_t *)cRev;␊ |
1161 | ␉␉val->size = 13;␊ |
1162 | ␉}␊ |
1163 | ␉val->data = malloc(val->size);␊ |
1164 | ␊ |
1165 | ␉if (!val->data)␊ |
1166 | ␉{␊ |
1167 | ␉␉return false;␊ |
1168 | ␉}␊ |
1169 | ␊ |
1170 | ␉memcpy(val->data, rev, val->size);␊ |
1171 | ␉␊ |
1172 | ␉return true;␊ |
1173 | }␊ |
1174 | ␊ |
1175 | bool get_deviceid_val(value_t *val)␊ |
1176 | {␊ |
1177 | ␉val->type = kCst;␊ |
1178 | ␉val->size = 2;␊ |
1179 | ␉val->data = (uint8_t *)&card->pci_dev->device_id;␊ |
1180 | ␉␊ |
1181 | ␉return true;␊ |
1182 | }␊ |
1183 | ␊ |
1184 | bool get_mclk_val(value_t *val)␊ |
1185 | {␊ |
1186 | ␉return false;␊ |
1187 | }␊ |
1188 | ␊ |
1189 | bool get_sclk_val(value_t *val)␊ |
1190 | {␊ |
1191 | ␉return false;␊ |
1192 | }␊ |
1193 | ␊ |
1194 | bool get_refclk_val(value_t *val)␊ |
1195 | {␊ |
1196 | ␉return false;␊ |
1197 | }␊ |
1198 | ␊ |
1199 | bool get_platforminfo_val(value_t *val)␊ |
1200 | {␊ |
1201 | ␉val->data = malloc(0x80);␊ |
1202 | ␉if (!val->data)␊ |
1203 | ␉{␊ |
1204 | ␉␉return false;␊ |
1205 | ␉}␊ |
1206 | ␉bzero(val->data, 0x80);␊ |
1207 | ␉␊ |
1208 | ␉val->type␉␉= kPtr;␊ |
1209 | ␉val->size␉␉= 0x80;␊ |
1210 | ␉val->data[0]␉= 1;␊ |
1211 | ␉␊ |
1212 | ␉return true;␊ |
1213 | }␊ |
1214 | ␊ |
1215 | bool get_vramtotalsize_val(value_t *val)␊ |
1216 | {␊ |
1217 | ␊ |
1218 | ␉val->type = kCst;␊ |
1219 | ␉val->size = 4;␊ |
1220 | ␉val->data = (uint8_t *)&card->vram_size;␊ |
1221 | ␉␊ |
1222 | ␉return true;␊ |
1223 | }␊ |
1224 | ␊ |
1225 | void free_val(value_t *val)␊ |
1226 | {␊ |
1227 | ␉if (val->type == kPtr)␊ |
1228 | ␉{␊ |
1229 | ␉␉free(val->data);␊ |
1230 | ␉}␊ |
1231 | ␉␊ |
1232 | ␉bzero(val, sizeof(value_t));␊ |
1233 | }␊ |
1234 | ␊ |
1235 | void devprop_add_list(AtiDevProp devprop_list[])␊ |
1236 | {␊ |
1237 | ␉int i, pnum;␊ |
1238 | ␉value_t *val = malloc(sizeof(value_t));␊ |
1239 | ␉␊ |
1240 | ␉for (i = 0; devprop_list[i].name != NULL; i++)␊ |
1241 | ␉{␊ |
1242 | ␉␉if ((devprop_list[i].flags == FLAGTRUE) || (devprop_list[i].flags & card->flags))␊ |
1243 | ␉␉{␊ |
1244 | ␉␉␉if (devprop_list[i].get_value && devprop_list[i].get_value(val))␊ |
1245 | ␉␉␉{␊ |
1246 | ␉␉␉␉devprop_add_value(card->device, devprop_list[i].name, val->data, val->size);␊ |
1247 | ␉␉␉␉free_val(val);␊ |
1248 | ␉␉␉␉␊ |
1249 | ␉␉␉␉if (devprop_list[i].all_ports)␊ |
1250 | ␉␉␉␉{␊ |
1251 | ␉␉␉␉␉for (pnum = 1; pnum < card->ports; pnum++)␊ |
1252 | ␉␉␉␉␉{␊ |
1253 | ␉␉␉␉␉␉if (devprop_list[i].get_value(val))␊ |
1254 | ␉␉␉␉␉␉{␊ |
1255 | ␉␉␉␉␉␉␉devprop_list[i].name[1] = (uint8_t)(0x30 + pnum); // convert to ascii␊ |
1256 | ␉␉␉␉␉␉␉devprop_add_value(card->device, devprop_list[i].name, val->data, val->size);␊ |
1257 | ␉␉␉␉␉␉␉free_val(val);␊ |
1258 | ␉␉␉␉␉␉}␊ |
1259 | ␉␉␉␉␉}␊ |
1260 | ␉␉␉␉␉devprop_list[i].name[1] = 0x30; // write back our "@0," for a next possible card␊ |
1261 | ␉␉␉␉}␊ |
1262 | ␉␉␉}␊ |
1263 | ␉␉␉else␊ |
1264 | ␉␉␉{␊ |
1265 | ␉␉␉␉if (devprop_list[i].default_val.type != kNul)␊ |
1266 | ␉␉␉␉{␊ |
1267 | ␉␉␉␉␉devprop_add_value(card->device, devprop_list[i].name,␊ |
1268 | ␉␉␉␉␉␉devprop_list[i].default_val.type == kCst ?␊ |
1269 | ␉␉␉␉␉␉(uint8_t *)&(devprop_list[i].default_val.data) : devprop_list[i].default_val.data,␊ |
1270 | ␉␉␉␉␉␉devprop_list[i].default_val.size);␊ |
1271 | ␉␉␉␉}␊ |
1272 | ␉␉␉␉␊ |
1273 | ␉␉␉␉if (devprop_list[i].all_ports)␊ |
1274 | ␉␉␉␉{␊ |
1275 | ␉␉␉␉␉for (pnum = 1; pnum < card->ports; pnum++)␊ |
1276 | ␉␉␉␉␉{␊ |
1277 | ␉␉␉␉␉␉if (devprop_list[i].default_val.type != kNul)␊ |
1278 | ␉␉␉␉␉␉{␊ |
1279 | ␉␉␉␉␉␉␉devprop_list[i].name[1] = (uint8_t)(0x30 + pnum); // convert to ascii␊ |
1280 | ␉␉␉␉␉␉␉devprop_add_value(card->device, devprop_list[i].name,␊ |
1281 | ␉␉␉␉␉␉␉␉devprop_list[i].default_val.type == kCst ?␊ |
1282 | ␉␉␉␉␉␉␉␉(uint8_t *)&(devprop_list[i].default_val.data) : devprop_list[i].default_val.data,␊ |
1283 | ␉␉␉␉␉␉␉␉devprop_list[i].default_val.size);␊ |
1284 | ␉␉␉␉␉␉}␊ |
1285 | ␉␉␉␉␉}␊ |
1286 | ␉␉␉␉␉devprop_list[i].name[1] = 0x30; // write back our "@0," for a next possible card␊ |
1287 | ␉␉␉␉}␊ |
1288 | ␉␉␉}␊ |
1289 | ␉␉}␊ |
1290 | ␉}␊ |
1291 | ␊ |
1292 | ␉free(val);␊ |
1293 | }␊ |
1294 | ␊ |
1295 | bool validate_rom(option_rom_header_t *rom_header, pci_dt_t *pci_dev)␊ |
1296 | {␊ |
1297 | ␉option_rom_pci_header_t *rom_pci_header;␊ |
1298 | ␉␊ |
1299 | ␉if (rom_header->signature != 0xaa55)␊ |
1300 | ␉{␊ |
1301 | ␉␉//verbose("invalid ROM signature %x\n", rom_header->signature);␊ |
1302 | ␉␉return false;␊ |
1303 | ␉}␊ |
1304 | ␊ |
1305 | ␉rom_pci_header = (option_rom_pci_header_t *)((uint8_t *)rom_header + rom_header->pci_header_offset);␊ |
1306 | ␉␊ |
1307 | ␉if (rom_pci_header->signature != 0x52494350)␊ |
1308 | ␉{␊ |
1309 | ␉␉//verbose("invalid ROM header %x\n", rom_pci_header->signature);␊ |
1310 | ␉␉return false;␊ |
1311 | ␉}␊ |
1312 | ␉␊ |
1313 | ␉if (rom_pci_header->vendor_id != pci_dev->vendor_id || rom_pci_header->device_id != pci_dev->device_id)␊ |
1314 | ␉{␊ |
1315 | ␉␉//verbose("invalid ROM vendor=%x deviceID=%d\n", rom_pci_header->vendor_id, rom_pci_header->device_id);␊ |
1316 | ␉␉return false;␊ |
1317 | ␉}␊ |
1318 | ␉␊ |
1319 | ␉return true;␊ |
1320 | }␊ |
1321 | ␊ |
1322 | bool load_vbios_file(const char *key, uint16_t vendor_id, uint16_t device_id, uint32_t subsys_id)␊ |
1323 | {␊ |
1324 | ␉int fd;␊ |
1325 | ␉char file_name[64];␊ |
1326 | ␉bool do_load = false;␊ |
1327 | ␊ |
1328 | ␉getBoolForKey(key, &do_load, &bootInfo->chameleonConfig);␊ |
1329 | ␉if (!do_load)␊ |
1330 | ␉{␊ |
1331 | ␉␉return false;␊ |
1332 | ␉}␊ |
1333 | ␊ |
1334 | ␉sprintf(file_name, "/Extra/%04x_%04x_%08x.rom", vendor_id, device_id, subsys_id);␊ |
1335 | ␉if ((fd = open_bvdev("bt(0,0)", file_name, 0)) < 0)␊ |
1336 | ␉{␊ |
1337 | ␉␉return false;␊ |
1338 | ␉}␊ |
1339 | ␊ |
1340 | ␉card->rom_size = file_size(fd);␊ |
1341 | ␉card->rom = malloc(card->rom_size);␊ |
1342 | ␉if (!card->rom)␊ |
1343 | ␉{␊ |
1344 | ␉␉return false;␊ |
1345 | ␉}␊ |
1346 | ␊ |
1347 | ␉read(fd, (char *)card->rom, card->rom_size);␊ |
1348 | ␊ |
1349 | ␉if (!validate_rom((option_rom_header_t *)card->rom, card->pci_dev))␊ |
1350 | ␉{␊ |
1351 | ␉␉verbose("validate_rom fails\n");␊ |
1352 | ␉␉card->rom_size = 0;␊ |
1353 | ␉␉card->rom = 0;␊ |
1354 | ␉␉return false;␊ |
1355 | ␉}␊ |
1356 | ␉␊ |
1357 | ␉card->rom_size = ((option_rom_header_t *)card->rom)->rom_size * 512;␊ |
1358 | ␊ |
1359 | ␉close(fd);␊ |
1360 | ␊ |
1361 | ␉return true;␊ |
1362 | }␊ |
1363 | ␊ |
1364 | void get_vram_size(void)␊ |
1365 | {␊ |
1366 | ␉ati_chip_family_t chip_family = card->info->chip_family;␊ |
1367 | ␊ |
1368 | ␉card->vram_size = 0;␊ |
1369 | ␊ |
1370 | ␉if (chip_family >= CHIP_FAMILY_CEDAR)␊ |
1371 | ␉{␊ |
1372 | ␉␉// size in MB on evergreen␊ |
1373 | ␉␉// XXX watch for overflow!!!␊ |
1374 | ␉␉card->vram_size = RegRead32(R600_CONFIG_MEMSIZE) * 1024 * 1024;␊ |
1375 | ␉}␊ |
1376 | ␉else if (chip_family >= CHIP_FAMILY_R600)␊ |
1377 | ␉{␊ |
1378 | ␉␉card->vram_size = RegRead32(R600_CONFIG_MEMSIZE);␊ |
1379 | ␉}␊ |
1380 | ␉else␊ |
1381 | ␉{␊ |
1382 | ␉␉card->vram_size = RegRead32(RADEON_CONFIG_MEMSIZE);␊ |
1383 | ␉␉if (card->vram_size == 0)␊ |
1384 | ␉␉{␊ |
1385 | ␉␉␉card->vram_size = RegRead32(RADEON_CONFIG_APER_SIZE);␊ |
1386 | ␉␉␉//Slice - previously I successfully made Radeon9000 working␊ |
1387 | ␉␉␉//by writing this register␊ |
1388 | ␉␉␉RegWrite32(RADEON_CONFIG_MEMSIZE, (uint32_t)card->vram_size);␊ |
1389 | ␉␉}␊ |
1390 | ␉}␊ |
1391 | }␊ |
1392 | ␊ |
1393 | bool read_vbios(bool from_pci)␊ |
1394 | {␊ |
1395 | ␉option_rom_header_t *rom_addr;␊ |
1396 | ␉␊ |
1397 | ␉if (from_pci)␊ |
1398 | ␉{␊ |
1399 | ␉␉rom_addr = (option_rom_header_t *)(pci_config_read32(card->pci_dev->dev.addr, PCI_ROM_ADDRESS) & ~0x7ff);␊ |
1400 | ␉␉verbose(" @0x%x\n", (unsigned) rom_addr);␊ |
1401 | ␉}␊ |
1402 | ␉else␊ |
1403 | ␉{␊ |
1404 | ␉␉rom_addr = (option_rom_header_t *)0xc0000;␊ |
1405 | ␉}␊ |
1406 | ␉␊ |
1407 | ␉if (!validate_rom(rom_addr, card->pci_dev))␊ |
1408 | ␉{␊ |
1409 | ␉␉verbose("There is no ROM @0x%x\n", (unsigned) rom_addr);␊ |
1410 | ␉␉return false;␊ |
1411 | ␉}␊ |
1412 | ␉card->rom_size = rom_addr->rom_size * 512;␊ |
1413 | ␉if (!card->rom_size)␊ |
1414 | ␉{␊ |
1415 | ␉␉return false;␊ |
1416 | ␉}␊ |
1417 | ␉␊ |
1418 | ␉card->rom = malloc(card->rom_size);␊ |
1419 | ␉if (!card->rom)␊ |
1420 | ␉{␊ |
1421 | ␉␉return false;␊ |
1422 | ␉}␊ |
1423 | ␉␊ |
1424 | ␉memcpy(card->rom, (void *)rom_addr, card->rom_size);␊ |
1425 | ␉␊ |
1426 | ␉return true;␊ |
1427 | }␊ |
1428 | ␊ |
1429 | bool read_disabled_vbios(void)␊ |
1430 | {␊ |
1431 | ␉bool ret = false;␊ |
1432 | ␉ati_chip_family_t chip_family = card->info->chip_family;␊ |
1433 | ␉␊ |
1434 | ␉if (chip_family >= CHIP_FAMILY_RV770)␊ |
1435 | ␉{␊ |
1436 | ␉␉uint32_t viph_control␉␉= RegRead32(RADEON_VIPH_CONTROL);␊ |
1437 | ␉␉uint32_t bus_cntl␉␉= RegRead32(RADEON_BUS_CNTL);␊ |
1438 | ␉␉uint32_t d1vga_control␉␉= RegRead32(AVIVO_D1VGA_CONTROL);␊ |
1439 | ␉␉uint32_t d2vga_control␉␉= RegRead32(AVIVO_D2VGA_CONTROL);␊ |
1440 | ␉␉uint32_t vga_render_control␉= RegRead32(AVIVO_VGA_RENDER_CONTROL);␊ |
1441 | ␉␉uint32_t rom_cntl␉␉= RegRead32(R600_ROM_CNTL);␊ |
1442 | ␉␉uint32_t cg_spll_func_cntl␉= 0;␊ |
1443 | ␉␉uint32_t cg_spll_status;␊ |
1444 | ␉␉␊ |
1445 | ␉␉// disable VIP␊ |
1446 | ␉␉RegWrite32(RADEON_VIPH_CONTROL, (viph_control & ~RADEON_VIPH_EN));␊ |
1447 | ␉␉␊ |
1448 | ␉␉// enable the rom␊ |
1449 | ␉␉RegWrite32(RADEON_BUS_CNTL, (bus_cntl & ~RADEON_BUS_BIOS_DIS_ROM));␊ |
1450 | ␉␉␊ |
1451 | ␉␉// Disable VGA mode␊ |
1452 | ␉␉RegWrite32(AVIVO_D1VGA_CONTROL, (d1vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE | AVIVO_DVGA_CONTROL_TIMING_SELECT)));␊ |
1453 | ␉␉RegWrite32(AVIVO_D2VGA_CONTROL, (d2vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE | AVIVO_DVGA_CONTROL_TIMING_SELECT)));␊ |
1454 | ␉␉RegWrite32(AVIVO_VGA_RENDER_CONTROL, (vga_render_control & ~AVIVO_VGA_VSTATUS_CNTL_MASK));␊ |
1455 | ␉␉␊ |
1456 | ␉␉if (chip_family == CHIP_FAMILY_RV730)␊ |
1457 | ␉␉{␊ |
1458 | ␉␉␉cg_spll_func_cntl = RegRead32(R600_CG_SPLL_FUNC_CNTL);␊ |
1459 | ␉␉␉␊ |
1460 | ␉␉␉// enable bypass mode␊ |
1461 | ␉␉␉RegWrite32(R600_CG_SPLL_FUNC_CNTL, (cg_spll_func_cntl | R600_SPLL_BYPASS_EN));␊ |
1462 | ␉␉␉␊ |
1463 | ␉␉␉// wait for SPLL_CHG_STATUS to change to 1␊ |
1464 | ␉␉␉cg_spll_status = 0;␊ |
1465 | ␉␉␉while (!(cg_spll_status & R600_SPLL_CHG_STATUS))␊ |
1466 | ␉␉␉{␊ |
1467 | ␉␉␉␉cg_spll_status = RegRead32(R600_CG_SPLL_STATUS);␊ |
1468 | ␉␉␉}␊ |
1469 | ␉␉␉␊ |
1470 | ␉␉␉RegWrite32(R600_ROM_CNTL, (rom_cntl & ~R600_SCK_OVERWRITE));␊ |
1471 | ␉␉}␊ |
1472 | ␉␉else␊ |
1473 | ␉␉{␊ |
1474 | ␉␉␉RegWrite32(R600_ROM_CNTL, (rom_cntl | R600_SCK_OVERWRITE));␊ |
1475 | ␉␉}␊ |
1476 | ␊ |
1477 | ␉␉ret = read_vbios(true);␊ |
1478 | ␉␉␊ |
1479 | ␉␉// restore regs␊ |
1480 | ␉␉if (chip_family == CHIP_FAMILY_RV730)␊ |
1481 | ␉␉{␊ |
1482 | ␉␉␉RegWrite32(R600_CG_SPLL_FUNC_CNTL, cg_spll_func_cntl);␊ |
1483 | ␉␉␉␊ |
1484 | ␉␉␉// wait for SPLL_CHG_STATUS to change to 1␊ |
1485 | ␉␉␉cg_spll_status = 0;␊ |
1486 | ␉␉␉while (!(cg_spll_status & R600_SPLL_CHG_STATUS))␊ |
1487 | ␉␉␉cg_spll_status = RegRead32(R600_CG_SPLL_STATUS);␊ |
1488 | ␉␉}␊ |
1489 | ␉␉RegWrite32(RADEON_VIPH_CONTROL, viph_control);␊ |
1490 | ␉␉RegWrite32(RADEON_BUS_CNTL, bus_cntl);␊ |
1491 | ␉␉RegWrite32(AVIVO_D1VGA_CONTROL, d1vga_control);␊ |
1492 | ␉␉RegWrite32(AVIVO_D2VGA_CONTROL, d2vga_control);␊ |
1493 | ␉␉RegWrite32(AVIVO_VGA_RENDER_CONTROL, vga_render_control);␊ |
1494 | ␉␉RegWrite32(R600_ROM_CNTL, rom_cntl);␊ |
1495 | ␉} else if (chip_family >= CHIP_FAMILY_R600) {␊ |
1496 | ␉␉uint32_t viph_control␉␉␉␉= RegRead32(RADEON_VIPH_CONTROL);␊ |
1497 | ␉␉uint32_t bus_cntl␉␉␉␉= RegRead32(RADEON_BUS_CNTL);␊ |
1498 | ␉␉uint32_t d1vga_control␉␉␉␉= RegRead32(AVIVO_D1VGA_CONTROL);␊ |
1499 | ␉␉uint32_t d2vga_control␉␉␉␉= RegRead32(AVIVO_D2VGA_CONTROL);␊ |
1500 | ␉␉uint32_t vga_render_control␉␉␉= RegRead32(AVIVO_VGA_RENDER_CONTROL);␊ |
1501 | ␉␉uint32_t rom_cntl␉␉␉␉= RegRead32(R600_ROM_CNTL);␊ |
1502 | ␉␉uint32_t general_pwrmgt␉␉␉␉= RegRead32(R600_GENERAL_PWRMGT);␊ |
1503 | ␉␉uint32_t low_vid_lower_gpio_cntl␉␉= RegRead32(R600_LOW_VID_LOWER_GPIO_CNTL);␊ |
1504 | ␉␉uint32_t medium_vid_lower_gpio_cntl␉␉= RegRead32(R600_MEDIUM_VID_LOWER_GPIO_CNTL);␊ |
1505 | ␉␉uint32_t high_vid_lower_gpio_cntl␉␉= RegRead32(R600_HIGH_VID_LOWER_GPIO_CNTL);␊ |
1506 | ␉␉uint32_t ctxsw_vid_lower_gpio_cntl␉␉= RegRead32(R600_CTXSW_VID_LOWER_GPIO_CNTL);␊ |
1507 | ␉␉uint32_t lower_gpio_enable␉␉␉= RegRead32(R600_LOWER_GPIO_ENABLE);␊ |
1508 | ␊ |
1509 | ␉␉// disable VIP␊ |
1510 | ␉␉RegWrite32(RADEON_VIPH_CONTROL, (viph_control & ~RADEON_VIPH_EN));␊ |
1511 | ␊ |
1512 | ␉␉// enable the rom␊ |
1513 | ␉␉RegWrite32(RADEON_BUS_CNTL, (bus_cntl & ~RADEON_BUS_BIOS_DIS_ROM));␊ |
1514 | ␊ |
1515 | ␉␉// Disable VGA mode␊ |
1516 | ␉␉RegWrite32(AVIVO_D1VGA_CONTROL, (d1vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE | AVIVO_DVGA_CONTROL_TIMING_SELECT)));␊ |
1517 | ␉␉RegWrite32(AVIVO_D2VGA_CONTROL, (d2vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE | AVIVO_DVGA_CONTROL_TIMING_SELECT)));␊ |
1518 | ␉␉RegWrite32(AVIVO_VGA_RENDER_CONTROL, (vga_render_control & ~AVIVO_VGA_VSTATUS_CNTL_MASK));␊ |
1519 | ␉␉RegWrite32(R600_ROM_CNTL, ((rom_cntl & ~R600_SCK_PRESCALE_CRYSTAL_CLK_MASK) | (1 << R600_SCK_PRESCALE_CRYSTAL_CLK_SHIFT) | R600_SCK_OVERWRITE));␊ |
1520 | ␉␉RegWrite32(R600_GENERAL_PWRMGT, (general_pwrmgt & ~R600_OPEN_DRAIN_PADS));␊ |
1521 | ␉␉RegWrite32(R600_LOW_VID_LOWER_GPIO_CNTL, (low_vid_lower_gpio_cntl & ~0x400));␊ |
1522 | ␉␉RegWrite32(R600_MEDIUM_VID_LOWER_GPIO_CNTL, (medium_vid_lower_gpio_cntl & ~0x400));␊ |
1523 | ␉␉RegWrite32(R600_HIGH_VID_LOWER_GPIO_CNTL, (high_vid_lower_gpio_cntl & ~0x400));␊ |
1524 | ␉␉RegWrite32(R600_CTXSW_VID_LOWER_GPIO_CNTL, (ctxsw_vid_lower_gpio_cntl & ~0x400));␊ |
1525 | ␉␉RegWrite32(R600_LOWER_GPIO_ENABLE, (lower_gpio_enable | 0x400));␊ |
1526 | ␊ |
1527 | ␉␉ret = read_vbios(true);␊ |
1528 | ␊ |
1529 | ␉␉// restore regs␊ |
1530 | ␉␉RegWrite32(RADEON_VIPH_CONTROL, viph_control);␊ |
1531 | ␉␉RegWrite32(RADEON_BUS_CNTL, bus_cntl);␊ |
1532 | ␉␉RegWrite32(AVIVO_D1VGA_CONTROL, d1vga_control);␊ |
1533 | ␉␉RegWrite32(AVIVO_D2VGA_CONTROL, d2vga_control);␊ |
1534 | ␉␉RegWrite32(AVIVO_VGA_RENDER_CONTROL, vga_render_control);␊ |
1535 | ␉␉RegWrite32(R600_ROM_CNTL, rom_cntl);␊ |
1536 | ␉␉RegWrite32(R600_GENERAL_PWRMGT, general_pwrmgt);␊ |
1537 | ␉␉RegWrite32(R600_LOW_VID_LOWER_GPIO_CNTL, low_vid_lower_gpio_cntl);␊ |
1538 | ␉␉RegWrite32(R600_MEDIUM_VID_LOWER_GPIO_CNTL, medium_vid_lower_gpio_cntl);␊ |
1539 | ␉␉RegWrite32(R600_HIGH_VID_LOWER_GPIO_CNTL, high_vid_lower_gpio_cntl);␊ |
1540 | ␉␉RegWrite32(R600_CTXSW_VID_LOWER_GPIO_CNTL, ctxsw_vid_lower_gpio_cntl);␊ |
1541 | ␉␉RegWrite32(R600_LOWER_GPIO_ENABLE, lower_gpio_enable);␊ |
1542 | ␉}␊ |
1543 | ␊ |
1544 | ␉return ret;␊ |
1545 | }␊ |
1546 | ␊ |
1547 | bool radeon_card_posted(void)␊ |
1548 | {␊ |
1549 | ␉uint32_t reg;␊ |
1550 | ␊ |
1551 | ␉// first check CRTCs␊ |
1552 | ␉reg = RegRead32(RADEON_CRTC_GEN_CNTL) | RegRead32(RADEON_CRTC2_GEN_CNTL);␊ |
1553 | ␉if (reg & RADEON_CRTC_EN)␊ |
1554 | ␉{␊ |
1555 | ␉␉return true;␊ |
1556 | ␉}␊ |
1557 | ␉␊ |
1558 | ␉// then check MEM_SIZE, in case something turned the crtcs off␊ |
1559 | ␉reg = RegRead32(R600_CONFIG_MEMSIZE);␊ |
1560 | ␉if (reg)␊ |
1561 | ␉{␊ |
1562 | ␉␉return true;␊ |
1563 | ␉}␊ |
1564 | ␉␊ |
1565 | ␉return false;␊ |
1566 | }␊ |
1567 | ␊ |
1568 | #if 0␊ |
1569 | bool devprop_add_pci_config_space(void)␊ |
1570 | {␊ |
1571 | ␉int offset;␊ |
1572 | ␉␊ |
1573 | ␉uint8_t *config_space = malloc(0x100);␊ |
1574 | ␉if (!config_space)␊ |
1575 | ␉{␊ |
1576 | ␉␉return false;␊ |
1577 | ␉}␊ |
1578 | ␉␊ |
1579 | ␉for (offset = 0; offset < 0x100; offset += 4)␊ |
1580 | ␉{␊ |
1581 | ␉␉config_space[offset / 4] = pci_config_read32(card->pci_dev->dev.addr, offset);␊ |
1582 | ␉}␊ |
1583 | ␉␊ |
1584 | ␉devprop_add_value(card->device, "ATY,PCIConfigSpace", config_space, 0x100);␊ |
1585 | ␉free(config_space);␊ |
1586 | ␉␊ |
1587 | ␉return true;␊ |
1588 | }␊ |
1589 | #endif␊ |
1590 | ␊ |
1591 | static char␉name[24];␊ |
1592 | static char␉name_parent[24];␊ |
1593 | ␊ |
1594 | static bool init_card(pci_dt_t *pci_dev)␊ |
1595 | {␊ |
1596 | ␉bool␉add_vbios = true;␊ |
1597 | ␉int␉i;␊ |
1598 | ␉int␉n_ports = 0;␊ |
1599 | ␊ |
1600 | ␉card = malloc(sizeof(card_t));␊ |
1601 | ␉if (!card)␊ |
1602 | ␉{␊ |
1603 | ␉␉return false;␊ |
1604 | ␉}␊ |
1605 | ␉bzero(card, sizeof(card_t));␊ |
1606 | ␊ |
1607 | ␉card->pci_dev = pci_dev;␊ |
1608 | ␉␊ |
1609 | ␉for (i = 0; radeon_cards[i].device_id ; i++)␊ |
1610 | ␉{␊ |
1611 | ␉␉if (radeon_cards[i].device_id == pci_dev->device_id)␊ |
1612 | ␉␉{␊ |
1613 | ␉␉␉if ((radeon_cards[i].subsys_id == 0x00000000) || (radeon_cards[i].subsys_id == pci_dev->subsys_id.subsys_id))␊ |
1614 | ␉␉␉{␊ |
1615 | ␉␉␉␉card->info = &radeon_cards[i];␊ |
1616 | ␉␉␉␉break;␊ |
1617 | ␉␉␉}␊ |
1618 | ␉␉}␊ |
1619 | ␉}␊ |
1620 | ␊ |
1621 | ␉if (card->info == NULL) // Jief␊ |
1622 | ␉{␊ |
1623 | ␉␉DBG("Unsupported ATI card! Device ID: [%04x:%04x] Subsystem ID: [%04x:%04x] \n", ␊ |
1624 | ␉␉␉␉pci_dev->vendor_id, pci_dev->device_id, pci_dev->subsys_id.subsys.vendor_id, pci_dev->subsys_id.subsys.device_id);␊ |
1625 | ␉␉return false;␊ |
1626 | ␉}␊ |
1627 | ␉DBG("Found ATI card! Device ID:[%04X:%04X] Subsystem ID:[%08X] - Radeon [%04X:%08X] %s\n", ␊ |
1628 | ␉␉pci_dev->vendor_id, pci_dev->device_id, pci_dev->subsys_id.subsys_id, card->info->device_id, card->info->subsys_id, card->info->model_name);␊ |
1629 | ␉␊ |
1630 | ␉card->fb␉␉= (uint8_t *)(pci_config_read32(pci_dev->dev.addr, PCI_BASE_ADDRESS_0) & ~0x0f);␊ |
1631 | ␉card->mmio␉␉= (uint8_t *)(pci_config_read32(pci_dev->dev.addr, PCI_BASE_ADDRESS_2) & ~0x0f);␊ |
1632 | ␉card->io␉␉= (uint8_t *)(pci_config_read32(pci_dev->dev.addr, PCI_BASE_ADDRESS_4) & ~0x03);␊ |
1633 | ␊ |
1634 | ␉DBG("Framebuffer @0x%08X MMIO @0x%08X␉I/O Port @0x%08X ROM Addr @0x%08X\n",␊ |
1635 | ␉␉(unsigned) card->fb, (unsigned) card->mmio, (unsigned) card->io, pci_config_read32(pci_dev->dev.addr, PCI_ROM_ADDRESS));␊ |
1636 | ␊ |
1637 | ␉card->posted = radeon_card_posted();␊ |
1638 | ␉DBG("ATI card %s, ", card->posted ? "POSTed" : "non-POSTed");␊ |
1639 | ␉DBG("\n");␊ |
1640 | ␉get_vram_size();␊ |
1641 | ␊ |
1642 | ␉getBoolForKey(kATYbinimage, &add_vbios, &bootInfo->chameleonConfig);␊ |
1643 | ␊ |
1644 | ␉if (add_vbios)␊ |
1645 | ␉{␊ |
1646 | ␉␉if (!load_vbios_file(kUseAtiROM, pci_dev->vendor_id, pci_dev->device_id, pci_dev->subsys_id.subsys_id))␊ |
1647 | ␉␉{␊ |
1648 | ␉␉␉DBG("reading Video BIOS from %s", card->posted ? "legacy space" : "PCI ROM");␊ |
1649 | ␉␉␉if (card->posted)␊ |
1650 | ␉␉␉{␊ |
1651 | ␉␉␉␉read_vbios(false);␊ |
1652 | ␉␉␉}␊ |
1653 | ␉␉␉else␊ |
1654 | ␉␉␉{␊ |
1655 | ␉␉␉␉read_disabled_vbios();␊ |
1656 | ␉␉␉}␊ |
1657 | ␉␉␉verbose("Video BIOS read from file\n");␊ |
1658 | ␉␉}␊ |
1659 | ␉}␊ |
1660 | ␊ |
1661 | ␊ |
1662 | ␉if (card->info->chip_family >= CHIP_FAMILY_CEDAR)␊ |
1663 | ␉{␊ |
1664 | ␉␉DBG("ATI Radeon EVERGREEN family\n");␊ |
1665 | ␉␉card->flags |= EVERGREEN;␊ |
1666 | ␉}␊ |
1667 | ␊ |
1668 | ␉if (card->info->chip_family >= CHIP_FAMILY_RV670)␊ |
1669 | ␉{␊ |
1670 | ␉␉DBG("ATI Radeon Old family\n");␊ |
1671 | ␉␉card->flags |= FLAGOLD;␊ |
1672 | ␉}␊ |
1673 | ␊ |
1674 | ␉card->flags |= FLAGNOTFAKE;␊ |
1675 | ␊ |
1676 | ␉// Check AtiConfig key for a framebuffer name,␊ |
1677 | ␉card->cfg_name = getStringForKey(kAtiConfig, &bootInfo->chameleonConfig);␊ |
1678 | ␊ |
1679 | ␉// if none,␊ |
1680 | ␉if (!card->cfg_name)␊ |
1681 | ␉{␊ |
1682 | ␉␉// use cfg_name on radeon_cards, to retrive the default name from card_configs,␊ |
1683 | ␉␉card->cfg_name = card_configs[card->info->cfg_name].name;␊ |
1684 | ␉␉␊ |
1685 | ␉␉// which means one of the fb's or kNull␊ |
1686 | ␉␉DBG("Framebuffer set to device's default: %s\n", card->cfg_name);␊ |
1687 | ␉} else ␉{␊ |
1688 | ␉␉// else, use the fb name returned by AtiConfig.␊ |
1689 | ␉␉verbose("(AtiConfig) Framebuffer set to: %s\n", card->cfg_name);␊ |
1690 | ␉}␊ |
1691 | ␊ |
1692 | ␉// Check AtiPorts key for nr of ports,␊ |
1693 | ␉card->ports = getIntForKey(kAtiPorts, &n_ports, &bootInfo->chameleonConfig);␊ |
1694 | ␉// if a value bigger than 0 ?? is found, (do we need >= 0 ?? that's null FB on card_configs)␊ |
1695 | ␉if (n_ports > 0)␊ |
1696 | ␉{␊ |
1697 | ␉␉card->ports = (uint8_t)n_ports; // use it.␊ |
1698 | ␉␉DBG("(AtiPorts) Nr of ports set to: %d\n", card->ports);␊ |
1699 | ␉} else {␊ |
1700 | ␉␉// else, match cfg_name with card_configs list and retrive default nr of ports.␊ |
1701 | ␉␉for (i = 0; i < kCfgEnd; i++)␊ |
1702 | ␉␉{␊ |
1703 | ␉␉␉if (strcmp(card->cfg_name, card_configs[i].name) == 0)␊ |
1704 | ␉␉␉{␊ |
1705 | ␉␉␉␉card->ports = card_configs[i].ports; // default␊ |
1706 | ␉␉␉}␊ |
1707 | ␉␉}␊ |
1708 | ␊ |
1709 | ␉␉DBG("Nr of ports set to framebuffer's default: %d\n", card->ports);␊ |
1710 | ␉}␊ |
1711 | ␊ |
1712 | ␊ |
1713 | ␉sprintf(name, "ATY,%s", card->cfg_name);␊ |
1714 | ␉aty_name.type = kStr;␊ |
1715 | ␉aty_name.size = (uint32_t)strlen(name);␊ |
1716 | ␉aty_name.data = (uint8_t *)name;␊ |
1717 | ␊ |
1718 | ␉sprintf(name_parent, "ATY,%sParent", card->cfg_name);␊ |
1719 | ␉aty_nameparent.type = kStr;␊ |
1720 | ␉aty_nameparent.size = (uint32_t)strlen(name_parent);␊ |
1721 | ␉aty_nameparent.data = (uint8_t *)name_parent;␊ |
1722 | ␉␊ |
1723 | ␉return true;␊ |
1724 | }␊ |
1725 | ␊ |
1726 | bool setup_ati_devprop(pci_dt_t *ati_dev)␊ |
1727 | {␊ |
1728 | //␉static char compatible[64];␊ |
1729 | ␉char *devicepath;␊ |
1730 | ␊ |
1731 | ␉verbose("\tClass code: [%04X]\n", ati_dev->class_id );␊ |
1732 | ␊ |
1733 | ␉if (!init_card(ati_dev))␊ |
1734 | ␉{␊ |
1735 | ␉␉return false;␊ |
1736 | ␉}␊ |
1737 | ␊ |
1738 | ␉// -------------------------------------------------␊ |
1739 | ␉// Find a better way to do this (in device_inject.c)␊ |
1740 | ␉if (!string)␊ |
1741 | ␉{␊ |
1742 | ␉␉string = devprop_create_string();␊ |
1743 | ␉}␊ |
1744 | ␉devicepath = get_pci_dev_path(ati_dev);␊ |
1745 | ␉card->device = devprop_add_device(string, devicepath);␊ |
1746 | ␉if (!card->device)␊ |
1747 | ␉{␊ |
1748 | ␉␉return false;␊ |
1749 | ␉}␊ |
1750 | ␉// -------------------------------------------------␊ |
1751 | ␊ |
1752 | ␉if (getBoolForKey(kUseIntelHDMI, &doit, &bootInfo->chameleonConfig) && doit)␊ |
1753 | ␉{␊ |
1754 | ␉␉devprop_add_value(card->device, "hda-gfx", (uint8_t *)"onboard-2", 10);␊ |
1755 | ␉}␊ |
1756 | ␉else␊ |
1757 | ␉{␊ |
1758 | ␉␉devprop_add_value(card->device, "hda-gfx", (uint8_t *)"onboard-1", 10);␊ |
1759 | ␉}␊ |
1760 | ␊ |
1761 | #if 0␊ |
1762 | ␉uint64_t fb␉= (uint32_t)card->fb;␊ |
1763 | ␉uint64_t mmio␉= (uint32_t)card->mmio;␊ |
1764 | ␉uint64_t io␉= (uint32_t)card->io;␊ |
1765 | ␉devprop_add_value(card->device, "ATY,FrameBufferOffset", &fb, 8);␊ |
1766 | ␉devprop_add_value(card->device, "ATY,RegisterSpaceOffset", &mmio, 8);␊ |
1767 | ␉devprop_add_value(card->device, "ATY,IOSpaceOffset", &io, 8);␊ |
1768 | #endif␊ |
1769 | ␊ |
1770 | ␉devprop_add_list(ati_devprop_list);␊ |
1771 | ␊ |
1772 | ␉// -------------------------------------------------␊ |
1773 | ␉// Find a better way to do this (in device_inject.c)␊ |
1774 | ␉//Azi: XXX tried to fix a malloc error in vain; this is related to XCode 4 compilation!␊ |
1775 | ␉stringdata = malloc(sizeof(uint8_t) * string->length);␊ |
1776 | ␉memcpy(stringdata, (uint8_t*)devprop_generate_string(string), string->length);␊ |
1777 | ␉stringlength = string->length;␊ |
1778 | ␉// -------------------------------------------------␊ |
1779 | ␊ |
1780 | ␉DBG("\tATI %s %s %dMB (%s) [%04x:%04x] (subsys [%04x:%04x])\n\t%s\n",␊ |
1781 | ␉␉␉chip_family_name[card->info->chip_family], card->info->model_name,␊ |
1782 | ␉␉␉(uint32_t)(card->vram_size / (1024 * 1024)), card->cfg_name,␊ |
1783 | ␉␉␉ati_dev->vendor_id, ati_dev->device_id,␊ |
1784 | ␉␉␉ati_dev->subsys_id.subsys.vendor_id, ati_dev->subsys_id.subsys.device_id,␊ |
1785 | ␉␉␉devicepath);␊ |
1786 | ␊ |
1787 | ␉free(card);␊ |
1788 | ␊ |
1789 | ␉return true;␊ |
1790 | }␊ |
1791 | |