ati.c ATI顯卡開發源代碼

/*
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 "ati.h"
9	
10	
11	static const char *chip_family_name[] = {
12	"UNKNOW",
13	"R420",
14	"RV410",
15	"RV515",
16	"R520",
17	"RV530",
18	"RV560",
19	"RV570",
20	"R580",
21	/* IGP */
22	"RS600",
23	"RS690",
24	"RS740",
25	"RS780",
26	"RS880",
27	/* R600 */
28	"R600",
29	"RV610",
30	"RV620",
31	"RV630",
32	"RV635",
33	"RV670",
34	/* R700 */
35	"RV710",
36	"RV730",
37	"RV740",
38	"RV772",
39	"RV770",
40	"RV790",
41	/* Evergreen */
42	"Cedar",
43	"Cypress",
44	"Hemlock",
45	"Juniper",
46	"Redwood",
47	"Broadway",
48	//"Madison",
49	//"Park",
50	/* Northern Islands */
51	//"Antilles",
52	"Barts",
53	"Caicos",
54	"Cayman",
55	"Turks",
56	/* Southern Islands */
57	"Tahiti",
58	"Pitcairn",
59	//"CapeVerde",
60	//"Thames",
61	//"Lombok",
62	//"NewZealand",
63	""
64	};
65	
66	
67	static card_config_t card_configs[] = {
68	{NULL,0},
69	/* OLDController */
70	{"Wormy",2},
71	{"Alopias",2},
72	{"Caretta",1},
73	{"Kakapo",3},
74	{"Kipunji",4},
75	{"Peregrine",2},
76	{"Raven",3},
77	{"Sphyrna",1},
78	/* AMD2400Controller */
79	{"Iago",2},
80	/* AMD2600Controller */
81	{"Hypoprion",2},
82	{"Lamna",2},
83	/* AMD3800Controller */
84	{"Megalodon",3},
85	{"Triakis",2},
86	/* AMD4600Controller */
87	{"Flicker",3},
88	{"Gliff",3},
89	{"Shrike",3},
90	/* AMD4800Controller */
91	{"Cardinal",2},
92	{"Motmot",2},
93	{"Quail",3},
94	/* AMD5000Controller */
95	{"Douc",2},
96	{"Langur",3},
97	{"Uakari",4},
98	{"Zonalis",6},
99	{"Alouatta",4},
100	{"Hoolock",3},
101	{"Vervet",4},
102	{"Baboon",3},
103	{"Eulemur",3},
104	{"Galago",2},
105	{"Colobus",2},
106	{"Mangabey",2},
107	{"Nomascus",4},
108	{"Orangutan",2},
109	/* AMD6000Controller */
110	{"Pithecia",3},
111	{"Bulrushes",6},
112	{"Cattail",4},
113	{"Hydrilla",5},
114	{"Duckweed",4},
115	{"Fanwort",4},
116	{"Elodea",5},
117	{"Kudzu",2},
118	{"Gibba",5},
119	{"Lotus",3},
120	{"Ipomoea",3},
121	{"Muskgrass",4},
122	{"Juncus",4},
123	{"Osmunda",     4},
124	{"Pondweed",    3},
125	{"Spikerush",   4},
126	{"Typha",       5},
127	/* AMD7000Controller */
128	{"Aji",         4},
129	{"Buri",        4},
130	{"Chutoro",     5},
131	{"Dashimaki",   4},
132	{"Ebi",         5},
133	{"Gari",        5},
134	{"Futomaki",    4},
135	{"Hamachi",     4},
136	{"OPM",         6},
137	{"Ikura",       6},
138	{"IkuraS",      1}
139	};
140	
141	
142	
143	
144	
145	static radeon_card_info_t radeon_cards[] = {
146	
147	// Earlier cards are not supported
148	//
149	// Layout is device_id, subsys_id (subsystem id plus vendor id), chip_family_name, display name, frame buffer
150	// Cards are grouped by device id and vendor id then sorted by subsystem id to make it easier to add new cards
151	//
152	
153	{ 0x9400,0x01611043, CHIP_FAMILY_R600,"ATI Radeon HD 2900 XT",                kNull},
154	{ 0x9400,0x021E1043, CHIP_FAMILY_R600,"ATI Radeon HD 2900 XT",                kNull},
155	{ 0x9400,0x25521002, CHIP_FAMILY_R600,"ATI Radeon HD 2900 XT",                kNull},
156	{ 0x9400,0x30001002, CHIP_FAMILY_R600,"ATI Radeon HD 2900 PRO",               kNull},
157	{ 0x9400,0x31421002, CHIP_FAMILY_R600,"ATI Radeon HD 2900 XT",                kNull},
158	
159	{ 0x9440,0x05021002, CHIP_FAMILY_RV770,"ATI Radeon HD 4870",                   kMotmot},
160	{ 0x9440,0x0851174B, CHIP_FAMILY_RV770,"ATI Radeon HD 4870",                   kMotmot},
161	{ 0x9440,0x114A174B, CHIP_FAMILY_RV770,"Sapphire Radeon HD4870 Vapor-X",       kCardinal},
162	{ 0x9440,0x24401682, CHIP_FAMILY_RV770,"ATI Radeon HD 4870",                   kMotmot},
163	{ 0x9440,0x24411682, CHIP_FAMILY_RV770,"ATI Radeon HD 4870",                   kMotmot},
164	{ 0x9440,0x24441682, CHIP_FAMILY_RV770,"ATI Radeon HD 4870",                   kMotmot},
165	{ 0x9440,0x24451682, CHIP_FAMILY_RV770,"ATI Radeon HD 4870",                   kMotmot},
166	
167	{ 0x9441,0x02601043, CHIP_FAMILY_RV770,"ASUS EAH4870x2",                kMotmot},
168	{ 0x9441,0x02841043, CHIP_FAMILY_RV770,"ASUS EAH4870x2",                kMotmot},
169	{ 0x9441,0x24401682, CHIP_FAMILY_RV770,"ATI Radeon HD 4870 X2",                kMotmot},
170	{ 0x9441,0x25421002, CHIP_FAMILY_RV770,"PowerColor HD 4870 X2",                kMotmot},
171	
172	{ 0x9442,0x05021002, CHIP_FAMILY_RV770,"MSI R4850-T2D512",                     kMotmot},
173	{ 0x9442,0x080110B0, CHIP_FAMILY_RV770,"ATI Radeon HD 4850",                   kMotmot},
174	{ 0x9442,0x24701682, CHIP_FAMILY_RV770,"ATI Radeon HD 4850",                   kMotmot},
175	{ 0x9442,0x24711682, CHIP_FAMILY_RV770,"ATI Radeon HD 4850",                   kMotmot},
176	{ 0x9442,0xE104174B, CHIP_FAMILY_RV770,"ATI Radeon HD 4850",                   kMotmot},
177	{ 0x9442,0xE810174B, CHIP_FAMILY_RV770,"Sapphire HD 4850",                     kMotmot},
178	
179	{ 0x944A,0x02A21028, CHIP_FAMILY_RV770,"ATI Radeon HD 4850",                   kMotmot},
180	{ 0x944A,0x30001043, CHIP_FAMILY_RV770,"ATI Radeon HD 4850",                   kMotmot},
181	{ 0x944A,0x30001458, CHIP_FAMILY_RV770,"ATI Radeon HD 4850",                   kMotmot},
182	{ 0x944A,0x30001462, CHIP_FAMILY_RV770,"ATI Radeon HD 4850",                   kMotmot},
183	{ 0x944A,0x30001545, CHIP_FAMILY_RV770,"ATI Radeon HD 4850",                   kMotmot},
184	{ 0x944A,0x30001682, CHIP_FAMILY_RV770,"ATI Radeon HD 4850",                   kMotmot},
185	{ 0x944A,0x3000174B, CHIP_FAMILY_RV770,"ATI Radeon HD 4850",                   kMotmot},
186	{ 0x944A,0x30001787, CHIP_FAMILY_RV770,"ATI Radeon HD 4850",                   kMotmot},
187	{ 0x944A,0x300017AF, CHIP_FAMILY_RV770,"ATI Radeon HD 4850",                   kMotmot},
188	
189	{ 0x944C,0x05021002, CHIP_FAMILY_RV770,"ATI Radeon HD 4830",                   kMotmot},
190	{ 0x944C,0x20031787, CHIP_FAMILY_RV770,"ATI Radeon HD 4830",                   kMotmot},
191	{ 0x944C,0x24801682, CHIP_FAMILY_RV770,"ATI Radeon HD 4830",                   kMotmot},
192	{ 0x944C,0x24811682, CHIP_FAMILY_RV770,"ATI Radeon HD 4830",                   kMotmot},
193	
194	{ 0x944E,0x30001787, CHIP_FAMILY_RV770,"ATI Radeon HD 4730",                   kMotmot},
195	{ 0x944E,0x30101787, CHIP_FAMILY_RV770,"ATI Radeon HD 4810",                   kMotmot},
196	{ 0x944E,0x31001787, CHIP_FAMILY_RV770,"ATI Radeon HD 4820",                   kMotmot},
197	{ 0x944E,0x3260174B, CHIP_FAMILY_RV770,"ATI Radeon HD 4810",                   kMotmot},
198	{ 0x944E,0x3261174B, CHIP_FAMILY_RV770,"ATI Radeon HD 4810",                   kMotmot},
199	
200	{ 0x9460,0x27021682, CHIP_FAMILY_RV770,"ATI Radeon HD 4890",                   kMotmot},
201	{ 0x9460,0xE115174B, CHIP_FAMILY_RV770,"ATI Radeon HD 4890",                   kMotmot},
202	{ 0x9460,0xE118174B, CHIP_FAMILY_RV770,"ATI Radeon HD 4890",                   kMotmot},
203	
204	{ 0x9480,0x01211025, CHIP_FAMILY_RV730,"ATI Radeon HD 4650M",                  kGliff},
205	 { 0x9480,0x03111025, CHIP_FAMILY_RV730,"ATI Radeon HD 5165M",                  kNull},
206	 { 0x9480,0x03121025, CHIP_FAMILY_RV730,"ATI Radeon HD 5165M",                  kNull},
207	 { 0x9480,0x031C1025, CHIP_FAMILY_RV730,"ATI Radeon HD 5165M",                  kNull},
208	 { 0x9480,0x031D1025, CHIP_FAMILY_RV730,"ATI Radeon HD 5165M",                  kNull},
209	 { 0x9480,0x036C1025, CHIP_FAMILY_RV730,"ATI Radeon HD 5165M",                  kNull},
210	 { 0x9480,0x036D1025, CHIP_FAMILY_RV730,"ATI Radeon HD 5165M",                  kNull},
211	{ 0x9480,0x3628103C, CHIP_FAMILY_RV730,"ATI Radeon HD 4650M",                  kGliff},
212	{ 0x9480,0x9035104D, CHIP_FAMILY_RV730,"ATI Radeon HD 4650M",                  kGliff},
213	{ 0x9480,0xFD001179, CHIP_FAMILY_RV730,"ATI Radeon HD 4650M",                  kNull},
214	{ 0x9480,0xFDD01179, CHIP_FAMILY_RV730,"ATI Radeon HD 4650M",                  kNull},
215	{ 0x9480,0xFD121179, CHIP_FAMILY_RV730,"ATI Radeon HD 4650M",                  kNull},
216	{ 0x9480,0xFD501179, CHIP_FAMILY_RV730,"ATI Radeon HD 4650M",                  kNull},
217	{ 0x9480,0xFF001179, CHIP_FAMILY_RV730,"ATI Radeon HD 4600M",                  kNull},
218	{ 0x9480,0xFF151179, CHIP_FAMILY_RV730,"ATI Radeon HD 4600M",                  kNull},
219	{ 0x9480,0xFF221179, CHIP_FAMILY_RV730,"ATI Radeon HD 4600M",                  kNull},
220	{ 0x9480,0xFF501179, CHIP_FAMILY_RV730,"ATI Radeon HD 4600M",                  kNull},
221	{ 0x9480,0xFF801179, CHIP_FAMILY_RV730,"ATI Radeon HD 4600M",                  kNull},
222	{ 0x9480,0xFF821179, CHIP_FAMILY_RV730,"ATI Radeon HD 5165M",                  kNull},
223	{ 0x9480,0xFFA01179, CHIP_FAMILY_RV730,"ATI Radeon HD 4600M",                  kNull},
224	{ 0x9480,0xFFA21179, CHIP_FAMILY_RV730,"ATI Radeon HD 5165M",                  kNull},
225	
226	{ 0x9490,0x20031787, CHIP_FAMILY_RV730,"ATI Radeon HD 4670",                   kFlicker},
227	{ 0x9490,0x25421028, CHIP_FAMILY_RV730,"ATI Radeon HD 4670",                   kFlicker},
228	{ 0x9490,0x30501787, CHIP_FAMILY_RV730,"ATI Radeon HD 4710",                   kNull},
229	{ 0x9490,0x300017AF, CHIP_FAMILY_RV730,"ATI Radeon HD 4710",                   kNull},
230	{ 0x9490,0x4710174B, CHIP_FAMILY_RV730,"ATI Radeon HD 4710",                   kNull},
231	
232	{ 0x9498,0x10001043, CHIP_FAMILY_RV730,"ASUS EAHG4670",                   kNull},
233	{ 0x9498,0x20091787, CHIP_FAMILY_RV730,"ATI Radeon HD 4650",                   kNull},
234	{ 0x9498,0x21CF1458, CHIP_FAMILY_RV730,"ATI Radeon HD 4600",                   kNull},
235	{ 0x9498,0x24511682, CHIP_FAMILY_RV730,"ATI Radeon HD 4650",                   kNull},
236	{ 0x9498,0x24521682, CHIP_FAMILY_RV730,"ATI Radeon HD 4650",                   kNull},
237	{ 0x9498,0x24541682, CHIP_FAMILY_RV730,"ATI Radeon HD 4650",                   kNull},
238	{ 0x9498,0x29331682, CHIP_FAMILY_RV730,"ATI Radeon HD 4670",                   kNull},
239	{ 0x9498,0x29341682, CHIP_FAMILY_RV730,"ATI Radeon HD 4670",                   kNull},
240	{ 0x9498,0x30501787, CHIP_FAMILY_RV730,"ATI Radeon HD 4700",                   kNull},
241	{ 0x9498,0x31001787, CHIP_FAMILY_RV730,"ATI Radeon HD 4720",                   kNull},
242	
243	{ 0x94B3,0x0D001002, CHIP_FAMILY_RV740,"ATI Radeon HD 4770",                   kFlicker},
244	{ 0x94B3,0x1170174B, CHIP_FAMILY_RV740,"ATI Radeon HD 4770",                   kFlicker},
245	{ 0x94B3,0x29001682, CHIP_FAMILY_RV740,"ATI Radeon HD 4770",                   kFlicker},
246	
247	{ 0x94C1,0x0D021002, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 XT",                kNull},
248	{ 0x94C1,0x10021002, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 Pro",               kNull},
249	{ 0x94C1,0x0D021028, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 XT",                kNull},
250	{ 0x94C1,0x21741458, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 XT",                kNull},
251	{ 0x94C1,0x10331462, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 XT",                kNull},
252	{ 0x94C1,0x10401462, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 XT",                kNull},
253	{ 0x94C1,0x11101462, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 XT",                kNull},
254	
255	{ 0x94C3,0x03421002, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO",               kNull},
256	{ 0x94C3,0x01011A93, CHIP_FAMILY_RV610,"Qimonda Radeon HD 2400 PRO",kNull},
257	{ 0x94C3,0x03021028, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO",               kNull},
258	{ 0x94C3,0x03421002, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO",               kNull},
259	{ 0x94C3,0x04021028, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO",               kNull},
260	{ 0x94C3,0x10321462, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO",               kNull},
261	{ 0x94C3,0x10411462, CHIP_FAMILY_RV610,"ATI Radeon HD 2400",                   kNull},
262	{ 0x94C3,0x11041462, CHIP_FAMILY_RV610,"ATI Radeon HD 2400",                   kNull},
263	{ 0x94C3,0x11051462, CHIP_FAMILY_RV610,"ATI Radeon HD 2400",                   kNull},
264	{ 0x94C3,0x203817AF, CHIP_FAMILY_RV610,"ATI Radeon HD 2400",                   kNull},
265	{ 0x94C3,0x216A1458, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO",               kNull},
266	{ 0x94C3,0x21721458, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO",               kNull},
267	{ 0x94C3,0x2247148C, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 LE",                kNull},
268	{ 0x94C3,0x22471787, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 LE",                kNull},
269	{ 0x94C3,0x30001025, CHIP_FAMILY_RV610,"ATI Radeon HD 2350",                   kNull},
270	{ 0x94C3,0x30001458, CHIP_FAMILY_RV610,"ATI Radeon HD 3410",                   kNull},
271	{ 0x94C3,0x30001462, CHIP_FAMILY_RV610,"ATI Radeon HD 3410",                   kNull},
272	{ 0x94C3,0x3000148C, CHIP_FAMILY_RV610,"ATI Radeon HD 2350",                   kNull},
273	{ 0x94C3,0x30001642, CHIP_FAMILY_RV610,"ATI Radeon HD 3410",                   kNull},
274	{ 0x94C3,0x3000174B, CHIP_FAMILY_RV610,"ATI Radeon HD 2350",                   kNull},
275	{ 0x94C3,0x30001787, CHIP_FAMILY_RV610,"ATI Radeon HD 2350",                   kNull},
276	{ 0x94C3,0x37161642, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO",               kNull},
277	{ 0x94C3,0x94C31002, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO",               kNull},
278	{ 0x94C3,0xE370174B, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO",               kNull},
279	{ 0x94C3,0xE400174B, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO",               kNull},
280	
281	{ 0x9501,0x25421002, CHIP_FAMILY_RV670,"ATI Radeon HD 3870",                   kNull},
282	{ 0x9501,0x30001002, CHIP_FAMILY_RV670,"ATI Radeon HD 3690",                   kNull},
283	{ 0x9501,0x3000174B, CHIP_FAMILY_RV670,"Sapphire Radeon HD 3690",              kNull},
284	{ 0x9501,0x30001787, CHIP_FAMILY_RV670,"ATI Radeon HD 3690",                   kNull},
285	{ 0x9501,0x4750174B, CHIP_FAMILY_RV670,"ATI Radeon HD 4750",                   kNull},
286	
287	{ 0x9505,0x024A1043, CHIP_FAMILY_RV670,"ASUS MA 3850",                    kNull},
288	{ 0x9505,0x25421002, CHIP_FAMILY_RV670,"ATI Radeon HD 3850",                   kNull},
289	{ 0x9505,0x30001002, CHIP_FAMILY_RV630,"ATI Radeon HD 3690",                   kNull},
290	{ 0x9505,0x3000148C, CHIP_FAMILY_RV670,"ATI Radeon HD 3850",                   kNull},
291	{ 0x9505,0x3000174B, CHIP_FAMILY_RV670,"Sapphire Radeon HD 3690",              kNull},
292	{ 0x9505,0x30001787, CHIP_FAMILY_RV630,"ATI Radeon HD 3690",                   kNull},
293	{ 0x9505,0x30011043, CHIP_FAMILY_RV670,"ATI Radeon HD 4730",                   kNull},
294	{ 0x9505,0x3001148C, CHIP_FAMILY_RV670,"ATI Radeon HD 4730",                   kNull},
295	{ 0x9505,0x3001174B, CHIP_FAMILY_RV670,"ATI Radeon HD 4750",                   kNull},
296	{ 0x9505,0x3002148C, CHIP_FAMILY_RV670,"ATI Radeon HD 4730",                   kNull},
297	{ 0x9505,0x3003148C, CHIP_FAMILY_RV670,"ATI Radeon HD 4750",                   kNull},
298	{ 0x9505,0x3004148C, CHIP_FAMILY_RV670,"ATI Radeon HD 4750",                   kNull},
299	{ 0x9505,0x3010174B, CHIP_FAMILY_RV670,"ATI Radeon HD 4750",                   kNull},
300	{ 0x9505,0x301017AF, CHIP_FAMILY_RV670,"ATI Radeon HD 4750",                   kNull},
301	{ 0x9505,0x4730174B, CHIP_FAMILY_RV670,"ATI Radeon HD 4730",                   kNull},
302	{ 0x9505,0xE630174B, CHIP_FAMILY_RV670,"ATI Radeon HD 3800 Series",            kNull},
303	
304	{ 0x9540,0x30501787, CHIP_FAMILY_RV710,"ATI Radeon HD 4590",                   kNull},
305	{ 0x9540,0x4590174B, CHIP_FAMILY_RV710,"ATI Radeon HD 4590",                   kNull},
306	
307	{ 0x954F,0x16131462, CHIP_FAMILY_RV710,"ATI Radeon HD 4550",                   kNull},
308	{ 0x954F,0x20081787, CHIP_FAMILY_RV710,"ATI Radeon HD 4350",                   kNull},
309	{ 0x954F,0x29201682, CHIP_FAMILY_RV710,"ATI Radeon HD 4550",                   kNull},
310	{ 0x954F,0x29211682, CHIP_FAMILY_RV710,"ATI Radeon HD 4550",                   kNull},
311	{ 0x954F,0x3000174B, CHIP_FAMILY_RV710,"ATI Radeon HD 4520",                   kNull},
312	{ 0x954F,0x301017AF, CHIP_FAMILY_RV710,"ATI Radeon HD 4450",                   kNull},
313	{ 0x954F,0x30501787, CHIP_FAMILY_RV710,"ATI Radeon HD 4450",                   kNull},
314	{ 0x954F,0x30901682, CHIP_FAMILY_RV710,"XFX Radeon HD 4570",                   kNull},
315	{ 0x954F,0x31001787, CHIP_FAMILY_RV710,"ATI Radeon HD 4520",                   kNull},
316	{ 0x954F,0x4450174B, CHIP_FAMILY_RV710,"ATI Radeon HD 4450",                   kNull},
317	{ 0x954F,0x4570174B, CHIP_FAMILY_RV710,"Sapphire Radeon HD 4570",              kNull},
318	{ 0x954F,0x66661043, CHIP_FAMILY_RV710,"ASUS EAH4550",                   kNull},
319	{ 0x954F,0xE990174B, CHIP_FAMILY_RV710,"Sapphire Radeon HD 4350",              kNull},
320	
321	{ 0x9552,0x04341028, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4330",          kShrike},
322	{ 0x9552,0x21AC1458, CHIP_FAMILY_RV710,"ATI Radeon HD 4300/4500",              kNull},
323	{ 0x9552,0x21ED1458, CHIP_FAMILY_RV710,"ATI Radeon HD 4300/4500",              kNull},
324	{ 0x9552,0x308B103C, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4330",          kShrike},
325	{ 0x9552,0x3000148C, CHIP_FAMILY_RV710,"ATI Radeon HD 4300/4500",              kNull},
326	{ 0x9552,0x3000174B, CHIP_FAMILY_RV710,"ATI Radeon HD 4300/4500",              kNull},
327	{ 0x9552,0x30001787, CHIP_FAMILY_RV710,"ATI Radeon HD 4300/4500",              kNull},
328	{ 0x9552,0x300017AF, CHIP_FAMILY_RV710,"ATI Radeon HD 4300/4500",              kNull},
329	{ 0x9552,0x44721545, CHIP_FAMILY_RV710,"VisionTek Radeon 4350",                kNull},
330	
331	{ 0x9553,0x18751043, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4570",kShrike},
332	{ 0x9553,0x1B321043, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4570",kShrike},
333	{ 0x9553,0x3092174B, CHIP_FAMILY_RV710,"ATI Radeon HD 4300/4500 Series",kNull},
334	{ 0x9553,0x39291642, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4570",kNull},
335	{ 0x9553,0xFD001179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 5145",kNull},
336	{ 0x9553,0xFD121179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 5145",kNull},
337	{ 0x9553,0xFD501179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 5145",kNull},
338	{ 0x9553,0xFD921179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 5145",kNull},
339	{ 0x9553,0xFDD01179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 5145",kNull},
340	{ 0x9553,0xFF001179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4500",kNull},
341	{ 0x9553,0xFF151179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4500",kNull},
342	{ 0x9553,0xFF161179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 5145",kNull},
343	{ 0x9553,0xFF221179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4500",kNull},
344	{ 0x9553,0xFF401179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4500",kNull},
345	{ 0x9553,0xFF501179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4500",kNull},
346	{ 0x9553,0xFF801179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4500",kNull},
347	{ 0x9553,0xFF821179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 5145",kNull},
348	{ 0x9553,0xFFA01179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 5145",kNull},
349	{ 0x9553,0xFFA21179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4500",kNull},
350	{ 0x9553,0xFFC01179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4500",kNull},
351	
352	 { 0x9555,0x29241682, CHIP_FAMILY_RV710,"ATI Radeon HD 4550",                   kNull},
353	{ 0x9555,0x24651682, CHIP_FAMILY_RV710,"ATI Radeon HD4300/HD4500",             kNull},
354	{ 0x9555,0x3711174B, CHIP_FAMILY_RV710,"ATI Radeon HD4300/HD4500",             kNull},
355	
356	{ 0x9581,0x011F1025, CHIP_FAMILY_RV630,"ATI Radeon HD 2600",                   kNull},
357	{ 0x9581,0x0562107B, CHIP_FAMILY_RV630,"ATI Radeon HD 2600",                   kNull},
358	{ 0x9581,0x15621043, CHIP_FAMILY_RV630,"ATI Radeon HD 2600",                   kNull},
359	{ 0x9581,0x3000148C, CHIP_FAMILY_RV630,"ATI Radeon HD 3600",                   kNull},
360	{ 0x9581,0x30C5103C, CHIP_FAMILY_RV630,"ATI Radeon HD 2600",                   kNull},
361	{ 0x9581,0x3C2D17AA, CHIP_FAMILY_RV630,"ATI Radeon HD 2600",                   kNull},
362	{ 0x9581,0x63F61462, CHIP_FAMILY_RV630,"ATI Radeon HD 2600",                   kNull},
363	{ 0x9581,0x95811002, CHIP_FAMILY_RV630,"ATI Radeon HD 3600",                   kNull},
364	{ 0x9581,0xFF001179, CHIP_FAMILY_RV630,"ATI Radeon HD 2600",                   kNull},
365	{ 0x9581,0xFF011179, CHIP_FAMILY_RV630,"ATI Radeon HD 2600",                   kNull},
366	
367	{ 0x9583,0x0083106B, CHIP_FAMILY_RV630,"ATI Mobility Radeon HD 2600 XT",kNull},
368	{ 0x9583,0x11071734, CHIP_FAMILY_RV630,"ATI Mobility Radeon HD 2600 XT",kNull},
369	{ 0x9583,0x3000148C, CHIP_FAMILY_RV630,"ATI Radeon HD 3600",                   kNull},
370	{ 0x9583,0x30D4103C, CHIP_FAMILY_RV630,"ATI Mobility Radeon HD 2600 XT",kNull},
371	
372	{ 0x9588,0x01021A93, CHIP_FAMILY_RV630,"Qimonda Radeon HD 2600 XT",kNull},
373	
374	{ 0x9589,0x01001A93, CHIP_FAMILY_RV630,"Qimonda Radeon HD 2600 PRO",kNull},
375	{ 0x9589,0x0E41174B, CHIP_FAMILY_RV630,"ATI Radeon HD 3600",                   kNull},
376	{ 0x9589,0x30001462, CHIP_FAMILY_RV630,"ATI Radeon HD 3610",                   kNull},
377	{ 0x9589,0x30001642, CHIP_FAMILY_RV630,"ATI Radeon HD 3610",                   kNull},
378	{ 0x9589,0x30001787, CHIP_FAMILY_RV630,"ATI Radeon HD 3600",                   kNull},
379	
380	{ 0x9591,0x15453992, CHIP_FAMILY_RV635,"ATI Radeon HD 3600",                   kNull},
381	{ 0x9591,0x2303148C, CHIP_FAMILY_RV635,"VisionTek Radeon HD 2600/3600 Series", kNull},
382	
383	{ 0x9598,0xB3831002, CHIP_FAMILY_RV635,"ATI All-in-Wonder HD",                 kNull},
384	{ 0x9598,0x30001043, CHIP_FAMILY_RV635,"ATI Radeon HD 3730",                   kNull},
385	{ 0x9598,0x3000148C, CHIP_FAMILY_RV635,"ATI Radeon HD 3730",                   kNull},
386	{ 0x9598,0x30001545, CHIP_FAMILY_RV635,"VisionTek Radeon HD 2600 XT",kNull},
387	{ 0x9598,0x3000174B, CHIP_FAMILY_RV635,"Sapphire Radeon HD 3730",              kNull},
388	{ 0x9598,0x30011043, CHIP_FAMILY_RV635,"ATI Radeon HD 4570",                   kNull},
389	{ 0x9598,0x3001148C, CHIP_FAMILY_RV635,"ATI Radeon HD 4580",                   kNull},
390	{ 0x9598,0x3031148C, CHIP_FAMILY_RV635,"ATI Radeon HD 4570",                   kNull},
391	{ 0x9598,0x30011545, CHIP_FAMILY_RV635,"VisionTek Radeon HD 2600 Pro",kNull},
392	{ 0x9598,0x3001174B, CHIP_FAMILY_RV635,"Sapphire Radeon HD 3750",              kNull},
393	{ 0x9598,0x300117AF, CHIP_FAMILY_RV635,"ATI Radeon HD 3750",                   kNull},
394	{ 0x9598,0x301017AF, CHIP_FAMILY_RV635,"ATI Radeon HD 4570",                   kNull},
395	{ 0x9598,0x301117AF, CHIP_FAMILY_RV635,"ATI Radeon HD 4580",                   kNull},
396	{ 0x9598,0x30501787, CHIP_FAMILY_RV635,"ATI Radeon HD 4610",                   kNull},
397	{ 0x9598,0x4570174B, CHIP_FAMILY_RV635,"ATI Radeon HD 4570",                   kNull},
398	{ 0x9598,0x4580174B, CHIP_FAMILY_RV635,"ATI Radeon HD 4580",                   kNull},
399	{ 0x9598,0x4610174B, CHIP_FAMILY_RV635,"ATI Radeon HD 4610",                   kNull},
400	
401	{ 0x95C0,0x3000148C, CHIP_FAMILY_RV620,"ATI Radeon HD 3550",                   kNull},
402	{ 0x95C0,0x3000174B, CHIP_FAMILY_RV620,"Sapphire Radeon HD 3550",              kNull},
403	{ 0x95C0,0x3002174B, CHIP_FAMILY_RV620,"ATI Radeon HD 3570",                   kNull},
404	{ 0x95C0,0x3020174B, CHIP_FAMILY_RV620,"ATI Radeon HD 4250",                   kNull},
405	{ 0x95C0,0xE3901745, CHIP_FAMILY_RV620,"ATI Radeon HD 3550",                   kNull},
406	
407	{ 0x95C5,0x01041A93, CHIP_FAMILY_RV620,"Qimonda Radeon HD 3450",               kNull},
408	{ 0x95C5,0x01051A93, CHIP_FAMILY_RV620,"Qimonda Radeon HD 3450",               kNull},
409	{ 0x95C5,0x3000148C, CHIP_FAMILY_RV620,"ATI Radeon HD 3450",                   kNull},
410	{ 0x95C5,0x3001148C, CHIP_FAMILY_RV620,"ATI Radeon HD 3550",                   kNull},
411	{ 0x95C5,0x3002148C, CHIP_FAMILY_RV620,"ATI Radeon HD 4230",                   kNull},
412	{ 0x95C5,0x3003148C, CHIP_FAMILY_RV620,"ATI Radeon HD 4250",                   kNull},
413	{ 0x95C5,0x3010174B, CHIP_FAMILY_RV620,"ATI Radeon HD 4250",                   kNull},
414	{ 0x95C5,0x301017AF, CHIP_FAMILY_RV620,"ATI Radeon HD 4230",                   kNull},
415	{ 0x95C5,0x3032148C, CHIP_FAMILY_RV620,"ATI Radeon HD 4250",                   kNull},
416	{ 0x95C5,0x3033148C, CHIP_FAMILY_RV620,"ATI Radeon HD 4230",                   kNull},
417	{ 0x95C5,0x30501787, CHIP_FAMILY_RV620,"ATI Radeon HD 4250",                   kNull},
418	{ 0x95C5,0x4250174B, CHIP_FAMILY_RV620,"ATI Radeon HD 4250",                   kNull},
419	
420	/* Evergreen */
421	{ 0x6898,0x00D0106B, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5870",                   kLangur},
422	{ 0x6898,0x032E1043, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5870",                   kUakari},
423	{ 0x6898,0x038C1043, CHIP_FAMILY_CYPRESS,"ASUS 5870 Eyefinity 6",                kNull},
424	{ 0x6898,0x0B001002, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5870",                   kZonalis},
425	{ 0x6898,0x21E51458, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5870",                   kUakari},
426	{ 0x6898,0x29611682, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5870",                   kUakari},
427	{ 0x6898,0xE140174B, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5870",                   kUakari},
428	
429	{ 0x6899,0x200A1787, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5850",                   kUakari},
430	{ 0x6899,0x21E41458, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5850",                   kUakari},
431	{ 0x6899,0x22901787, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5850",                   kUakari},
432	{ 0x6899,0xE140174B, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5850",                   kUakari},
433	{ 0x6899,0xE174174B, CHIP_FAMILY_CYPRESS,"ATI Sapphire Radeon HD 5850",          kUakari},
434	
435	{ 0x689C,0x034A1043, CHIP_FAMILY_HEMLOCK,"ATI Radeon HD 5970",                   kUakari},
436	{ 0x689C,0x03521043, CHIP_FAMILY_HEMLOCK,"ASUS ARES",                            kUakari},
437	{ 0x689C,0x039E1043, CHIP_FAMILY_HEMLOCK,"ASUS EAH5870",                         kUakari},
438	{ 0x689C,0x25421002, CHIP_FAMILY_HEMLOCK,"ATI Radeon HD 5970",                   kUakari},
439	{ 0x689C,0x30201682, CHIP_FAMILY_HEMLOCK,"ATI Radeon HD 5970",                   kUakari},
440	
441	{ 0x68A0,0x03081025, CHIP_FAMILY_CYPRESS,"ATI Mobility Radeon HD 5830",kNomascus},
442	{ 0x68A0,0x030A1025, CHIP_FAMILY_CYPRESS,"ATI Mobility Radeon HD 5830",kNomascus},
443	{ 0x68A0,0x043A1028, CHIP_FAMILY_CYPRESS,"ATI Mobility Radeon HD 5870",kNomascus},
444	
445	{ 0x68A1,0x03081025, CHIP_FAMILY_CYPRESS,"ATI Mobility Radeon HD 5850",kNull},
446	{ 0x68A1,0x030A1025, CHIP_FAMILY_CYPRESS,"ATI Mobility Radeon HD 5850",kNull},
447	{ 0x68A1,0x03671025, CHIP_FAMILY_CYPRESS,"ATI Mobility Radeon HD 5850",kNull},
448	{ 0x68A1,0x03681025, CHIP_FAMILY_CYPRESS,"ATI Mobility Radeon HD 5850",kNull},
449	{ 0x68A1,0x038B1025, CHIP_FAMILY_CYPRESS,"ATI Mobility Radeon HD 5850",kNull},
450	{ 0x68A1,0x038C1025, CHIP_FAMILY_CYPRESS,"ATI Mobility Radeon HD 5850",kNull},
451	{ 0x68A1,0x042E1025, CHIP_FAMILY_CYPRESS,"ATI Mobility Radeon HD 5850",kNull},
452	{ 0x68A1,0x042F1025, CHIP_FAMILY_CYPRESS,"ATI Mobility Radeon HD 5850",kNull},
453	{ 0x68A1,0x144D103C, CHIP_FAMILY_CYPRESS,"ATI Mobility Radeon HD 5850",kNomascus},
454	{ 0x68A1,0x1522103C, CHIP_FAMILY_CYPRESS,"ATI Mobility Radeon HD 5850",kHoolock},
455	{ 0x68A1,0x22411462, CHIP_FAMILY_CYPRESS,"ATI Mobility Radeon HD 5850",kNull},
456	{ 0x68A1,0x39961462, CHIP_FAMILY_CYPRESS,"ATI Mobility Radeon HD 5850",kNull},
457	
458	{ 0x68A8,0x04421025, CHIP_FAMILY_CYPRESS,"AMD Radeon HD 6850M",                  kUakari},
459	{ 0x68A8,0x04511025, CHIP_FAMILY_CYPRESS,"AMD Radeon HD 6850M",                  kUakari},
460	{ 0x68A8,0x048F1028, CHIP_FAMILY_CYPRESS,"AMD Radeon HD 6870M",                  kNull},
461	{ 0x68A8,0x04901028, CHIP_FAMILY_CYPRESS,"AMD Radeon HD 6870M",                  kNull},
462	{ 0x68A8,0x04B91028, CHIP_FAMILY_CYPRESS,"AMD Radeon HD 6870M",                  kNull},
463	{ 0x68A8,0x04BA1028, CHIP_FAMILY_CYPRESS,"AMD Radeon HD 6870M",                  kNull},
464	{ 0x68A8,0x050A1025, CHIP_FAMILY_CYPRESS,"AMD Radeon HD 6850M",                  kUakari},
465	{ 0x68A8,0x050B1025, CHIP_FAMILY_CYPRESS,"AMD Radeon HD 6850M",                  kUakari},
466	{ 0x68A8,0x050C1025, CHIP_FAMILY_CYPRESS,"AMD Radeon HD 6850M",                  kUakari},
467	{ 0x68A8,0x050E1025, CHIP_FAMILY_CYPRESS,"AMD Radeon HD 6850M",                  kUakari},
468	{ 0x68A8,0x050F1025, CHIP_FAMILY_CYPRESS,"AMD Radeon HD 6850M",                  kUakari},
469	{ 0x68A8,0x05131025, CHIP_FAMILY_CYPRESS,"AMD Radeon HD 6850M",                  kUakari},
470	{ 0x68A8,0x05141025, CHIP_FAMILY_CYPRESS,"AMD Radeon HD 6850M",                  kUakari},
471	{ 0x68A8,0x05151025, CHIP_FAMILY_CYPRESS,"AMD Radeon HD 6850M",                  kUakari},
472	{ 0x68A8,0x05161025, CHIP_FAMILY_CYPRESS,"AMD Radeon HD 6850M",                  kUakari},
473	{ 0x68A8,0x05251025, CHIP_FAMILY_CYPRESS,"AMD Radeon HD 6850M",                  kUakari},
474	{ 0x68A8,0x05261025, CHIP_FAMILY_CYPRESS,"AMD Radeon HD 6850M",                  kUakari},
475	{ 0x68A8,0x056D1025, CHIP_FAMILY_CYPRESS,"AMD Radeon HD 6850M",                  kUakari},
476	{ 0x68A8,0x159B103C, CHIP_FAMILY_CYPRESS,"AMD Radeon HD 6850M",                  kUakari},
477	{ 0x68A8,0xC0AD144D, CHIP_FAMILY_CYPRESS,"AMD Radeon HD 6850M",                  kUakari},
478	
479	{ 0x68B8,0x00CF106B, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770",                   kHoolock},
480	{ 0x68B8,0x0044144D, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 6770",                   kVervet},
481	{ 0x68B8,0x1482174B, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770",                   kVervet},
482	{ 0x68B8,0x200A1787, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770",                   kVervet},
483	{ 0x68B8,0x200B1787, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770",                   kVervet},
484	{ 0x68B8,0x21D71458, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770",                   kVervet},
485	{ 0x68B8,0x21F61458, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770",                   kVervet},
486	{ 0x68B8,0x22881787, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770",                   kVervet},
487	{ 0x68B8,0x25431002, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770",                   kVervet},
488	{ 0x68B8,0x25431458, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770",                   kVervet},
489	{ 0x68B8,0x29901682, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770",                   kVervet},
490	{ 0x68B8,0x29911682, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770",                   kVervet},
491	{ 0x68B8,0x30001002, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 6700",                   kVervet},
492	{ 0x68B8,0x6880103C, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770",                   kVervet},
493	{ 0x68B8,0x6881103C, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 6770",                   kVervet},
494	{ 0x68B8,0xE144174B, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770",                   kHoolock},
495	{ 0x68B8,0xE147174B, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770",                   kVervet},
496	{ 0x68B8,0xE160174B, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770",                   kVervet},
497	{ 0x68B8,0xEA60174B, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 6770",                   kVervet},
498	
499	{ 0x68BA,0x03FE1043, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6770",                   kVervet},
500	{ 0x68BA,0x1482174B, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6770",                   kVervet},
501	{ 0x68BA,0x174B1482, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6770",                   kVervet},
502	{ 0x68BA,0x200A1787, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6770",                   kVervet},
503	{ 0x68BA,0x21421462, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6770",                   kVervet},
504	{ 0x68BA,0x25431458, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6770",                   kVervet},
505	{ 0x68BA,0x31501682, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6770",                   kVervet},
506	{ 0x68BA,0x31521682, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6770",                   kVervet},
507	{ 0x68BA,0x31531682, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6770",                   kVervet},
508	{ 0x68BA,0xE144174B, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6770",                   kVervet},
509	
510	{ 0x68BE,0x200A1787, CHIP_FAMILY_JUNIPER,"HIS ATI 5750",                   kVervet},
511	{ 0x68BE,0x22881787, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5750",                   kVervet},
512	{ 0x68BE,0x3000148C, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 6750",                   kNull},
513	{ 0x68BE,0x3000174B, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 6750",                   kNull},
514	{ 0x68BE,0x300017AF, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 6750",                   kNull},
515	{ 0x68BE,0x39821642, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6750",                   kNull},
516	
517	{ 0x68BF,0x220E1458, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 6750",                   kVervet},
518	{ 0x68BF,0x3000148C, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 6750",                   kVervet},
519	{ 0x68BF,0x31401682, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 6750",                   kVervet},
520	{ 0x68BF,0x6750174B, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 6750",                   kVervet},
521	
522	{ 0x68C0,0x1594103C, CHIP_FAMILY_REDWOOD,"AMD Radeon HD 6570M",                  kNull},
523	{ 0x68C0,0x392717AA, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5730",kNull},
524	{ 0x68C0,0x395217AA, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5730",kNull},
525	{ 0x68C0,0x84721043, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5000",kNull},
526	
527	{ 0x68C1,0x02051025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
528	{ 0x68C1,0x02961025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
529	{ 0x68C1,0x030A1025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
530	{ 0x68C1,0x033D1025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
531	{ 0x68C1,0x033E1025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5650",kNull},
532	{ 0x68C1,0x03471025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
533	{ 0x68C1,0x03561025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
534	{ 0x68C1,0x03581025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
535	{ 0x68C1,0x035A1025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
536	{ 0x68C1,0x035C1025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
537	{ 0x68C1,0x03641025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
538	{ 0x68C1,0x036D1025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5650",kNull},
539	{ 0x68C1,0x03791025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
540	{ 0x68C1,0x037E1025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
541	{ 0x68C1,0x03821025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
542	{ 0x68C1,0x04121025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5650",kNull},
543	{ 0x68C1,0x042E1025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5650",kNull},
544	{ 0x68C1,0x042F1025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5650",kNull},
545	{ 0x68C1,0x9071104D, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5650",kEulemur},
546	{ 0x68C1,0x1449103C, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5650",kEulemur},
547	{ 0x68C1,0xFD001179, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5650",kEulemur},
548	{ 0x68C1,0xFD121179, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5650",kEulemur},
549	{ 0x68C1,0xFD501179, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5650",kEulemur},
550	{ 0x68C1,0xFDD01179, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5650",kEulemur},
551	
552	{ 0x68C8,0x2306103C, CHIP_FAMILY_REDWOOD,"ATI FirePro V4800 (FireGL)",kNull},
553	{ 0x68C8,0x240A1002, CHIP_FAMILY_REDWOOD,"ATI FirePro V4800 (FireGL)",kNull},
554	{ 0x68C8,0x240A1028, CHIP_FAMILY_REDWOOD,"ATI FirePro V4800 (FireGL)",kNull},
555	
556	{ 0x68D8,0x03561043, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5670",                   kBaboon},
557	{ 0x68D8,0x03C01043, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5670",                   kNull},
558	{ 0x68D8,0x20091787, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5670",                   kNull},
559	{ 0x68D8,0x21D91458, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5670",                   kBaboon},
560	{ 0x68D8,0x21F41458, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5670",                   kNull},
561	{ 0x68D8,0x22051462, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5690",                   kNull},
562	{ 0x68D8,0x22941787, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5690",                   kNull},
563	{ 0x68D8,0x30001787, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5730",                   kNull},
564	{ 0x68D8,0x301017AF, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5730",                   kNull},
565	{ 0x68D8,0x301117AF, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5690",                   kNull},
566	{ 0x68D8,0x30601682, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5690",                   kNull},
567	{ 0x68D8,0x30651682, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5690",                   kNull},
568	{ 0x68D8,0x56701545, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5690",                   kNull},
569	{ 0x68D8,0x5690174B, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5690",                   kNull},
570	{ 0x68D8,0x5730174B, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5730",                   kNull},
571	{ 0x68D8,0x68E01028, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5670",                   kBaboon},
572	{ 0x68D8,0xE151174B, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5670",                   kEulemur},
573	{ 0x68D8,0xE155174B, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5670",                   kNull},
574	{ 0x68D8,0xE166174B, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5670",                   kUakari},
575	
576	{ 0x68D9,0x03CE1043, CHIP_FAMILY_REDWOOD,"ASUS EAH5550 series",                  kNull},
577	{ 0x68D9,0x22401462, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5570",                   kNull},
578	{ 0x68D9,0x3000148C, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 6510",                   kNull},
579	{ 0x68D9,0x3000174B, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 6510",                   kNull},
580	{ 0x68D9,0x301017AF, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5630",                   kNull},
581	{ 0x68D9,0x39691642, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5570",                   kNull},
582	
583	{ 0x68DA,0x3000148C, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 6390",                   kNull},
584	{ 0x68DA,0x3000174B, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 6390",                   kNull},
585	{ 0x68DA,0x30001787, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5630",                   kNull},
586	{ 0x68DA,0x300017AF, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 6390",                   kNull},
587	{ 0x68DA,0x301017AF, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5630",                   kNull},
588	{ 0x68DA,0x5630174B, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5630",                   kNull},
589	
590	{ 0x68E0,0x02931025, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M",                  kEulemur},
591	{ 0x68E0,0x03581025, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M",                  kEulemur},
592	{ 0x68E0,0x03591025, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M",                  kEulemur},
593	{ 0x68E0,0x035C1025, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M",                  kEulemur},
594	{ 0x68E0,0x035D1025, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M",                  kEulemur},
595	{ 0x68E0,0x036D1025, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M",                  kLangur     },
596	{ 0x68E0,0x04471028, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M",                  kEulemur},
597	{ 0x68E0,0x04561028, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M",                  kEulemur},
598	{ 0x68E0,0x04831025, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M",                  kEulemur},
599	{ 0x68E0,0x1433103C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M",                  kEulemur},
600	{ 0x68E0,0x1441103C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M",                  kEulemur},
601	{ 0x68E0,0x144A103C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M",                  kEulemur},
602	{ 0x68E0,0x1BF21043, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M",                  kNull       },
603	{ 0x68E0,0x848F1043, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M",                  kNull       },
604	{ 0x68E0,0xFD001179, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M",                  kEulemur},
605	{ 0x68E0,0xFD121179, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M",                  kEulemur},
606	{ 0x68E0,0xFD501179, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M",                  kEulemur},
607	{ 0x68E0,0xFD921179, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M",                  kEulemur},
608	{ 0x68E0,0xFDD01179, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M",                  kEulemur},
609	
610	{ 0x68E1,0x04661028, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M",                  kEulemur},
611	{ 0x68E1,0x10021B61, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450M",                  kEulemur},
612	{ 0x68E1,0x10501462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M",                  kEulemur},
613	{ 0x68E1,0x1426103C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M",                  kEulemur},
614	{ 0x68E1,0x142A103C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 545vM",                  kEulemur},
615	{ 0x68E1,0x14E110CF, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5400M",                  kEulemur},
616	{ 0x68E1,0x21D81458, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M",                  kEulemur},
617	{ 0x68E1,0x21E21458, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M",                  kEulemur},
618	{ 0x68E1,0x21F11458, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M",                  kEulemur},
619	{ 0x68E1,0x22021458, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M",                  kEulemur},
620	{ 0x68E1,0x23421462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M",                  kEulemur},
621	{ 0x68E1,0x23431462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M",                  kEulemur},
622	{ 0x68E1,0x25481458, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5400M Series",           kEulemur},
623	{ 0x68E1,0x254A1458, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5000M Series",           kEulemur},
624	{ 0x68E1,0x30001043, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M",                  kEulemur},
625	{ 0x68E1,0x3000148C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M",                  kEulemur},
626	{ 0x68E1,0x30001682, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M",                  kEulemur},
627	{ 0x68E1,0x3000174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kEulemur},
628	{ 0x68E1,0x30001787, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kEulemur}, // 5430M ???
629	{ 0x68E1,0x300017AF, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M",                  kEulemur},
630	{ 0x68E1,0x3001148C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M",                  kEulemur},
631	{ 0x68E1,0x301417AF, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350",                   kEulemur},
632	{ 0x68E1,0x3002148C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M",                  kEulemur},
633	   { 0x68E1,0x3003148C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450M",                  kEulemur},
634	{ 0x68E1,0x54501545, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M",                  kEulemur},
635	{ 0x68E1,0x5470174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M",                  kEulemur},
636	{ 0x68E1,0x60001092, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M",                  kEulemur},
637	{ 0x68E1,0x60001682, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M",                  kEulemur},
638	{ 0x68E1,0x6000174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M",                  kEulemur},
639	{ 0x68E1,0x6230174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350",                   kEulemur},
640	{ 0x68E1,0x6350174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350",                   kEulemur},
641	{ 0x68E1,0xFDD01179, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M",                  kEulemur},
642	
643	{ 0x68E4,0x04821025, CHIP_FAMILY_CEDAR,"AMD Radeon HD 6370M",                  kNull},
644	{ 0x68E4,0x1426103C, CHIP_FAMILY_CEDAR,"AMD Radeon HD 6370M",                  kNull},
645	{ 0x68E4,0x1C921043, CHIP_FAMILY_CEDAR,"AMD Radeon HD 6370M",                  kNull},
646	{ 0x68E4,0x397917AA, CHIP_FAMILY_CEDAR,"AMD Radeon HD 6370M",                  kNull},
647	{ 0x68E4,0x397F17AA, CHIP_FAMILY_CEDAR,"AMD Radeon HD 7370M",                  kNull},
648	{ 0x68E4,0x84A01043, CHIP_FAMILY_CEDAR,"AMD Radeon HD 6370M",                  kNull},
649	
650	{ 0x68F9,0x00011019, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kNull},
651	{ 0x68F9,0x00021019, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kNull},
652	{ 0x68F9,0x00191019, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350",                   kNull},
653	{ 0x68F9,0x010E1002, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kEulemur},
654	{ 0x68F9,0x010E1028, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kNull},
655	{ 0x68F9,0x03741043, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kEulemur},
656	{ 0x68F9,0x03CA1043, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kEulemur},
657	{ 0x68F9,0x05181025, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kNull},
658	{ 0x68F9,0x05191025, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kNull},
659	{ 0x68F9,0x174B3000, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6230",                   kNull},
660	{ 0x68F9,0x174B6250, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6250",                   kNull},
661	{ 0x68F9,0x174B6290, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6290",                   kNull},
662	{ 0x68F9,0x174BE164, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kNull},
663	{ 0x68F9,0x20091787, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kEulemur},
664	{ 0x68F9,0x21261028, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350",                   kNull},
665	{ 0x68F9,0x2126103C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350",                   kNull},
666	{ 0x68F9,0x21301462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kNull},
667	{ 0x68F9,0x21311462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kNull},
668	{ 0x68F9,0x21331462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350",                   kEulemur},
669	{ 0x68F9,0x21801462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kNull},
670	{ 0x68F9,0x21811462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kNull},
671	{ 0x68F9,0x21821462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350",                   kNull},
672	{ 0x68F9,0x21831462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350",                   kNull},
673	{ 0x68F9,0x22911787, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kEulemur},
674	{ 0x68F9,0x22301462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kEulemur},
675	{ 0x68F9,0x22311462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kEulemur},
676	{ 0x68F9,0x23401462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kEulemur},
677	{ 0x68F9,0x24951462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350",                   kNull},
678	{ 0x68F9,0x2AAC103C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kNull},
679	{ 0x68F9,0x2AEC103C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kNull},
680	{ 0x68F9,0x30001787, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470",                   kNull},
681	{ 0x68F9,0x300017AF, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6250",                   kNull},
682	{ 0x68F9,0x3001148C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6250",                   kNull},
683	{ 0x68F9,0x30011787, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5530",                   kNull},
684	{ 0x68F9,0x3002148C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6290",                   kNull},
685	{ 0x68F9,0x30021787, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5490",                   kNull},
686	{ 0x68F9,0x300217AF, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6290",                   kNull},
687	{ 0x68F9,0x3003148C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6230",                   kNull},
688	{ 0x68F9,0x301117AF, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470",                   kNull},
689	{ 0x68F9,0x301217AF, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5490",                   kNull},
690	{ 0x68F9,0x301317AF, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470",                   kNull},
691	{ 0x68F9,0x301417AF, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350",                   kNull},
692	{ 0x68F9,0x30321682, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",kEulemur},
693	{ 0x68F9,0x303A1682, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",kEulemur},
694	{ 0x68F9,0x3580103C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kNull},
695	{ 0x68F9,0x360217AA, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kEulemur},
696	{ 0x68F9,0x360317AA, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kEulemur},
697	{ 0x68F9,0x360F17AA, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kEulemur},
698	{ 0x68F9,0x361917AA, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kEulemur},
699	{ 0x68F9,0x39831642, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kNull},
700	{ 0x68F9,0x39841642, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350",                   kNull},
701	{ 0x68F9,0x39871642, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350",                   kNull},
702	{ 0x68F9,0x3987174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350",                   kNull},
703	{ 0x68F9,0x39971462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kEulemur},
704	{ 0x68F9,0x3A051642, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kNull},
705	{ 0x68F9,0x3B311642, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350A",                  kNull},
706	{ 0x68F9,0x5470174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470",                   kNull},
707	{ 0x68F9,0x5490174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5490",                   kNull},
708	{ 0x68F9,0x5530174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5530",                   kNull},
709	{ 0x68F9,0x6230174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6230",                   kNull},
710	{ 0x68F9,0x6350174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350",                   kNull},
711	{ 0x68F9,0x7350148C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 7350",                   kNull},
712	{ 0x68F9,0xE127174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kEulemur},
713	{ 0x68F9,0xE145174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kEulemur},
714	{ 0x68F9,0xE153174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kEulemur},
715	{ 0x68F9,0xE164174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",                   kEulemur},
716	
717	/* Northen Islands */
718	{ 0x6718,0x0B001002, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970",                   kGibba},
719	{ 0x6718,0x20101458, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970",                   kGibba},
720	{ 0x6718,0x22001458, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970",                   kGibba},
721	{ 0x6718,0x23061787, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970",                   kGibba},
722	{ 0x6718,0x23701462, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970",                   kGibba},
723	{ 0x6718,0x31301682, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970",                   kGibba},
724	{ 0x6718,0x67181002, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970",                   kGibba},
725	{ 0x6718,0xE182174B, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970",                   kGibba},
726	{ 0x6718,0xE203174B, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970",                   kGibba},
727	
728	{ 0x6719,0x03BE1043, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950",                   kGibba},
729	{ 0x6719,0x03D41043, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950",                   kGibba},
730	{ 0x6719,0x0B001002, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950",                   kGibba},
731	{ 0x6719,0x186B174B, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950",                   kGibba},
732	{ 0x6719,0x20101787, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950",                   kGibba},
733	{ 0x6719,0x21FD1458, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950",                   kGibba},
734	{ 0x6719,0x23071787, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950",                   kGibba},
735	{ 0x6719,0x24611462, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950",                   kGibba},
736	{ 0x6719,0x31211682, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950",                   kGibba},
737	{ 0x6719,0x31221682, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950",                   kGibba},
738	{ 0x6719,0xE189174B, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950",                   kGibba},
739	
740	//{ 0x671D,0x0B2A1002, CHIP_FAMILY_ANTILLES,"AMD Radeon HD 6990",                   kNull},
741	//{ 0x671D,0x1B2A1002, CHIP_FAMILY_ANTILLES,"AMD Radeon HD 6990",                   kNull},
742	//{ 0x671D,0x31601682, CHIP_FAMILY_ANTILLES,"AMD Radeon HD 6990",                   kNull},
743	
744	{ 0x6720,0x048F1028, CHIP_FAMILY_BARTS,"AMD Radeon HD 6970M",                  kElodea},
745	{ 0x6720,0x04901028, CHIP_FAMILY_BARTS,"AMD Radeon HD 6970M",                  kElodea},
746	{ 0x6720,0x04A41028, CHIP_FAMILY_BARTS,"AMD FirePro M8900M",                   kElodea},
747	{ 0x6720,0x04B91028, CHIP_FAMILY_BARTS,"AMD Radeon HD 6970M",                  kElodea},
748	{ 0x6720,0x04BA1028, CHIP_FAMILY_BARTS,"AMD Radeon HD 6970M",                  kElodea},
749	{ 0x6720,0x51021558, CHIP_FAMILY_BARTS,"AMD Radeon HD 6970M",                  kElodea},
750	{ 0x6720,0x51041558, CHIP_FAMILY_BARTS,"AMD Radeon HD 6990M",                  kElodea},
751	{ 0x6720,0x71001558, CHIP_FAMILY_BARTS,"AMD Radeon HD 6970M",                  kElodea},
752	{ 0x6720,0x72001558, CHIP_FAMILY_BARTS,"AMD Radeon HD 6970M",                  kElodea},
753	{ 0x6720,0x72011558, CHIP_FAMILY_BARTS,"AMD Radeon HD 6990M",                  kElodea},
754	{ 0x6720,0xC0AD144D, CHIP_FAMILY_BARTS,"AMD Radeon HD 6970M",                  kElodea},
755	
756	{ 0x6738,0x00D01002, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870",                   kDuckweed},
757	{ 0x6738,0x03AE1043, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870",                   kDuckweed},
758	{ 0x6738,0x03C61043, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870",                   kDuckweed},
759	{ 0x6738,0x174B174B, CHIP_FAMILY_BARTS,"Sapphire Radeon HD6870",               kBulrushes}, // ?? kDuckweed ??
760	{ 0x6738,0x20101787, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870",                   kDuckweed},
761	{ 0x6738,0x21FA1002, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870",                   kDuckweed},
762	{ 0x6738,0x21FA1458, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870",                   kDuckweed},
763	{ 0x6738,0x23051787, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870",                   kDuckweed},
764	{ 0x6738,0x25101462, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870",                   kDuckweed},
765	{ 0x6738,0x31031682, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870",                   kDuckweed},
766	{ 0x6738,0x31041682, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870",                   kDuckweed},
767	{ 0x6738,0x31071682, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870",                   kDuckweed},
768	{ 0x6738,0x31081682, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870",                   kDuckweed},  // ?? kJuncus ??
769	{ 0x6738,0x67381002, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870",                   kDuckweed},
770	{ 0x6738,0xE178174B, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870",                   kDuckweed},
771	
772	{ 0x6739,0x03B41043, CHIP_FAMILY_BARTS,"ASUS EAH6850 DirectCU",                   kDuckweed},
773	{ 0x6739,0x174B174B, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850",                   kDuckweed},
774	{ 0x6739,0x200F1787, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850",                   kDuckweed},
775	{ 0x6739,0x21F81458, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850",                   kBulrushes},
776	{ 0x6739,0x23041787, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850",                   kDuckweed},
777	{ 0x6739,0x24001462, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850",                   kDuckweed},
778	{ 0x6739,0x24411462, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850",                   kDuckweed},
779	{ 0x6739,0x25201462, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850",                   kDuckweed},
780	{ 0x6739,0x30001787, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850",                   kDuckweed},
781	{ 0x6739,0x31101682, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850",                   kDuckweed},
782	{ 0x6739,0x31131682, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850",                   kDuckweed},
783	{ 0x6739,0x31141682, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850",                   kDuckweed},
784	{ 0x6739,0x31161682, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850",                   kDuckweed},
785	{ 0x6739,0x31171682, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850",                   kDuckweed},
786	{ 0x6739,0x67391002, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850",                   kDuckweed},
787	{ 0x6739,0xAA881002, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850",                   kDuckweed},
788	{ 0x6739,0xE174174B, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850",                   kDuckweed},
789	{ 0x6739,0xE177174B, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850",                   kDuckweed},
790	{ 0x6739,0xE183174B, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850",                   kDuckweed},
791	
792	{ 0x673E,0x174B174B, CHIP_FAMILY_BARTS,"AMD Radeon HD 6790",                   kNull},
793	{ 0x673E,0x23101787, CHIP_FAMILY_BARTS,"AMD Radeon HD 6790",                   kNull},
794	{ 0x673E,0x31701682, CHIP_FAMILY_BARTS,"AMD Radeon HD 6790",                   kNull},
795	{ 0x673E,0x31721682, CHIP_FAMILY_BARTS,"AMD Radeon HD 6790",                   kNull},
796	
797	{ 0x6740,0x04A31028, CHIP_FAMILY_TURKS,"Dell HD 6770M",                        kNull}, // ??
798	{ 0x6740,0x1D121043, CHIP_FAMILY_TURKS,"AMD Radeon HD 6730M",                  kNull},
799	{ 0x6740,0x1631103C, CHIP_FAMILY_TURKS,"AMD FirePro M5950",                    kNull},
800	{ 0x6740,0x1657103C, CHIP_FAMILY_TURKS,"AMD Radeon HD 6770M",                  kNull},
801	{ 0x6740,0x165A103C, CHIP_FAMILY_TURKS,"AMD Radeon HD 6770M",                  kNull},
802	{ 0x6740,0x3388103C, CHIP_FAMILY_TURKS,"AMD Radeon HD 6770M",                  kNull},
803	{ 0x6740,0x3389103C, CHIP_FAMILY_TURKS,"AMD Radeon HD 6770M",                  kNull}, // ?? kHydrilla ??
804	{ 0x6740,0x6740106B, CHIP_FAMILY_TURKS,"Apple HD 6770M",                       kNull}, // ??
805	
806	{ 0x6741,0x050E1025, CHIP_FAMILY_TURKS,"AMD Radeon HD 6650M",                  kNull},
807	{ 0x6741,0x050F1025, CHIP_FAMILY_TURKS,"AMD Radeon HD 6650M",                  kNull},
808	{ 0x6741,0x05131025, CHIP_FAMILY_TURKS,"AMD Radeon HD 6650M",                  kNull},
809	{ 0x6741,0x1646103C, CHIP_FAMILY_TURKS,"AMD Radeon HD 6750M",                  kNull},
810	{ 0x6741,0x1688103C, CHIP_FAMILY_TURKS,"AMD Radeon HD 7690M",                  kNull},
811	{ 0x6741,0x358D103C, CHIP_FAMILY_TURKS,"AMD Radeon HD 6630M/6650M/6750M",      kNull},
812	 { 0x6741,0x9080104D, CHIP_FAMILY_TURKS,"AMD Radeon HD 6630M",                  kNull},
813	
814	{ 0x6758,0x00121028, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670",                   kBulrushes},
815	{ 0x6758,0x0B0E1002, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670",                   kPithecia},
816	{ 0x6758,0x0B0E1028, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670",                   kBulrushes},
817	{ 0x6758,0x20121787, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670",                   kPithecia},
818	{ 0x6758,0x20141787, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670",                   kBulrushes},
819	{ 0x6758,0x22051458, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670",                   kBulrushes},
820	{ 0x6758,0x31811682, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670",                   kBulrushes},
821	{ 0x6758,0x31831682, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670",                   kBulrushes},
822	{ 0x6758,0x67581002, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670",                   kBulrushes},
823	{ 0x6758,0x6882103C, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670",                   kBulrushes},
824	{ 0x6758,0xE181174B, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670",                   kBulrushes},
825	{ 0x6758,0xE1941746, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670",                   kBulrushes},
826	{ 0x6758,0xE194174B, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670",                   kMangabey},
827	
828	{ 0x6759,0x20121787, CHIP_FAMILY_TURKS,"AMD Radeon HD 6570",                   kPithecia},
829	{ 0x6759,0xE193174B, CHIP_FAMILY_TURKS,"AMD Radeon HD 6570",                   kPithecia},
830	
831	{ 0x675F,0x23141787, CHIP_FAMILY_TURKS,"AMD Radeon HD 5570",                   kNull},
832	{ 0x675F,0x254B1458, CHIP_FAMILY_TURKS,"AMD Radeon HD 5570",                   kNull},
833	{ 0x675F,0x6510148C, CHIP_FAMILY_TURKS,"AMD Radeon HD 5570",                   kNull},
834	{ 0x675F,0x6510174B, CHIP_FAMILY_TURKS,"AMD Radeon HD 5570",                   kNull},
835	
836	{ 0x6760,0x00031179, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450M",                  kIpomoea},
837	{ 0x6760,0x04C11028, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450M",                  kIpomoea},
838	{ 0x6760,0x04CA1028, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450M",                  kIpomoea},
839	{ 0x6760,0x04CC1028, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450M",                  kIpomoea},
840	{ 0x6760,0x101C1043, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450M",                  kIpomoea},
841	{ 0x6760,0x165A103C, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6470M",                  kIpomoea},
842	{ 0x6760,0x167D103C, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6470M",                  kIpomoea},
843	{ 0x6760,0x1CB21043, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6470M",                  kIpomoea},
844	{ 0x6760,0x20011043, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6470M",                  kIpomoea},
845	{ 0x6760,0x85171043, CHIP_FAMILY_CAICOS,"AMD Radeon HD 7470M",                  kNull},
846	
847	{ 0x6779,0x00001002, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450",                   kBulrushes},
848	{ 0x6779,0x03DA1043, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450",                   kBulrushes},
849	{ 0x6779,0x03DC1043, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450",                   kBulrushes},
850	{ 0x6779,0x20121787, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450",                   kBulrushes},
851	{ 0x6779,0x21201028, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450",                   kBulrushes},
852	{ 0x6779,0x21251462, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450",                   kBulrushes},
853	{ 0x6779,0x22031458, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450",                   kBulrushes},
854	{ 0x6779,0x22041458, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450",                   kBulrushes},
855	{ 0x6779,0x23111787, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450",                   kBulrushes},
856	{ 0x6779,0x32001682, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450",                   kBulrushes},
857	{ 0x6779,0x64501092, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450",                   kBulrushes},
858	{ 0x6779,0x909D1B0A, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450",                   kBulrushes},
859	{ 0x6779,0xE164174B, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450",                   kIpomoea},
860	{ 0x6779,0xE180174B, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450",                   kPithecia},
861	{ 0x6779,0xE190174B, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450",                   kBulrushes},
862	{ 0x6779,0xE199174B, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450",                   kBulrushes},
863	
864	/* Southen Islands */
865	
866	{ 0x6798,0x04181043, CHIP_FAMILY_TAHITI,"Asus HD7970 7970",                   kAji  },
867	{ 0x6798,0x04201043, CHIP_FAMILY_TAHITI,"Asus HD7970 7970",                   kAji},
868	{ 0x6798,0x044A1043, CHIP_FAMILY_TAHITI,"Asus HD7970 7970",                   kAji},
869	{ 0x6798,0x044C1043, CHIP_FAMILY_TAHITI,"Asus HD7970 7970",                   kAji},
870	{ 0x6798,0x044E1043, CHIP_FAMILY_TAHITI,"Asus HD7970 7970",                   kAji},
871	{ 0x6798,0x0B001002, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970",                   kAji},
872	{ 0x6798,0x201C1787, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970",                   kAji},
873	{ 0x6798,0x23171787, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970",                   kAji},
874	{ 0x6798,0x254D1458, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970",                   kAji},
875	{ 0x6798,0x27701462, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970",                   kAji},
876	{ 0x6798,0x30001002, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970",                   kAji},
877	{ 0x6798,0x32101682, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970",                   kAji},
878	{ 0x6798,0x32111682, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970",                   kAji},
879	{ 0x6798,0x32121682, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970",                   kAji    },
880	{ 0x6798,0x32131682, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970",                   kAji},
881	{ 0x6798,0xE208174B, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970",                   kAji},
882	
883	{ 0x679A,0x0B001002, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950",                   kAji},
884	{ 0x679A,0x0B011002, CHIP_FAMILY_TAHITI,"AMD Radeon HD 8900",                   kAji},
885	{ 0x679A,0x23161787, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950",                   kAji},
886	{ 0x679A,0x254C1458, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950",                   kAji},
887	{ 0x679A,0x27601462, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950",                   kAji},
888	{ 0x679A,0x32211682, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950",                   kAji},
889	{ 0x679A,0x6616103C, CHIP_FAMILY_TAHITI,"HP Radeon HD 7950",                    kAji},
890	{ 0x679A,0xE207174B, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950",                   kAji},
891	
892	{ 0x6818,0x042F1043, CHIP_FAMILY_TAHITI,"Asus HD 7870",                         kAji},
893	{ 0x6818,0x04311043, CHIP_FAMILY_TAHITI,"Asus HD 7870",                         kAji},
894	{ 0x6818,0x0B041002, CHIP_FAMILY_TAHITI,"ATI Radeon HD 7870",                   kAji},
895	{ 0x6818,0x0B051002, CHIP_FAMILY_TAHITI,"ATI Radeon HD 8800",                   kAji},
896	{ 0x6818,0x201C1787, CHIP_FAMILY_TAHITI,"ATI Radeon HD 7870",                   kAji},
897	{ 0x6818,0x23211787, CHIP_FAMILY_TAHITI,"ATI Radeon HD 7870",                   kAji},
898	{ 0x6818,0x25541458, CHIP_FAMILY_TAHITI,"Gigabyte HD 7870",                     kAji},
899	{ 0x6818,0x27401462, CHIP_FAMILY_TAHITI,"ATI Radeon HD 7870",                   kAji},
900	{ 0x6818,0x32501682, CHIP_FAMILY_TAHITI,"ATI Radeon HD 7870",                   kAji},
901	{ 0x6818,0xE217174B, CHIP_FAMILY_TAHITI,"ATI Radeon HD 7870",                   kAji},
902	
903	{ 0x6819,0x04311043, CHIP_FAMILY_TAHITI,"Asus HD 7850",                         kAji}, // Asus
904	{ 0x6819,0x04331043, CHIP_FAMILY_TAHITI,"Asus HD 7850",                         kAji}, // Asus
905	{ 0x6819,0x0B041002, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7850",                   kAji}, // ATI
906	{ 0x6819,0x201C1787, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7850",                   kAji}, // HIS
907	{ 0x6819,0x23201787, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7850",                   kAji}, // HIS
908	{ 0x6819,0x25531458, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7850",                   kAji}, // Gigabyte
909	{ 0x6819,0x32601682, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7850",                   kAji}, // XFX
910	{ 0x6819,0xE218174B, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7850",                   kAji}, // Sapphire
911	
912	{ 0x682F,0x15271043, CHIP_FAMILY_TAHITI,"Asus Radeon HD 7700M",                kAji},
913	{ 0x682F,0x1831103C, CHIP_FAMILY_TAHITI,"HP Radeon HD 7730M",                  kAji},
914	{ 0x682F,0x1832103C, CHIP_FAMILY_TAHITI,"HP Radeon HD 7730M",                  kAji},
915	{ 0x682F,0x1834103C, CHIP_FAMILY_TAHITI,"HP Radeon HD 7730M",                  kAji},
916	{ 0x682F,0x18A7103C, CHIP_FAMILY_TAHITI,"HP Radeon HD 7730M",                  kAji},
917	{ 0x682F,0xC0DA144D, CHIP_FAMILY_TAHITI,"Samsung Radeon HD 7730M",             kAji},
918	
919	{ 0x683D,0x04211043, CHIP_FAMILY_TAHITI,"Asus Radeon HD 7770",                  kAji},
920	{ 0x683D,0x23041002, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7700",                   kAji},
921	{ 0x683D,0x25561458, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7770",                   kAji},
922	{ 0x683D,0x27101462, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7770",                   kAji},
923	{ 0x683D,0x2B301002, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7770",                   kAji},
924	{ 0x683D,0x32331682, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7770",                   kAji},
925	{ 0x683D,0x6886103C, CHIP_FAMILY_TAHITI,"HP Radeon HD 7700",                    kAji},
926	{ 0x683D,0xE214174B, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7770",                   kAji},
927	
928	{ 0x683F,0x04231043, CHIP_FAMILY_TAHITI,"Asus HD 7750",                         kChutoro},
929	{ 0x683F,0x04271043, CHIP_FAMILY_TAHITI,"Asus HD 7750",                         kChutoro},
930	{ 0x683F,0x04591043, CHIP_FAMILY_TAHITI,"Asus HD 7750",                         kChutoro},
931	{ 0x683F,0x200B1787, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7750",                   kChutoro},
932	{ 0x683F,0x23181787, CHIP_FAMILY_TAHITI,"Vertex3D HD 7750",                     kChutoro},
933	{ 0x683F,0x25511458, CHIP_FAMILY_TAHITI,"Gigabyte HD 7750",                     kChutoro},
934	{ 0x683F,0x27921462, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7750",                   kChutoro},
935	{ 0x683F,0x2B301002, CHIP_FAMILY_TAHITI,"Ati HD 7750",                          kChutoro},
936	{ 0x683F,0x32411682, CHIP_FAMILY_TAHITI,"XFX HD 7750",                          kChutoro},
937	{ 0x683F,0x32421682, CHIP_FAMILY_TAHITI,"XFX HD 7750",                          kChutoro},
938	{ 0x683F,0x32451682, CHIP_FAMILY_TAHITI,"XFX HD 7750",                          kChutoro},
939	{ 0x683F,0xE2131019, CHIP_FAMILY_TAHITI,"Diamond HD 7750",                      kChutoro},
940	{ 0x683F,0xE213174B, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7750",                   kChutoro},
941	{ 0x683F,0xE215174B, CHIP_FAMILY_TAHITI,"Sapphire HD 7750",                     kChutoro},
942	
943	{ 0x6840,0x01241002, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7600M Series",           kPondweed   },
944	{ 0x6840,0x01341002, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7600M Series",           kPondweed   },
945	{ 0x6840,0x050E1025, CHIP_FAMILY_LOMBOK,"Acer HD 7670M",           kPondweed   },
946	{ 0x6840,0x050F1025, CHIP_FAMILY_LOMBOK,"Acer HD 7670M",           kPondweed   },
947	{ 0x6840,0x05131025, CHIP_FAMILY_LOMBOK,"Acer HD 7670M",           kPondweed   },
948	{ 0x6840,0x05141025, CHIP_FAMILY_LOMBOK,"Acer HD 7670M",           kPondweed   },
949	{ 0x6840,0x056D1025, CHIP_FAMILY_LOMBOK,"Acer HD 7670M",           kPondweed   },
950	{ 0x6840,0x059A1025, CHIP_FAMILY_LOMBOK,"Acer HD 7670M",           kPondweed   },
951	{ 0x6840,0x059B1025, CHIP_FAMILY_LOMBOK,"Acer HD 7670M",           kPondweed   },
952	{ 0x6840,0x059E1025, CHIP_FAMILY_LOMBOK,"Acer HD 7670M",           kPondweed   },
953	{ 0x6840,0x06001025, CHIP_FAMILY_LOMBOK,"Acer HD 7670M",           kPondweed   },
954	{ 0x6840,0x06061025, CHIP_FAMILY_LOMBOK,"Acer HD 7670M",           kPondweed   },
955	{ 0x6840,0x06961025, CHIP_FAMILY_LOMBOK,"Acer HD 7670M",           kPondweed   },
956	{ 0x6840,0x06971025, CHIP_FAMILY_LOMBOK,"Acer HD 7670M",           kPondweed   },
957	{ 0x6840,0x06981025, CHIP_FAMILY_LOMBOK,"Acer HD 7670M",           kPondweed   },
958	{ 0x6840,0x06991025, CHIP_FAMILY_LOMBOK,"Acer HD 7670M",           kPondweed   },
959	{ 0x6840,0x100A1043, CHIP_FAMILY_LOMBOK,"Asus HD 7670M",           kPondweed   },
960	{ 0x6840,0x104B1043, CHIP_FAMILY_LOMBOK,"Asus HD 7670M",           kPondweed   },
961	{ 0x6840,0x10DC1043, CHIP_FAMILY_LOMBOK,"Asus HD 7670M",           kPondweed   },
962	{ 0x6840,0x1813103C, CHIP_FAMILY_LOMBOK,"HP HD 7590M",           kPondweed   },
963	{ 0x6840,0x182F103C, CHIP_FAMILY_LOMBOK,"HP HD 7670M",           kPondweed   },
964	{ 0x6840,0x1830103C, CHIP_FAMILY_LOMBOK,"HP HD 7670M",           kPondweed   },
965	{ 0x6840,0x1835103C, CHIP_FAMILY_LOMBOK,"HP HD 7670M",           kPondweed   },
966	{ 0x6840,0x183A103C, CHIP_FAMILY_LOMBOK,"HP HD 7670M",           kPondweed   },
967	{ 0x6840,0x183C103C, CHIP_FAMILY_LOMBOK,"HP HD 7670M",           kPondweed   },
968	{ 0x6840,0x183E103C, CHIP_FAMILY_LOMBOK,"HP HD 7670M",           kPondweed   },
969	{ 0x6840,0x1840103C, CHIP_FAMILY_LOMBOK,"HP HD 7670M",           kPondweed   },
970	{ 0x6840,0x1842103C, CHIP_FAMILY_LOMBOK,"HP HD 7670M",           kPondweed   },
971	{ 0x6840,0x1844103C, CHIP_FAMILY_LOMBOK,"HP HD 7670M",           kPondweed   },
972	{ 0x6840,0x1848103C, CHIP_FAMILY_LOMBOK,"HP HD 7670M",           kPondweed   },
973	{ 0x6840,0x184A103C, CHIP_FAMILY_LOMBOK,"HP HD 7670M",           kPondweed   },
974	{ 0x6840,0x184C103C, CHIP_FAMILY_LOMBOK,"HP HD 7670M",           kPondweed   },
975	{ 0x6840,0x1895103C, CHIP_FAMILY_LOMBOK,"HP HD 7670M",           kPondweed   },
976	{ 0x6840,0x1897103C, CHIP_FAMILY_LOMBOK,"HP HD 7670M",           kPondweed   },
977	{ 0x6840,0x18A5103C, CHIP_FAMILY_LOMBOK,"HP HD 7670M",           kPondweed   },
978	{ 0x6840,0x18A7103C, CHIP_FAMILY_LOMBOK,"HP HD 7670M",           kPondweed   },
979	{ 0x6840,0x18F4103C, CHIP_FAMILY_LOMBOK,"HP HD 7670M",           kPondweed   },
980	{ 0x6840,0x21211043, CHIP_FAMILY_LOMBOK,"Asus HD 7670M",           kPondweed   },
981	{ 0x6840,0x21221043, CHIP_FAMILY_LOMBOK,"Asus HD 7670M",           kPondweed   },
982	{ 0x6840,0x21231043, CHIP_FAMILY_LOMBOK,"Asus HD 7670M",           kPondweed   },
983	{ 0x6840,0x21251043, CHIP_FAMILY_LOMBOK,"Asus HD 7670M",           kPondweed   },
984	{ 0x6840,0x21271043, CHIP_FAMILY_LOMBOK,"Asus HD 7670M",           kPondweed   },
985	{ 0x6840,0x397017AA, CHIP_FAMILY_LOMBOK,"Lenovo HD 7670M",           kPondweed   },
986	{ 0x6840,0x397B17AA, CHIP_FAMILY_LOMBOK,"Lenovo HD 7670M",           kPondweed   },
987	{ 0x6840,0xC0C5144D, CHIP_FAMILY_LOMBOK,"Samsung HD 6000M series",    kPondweed   },
988	{ 0x6840,0xC0CE144D, CHIP_FAMILY_LOMBOK,"Samsung HD 7670M",           kPondweed   },
989	{ 0x6840,0xC0DA144D, CHIP_FAMILY_LOMBOK,"Samsung HD 7670M",           kPondweed   },
990	{ 0x6840,0xFB111179, CHIP_FAMILY_LOMBOK,"Toshiba HD 7670M",           kPondweed   },
991	{ 0x6840,0xFB221179, CHIP_FAMILY_LOMBOK,"Toshiba HD 7670M",           kPondweed   },
992	{ 0x6840,0xFB231179, CHIP_FAMILY_LOMBOK,"Toshiba HD 7670M",           kPondweed   },
993	{ 0x6840,0xFB2C1179, CHIP_FAMILY_LOMBOK,"Toshiba HD 7670M",           kPondweed   },
994	{ 0x6840,0xFB311179, CHIP_FAMILY_LOMBOK,"Toshiba HD 7670M",           kPondweed   },
995	{ 0x6840,0xFB321179, CHIP_FAMILY_LOMBOK,"Toshiba HD 7670M",           kPondweed   },
996	{ 0x6840,0xFB381179, CHIP_FAMILY_LOMBOK,"Toshiba HD 7670M",           kPondweed   },
997	{ 0x6840,0xFB391179, CHIP_FAMILY_LOMBOK,"Toshiba HD 7670M",           kPondweed   },
998	{ 0x6840,0xFB3A1179, CHIP_FAMILY_LOMBOK,"Toshiba HD 7670M",           kPondweed   },
999	{ 0x6840,0xFB401179, CHIP_FAMILY_LOMBOK,"Toshiba HD 7670M",           kPondweed   },
1000	{ 0x6840,0xFB411179, CHIP_FAMILY_LOMBOK,"Toshiba HD 7670M",           kPondweed   },
1001	{ 0x6840,0xFB471179, CHIP_FAMILY_LOMBOK,"Toshiba HD 7670M",           kPondweed   },
1002	{ 0x6840,0xFB481179, CHIP_FAMILY_LOMBOK,"Toshiba HD 7670M",           kPondweed   },
1003	{ 0x6840,0xFB511179, CHIP_FAMILY_LOMBOK,"Toshiba HD 7670M",           kPondweed   },
1004	{ 0x6840,0xFB521179, CHIP_FAMILY_LOMBOK,"Toshiba HD 7670M",           kPondweed   },
1005	{ 0x6840,0xFB531179, CHIP_FAMILY_LOMBOK,"Toshiba HD 7670M",           kPondweed   },
1006	{ 0x6840,0xFB811179, CHIP_FAMILY_LOMBOK,"Toshiba HD 7670M",           kPondweed   },
1007	{ 0x6840,0xFB821179, CHIP_FAMILY_LOMBOK,"Toshiba HD 7670M",           kPondweed   },
1008	{ 0x6840,0xFB831179, CHIP_FAMILY_LOMBOK,"Toshiba HD 7670M",           kPondweed   },
1009	{ 0x6840,0xFC561179, CHIP_FAMILY_LOMBOK,"Toshiba HD 7670M",           kPondweed   },
1010	{ 0x6840,0xFCD41179, CHIP_FAMILY_LOMBOK,"Toshiba HD 7670M",           kPondweed   },
1011	{ 0x6840,0xFCEE1179, CHIP_FAMILY_LOMBOK,"Toshiba HD 7670M",           kPondweed   },
1012	
1013	/*old series*/
1014	
1015	{ 0x5D48,0x00000000, CHIP_FAMILY_R420,"ATI Radeon HD Mobile ",                kNull },
1016	{ 0x5D49,0x00000000, CHIP_FAMILY_R420,"ATI Radeon HD Mobile ",                kNull },
1017	{ 0x5D4A,0x00000000, CHIP_FAMILY_R420,"ATI Radeon HD Mobile ",                kNull },
1018	
1019	{ 0x5D4C,0x00000000, CHIP_FAMILY_R420,"ATI Radeon HD Desktop ",               kNull },
1020	{ 0x5D4D,0x00000000, CHIP_FAMILY_R420,"ATI Radeon HD Desktop ",               kNull },
1021	{ 0x5D4E,0x00000000, CHIP_FAMILY_R420,"ATI Radeon HD Desktop ",               kNull },
1022	{ 0x5D4F,0x00000000, CHIP_FAMILY_R420,"ATI Radeon HD Desktop ",               kNull },
1023	{ 0x5D50,0x00000000, CHIP_FAMILY_R420,"ATI Radeon HD Desktop ",               kNull },
1024	
1025	{ 0x5D52,0x00000000, CHIP_FAMILY_R420,"ATI Radeon HD Desktop ",               kNull },
1026	
1027	{ 0x5D57,0x00000000, CHIP_FAMILY_R420,"ATI Radeon HD Desktop ",               kNull },
1028	
1029	{ 0x5E48,0x00000000, CHIP_FAMILY_RV410,"ATI Radeon HD Desktop ",               kNull },
1030	
1031	{ 0x5E4A,0x00000000, CHIP_FAMILY_RV410,"ATI Radeon HD Desktop ",               kNull },
1032	{ 0x5E4B,0x00000000, CHIP_FAMILY_RV410,"ATI Radeon HD Desktop ",               kNull },
1033	{ 0x5E4C,0x00000000, CHIP_FAMILY_RV410,"ATI Radeon HD Desktop ",               kNull },
1034	{ 0x5E4D,0x00000000, CHIP_FAMILY_RV410,"ATI Radeon HD Desktop ",               kNull },
1035	
1036	{ 0x5E4F,0x00000000, CHIP_FAMILY_RV410,"ATI Radeon HD Desktop ",               kNull },
1037	
1038	{ 0x7100,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Desktop ",               kNull },
1039	{ 0x7101,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Mobile ",                kNull },
1040	{ 0x7102,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Mobile ",                kNull },
1041	{ 0x7103,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Mobile ",                kNull },
1042	{ 0x7104,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Desktop ",               kNull },
1043	{ 0x7105,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Desktop ",               kNull },
1044	{ 0x7106,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Mobile ",                kNull },
1045	{ 0x7108,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Desktop ",               kNull },
1046	{ 0x7109,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Desktop ",               kNull },
1047	{ 0x710A,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Desktop ",               kNull },
1048	{ 0x710B,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Desktop ",               kNull },
1049	{ 0x710C,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Desktop ",               kNull },
1050	
1051	{ 0x710E,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Desktop ",               kNull },
1052	{ 0x710F,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Desktop ",               kNull },
1053	
1054	{ 0x7140,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ",               kCaretta },
1055	{ 0x7141,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ",               kCaretta },
1056	{ 0x7142,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ",               kCaretta },
1057	{ 0x7143,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ",               kCaretta },
1058	{ 0x7144,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ",                kCaretta },
1059	{ 0x7145,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ",                kCaretta },
1060	{ 0x7146,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ",               kCaretta },
1061	{ 0x7147,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ",               kCaretta },
1062	
1063	{ 0x7149,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ",                kCaretta },
1064	{ 0x714A,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ",                kCaretta },
1065	{ 0x714B,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ",                kCaretta },
1066	{ 0x714C,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ",                kCaretta },
1067	{ 0x714D,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ",               kCaretta },
1068	{ 0x714E,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ",               kCaretta },
1069	{ 0x714F,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ",               kCaretta },
1070	
1071	{ 0x7151,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ",               kCaretta },
1072	{ 0x7152,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ",               kCaretta },
1073	{ 0x7153,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ",               kCaretta },
1074	
1075	{ 0x715E,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ",               kCaretta },
1076	{ 0x715F,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ",               kCaretta },
1077	
1078	{ 0x7180,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ",               kCaretta },
1079	{ 0x7181,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ",               kCaretta },
1080	{ 0x7183,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ",               kCaretta },
1081	
1082	{ 0x7186,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ",                kCaretta },
1083	{ 0x7187,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ",               kCaretta },
1084	{ 0x7188,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ",                kCaretta },
1085	
1086	{ 0x718A,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ",                kCaretta },
1087	{ 0x718B,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ",                kCaretta },
1088	{ 0x718C,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ",                kCaretta },
1089	{ 0x718D,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ",                kCaretta },
1090	
1091	{ 0x718F,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ",               kCaretta },
1092	
1093	{ 0x7193,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ",               kCaretta },
1094	
1095	{ 0x7196,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ",                kCaretta },
1096	
1097	{ 0x719B,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ",               kCaretta },
1098	
1099	{ 0x719F,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ",               kCaretta },
1100	
1101	{ 0x71C0,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Desktop ",               kWormy },
1102	{ 0x71C1,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Desktop ",               kWormy },
1103	{ 0x71C2,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Desktop ",               kWormy },
1104	{ 0x71C3,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Desktop ",               kWormy },
1105	{ 0x71C4,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Mobile ",                kWormy },
1106	
1107	{ 0x71C5,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Mobile ",                kWormy },
1108	{ 0x71C6,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Desktop ",               kWormy },
1109	{ 0x71C7,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Desktop ",               kWormy },
1110	
1111	{ 0x71CD,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Desktop ",               kWormy },
1112	{ 0x71CE,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Desktop ",               kWormy },
1113	
1114	{ 0x71D2,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Desktop ",               kWormy },
1115	
1116	{ 0x71D4,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Mobile ",                kWormy },
1117	{ 0x71D5,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Mobile ",                kWormy },
1118	{ 0x71D6,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Mobile ",                kWormy },
1119	
1120	{ 0x71DA,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Desktop ",               kWormy },
1121	
1122	{ 0x71DE,0x00000000, CHIP_FAMILY_RV530,"ASUS M66 ATI Radeon Mobile ",          kWormy },
1123	
1124	{ 0x7200,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Desktop ",               kWormy },
1125	
1126	{ 0x7210,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Mobile ",                kWormy },
1127	{ 0x7211,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Mobile ",                kWormy },
1128	
1129	{ 0x7240,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ",               kAlopias },
1130	
1131	{ 0x7243,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ",               kAlopias },
1132	{ 0x7244,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ",               kAlopias },
1133	{ 0x7245,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ",               kAlopias },
1134	{ 0x7246,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ",               kAlopias },
1135	{ 0x7247,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ",               kAlopias },
1136	{ 0x7248,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ",               kAlopias },
1137	{ 0x7249,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ",               kAlopias },
1138	{ 0x724A,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ",               kAlopias },
1139	{ 0x724B,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ",               kAlopias },
1140	{ 0x724C,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ",               kAlopias },
1141	{ 0x724D,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ",               kAlopias },
1142	{ 0x724E,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ",               kAlopias },
1143	{ 0x724F,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ",               kAlopias },
1144	
1145	{ 0x7280,0x00000000, CHIP_FAMILY_RV570,"ATI Radeon HD Desktop ",               kAlopias },
1146	{ 0x7281,0x00000000, CHIP_FAMILY_RV560,"ATI Radeon HD Desktop ",               kAlopias },
1147	{ 0x7283,0x00000000, CHIP_FAMILY_RV560,"ATI Radeon HD Desktop ",               kAlopias },
1148	{ 0x7284,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Mobile ",                kAlopias },
1149	
1150	{ 0x7287,0x00000000, CHIP_FAMILY_RV560,"ATI Radeon HD Desktop ",               kAlopias },
1151	{ 0x7288,0x00000000, CHIP_FAMILY_RV570,"ATI Radeon HD Desktop ",               kAlopias },
1152	{ 0x7289,0x00000000, CHIP_FAMILY_RV570,"ATI Radeon HD Desktop ",               kAlopias },
1153	
1154	{ 0x728B,0x00000000, CHIP_FAMILY_RV570,"ATI Radeon HD Desktop ",               kAlopias },
1155	{ 0x728C,0x00000000, CHIP_FAMILY_RV570,"ATI Radeon HD Desktop ",               kAlopias },
1156	
1157	{ 0x7290,0x00000000, CHIP_FAMILY_RV560,"ATI Radeon HD Desktop ",               kAlopias },
1158	{ 0x7291,0x00000000, CHIP_FAMILY_RV560,"ATI Radeon HD Desktop ",               kAlopias },
1159	
1160	{ 0x7293,0x00000000, CHIP_FAMILY_RV560,"ATI Radeon HD Desktop ",               kAlopias },
1161	
1162	{ 0x7297,0x00000000, CHIP_FAMILY_RV560,"ATI Radeon HD Desktop ",               kAlopias },
1163	
1164	/* IGP */
1165	
1166	{ 0x791E,0x00000000, CHIP_FAMILY_RS690,"ATI Radeon IGP ",                      kNull},
1167	{ 0x791F,0x00000000, CHIP_FAMILY_RS690,"ATI Radeon IGP ",                      kNull},
1168	{ 0x796C,0x00000000, CHIP_FAMILY_RS740,"ATI Radeon IGP ",                      kNull},
1169	{ 0x796D,0x00000000, CHIP_FAMILY_RS740,"ATI Radeon IGP ",                      kNull},
1170	{ 0x796E,0x00000000, CHIP_FAMILY_RS740,"ATI Radeon IGP ",                      kNull},
1171	{ 0x796F,0x00000000, CHIP_FAMILY_RS740,"ATI Radeon IGP ",                      kNull},
1172	
1173	/* standard/default models */
1174	
1175	{ 0x9400,0x00000000, CHIP_FAMILY_R600,"ATI Radeon HD 2900 XT",                kNull},
1176	{ 0x9401,0x00000000, CHIP_FAMILY_R600,"ATI Radeon HD 2900 GT",                kNull},
1177	{ 0x9402,0x00000000, CHIP_FAMILY_R600,"ATI Radeon HD 2900 GT",                kNull},
1178	{ 0x9403,0x00000000, CHIP_FAMILY_R600,"ATI Radeon HD 2900 GT",                kNull},
1179	{ 0x9405,0x00000000, CHIP_FAMILY_R600,"ATI Radeon HD 2900 GT",                kNull},
1180	{ 0x940A,0x00000000, CHIP_FAMILY_R600,"ATI Radeon HD 2900 GT",                kNull},
1181	{ 0x940B,0x00000000, CHIP_FAMILY_R600,"ATI Radeon HD 2900 GT",                kNull},
1182	{ 0x940F,0x00000000, CHIP_FAMILY_R600,"ATI Radeon HD 2900 GT",                kNull},
1183	
1184	{ 0x9440,0x00000000, CHIP_FAMILY_RV770,"ATI Radeon HD 4800 Series",kMotmot},
1185	{ 0x9441,0x00000000, CHIP_FAMILY_RV770,"ATI Radeon HD 4870 X2",                kMotmot},
1186	{ 0x9442,0x00000000, CHIP_FAMILY_RV770,"ATI Radeon HD 4800 Series",kMotmot},
1187	{ 0x9443,0x00000000, CHIP_FAMILY_RV770,"ATI Radeon HD 4850 X2",                kMotmot},
1188	{ 0x9444,0x00000000, CHIP_FAMILY_RV770,"ATI FirePro V8750 (FireGL)",           kMotmot},
1189	{ 0x9446,0x00000000, CHIP_FAMILY_RV770,"ATI FirePro V7770 (FireGL)",kMotmot},
1190	{ 0x9447,0x00000000, CHIP_FAMILY_RV770,"ATI FirePro V8700 Duo (FireGL)",kMotmot},
1191	{ 0x944A,0x00000000, CHIP_FAMILY_RV770,"ATI Mobility Radeon HD 4850",kMotmot},
1192	{ 0x944B,0x00000000, CHIP_FAMILY_RV770,"ATI Mobility Radeon HD 4850 X2",kMotmot},
1193	{ 0x944C,0x00000000, CHIP_FAMILY_RV770,"ATI Radeon HD 4830 Series",kMotmot},
1194	{ 0x944E,0x00000000, CHIP_FAMILY_RV770,"ATI Radeon HD 4810 Series",kMotmot},
1195	
1196	{ 0x9450,0x00000000, CHIP_FAMILY_RV770,"AMD FireStream 9270",                  kMotmot},
1197	{ 0x9452,0x00000000, CHIP_FAMILY_RV770,"AMD FireStream 9250",                  kMotmot},
1198	
1199	{ 0x9456,0x00000000, CHIP_FAMILY_RV770,"ATI FirePro V8700 (FireGL)",kMotmot},
1200	{ 0x945A,0x00000000, CHIP_FAMILY_RV770,"ATI Mobility Radeon HD 4870",kMotmot},
1201	
1202	{ 0x9460,0x00000000, CHIP_FAMILY_RV790,"ATI Radeon HD 4800 Series",kMotmot},
1203	{ 0x9462,0x00000000, CHIP_FAMILY_RV790,"ATI Radeon HD 4800 Series",kMotmot},
1204	
1205	{ 0x9480,0x00000000, CHIP_FAMILY_RV730,"ATI Radeon HD 4650 Series",kGliff},
1206	
1207	{ 0x9488,0x00000000, CHIP_FAMILY_RV730,"ATI Radeon HD 4650 Series",kGliff},
1208	
1209	{ 0x9490,0x00000000, CHIP_FAMILY_RV730,"ATI Radeon HD 4710 Series",kGliff},
1210	{ 0x9491,0x00000000, CHIP_FAMILY_RV730,"ATI Radeon HD 4600 Series",kGliff},
1211	{ 0x9495,0x00000000, CHIP_FAMILY_RV730,"ATI Radeon HD 4650 Series",kGliff},
1212	
1213	{ 0x9498,0x00000000, CHIP_FAMILY_RV730,"ATI Radeon HD 4710 Series",kGliff},
1214	
1215	{ 0x94B3,0x00000000, CHIP_FAMILY_RV740,"ATI Radeon HD 4770",                   kFlicker},
1216	{ 0x94B4,0x00000000, CHIP_FAMILY_RV740,"ATI Radeon HD 4700 Series",kFlicker},
1217	{ 0x94B5,0x00000000, CHIP_FAMILY_RV740,"ATI Radeon HD 4770",                   kFlicker},
1218	
1219	{ 0x94C1,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 Series",            kIago},
1220	
1221	{ 0x94C3,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD 2350 Series",            kIago},
1222	
1223	{ 0x94C4,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 Series",            kIago},
1224	{ 0x94C5,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 Series",            kIago},
1225	{ 0x94C6,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 Series",            kIago},
1226	{ 0x94C7,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD 2350",                   kIago},
1227	{ 0x94C8,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 Series",            kIago},
1228	{ 0x94C9,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 Series",            kIago},
1229	
1230	{ 0x94CB,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 Series",            kIago},
1231	{ 0x94CC,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 Series",            kIago},
1232	
1233	{ 0x9500,0x00000000, CHIP_FAMILY_RV670,"ATI Radeon HD 3800 Series",            kMegalodon},
1234	{ 0x9501,0x00000000, CHIP_FAMILY_RV670,"ATI Radeon HD 3690 Series",            kMegalodon},
1235	
1236	{ 0x9505,0x00000000, CHIP_FAMILY_RV670,"ATI Radeon HD 3800 Series",            kMegalodon},
1237	
1238	{ 0x9507,0x00000000, CHIP_FAMILY_RV670,"ATI Radeon HD 3830",                   kMegalodon},
1239	
1240	{ 0x950F,0x00000000, CHIP_FAMILY_RV670,"ATI Radeon HD 3870 X2",                kMegalodon},
1241	
1242	{ 0x9511,0x00000000, CHIP_FAMILY_RV670,"ATI Radeon HD 3850 X2",                kMegalodon},
1243	
1244	{ 0x9513,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 3850 X2",                kMegalodon},
1245	
1246	{ 0x9519,0x00000000, CHIP_FAMILY_RV670,"AMD FireStream 9170",                  kMegalodon},
1247	
1248	{ 0x9540,0x00000000, CHIP_FAMILY_RV710,"ATI Radeon HD 4550",                   kFlicker},
1249	{ 0x954F,0x00000000, CHIP_FAMILY_RV710,"ATI Radeon HD 4350",kFlicker},
1250	
1251	{ 0x9552,0x00000000, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4300/4500 Series",kShrike},
1252	{ 0x9553,0x00000000, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4500M/5100M Series",kShrike},
1253	
1254	{ 0x9555,0x00000000, CHIP_FAMILY_RV710,"ATI Radeon HD4300/HD4500 series",kShrike},
1255	
1256	{ 0x9581,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 3600 Series",kHypoprion},
1257	
1258	{ 0x9583,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 3600 Series",kHypoprion},
1259	
1260	{ 0x9588,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 2600 XT",kHypoprion},
1261	{ 0x9589,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 3610 Series",kHypoprion},
1262	{ 0x958A,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 2600 X2 Series",kLamna},
1263	{ 0x958B,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 2600 X2 Series",kLamna},
1264	{ 0x958C,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 2600 X2 Series",kLamna},
1265	{ 0x958D,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 2600 X2 Series",kLamna},
1266	{ 0x958E,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 2600 X2 Series",kLamna},
1267	
1268	{ 0x9591,0x00000000, CHIP_FAMILY_RV635,"ATI Radeon HD 3600 Series",kMegalodon},
1269	
1270	{ 0x9598,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 3600 Series",kMegalodon},
1271	
1272	{ 0x95C0,0x00000000, CHIP_FAMILY_RV620,"ATI Radeon HD 3400 Series",kIago},
1273	
1274	{ 0x95C5,0x00000000, CHIP_FAMILY_RV620,"ATI Radeon HD 3400 Series",kIago},
1275	
1276	/* IGP */
1277	{ 0x9610,0x00000000, CHIP_FAMILY_RS780,"ATI Radeon HD 3200 Graphics",kNull},
1278	{ 0x9611,0x00000000, CHIP_FAMILY_RS780,"ATI Radeon 3100 Graphics",             kNull},
1279	
1280	{ 0x9614,0x00000000, CHIP_FAMILY_RS780,"ATI Radeon HD 3300 Graphics",kNull},
1281	
1282	{ 0x9616,0x00000000, CHIP_FAMILY_RS780,"ATI Radeon 3000 Graphics",             kNull},
1283	
1284	{ 0x9710,0x00000000, CHIP_FAMILY_RS880,"ATI Radeon HD 4200 Series",kNull},
1285	
1286	{ 0x9714,0x00000000, CHIP_FAMILY_RS880,"ATI Radeon HD 4290 Series",kNull},
1287	{ 0x9715,0x00000000, CHIP_FAMILY_RS880,"ATI Radeon HD 4250 Series",kNull},
1288	
1289	{ 0x9723,0x00000000, CHIP_FAMILY_RS880,"ATI Radeon HD 5450 Series",kNull},
1290	
1291	{ 0x9802,0x00000000, CHIP_FAMILY_RS880,"ATI Radeon HD 6310 Series",kNull},
1292	{ 0x9803,0x00000000, CHIP_FAMILY_RS880,"ATI Radeon HD 6310 Series",kNull},
1293	{ 0x9804,0x00000000, CHIP_FAMILY_RS880,"ATI Radeon HD 6310 Series",kNull},
1294	{ 0x9805,0x00000000, CHIP_FAMILY_RS880,"ATI Radeon HD 6250 Series",kNull},
1295	{ 0x9806,0x00000000, CHIP_FAMILY_RS880,"ATI Radeon HD 6320 Series",kNull},
1296	
1297	/* Evergreen */
1298	{ 0x688D,0x00000000, CHIP_FAMILY_CYPRESS,"AMD FireStream 9350 Series",kUakari},
1299	
1300	{ 0x6898,0x00000000, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5800 Series",kUakari},
1301	{ 0x6899,0x00000000, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5800 Series",kUakari},
1302	
1303	//{ 0x689B,0x00000000, CHIP_FAMILY_???,"AMD Radeon HD 6800 Series",kNull},
1304	{ 0x689C,0x00000000, CHIP_FAMILY_HEMLOCK,"ATI Radeon HD 5900 Series",kUakari},
1305	
1306	{ 0x689E,0x00000000, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5800 Series",kUakari},
1307	
1308	{ 0x68A0,0x00000000, CHIP_FAMILY_JUNIPER,"ATI Mobility Radeon HD 5800 Series",   kNomascus}, // CHIP_FAMILY_BROADWAY ??
1309	{ 0x68A1,0x00000000, CHIP_FAMILY_JUNIPER,"ATI Mobility Radeon HD 5800 Series",   kNomascus}, // CHIP_FAMILY_BROADWAY ??
1310	
1311	{ 0x68A8,0x00000000, CHIP_FAMILY_JUNIPER,"AMD Mobility Radeon HD 6800 Series",   kUakari},
1312	{ 0x68A9,0x00000000, CHIP_FAMILY_JUNIPER,"ATI FirePro V5800 (FireGL)",kNull},
1313	
1314	
1315	{ 0x68B0,0x00000000, CHIP_FAMILY_CYPRESS,"ATI Mobility Radeon HD 5800 Series",   kVervet}, // CHIP_FAMILY_BROADWAY ??
1316	{ 0x68B1,0x00000000, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770 Series",kVervet},
1317	
1318	{ 0x68B8,0x00000000, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5700 Series",kVervet},
1319	{ 0x68B9,0x00000000, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5600 Series",kVervet},
1320	{ 0x68BA,0x00000000, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 6700 Series",kVervet},
1321	
1322	{ 0x68BE,0x00000000, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5700 Series",kVervet},
1323	{ 0x68BF,0x00000000, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6700 Series",kVervet},
1324	
1325	{ 0x68C0,0x00000000, CHIP_FAMILY_REDWOOD,"AMD Radeon HD 6570M/5700 Series",kBaboon},
1326	{ 0x68C1,0x00000000, CHIP_FAMILY_REDWOOD,"AMD Radeon HD 6500M/5600/5700 Series",kBaboon},
1327	{ 0x68C8,0x00000000, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5650 Series",kVervet},
1328	{ 0x68C9,0x00000000, CHIP_FAMILY_REDWOOD,"ATI FirePro V3800 (FireGL)",kBaboon},
1329	
1330	{ 0x68D8,0x00000000, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5670 Series",kBaboon},
1331	{ 0x68D9,0x00000000, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5500/5600 Series",kBaboon},
1332	{ 0x68DA,0x00000000, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5500 Series",kBaboon},
1333	
1334	//{ 0x68DE,0x00000000, CHIP_FAMILY_REDWOOD,"ATI Radeon HD ??? Series",kNull},
1335	
1336	
1337	{ 0x68E0,0x00000000, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5400 Series",   kEulemur},
1338	{ 0x68E1,0x00000000, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5400 Series",   kEulemur},
1339	
1340	{ 0x68E4,0x00000000, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6370M Series",kEulemur},
1341	{ 0x68E5,0x00000000, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6300M Series",kEulemur},
1342	
1343	//{ 0x68E8,0x00000000, CHIP_FAMILY_CEDAR,"ATI Radeon HD ??? Series",kNull},
1344	//{ 0x68E9,0x00000000, CHIP_FAMILY_CEDAR,"ATI Radeon HD ??? Series",kNull},
1345	
1346	//{ 0x68F8,0x00000000, CHIP_FAMILY_CEDAR,"ATI Radeon HD ??? Series",kNull},
1347	{ 0x68F9,0x00000000, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470 Series",kEulemur},
1348	{ 0x68FA,0x00000000, CHIP_FAMILY_CEDAR,"ATI Radeon HD 7300 Series",kNull},
1349	
1350	//{ 0x68FE,0x00000000, CHIP_FAMILY_CEDAR,"ATI Radeon HD ??? Series",kNull},
1351	
1352	
1353	/* Northen Islands */
1354	{ 0x6718,0x00000000, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970 Series",kLotus},
1355	{ 0x6719,0x00000000, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950 Series",kGibba},
1356	
1357	{ 0x671C,0x00000000, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970 Series",kLotus},
1358	{ 0x671D,0x00000000, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950 Series",kLotus},
1359	
1360	{ 0x671F,0x00000000, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6930 Series",kLotus},
1361	
1362	{ 0x6720,0x00000000, CHIP_FAMILY_BARTS,"AMD Radeon HD 6900M Series",kDuckweed},
1363	
1364	{ 0x6722,0x00000000, CHIP_FAMILY_BARTS,"AMD Radeon HD 6900M Series",kDuckweed},
1365	{ 0x6738,0x00000000, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870 Series",kDuckweed},
1366	{ 0x6739,0x00000000, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850 Series",kDuckweed},
1367	
1368	{ 0x673E,0x00000000, CHIP_FAMILY_BARTS,"AMD Radeon HD 6790 Series",kDuckweed},
1369	
1370	{ 0x6740,0x00000000, CHIP_FAMILY_TURKS,"AMD Radeon HD 6770M Series",kPithecia},
1371	{ 0x6741,0x00000000, CHIP_FAMILY_TURKS,"AMD Radeon HD 6600M/6700M Series",kPithecia},
1372	
1373	{ 0x6745,0x00000000, CHIP_FAMILY_TURKS,"AMD Radeon HD 6600M Series",kPithecia},
1374	{ 0x6750,0x00000000, CHIP_FAMILY_TURKS,"AMD Radeon HD 6600A Series",kPithecia},
1375	
1376	{ 0x6758,0x00000000, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670 Series",kPithecia},
1377	{ 0x6759,0x00000000, CHIP_FAMILY_TURKS,"AMD Radeon HD 6570/7570 Series",kPithecia},
1378	
1379	{ 0x675D,0x00000000, CHIP_FAMILY_TURKS,"AMD Radeon HD 7500 Series",kBulrushes},
1380	
1381	{ 0x675F,0x00000000, CHIP_FAMILY_TURKS,"AMD Radeon HD 5500 Series",kBulrushes},
1382	{ 0x6760,0x00000000, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6400M Series",kBulrushes},
1383	{ 0x6761,0x00000000, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6430M Series",kBulrushes},
1384	{ 0x6768,0x00000000, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6400M Series",kBulrushes},
1385	
1386	{ 0x6770,0x00000000, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6400 Series",kBulrushes},
1387	
1388	{ 0x6772,0x00000000, CHIP_FAMILY_CAICOS,"AMD Radeon HD 7400A Series",kNull},
1389	
1390	{ 0x6778,0x00000000, CHIP_FAMILY_CAICOS,"AMD Radeon HD 7000 Series",kNull},
1391	{ 0x6779,0x00000000, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450 Series",kBulrushes},
1392	
1393	{ 0x677B,0x00000000, CHIP_FAMILY_CAICOS,"AMD Radeon HD 7400 Series",kNull},
1394	
1395	/* Southen Islands */
1396	
1397	{ 0x6780,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7900 Series",             kDashimaki},
1398	
1399	//{ 0x6784,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD ??? Series",             kNull},
1400	
1401	//{ 0x6788,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD ??? Series",             kNull},
1402	
1403	//{ 0x678A,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD ??? Series",             kNull},
1404	
1405	{ 0x6790,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7900 Series",             kDashimaki},
1406	
1407	{ 0x6798,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970 Series",            kDashimaki},
1408	{ 0x6799,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7990 Series",            kAji},
1409	{ 0x679A,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950 Series",            kDashimaki},
1410	
1411	//{ 0x679E,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD ??? Series",             kNull},
1412	//{ 0x679F,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD ??? Series",             kNull},
1413	
1414	{ 0x6800,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970M Series",           kDashimaki},
1415	//{ 0x6801,0x00000000, CHIP_FAMILY_PITCAIRN,"AMD Radeon HD ???M Series",            kNull},
1416	//{ 0x6802,0x00000000, CHIP_FAMILY_PITCAIRN,"AMD Radeon HD ???M Series",            kNull},
1417	
1418	{ 0x6806,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7600 Series",             kDashimaki},
1419	
1420	{ 0x6808,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7600 Series",             kDashimaki},
1421	//{ 0x6809,0x00000000, CHIP_FAMILY_PITCAIRN,"AMD Radeon HD ??? Series",             kNull},
1422	//{ 0x6810,0x00000000, CHIP_FAMILY_PITCAIRN,"AMD Radeon HD ??? Series",             kNull},
1423	
1424	{ 0x6818,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7800 Series",            kDashimaki},
1425	{ 0x6819,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7800 Series",            kDashimaki},
1426	{ 0x6820,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7800M Series",            kDashimaki},
1427	{ 0x6821,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7800M Series",            kDashimaki},
1428	
1429	//{ 0x6823,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD ???M Series",            kNull},
1430	//{ 0x6824,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD 7700M Series",            kNull},
1431	{ 0x6825,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7800M Series",            kDashimaki},
1432	//{ 0x6826,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD 7700M Series",            kNull},
1433	{ 0x6827,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7800M Series",           kDashimaki      },
1434	//{ 0x6828,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD ??? Series",             kNull},
1435	//{ 0x6829,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD ??? Series",             kNull},
1436	
1437	{ 0x682D,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7700M Series",            kDashimaki},
1438	
1439	{ 0x682F,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7700M Series",            kDashimaki},
1440	
1441	//{ 0x6830,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD ??? Series",             kNull},
1442	//{ 0x6831,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD ??? Series",             kNull},
1443	
1444	//{ 0x6837,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD ??? Series",             kNull},
1445	//{ 0x6838,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD ??? Series",             kNull},
1446	{ 0x6839,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7700 Series",            kDashimaki},
1447	
1448	{ 0x683B,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7700 Series",            kDashimaki},
1449	
1450	{ 0x683D,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7700 Series",            kDashimaki},
1451	
1452	{ 0x683F,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7700 Series",            kChutoro},
1453	
1454	{ 0x6840,0x00000000, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7600M Series",           kPondweed   },
1455	//{ 0x6841,0x00000000, CHIP_FAMILY_THAMES,"AMD Radeon HD 7850 Series",             kNull},
1456	//{ 0x6842,0x00000000, CHIP_FAMILY_THAMES,"AMD Radeon HD 7000M Series",            kNull},
1457	//{ 0x6843,0x00000000, CHIP_FAMILY_THAMES,"AMD Radeon HD 7670M Series",            kNull},
1458	
1459	//{ 0x684C,0x00000000, CHIP_FAMILY_PITCAIRN,"AMD Radeon HD ??? Series",             kNull},
1460	
1461	{ 0x0000,0x00000000, CHIP_FAMILY_UNKNOW,NULL,kNull}
1462	};
1463	
1464	
1465	dev_prop_t ati_devprop_list[] = {
1466	{FLAGTRUE,false,"@0,AAPL,boot-display",get_bootdisplay_val,NULVAL},
1467	//{FLAGTRUE,false,"@0,ATY,EFIDisplay",NULL,STRVAL("TMDSA")},
1468	
1469	//{FLAGTRUE,true,"@0,AAPL,vram-memory",get_vrammemory_val,NULVAL},
1470	//{FLAGTRUE,true,"@0,compatible",get_name_val,NULVAL},
1471	//{FLAGTRUE,true,"@0,connector-type",get_conntype_val,NULVAL},
1472	//{FLAGTRUE,true,"@0,device_type",NULL,STRVAL("display")},
1473	//{FLAGTRUE,false,"@0,display-connect-flags", NULL,DWRVAL((uint32_t)0)},
1474	//{FLAGTRUE,true,"@0,display-type",NULL,STRVAL("NONE")},
1475	{FLAGTRUE,true,"@0,name",get_name_val,NULVAL},
1476	//{FLAGTRUE,true,"@0,VRAM,memsize",get_vrammemsize_val,NULVAL},
1477	
1478	//{FLAGTRUE,false,"AAPL,aux-power-connected", NULL,DWRVAL((uint32_t)1)},
1479	//{FLAGTRUE,false,"AAPL,backlight-control",NULL,DWRVAL((uint32_t)0)},
1480	{FLAGTRUE,false,"ATY,bin_image",get_binimage_val,NULVAL},
1481	{FLAGTRUE,false,"ATY,Copyright",NULL,STRVAL("Copyright AMD Inc. All Rights Reserved. 2005-2010") },
1482	{FLAGTRUE,false,"ATY,Card#",get_romrevision_val,NULVAL},
1483	{FLAGTRUE,false,"ATY,VendorID",NULL,WRDVAL((uint16_t)0x1002)},
1484	{FLAGTRUE,false,"ATY,DeviceID",get_deviceid_val,NULVAL},
1485	
1486	//{FLAGTRUE,false,"ATY,MCLK",get_mclk_val,NULVAL},
1487	//{FLAGTRUE,false,"ATY,SCLK",get_sclk_val,NULVAL},
1488	//{FLAGTRUE,false,"ATY,RefCLK",get_refclk_val,DWRVAL((uint32_t)0x0a8c)},
1489	
1490	//{FLAGTRUE,false,"ATY,PlatformInfo",get_platforminfo_val,NULVAL},
1491	
1492	{FLAGTRUE,false,"name",get_nameparent_val,NULVAL},
1493	{FLAGTRUE,false,"device_type",get_nameparent_val,NULVAL},
1494	{FLAGTRUE,false,"model",get_model_val,STRVAL("ATI Radeon")},
1495	//{FLAGTRUE,false,"VRAM,totalsize",get_vramtotalsize_val,NULVAL},
1496	{FLAGTRUE,false, "hda-gfx",get_hdmiaudio,NULVAL},
1497	
1498	{FLAGTRUE,false,NULL,NULL,NULVAL}
1499	};
1500	
1501	bool get_hdmiaudio(value_t * val)
1502	{
1503	bool doit = false;
1504	if(getBoolForKey(kEnableHDMIAudio, &doit, &bootInfo->chameleonConfig) && doit){
1505	val->type = kStr;
1506	val->size = strlen("onboard-1") + 1;
1507	val->data = (uint8_t *)"onboard-1";
1508	
1509	return true;
1510	
1511	
1512	
1513	}
1514	return false;
1515	}
1516	
1517	bool get_bootdisplay_val(value_t *val)
1518	{
1519	static uint32_t v = 0;
1520	
1521	if (v)
1522	return false;
1523	
1524	if (!card->posted)
1525	return false;
1526	
1527	v = 1;
1528	val->type = kCst;
1529	val->size = 4;
1530	val->data = (uint8_t *)&v;
1531	
1532	return true;
1533	}
1534	
1535	bool get_vrammemory_val(value_t *val)
1536	{
1537	return false;
1538	}
1539	
1540	bool get_name_val(value_t *val)
1541	{
1542	val->type = aty_name.type;
1543	val->size = aty_name.size;
1544	val->data = aty_name.data;
1545	
1546	return true;
1547	}
1548	
1549	bool get_nameparent_val(value_t *val)
1550	{
1551	val->type = aty_nameparent.type;
1552	val->size = aty_nameparent.size;
1553	val->data = aty_nameparent.data;
1554	
1555	return true;
1556	}
1557	
1558	bool get_model_val(value_t *val)
1559	{
1560	if (!card->info->model_name)
1561	return false;
1562	
1563	val->type = kStr;
1564	val->size = strlen(card->info->model_name) + 1;
1565	val->data = (uint8_t *)card->info->model_name;
1566	
1567	return true;
1568	}
1569	
1570	bool get_conntype_val(value_t *val)
1571	{
1572	//Connector types:
1573	//0x4 : DisplayPort
1574	//0x400: DL DVI-I
1575	//0x800: HDMI
1576	
1577	return false;
1578	}
1579	
1580	bool get_vrammemsize_val(value_t *val)
1581	{
1582	static int idx = -1;
1583	static uint64_t memsize;
1584	
1585	idx++;
1586	memsize = ((uint64_t)card->vram_size << 32);
1587	if (idx == 0)
1588	memsize = memsize | (uint64_t)card->vram_size;
1589	
1590	val->type = kCst;
1591	val->size = 8;
1592	val->data = (uint8_t *)&memsize;
1593	
1594	return true;
1595	}
1596	
1597	bool get_binimage_val(value_t *val)
1598	{
1599	if (!card->rom)
1600	return false;
1601	
1602	val->type = kPtr;
1603	val->size = card->rom_size;
1604	val->data = card->rom;
1605	
1606	return true;
1607	}
1608	
1609	bool get_romrevision_val(value_t *val)
1610	{
1611	uint8_t *rev;
1612	if (!card->rom)
1613	return false;
1614	
1615	rev = card->rom + *(uint8_t *)(card->rom + OFFSET_TO_GET_ATOMBIOS_STRINGS_START);
1616	
1617	val->type = kPtr;
1618	val->size = strlen((char *)rev);
1619	val->data = malloc(val->size);
1620	
1621	if (!val->data)
1622	return false;
1623	
1624	memcpy(val->data, rev, val->size);
1625	
1626	return true;
1627	}
1628	
1629	bool get_deviceid_val(value_t *val)
1630	{
1631	val->type = kCst;
1632	val->size = 2;
1633	val->data = (uint8_t *)&card->pci_dev->device_id;
1634	
1635	return true;
1636	}
1637	
1638	bool get_mclk_val(value_t *val)
1639	{
1640	return false;
1641	}
1642	
1643	bool get_sclk_val(value_t *val)
1644	{
1645	return false;
1646	}
1647	
1648	bool get_refclk_val(value_t *val)
1649	{
1650	return false;
1651	}
1652	
1653	bool get_platforminfo_val(value_t *val)
1654	{
1655	val->data = malloc(0x80);
1656	if (!val->data)
1657	return false;
1658	
1659	bzero(val->data, 0x80);
1660	
1661	val->type= kPtr;
1662	val->size= 0x80;
1663	val->data[0]= 1;
1664	
1665	return true;
1666	}
1667	
1668	bool get_vramtotalsize_val(value_t *val)
1669	{
1670	val->type = kCst;
1671	val->size = 4;
1672	val->data = (uint8_t *)&card->vram_size;
1673	
1674	return true;
1675	}
1676	
1677	void free_val(value_t *val)
1678	{
1679	if (val->type == kPtr)
1680	free(val->data);
1681	
1682	bzero(val, sizeof(value_t));
1683	}
1684	
1685	void devprop_add_list(dev_prop_t devprop_list[])
1686	{
1687	value_t *val = malloc(sizeof(value_t));
1688	int i, pnum;
1689	
1690	for (i = 0; devprop_list[i].name != NULL; i++)
1691	{
1692	if ((devprop_list[i].flags == FLAGTRUE) || (devprop_list[i].flags | card->flags))
1693	{
1694	if (devprop_list[i].get_value && devprop_list[i].get_value(val))
1695	{
1696	devprop_add_value(card->device, devprop_list[i].name, val->data, val->size);
1697	free_val(val);
1698	
1699	if (devprop_list[i].all_ports)
1700	{
1701	for (pnum = 1; pnum < card->ports; pnum++)
1702	{
1703	if (devprop_list[i].get_value(val))
1704	{
1705	devprop_list[i].name[1] = 0x30 + pnum; // convert to ascii
1706	devprop_add_value(card->device, devprop_list[i].name, val->data, val->size);
1707	free_val(val);
1708	}
1709	}
1710	devprop_list[i].name[1] = 0x30; // write back our "@0," for a next possible card
1711	}
1712	}
1713	else
1714	{
1715	if (devprop_list[i].default_val.type != kNul)
1716	{
1717	devprop_add_value(card->device, devprop_list[i].name,
1718	devprop_list[i].default_val.type == kCst ?
1719	(uint8_t *)&(devprop_list[i].default_val.data) : devprop_list[i].default_val.data,
1720	devprop_list[i].default_val.size);
1721	}
1722	
1723	if (devprop_list[i].all_ports)
1724	{
1725	for (pnum = 1; pnum < card->ports; pnum++)
1726	{
1727	if (devprop_list[i].default_val.type != kNul)
1728	{
1729	devprop_list[i].name[1] = 0x30 + pnum; // convert to ascii
1730	devprop_add_value(card->device, devprop_list[i].name,
1731	devprop_list[i].default_val.type == kCst ?
1732	(uint8_t *)&(devprop_list[i].default_val.data) : devprop_list[i].default_val.data,
1733	devprop_list[i].default_val.size);
1734	}
1735	}
1736	devprop_list[i].name[1] = 0x30; // write back our "@0," for a next possible card
1737	}
1738	}
1739	}
1740	}
1741	
1742	free(val);
1743	}
1744	
1745	bool validate_rom(option_rom_header_t *rom_header, pci_dt_t *pci_dev)
1746	{
1747	option_rom_pci_header_t *rom_pci_header;
1748	
1749	if (rom_header->signature != 0xaa55)
1750	return false;
1751	
1752	rom_pci_header = (option_rom_pci_header_t *)((uint8_t *)rom_header + rom_header->pci_header_offset);
1753	
1754	if (rom_pci_header->signature != 0x52494350)
1755	return false;
1756	
1757	if (rom_pci_header->vendor_id != pci_dev->vendor_id || rom_pci_header->device_id != pci_dev->device_id)
1758	return false;
1759	
1760	return true;
1761	}
1762	
1763	bool load_vbios_file(const char *key, uint16_t vendor_id, uint16_t device_id, uint32_t subsys_id)
1764	{
1765	int fd;
1766	char file_name[24];
1767	bool do_load = false;
1768	
1769	getBoolForKey(key, &do_load, &bootInfo->chameleonConfig);
1770	if (!do_load)
1771	return false;
1772	
1773	sprintf(file_name, "/Extra/%04x_%04x_%08x.rom", vendor_id, device_id, subsys_id);
1774	if ((fd = open_bvdev("bt(0,0)", file_name, 0)) < 0)
1775	return false;
1776	
1777	card->rom_size = file_size(fd);
1778	card->rom = malloc(card->rom_size);
1779	if (!card->rom)
1780	return false;
1781	
1782	read(fd, (char *)card->rom, card->rom_size);
1783	
1784	if (!validate_rom((option_rom_header_t *)card->rom, card->pci_dev))
1785	{
1786	card->rom_size = 0;
1787	card->rom = 0;
1788	return false;
1789	}
1790	
1791	card->rom_size = ((option_rom_header_t *)card->rom)->rom_size * 512;
1792	
1793	close(fd);
1794	
1795	return true;
1796	}
1797	
1798	void get_vram_size(void)
1799	{
1800	ati_chip_family_t chip_family = card->info->chip_family;
1801	
1802	card->vram_size = 0;
1803	
1804	if (chip_family >= CHIP_FAMILY_CEDAR)
1805	// size in MB on evergreen
1806	// XXX watch for overflow!!!
1807	card->vram_size = RegRead32(R600_CONFIG_MEMSIZE) * 1024 * 1024;
1808	else
1809	if (chip_family >= CHIP_FAMILY_R600)
1810	card->vram_size = RegRead32(R600_CONFIG_MEMSIZE);
1811	}
1812	
1813	bool read_vbios(bool from_pci)
1814	{
1815	option_rom_header_t *rom_addr;
1816	
1817	if (from_pci)
1818	{
1819	rom_addr = (option_rom_header_t *)(pci_config_read32(card->pci_dev->dev.addr, PCI_ROM_ADDRESS) & ~0x7ff);
1820	verbose(" @0x%x", rom_addr);
1821	}
1822	else
1823	rom_addr = (option_rom_header_t *)0xc0000;
1824	
1825	if (!validate_rom(rom_addr, card->pci_dev))
1826	return false;
1827	
1828	card->rom_size = rom_addr->rom_size * 512;
1829	if (!card->rom_size)
1830	return false;
1831	
1832	card->rom = malloc(card->rom_size);
1833	if (!card->rom)
1834	return false;
1835	
1836	memcpy(card->rom, (void *)rom_addr, card->rom_size);
1837	
1838	return true;
1839	}
1840	
1841	bool read_disabled_vbios(void)
1842	{
1843	bool ret = false;
1844	ati_chip_family_t chip_family = card->info->chip_family;
1845	
1846	if (chip_family >= CHIP_FAMILY_RV770)
1847	{
1848	uint32_t viph_control= RegRead32(RADEON_VIPH_CONTROL);
1849	uint32_t bus_cntl= RegRead32(RADEON_BUS_CNTL);
1850	uint32_t d1vga_control= RegRead32(AVIVO_D1VGA_CONTROL);
1851	uint32_t d2vga_control= RegRead32(AVIVO_D2VGA_CONTROL);
1852	uint32_t vga_render_control = RegRead32(AVIVO_VGA_RENDER_CONTROL);
1853	uint32_t rom_cntl= RegRead32(R600_ROM_CNTL);
1854	uint32_t cg_spll_func_cntl= 0;
1855	uint32_t cg_spll_status;
1856	
1857	// disable VIP
1858	RegWrite32(RADEON_VIPH_CONTROL, (viph_control & ~RADEON_VIPH_EN));
1859	
1860	// enable the rom
1861	RegWrite32(RADEON_BUS_CNTL, (bus_cntl & ~RADEON_BUS_BIOS_DIS_ROM));
1862	
1863	// Disable VGA mode
1864	RegWrite32(AVIVO_D1VGA_CONTROL, (d1vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE | AVIVO_DVGA_CONTROL_TIMING_SELECT)));
1865	RegWrite32(AVIVO_D2VGA_CONTROL, (d2vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE | AVIVO_DVGA_CONTROL_TIMING_SELECT)));
1866	RegWrite32(AVIVO_VGA_RENDER_CONTROL, (vga_render_control & ~AVIVO_VGA_VSTATUS_CNTL_MASK));
1867	
1868	if (chip_family == CHIP_FAMILY_RV730)
1869	{
1870	cg_spll_func_cntl = RegRead32(R600_CG_SPLL_FUNC_CNTL);
1871	
1872	// enable bypass mode
1873	RegWrite32(R600_CG_SPLL_FUNC_CNTL, (cg_spll_func_cntl | R600_SPLL_BYPASS_EN));
1874	
1875	// wait for SPLL_CHG_STATUS to change to 1
1876	cg_spll_status = 0;
1877	while (!(cg_spll_status & R600_SPLL_CHG_STATUS))
1878	cg_spll_status = RegRead32(R600_CG_SPLL_STATUS);
1879	
1880	RegWrite32(R600_ROM_CNTL, (rom_cntl & ~R600_SCK_OVERWRITE));
1881	}
1882	else
1883	RegWrite32(R600_ROM_CNTL, (rom_cntl | R600_SCK_OVERWRITE));
1884	
1885	ret = read_vbios(true);
1886	
1887	// restore regs
1888	if (chip_family == CHIP_FAMILY_RV730)
1889	{
1890	RegWrite32(R600_CG_SPLL_FUNC_CNTL, cg_spll_func_cntl);
1891	
1892	// wait for SPLL_CHG_STATUS to change to 1
1893	cg_spll_status = 0;
1894	while (!(cg_spll_status & R600_SPLL_CHG_STATUS))
1895	cg_spll_status = RegRead32(R600_CG_SPLL_STATUS);
1896	}
1897	RegWrite32(RADEON_VIPH_CONTROL, viph_control);
1898	RegWrite32(RADEON_BUS_CNTL, bus_cntl);
1899	RegWrite32(AVIVO_D1VGA_CONTROL, d1vga_control);
1900	RegWrite32(AVIVO_D2VGA_CONTROL, d2vga_control);
1901	RegWrite32(AVIVO_VGA_RENDER_CONTROL, vga_render_control);
1902	RegWrite32(R600_ROM_CNTL, rom_cntl);
1903	}
1904	else
1905	if (chip_family >= CHIP_FAMILY_R600)
1906	{
1907	uint32_t viph_control= RegRead32(RADEON_VIPH_CONTROL);
1908	uint32_t bus_cntl= RegRead32(RADEON_BUS_CNTL);
1909	uint32_t d1vga_control= RegRead32(AVIVO_D1VGA_CONTROL);
1910	uint32_t d2vga_control= RegRead32(AVIVO_D2VGA_CONTROL);
1911	uint32_t vga_render_control= RegRead32(AVIVO_VGA_RENDER_CONTROL);
1912	uint32_t rom_cntl= RegRead32(R600_ROM_CNTL);
1913	uint32_t general_pwrmgt= RegRead32(R600_GENERAL_PWRMGT);
1914	uint32_t low_vid_lower_gpio_cntl= RegRead32(R600_LOW_VID_LOWER_GPIO_CNTL);
1915	uint32_t medium_vid_lower_gpio_cntl = RegRead32(R600_MEDIUM_VID_LOWER_GPIO_CNTL);
1916	uint32_t high_vid_lower_gpio_cntl= RegRead32(R600_HIGH_VID_LOWER_GPIO_CNTL);
1917	uint32_t ctxsw_vid_lower_gpio_cntl= RegRead32(R600_CTXSW_VID_LOWER_GPIO_CNTL);
1918	uint32_t lower_gpio_enable= RegRead32(R600_LOWER_GPIO_ENABLE);
1919	
1920	// disable VIP
1921	RegWrite32(RADEON_VIPH_CONTROL, (viph_control & ~RADEON_VIPH_EN));
1922	
1923	// enable the rom
1924	RegWrite32(RADEON_BUS_CNTL, (bus_cntl & ~RADEON_BUS_BIOS_DIS_ROM));
1925	
1926	// Disable VGA mode
1927	RegWrite32(AVIVO_D1VGA_CONTROL, (d1vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE | AVIVO_DVGA_CONTROL_TIMING_SELECT)));
1928	RegWrite32(AVIVO_D2VGA_CONTROL, (d2vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE | AVIVO_DVGA_CONTROL_TIMING_SELECT)));
1929	RegWrite32(AVIVO_VGA_RENDER_CONTROL, (vga_render_control & ~AVIVO_VGA_VSTATUS_CNTL_MASK));
1930	RegWrite32(R600_ROM_CNTL, ((rom_cntl & ~R600_SCK_PRESCALE_CRYSTAL_CLK_MASK) | (1 << R600_SCK_PRESCALE_CRYSTAL_CLK_SHIFT) | R600_SCK_OVERWRITE));
1931	RegWrite32(R600_GENERAL_PWRMGT, (general_pwrmgt & ~R600_OPEN_DRAIN_PADS));
1932	RegWrite32(R600_LOW_VID_LOWER_GPIO_CNTL, (low_vid_lower_gpio_cntl & ~0x400));
1933	RegWrite32(R600_MEDIUM_VID_LOWER_GPIO_CNTL, (medium_vid_lower_gpio_cntl & ~0x400));
1934	RegWrite32(R600_HIGH_VID_LOWER_GPIO_CNTL, (high_vid_lower_gpio_cntl & ~0x400));
1935	RegWrite32(R600_CTXSW_VID_LOWER_GPIO_CNTL, (ctxsw_vid_lower_gpio_cntl & ~0x400));
1936	RegWrite32(R600_LOWER_GPIO_ENABLE, (lower_gpio_enable | 0x400));
1937	
1938	ret = read_vbios(true);
1939	
1940	// restore regs
1941	RegWrite32(RADEON_VIPH_CONTROL, viph_control);
1942	RegWrite32(RADEON_BUS_CNTL, bus_cntl);
1943	RegWrite32(AVIVO_D1VGA_CONTROL, d1vga_control);
1944	RegWrite32(AVIVO_D2VGA_CONTROL, d2vga_control);
1945	RegWrite32(AVIVO_VGA_RENDER_CONTROL, vga_render_control);
1946	RegWrite32(R600_ROM_CNTL, rom_cntl);
1947	RegWrite32(R600_GENERAL_PWRMGT, general_pwrmgt);
1948	RegWrite32(R600_LOW_VID_LOWER_GPIO_CNTL, low_vid_lower_gpio_cntl);
1949	RegWrite32(R600_MEDIUM_VID_LOWER_GPIO_CNTL, medium_vid_lower_gpio_cntl);
1950	RegWrite32(R600_HIGH_VID_LOWER_GPIO_CNTL, high_vid_lower_gpio_cntl);
1951	RegWrite32(R600_CTXSW_VID_LOWER_GPIO_CNTL, ctxsw_vid_lower_gpio_cntl);
1952	RegWrite32(R600_LOWER_GPIO_ENABLE, lower_gpio_enable);
1953	}
1954	
1955	return ret;
1956	}
1957	
1958	bool radeon_card_posted(void)
1959	{
1960	uint32_t reg;
1961	
1962	// first check CRTCs
1963	reg = RegRead32(RADEON_CRTC_GEN_CNTL) | RegRead32(RADEON_CRTC2_GEN_CNTL);
1964	if (reg & RADEON_CRTC_EN)
1965	return true;
1966	
1967	// then check MEM_SIZE, in case something turned the crtcs off
1968	reg = RegRead32(R600_CONFIG_MEMSIZE);
1969	if (reg)
1970	return true;
1971	
1972	return false;
1973	}
1974	
1975	#if 0
1976	bool devprop_add_pci_config_space(void)
1977	{
1978	int offset;
1979	
1980	uint8_t *config_space = malloc(0x100);
1981	if (!config_space)
1982	return false;
1983	
1984	for (offset = 0; offset < 0x100; offset += 4)
1985	config_space[offset / 4] = pci_config_read32(card->pci_dev->dev.addr, offset);
1986	
1987	devprop_add_value(card->device, "ATY,PCIConfigSpace", config_space, 0x100);
1988	free(config_space);
1989	
1990	return true;
1991	}
1992	#endif
1993	
1994	static bool init_card(pci_dt_t *pci_dev)
1995	{
1996	booladd_vbios = true;
1997	charname[24];
1998	charname_parent[24];
1999	inti;
2000	intn_ports = 0;
2001	
2002	card = malloc(sizeof(card_t));
2003	if (!card)
2004	return false;
2005	bzero(card, sizeof(card_t));
2006	
2007	card->pci_dev = pci_dev;
2008	
2009	for (i = 0; radeon_cards[i].device_id ; i++)
2010	{
2011	if (radeon_cards[i].device_id == pci_dev->device_id)
2012	{
2013	card->info = &radeon_cards[i];
2014	if ((radeon_cards[i].subsys_id == 0x00000000) ||
2015	(radeon_cards[i].subsys_id == pci_dev->subsys_id.subsys_id))
2016	break;
2017	}
2018	}
2019	
2020	    
2021	    //why can't this check go down to 1411?
2022	    //If we move it down we would still allow the cfg_name check
2023	    
2024	//if (!card->info->device_id || !card->info->cfg_name)
2025	    if (!card->info->device_id)
2026	{
2027	verbose("Unsupported ATI card! Device ID: [%04x:%04x] Subsystem ID: [%08x] \n", 
2028	pci_dev->vendor_id, pci_dev->device_id, pci_dev->subsys_id);
2029	return false;
2030	}
2031	
2032	card->fb= (uint8_t *)(pci_config_read32(pci_dev->dev.addr, PCI_BASE_ADDRESS_0) & ~0x0f);
2033	card->mmio= (uint8_t *)(pci_config_read32(pci_dev->dev.addr, PCI_BASE_ADDRESS_2) & ~0x0f);
2034	card->io= (uint8_t *)(pci_config_read32(pci_dev->dev.addr, PCI_BASE_ADDRESS_4) & ~0x03);
2035	
2036	verbose("Framebuffer @0x%08X  MMIO @0x%08XI/O Port @0x%08X ROM Addr @0x%08X\n",
2037	card->fb, card->mmio, card->io, pci_config_read32(pci_dev->dev.addr, PCI_ROM_ADDRESS));
2038	
2039	card->posted = radeon_card_posted();
2040	verbose("ATI card %s, ", card->posted ? "POSTed" : "non-POSTed");
2041	
2042	get_vram_size();
2043	
2044	getBoolForKey(kATYbinimage, &add_vbios, &bootInfo->chameleonConfig);
2045	
2046	if (add_vbios)
2047	{
2048	if (!load_vbios_file(kUseAtiROM, pci_dev->vendor_id, pci_dev->device_id, pci_dev->subsys_id.subsys_id))
2049	{
2050	verbose("reading VBIOS from %s", card->posted ? "legacy space" : "PCI ROM");
2051	if (card->posted)
2052	read_vbios(false);
2053	else
2054	read_disabled_vbios();
2055	verbose("\n");
2056	}
2057	}
2058	
2059	
2060	if (card->info->chip_family >= CHIP_FAMILY_CEDAR)
2061	{
2062	card->flags |= EVERGREEN;
2063	}
2064	
2065	
2066	// Check AtiConfig key for a framebuffer name,
2067	card->cfg_name = getStringForKey(kAtiConfig, &bootInfo->chameleonConfig);
2068	
2069	// if none,
2070	if (!card->cfg_name)
2071	{
2072	// use cfg_name on radeon_cards, to retrive the default name from card_configs,
2073	card->cfg_name = card_configs[card->info->cfg_name].name;
2074	
2075	// which means one of the fb's or kNull
2076	verbose("Framebuffer set to device's default: %s\n", card->cfg_name);
2077	}
2078	else
2079	{
2080	// else, use the fb name returned by AtiConfig.
2081	verbose("(AtiConfig) Framebuffer set to: %s\n", card->cfg_name);
2082	}
2083	
2084	// Check AtiPorts key for nr of ports,
2085	card->ports = getIntForKey(kAtiPorts, &n_ports, &bootInfo->chameleonConfig);
2086	// if a value bigger than 0 ?? is found, (do we need >= 0 ?? that's null FB on card_configs)
2087	if (n_ports > 0)
2088	{
2089	card->ports = n_ports; // use it.
2090	verbose("(AtiPorts) # of ports set to: %d\n", card->ports);
2091	    }
2092	else
2093	{
2094	// else, match cfg_name with card_configs list and retrive default nr of ports.
2095	for (i = 0; i < kCfgEnd; i++)
2096	if (strcmp(card->cfg_name, card_configs[i].name) == 0)
2097	card->ports = card_configs[i].ports; // default
2098	
2099	verbose("# of ports set to framebuffer's default: %d\n", card->ports);
2100	}
2101	
2102	
2103	sprintf(name, "ATY,%s", card->cfg_name);
2104	aty_name.type = kStr;
2105	aty_name.size = strlen(name) + 1;
2106	aty_name.data = (uint8_t *)name;
2107	
2108	sprintf(name_parent, "ATY,%sParent", card->cfg_name);
2109	aty_nameparent.type = kStr;
2110	aty_nameparent.size = strlen(name_parent) + 1;
2111	aty_nameparent.data = (uint8_t *)name_parent;
2112	
2113	return true;
2114	}
2115	
2116	bool setup_ati_devprop(pci_dt_t *ati_dev)
2117	{
2118	char *devicepath;
2119	
2120	if (!init_card(ati_dev))
2121	return false;
2122	
2123	// -------------------------------------------------
2124	// Find a better way to do this (in device_inject.c)
2125	if (!string)
2126	string = devprop_create_string();
2127	
2128	devicepath = get_pci_dev_path(ati_dev);
2129	card->device = devprop_add_device(string, devicepath);
2130	if (!card->device)
2131	return false;
2132	// -------------------------------------------------
2133	
2134	#if 0
2135	uint64_t fb= (uint32_t)card->fb;
2136	uint64_t mmio= (uint32_t)card->mmio;
2137	uint64_t io= (uint32_t)card->io;
2138	devprop_add_value(card->device, "ATY,FrameBufferOffset", &fb, 8);
2139	devprop_add_value(card->device, "ATY,RegisterSpaceOffset", &mmio, 8);
2140	devprop_add_value(card->device, "ATY,IOSpaceOffset", &io, 8);
2141	#endif
2142	
2143	devprop_add_list(ati_devprop_list);
2144	
2145	␉// -------------------------------------------------␊
2146	// Find a better way to do this (in device_inject.c)
2147	//Azi: XXX tried to fix a malloc error in vain; this is related to XCode 4 compilation!
2148	stringdata = malloc(sizeof(uint8_t) * string->length);
2149	memcpy(stringdata, (uint8_t*)devprop_generate_string(string), string->length);
2150	stringlength = string->length;
2151	// -------------------------------------------------
2152	
2153	verbose("ATI %s %s %dMB (%s) [%04x:%04x] (subsys [%04x:%04x]):: %s\n",
2154	chip_family_name[card->info->chip_family], card->info->model_name,
2155	(uint32_t)(card->vram_size / (1024 * 1024)), card->cfg_name,
2156	ati_dev->vendor_id, ati_dev->device_id,
2157	ati_dev->subsys_id.subsys.vendor_id, ati_dev->subsys_id.subsys.device_id,
2158	devicepath);
2159	
2160	free(card);
2161	
2162	return true;
2163	}

转载于:https://my.oschina.net/syktem/blog/109475

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值