Chameleon

Chameleon Commit Details

Date:2013-06-21 17:31:19 (10 years 9 months ago)
Author:MacMan
Commit:2249
Parents: 2248
Message:Chimera 2.1.0: Adds Haswell CPU support with model and proper speed detection, disabled writing of boot arguments to nvram, implemented most Chameleon 2.2 r2246 changes while retaining all previous Chimera v2.0.1 fixes and enhancements.
Changes:
D/branches/Chimera/i386/modules/Resolution
D/branches/Chimera/i386/modules/FileNVRAM
A/branches/Chimera/i386/modules/HDAEnabler/Makefile
A/branches/Chimera/artwork/themes/default/device_hfsraid_mav_o.png
A/branches/Chimera/i386/modules/HDAEnabler/include
A/branches/Chimera/i386/modules/HDAEnabler
A/branches/Chimera/artwork/themes/default/device_hfsraid_mav.png
A/branches/Chimera/artwork/themes/default/device_hfsfusion_mav_o.png
A/branches/Chimera/i386/modules/HDAEnabler/Cconfig
A/branches/Chimera/i386/libsaio/base64-decode.c
A/branches/Chimera/artwork/themes/default/device_hfsplus_mav_o.png
A/branches/Chimera/artwork/themes/default/device_hfsfusion_mav.png
A/branches/Chimera/i386/modules/HDAEnabler/HDAEnabler.dylib
A/branches/Chimera/i386/libsaio/ati.h
A/branches/Chimera/artwork/themes/default/device_hfsplus_mav.png
A/branches/Chimera/i386/modules/HDAEnabler/Readme.txt
M/branches/Chimera/i386/libsa/libsa.h
M/branches/Chimera/i386/libsaio/bootstruct.c
M/branches/Chimera/autoconf.h
M/branches/Chimera/i386/libsaio/nvidia_helper.c
M/branches/Chimera/i386/modules/AcpiCodec/acpi_codec.c
M/branches/Chimera/i386/libsaio/nvidia.c
M/branches/Chimera/i386/boot2/modules.c
M/branches/Chimera/i386/libsaio/pci.c
M/branches/Chimera/i386/libsaio/bootstruct.h
M/branches/Chimera/i386/libsaio/nvidia.h
M/branches/Chimera/i386/libsaio/pci.h
M/branches/Chimera/i386/libsaio/acpi_patcher.c
M/branches/Chimera/i386/boot2/gui.c
M/branches/Chimera/i386/libsaio/platform.h
M/branches/Chimera/i386/libsaio/disk.c
M/branches/Chimera/autoconf.inc
M/branches/Chimera/i386/libsaio/device_inject.c
M/branches/Chimera/package/bin/clean_po_headers.sh
M/branches/Chimera/i386/libsaio/Makefile
M/branches/Chimera/i386/libsaio/saio_internal.h
M/branches/Chimera/i386/libsaio/smbios.c
M/branches/Chimera/i386/boot2/options.c
M/branches/Chimera/i386/libsaio/xml.c
M/branches/Chimera/i386/libsaio/device_inject.h
M/branches/Chimera/CREDITS
M/branches/Chimera/i386/modules/Keylayout/Keylayout.c
M/branches/Chimera/i386/boot2/graphics.c
M/branches/Chimera/i386/libsaio/xml.h
M/branches/Chimera/i386/boot2/graphics.h
M/branches/Chimera/CHANGES
M/branches/Chimera/i386/modules/Cconfig
M/branches/Chimera/i386/libsaio/ati.c
M/branches/Chimera/i386/boot2/drivers.c
M/branches/Chimera/i386/modules/Makefile
M/branches/Chimera/i386/libsaio/spd.c
M/branches/Chimera/i386/libsaio/cpu.c
M/branches/Chimera/.config
M/branches/Chimera/i386/libsaio/fake_efi.c
M/branches/Chimera/i386/libsaio/smbios_getters.c
M/branches/Chimera/version
M/branches/Chimera/auto.conf
M/branches/Chimera/revision
M/branches/Chimera/i386/libsaio/gma.c
M/branches/Chimera/doc/README
M/branches/Chimera/i386/boot2/boot.c

File differences

branches/Chimera/.config
11
22
33
4
4
55
66
77
......
2121
2222
2323
24
25
26
27
28
24
25
26
2927
30
31
28
29
3230
31
3332
#
# Automatically generated make config: don't edit
# Chameleon Configuration
# Mon May 13 13:47:19 2013
# Thu Jun 20 17:46:59 2013
#
CONFIG_OPTIMIZATION_LEVEL="-Oz"
CONFIG_BDMESG=y
#
# Modules
#
CONFIG_RESOLUTION_MODULE=m
CONFIG_KLIBC_MODULE=m
CONFIG_UCLIBCXX_MODULE=m
# CONFIG_HELLOWORLD_MODULE is not set
CONFIG_SATA_MODULE=m
# CONFIG_RESOLUTION_MODULE is not set
# CONFIG_KLIBC_MODULE is not set
# CONFIG_SATA_MODULE is not set
CONFIG_KEYLAYOUT_MODULE=m
CONFIG_ACPICODEC_MODULE=m
CONFIG_KERNELPATCHER_MODULE=y
# CONFIG_ACPICODEC_MODULE is not set
# CONFIG_KERNELPATCHER_MODULE is not set
CONFIG_FILENVRAM_MODULE=y
CONFIG_HDAENABLER_MODULE=y
# CONFIG_EMBED_THEME is not set
branches/Chimera/version
1
1
2.0.1
2.1.0
branches/Chimera/autoconf.inc
11
22
33
4
4
55
6
76
8
9
7
8
109
10
1111
1212
1313
1414
15
1615
1716
18
19
17
18
2019
2120
2221
2322
2423
2524
26
25
2726
2827
;
; Automatically generated make config: don't edit
; Chameleon Configuration
; Mon May 13 13:47:19 2013
; Thu Jun 20 17:46:59 2013
;
CONFIG_UCLIBCXX_MODULE EQU 1
CONFIG_BOOT1_HFS_DEBUG EQU 0
CONFIG_SATA_MODULE EQU 1
CONFIG_KLIBC_MODULE EQU 1
CONFIG_SATA_MODULE EQU 0
CONFIG_KLIBC_MODULE EQU 0
CONFIG_BOOT0_DEBUG EQU 0
CONFIG_HDAENABLER_MODULE EQU 1
CONFIG_OPENUP EQU 0
CONFIG_BOOT1_HFS_VERBOSE EQU 1
CONFIG_EMBED_THEME EQU 0
CONFIG_BOOT1_HFS EQU 1
CONFIG_HELLOWORLD_MODULE EQU 0
CONFIG_MODULES EQU 1
CONFIG_BOOT0_VERBOSE EQU 1
CONFIG_ACPICODEC_MODULE EQU 1
CONFIG_KERNELPATCHER_MODULE EQU 1
CONFIG_ACPICODEC_MODULE EQU 0
CONFIG_KERNELPATCHER_MODULE EQU 0
CONFIG_BDMESG EQU 1
CONFIG_BOOT1_HFS_ACTIVE_VERBOSE EQU 1
CONFIG_BOOT1_HFS_ACTIVE EQU 1
CONFIG_FILENVRAM_MODULE EQU 1
CONFIG_BOOT1_HFS_ACTIVE_DEBUG EQU 0
CONFIG_FDISK440 EQU 1
CONFIG_RESOLUTION_MODULE EQU 1
CONFIG_RESOLUTION_MODULE EQU 0
CONFIG_KEYLAYOUT_MODULE EQU 1
CONFIG_MODULE_DEBUG EQU 0
branches/Chimera/i386/libsaio/xml.c
793793
794794
795795
796
796797
797798
798799
......
806807
807808
808809
809
810
811
810
812811
813812
814813
815
814
816815
817816
818817
......
972971
973972
974973
975
974
976975
977976
978977
......
11141113
11151114
11161115
1116
1117
1118
1119
11171120
11181121
11191122
......
11391142
11401143
11411144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
11421159
11431160
11441161
static long
ParseTagData( char * buffer, TagPtr * tag )
{
int actuallen = 0;
long length;
TagPtr tmpTag;
//printf("Data: %s\n", buffer);
//getchar();
// TODO: base64 decode
char* string = NewSymbol(buffer);
char* string = BASE64Decode(buffer, strlen(buffer), &actuallen);
tmpTag->type = kTagTypeData;
tmpTag->string = string;
tmpTag->tag = 0;
tmpTag->offset = buffer_start ? buffer - buffer_start: 0;
tmpTag->offset = actuallen; // buffer_start ? buffer - buffer_start: 0;
tmpTag->tagNext = 0;
*tag = tmpTag;
#if DOFREE
if (tag == 0) return;
if (tag->string) FreeSymbol(tag->string);
if (!XMLIsInteger(tag) && tag->string) FreeSymbol(tag->string);
XMLFreeTag(tag->tag);
XMLFreeTag(tag->tagNext);
return entry && (entry->type == kTagTypeDict);
}
bool XMLIsData(TagPtr entry)
{
return entry && (entry->type == kTagTypeData);
}
TagPtr XMLCastDict(TagPtr dict)
{
return NULL;
}
char* XMLCastData(TagPtr dict, int* length)
{
if(!dict) return NULL;
if((dict->type == kTagTypeData) ||
(dict->type == kTagTypeKey))
{
*length = dict->offset;
return dict->string;
}
*length = 0;
return NULL;
}
long XMLCastStringOffset(TagPtr dict)
{
if(dict &&
branches/Chimera/i386/libsaio/xml.h
9797
9898
9999
100
100101
101102
102103
103104
104105
105106
107
106108
107
108109
109110
110111
int XMLCastInteger ( TagPtr dict );
TagPtr XMLCastDict ( TagPtr dict );
TagPtr XMLCastArray( TagPtr dict );
char* XMLCastData( TagPtr dict, int* length );
bool XMLIsBoolean(TagPtr entry);
bool XMLIsString (TagPtr entry);
bool XMLIsInteger(TagPtr entry);
bool XMLIsDict (TagPtr entry);
bool XMLIsArray (TagPtr entry);
bool XMLIsData (TagPtr entry);
bool XMLAddTagToDictionary(TagPtr dict, char* key, TagPtr value);
long XMLParseNextTag(char *buffer, TagPtr *tag);
branches/Chimera/i386/libsaio/bootstruct.c
110110
111111
112112
113
113
114114
115115
116116
......
146146
147147
148148
149
149
150150
151151
152152
reserveKernBootStruct(void)
{
if ((gMacOSVersion[0] == '1') && (gMacOSVersion[1] == '0')
&& (gMacOSVersion[2] == '.') && (gMacOSVersion[3] == '7' || gMacOSVersion[3] == '8'))
&& (gMacOSVersion[2] == '.') && (gMacOSVersion[3] == '7' || gMacOSVersion[3] == '8' || gMacOSVersion[3] == '9'))
{
void *oldAddr = bootArgs;
bootArgs = (boot_args *)AllocateKernelMemory(sizeof(boot_args));
bootArgs->MemoryMapDescriptorSize = sizeof(EfiMemoryRange);
bootArgs->MemoryMapDescriptorVersion = 0;
for (i=0; i<memoryMapCount; i++, memoryMap++) {
for (i = 0; i < memoryMapCount; i++, memoryMap++) {
range = &bootInfo->memoryMap[i];
switch(range->type) {
case kMemoryRangeACPI:
branches/Chimera/i386/libsaio/bootstruct.h
5252
5353
5454
55
55
5656
5757
5858
#define CONFIG_SIZE (40 * 4096)
#define kMemoryMapCountMax 40
#define kMemoryMapCountMax 1000
/*
* PCI bus information.
branches/Chimera/i386/libsaio/acpi_patcher.c
572572
573573
574574
575
575576
576577
577578
578
579
580
579581
580582
581583
case CPU_MODEL_SANDYBRIDGE:// Intel Core i3, i5, i7 LGA1155 (32nm)
case CPU_MODEL_IVYBRIDGE:// Intel Core i3, i5, i7 LGA1155 (22nm)
case CPU_MODEL_JAKETOWN:// Intel Core i7, Xeon E5 LGA2011 (32nm)
case CPU_MODEL_HASWELL: // Intel Core i3, i5, i7, Xeon E3 LGA1155 (22nm)
{
if ((Platform.CPU.Model == CPU_MODEL_SANDYBRIDGE) ||
(Platform.CPU.Model == CPU_MODEL_JAKETOWN))
(Platform.CPU.Model == CPU_MODEL_JAKETOWN) ||
(Platform.CPU.Model == CPU_MODEL_HASWELL))
{
maximum.Control = (rdmsr64(MSR_IA32_PERF_STATUS) >> 8) & 0xff;
} else {
branches/Chimera/i386/libsaio/spd.c
373373
374374
375375
376
376377
377378
378379
{0x8086, 0x3B30, "5 Series",read_smb_intel },
{0x8086, 0x1C22, "6 Series",read_smb_intel },
{0x8086, 0x1E22, "7 Series",read_smb_intel },
{0x8086, 0x8C22, "8 Series",read_smb_intel },
{0x8086, 0x1D22, "X79 Series",read_smb_intel },
};
branches/Chimera/i386/libsaio/Makefile
3838
3939
4040
41
41
4242
4343
4444
fake_efi.o ext2fs.o \
hpet.o dram_controllers.o spd.o usb.o pci_setup.o \
device_inject.o nvidia_helper.o nvidia.o ati.o gma.o pci_root.o \
convert.o aml_generator.o console.o exfat.o
convert.o aml_generator.o console.o exfat.o base64-decode.o
SAIO_OBJS := $(addprefix $(OBJROOT)/, $(SAIO_OBJS))
branches/Chimera/i386/libsaio/gma.c
1212
1313
1414
15
16
1517
1618
1719
#include "platform.h"
#include "device_inject.h"
#include "gma.h"
#include "vbe.h"
#include "graphics.h"
#ifndef DEBUG_GMA
#define DEBUG_GMA 0
branches/Chimera/i386/libsaio/device_inject.c
171171
172172
173173
174
174
175175
176176
177177
string->length += device->length;
if(!string->entries)
if((string->entries = (struct DevPropDevice**)malloc(sizeof(device)))== NULL)
if((string->entries = (struct DevPropDevice**)malloc(sizeof(device)*DEV_PROP_DEVICE_MAX_ENTRIES))== NULL)
return 0;
string->entries[string->numentries++] = (struct DevPropDevice*)malloc(sizeof(device));
branches/Chimera/i386/libsaio/device_inject.h
1111
1212
1313
14
1415
1516
1617
#define DP_ADD_TEMP_VAL(dev, val) devprop_add_value(dev, (char*)val[0], (uint8_t*)val[1], strlen(val[1]) + 1)
#define DP_ADD_TEMP_VAL_DATA(dev, val) devprop_add_value(dev, (char*)val.name, (uint8_t*)val.data, val.size)
#define MAX_PCI_DEV_PATHS 4
#define DEV_PROP_DEVICE_MAX_ENTRIES 64
extern struct DevPropString *string;
extern uint8_t *stringdata;
branches/Chimera/i386/libsaio/base64-decode.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/*
* This code implements the BASE64 algorithm.
* This code is in the public domain; do with it what you wish.
*
* @file base64.c
* @brief This code implements the BASE64 algorithm
* @author Matthieu Speder
*/
#include <libsaio.h>
//static const char base64_chars[] =
//"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
static const char base64_digits[] =
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
0, 0, 0, -1, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, 0, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48, 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
char *BASE64Decode(const char* src, int in_len, int* out_len)
{
int endpad = 0;
char* dest;
char* result;
if (in_len % 4)
{
/* Wrong base64 string length */
return NULL;
}
result = dest = malloc(in_len / 4 * 3 + 1);
if (result == NULL)
return NULL; /* out of memory */
while (*src) {
char a = base64_digits[(unsigned char)*(src++)];
char b = base64_digits[(unsigned char)*(src++)];
char c = base64_digits[(unsigned char)*(src++)];
char d = base64_digits[(unsigned char)*(src++)];
*(dest++) = (a << 2) | ((b & 0x30) >> 4);
if (c == (char)-1)
{
// padding char.
endpad += 2;
break;
}
*(dest++) = ((b & 0x0f) << 4) | ((c & 0x3c) >> 2);
if (d == (char)-1)
{
// padding char.
endpad += 1;
break;
}
*(dest++) = ((c & 0x03) << 6) | d;
}
*dest = 0;
*out_len = in_len / 4 * 3 - endpad; // not including NULL terminator
return result;
}
/* end of base64.c */
branches/Chimera/i386/libsaio/nvidia.c
6565
6666
6767
68
68
6969
70
70
7171
7272
7373
......
112112
113113
114114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
135184
136185
137186
138187
139188
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
160209
161210
162211
163
164
165
166
167
168
169
170
212
213
214
215
216
217
218
219
171220
172221
173222
174223
175224
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
191240
192241
193
194
195
196
197
198
199
200
201
202
203
242
243
244
245
246
247
248
249
250
251
252
253
254
204255
205256
206257
207
208
209
210
211
212
258
259
260
261
262
263
213264
214265
215266
216267
217
218
219
220
221
222
223
224
225
226
227
228
229
230
268
269
270
271
272
273
274
275
276
277
278
279
280
281
231282
232283
284
233285
234286
235
236
237
238
287
288
289
290
239291
240
241
292
293
294
242295
243296
244
245
246
247
248
249
297
298
299
300
301
302
303
250304
305
251306
252307
253308
254309
255
256
257
258
259
260
261
262
263
264
265
266
267
268
310
311
312
313
314
315
316
317
318
319
320
321
322
323
269324
270325
271326
272327
273328
274
275
276
277
278
329
330
331
332
333
279334
280335
281
282
283
284
336
337
338
339
285340
286
287
288
289
290
291
341
342
343
344
345
346
292347
293
294
295
296
297
298
299
300
301
302
303
304
305
348
349
350
351
352
353
354
355
356
357
358
359
360
361
306362
307
308
309
310
311
312
313
363
364
365
366
367
368
369
314370
315
316
317
318
319
320
321
322
371
372
373
374
375
376
377
378
379
380
381
382
323383
324384
325385
326386
327
387
328388
329
330
331
332
333
334
335
336
337
338
339
340
341
389
390
391
392
393
394
395
396
397
398
399
400
401
342402
343403
344404
345405
346
347
348
349
350
406
407
408
409
410
351411
352412
353413
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
370430
371
431
372432
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
389449
390450
391451
......
396456
397457
398458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
399475
400476
401477
......
403479
404480
405481
406
407
408
409
410
411
482
483
484
485
486
487
412488
413489
414490
......
420496
421497
422498
423
424
425
426
427
428
429
430
431
432
433
434
435
436
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
437515
438
439
440
441
442
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
443532
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
459548
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
475564
476
477
478
479
480
481
482
483
484
485
486
487
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
488581
489
490
491
492
493
494
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
495598
496
497
498
499
500
501
502
503
504
505
506
507
508
599
600
601
602
603
604
605
606
607
608
609
610
611
509612
510
511
512
513
514
515
516
517
518
519
520
521
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
522629
523630
524631
525632
526633
634
527635
636
528637
529
530
531
532
638
639
640
641
642
533643
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
644
645
646
647
648
649
650
651
652
562653
563
564
565
566
567
568
569
570
571
572
573
574
575
576
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
577669
578
579
580
581
582
583
584
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
585686
586687
587688
......
597698
598699
599700
600
601
602
603
604
701
702
703
704
705
605706
606707
607708
608709
609710
610711
611
612
613
614
615
616
617
618
619
620
621
622
712
713
714
715
716
717
718
719
720
721
722
723
623724
624725
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
640741
641
642
643
644
645
646
647
648
649
650
742
743
744
745
746
747
748
749
750
751
651752
652753
653754
654
655
656
755
756
757
758
759
760
657761
762
763
764
765
658766
659767
660768
......
676784
677785
678786
787
679788
789
680790
681
682
683
684
685
686
687
688
689
690
691
791
792
793
794
795
796
797
798
799
800
801
802
692803
693
694
695
696
697
804
805
806
807
808
809
810
811
698812
699813
700814
701
702
703
704
705
706
707
708
709
710
711
712
713
815
816
817
818
819
820
821
822
823
824
825
826
827
828
714829
715
716
717
718
719
720
721
722
723
724
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
725845
726846
727847
......
757877
758878
759879
760
761
762
763
764
765
766
767
768
769
770
771
772
773
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
774896
775897
776898
......
788910
789911
790912
791
792
793
794
795
796
797
798
799
800
801
802
803
804
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
805934
806
807
808
809
810
811
812
813
814
815
816
817
818
935
936
937
938
939
940
941
942
943
944
945
946
947
948
819949
820
821
822
823
824
825
826
827
828
829
830
831
950
951
952
953
954
955
956
957
958
959
960
961
962
963
832964
833965
834966
835
836
837
967
968
969
970
971
972
838973
839
840
841
842
974
975
976
977
978
979
980
981
843982
844983
845984
......
853992
854993
855994
856
857
995
996
858997
859998
860999
......
8671006
8681007
8691008
870
871
872
873
1009
1010
1011
1012
8741013
875
876
877
878
879
880
1014
1015
1016
1017
1018
1019
1020
1021
1022
8811023
882
1024
1025
1026
1027
8831028
884
1029
1030
1031
1032
1033
1034
1035
1036
1037
8851038
1039
1040
1041
8861042
1043
8871044
1045
1046
1047
1048
1049
8881050
8891051
890
891
892
893
894
1052
1053
1054
1055
1056
1057
1058
8951059
896
897
898
899
900
901
902
903
904
905
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
9061071
9071072
908
1073
1074
1075
1076
9091077
910
911
912
913
914
915
916
917
918
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
9191090
920
921
922
923
924
925
926
1091
1092
1093
1094
1095
1096
9271097
9281098
9291099
930
931
932
1100
1101
1102
1103
9331104
934
1105
9351106
9361107
9371108
......
9391110
9401111
9411112
942
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
9431124
9441125
9451126
9461127
947
948
949
1128
1129
1130
1131
1132
1133
9501134
1135
9511136
1137
1138
1139
1140
1141
9521142
1143
1144
1145
1146
1147
9531148
1149
1150
1151
1152
1153
9541154
9551155
1156
1157
1158
1159
9561160
1161
9571162
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
9901188
9911189
9921190
1191
9931192
1193
1194
1195
1196
1197
9941198
1199
9951200
9961201
9971202
......
9991204
10001205
10011206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
10021405
10031406
10041407
......
12261629
12271630
12281631
1229
1632
1633
1634
12301635
12311636
12321637
......
12381643
12391644
12401645
1241
1646
1647
12421648
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1649
1650
1651
1652
1653
1654
1655
1656
12531657
1254
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
12551681
12561682
1257
1683
12581684
12591685
12601686
......
12651691
12661692
12671693
1268
1269
1270
1271
1272
1273
1274
1275
1694
1695
1696
1697
1698
12761699
12771700
12781701
......
13661789
13671790
13681791
1792
1793
1794
1795
1796
1797
1798
13691799
13701800
13711801
13721802
1373
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
13741813
1375
1814
13761815
13771816
1817
1818
1819
1820
1821
1822
1823
13781824
13791825
13801826
......
13821828
13831829
13841830
1385
1831
13861832
13871833
13881834
......
14451891
14461892
14471893
1448
14491894
14501895
14511896
14521897
14531898
14541899
1455
1900
14561901
14571902
14581903
......
14621907
14631908
14641909
1910
14651911
14661912
14671913
14681914
14691915
1916
1917
14701918
14711919
14721920
......
15061954
15071955
15081956
1509
1510
1511
1512
1513
1957
1958
1959
1960
1961
15141962
15151963
15161964
......
15281976
15291977
15301978
1531
1979
15321980
15331981
1534
1982
15351983
15361984
15371985
......
16042052
16052053
16062054
1607
2055
16082056
16092057
16102058
#define DBG(x...)
#endif
#define NVIDIA_ROM_SIZE0x10000
#define NVIDIA_ROM_SIZE0x20000
#define PATCH_ROM_SUCCESS1
#define PATCH_ROM_SUCCESS_HAS_LVDS2
#define PATCH_ROM_SUCCESS_HAS_LVDS2
#define PATCH_ROM_FAILED0
#define MAX_NUM_DCB_ENTRIES16
#define TYPE_GROUPED0xff
#define NVPM_LEN ( sizeof(default_NVPM) / sizeof(uint8_t) )
static nvidia_card_info_t nvidia_cards[] = {
/* ========================================================================================
* Layout is device(VendorId + DeviceId), subdev (SubvendorId + SubdeviceId), display name.
* ========================================================================================
*/
/*Unknown*/{ 0x10DE0000,NV_SUB_IDS,"Unknown" },
/* ------ Specific DeviceID and SubDevID. ------ */
// 0000 - 0040
// 0040 - 004F
{ 0x10DE0040, NV_SUB_IDS, "GeForce 6800 Ultra" },
{ 0x10DE0041,NV_SUB_IDS, "GeForce 6800" },
{ 0x10DE0042,NV_SUB_IDS, "GeForce 6800 LE" },
{ 0x10DE0043,NV_SUB_IDS, "GeForce 6800 XE" },
{ 0x10DE0044,NV_SUB_IDS, "GeForce 6800 XT" },
{ 0x10DE0045,NV_SUB_IDS, "GeForce 6800 GT" },
{ 0x10DE0046,NV_SUB_IDS, "GeForce 6800 GT" },
{ 0x10DE0047,NV_SUB_IDS, "GeForce 6800 GS" },
{ 0x10DE0048,NV_SUB_IDS, "GeForce 6800 XT" },
{ 0x10DE004D,NV_SUB_IDS, "Quadro FX 3400" },
{ 0x10DE004E,NV_SUB_IDS, "Quadro FX 4000" },
/*static nvidia_pci_info_t nvidia_card_vendors[] = {
{ 0x10190000,"Elitegroup" },
{ 0x10250000,"Acer" },
{ 0x10280000,"Dell" },
{ 0x10330000,"NEC" },
{ 0x103C0000,"HP" },
{ 0x10430000,"Asus" },
{ 0x104D0000,"Sony" },
{ 0x105B0000,"Foxconn" },
{ 0x106B0000,"Apple" },
{ 0x10710000,"Mitac" },
{ 0x107B0000,"Gateway" },
{ 0x107D0000,"Leadtek" },
{ 0x109F0000,"Trigem" },
{ 0x10B00000,"Gainward" },
{ 0x10CF0000,"Fujitsu" },
{ 0x10DE0000,"nVidia" },
{ 0x11790000,"Toshiba" },
{ 0x12970000,"Shuttle" },
{ 0x13DC0000,"Netbost" },
{ 0x144D0000,"Samsung" },
{ 0x14580000,"Gigabyte" },
{ 0x14620000,"MSi" },
{ 0x14C00000,"Compal" },
{ 0x152D0000,"Quanta" },
{ 0x15540000,"Prolink" },
{ 0x15580000,"Clevo" },
{ 0x15690000,"Palit" },
{ 0x161F0000,"Arima" },
{ 0x16310000,"NEC" },
{ 0x16420000,"Bitland" },
{ 0x16820000,"XFX" },
{ 0x17340000,"Fujitsu" },
{ 0x174B0000,"PC Partner" },
{ 0x17AA0000,"Lenovo" },
{ 0x17C00000,"Wistron" },
{ 0x17FF0000,"Benq" },
{ 0x18490000,"ASRock" },
{ 0x18540000,"LG" },
{ 0x18640000,"LG" },
{ 0x18940000,"LG" },
{ 0x19610000,"ESS" },
{ 0x196E0000,"PNY" },
{ 0x19910000,"Topstar" },
{ 0x19DA0000,"Zotac" },
{ 0x19F10000,"BFG" },
{ 0x1ACC0000,"Point of View" },
{ 0x1B0A0000,"Pegatron" },
{ 0x1B130000,"Jaton" },
{ 0x34420000,"Bihl" },
{ 0x38420000,"EVGA" },
{ 0x73770000,"Colorful" },
}; */
static nvidia_pci_info_t nvidia_card_generic[] = {
// 0000 - 0040
{ 0x10DE0000,"Unknown" },
// 0040 - 004F
{ 0x10DE0040,"GeForce 6800 Ultra" },
{ 0x10DE0041,"GeForce 6800" },
{ 0x10DE0042,"GeForce 6800 LE" },
{ 0x10DE0043,"GeForce 6800 XE" },
{ 0x10DE0044,"GeForce 6800 XT" },
{ 0x10DE0045,"GeForce 6800 GT" },
{ 0x10DE0046,"GeForce 6800 GT" },
{ 0x10DE0047,"GeForce 6800 GS" },
{ 0x10DE0048,"GeForce 6800 XT" },
{ 0x10DE004D,"Quadro FX 3400" },
{ 0x10DE004E,"Quadro FX 4000" },
// 0050 - 005F
// 0060 - 006F
// 0070 - 007F
// 0080 - 008F
// 0090 - 009F
{ 0x10DE0090,NV_SUB_IDS, "GeForce 7800 GTX" },
{ 0x10DE0091,NV_SUB_IDS, "GeForce 7800 GTX" },
{ 0x10DE0092,NV_SUB_IDS, "GeForce 7800 GT" },
{ 0x10DE0093,NV_SUB_IDS, "GeForce 7800 GS" },
{ 0x10DE0095,NV_SUB_IDS, "GeForce 7800 SLI" },
{ 0x10DE0098,NV_SUB_IDS, "GeForce Go 7800" },
{ 0x10DE0099,NV_SUB_IDS, "GeForce Go 7800 GTX" },
{ 0x10DE009D,NV_SUB_IDS, "Quadro FX 4500" },
// 00A0 - 00AF
// 00B0 - 00BF
// 00C0 - 00CF
{ 0x10DE00C0,NV_SUB_IDS, "GeForce 6800 GS" },
{ 0x10DE00C1,NV_SUB_IDS, "GeForce 6800" },
{ 0x10DE00C2,NV_SUB_IDS, "GeForce 6800 LE" },
{ 0x10DE00C3,NV_SUB_IDS, "GeForce 6800 XT" },
{ 0x10DE00C8,NV_SUB_IDS, "GeForce Go 6800" },
{ 0x10DE00C9,NV_SUB_IDS, "GeForce Go 6800 Ultra" },
{ 0x10DE00CC,NV_SUB_IDS, "Quadro FX Go1400" },
{ 0x10DE00CD,NV_SUB_IDS, "Quadro FX 3450/4000 SDI" },
{ 0x10DE00CE,NV_SUB_IDS, "Quadro FX 1400" },
{ 0x10DE0090,"GeForce 7800 GTX" },
{ 0x10DE0091,"GeForce 7800 GTX" },
{ 0x10DE0092,"GeForce 7800 GT" },
{ 0x10DE0093,"GeForce 7800 GS" },
{ 0x10DE0095,"GeForce 7800 SLI" },
{ 0x10DE0098,"GeForce Go 7800" },
{ 0x10DE0099,"GeForce Go 7800 GTX" },
{ 0x10DE009D,"Quadro FX 4500" },
// 00A0 - 00AF
// 00B0 - 00BF
// 00C0 - 00CF
{ 0x10DE00C0,"GeForce 6800 GS" },
{ 0x10DE00C1,"GeForce 6800" },
{ 0x10DE00C2,"GeForce 6800 LE" },
{ 0x10DE00C3,"GeForce 6800 XT" },
{ 0x10DE00C8,"GeForce Go 6800" },
{ 0x10DE00C9,"GeForce Go 6800 Ultra" },
{ 0x10DE00CC,"Quadro FX Go1400" },
{ 0x10DE00CD,"Quadro FX 3450/4000 SDI" },
{ 0x10DE00CE,"Quadro FX 1400" },
// 00D0 - 00DF
// 00E0 - 00EF
// 00F0 - 00FF
{ 0x10DE00F1,NV_SUB_IDS, "GeForce 6600 GT" },
{ 0x10DE00F2,NV_SUB_IDS, "GeForce 6600" },
{ 0x10DE00F3,NV_SUB_IDS, "GeForce 6200" },
{ 0x10DE00F4,NV_SUB_IDS, "GeForce 6600 LE" },
{ 0x10DE00F5,NV_SUB_IDS, "GeForce 7800 GS" },
{ 0x10DE00F6,NV_SUB_IDS, "GeForce 6800 GS/XT" },
{ 0x10DE00F8,NV_SUB_IDS, "Quadro FX 3400/4400" },
{ 0x10DE00F9,NV_SUB_IDS, "GeForce 6800 Series GPU" },
{ 0x10DE00F1,"GeForce 6600 GT" },
{ 0x10DE00F2,"GeForce 6600" },
{ 0x10DE00F3,"GeForce 6200" },
{ 0x10DE00F4,"GeForce 6600 LE" },
{ 0x10DE00F5,"GeForce 7800 GS" },
{ 0x10DE00F6,"GeForce 6800 GS/XT" },
{ 0x10DE00F8,"Quadro FX 3400/4400" },
{ 0x10DE00F9,"GeForce 6800 Series GPU" },
// 0100 - 010F
// 0110 - 011F
// 0120 - 012F
// 0130 - 013F
// 0140 - 014F
{ 0x10DE0140, NV_SUB_IDS, "GeForce 6600 GT" },
{ 0x10DE0141,NV_SUB_IDS, "GeForce 6600" },
{ 0x10DE0142,NV_SUB_IDS, "GeForce 6600 LE" },
{ 0x10DE0143,NV_SUB_IDS, "GeForce 6600 VE" },
{ 0x10DE0144,NV_SUB_IDS, "GeForce Go 6600" },
{ 0x10DE0145,NV_SUB_IDS, "GeForce 6610 XL" },
{ 0x10DE0146,NV_SUB_IDS, "GeForce Go 6600 TE/6200 TE" },
{ 0x10DE0147,NV_SUB_IDS, "GeForce 6700 XL" },
{ 0x10DE0148,NV_SUB_IDS, "GeForce Go 6600" },
{ 0x10DE0149,NV_SUB_IDS, "GeForce Go 6600 GT" },
{ 0x10DE014A,NV_SUB_IDS, "Quadro NVS 440" },
{ 0x10DE014C,NV_SUB_IDS, "Quadro FX 550" },
{ 0x10DE014D,NV_SUB_IDS, "Quadro FX 550" },
{ 0x10DE014E,NV_SUB_IDS, "Quadro FX 540" },
{ 0x10DE014F,NV_SUB_IDS, "GeForce 6200" },
{ 0x10DE0140,"GeForce 6600 GT" },
{ 0x10DE0141,"GeForce 6600" },
{ 0x10DE0142,"GeForce 6600 LE" },
{ 0x10DE0143,"GeForce 6600 VE" },
{ 0x10DE0144,"GeForce Go 6600" },
{ 0x10DE0145,"GeForce 6610 XL" },
{ 0x10DE0146,"GeForce Go 6600 TE/6200 TE" },
{ 0x10DE0147,"GeForce 6700 XL" },
{ 0x10DE0148,"GeForce Go 6600" },
{ 0x10DE0149,"GeForce Go 6600 GT" },
{ 0x10DE014A,"Quadro NVS 440" },
{ 0x10DE014C,"Quadro FX 550" },
{ 0x10DE014D,"Quadro FX 550" },
{ 0x10DE014E,"Quadro FX 540" },
{ 0x10DE014F,"GeForce 6200" },
// 0150 - 015F
// 0160 - 016F
{ 0x10DE0160,NV_SUB_IDS, "GeForce 6500" },
{ 0x10DE0161,NV_SUB_IDS, "GeForce 6200 TurboCache(TM)" },
{ 0x10DE0162,NV_SUB_IDS, "GeForce 6200SE TurboCache(TM)" },
{ 0x10DE0163,NV_SUB_IDS, "GeForce 6200 LE" },
{ 0x10DE0164,NV_SUB_IDS, "GeForce Go 6200" },
{ 0x10DE0165,NV_SUB_IDS, "Quadro NVS 285" },
{ 0x10DE0166,NV_SUB_IDS, "GeForce Go 6400" },
{ 0x10DE0167,NV_SUB_IDS, "GeForce Go 6200" },
{ 0x10DE0168,NV_SUB_IDS, "GeForce Go 6400" },
{ 0x10DE0169,NV_SUB_IDS, "GeForce 6250" },
{ 0x10DE016A,NV_SUB_IDS, "GeForce 7100 GS" },
{ 0x10DE0160,"GeForce 6500" },
{ 0x10DE0161,"GeForce 6200 TurboCache(TM)" },
{ 0x10DE0162,"GeForce 6200SE TurboCache(TM)" },
{ 0x10DE0163,"GeForce 6200 LE" },
{ 0x10DE0164,"GeForce Go 6200" },
{ 0x10DE0165,"Quadro NVS 285" },
{ 0x10DE0166,"GeForce Go 6400" },
{ 0x10DE0167,"GeForce Go 6200" },
{ 0x10DE0168,"GeForce Go 6400" },
{ 0x10DE0169,"GeForce 6250" },
{ 0x10DE016A,"GeForce 7100 GS" },
{ 0x10DE016C,"NVIDIA NV44GLM" },
{ 0x10DE016D,"NVIDIA NV44GLM" },
// 0170 - 017F
// 0180 - 018F
// 0190 - 019F
{ 0x10DE0191,NV_SUB_IDS, "GeForce 8800 GTX" },
{ 0x10DE0193,NV_SUB_IDS, "GeForce 8800 GTS" },
{ 0x10DE0194,NV_SUB_IDS, "GeForce 8800 Ultra" },
{ 0x10DE0197,NV_SUB_IDS, "Tesla C870" },
{ 0x10DE019D,NV_SUB_IDS, "Quadro FX 5600" },
{ 0x10DE019E,NV_SUB_IDS, "Quadro FX 4600" },
{ 0x10DE0191,"GeForce 8800 GTX" },
{ 0x10DE0193,"GeForce 8800 GTS" },
{ 0x10DE0194,"GeForce 8800 Ultra" },
{ 0x10DE0197,"Tesla C870" },
{ 0x10DE019D,"Quadro FX 5600" },
{ 0x10DE019E,"Quadro FX 4600" },
// 01A0 - 01AF
// 01B0 - 01BF
// 01C0 - 01CF
// 01D0 - 01DF
{ 0x10DE01D0,NV_SUB_IDS, "GeForce 7350 LE" },
{ 0x10DE01D1,NV_SUB_IDS, "GeForce 7300 LE" },
{ 0x10DE01D2,NV_SUB_IDS, "GeForce 7550 LE" },
{ 0x10DE01D3,NV_SUB_IDS, "GeForce 7300 SE/7200 GS" },
{ 0x10DE01D6,NV_SUB_IDS, "GeForce Go 7200" },
{ 0x10DE01D7,NV_SUB_IDS, "GeForce Go 7300" },
{ 0x10DE01D8,NV_SUB_IDS, "GeForce Go 7400" },
{ 0x10DE01D9,NV_SUB_IDS, "GeForce Go 7400 GS" },
{ 0x10DE01DA,NV_SUB_IDS, "Quadro NVS 110M" },
{ 0x10DE01DB,NV_SUB_IDS, "Quadro NVS 120M" },
{ 0x10DE01DC,NV_SUB_IDS, "Quadro FX 350M" },
{ 0x10DE01DD,NV_SUB_IDS, "GeForce 7500 LE" },
{ 0x10DE01DE,NV_SUB_IDS, "Quadro FX 350" },
{ 0x10DE01DF,NV_SUB_IDS, "GeForce 7300 GS" },
{ 0x10DE01D0,"GeForce 7350 LE" },
{ 0x10DE01D1,"GeForce 7300 LE" },
{ 0x10DE01D2,"GeForce 7550 LE" },
{ 0x10DE01D3,"GeForce 7300 SE/7200 GS" },
{ 0x10DE01D6,"GeForce Go 7200" },
{ 0x10DE01D7,"GeForce Go 7300" },
{ 0x10DE01D8,"GeForce Go 7400" },
{ 0x10DE01D9,"GeForce Go 7450" },
{ 0x10DE01DA,"Quadro NVS 110M" },
{ 0x10DE01DB,"Quadro NVS 120M" },
{ 0x10DE01DC,"Quadro FX 350M" },
{ 0x10DE01DD,"GeForce 7500 LE" },
{ 0x10DE01DE,"Quadro FX 350" },
{ 0x10DE01DF,"GeForce 7300 GS" },
// 01E0 - 01EF
// 01F0 - 01FF
{ 0x10DE01F0,"GeForce4 MX" },
// 0200 - 020F
// 0210 - 021F
{ 0x10DE0211,NV_SUB_IDS, "GeForce 6800" },
{ 0x10DE0212,NV_SUB_IDS, "GeForce 6800 LE" },
{ 0x10DE0215,NV_SUB_IDS, "GeForce 6800 GT" },
{ 0x10DE0218,NV_SUB_IDS, "GeForce 6800 XT" },
{ 0x10DE0211,"GeForce 6800" },
{ 0x10DE0212,"GeForce 6800 LE" },
{ 0x10DE0215,"GeForce 6800 GT" },
{ 0x10DE0218,"GeForce 6800 XT" },
// 0220 - 022F
{ 0x10DE0221,NV_SUB_IDS, "GeForce 6200" },
{ 0x10DE0222,NV_SUB_IDS, "GeForce 6200 A-LE" },
{ 0x10DE0221,"GeForce 6200" },
{ 0x10DE0222,"GeForce 6200 A-LE" },
{ 0x10DE0228,"NVIDIA NV44M" },
// 0230 - 023F
// 0240 - 024F
{ 0x10DE0240,NV_SUB_IDS, "GeForce 6150" },
{ 0x10DE0241,NV_SUB_IDS, "GeForce 6150 LE" },
{ 0x10DE0242,NV_SUB_IDS, "GeForce 6100" },
{ 0x10DE0244,NV_SUB_IDS, "GeForce Go 6150" },
{ 0x10DE0245,NV_SUB_IDS, "Quadro NVS 210S / GeForce 6150LE" },
{ 0x10DE0247,NV_SUB_IDS, "GeForce Go 6100" },
{ 0x10DE0240,"GeForce 6150" },
{ 0x10DE0241,"GeForce 6150 LE" },
{ 0x10DE0242,"GeForce 6100" },
{ 0x10DE0243,"NVIDIA C51" },
{ 0x10DE0244,"GeForce Go 6150" },
{ 0x10DE0245,"Quadro NVS 210S / GeForce 6150LE" },
{ 0x10DE0247,"GeForce Go 6100" },
// 0250 - 025F
{ 0x10DE025B,"Quadro4 700 XGL" },
// 0260 - 026F
// 0270 - 027F
// 0280 - 028F
// 0290 - 029F
{ 0x10DE0290,NV_SUB_IDS, "GeForce 7900 GTX" },
{ 0x10DE0291,NV_SUB_IDS, "GeForce 7900 GT/GTO" },
{ 0x10DE0292,NV_SUB_IDS, "GeForce 7900 GS" },
{ 0x10DE0293,NV_SUB_IDS, "GeForce 7950 GX2" },
{ 0x10DE0294,NV_SUB_IDS, "GeForce 7950 GX2" },
{ 0x10DE0295,NV_SUB_IDS, "GeForce 7950 GT" },
{ 0x10DE0298,NV_SUB_IDS, "GeForce Go 7900 GS" },
{ 0x10DE0299,NV_SUB_IDS, "Quadro NVS 510M" },
{ 0x10DE029A,NV_SUB_IDS, "Quadro FX 2500M" },
{ 0x10DE029B,NV_SUB_IDS, "Quadro FX 1500M" },
{ 0x10DE029C,NV_SUB_IDS, "Quadro FX 5500" },
{ 0x10DE029D,NV_SUB_IDS, "Quadro FX 3500" },
{ 0x10DE029E,NV_SUB_IDS, "Quadro FX 1500" },
{ 0x10DE029F,NV_SUB_IDS, "Quadro FX 4500 X2" },
{ 0x10DE0290,"GeForce 7900 GTX" },
{ 0x10DE0291,"GeForce 7900 GT/GTO" },
{ 0x10DE0292,"GeForce 7900 GS" },
{ 0x10DE0293,"GeForce 7950 GX2" },
{ 0x10DE0294,"GeForce 7950 GX2" },
{ 0x10DE0295,"GeForce 7950 GT" },
{ 0x10DE0298,"GeForce Go 7900 GS" },
{ 0x10DE0299,"GeForce Go 7900 GTX" },
{ 0x10DE029A,"Quadro FX 2500M" },
{ 0x10DE029B,"Quadro FX 1500M" },
{ 0x10DE029C,"Quadro FX 5500" },
{ 0x10DE029D,"Quadro FX 3500" },
{ 0x10DE029E,"Quadro FX 1500" },
{ 0x10DE029F,"Quadro FX 4500 X2" },
// 02A0 - 02AF
// 02B0 - 02BF
// 02C0 - 02CF
// 02D0 - 02DF
// 02E0 - 02EF
{ 0x10DE02E0,NV_SUB_IDS, "GeForce 7600 GT" },
{ 0x10DE02E1,NV_SUB_IDS, "GeForce 7600 GS" },
{ 0x10DE02E2,NV_SUB_IDS, "GeForce 7300 GT" },
{ 0x10DE02E3,NV_SUB_IDS, "GeForce 7900 GS" },
{ 0x10DE02E4,NV_SUB_IDS, "GeForce 7950 GT" },
{ 0x10DE02E0,"GeForce 7600 GT" },
{ 0x10DE02E1,"GeForce 7600 GS" },
{ 0x10DE02E2,"GeForce 7300 GT" },
{ 0x10DE02E3,"GeForce 7900 GS" },
{ 0x10DE02E4,"GeForce 7950 GT" },
// 02F0 - 02FF
// 0300 - 030F
{ 0x10DE0301,NV_SUB_IDS, "GeForce FX 5800 Ultra" },
{ 0x10DE0302,NV_SUB_IDS, "GeForce FX 5800" },
{ 0x10DE0308,NV_SUB_IDS, "Quadro FX 2000" },
{ 0x10DE0309,NV_SUB_IDS, "Quadro FX 1000" },
{ 0x10DE0301,"GeForce FX 5800 Ultra" },
{ 0x10DE0302,"GeForce FX 5800" },
{ 0x10DE0308,"Quadro FX 2000" },
{ 0x10DE0309,"Quadro FX 1000" },
// 0310 - 031F
{ 0x10DE0311,NV_SUB_IDS, "GeForce FX 5600 Ultra" },
{ 0x10DE0312,NV_SUB_IDS, "GeForce FX 5600" },
{ 0x10DE0314,NV_SUB_IDS, "GeForce FX 5600XT" },
{ 0x10DE031A,NV_SUB_IDS, "GeForce FX Go5600" },
{ 0x10DE031B,NV_SUB_IDS, "GeForce FX Go5650" },
{ 0x10DE031C,NV_SUB_IDS, "Quadro FX Go700" },
{ 0x10DE0311,"GeForce FX 5600 Ultra" },
{ 0x10DE0312,"GeForce FX 5600" },
{ 0x10DE0314,"GeForce FX 5600XT" },
{ 0x10DE031A,"GeForce FX Go5600" },
{ 0x10DE031B,"GeForce FX Go5650" },
{ 0x10DE031C,"Quadro FX Go700" },
// 0320 - 032F
{ 0x10DE0320,NV_SUB_IDS, "GeForce FX 5200" },
{ 0x10DE0321,NV_SUB_IDS, "GeForce FX 5200 Ultra" },
{ 0x10DE0322,NV_SUB_IDS, "GeForce FX 5200" },
{ 0x10DE0323,NV_SUB_IDS, "GeForce FX 5200 LE" },
{ 0x10DE0324,NV_SUB_IDS, "GeForce FX Go5200" },
{ 0x10DE0325,NV_SUB_IDS, "GeForce FX Go5250" },
{ 0x10DE0326,NV_SUB_IDS, "GeForce FX 5500" },
{ 0x10DE0328,NV_SUB_IDS, "GeForce FX Go5200 32M/64M" },
{ 0x10DE0329,NV_SUB_IDS, "GeForce FX Go5200" },
{ 0x10DE032A,NV_SUB_IDS, "Quadro NVS 55/280 PCI" },
{ 0x10DE032B,NV_SUB_IDS, "Quadro FX 500/600 PCI" },
{ 0x10DE032C,NV_SUB_IDS, "GeForce FX Go53xx Series" },
{ 0x10DE032D,NV_SUB_IDS, "GeForce FX Go5100" },
{ 0x10DE0320,"GeForce FX 5200" },
{ 0x10DE0321,"GeForce FX 5200 Ultra" },
{ 0x10DE0322,"GeForce FX 5200" },
{ 0x10DE0323,"GeForce FX 5200 LE" },
{ 0x10DE0324,"GeForce FX Go5200" },
{ 0x10DE0325,"GeForce FX Go5250" },
{ 0x10DE0326,"GeForce FX 5500" },
{ 0x10DE0328,"GeForce FX Go5200 32M/64M" },
{ 0x10DE0329,"GeForce FX Go5200" },
{ 0x10DE032A,"Quadro NVS 55/280 PCI" },
{ 0x10DE032B,"Quadro FX 500/600 PCI" },
{ 0x10DE032C,"GeForce FX Go53xx Series" },
{ 0x10DE032D,"GeForce FX Go5100" },
{ 0x10DE032F,"NV34GL" },
// 0330 - 033F
{ 0x10DE0330,NV_SUB_IDS, "GeForce FX 5900 Ultra" },
{ 0x10DE0331,NV_SUB_IDS, "GeForce FX 5900" },
{ 0x10DE0332,NV_SUB_IDS, "GeForce FX 5900XT" },
{ 0x10DE0333,NV_SUB_IDS, "GeForce FX 5950 Ultra" },
{ 0x10DE0334,NV_SUB_IDS, "GeForce FX 5900ZT" },
{ 0x10DE0338,NV_SUB_IDS, "Quadro FX 3000" },
{ 0x10DE033F,NV_SUB_IDS, "Quadro FX 700" },
{ 0x10DE0330,"GeForce FX 5900 Ultra" },
{ 0x10DE0331,"GeForce FX 5900" },
{ 0x10DE0332,"GeForce FX 5900XT" },
{ 0x10DE0333,"GeForce FX 5950 Ultra" },
{ 0x10DE0334,"GeForce FX 5900ZT" },
{ 0x10DE0338,"Quadro FX 3000" },
{ 0x10DE033F,"Quadro FX 700" },
// 0340 - 034F
{ 0x10DE0341,NV_SUB_IDS, "GeForce FX 5700 Ultra" },
{ 0x10DE0342,NV_SUB_IDS, "GeForce FX 5700" },
{ 0x10DE0343,NV_SUB_IDS, "GeForce FX 5700LE" },
{ 0x10DE0344,NV_SUB_IDS, "GeForce FX 5700VE" },
{ 0x10DE0347,NV_SUB_IDS, "GeForce FX Go5700" },
{ 0x10DE0348, NV_SUB_IDS,"GeForce FX Go5700" },
{ 0x10DE034C,NV_SUB_IDS, "Quadro FX Go1000" },
{ 0x10DE034E,NV_SUB_IDS, "Quadro FX 1100" },
{ 0x10DE0341,"GeForce FX 5700 Ultra" },
{ 0x10DE0342,"GeForce FX 5700" },
{ 0x10DE0343,"GeForce FX 5700LE" },
{ 0x10DE0344,"GeForce FX 5700VE" },
{ 0x10DE0345,"NV36.5" },
{ 0x10DE0347,"GeForce FX Go5700" },
{ 0x10DE0348,"GeForce FX Go5700" },
{ 0x10DE0349,"NV36M Pro" },
{ 0x10DE034B,"NV36MAP" },
{ 0x10DE034C,"Quadro FX Go1000" },
{ 0x10DE034E,"Quadro FX 1100" },
{ 0x10DE034F,"NV36GL" },
// 0350 - 035F
// 0360 - 036F
// 0370 - 037F
// 0380 - 038F
{ 0x10DE038B,NV_SUB_IDS, "GeForce 7650 GS" },
{ 0x10DE038B,"GeForce 7650 GS" },
// 0390 - 039F
{ 0x10DE0390,NV_SUB_IDS, "GeForce 7650 GS" },
{ 0x10DE0391,NV_SUB_IDS, "GeForce 7600 GT" },
{ 0x10DE0392,NV_SUB_IDS, "GeForce 7600 GS" },
{ 0x10DE0393,NV_SUB_IDS, "GeForce 7300 GT" },
{ 0x10DE0394,NV_SUB_IDS, "GeForce 7600 LE" },
{ 0x10DE0395,NV_SUB_IDS, "GeForce 7300 GT" },
{ 0x10DE0397,NV_SUB_IDS, "GeForce Go 7700" },
{ 0x10DE0398,NV_SUB_IDS, "GeForce Go 7600" },
{ 0x10DE0399,NV_SUB_IDS, "GeForce Go 7600 GT"},
{ 0x10DE039A,NV_SUB_IDS, "Quadro NVS 300M" },
{ 0x10DE039B,NV_SUB_IDS, "GeForce Go 7900 SE" },
{ 0x10DE039C,NV_SUB_IDS, "Quadro FX 550M" },
{ 0x10DE039E,NV_SUB_IDS, "Quadro FX 560" },
{ 0x10DE0390,"GeForce 7650 GS" },
{ 0x10DE0391,"GeForce 7600 GT" },
{ 0x10DE0392,"GeForce 7600 GS" },
{ 0x10DE0393,"GeForce 7300 GT" },
{ 0x10DE0394,"GeForce 7600 LE" },
{ 0x10DE0395,"GeForce 7300 GT" },
{ 0x10DE0397,"GeForce Go 7700" },
{ 0x10DE0398,"GeForce Go 7600" },
{ 0x10DE0399,"GeForce Go 7600 GT"},
{ 0x10DE039A,"Quadro NVS 300M" },
{ 0x10DE039B,"GeForce Go 7900 SE" },
{ 0x10DE039C,"Quadro FX 560M" },
{ 0x10DE039E,"Quadro FX 560" },
// 03A0 - 03AF
// 03B0 - 03BF
// 03C0 - 03CF
// 03D0 - 03DF
{ 0x10DE03D0,NV_SUB_IDS, "GeForce 6150SE nForce 430" },
{ 0x10DE03D1,NV_SUB_IDS, "GeForce 6100 nForce 405" },
{ 0x10DE03D2,NV_SUB_IDS, "GeForce 6100 nForce 400" },
{ 0x10DE03D5,NV_SUB_IDS, "GeForce 6100 nForce 420" },
{ 0x10DE03D6,NV_SUB_IDS, "GeForce 7025 / nForce 630a" },
{ 0x10DE03D0,"GeForce 6150SE nForce 430" },
{ 0x10DE03D1,"GeForce 6100 nForce 405" },
{ 0x10DE03D2,"GeForce 6100 nForce 400" },
{ 0x10DE03D5,"GeForce 6100 nForce 420" },
{ 0x10DE03D6,"GeForce 7025 / nForce 630a" },
// 03E0 - 03EF
// 03F0 - 03FF
// 0400 - 040F
{ 0x10DE0400,NV_SUB_IDS, "GeForce 8600 GTS" },
{ 0x10DE0401,NV_SUB_IDS, "GeForce 8600 GT" },
{ 0x10DE0402,NV_SUB_IDS, "GeForce 8600 GT" },
{ 0x10DE0403,NV_SUB_IDS, "GeForce 8600 GS" },
{ 0x10DE0404,NV_SUB_IDS, "GeForce 8400 GS" },
{ 0x10DE0405,NV_SUB_IDS, "GeForce 9500M GS" },
{ 0x10DE0406,NV_SUB_IDS, "GeForce 8300 GS" },
{ 0x10DE0407,NV_SUB_IDS, "GeForce 8600M GT" },
{ 0x10DE0408,NV_SUB_IDS, "GeForce 9650M GS" },
{ 0x10DE0409,NV_SUB_IDS, "GeForce 8700M GT" },
{ 0x10DE040A,NV_SUB_IDS, "Quadro FX 370" },
{ 0x10DE040B,NV_SUB_IDS, "Quadro NVS 320M" },
{ 0x10DE040C,NV_SUB_IDS, "Quadro FX 570M" },
{ 0x10DE040D,NV_SUB_IDS, "Quadro FX 1600M" },
{ 0x10DE040E,NV_SUB_IDS, "Quadro FX 570" },
{ 0x10DE040F,NV_SUB_IDS, "Quadro FX 1700" },
{ 0x10DE0400,"GeForce 8600 GTS" },
{ 0x10DE0401,"GeForce 8600 GT" },
{ 0x10DE0402,"GeForce 8600 GT" },
{ 0x10DE0403,"GeForce 8600 GS" },
{ 0x10DE0404,"GeForce 8400 GS" },
{ 0x10DE0405,"GeForce 9500M GS" },
{ 0x10DE0406,"GeForce 8300 GS" },
{ 0x10DE0407,"GeForce 8600M GT" },
{ 0x10DE0408,"GeForce 9650M GS" },
{ 0x10DE0409,"GeForce 8700M GT" },
{ 0x10DE040A,"Quadro FX 370" },
{ 0x10DE040B,"Quadro NVS 320M" },
{ 0x10DE040C,"Quadro FX 570M" },
{ 0x10DE040D,"Quadro FX 1600M" },
{ 0x10DE040E,"Quadro FX 570" },
{ 0x10DE040F,"Quadro FX 1700" },
// 0410 - 041F
{ 0x10DE0410,NV_SUB_IDS, "GeForce GT 330" },
{ 0x10DE0410,"GeForce GT 330" },
// 0420 - 042F
{ 0x10DE0420,NV_SUB_IDS, "GeForce 8400 SE" },
{ 0x10DE0421,NV_SUB_IDS, "GeForce 8500 GT" },
{ 0x10DE0422,NV_SUB_IDS, "GeForce 8400 GS" },
{ 0x10DE0423,NV_SUB_IDS, "GeForce 8300 GS" },
{ 0x10DE0424,NV_SUB_IDS, "GeForce 8400 GS" },
{ 0x10DE0425,NV_SUB_IDS, "GeForce 8600M GS" },
{ 0x10DE0426,NV_SUB_IDS, "GeForce 8400M GT" },
{ 0x10DE0427,NV_SUB_IDS, "GeForce 8400M GS" },
{ 0x10DE0428,NV_SUB_IDS, "GeForce 8400M G" },
{ 0x10DE0429,NV_SUB_IDS, "Quadro NVS 140M" },
{ 0x10DE042A,NV_SUB_IDS, "Quadro NVS 130M" },
{ 0x10DE042B,NV_SUB_IDS, "Quadro NVS 135M" },
{ 0x10DE042C,NV_SUB_IDS, "GeForce 9400 GT" },
{ 0x10DE042D,NV_SUB_IDS, "Quadro FX 360M" },
{ 0x10DE042E,NV_SUB_IDS, "GeForce 9300M G" },
{ 0x10DE042F,NV_SUB_IDS, "Quadro NVS 290" },
{ 0x10DE0420,"GeForce 8400 SE" },
{ 0x10DE0421,"GeForce 8500 GT" },
{ 0x10DE0422,"GeForce 8400 GS" },
{ 0x10DE0423,"GeForce 8300 GS" },
{ 0x10DE0424,"GeForce 8400 GS" },
{ 0x10DE0425,"GeForce 8600M GS" },
{ 0x10DE0426,"GeForce 8400M GT" },
{ 0x10DE0427,"GeForce 8400M GS" },
{ 0x10DE0428,"GeForce 8400M G" },
{ 0x10DE0429,"Quadro NVS 140M" },
{ 0x10DE042A,"Quadro NVS 130M" },
{ 0x10DE042B,"Quadro NVS 135M" },
{ 0x10DE042C,"GeForce 9400 GT" },
{ 0x10DE042D,"Quadro FX 360M" },
{ 0x10DE042E,"GeForce 9300M G" },
{ 0x10DE042F,"Quadro NVS 290" },
// 0430 - 043F
// 0440 - 044F
// 0450 - 045F
// 04A0 - 04AF
// 04B0 - 04BF
// 04C0 - 04CF
{ 0x10DE04C0,"NVIDIA G78" },
{ 0x10DE04C1,"NVIDIA G78" },
{ 0x10DE04C2,"NVIDIA G78" },
{ 0x10DE04C3,"NVIDIA G78" },
{ 0x10DE04C4,"NVIDIA G78" },
{ 0x10DE04C5,"NVIDIA G78" },
{ 0x10DE04C6,"NVIDIA G78" },
{ 0x10DE04C7,"NVIDIA G78" },
{ 0x10DE04C8,"NVIDIA G78" },
{ 0x10DE04C9,"NVIDIA G78" },
{ 0x10DE04CA,"NVIDIA G78" },
{ 0x10DE04CB,"NVIDIA G78" },
{ 0x10DE04CC,"NVIDIA G78" },
{ 0x10DE04CD,"NVIDIA G78" },
{ 0x10DE04CE,"NVIDIA G78" },
{ 0x10DE04CF,"NVIDIA G78" },
// 04D0 - 04DF
// 04E0 - 04EF
// 04F0 - 04FF
// 0510 - 051F
// 0520 - 052F
// 0530 - 053F
{ 0x10DE0530,NV_SUB_IDS, "GeForce 7190M / nForce 650M" },
{ 0x10DE0531,NV_SUB_IDS, "GeForce 7150M / nForce 630M" },
{ 0x10DE0533,NV_SUB_IDS, "GeForce 7000M / nForce 610M" },
{ 0x10DE053A,NV_SUB_IDS, "GeForce 7050 PV / nForce 630a" },
{ 0x10DE053B,NV_SUB_IDS, "GeForce 7050 PV / nForce 630a" },
{ 0x10DE053E,NV_SUB_IDS, "GeForce 7025 / nForce 630a" },
{ 0x10DE0530,"GeForce 7190M / nForce 650M" },
{ 0x10DE0531,"GeForce 7150M / nForce 630M" },
{ 0x10DE0533,"GeForce 7000M / nForce 610M" },
{ 0x10DE053A,"GeForce 7050 PV / nForce 630a" },
{ 0x10DE053B,"GeForce 7050 PV / nForce 630a" },
{ 0x10DE053E,"GeForce 7025 / nForce 630a" },
// 0540 - 054F
// 0550 - 055F
// 0560 - 056F
// 05C0 - 05CF
// 05D0 - 05DF
// 05E0 - 05EF
{ 0x10DE05E0,NV_SUB_IDS, "GeForce GTX 295" },
{ 0x10DE05E1,NV_SUB_IDS, "GeForce GTX 280" },
{ 0x10DE05E2,NV_SUB_IDS, "GeForce GTX 260" },
{ 0x10DE05E3,NV_SUB_IDS, "GeForce GTX 285" },
{ 0x10DE05E6,NV_SUB_IDS, "GeForce GTX 275" },
{ 0x10DE05E7,0x10DE0595, "Tesla T10 Processor" },
{ 0x10DE05E7,0x10DE066A,"Tesla C1060" },
{ 0x10DE05E7,0x10DE068F,"Tesla T10 Processor" },
{ 0x10DE05E7,0x10DE0697,"Tesla M1060" },
{ 0x10DE05E7,0x10DE0714,"Tesla M1060" },
{ 0x10DE05E7,0x10DE0743,"Tesla M1060" },
{ 0x10DE05EA,NV_SUB_IDS, "GeForce GTX 260" },
{ 0x10DE05EB,NV_SUB_IDS, "GeForce GTX 295" },
{ 0x10DE05ED,NV_SUB_IDS, "Quadroplex 2200 D2" },
{ 0x10DE05E0,"GeForce GTX 295" },
{ 0x10DE05E1,"GeForce GTX 280" },
{ 0x10DE05E2,"GeForce GTX 260" },
{ 0x10DE05E3,"GeForce GTX 285" },
{ 0x10DE05E4,"NVIDIA GT200" },
{ 0x10DE05E5,"NVIDIA GT200" },
{ 0x10DE05E6,"GeForce GTX 275" },
{ 0x10DE05E7,"nVidia Tesla C1060" },
{ 0x10DE05E8,"NVIDIA GT200" },
{ 0x10DE05E9,"NVIDIA GT200" },
{ 0x10DE05EA,"GeForce GTX 260" },
{ 0x10DE05EB,"GeForce GTX 295" },
{ 0x10DE05EC,"NVIDIA GT200" },
{ 0x10DE05ED,"Quadroplex 2200 D2" },
{ 0x10DE05EE,"NVIDIA GT200" },
{ 0x10DE05EF,"NVIDIA GT200" },
// 05F0 - 05FF
{ 0x10DE05F8,NV_SUB_IDS, "Quadroplex 2200 S4" },
{ 0x10DE05F9,NV_SUB_IDS, "Quadro CX" },
{ 0x10DE05FD,NV_SUB_IDS, "Quadro FX 5800" },
{ 0x10DE05FE,NV_SUB_IDS, "Quadro FX 4800" },
{ 0x10DE05FF,NV_SUB_IDS, "Quadro FX 3800" },
{ 0x10DE05F0,"NVIDIA GT200" },
{ 0x10DE05F1,"NVIDIA GT200" },
{ 0x10DE05F2,"NVIDIA GT200" },
{ 0x10DE05F3,"NVIDIA GT200" },
{ 0x10DE05F4,"NVIDIA GT200" },
{ 0x10DE05F5,"NVIDIA GT200" },
{ 0x10DE05F6,"NVIDIA GT200" },
{ 0x10DE05F7,"NVIDIA GT200" },
{ 0x10DE05F8,"Quadroplex 2200 S4" },
{ 0x10DE05F9,"NVIDIA Quadro CX" },
{ 0x10DE05FA,"NVIDIA GT200" },
{ 0x10DE05FB,"NVIDIA GT200" },
{ 0x10DE05FC,"NVIDIA GT200" },
{ 0x10DE05FD,"Quadro FX 5800" },
{ 0x10DE05FE,"Quadro FX 4800" },
{ 0x10DE05FF,"Quadro FX 3800" },
// 0600 - 060F
{ 0x10DE0600,NV_SUB_IDS, "GeForce 8800 GTS 512" },
{ 0x10DE0601,NV_SUB_IDS, "GeForce 9800 GT" },
{ 0x10DE0602,NV_SUB_IDS, "GeForce 8800 GT" },
{ 0x10DE0603,NV_SUB_IDS, "GeForce GT 230" },
{ 0x10DE0604,NV_SUB_IDS, "GeForce 9800 GX2" },
{ 0x10DE0605,NV_SUB_IDS, "GeForce 9800 GT" },
{ 0x10DE0606,NV_SUB_IDS, "GeForce 8800 GS" },
{ 0x10DE0607,NV_SUB_IDS, "GeForce GTS 240" },
{ 0x10DE0608,NV_SUB_IDS, "GeForce 9800M GTX" },
{ 0x10DE0609,NV_SUB_IDS, "GeForce 8800M GTS" },
{ 0x10DE060A,NV_SUB_IDS, "GeForce GTX 280M" },
{ 0x10DE060B,NV_SUB_IDS, "GeForce 9800M GT" },
{ 0x10DE060C,NV_SUB_IDS, "GeForce 8800M GTX" },
{ 0x10DE060D,NV_SUB_IDS, "GeForce 8800 GS" },
{ 0x10DE060F,NV_SUB_IDS, "GeForce GTX 285M" },
{ 0x10DE0600,"GeForce 8800 GTS" },
{ 0x10DE0601,"GeForce 9800 GT" },
{ 0x10DE0602,"GeForce 8800 GT" },
{ 0x10DE0603,"GeForce GT 230" },
{ 0x10DE0604,"GeForce 9800 GX2" },
{ 0x10DE0605,"GeForce 9800 GT" },
{ 0x10DE0606,"GeForce 8800 GS" },
{ 0x10DE0607,"GeForce GTS 240" },
{ 0x10DE0608,"GeForce 9800M GTX" },
{ 0x10DE0609,"GeForce 8800M GTS" },
{ 0x10DE060A,"GeForce GTX 280M" },
{ 0x10DE060B,"GeForce 9800M GT" },
{ 0x10DE060C,"GeForce 8800M GTX" },
{ 0x10DE060D,"GeForce 8800 GS" },
{ 0x10DE060F,"GeForce GTX 285M" },
// 0610 - 061F
{ 0x10DE0610,NV_SUB_IDS, "GeForce 9600 GSO" },
{ 0x10DE0611,NV_SUB_IDS, "GeForce 8800 GT" },
{ 0x10DE0612,NV_SUB_IDS, "GeForce 9800 GTX" },
{ 0x10DE0613,NV_SUB_IDS, "GeForce 9800 GTX+" },
{ 0x10DE0614,NV_SUB_IDS, "GeForce 9800 GT" },
{ 0x10DE0615,NV_SUB_IDS, "GeForce GTS 250" },
{ 0x10DE0617,NV_SUB_IDS, "GeForce 9800M GTX" },
{ 0x10DE0618,NV_SUB_IDS, "GeForce GTX 260M" },
{ 0x10DE0619,NV_SUB_IDS, "Quadro FX 4700 X2" },
{ 0x10DE061A,NV_SUB_IDS, "Quadro FX 3700" },
{ 0x10DE061B,NV_SUB_IDS, "Quadro VX 200" },
{ 0x10DE061C,NV_SUB_IDS, "Quadro FX 3600M" },
{ 0x10DE061D,NV_SUB_IDS, "Quadro FX 2800M" },
{ 0x10DE061E,NV_SUB_IDS, "Quadro FX 3700M" },
{ 0x10DE061F,NV_SUB_IDS, "Quadro FX 3800M" },
{ 0x10DE0610,"GeForce 9600 GSO" },
{ 0x10DE0611,"GeForce 8800 GT" },
{ 0x10DE0612,"GeForce 9800 GTX" },
{ 0x10DE0613,"GeForce 9800 GTX+" },
{ 0x10DE0614,"GeForce 9800 GT" },
{ 0x10DE0615,"GeForce GTS 250" },
{ 0x10DE0617,"GeForce 9800M GTX" },
{ 0x10DE0618,"GeForce GTX 260M" },
{ 0x10DE0619,"Quadro FX 4700 X2" },
{ 0x10DE061A,"Quadro FX 3700" },
{ 0x10DE061B,"Quadro VX 200" },
{ 0x10DE061C,"Quadro FX 3600M" },
{ 0x10DE061D,"Quadro FX 2800M" },
{ 0x10DE061E,"Quadro FX 3700M" },
{ 0x10DE061F,"Quadro FX 3800M" },
// 0620 - 062F
{ 0x10DE0621,NV_SUB_IDS, "GeForce GT 230" },
{ 0x10DE0622,NV_SUB_IDS, "GeForce 9600 GT" },
{ 0x10DE0623,NV_SUB_IDS, "GeForce 9600 GS" },
{ 0x10DE0625,NV_SUB_IDS, "GeForce 9600 GSO 512"},
{ 0x10DE0626,NV_SUB_IDS, "GeForce GT 130" },
{ 0x10DE0627,NV_SUB_IDS, "GeForce GT 140" },
{ 0x10DE0628,NV_SUB_IDS, "GeForce 9800M GTS" },
{ 0x10DE062A,NV_SUB_IDS, "GeForce 9700M GTS" },
{ 0x10DE062B,NV_SUB_IDS, "GeForce 9800M GS" },
{ 0x10DE062C,NV_SUB_IDS, "GeForce 9800M GTS" },
{ 0x10DE062D,NV_SUB_IDS, "GeForce 9600 GT" },
{ 0x10DE062E,NV_SUB_IDS, "GeForce 9600 GT" },
{ 0x10DE0620,"NVIDIA G94" },
{ 0x10DE0621,"GeForce GT 230" },
{ 0x10DE0622,"GeForce 9600 GT" },
{ 0x10DE0623,"GeForce 9600 GS" },
{ 0x10DE0624,"NVIDIA G94" },
{ 0x10DE0625,"GeForce 9600 GSO 512"},
{ 0x10DE0626,"GeForce GT 130" },
{ 0x10DE0627,"GeForce GT 140" },
{ 0x10DE0628,"GeForce 9800M GTS" },
{ 0x10DE0629,"NVIDIA G94" },
{ 0x10DE062A,"GeForce 9700M GTS" },
{ 0x10DE062B,"GeForce 9800M GS" },
{ 0x10DE062C,"GeForce 9800M GTS" },
{ 0x10DE062D,"GeForce 9600 GT" },
{ 0x10DE062E,"GeForce 9600 GT" },
{ 0x10DE062F,"GeForce 9800 S" },
// 0630 - 063F
{ 0x10DE0631,NV_SUB_IDS, "GeForce GTS 160M" },
{ 0x10DE0632,NV_SUB_IDS, "GeForce GTS 150M" },
{ 0x10DE0635,NV_SUB_IDS, "GeForce 9600 GSO" },
{ 0x10DE0637,NV_SUB_IDS, "GeForce 9600 GT" },
{ 0x10DE0638,NV_SUB_IDS, "Quadro FX 1800" },
{ 0x10DE063A,NV_SUB_IDS, "Quadro FX 2700M" },
{ 0x10DE0630,"GeForce 9700 S" },
{ 0x10DE0631,"GeForce GTS 160M" },
{ 0x10DE0632,"GeForce GTS 150M" },
{ 0x10DE0633,"NVIDIA G94" },
{ 0x10DE0634,"NVIDIA G94" },
{ 0x10DE0635,"GeForce 9600 GSO" },
{ 0x10DE0636,"NVIDIA G94" },
{ 0x10DE0637,"GeForce 9600 GT" },
{ 0x10DE0638,"Quadro FX 1800" },
{ 0x10DE0639,"NVIDIA G94" },
{ 0x10DE063A,"Quadro FX 2700M" },
{ 0x10DE063B,"NVIDIA G94" },
{ 0x10DE063C,"NVIDIA G94" },
{ 0x10DE063D,"NVIDIA G94" },
{ 0x10DE063E,"NVIDIA G94" },
{ 0x10DE063F,"NVIDIA G94" },
// 0640 - 064F
{ 0x10DE0640,NV_SUB_IDS, "GeForce 9500 GT" },
{ 0x10DE0641,NV_SUB_IDS, "GeForce 9400 GT" },
{ 0x10DE0642,NV_SUB_IDS, "GeForce 8400 GS" },
{ 0x10DE0643,NV_SUB_IDS, "GeForce 9500 GT" },
{ 0x10DE0644,NV_SUB_IDS, "GeForce 9500 GS" },
{ 0x10DE0645,NV_SUB_IDS, "GeForce 9500 GS" },
{ 0x10DE0646,NV_SUB_IDS, "GeForce GT 120" },
{ 0x10DE0647,NV_SUB_IDS, "GeForce 9600M GT" },
{ 0x10DE0648,NV_SUB_IDS, "GeForce 9600M GS" },
{ 0x10DE0649,NV_SUB_IDS, "GeForce 9600M GT" },
{ 0x10DE064A,NV_SUB_IDS, "GeForce 9700M GT" },
{ 0x10DE064B,NV_SUB_IDS, "GeForce 9500M G" },
{ 0x10DE064C,NV_SUB_IDS, "GeForce 9650M GT" },
{ 0x10DE0640,"GeForce 9500 GT" },
{ 0x10DE0641,"GeForce 9400 GT" },
{ 0x10DE0642,"GeForce 8400 GS" },
{ 0x10DE0643,"GeForce 9500 GT" },
{ 0x10DE0644,"GeForce 9500 GS" },
{ 0x10DE0645,"GeForce 9500 GS" },
{ 0x10DE0646,"GeForce GT 120" },
{ 0x10DE0647,"GeForce 9600M GT" },
{ 0x10DE0648,"GeForce 9600M GS" },
{ 0x10DE0649,"GeForce 9600M GT" },
{ 0x10DE064A,"GeForce 9700M GT" },
{ 0x10DE064B,"GeForce 9500M G" },
{ 0x10DE064C,"GeForce 9650M GT" },
// 0650 - 065F
{ 0x10DE0651,NV_SUB_IDS, "GeForce G 110M" },
{ 0x10DE0652,NV_SUB_IDS, "GeForce GT 130M" },
{ 0x10DE0653,NV_SUB_IDS, "GeForce GT 120M" },
{ 0x10DE0654,NV_SUB_IDS, "GeForce GT 220M" },
{ 0x10DE0655,NV_SUB_IDS, "GeForce GT 120" },
{ 0x10DE0656,NV_SUB_IDS, "GeForce 9650 S" },
{ 0x10DE0658,NV_SUB_IDS, "Quadro FX 380" },
{ 0x10DE0659,NV_SUB_IDS, "Quadro FX 580" },
{ 0x10DE065A,NV_SUB_IDS, "Quadro FX 1700M" },
{ 0x10DE065B,NV_SUB_IDS, "GeForce 9400 GT" },
{ 0x10DE065C,NV_SUB_IDS, "Quadro FX 770M" },
{ 0x10DE065F,NV_SUB_IDS, "GeForce G210" },
{ 0x10DE0650,"NVIDIA G96-825" },
{ 0x10DE0651,"GeForce G 110M" },
{ 0x10DE0652,"GeForce GT 130M" },
{ 0x10DE0653,"GeForce GT 120M" },
{ 0x10DE0654,"GeForce GT 220M" },
{ 0x10DE0655,"GeForce GT 120" },
{ 0x10DE0656,"GeForce 9650 S" },
{ 0x10DE0657,"NVIDIA G96" },
{ 0x10DE0658,"Quadro FX 380" },
{ 0x10DE0659,"Quadro FX 580" },
{ 0x10DE065A,"Quadro FX 1700M" },
{ 0x10DE065B,"GeForce 9400 GT" },
{ 0x10DE065C,"Quadro FX 770M" },
{ 0x10DE065D,"NVIDIA G96" },
{ 0x10DE065E,"NVIDIA G96" },
{ 0x10DE065F,"GeForce G210" },
// 0660 - 066F
// 0670 - 067F
// 0680 - 068F
// 0690 - 069F
// 06A0 - 06AF
{ 0x10DE06A0,"NVIDIA GT214" },
// 06B0 - 06BF
{ 0x10DE06B0,"NVIDIA GT214" },
// 06C0 - 06CF
{ 0x10DE06C0,NV_SUB_IDS, "GeForce GTX 480" },
{ 0x10DE06C4,NV_SUB_IDS, "GeForce GTX 465" },
{ 0x10DE06CA,NV_SUB_IDS, "GeForce GTX 480M" },
{ 0x10DE06CD,NV_SUB_IDS, "GeForce GTX 470" },
{ 0x10DE06C0,"GeForce GTX 480" },
{ 0x10DE06C3,"GeForce GTX D12U" },
{ 0x10DE06C4,"GeForce GTX 465" },
{ 0x10DE06CA,"GeForce GTX 480M" },
{ 0x10DE06CD,"GeForce GTX 470" },
// 06D0 - 06DF
{ 0x10DE06D1,0x10DE0771,"Tesla C2050" },
{ 0x10DE06D1,0x10DE0772,"Tesla C2070" },
{ 0x10DE06D2,0x10DE0774,"Tesla M2070" },
{ 0x10DE06D2,0x10DE0830,"Tesla M2070" },
{ 0x10DE06D2,0x10DE0842,"Tesla M2070" },
{ 0x10DE06D2,0x10DE088F,"Tesla X2070" },
{ 0x10DE06D2,0x10DE0908,"Tesla M2070" },
{ 0x10DE06D8,NV_SUB_IDS, "Quadro 6000" },
{ 0x10DE06D9,NV_SUB_IDS, "Quadro 5000" },
{ 0x10DE06DA,NV_SUB_IDS, "Quadro 5000M" },
{ 0x10DE06DC,NV_SUB_IDS, "Quadro 6000" },
{ 0x10DE06DD,NV_SUB_IDS, "Quadro 4000" },
{ 0x10DE06DE,0x10DE0773,"Tesla S2050" },
{ 0x10DE06DE,0x10DE077A,"Tesla M2050" },
{ 0x10DE06DE,0x10DE082F,"Tesla M2050" },
{ 0x10DE06DE,0x10DE0830,"Tesla M2070" },
{ 0x10DE06DE,0x10DE0831,"Tesla M2070" },
{ 0x10DE06DE,0x10DE0832,"Tesla M2070" },
{ 0x10DE06DE,0x10DE0840,"Tesla X2070" },
{ 0x10DE06DE,0x10DE0842,"Tesla M2050" },
{ 0x10DE06DE,0x10DE0843,"Tesla M2050" },
{ 0x10DE06DE,0x10DE0846,"Tesla M2050" },
{ 0x10DE06DE,0x10DE0866,"Tesla M2050" },
{ 0x10DE06DE,0x10DE0907,"Tesla M2050" },
{ 0x10DE06DE,0x10DE091E,"Tesla M2050" },
{ 0x10DE06DF,0x10DE0842,"Tesla M2070-Q" },
{ 0x10DE06DF,0x10DE084D,"Tesla M2070-Q" },
{ 0x10DE06DF,0x10DE087F,"Tesla M2070-Q" },
{ 0x10DE06D1,"Tesla C2050" },
{ 0x10DE06D2,"Tesla M2070" },
{ 0x10DE06D8,"Quadro 6000" },
{ 0x10DE06D9,"Quadro 5000" },
{ 0x10DE06DA,"Quadro 5000M" },
{ 0x10DE06DC,"Quadro 6000" },
{ 0x10DE06DD,"Quadro 4000" },
{ 0x10DE06DE,"Tesla M2050" },
{ 0x10DE06DF,"Tesla M2070-Q" },
// 06E0 - 06EF
{ 0x10DE06E0, NV_SUB_IDS, "GeForce 9300 GE" },
{ 0x10DE06E1, NV_SUB_IDS, "GeForce 9300 GS" },
{ 0x10DE06E2, NV_SUB_IDS, "GeForce 8400" },
{ 0x10DE06E3, NV_SUB_IDS, "GeForce 8400 SE" },
{ 0x10DE06E4, NV_SUB_IDS, "GeForce 8400 GS" },
{ 0x10DE06E5, NV_SUB_IDS, "GeForce 9300M GS" },
{ 0x10DE06E6, NV_SUB_IDS, "GeForce G100" },
{ 0x10DE06E7, NV_SUB_IDS, "GeForce 9300 SE" },
{ 0x10DE06E8, NV_SUB_IDS, "GeForce 9200M GS" },
{ 0x10DE06E9, NV_SUB_IDS, "GeForce 9300M GS" },
{ 0x10DE06EA, NV_SUB_IDS, "Quadro NVS 150M" },
{ 0x10DE06EB, NV_SUB_IDS, "Quadro NVS 160M" },
{ 0x10DE06EC, NV_SUB_IDS, "GeForce G 105M" },
{ 0x10DE06EF, NV_SUB_IDS, "GeForce G 103M" },
{ 0x10DE06E0,"GeForce 9300 GE" },
{ 0x10DE06E1,"GeForce 9300 GS" },
{ 0x10DE06E2,"GeForce 8400" },
{ 0x10DE06E3,"GeForce 8400 SE" },
{ 0x10DE06E4,"GeForce 8400 GS" },
{ 0x10DE06E5,"GeForce 9300M GS" },
{ 0x10DE06E6,"GeForce G100" },
{ 0x10DE06E7,"GeForce 9300 SE" },
{ 0x10DE06E8,"GeForce 9200M GE" },
{ 0x10DE06E9,"GeForce 9300M GS" },
{ 0x10DE06EA,"Quadro NVS 150M" },
{ 0x10DE06EB,"Quadro NVS 160M" },
{ 0x10DE06EC,"GeForce G 105M" },
{ 0x10DE06ED,"NVIDIA G98" },
{ 0x10DE06EF,"GeForce G 103M" },
// 06F0 - 06FF
{ 0x10DE06F1, NV_SUB_IDS, "GeForce G105M" },
{ 0x10DE06F8, NV_SUB_IDS, "Quadro NVS 420" },
{ 0x10DE06F9, NV_SUB_IDS, "Quadro FX 370 LP" },
{ 0x10DE06FA, NV_SUB_IDS, "Quadro NVS 450" },
{ 0x10DE06FB, NV_SUB_IDS, "Quadro FX 370M" },
{ 0x10DE06FD, NV_SUB_IDS, "Quadro NVS 295" },
{ 0x10DE06FF, NV_SUB_IDS, "HICx16 + Graphics" },
{ 0x10DE06F0,"NVIDIA G98" },
{ 0x10DE06F1,"GeForce G105M" },
{ 0x10DE06F2,"NVIDIA G98" },
{ 0x10DE06F3,"NVIDIA G98" },
{ 0x10DE06F4,"NVIDIA G98" },
{ 0x10DE06F5,"NVIDIA G98" },
{ 0x10DE06F6,"NVIDIA G98" },
{ 0x10DE06F7,"NVIDIA G98" },
{ 0x10DE06F8,"Quadro NVS 420" },
{ 0x10DE06F9,"Quadro FX 370 LP" },
{ 0x10DE06FA,"Quadro NVS 450" },
{ 0x10DE06FB,"Quadro FX 370M" },
{ 0x10DE06FC,"NVIDIA G98" },
{ 0x10DE06FD,"Quadro NVS 295" },
{ 0x10DE06FE,"NVIDIA G98" },
{ 0x10DE06FF,"HICx16 + Graphics" },
// 0700 - 070F
// 0710 - 071F
// 0720 - 072F
// 07C0 - 07CF
// 07D0 - 07DF
// 07E0 - 07EF
{ 0x10DE07E0, NV_SUB_IDS, "GeForce 7150 / nForce 630i" },
{ 0x10DE07E1, NV_SUB_IDS, "GeForce 7100 / nForce 630i" },
{ 0x10DE07E2, NV_SUB_IDS, "GeForce 7050 / nForce 630i" },
{ 0x10DE07E3, NV_SUB_IDS, "GeForce 7050 / nForce 610i" },
{ 0x10DE07E5, NV_SUB_IDS, "GeForce 7050 / nForce 620i" },
{ 0x10DE07E0,"GeForce 7150 / nForce 630i" },
{ 0x10DE07E1,"GeForce 7100 / nForce 630i" },
{ 0x10DE07E2,"GeForce 7050 / nForce 630i" },
{ 0x10DE07E3,"GeForce 7050 / nForce 610i" },
{ 0x10DE07E5,"GeForce 7050 / nForce 620i" },
// 07F0 - 07FF
// 0800 - 080F
// 0810 - 081F
// 0820 - 082F
// 0830 - 083F
// 0840 - 084F
{ 0x10DE0840, NV_SUB_IDS, "GeForce 8200M" },
{ 0x10DE0844, NV_SUB_IDS, "GeForce 9100M G" },
{ 0x10DE0845, NV_SUB_IDS, "GeForce 8200M G" },
{ 0x10DE0846, NV_SUB_IDS, "GeForce 9200" },
{ 0x10DE0847, NV_SUB_IDS, "GeForce 9100" },
{ 0x10DE0848, NV_SUB_IDS, "GeForce 8300" },
{ 0x10DE0849, NV_SUB_IDS, "GeForce 8200" },
{ 0x10DE084A, NV_SUB_IDS, "nForce 730a" },
{ 0x10DE084B, NV_SUB_IDS, "GeForce 9200" },
{ 0x10DE084C, NV_SUB_IDS, "nForce 980a/780a SLI" },
{ 0x10DE084D, NV_SUB_IDS, "nForce 750a SLI" },
{ 0x10DE084F, NV_SUB_IDS, "GeForce 8100 / nForce 720a" },
{ 0x10DE0840,"GeForce 8200M" },
{ 0x10DE0844,"GeForce 9100M G" },
{ 0x10DE0845,"GeForce 8200M G" },
{ 0x10DE0846,"GeForce 9200" },
{ 0x10DE0847,"GeForce 9100" },
{ 0x10DE0848,"GeForce 8300" },
{ 0x10DE0849,"GeForce 8200" },
{ 0x10DE084A,"nForce 730a" },
{ 0x10DE084B,"GeForce 9200" },
{ 0x10DE084C,"nForce 980a/780a SLI" },
{ 0x10DE084D,"nForce 750a SLI" },
{ 0x10DE084F,"GeForce 8100 / nForce 720a" },
// 0850 - 085F
// 0860 - 086F
{ 0x10DE0860, NV_SUB_IDS, "GeForce 9400" },
{ 0x10DE0861, NV_SUB_IDS, "GeForce 9400" },
{ 0x10DE0862, NV_SUB_IDS, "GeForce 9400M G" },
{ 0x10DE0863, NV_SUB_IDS, "GeForce 9400M" },
{ 0x10DE0864, NV_SUB_IDS, "GeForce 9300" },
{ 0x10DE0865, NV_SUB_IDS, "ION" },
{ 0x10DE0866, NV_SUB_IDS, "GeForce 9400M G" },
{ 0x10DE0867, NV_SUB_IDS, "GeForce 9400" },
{ 0x10DE0868, NV_SUB_IDS, "nForce 760i SLI" },
{ 0x10DE0869, NV_SUB_IDS, "GeForce 9400" },
{ 0x10DE086A, NV_SUB_IDS, "GeForce 9400" },
{ 0x10DE086C, NV_SUB_IDS, "GeForce 9300 / nForce 730i" },
{ 0x10DE086D, NV_SUB_IDS, "GeForce 9200" },
{ 0x10DE086E, NV_SUB_IDS, "GeForce 9100M G" },
{ 0x10DE086F, NV_SUB_IDS, "GeForce 8200M G" },
{ 0x10DE0860,"GeForce 9300" },
{ 0x10DE0861,"GeForce 9400" },
{ 0x10DE0862,"GeForce 9400M G" },
{ 0x10DE0863,"GeForce 9400M" },
{ 0x10DE0864,"GeForce 9300" },
{ 0x10DE0865,"GeForce 9300" },
{ 0x10DE0866,"GeForce 9400M G" },
{ 0x10DE0867,"GeForce 9400" },
{ 0x10DE0868,"nForce 760i SLI" },
{ 0x10DE0869,"GeForce 9400" },
{ 0x10DE086A,"GeForce 9400" },
{ 0x10DE086C,"GeForce 9300 / nForce 730i" },
{ 0x10DE086D,"GeForce 9200" },
{ 0x10DE086E,"GeForce 9100M G" },
{ 0x10DE086F,"GeForce 8200M G" },
// 0870 - 087F
{ 0x10DE0870, NV_SUB_IDS, "GeForce 9400M" },
{ 0x10DE0871, NV_SUB_IDS, "GeForce 9200" },
{ 0x10DE0872, NV_SUB_IDS, "GeForce G102M" },
{ 0x10DE0873, NV_SUB_IDS, "GeForce G102M" },
{ 0x10DE0874, NV_SUB_IDS, "ION" },
{ 0x10DE0876, NV_SUB_IDS, "ION" },
{ 0x10DE087A, NV_SUB_IDS, "GeForce 9400" },
{ 0x10DE087D, NV_SUB_IDS, "ION" },
{ 0x10DE087E, NV_SUB_IDS, "ION LE" },
{ 0x10DE087F, NV_SUB_IDS, "ION LE" },
{ 0x10DE0870,"GeForce 9400M" },
{ 0x10DE0871,"GeForce 9200" },
{ 0x10DE0872,"GeForce G102M" },
{ 0x10DE0873,"GeForce G205M" },
{ 0x10DE0874,"ION 9300M" },
{ 0x10DE0876,"ION 9400M" },
{ 0x10DE087A,"GeForce 9400" },
{ 0x10DE087D,"ION 9400M" },
{ 0x10DE087E,"ION LE" },
{ 0x10DE087F,"ION LE" }, // Tesla M2070-Q ??
// 0880 - 088F
// 0890 - 089F
// 08A0 - 08AF
{ 0x10DE08A0, NV_SUB_IDS, "GeForce 320M" },
{ 0x10DE08A4, NV_SUB_IDS, "GeForce 320M" },
{ 0x10DE08A5, NV_SUB_IDS, "GeForce 320M" },
{ 0x10DE08A0,"GeForce 320M" },
{ 0x10DE08A1,"MCP89-MZT" },
{ 0x10DE08A2,"GeForce 320M" },
{ 0x10DE08A3,"GeForce 320M" },
{ 0x10DE08A4,"GeForce 320M" },
{ 0x10DE08A5,"GeForce 320M" },
// 08B0 - 08BF
{ 0x10DE08B0,"MCP83 MMD" },
{ 0x10DE08B1,"GeForce 300M" },
{ 0x10DE08B2,"GeForce 300M" }, // MCP83-MJ
{ 0x10DE08B3,"MCP89 MM9" },
// 08C0 - 08CF
// 08D0 - 08DF
// 08E0 - 08EF
// 09E0 - 09EF
// 09F0 - 09FF
// 0A00 - 0A0F
// { 0x10DE0A00,"NVIDIA GT212" },
// 0A10 - 0A1F
// { 0x10DE0A10,"NVIDIA GT212" },
// 0A20 - 0A2F
{ 0x10DE0A20, NV_SUB_IDS, "GeForce GT220" },
{ 0x10DE0A22, NV_SUB_IDS, "GeForce 315" },
{ 0x10DE0A23, NV_SUB_IDS, "GeForce 210" },
{ 0x10DE0A26, NV_SUB_IDS, "GeForce 405" },
{ 0x10DE0A27, NV_SUB_IDS, "GeForce 405" },
{ 0x10DE0A28, NV_SUB_IDS, "GeForce GT 230M" },
{ 0x10DE0A29, NV_SUB_IDS, "GeForce GT 330M" },
{ 0x10DE0A2A, NV_SUB_IDS, "GeForce GT 230M" },
{ 0x10DE0A2B, NV_SUB_IDS, "GeForce GT 330M" },
{ 0x10DE0A2C, NV_SUB_IDS, "NVS 5100M" },
{ 0x10DE0A2D, NV_SUB_IDS, "GeForce GT 320M" },
{ 0x10DE0A20,"GeForce GT 220" },
{ 0x10DE0A21,"D10M2-20" },
{ 0x10DE0A22,"GeForce 315" },
{ 0x10DE0A23,"GeForce 210" },
{ 0x10DE0A26,"GeForce 405" },
{ 0x10DE0A27,"GeForce 405" },
{ 0x10DE0A28,"GeForce GT 230" },
{ 0x10DE0A29,"GeForce GT 330M" },
{ 0x10DE0A2A,"GeForce GT 230M" },
{ 0x10DE0A2B,"GeForce GT 330M" },
{ 0x10DE0A2C,"NVS 5100M" },
{ 0x10DE0A2D,"GeForce GT 320M" },
// 0A30 - 0A3F
{ 0x10DE0A32, NV_SUB_IDS, "GeForce GT 415" },
{ 0x10DE0A34, NV_SUB_IDS, "GeForce GT 240M" },
{ 0x10DE0A35, NV_SUB_IDS, "GeForce GT 325M" },
{ 0x10DE0A38, NV_SUB_IDS, "Quadro 400" },
{ 0x10DE0A3C, NV_SUB_IDS, "Quadro FX 880M" },
{ 0x10DE0A30,"GeForce GT 330M" },
{ 0x10DE0A32,"GeForce GT 415" },
{ 0x10DE0A34,"GeForce GT 240M" },
{ 0x10DE0A35,"GeForce GT 325M" },
{ 0x10DE0A38,"Quadro 400" },
{ 0x10DE0A3C,"Quadro FX 880M" },
{ 0x10DE0A3D,"N10P-ES" },
{ 0x10DE0A3F,"GT216-INT" },
// 0A40 - 0A4F
// 0A50 - 0A5F
// 0A60 - 0A6F
{ 0x10DE0A60, NV_SUB_IDS, "GeForce G210" },
{ 0x10DE0A62, NV_SUB_IDS, "GeForce 205" },
{ 0x10DE0A63, NV_SUB_IDS, "GeForce 310" },
{ 0x10DE0A64, NV_SUB_IDS, "ION" },
{ 0x10DE0A65, NV_SUB_IDS, "GeForce 210" },
{ 0x10DE0A66, NV_SUB_IDS, "GeForce 310" },
{ 0x10DE0A67, NV_SUB_IDS, "GeForce 315" },
{ 0x10DE0A68, NV_SUB_IDS, "GeForce G105M" },
{ 0x10DE0A69, NV_SUB_IDS, "GeForce G105M" },
{ 0x10DE0A6A, NV_SUB_IDS, "NVS 2100M" },
{ 0x10DE0A6C, NV_SUB_IDS, "NVS 3100M" },
{ 0x10DE0A6E, NV_SUB_IDS, "GeForce 305M" },
{ 0x10DE0A6F, NV_SUB_IDS, "ION" },
{ 0x10DE0A60,"GeForce G210" },
{ 0x10DE0A61,"NVS 2100" },
{ 0x10DE0A62,"GeForce 205" },
{ 0x10DE0A63,"GeForce 310" },
{ 0x10DE0A64,"ION" },
{ 0x10DE0A65,"GeForce 210" },
{ 0x10DE0A66,"GeForce 310" },
{ 0x10DE0A67,"GeForce 315" },
{ 0x10DE0A68,"GeForce G105M" },
{ 0x10DE0A69,"GeForce G105M" },
{ 0x10DE0A6A,"NVS 2100M" },
{ 0x10DE0A6C,"NVS 3100M" },
{ 0x10DE0A6E,"GeForce 305M" },
{ 0x10DE0A6F,"ION" },
// 0A70 - 0A7F
{ 0x10DE0A70, NV_SUB_IDS, "GeForce 310M" },
{ 0x10DE0A71, NV_SUB_IDS, "GeForce 305M" },
{ 0x10DE0A72, NV_SUB_IDS, "GeForce 310M" },
{ 0x10DE0A73, NV_SUB_IDS, "GeForce 305M" },
{ 0x10DE0A74, NV_SUB_IDS, "GeForce G210M" },
{ 0x10DE0A75, NV_SUB_IDS, "GeForce 310M" },
{ 0x10DE0A76, NV_SUB_IDS, "ION" },
{ 0x10DE0A78, NV_SUB_IDS, "Quadro FX 380 LP" },
{ 0x10DE0A7A, NV_SUB_IDS, "GeForce 315M" },
{ 0x10DE0A7C, NV_SUB_IDS, "Quadro FX 380M" },
{ 0x10DE0A70,"GeForce 310M" },
{ 0x10DE0A71,"GeForce 305M" },
{ 0x10DE0A72,"GeForce 310M" },
{ 0x10DE0A73,"GeForce 305M" },
{ 0x10DE0A74,"GeForce G210M" },
{ 0x10DE0A75,"GeForce G310M" },
{ 0x10DE0A76,"ION" },
{ 0x10DE0A78,"Quadro FX 380 LP" },
// { 0x10DE0A79,"N12M-NS-S" },
{ 0x10DE0A7A,"GeForce 315M" },
{ 0x10DE0A7B,"GeForce 505" },
{ 0x10DE0A7C,"Quadro FX 380M" },
{ 0x10DE0A7D,"N11M-ES" }, //SUBIDS
{ 0x10DE0A7E,"GT218-INT-S" },
{ 0x10DE0A7F,"GT218-INT-B" },
// 0A80 - 0A8F
// 0A90 - 0A9F
// 0AA0 - 0AAF
// 0C80 - 0C8F
// 0C90 - 0C9F
// 0CA0 - 0CAF
{ 0x10DE0CA0, NV_SUB_IDS, "GeForce GT 330 " },
{ 0x10DE0CA2, NV_SUB_IDS, "GeForce GT 320" },
{ 0x10DE0CA3, NV_SUB_IDS, "GeForce GT 240" },
{ 0x10DE0CA4, NV_SUB_IDS, "GeForce GT 340" },
{ 0x10DE0CA5, NV_SUB_IDS, "GeForce GT 220" },
{ 0x10DE0CA7, NV_SUB_IDS, "GeForce GT 330" },
{ 0x10DE0CA8, NV_SUB_IDS, "GeForce GTS 260M" },
{ 0x10DE0CA9, NV_SUB_IDS, "GeForce GTS 250M" },
{ 0x10DE0CAC, NV_SUB_IDS, "GeForce GT 220" },
{ 0x10DE0CAF, NV_SUB_IDS, "GeForce GT 335M" },
// 0CB0 - 0CBF
{ 0x10DE0CB0, NV_SUB_IDS, "GeForce GTS 350M" },
{ 0x10DE0CB1, NV_SUB_IDS, "GeForce GTS 360M" },
{ 0x10DE0CBC, NV_SUB_IDS, "Quadro FX 1800M" },
{ 0x10DE0CA0,"GeForce GT 330 " },
{ 0x10DE0CA2,"GeForce GT 320" },
{ 0x10DE0CA3,"GeForce GT 240" },
{ 0x10DE0CA4,"GeForce GT 340" },
{ 0x10DE0CA5,"GeForce GT 220" },
{ 0x10DE0CA7,"GeForce GT 330" },
{ 0x10DE0CA8,"GeForce GTS 260M" },
{ 0x10DE0CA9,"GeForce GTS 250M" },
{ 0x10DE0CAC,"GeForce GT 220" },
{ 0x10DE0CAD,"N10E-ES" }, // SUBIDS
{ 0x10DE0CAE,"GT215-INT" },
{ 0x10DE0CAF,"GeForce GT 335M" },
// 0CB0 - 0CBF
{ 0x10DE0CB0,"GeForce GTS 350M" },
{ 0x10DE0CB1,"GeForce GTS 360M" },
{ 0x10DE0CBC,"Quadro FX 1800M" },
// 0CC0 - 0CCF
// 0CD0 - 0CDF
// 0CE0 - 0CEF
// 0DA0 - 0DAF
// 0DB0 - 0DBF
// 0DC0 - 0DCF
{ 0x10DE0DC0, NV_SUB_IDS, "GeForce GT 440" },
{ 0x10DE0DC4, NV_SUB_IDS, "GeForce GTS 450" },
{ 0x10DE0DC5, NV_SUB_IDS, "GeForce GTS 450" },
{ 0x10DE0DC6, NV_SUB_IDS, "GeForce GTS 450" },
{ 0x10DE0DCD, NV_SUB_IDS, "GeForce GT 555M" },
{ 0x10DE0DCE, NV_SUB_IDS, "GeForce GT 555M" },
// 0DD0 - 0DDF
{ 0x10DE0DD1, NV_SUB_IDS, "GeForce GTX 460M" },
{ 0x10DE0DD2, NV_SUB_IDS, "GeForce GT 445M" },
{ 0x10DE0DD3, NV_SUB_IDS, "GeForce GT 435M" },
{ 0x10DE0DD6, NV_SUB_IDS, "GeForce GT 550M" },
{ 0x10DE0DD8,0x10DE084A,"Quadro 2000" },
{ 0x10DE0DD8,0x10DE0914,"Quadro 2000D" },
{ 0x10DE0DDA, NV_SUB_IDS, "Quadro 2000M" },
{ 0x10DE0DC0,"GeForce GT 440" },
// { 0x10DE0DC1,"D12-P1-35" },
// { 0x10DE0DC2,"D12-P1-35" },
{ 0x10DE0DC4,"GeForce GTS 450" },
{ 0x10DE0DC5,"GeForce GTS 450" },
{ 0x10DE0DC6,"GeForce GTS 450" },
// { 0x10DE0DCA,"GF10x" },
// { 0x10DE0DCC,"N12E-GS" },
{ 0x10DE0DCD,"GeForce GT 555M" },
{ 0x10DE0DCE,"GeForce GT 555M" },
// { 0x10DE0DCF,"N12P-GT-B" },
// 0DD0 - 0DDF
// { 0x10DE0DD0,"N11E-GT" },
{ 0x10DE0DD1,"GeForce GTX 460M" },
{ 0x10DE0DD2,"GeForce GT 445M" },
{ 0x10DE0DD3,"GeForce GT 435M" },
{ 0x10DE0DD6,"GeForce GT 550M" },
{ 0x10DE0DD8,"Quadro 2000" },
{ 0x10DE0DDA,"Quadro 2000M" },
{ 0x10DE0DDE,"GF106-ES" },
// { 0x10DE0DDF,"GF106-INT" },
// 0DE0 - 0DEF
{ 0x10DE0DE0, NV_SUB_IDS, "GeForce GT 440" },
{ 0x10DE0DE1, NV_SUB_IDS, "GeForce GT 430" },
{ 0x10DE0DE2, NV_SUB_IDS, "GeForce GT 420" },
{ 0x10DE0DE4, NV_SUB_IDS, "GeForce GT 520" },
{ 0x10DE0DE5, NV_SUB_IDS, "GeForce GT 530" },
{ 0x10DE0DE8, NV_SUB_IDS, "GeForce GT 620M" },
{ 0x10DE0DE9, NV_SUB_IDS, "GeForce GT 630M" },
{ 0x10DE0DEA, NV_SUB_IDS, "GeForce 610M" },
{ 0x10DE0DEB, NV_SUB_IDS, "GeForce GT 555M" },
{ 0x10DE0DEC, NV_SUB_IDS, "GeForce GT 525M" },
{ 0x10DE0DED, NV_SUB_IDS, "GeForce GT 520M" },
{ 0x10DE0DEE, NV_SUB_IDS, "GeForce GT 415M" },
{ 0x10DE0DEF, NV_SUB_IDS, "NVS 5400M" },
{ 0x10DE0DE0,"GeForce GT 440" },
{ 0x10DE0DE1,"GeForce GT 430" },
{ 0x10DE0DE2,"GeForce GT 420" },
{ 0x10DE0DE3,"GeForce GT 635M" },
{ 0x10DE0DE4,"GeForce GT 520" },
{ 0x10DE0DE5,"GeForce GT 530" },
{ 0x10DE0DE8,"GeForce GT 620M" },
{ 0x10DE0DE9,"GeForce GT 630M" },
{ 0x10DE0DEA,"GeForce GT 610M" },
{ 0x10DE0DEB,"GeForce GT 555M" },
{ 0x10DE0DEC,"GeForce GT 525M" },
{ 0x10DE0DED,"GeForce GT 520M" },
{ 0x10DE0DEE,"GeForce GT 415M" },
{ 0x10DE0DEF,"N13P-NS1-A1" },
// 0DF0 - 0DFF
{ 0x10DE0DF0, NV_SUB_IDS, "GeForce GT 425M" },
{ 0x10DE0DF1, NV_SUB_IDS, "GeForce GT 420M" },
{ 0x10DE0DF2, NV_SUB_IDS, "GeForce GT 435M" },
{ 0x10DE0DF3, NV_SUB_IDS, "GeForce GT 420M" },
{ 0x10DE0DF4, NV_SUB_IDS, "GeForce GT 540M" },
{ 0x10DE0DF5, NV_SUB_IDS, "GeForce GT 525M" },
{ 0x10DE0DF6, NV_SUB_IDS, "GeForce GT 550M" },
{ 0x10DE0DF7, NV_SUB_IDS, "GeForce GT 520M" },
{ 0x10DE0DF8, NV_SUB_IDS, "Quadro 600" },
{ 0x10DE0DF9, NV_SUB_IDS, "Quadro 500M" },
{ 0x10DE0DFA, NV_SUB_IDS, "Quadro 1000M" },
{ 0x10DE0DFC, NV_SUB_IDS, "NVS 5200M" },
{ 0x10DE0DF0,"GeForce GT 425M" },
{ 0x10DE0DF1,"GeForce GT 420M" },
{ 0x10DE0DF2,"GeForce GT 435M" },
{ 0x10DE0DF3,"GeForce GT 420M" },
{ 0x10DE0DF4,"GeForce GT 540M" },
{ 0x10DE0DF5,"GeForce GT 525M" },
{ 0x10DE0DF6,"GeForce GT 550M" },
{ 0x10DE0DF7,"GeForce GT 520M" },
{ 0x10DE0DF8,"Quadro 600" },
{ 0x10DE0DF9,"Quadro 500M" },
{ 0x10DE0DFA,"Quadro 1000M" },
{ 0x10DE0DFC,"NVS 5200M" },
{ 0x10DE0DFE,"GF108 ES" },
// { 0x10DE0DFF,"GF108 INT" },
// 0E00 - 0E0F
// 0E10 - 0E1F
// 0E20 - 0E2F
{ 0x10DE0E22, NV_SUB_IDS, "GeForce GTX 460" },
{ 0x10DE0E23, NV_SUB_IDS, "GeForce GTX 460 SE" },
{ 0x10DE0E24, NV_SUB_IDS, "GeForce GTX 460" },
{ 0x10DE0E21,"D12U-25" },
{ 0x10DE0E22,"GeForce GTX 460" },
{ 0x10DE0E23,"GeForce GTX 460 SE" },
{ 0x10DE0E24,"GeForce GTX 460" },
// { 0x10DE0E25,"D12U-50" },
{ 0x10DE0E28,"GeForce GTX 460" },
// 0E30 - 0E3F
{ 0x10DE0E30, NV_SUB_IDS, "GeForce GTX 470M" },
{ 0x10DE0E31, NV_SUB_IDS, "GeForce GTX 485M" },
{ 0x10DE0E3A, NV_SUB_IDS, "Quadro 3000M" },
{ 0x10DE0E3B, NV_SUB_IDS, "Quadro 4000M" },
{ 0x10DE0E30,"GeForce GTX 470M" },
{ 0x10DE0E31,"GeForce GTX 485M" },
// { 0x10DE0E32,"N12E-GT" },
{ 0x10DE0E38,"GF104GL" },
{ 0x10DE0E3A,"Quadro 3000M" },
{ 0x10DE0E3B,"Quadro 4000M" },
// { 0x10DE0E3E,"GF104-ES" },
// { 0x10DE0E3F,"GF104-INT" },
// 0E40 - 0E4F
// 0E50 - 0E5F
// 0E60 - 0E6F
// 0EE0 - 0EEF
// 0EF0 - 0EFF
// 0F00 - 0F0F
{ 0x10DE0F00, NV_SUB_IDS, "GeForce GT 630" },
{ 0x10DE0F01, NV_SUB_IDS, "GeForce GT 620" },
{ 0x10DE0F00,"GeForce GT 630" },
{ 0x10DE0F01,"GeForce GT 620" },
// 0F10 - 0F1F
// 0F20 - 0F2F
// 0F30 - 0F3F
// 0FA0 - 0FAF
// 0FB0 - 0FBF
// 0FC0 - 0FCF
{ 0x10DE0FC0, NV_SUB_IDS, "GeForce GT 640" },
{ 0x10DE0FC1, NV_SUB_IDS, "GeForce GT 640" },
{ 0x10DE0FC2, NV_SUB_IDS, "GeForce GT 630" },
{ 0x10DE0FCE, NV_SUB_IDS, "GeForce GT 640M LE" },
{ 0x10DE0FC0,"GeForce GT 640" },
{ 0x10DE0FC1,"GeForce GT 640" },
{ 0x10DE0FC2,"GeForce GT 630" },
{ 0x10DE0FC6,"GeForce GTX 650" },
// 0FD0 - 0FDF
{ 0x10DE0FD1, NV_SUB_IDS, "GeForce GT 650M" },
{ 0x10DE0FD2, NV_SUB_IDS, "GeForce GT 640M" },
{ 0x10DE0FD3, NV_SUB_IDS, "GeForce GT 640M LE" },
{ 0x10DE0FD4, NV_SUB_IDS, "GeForce GTX 660M" },
{ 0x10DE0FD5, NV_SUB_IDS, "GeForce GT 650M" },
{ 0x10DE0FD8, NV_SUB_IDS, "GeForce GT 640M" },
{ 0x10DE0FD1,"GeForce GT 650M" },
{ 0x10DE0FD2,"GeForce GT 640M" },
{ 0x10DE0FD3,"GeForce GT 640M LE" },
{ 0x10DE0FD4,"GeForce GTX 660M" },
{ 0x10DE0FD5,"GeForce GT 650M" },
{ 0x10DE0FD8,"GeForce GT 640M" },
{ 0x10DE0FD9,"GeForce GT 645M" },
{ 0x10DE0FDB,"GK107-ESP-A1" },
{ 0x10DE0FDF,"GeForce GT 740M" },
// 0FE0 - 0FEF
{ 0x10DE0FE0, NV_SUB_IDS, "GeForce GTX 660M" },
{ 0x10DE0FE0,"GeForce GTX 660M" },
{ 0x10DE0FE1,"GeForce GT 730M" },
{ 0x10DE0FE3,"GeForce GT 745M" },
{ 0x10DE0FE4,"GeForce GT 750M" },
// 0FF0 - 0FFF
{ 0x10DE0FFF, NV_SUB_IDS, "Quadro 410" },
{ 0x10DE0FF2,"VGX K1" },
{ 0x10DE0FF8,"Quadro K500M" },
{ 0x10DE0FF9,"Quadro K2000D" },
{ 0x10DE0FFA,"Quadro K600" },
{ 0x10DE0FFB,"Quadro K2000M" },
{ 0x10DE0FFC,"Quadro K1000M" },
{ 0x10DE0FFD,"NVS 510" },
{ 0x10DE0FFE,"Quadro K2000" },
{ 0x10DE0FFF,"Quadro 410" },
// 1000 - 100F
{ 0x10DE1003,"GeForce GTX Titan LE" },
{ 0x10DE1004,"GeForce GTX 780" },
{ 0x10DE1005,"GeForce GTX Titan" },
// 1010 - 101F
{ 0x10DE101F,"Tesla K20" },
// 1020 - 102F
{ 0x10DE1020,"Tesla K20X" },
{ 0x10DE1021,"Tesla K20Xm" },
{ 0x10DE1022,"Tesla K20c" },
{ 0x10DE1026,"Tesla K20s" },
{ 0x10DE1028,"Tesla K20m" },
// 1030 - 103F
// 1040 - 104F
{ 0x10DE1040, NV_SUB_IDS, "GeForce GT 520" },
{ 0x10DE1042, NV_SUB_IDS, "GeForce 510" },
{ 0x10DE1048, NV_SUB_IDS, "GeForce 605" },
{ 0x10DE1049, NV_SUB_IDS, "GeForce GT 620" },
{ 0x10DE104A, NV_SUB_IDS, "GeForce GT 610" },
{ 0x10DE1040,"GeForce GT 520" },
// { 0x10DE1041,"D13M1-45" },
{ 0x10DE1042,"GeForce 510" },
{ 0x10DE1048,"GeForce 605" },
{ 0x10DE1049,"GeForce GT 620" },
{ 0x10DE104A,"GeForce GT 610" },
{ 0x10DE104B,"GeForce GT 625" },
// 1050 - 105F
{ 0x10DE1050, NV_SUB_IDS, "GeForce GT 520M" },
{ 0x10DE1051, NV_SUB_IDS, "GeForce GT 520MX" },
{ 0x10DE1052, NV_SUB_IDS, "GeForce GT 520M" },
{ 0x10DE1054, NV_SUB_IDS, "GeForce GT 410M" },
{ 0x10DE1055, NV_SUB_IDS, "GeForce 410M" },
{ 0x10DE1056, NV_SUB_IDS, "Quadro NVS 4200M" },
{ 0x10DE1057, NV_SUB_IDS, "Quadro NVS 4200M" },
{ 0x10DE1058, NV_SUB_IDS, "GeForce 610M" },
{ 0x10DE1059, NV_SUB_IDS, "GeForce 610M" },
{ 0x10DE105A, NV_SUB_IDS, "GeForce 610M" },
{ 0x10DE1050,"GeForce GT 520M" },
{ 0x10DE1051,"GeForce GT 520MX" },
{ 0x10DE1052,"GeForce GT 520M" },
{ 0x10DE1054,"GeForce GT 410M" },
{ 0x10DE1055,"GeForce 410M" },
{ 0x10DE1056,"Quadro NVS 4200M" },
{ 0x10DE1057,"Quadro NVS 4200M" },
{ 0x10DE1058,"GeForce GT 610M" },
{ 0x10DE1059,"GeForce 610M" },
{ 0x10DE105A,"GeForce 610M" },
{ 0x10DE105B,"GeForce 705A" },
// 1060 - 106F
// 1070 - 107F
{ 0x10DE107D, NV_SUB_IDS, "NVS 310" },
{ 0x10DE107C,"Quadro NVS 315" },
{ 0x10DE107D,"Quadro NVS 310" },
// { 0x10DE107E,"GF119-INT" },
{ 0x10DE107F,"GF119-ES" },
// 1080 - 108F
{ 0x10DE1080, NV_SUB_IDS, "GeForce GTX 580" },
{ 0x10DE1081, NV_SUB_IDS, "GeForce GTX 570" },
{ 0x10DE1082, NV_SUB_IDS, "GeForce GTX 560 Ti" },
{ 0x10DE1084, NV_SUB_IDS, "GeForce GTX 560" },
{ 0x10DE1086, NV_SUB_IDS, "GeForce GTX 570" },
{ 0x10DE1087, NV_SUB_IDS, "GeForce GTX 560 Ti 448" },
{ 0x10DE1088, NV_SUB_IDS, "GeForce GTX 590" },
{ 0x10DE1089, NV_SUB_IDS, "GeForce GTX 580" },
{ 0x10DE108B, NV_SUB_IDS, "GeForce GTX 590" },
{ 0x10DE1080,"GeForce GTX 580" },
{ 0x10DE1081,"GeForce GTX 570" },
{ 0x10DE1082,"GeForce GTX 560 Ti" },
{ 0x10DE1083,"D13U" },
{ 0x10DE1084,"GeForce GTX 560" },
{ 0x10DE1086,"GeForce GTX 570 HD" },
{ 0x10DE1087,"GeForce GTX 560 Ti-448" },
{ 0x10DE1088,"GeForce GTX 590" },
{ 0x10DE1089,"GeForce GTX 580" },
{ 0x10DE108B,"GeForce GTX 590" },
// { 0x10DE108C,"D13U" },
{ 0x10DE108E,"Tesla C2090" },
// 1090 - 109F
{ 0x10DE1091,0x10DE0887,"Tesla M2090" },
{ 0x10DE1091,0x10DE088E,"Tesla X2090" },
{ 0x10DE1091,0x10DE0891,"Tesla X2090" },
{ 0x10DE1094,0x10DE0888,"nVidia Tesla M2075" },
{ 0x10DE1096, NV_SUB_IDS, "Tesla C2075" },
{ 0x10DE109A, NV_SUB_IDS, "Quadro 5010M" },
{ 0x10DE109B, NV_SUB_IDS, "Quadro 7000" },
{ 0x10DE1091,"Tesla M2090" }, // X2090
{ 0x10DE1094,"Tesla M2075" },
{ 0x10DE1096,"Tesla C2075" },
{ 0x10DE1098,"D13U" },
{ 0x10DE109A,"Quadro 5010M" },
{ 0x10DE109B,"Quadro 7000" },
// 10A0 - 10AF
// 10B0 - 10BF
// 10C0 - 10CF
{ 0x10DE10C0, NV_SUB_IDS, "GeForce 9300 GS" },
{ 0x10DE10C3, NV_SUB_IDS, "GeForce 8400 GS" },
{ 0x10DE10C5, NV_SUB_IDS, "GeForce 405" },
{ 0x10DE10C0,"GeForce 9300 GS" },
{ 0x10DE10C3,"GeForce 8400 GS" },
{ 0x10DE10C4,"ION" },
{ 0x10DE10C5,"GeForce 405" },
// 10D0 - 10DF
{ 0x10DE10D8, NV_SUB_IDS, "NVS 300" },
{ 0x10DE10D8,"Quadro NVS 300" },
// 10E0 - 10EF
// 10F0 - 10FF
// 1100 - 110F
// 1120 - 112F
// 1130 - 113F
// 1140 - 114F
{ 0x10DE1140, NV_SUB_IDS, "GeForce GT 620M / GT 630M" },
{ 0x10DE1140,"GeForce GT 610M" },
{ 0x10DE1141,"GeForce 610M" },
{ 0x10DE1142,"GeForce 620M" },
// { 0x10DE1143,"N13P-GV" },
// { 0x10DE1144,"GF117" },
// { 0x10DE1145,"GF117" },
// { 0x10DE1146,"GF117" },
// { 0x10DE1147,"GF117" },
{ 0x10DE1149,"GF117-ES" },
// { 0x10DE114A,"GF117-INT" },
// { 0x10DE114B,"PCI-GEN3-B" },
// 1150 - 115F
// 1160 - 116F
// 1170 - 117F
// 1180 - 118F
{ 0x10DE1180, NV_SUB_IDS, "GeForce GTX 680" },
{ 0x10DE1188, NV_SUB_IDS, "GeForce GTX 690" },
{ 0x10DE1189, NV_SUB_IDS, "GeForce GTX 670" },
{ 0x10DE1180,"GeForce GTX 680" },
{ 0x10DE1183,"GeForce GTX 660 Ti" },
{ 0x10DE1185,"GeForce GTX 660" },
{ 0x10DE1188,"GeForce GTX 690" },
{ 0x10DE1189,"GeForce GTX 670" },
{ 0x10DE118F,"Tesla K10" },
// 1190 - 119F
{ 0x10DE119F,"GeForce GTX 780M" },
// 11A0 - 11AF
{ 0x10DE11A0,"GeForce GTX 680M" },
{ 0x10DE11A1,"GeForce GTX 670MX" },
{ 0x10DE11A2,"GeForce GTX 675MX" },
{ 0x10DE11A3,"GeForce GTX 680MX" },
{ 0x10DE11A7,"GeForce GTX 675MX" },
// 11B0 - 11BF
{ 0x10DE11BA,"Quadro K5000" },
{ 0x10DE11BC,"Quadro K5000M" },
{ 0x10DE11BD,"Quadro K4000M" },
{ 0x10DE11BE,"Quadro K3000M" },
{ 0x10DE11BF,"VGX K2" },
// 11C0 - 11CF
{ 0x10DE11C0,"GeForce GTX 660" },
{ 0x10DE11C2,"GeForce GTX 650 Ti BOOST" },
{ 0x10DE11C3,"GeForce GTX 650 Ti" },
{ 0x10DE11C4,"GeForce GTX 645" },
{ 0x10DE11C6,"GeForce GTX 650 Ti" },
// 11D0 - 11DF
// 11E0 - 11EF
{ 0x10DE11E0,"GeForce GTX 770M" },
{ 0x10DE11E1,"N14E-GE-B-A1" },
{ 0x10DE11E2,"GeForce GTX 765M" },
{ 0x10DE11E3,"GeForce GTX 760M" },
// 11F0 - 11FF
{ 0x10DE11FA,"Quadro K4000" },
// 1200 - 120F
{ 0x10DE1200, NV_SUB_IDS, "GeForce GTX 560 Ti" },
{ 0x10DE1201, NV_SUB_IDS, "GeForce GTX 560" },
{ 0x10DE1203, NV_SUB_IDS, "GeForce GTX 460 SE v2" },
{ 0x10DE1205, NV_SUB_IDS, "GeForce GTX 460 v2" },
{ 0x10DE1206, NV_SUB_IDS, "GeForce GTX 555" },
{ 0x10DE1207, NV_SUB_IDS, "GeForce GT 645" },
{ 0x10DE1208, NV_SUB_IDS, "GeForce GTX 560 SE" },
// 1210 - 121F
{ 0x10DE1210, NV_SUB_IDS, "GeForce GTX 570M" },
{ 0x10DE1211, NV_SUB_IDS, "GeForce GTX 580M" },
{ 0x10DE1212, NV_SUB_IDS, "GeForce GTX 675M" },
{ 0x10DE1213, NV_SUB_IDS, "GeForce GTX 670M" },
// 1220 - 122F
// 1230 - 123F
// 1240 - 124F
{ 0x10DE1240, NV_SUB_IDS, "GeForce GT 620M" },
{ 0x10DE1241, NV_SUB_IDS, "GeForce GT 545" },
{ 0x10DE1243, NV_SUB_IDS, "GeForce GT 545" },
{ 0x10DE1244, NV_SUB_IDS, "GeForce GTX 550 Ti" },
{ 0x10DE1245, NV_SUB_IDS, "GeForce GTS 450" },
{ 0x10DE1246, NV_SUB_IDS, "GeForce GTX 550M" },
{ 0x10DE1247, NV_SUB_IDS, "GeForce GT 555M" },
{ 0x10DE1247, 0x10DE212A, "GT 635M" },
{ 0x10DE1247, 0x10DE212B, "GT 635M" },
{ 0x10DE1247, 0x10DE212C, "GT 635M" },
{ 0x10DE1248, NV_SUB_IDS, "GeForce GT 555M / GT 635M" },
{ 0x10DE124B, NV_SUB_IDS, "GeForce GT 640" },
{ 0x10DE1249, NV_SUB_IDS, "GeForce GTS 450" },
{ 0x10DE124B, NV_SUB_IDS, "GeForce GT 640" },
{ 0x10DE124D, NV_SUB_IDS, "GeForce GT 555M / GT 635M" },
// 1250 - 125F
{ 0x10DE1251, NV_SUB_IDS, "GeForce GTX 560M" },
{ 0x10DE1200,"GeForce GTX 560 Ti" },
{ 0x10DE1201,"GeForce GTX 560" },
{ 0x10DE1202,"GeForce GTX 560 Ti" },
{ 0x10DE1203,"GeForce GTX 460 SE v2" },
{ 0x10DE1205,"GeForce GTX 460 v2" },
{ 0x10DE1206,"GeForce GTX 555" },
{ 0x10DE1207,"GeForce GT 645" },
{ 0x10DE1208,"GeForce GTX 560 SE" },
{ 0x10DE1210,"GeForce GTX 570M" },
{ 0x10DE1211,"GeForce GTX 580M" },
{ 0x10DE1212,"GeForce GTX 675M" },
{ 0x10DE1213,"GeForce GTX 670M" },
{ 0x10DE1240,"GeForce GT 620M" },
{ 0x10DE1241,"GeForce GT 545" },
{ 0x10DE1243,"GeForce GT 545" },
{ 0x10DE1244,"GeForce GTX 550 Ti" },
{ 0x10DE1245,"GeForce GTS 450" },
{ 0x10DE1246,"GeForce GT 550M" },
{ 0x10DE1247,"GeForce GT 555M" },
{ 0x10DE1248,"GeForce GT 555M" },
{ 0x10DE1249,"GeForce GTS 450" },
{ 0x10DE124B,"GeForce GT 640" },
{ 0x10DE124D,"GeForce GT 555M" },
// { 0x10DE1250,"GF116-INT" },
{ 0x10DE1251,"GeForce GTX 560M" },
// 1260 - 126F
// 1270 - 127F
// 1280 - 128F
{ 0x10DE1280,"GeForce GT 635" },
// 1290 - 129F
{ 0x10DE1290,"GeForce GT 730M" },
{ 0x10DE1291,"GeForce GT 735M" },
{ 0x10DE1292,"GeForce GT 740M" },
{ 0x10DE1293,"GeForce GT 730M" },
{ 0x10DE1294,"GeForce GT 740M" },
// 12A0 - 12AF
//{ 0x10DE12A0,"GeForce GT ???" },
// 12B0 - 12BF
// 12C0 - 12CF
// 12D0 - 12DF
// 12F0 - 12FF
};
static nvidia_card_info_t nvidia_card_exceptions[] = {
/* ========================================================================================
* Layout is device(VendorId + DeviceId), subdev (SubvendorId + SubdeviceId), display name.
* ========================================================================================
*/
/* ------ Specific DeviceID and SubDevID. ------ */
// 0000 - 00FF
{ 0x10DE0040,0x10438178,"Asus V9999 Ultra V62.11" },
{ 0x10DE0040,0x1043817D,"Asus V9999GT V61.21" },
{ 0x10DE0040,0x7FFFFFFF,"GeForce 6800 Ultra [NV40.0]" },
// 0100 - 01FF
{ 0x10DE01D7,0x102801C2,"Dell Quadro NVS 110M" },
{ 0x10DE01D7,0x102801CC,"Dell Quadro NVS 110M" },
{ 0x10DE01D7,0x10DE014B,"nVidia Quadro NVS 110M" },
{ 0x10DE01D8,0x102801CC,"Dell Quadro NVS 120M" },
{ 0x10DE01D8,0x10282003,"Dell Quadro NVS 120M" },
{ 0x10DE01DA,0x10280407,"Dell GeForce 7300 LE" },
// 0200 - 02FF
{ 0x10DE025B,0x10480D23,"ELSA Gloria4 700XGL" },
// 0300 - 03FF
{ 0x10DE0391,0x10DE047A,"Galaxy GeForce 7600 GT" },
{ 0x10DE0391,0x19F120DE,"Galaxy GeForce 7600 GT" },
{ 0x10DE0393,0x00000400,"Apple GeForce 7300GT" },
// 0400 - 04FF
{ 0x10DE0402,0x10DE0439,"Galaxy 8600GT" },
{ 0x10DE0402,0x10DE0505,"Galaxy 8600GT" },
// 0500 - 05FF
{ 0x10DE05E2,0x104382EB,"ASUS ENGTX260" },
{ 0x10DE05E2,0x16822390,"HFX GeForce GTX 260" },
{ 0x10DE05E2,0x17870000,"HIS GeForce GTX 260" },
{ 0x10DE05E6,0x10B00401,"Gainward GeForce GTX 285" },
{ 0x10DE05E7,0x10DE0595,"nVidia Tesla T10 Processor" },
{ 0x10DE05E7,0x10DE066A,"nVidia Tesla C1060" },
{ 0x10DE05E7,0x10DE068F,"nVidia Tesla T10 Processor" },
{ 0x10DE05E7,0x10DE0697,"nVidia Tesla M1060" },
{ 0x10DE05E7,0x10DE0714,"nVidia Tesla M1060" },
{ 0x10DE05E7,0x10DE0743,"nVidia Tesla M1060" },
// 0600 - 06FF
{ 0x10DE0600,0x10DE0000,"Abit GeForce 8800 GTS" },
{ 0x10DE0605,0x145834A2,"Gigabyte GV-N98TOC-512H" },
{ 0x10DE0608,0x15880577,"Solidum GeForce 9800M GTX" },
{ 0x10DE0609,0x11700121,"Inventec GeForce 8800M GTS" },
{ 0x10DE0612,0x104382A6,"Asus GeForce 9800 GTX+" },
{ 0x10DE0612,0x10DE0571,"nVidia GeForce 9800 GTX+" },
{ 0x10DE0612,0x10DE0592,"nVidia GeForce 9800 GTX+" },
{ 0x10DE0612,0x3842C842,"EVGA GeForce 9800 GTX+" },
{ 0x10DE0612,0x3842C875,"EVGA GeForce 9800 GTX+" },
{ 0x10DE0615,0x10480F67,"ELSA GeForce GTS 250" },
{ 0x10DE0615,0x10DE0592,"Palit GeForce GTS 250" },
{ 0x10DE0615,0x10DE0593,"Palit GeForce GTS 250" },
{ 0x10DE0615,0x10DE0652,"Palit GeForce GTS 250" },
{ 0x10DE0615,0x10DE0719,"Palit GeForce GTS 250" },
{ 0x10DE0615,0x10DE079E,"Palit GeForce GTS 250" },
{ 0x10DE0615,0x11503842,"TMC GeForce GTS 250" }, // Thinking Machines Corporation
{ 0x10DE0615,0x11513842,"JAE GeForce GTS 250" },
{ 0x10DE0615,0x11553842,"Pine GeForce GTS 250" },
{ 0x10DE0615,0x11563842,"Periscope GeForce GTS 250" },
{ 0x10DE0618,0x10432028,"Asus GeForce GTX 170M" },
{ 0x10DE0618,0x1043202B,"Asus GeForce GTX 680" },
{ 0x10DE0622,0x104382AC,"Asus EN9600GT Magic" },
{ 0x10DE0640,0x10DE077F,"Inno3D GeForce 9500GT HDMI" },
{ 0x10DE0649,0x1043202D,"Asus GeForce GT 220M" },
{ 0x10DE06CD,0x10DE079F,"Point of View GeForce GTX 470" },
{ 0x10DE06CD,0x14622220,"MSi GeForce GTX 470 Twin Frozr II" },
{ 0x10DE06D1,0x10DE0772,"nVidia Tesla C2070" },
{ 0x10DE06D2,0x10DE088F,"nVidia Tesla X2070" },
{ 0x10DE06DE,0x10DE0773,"nVidia Tesla S2050" },
{ 0x10DE06DE,0x10DE0830,"nVidia Tesla M2070" },
{ 0x10DE06DE,0x10DE0831,"nVidia Tesla M2070" },
{ 0x10DE06DE,0x10DE0832,"nVidia Tesla M2070" },
{ 0x10DE06DE,0x10DE0840,"nVidia Tesla X2070" },
{ 0x10DE06E4,0x10438322,"Asus EN8400GS" },
{ 0x10DE06E4,0x14583475,"GV-NX84S256HE [GeForce 8400 GS]" },
{ 0x10DE06E8,0x10280262,"Dell GeForce 9200M GS" },
{ 0x10DE06E8,0x10280271,"Dell GeForce 9200M GS" },
{ 0x10DE06E8,0x10280272,"Dell GeForce 9200M GS" },
{ 0x10DE06E8,0x103C30F4,"HP GeForce 9200M GS" },
{ 0x10DE06E8,0x103C30F7,"HP GeForce 9200M GS" },
{ 0x10DE06E8,0x103C3603,"HP GeForce 9200M GS" },
// 0700 - 07FF
// 0800 - 08FF
{ 0x10DE0873,0x104319B4,"Asus GeForce G102M" },
// 0900 - 09FF
// 0A00 - 0AFF
{ 0x10DE0A6F,0x12974003,"Shuttle XS 3510MA" },
{ 0x10DE0A70,0x17AA3605,"Lenovo ION" },
{ 0x10DE0A73,0x17AA3607,"Lenovo ION" },
{ 0x10DE0A73,0x17AA3610,"Lenovo ION" },
{ 0x10DE0A75,0x17AA3605,"Lenovo ION" },
// 0B00 - 0BFF
// 0C00 - 0CFF
{ 0x10DE0CA3,0x14628041,"MSi VN240GT-MD1G" },
{ 0x10DE0CA3,0x16423926,"Bitland GeForce GT 230" },
// 0D00 - 0DFF
{ 0x10DE0DD8,0x10DE0914,"nVidia Quadro 2000D" },
{ 0x10DE0DEF,0x17AA21F3,"Lenovo NVS 5400M" },
{ 0x10DE0DEF,0x17AA21F4,"Lenovo NVS 5400M" },
{ 0x10DE0DEF,0x17AA21F5,"Lenovo NVS 5400M" },
{ 0x10DE0DEF,0x17AA21F6,"Lenovo NVS 5400M" },
{ 0x10DE0DEF,0x17AA5005,"Lenovo NVS 5400M" },
// 0E00 - 0EFF
{ 0x10DE0E22,0x1043835D,"Asus ENGTX460" },
{ 0x10DE0E23,0x10B00401,"Gainward GeForce GTX 460" },
// 0F00 - 0FFF
{ 0x10DE0FD2,0x10280595,"Dell GeForce GT 640M LE" },
{ 0x10DE0FD2,0x102805B2,"Dell GeForce GT 640M LE" },
// 1000 - 10FF
{ 0x10DE1080,0x14622561,"MSI N580GTX Lightning" },
{ 0x10DE1080,0x14622563,"MSI N580GTX Lightning" },
{ 0x10DE1086,0x10DE0871,"Inno3D GeForce GTX 570" },
{ 0x10DE1087,0x104383D6,"Asus ENGTX560Ti448 DCII" },
{ 0x10DE1091,0x10DE088E,"nVidia Tesla X2090" },
{ 0x10DE1091,0x10DE0891,"nVidia Tesla X2090" },
// 1100 - 11FF
{ 0x10DE1140,0x1025064A,"Acer GeForce GT 620M" },
{ 0x10DE1140,0x1025064C,"Acer GeForce GT 620M" },
{ 0x10DE1140,0x10250680,"Acer GeForce GT 620M" },
{ 0x10DE1140,0x10250692,"Acer GeForce GT 620M" },
{ 0x10DE1140,0x10250694,"Acer GeForce GT 620M" },
{ 0x10DE1140,0x10250702,"Acer GeForce GT 620M" },
{ 0x10DE1140,0x10250719,"Acer GeForce GT 620M" },
{ 0x10DE1140,0x10250725,"Acer GeForce GT 620M" },
{ 0x10DE1140,0x10250728,"Acer GeForce GT 620M" },
{ 0x10DE1140,0x1025072B,"Acer GeForce GT 620M" },
{ 0x10DE1140,0x1025072E,"Acer GeForce GT 620M" },
{ 0x10DE1140,0x10250732,"Acer GeForce GT 620M" },
{ 0x10DE1140,0x10280565,"Dell GeForce GT 630M" },
{ 0x10DE1140,0x10280568,"Dell GeForce GT 630M" },
{ 0x10DE1140,0x144DC0D5,"Samsung GeForce GT 630M" },
{ 0x10DE1140,0x17AA500D,"Lenovo GeForce GT 620M" },
{ 0x10DE1140,0x1B0A20DD,"Pegatron GeForce GT 620M" },
{ 0x10DE1140,0x1B0A20FD,"Pegatron GeForce GT 620M" },
{ 0x10DE1180,0x00001255,"Afox GTX 680" },
{ 0x10DE1180,0x104383F0,"Asus GTX680-2GD5" },
{ 0x10DE1180,0x104383F6,"Asus GTX 680 Direct CU II" },
{ 0x10DE1180,0x104383F7,"Asus GTX 680 Direct CU II" },
{ 0x10DE1180,0x1458353C,"GV-N680OC-2GD WindForce GTX 680 OC" },
{ 0x10DE1180,0x14622820,"MSi N680GTX TwinFrozer" },
{ 0x10DE1180,0x14622830,"MSi GTX 680 Lightning" },
{ 0x10DE1180,0x14622831,"MSi GTX 680 Lightning LN2" },
{ 0x10DE1180,0x15691180,"Palit GTX 680 JetStream" },
{ 0x10DE1180,0x15691181,"Palit GTX 680 JetStream" },
{ 0x10DE1180,0x15691189,"Palit GTX 680 JetStream" },
{ 0x10DE1180,0x38422682,"EVGA GTX 680 SC" },
{ 0x10DE1180,0x38422683,"EVGA GTX 680 SC" },
{ 0x10DE1189,0x10438405,"Asus GTX 670 Direct CU II TOP" },
{ 0x10DE1189,0x15691189,"Palit GTX 670 JetStream" },
{ 0x10DE1189,0x19DA1255,"Zotac GTX 670 AMP! Edition" },
{ 0x10DE11A1,0x15587102,"Clevo N13E-GR" },
{ 0x10DE11C0,0x10DE0995,"Inno3D GeForce GTX660" },
{ 0x10DE11C6,0x1043842A,"GTX650TI-1GD5" },
// 1200 - 12FF
{ 0x10DE1247,0x10432119,"Asus GeForce GT 670M" },
{ 0x10DE1247,0x10432120,"Asus GeForce GT 670M" },
{ 0x10DE1247,0x1043212A,"Asus GeForce GT 635M" },
{ 0x10DE1247,0x1043212B,"Asus GeForce GT 635M" },
{ 0x10DE1247,0x1043212C,"Asus GeForce GT 635M" },
{ 0x10DE1247,0x152D0930,"Quanta GeForce GT 635M" },
{ 0x10DE1248,0x152D0930,"Quanta GeForce GT 635M" },
{ 0x10DE124D,0x146210CC,"MSi GeForce GT 635M" },
};
static int patch_nvidia_rom(uint8_t *rom)
{
if (!rom || (rom[0] != 0x55 && rom[1] != 0xaa)) {
static char *get_nvidia_model(uint32_t device_id, uint32_t subsys_id)
{
int i;
//int i, j;
int i;
//static char name_model[128];
// First check in the plist, (for e.g this can override any hardcoded devices)
cardList_t * nvcard = FindCardWithIds(device_id, subsys_id);
}
}
for (i = 1; i < (sizeof(nvidia_cards) / sizeof(nvidia_cards[0])); i++) // size of nvidia_cards array for-loop
// Then check the exceptions table
if (subsys_id)
{
if ((nvidia_cards[i].device == device_id) && (nvidia_cards[i].subdev == subsys_id))
{
return nvidia_cards[i].name_model;
break;
}
else if ((nvidia_cards[i].device == device_id) && (nvidia_cards[i].subdev == 0x00000000))
{
return nvidia_cards[i].name_model;
break;
}
for (i = 0; i < (sizeof(nvidia_card_exceptions) / sizeof(nvidia_card_exceptions[0])); i++)
{
if ((nvidia_card_exceptions[i].device == device_id) &&
(nvidia_card_exceptions[i].subdev == subsys_id))
{
return nvidia_card_exceptions[i].name;
}
}
}
return nvidia_cards[0].name_model;
// At last try the generic names
for (i = 1; i < (sizeof(nvidia_card_generic) / sizeof(nvidia_card_generic[0])); i++)
{
if (nvidia_card_generic[i].device == device_id)
{
/*if (subsys_id)
{
for (j = 0; j < (sizeof(nvidia_card_vendors) / sizeof(nvidia_card_vendors[0])); j++)
{
if (nvidia_card_vendors[j].device == (subsys_id & 0xffff0000))
{
sprintf(name_model, "%s %s",
nvidia_card_vendors[j].name, nvidia_card_generic[i].name);
name_model[sizeof(name_model) - 1] = '\0';
return name_model;
}
}
} */
return nvidia_card_generic[i].name;
}
}
return nvidia_card_generic[0].name;
}
static uint32_t load_nvidia_bios_file(const char *filename, uint8_t *buf, int bufsize)
static uint32_t load_nvidia_bios_file(const char *filename, uint8_t **buf)
{
int fd;
int size;
}
size = file_size(fd);
if (size > bufsize)
{
printf("Filesize of %s is bigger than expected! Truncating to 0x%x Bytes!\n",
filename, bufsize);
size = bufsize;
}
size = read(fd, (char *)buf, size);
if(size)
{
*buf = malloc(size);
size = read(fd, (char *)buf, size);
}
close(fd);
return size > 0 ? size : 0;
case 0x0647: // 9600M GT 0647
vram_size = 512*1024*1024; // 512 MB
break;
case 0x0649:// 9600M GT 0649
// 10DE06491043202D 1GB VRAM
if (((nvda_dev->subsys_id.subsys.vendor_id << 16) | nvda_dev->subsys_id.subsys.device_id) == 0x1043202D )
{
vram_size = 1024*1024*1024; // 1 GB
}
break;
case 0x0A65: // GT 210
case 0x0DE0: // GT 440
case 0x0DE1: // GT 430
case 0x0DE2: // GT 420
case 0x0DEC: // GT 525M
case 0x0DEC: // GT 525M 0DEC
vram_size = 1024*1024*1024; // 1 GB
break;
case 0x0DE9: // GT 630M
// 10DE0DE9103C181D 1GB VRAM
if (((nvda_dev->subsys_id.subsys.vendor_id << 16) | nvda_dev->subsys_id.subsys.device_id) == 0x103C181D )
{
vram_size = 1024*1024*1024; // 1 GB
}
break;
case 0x0DF4: // GT 540M
case 0x0DF5: // GT 525M
case 0x0DF5: // GT 525M 0DF5
vram_size = 1024*1024*1024; // 1 GB
break;
case 0x11C6:// GTX650TI 11C6
// 10DE11C61043842A 1GB VRAM
if (((nvda_dev->subsys_id.subsys.vendor_id << 16) | nvda_dev->subsys_id.subsys.device_id) == 0x1043842A )
{
vram_size = 1024*1024*1024; // 1 GB
}
break;
case 0x1251: // GTX 560M
vram_size = 1536*1024*1024; // 1.5 GB
break;
break;
}
if (!vram_size)
if (!vram_size)
{ // Finally, if vram_size still not set do the calculation with our own method
if (nvCardType < NV_ARCH_50)
{
// Amount of VRAM in kilobytes
videoRam = mem_detect(regs, nvCardType, nvda_dev,((nvda_dev->vendor_id << 16) | nvda_dev->device_id),((nvda_dev->subsys_id.subsys.vendor_id << 16) | nvda_dev->subsys_id.subsys.device_id) );
rom = malloc(NVIDIA_ROM_SIZE);
sprintf(nvFilename, "/Extra/%04x_%04x.rom", (uint16_t)nvda_dev->vendor_id,
(uint16_t)nvda_dev->device_id);
if (getBoolForKey(kUseNvidiaROM, &doit, &bootInfo->chameleonConfig) && doit)
{
verbose("Looking for nvidia video bios file %s\n", nvFilename);
nvBiosOveride = load_nvidia_bios_file(nvFilename, rom, NVIDIA_ROM_SIZE);
nvBiosOveride = load_nvidia_bios_file(nvFilename, &rom);
if (nvBiosOveride > 0)
{
else
{
printf("ERROR: unable to open nVidia Video BIOS File %s\n", nvFilename);
free(rom);
return false;
}
}
else
{
rom = malloc(NVIDIA_ROM_SIZE);
// Otherwise read bios from card
nvBiosOveride = 0;
printf("ERROR: Unable to locate nVidia Video BIOS\n");
return false;
}
else
{
DBG("ROM Address 0x%x Signature 0x%02x%02x\n", nvRom, rom[0], rom[1]);
}
}//end PRAM check
else
{
DBG("ROM Address 0x%x Signature 0x%02x%02x\n", nvRom, rom[0], rom[1]);
}
}//end PRAM check
}//end PROM check
}//end load rom from bios
if (rom_pci_header->device_id != nvda_dev->device_id)
{
// Get Model from the OpROM
model = get_nvidia_model(((rom_pci_header->vendor_id << 16) | rom_pci_header->device_id), NV_SUB_IDS);
model = get_nvidia_model(((rom_pci_header->vendor_id << 16) | rom_pci_header->device_id), 0);
// Get VRAM again
videoRam = mem_detect(regs, nvCardType, nvda_dev,((rom_pci_header->vendor_id << 16) | rom_pci_header->device_id), NV_SUB_IDS );
videoRam = mem_detect(regs, nvCardType, nvda_dev, ((rom_pci_header->vendor_id << 16) | rom_pci_header->device_id), 0);
}
else
}
}
}
sprintf(biosVersion, "%s", (nvBiosOveride > 0) ? nvFilename : version_str);
sprintf(kNVCAP, "NVCAP_%04x", nvda_dev->device_id);
branches/Chimera/i386/libsaio/ati.c
55
66
77
8
9
10
11
12
13
8
149
15
1610
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
6311
6412
13
14
15
16
17
18
19
20
6521
6622
6723
......
7935
8036
8137
38
8239
83
40
8441
8542
8643
8744
8845
8946
47
48
49
9050
51
9152
9253
9354
9455
56
57
58
59
60
61
62
9563
9664
9765
98
99
100
101
102
10366
104
105
106
107
108
109
110
111
112
113
114
115
116
67
68
69
70
71
72
73
74
75
76
77
78
79
11780
118
119
120
121
122
81
82
12383
124
125
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
126107
127
128
129
130
131
132
133
134
135
108
136109
137110
138
111
139112
140113
141
142
143
144
145
146
147
114
115
116
117
118
119
148120
149
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
150138
151139
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210140
211141
212142
213143
214144
215145
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
466416
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
605715
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
7521346
753
754
755
756
757
758
759
1347
1348
1349
1350
1351
1352
1353
1354
7601355
761
762
763
764
1356
1357
1358
1359
1360
1361
1362
7651363
7661364
767
1365
1366
7681367
769
770
1368
1369
1370
7711371
1372
7721373
7731374
774
1375
1376
1377
1378
1379
1380
1381
1382
1383
7751384
7761385
777
1386
7781387
7791388
1389
1390
7801391
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
7971418
7981419
799
800
801
802
803
804
805
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
8061440
807
1441
8081442
809
810
811
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
8121453
8131454
814
815
816
817
818
819
820
821
822
823
824
825
826
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
8271481
8281482
1483
1484
8291485
8301486
831
832
1487
8331488
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
1489
8501490
851
852
853
854
1491
8551492
856
1493
8571494
858
859
860
861
862
1495
1496
1497
8631498
864
865
866
1499
1500
1501
1502
8671503
868
869
870
871
872
873
874
1504
1505
8751506
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
1507
1508
1509
8921510
893
894
895
896
897
898
899
1511
9001512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
9011564
9021565
9031566
904
1567
9051568
9061569
9071570
......
9101573
9111574
9121575
913
914
1576
1577
9151578
9161579
9171580
9181581
9191582
9201583
921
922
923
1584
1585
1586
9241587
9251588
9261589
927
928
1590
1591
9291592
930
1593
9311594
932
933
934
1595
1596
1597
9351598
9361599
9371600
......
9411604
9421605
9431606
944
1607
9451608
946
947
948
9491609
9501610
9511611
......
9551615
9561616
9571617
1618
9581619
959
1620
9601621
1622
9611623
962
1624
9631625
9641626
9651627
......
10061668
10071669
10081670
1009
1010
1011
1671
1672
1673
1674
1675
1676
1677
10121678
10131679
10141680
......
10211687
10221688
10231689
1690
10241691
1025
1692
10261693
10271694
10281695
......
10331700
10341701
10351702
1703
10361704
1037
1705
10381706
10391707
10401708
......
10461714
10471715
10481716
1717
10491718
1050
1719
1720
10511721
10521722
10531723
......
10551725
10561726
10571727
1728
10581729
1059
1730
1731
10601732
10611733
10621734
......
10901762
10911763
10921764
1765
10931766
1094
1767
10951768
10961769
10971770
......
11031776
11041777
11051778
1779
11061780
11071781
11081782
......
11131787
11141788
11151789
1790
11161791
1792
11171793
11181794
11191795
11201796
11211797
11221798
1799
11231800
1124
11251801
11261802
11271803
......
11831859
11841860
11851861
1862
11861863
1187
1864
1865
11881866
11891867
11901868
1869
11911870
1871
11921872
11931873
1874
11941875
1876
11951877
11961878
11971879
......
12011883
12021884
12031885
1204
1886
12051887
12061888
1889
12071890
1208
1891
1892
12091893
12101894
1895
12111896
1212
1897
1898
12131899
12141900
12151901
1902
12161903
1217
1904
1905
12181906
1219
1907
12201908
12211909
12221910
......
12251913
12261914
12271915
1228
1916
12291917
1230
1918
12311919
12321920
12331921
12341922
12351923
1236
1924
12371925
12381926
1239
1927
12401928
1929
12411930
12421931
12431932
1933
12441934
1935
12451936
1937
12461938
1939
1940
12471941
12481942
12491943
......
12531947
12541948
12551949
1256
1950
12571951
12581952
1953
12591954
1955
12601956
12611957
1958
12621959
1263
1960
12641961
12651962
1963
12661964
1965
12671966
12681967
12691968
1969
12701970
1971
12711972
12721973
12731974
......
12771978
12781979
12791980
1280
1981
12811982
12821983
12831984
12841985
1285
1986
12861987
12871988
1288
1289
1989
1990
12901991
12911992
12921993
......
13112012
13122013
13132014
2015
13142016
2017
13152018
13162019
13172020
13182021
2022
13192023
1320
2024
2025
13212026
13222027
13232028
......
13412046
13422047
13432048
1344
2049
13452050
13462051
13472052
1348
2053
13492054
1350
1351
1352
1353
2055
2056
2057
2058
13542059
13552060
13562061
......
13982103
13992104
14002105
2106
14012107
2108
14022109
14032110
14042111
14052112
2113
14062114
2115
14072116
14082117
14092118
......
14152124
14162125
14172126
2127
14182128
2129
14192130
14202131
2132
14212133
2134
14222135
14232136
14242137
......
14342147
14352148
14362149
1437
2150
14382151
14392152
2153
14402154
2155
14412156
1442
2157
14432158
14442159
14452160
14462161
14472162
14482163
1449
1450
1451
2164
2165
2166
14522167
2168
14532169
14542170
1455
1456
1457
1458
1459
1460
1461
2171
2172
14622173
1463
1464
2174
2175
14652176
14662177
14672178
14682179
14692180
14702181
1471
2182
14722183
14732184
14742185
......
14852196
14862197
14872198
2199
14882200
2201
14892202
2203
14902204
2205
14912206
14922207
14932208
1494
1495
1496
2209
2210
14972211
14982212
14992213
1500
15012214
1502
1503
1504
2215
2216
15052217
15062218
2219
15072220
15082221
15092222
1510
2223
15112224
1512
1513
1514
1515
15162225
15172226
15182227
......
15222231
15232232
15242233
1525
2234
15262235
15272236
15282237
......
15302239
15312240
15322241
1533
1534
2242
2243
15352244
15362245
15372246
15382247
2248
15392249
1540
2250
2251
15412252
15422253
1543
1544
1545
1546
2254
2255
15472256
15482257
15492258
......
15602269
15612270
15622271
1563
2272
15642273
2274
15652275
1566
2276
2277
15672278
15682279
15692280
2281
15702282
1571
2283
15722284
15732285
15742286
2287
15752288
2289
15762290
15772291
15782292
1579
2293
15802294
1581
2295
15822296
15832297
15842298
15852299
15862300
15872301
1588
2302
15892303
15902304
15912305
......
15952309
15962310
15972311
1598
2312
2313
15992314
16002315
1601
2316
16022317
1603
1604
1605
2318
2319
2320
16062321
16072322
*
*/
#include "boot.h"
#include "bootstruct.h"
#include "pci.h"
#include "platform.h"
#include "device_inject.h"
#include "ati_reg.h"
#include "ati.h"
#define OFFSET_TO_GET_ATOMBIOS_STRINGS_START 0x6e
#define Reg32(reg)(*(volatile uint32_t *)(card->mmio + reg))
#define RegRead32(reg)(Reg32(reg))
#define RegWrite32(reg, value)(Reg32(reg) = value)
typedef enum {
kNul,
kStr,
kPtr,
kCst
} type_t;
typedef enum {
CHIP_FAMILY_UNKNOW,
/* IGP */
CHIP_FAMILY_RS600,
CHIP_FAMILY_RS690,
CHIP_FAMILY_RS740,
CHIP_FAMILY_RS780,
CHIP_FAMILY_RS880,
/* R600 */
CHIP_FAMILY_R600,
CHIP_FAMILY_RV610,
CHIP_FAMILY_RV620,
CHIP_FAMILY_RV630,
CHIP_FAMILY_RV635,
CHIP_FAMILY_RV670,
/* R700 */
CHIP_FAMILY_RV710,
CHIP_FAMILY_RV730,
CHIP_FAMILY_RV740,
CHIP_FAMILY_RV770,
CHIP_FAMILY_RV790,
/* Evergreen */
CHIP_FAMILY_CEDAR,
CHIP_FAMILY_CYPRESS,
CHIP_FAMILY_HEMLOCK,
CHIP_FAMILY_JUNIPER,
CHIP_FAMILY_REDWOOD,
/* Northern Islands */
CHIP_FAMILY_BARTS,
CHIP_FAMILY_CAICOS,
CHIP_FAMILY_CAYMAN,
CHIP_FAMILY_TURKS,
CHIP_FAMILY_LAST
} chip_family_t;
static const char *chip_family_name[] = {
"UNKNOW",
"R420",
"RV410",
"RV515",
"R520",
"RV530",
"RV560",
"RV570",
"R580",
/* IGP */
"RS600",
"RS690",
"RV710",
"RV730",
"RV740",
"RV772",
"RV770",
"RV790",
"RV790",
/* Evergreen */
"Cedar",
"Cypress",
"Hemlock",
"Juniper",
"Redwood",
"Broadway",
//"Madison",
//"Park",
/* Northern Islands */
//"Antilles",
"Barts",
"Caicos",
"Cayman",
"Turks",
/* Southern Islands */
"Tahiti",
"Pitcairn",
//"CapeVerde",
//"Thames",
//"Lombok",
//"NewZealand",
""
};
typedef struct {
const char*name;
uint8_tports;
} card_config_t;
static card_config_t card_configs[] = {
{NULL,0},
{"Alopias",2},
{"Alouatta",4},
{"Baboon",3},
{"Cardinal",2},
{"Caretta",1},
{"Colobus",2},
{"Douc",2},
{"Eulemur",3},
{"Flicker",3},
{"Galago",2},
{"Gliff",3},
{"Hoolock",3},
{NULL,0},
/* OLDController */
{"Wormy",2},
{"Alopias",2},
{"Caretta",1},
{"Kakapo",3},
{"Kipunji",4},
{"Peregrine",2},
{"Raven",3},
{"Sphyrna",1},
/* AMD2400Controller */
{"Iago",2},
/* AMD2600Controller */
{"Hypoprion",2},
{"Iago",2},
{"Kakapo",3},
{"Kipunji",4},
{"Lamna",2},
{"Langur",3},
{"Lamna",2},
/* AMD3800Controller */
{"Megalodon",3},
{"Motmot",2},
{"Nomascus",5},
{"Triakis",2},
/* AMD4600Controller */
{"Flicker",3},
{"Gliff",3},
{"Shrike",3},
/* AMD4800Controller */
{"Cardinal",2},
{"Motmot",2},
{"Quail",3},
/* AMD5000Controller */
{"Douc",2},
{"Langur",3},
{"Uakari",4},
{"Zonalis",6},
{"Alouatta",4},
{"Hoolock",3},
{"Vervet",4},
{"Baboon",3},
{"Eulemur",3},
{"Galago",2},
{"Colobus",2},
{"Mangabey",2},
{"Nomascus",4},
{"Orangutan",2},
{"Peregrine",2},
{"Quail",3},
{"Raven",3},
{"Shrike",3},
{"Sphyrna",1},
{"Triakis",2},
{"Uakari",4},
{"Vervet",4},
{"Zonalis",6},
/* AMD6000Controller */
{"Pithecia",3},
{"Bulrushes",6},
{"Cattail",4},
{"Cattail",4},
{"Hydrilla",5},
{"Duckweed",4},
{"Fanwort",4},
{"Elodea",5},
{"Kudzu",2},
{"Gibba",5},
{"Lotus",3},
{"Ipomoea",3},
{"Mangabey",2},
{"Fanwort",4},
{"Elodea",5},
{"Kudzu",2},
{"Gibba",5},
{"Lotus",3},
{"Ipomoea",3},
{"Muskgrass",4},
{"Juncus",4}
{"Juncus",4},
{"Osmunda", 4},
{"Pondweed", 3},
{"Spikerush", 4},
{"Typha", 5},
/* AMD7000Controller */
{"Aji", 4},
{"Buri", 4},
{"Chutoro", 5},
{"Dashimaki", 4},
{"Ebi", 5},
{"Gari", 5},
{"Futomaki", 4},
{"Hamachi", 4},
{"OPM", 6},
{"Ikura", 6},
{"IkuraS", 1}
};
typedef enum {
kNull,
kAlopias,
kAlouatta,
kBaboon,
kCardinal,
kCaretta,
kColobus,
kDouc,
kEulemur,
kFlicker,
kGalago,
kGliff,
kHoolock,
kHypoprion,
kIago,
kKakapo,
kKipunji,
kLamna,
kLangur,
kMegalodon,
kMotmot,
kNomascus,
kOrangutan,
kPeregrine,
kQuail,
kRaven,
kShrike,
kSphyrna,
kTriakis,
kUakari,
kVervet,
kZonalis,
kPithecia,
kBulrushes,
kCattail,
kHydrilla,
kDuckweed,
kFanwort,
kElodea,
kKudzu,
kGibba,
kLotus,
kIpomoea,
kMangabey,
kMuskgrass,
kJuncus,
kCfgEnd
} config_name_t;
typedef struct {
uint16_tdevice_id;
uint32_tsubsys_id;
chip_family_tchip_family;
const char*model_name;
config_name_tcfg_name;
} radeon_card_info_t;
static radeon_card_info_t radeon_cards[] = {
// Earlier cards are not supported
//
// Layout is device_id, subsys_id (subsystem id plus vendor id), chip_family_name, display name, frame buffer
// Cards are grouped by device id and vendor id then sorted by subsystem id to make it easier to add new cards
//
{ 0x9400,0x25521002, CHIP_FAMILY_R600,"ATI Radeon HD 2900 XT",kNull},
{ 0x9400,0x30001002, CHIP_FAMILY_R600,"ATI Radeon HD 2900 PRO",kNull},
{ 0x9440,0x24401682, CHIP_FAMILY_RV770,"ATI Radeon HD 4870",kMotmot},
{ 0x9440,0x24411682, CHIP_FAMILY_RV770,"ATI Radeon HD 4870",kMotmot},
{ 0x9440,0x24441682, CHIP_FAMILY_RV770,"ATI Radeon HD 4870",kMotmot},
{ 0x9440,0x24451682, CHIP_FAMILY_RV770,"ATI Radeon HD 4870",kMotmot},
{ 0x9440,0x0851174B, CHIP_FAMILY_RV770,"ATI Radeon HD 4870",kMotmot},
{ 0x9440,0x114A174B, CHIP_FAMILY_RV770,"ATI Radeon HD 4870",kCardinal},
{ 0x9441,0x24401682, CHIP_FAMILY_RV770,"ATI Radeon HD 4870 X2",kMotmot},
{ 0x9442,0x080110B0, CHIP_FAMILY_RV770,"ATI Radeon HD 4850",kMotmot},
{ 0x9442,0x24701682, CHIP_FAMILY_RV770,"ATI Radeon HD 4850",kMotmot},
{ 0x9442,0x24711682, CHIP_FAMILY_RV770,"ATI Radeon HD 4850",kMotmot},
{ 0x9442,0xE104174B, CHIP_FAMILY_RV770,"ATI Radeon HD 4850",kMotmot},
{ 0x944A,0x30001043, CHIP_FAMILY_RV770,"ATI Radeon HD 4850",kMotmot},
{ 0x944A,0x30001458, CHIP_FAMILY_RV770,"ATI Radeon HD 4850",kMotmot},
{ 0x944A,0x30001462, CHIP_FAMILY_RV770,"ATI Radeon HD 4850",kMotmot},
{ 0x944A,0x30001545, CHIP_FAMILY_RV770,"ATI Radeon HD 4850",kMotmot},
{ 0x944A,0x30001682, CHIP_FAMILY_RV770,"ATI Radeon HD 4850",kMotmot},
{ 0x944A,0x3000174B, CHIP_FAMILY_RV770,"ATI Radeon HD 4850",kMotmot},
{ 0x944A,0x30001787, CHIP_FAMILY_RV770,"ATI Radeon HD 4850",kMotmot},
{ 0x944A,0x300017AF, CHIP_FAMILY_RV770,"ATI Radeon HD 4850",kMotmot},
{ 0x944C,0x24801682, CHIP_FAMILY_RV770,"ATI Radeon HD 4830",kMotmot},
{ 0x944C,0x24811682, CHIP_FAMILY_RV770,"ATI Radeon HD 4830",kMotmot},
{ 0x944E,0x3260174B, CHIP_FAMILY_RV770,"ATI Radeon HD 4810",kMotmot},
{ 0x944E,0x3261174B, CHIP_FAMILY_RV770,"ATI Radeon HD 4810",kMotmot},
{ 0x944E,0x30001787, CHIP_FAMILY_RV770,"ATI Radeon HD 4730",kMotmot},
{ 0x944E,0x30101787, CHIP_FAMILY_RV770,"ATI Radeon HD 4810",kMotmot},
{ 0x944E,0x31001787, CHIP_FAMILY_RV770,"ATI Radeon HD 4820",kMotmot},
{ 0x9480,0x3628103C, CHIP_FAMILY_RV730,"ATI Mobility Radeon HD 4650",kGliff},
{ 0x9480,0x9035104D, CHIP_FAMILY_RV730,"ATI Mobility Radeon HD 4650",kGliff},
{ 0x9490,0x4710174B, CHIP_FAMILY_RV730,"ATI Radeon HD 4710",kNull},
{ 0x9490,0x20031787, CHIP_FAMILY_RV730,"ATI Radeon HD 4670",kFlicker},
{ 0x9490,0x30501787, CHIP_FAMILY_RV730,"ATI Radeon HD 4710",kNull},
{ 0x9490,0x300017AF, CHIP_FAMILY_RV730,"ATI Radeon HD 4710",kNull},
{ 0x9498,0x21CF1458, CHIP_FAMILY_RV730,"ATI Radeon HD 4600",kNull},
{ 0x9498,0x24511682, CHIP_FAMILY_RV730,"ATI Radeon HD 4650",kNull},
{ 0x9498,0x24521682, CHIP_FAMILY_RV730,"ATI Radeon HD 4650",kNull},
{ 0x9498,0x24541682, CHIP_FAMILY_RV730,"ATI Radeon HD 4650",kNull},
{ 0x9498,0x29331682, CHIP_FAMILY_RV730,"ATI Radeon HD 4670",kNull},
{ 0x9498,0x29341682, CHIP_FAMILY_RV730,"ATI Radeon HD 4670",kNull},
{ 0x9498,0x30501787, CHIP_FAMILY_RV730,"ATI Radeon HD 4700",kNull},
{ 0x9498,0x31001787, CHIP_FAMILY_RV730,"ATI Radeon HD 4720",kNull},
{ 0x94B3,0x0D001002, CHIP_FAMILY_RV740,"ATI Radeon HD 4770",kFlicker},
{ 0x94B3,0x29001682, CHIP_FAMILY_RV740,"ATI Radeon HD 4770",kFlicker},
{ 0x94B3,0x1170174B, CHIP_FAMILY_RV740,"ATI Radeon HD 4770",kFlicker},
{ 0x94C1,0x0D021002, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 XT",kNull},
{ 0x94C1,0x10021002, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 Pro",kNull},
{ 0x94C1,0x0D021028, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 XT",kNull},
{ 0x94C1,0x21741458, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 XT",kNull},
{ 0x94C1,0x10331462, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 XT",kNull},
{ 0x94C1,0x10401462, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 XT",kNull},
{ 0x94C1,0x11101462, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 XT",kNull},
{ 0x94C3,0x03421002, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO",kNull},
{ 0x94C3,0x30001025, CHIP_FAMILY_RV610,"ATI Radeon HD 2350",kNull},
{ 0x94C3,0x03021028, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO",kNull},
{ 0x94C3,0x04021028, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO",kNull},
{ 0x94C3,0x216A1458, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO",kNull},
{ 0x94C3,0x21721458, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO",kNull},
{ 0x94C3,0x30001458, CHIP_FAMILY_RV610,"ATI Radeon HD 3410",kNull},
{ 0x94C3,0x10321462, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO",kNull},
{ 0x94C3,0x10411462, CHIP_FAMILY_RV610,"ATI Radeon HD 2400",kNull},
{ 0x94C3,0x11041462, CHIP_FAMILY_RV610,"ATI Radeon HD 2400",kNull},
{ 0x94C3,0x11051462, CHIP_FAMILY_RV610,"ATI Radeon HD 2400",kNull},
{ 0x94C3,0x30001462, CHIP_FAMILY_RV610,"ATI Radeon HD 3410",kNull},
{ 0x94C3,0x2247148C, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 LE",kNull},
{ 0x94C3,0x3000148C, CHIP_FAMILY_RV610,"ATI Radeon HD 2350",kNull},
{ 0x94C3,0x30001642, CHIP_FAMILY_RV610,"ATI Radeon HD 3410",kNull},
{ 0x94C3,0x37161642, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO",kNull},
{ 0x94C3,0x3000174B, CHIP_FAMILY_RV610,"ATI Radeon HD 2350",kNull},
{ 0x94C3,0xE370174B, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO",kNull},
{ 0x94C3,0xE400174B, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO",kNull},
{ 0x94C3,0x203817AF, CHIP_FAMILY_RV610,"ATI Radeon HD 2400",kNull},
{ 0x94C3,0x22471787, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 LE",kNull},
{ 0x94C3,0x30001787, CHIP_FAMILY_RV610,"ATI Radeon HD 2350",kNull},
{ 0x94C3,0x01011A93, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO",kNull},
{ 0x9501,0x25421002, CHIP_FAMILY_RV670,"ATI Radeon HD 3870",kNull},
{ 0x9501,0x30001002, CHIP_FAMILY_RV670,"ATI Radeon HD 3690",kNull},
{ 0x9501,0x3000174B, CHIP_FAMILY_RV670,"ATI Radeon HD 3690",kNull},
{ 0x9501,0x4750174B, CHIP_FAMILY_RV670,"ATI Radeon HD 4750",kNull},
{ 0x9501,0x30001787, CHIP_FAMILY_RV670,"ATI Radeon HD 3690",kNull},
{ 0x9505,0x25421002, CHIP_FAMILY_RV670,"ATI Radeon HD 3850",kNull},
{ 0x9505,0x30001002, CHIP_FAMILY_RV670,"ATI Radeon HD 3690",kNull},
{ 0x9505,0x30011043, CHIP_FAMILY_RV670,"ATI Radeon HD 4730",kNull},
{ 0x9505,0x3000148C, CHIP_FAMILY_RV670,"ATI Radeon HD 3850",kNull},
{ 0x9505,0x3001148C, CHIP_FAMILY_RV670,"ATI Radeon HD 4730",kNull},
{ 0x9505,0x3002148C, CHIP_FAMILY_RV670,"ATI Radeon HD 4730",kNull},
{ 0x9505,0x3003148C, CHIP_FAMILY_RV670,"ATI Radeon HD 4750",kNull},
{ 0x9505,0x3004148C, CHIP_FAMILY_RV670,"ATI Radeon HD 4750",kNull},
{ 0x9505,0x3000174B, CHIP_FAMILY_RV670,"ATI Radeon HD 3690",kNull},
{ 0x9505,0x3001174B, CHIP_FAMILY_RV670,"ATI Radeon HD 4750",kNull},
{ 0x9505,0x3010174B, CHIP_FAMILY_RV670,"ATI Radeon HD 4750",kNull},
{ 0x9505,0x4730174B, CHIP_FAMILY_RV670,"ATI Radeon HD 4730",kNull},
{ 0x9505,0x30001787, CHIP_FAMILY_RV670,"ATI Radeon HD 3690",kNull},
{ 0x9505,0x301017AF, CHIP_FAMILY_RV670,"ATI Radeon HD 4750",kNull},
{ 0x9540,0x4590174B, CHIP_FAMILY_RV710,"ATI Radeon HD 4590",kNull},
{ 0x9540,0x30501787, CHIP_FAMILY_RV710,"ATI Radeon HD 4590",kNull},
{ 0x954F,0x16131462, CHIP_FAMILY_RV710,"ATI Radeon HD 4550",kNull},
{ 0x954F,0x29201682, CHIP_FAMILY_RV710,"ATI Radeon HD 4550",kNull},
{ 0x954F,0x29211682, CHIP_FAMILY_RV710,"ATI Radeon HD 4550",kNull},
{ 0x954F,0x30901682, CHIP_FAMILY_RV710,"ATI Radeon HD 4570",kNull},
{ 0x954F,0x3000174B, CHIP_FAMILY_RV710,"ATI Radeon HD 4520",kNull},
{ 0x954F,0x4450174B, CHIP_FAMILY_RV710,"ATI Radeon HD 4450",kNull},
{ 0x954F,0x4570174B, CHIP_FAMILY_RV710,"ATI Radeon HD 4570",kNull},
{ 0x954F,0xE990174B, CHIP_FAMILY_RV710,"ATI Radeon HD 4350",kNull},
{ 0x954F,0x20081787, CHIP_FAMILY_RV710,"ATI Radeon HD 4350",kNull},
{ 0x954F,0x30501787, CHIP_FAMILY_RV710,"ATI Radeon HD 4450",kNull},
{ 0x954F,0x31001787, CHIP_FAMILY_RV710,"ATI Radeon HD 4520",kNull},
{ 0x954F,0x301017AF, CHIP_FAMILY_RV710,"ATI Radeon HD 4450",kNull},
{ 0x9552,0x04341028, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4330",kShrike},
{ 0x9552,0x308B103C, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4330",kShrike},
{ 0x9552,0x3000148C, CHIP_FAMILY_RV710,"ATI Radeon HD 4300/4500",kNull},
{ 0x9552,0x3000174B, CHIP_FAMILY_RV710,"ATI Radeon HD 4300/4500",kNull},
{ 0x9552,0x30001787, CHIP_FAMILY_RV710,"ATI Radeon HD 4300/4500",kNull},
{ 0x9552,0x300017AF, CHIP_FAMILY_RV710,"ATI Radeon HD 4300/4500",kNull},
{ 0x9553,0x18751043, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4570",kShrike},
{ 0x9553,0x1B321043, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4570",kShrike},
{ 0x9581,0x95811002, CHIP_FAMILY_RV630,"ATI Radeon HD 3600",kNull},
{ 0x9581,0x3000148C, CHIP_FAMILY_RV630,"ATI Radeon HD 3600",kNull},
{ 0x9583,0x3000148C, CHIP_FAMILY_RV630,"ATI Radeon HD 3600",kNull},
{ 0x9588,0x01021A93, CHIP_FAMILY_RV630,"ATI Radeon HD 2600 XT",kNull},
{ 0x9589,0x30001462, CHIP_FAMILY_RV630,"ATI Radeon HD 3610",kNull},
{ 0x9589,0x0E41174B, CHIP_FAMILY_RV630,"ATI Radeon HD 3610",kNull},
{ 0x9589,0x30001787, CHIP_FAMILY_RV630,"ATI Radeon HD 3610",kNull},
{ 0x9589,0x01001A93, CHIP_FAMILY_RV630,"ATI Radeon HD 2600 PRO",kNull},
{ 0x9591,0x2303148C, CHIP_FAMILY_RV635,"ATI Radeon HD 3600",kNull},
{ 0x9598,0xB3831002, CHIP_FAMILY_RV635,"ATI All-in-Wonder HD",kNull},
{ 0x9598,0x30001043, CHIP_FAMILY_RV635,"ATI Radeon HD 3730",kNull},
{ 0x9598,0x30011043, CHIP_FAMILY_RV635,"ATI Radeon HD 4570",kNull},
{ 0x9598,0x3000148C, CHIP_FAMILY_RV635,"ATI Radeon HD 3730",kNull},
{ 0x9598,0x3001148C, CHIP_FAMILY_RV635,"ATI Radeon HD 4580",kNull},
{ 0x9598,0x3031148C, CHIP_FAMILY_RV635,"ATI Radeon HD 4570",kNull},
{ 0x9598,0x30001545, CHIP_FAMILY_RV635,"ATI Radeon HD 2600 XT",kNull},
{ 0x9598,0x30011545, CHIP_FAMILY_RV635,"ATI Radeon HD 2600 Pro",kNull},
{ 0x9598,0x3000174B, CHIP_FAMILY_RV635,"ATI Radeon HD 3730",kNull},
{ 0x9598,0x3001174B, CHIP_FAMILY_RV635,"ATI Radeon HD 3750",kNull},
{ 0x9598,0x4570174B, CHIP_FAMILY_RV635,"ATI Radeon HD 4570",kNull},
{ 0x9598,0x4580174B, CHIP_FAMILY_RV635,"ATI Radeon HD 4580",kNull},
{ 0x9598,0x4610174B, CHIP_FAMILY_RV635,"ATI Radeon HD 4610",kNull},
{ 0x9598,0x300117AF, CHIP_FAMILY_RV635,"ATI Radeon HD 3750",kNull},
{ 0x9598,0x301017AF, CHIP_FAMILY_RV635,"ATI Radeon HD 4570",kNull},
{ 0x9598,0x301117AF, CHIP_FAMILY_RV635,"ATI Radeon HD 4580",kNull},
{ 0x9598,0x30501787, CHIP_FAMILY_RV635,"ATI Radeon HD 4610",kNull},
{ 0x95C0,0x3000148C, CHIP_FAMILY_RV620,"ATI Radeon HD 3550",kNull},
{ 0x95C0,0xE3901745, CHIP_FAMILY_RV620,"ATI Radeon HD 3550",kNull},
{ 0x95C0,0x3000174B, CHIP_FAMILY_RV620,"ATI Radeon HD 3550",kNull},
{ 0x95C0,0x3002174B, CHIP_FAMILY_RV620,"ATI Radeon HD 3570",kNull},
{ 0x95C0,0x3020174B, CHIP_FAMILY_RV620,"ATI Radeon HD 4250",kNull},
{ 0x95C5,0x3000148C, CHIP_FAMILY_RV620,"ATI Radeon HD 3450",kNull},
{ 0x95C5,0x3001148C, CHIP_FAMILY_RV620,"ATI Radeon HD 3550",kNull},
{ 0x95C5,0x3002148C, CHIP_FAMILY_RV620,"ATI Radeon HD 4230",kNull},
{ 0x95C5,0x3003148C, CHIP_FAMILY_RV620,"ATI Radeon HD 4250",kNull},
{ 0x95C5,0x3032148C, CHIP_FAMILY_RV620,"ATI Radeon HD 4250",kNull},
{ 0x95C5,0x3033148C, CHIP_FAMILY_RV620,"ATI Radeon HD 4230",kNull},
{ 0x95C5,0x3010174B, CHIP_FAMILY_RV620,"ATI Radeon HD 4250",kNull},
{ 0x95C5,0x4250174B, CHIP_FAMILY_RV620,"ATI Radeon HD 4250",kNull},
{ 0x95C5,0x30501787, CHIP_FAMILY_RV620,"ATI Radeon HD 4250",kNull},
{ 0x95C5,0x301017AF, CHIP_FAMILY_RV620,"ATI Radeon HD 4230",kNull},
{ 0x95C5,0x01041A93, CHIP_FAMILY_RV620,"ATI Radeon HD 3450",kNull},
{ 0x95C5,0x01051A93, CHIP_FAMILY_RV620,"ATI Radeon HD 3450",kNull},
//
{ 0x9400,0x01611043, CHIP_FAMILY_R600,"ATI Radeon HD 2900 XT", kNull},
{ 0x9400,0x021E1043, CHIP_FAMILY_R600,"ATI Radeon HD 2900 XT", kNull},
{ 0x9400,0x25521002, CHIP_FAMILY_R600,"ATI Radeon HD 2900 XT", kNull},
{ 0x9400,0x30001002, CHIP_FAMILY_R600,"ATI Radeon HD 2900 PRO", kNull},
{ 0x9400,0x31421002, CHIP_FAMILY_R600,"ATI Radeon HD 2900 XT", kNull},
{ 0x9440,0x05021002, CHIP_FAMILY_RV770,"ATI Radeon HD 4870", kMotmot},
{ 0x9440,0x0851174B, CHIP_FAMILY_RV770,"ATI Radeon HD 4870", kMotmot},
{ 0x9440,0x114A174B, CHIP_FAMILY_RV770,"ATI Radeon HD4870 Vapor-X", kCardinal},
{ 0x9440,0x24401682, CHIP_FAMILY_RV770,"ATI Radeon HD 4870", kMotmot},
{ 0x9440,0x24411682, CHIP_FAMILY_RV770,"ATI Radeon HD 4870", kMotmot},
{ 0x9440,0x24441682, CHIP_FAMILY_RV770,"ATI Radeon HD 4870", kMotmot},
{ 0x9440,0x24451682, CHIP_FAMILY_RV770,"ATI Radeon HD 4870", kMotmot},
{ 0x9441,0x02601043, CHIP_FAMILY_RV770,"ATI Radeon HD 4870 X2", kMotmot},
{ 0x9441,0x02841043, CHIP_FAMILY_RV770,"ATI Radeon HD 4870 X2", kMotmot},
{ 0x9441,0x24401682, CHIP_FAMILY_RV770,"ATI Radeon HD 4870 X2", kMotmot},
{ 0x9441,0x25421002, CHIP_FAMILY_RV770,"ATI Radeon HD 4870 X2", kMotmot},
{ 0x9442,0x05021002, CHIP_FAMILY_RV770,"ATI Radeon HD 4850", kMotmot},
{ 0x9442,0x080110B0, CHIP_FAMILY_RV770,"ATI Radeon HD 4850", kMotmot},
{ 0x9442,0x24701682, CHIP_FAMILY_RV770,"ATI Radeon HD 4850", kMotmot},
{ 0x9442,0x24711682, CHIP_FAMILY_RV770,"ATI Radeon HD 4850", kMotmot},
{ 0x9442,0xE104174B, CHIP_FAMILY_RV770,"ATI Radeon HD 4850", kMotmot},
{ 0x9442,0xE810174B, CHIP_FAMILY_RV770,"ATI Radeon HD 4850", kMotmot},
{ 0x944A,0x02A21028, CHIP_FAMILY_RV770,"ATI Radeon HD 4850", kMotmot},
{ 0x944A,0x30001043, CHIP_FAMILY_RV770,"ATI Radeon HD 4850", kMotmot},
{ 0x944A,0x30001458, CHIP_FAMILY_RV770,"ATI Radeon HD 4850", kMotmot},
{ 0x944A,0x30001462, CHIP_FAMILY_RV770,"ATI Radeon HD 4850", kMotmot},
{ 0x944A,0x30001545, CHIP_FAMILY_RV770,"ATI Radeon HD 4850", kMotmot},
{ 0x944A,0x30001682, CHIP_FAMILY_RV770,"ATI Radeon HD 4850", kMotmot},
{ 0x944A,0x3000174B, CHIP_FAMILY_RV770,"ATI Radeon HD 4850", kMotmot},
{ 0x944A,0x30001787, CHIP_FAMILY_RV770,"ATI Radeon HD 4850", kMotmot},
{ 0x944A,0x300017AF, CHIP_FAMILY_RV770,"ATI Radeon HD 4850", kMotmot},
{ 0x944C,0x05021002, CHIP_FAMILY_RV770,"ATI Radeon HD 4830", kMotmot},
{ 0x944C,0x20031787, CHIP_FAMILY_RV770,"ATI Radeon HD 4830", kMotmot},
{ 0x944C,0x24801682, CHIP_FAMILY_RV770,"ATI Radeon HD 4830", kMotmot},
{ 0x944C,0x24811682, CHIP_FAMILY_RV770,"ATI Radeon HD 4830", kMotmot},
{ 0x944E,0x30001787, CHIP_FAMILY_RV770,"ATI Radeon HD 4730", kMotmot},
{ 0x944E,0x30101787, CHIP_FAMILY_RV770,"ATI Radeon HD 4810", kMotmot},
{ 0x944E,0x31001787, CHIP_FAMILY_RV770,"ATI Radeon HD 4820", kMotmot},
{ 0x944E,0x3260174B, CHIP_FAMILY_RV770,"ATI Radeon HD 4810", kMotmot},
{ 0x944E,0x3261174B, CHIP_FAMILY_RV770,"ATI Radeon HD 4810", kMotmot},
{ 0x9460,0x27021682, CHIP_FAMILY_RV770,"ATI Radeon HD 4890", kMotmot},
{ 0x9460,0xE115174B, CHIP_FAMILY_RV770,"ATI Radeon HD 4890", kMotmot},
{ 0x9460,0xE118174B, CHIP_FAMILY_RV770,"ATI Radeon HD 4890", kMotmot},
{ 0x9480,0x01211025, CHIP_FAMILY_RV730,"ATI Radeon HD 4650M", kGliff},
{ 0x9480,0x03111025, CHIP_FAMILY_RV730,"ATI Radeon HD 5165M", kPeregrine},
{ 0x9480,0x03121025, CHIP_FAMILY_RV730,"ATI Radeon HD 5165M", kPeregrine},
{ 0x9480,0x031C1025, CHIP_FAMILY_RV730,"ATI Radeon HD 5165M", kPeregrine},
{ 0x9480,0x031D1025, CHIP_FAMILY_RV730,"ATI Radeon HD 5165M", kPeregrine},
{ 0x9480,0x036C1025, CHIP_FAMILY_RV730,"ATI Radeon HD 5165M", kPeregrine},
{ 0x9480,0x036D1025, CHIP_FAMILY_RV730,"ATI Radeon HD 5165M", kPeregrine},
{ 0x9480,0x3628103C, CHIP_FAMILY_RV730,"ATI Radeon HD 4650M", kGliff},
{ 0x9480,0x9035104D, CHIP_FAMILY_RV730,"ATI Radeon HD 4650M", kGliff},
{ 0x9480,0xFD001179, CHIP_FAMILY_RV730,"ATI Radeon HD 4650M", kPeregrine},
{ 0x9480,0xFDD01179, CHIP_FAMILY_RV730,"ATI Radeon HD 4650M", kPeregrine},
{ 0x9480,0xFD121179, CHIP_FAMILY_RV730,"ATI Radeon HD 4650M", kPeregrine},
{ 0x9480,0xFD501179, CHIP_FAMILY_RV730,"ATI Radeon HD 4650M", kPeregrine},
{ 0x9480,0xFF001179, CHIP_FAMILY_RV730,"ATI Radeon HD 4600M", kPeregrine},
{ 0x9480,0xFF151179, CHIP_FAMILY_RV730,"ATI Radeon HD 4600M", kPeregrine},
{ 0x9480,0xFF221179, CHIP_FAMILY_RV730,"ATI Radeon HD 4600M", kPeregrine},
{ 0x9480,0xFF501179, CHIP_FAMILY_RV730,"ATI Radeon HD 4600M", kPeregrine},
{ 0x9480,0xFF801179, CHIP_FAMILY_RV730,"ATI Radeon HD 4600M", kPeregrine},
{ 0x9480,0xFF821179, CHIP_FAMILY_RV730,"ATI Radeon HD 5165M", kPeregrine},
{ 0x9480,0xFFA01179, CHIP_FAMILY_RV730,"ATI Radeon HD 4600M", kPeregrine},
{ 0x9480,0xFFA21179, CHIP_FAMILY_RV730,"ATI Radeon HD 5165M", kPeregrine},
{ 0x9490,0x20031787, CHIP_FAMILY_RV730,"ATI Radeon HD 4670", kFlicker},
{ 0x9490,0x25421028, CHIP_FAMILY_RV730,"ATI Radeon HD 4670", kFlicker},
{ 0x9490,0x30501787, CHIP_FAMILY_RV730,"ATI Radeon HD 4710", kPeregrine},
{ 0x9490,0x300017AF, CHIP_FAMILY_RV730,"ATI Radeon HD 4710", kPeregrine},
{ 0x9490,0x4710174B, CHIP_FAMILY_RV730,"ATI Radeon HD 4710", kPeregrine},
{ 0x9498,0x10001043, CHIP_FAMILY_RV730,"ATI Radeon HD 4670", kPeregrine},
{ 0x9498,0x20091787, CHIP_FAMILY_RV730,"ATI Radeon HD 4650", kPeregrine},
{ 0x9498,0x21CF1458, CHIP_FAMILY_RV730,"ATI Radeon HD 4600", kPeregrine},
{ 0x9498,0x24511682, CHIP_FAMILY_RV730,"ATI Radeon HD 4650", kPeregrine},
{ 0x9498,0x24521682, CHIP_FAMILY_RV730,"ATI Radeon HD 4650", kPeregrine},
{ 0x9498,0x24541682, CHIP_FAMILY_RV730,"ATI Radeon HD 4650", kPeregrine},
{ 0x9498,0x29331682, CHIP_FAMILY_RV730,"ATI Radeon HD 4670", kPeregrine},
{ 0x9498,0x29341682, CHIP_FAMILY_RV730,"ATI Radeon HD 4670", kPeregrine},
{ 0x9498,0x30501787, CHIP_FAMILY_RV730,"ATI Radeon HD 4700", kPeregrine},
{ 0x9498,0x31001787, CHIP_FAMILY_RV730,"ATI Radeon HD 4720", kPeregrine},
{ 0x94B3,0x0D001002, CHIP_FAMILY_RV740,"ATI Radeon HD 4770", kFlicker},
{ 0x94B3,0x1170174B, CHIP_FAMILY_RV740,"ATI Radeon HD 4770", kFlicker},
{ 0x94B3,0x29001682, CHIP_FAMILY_RV740,"ATI Radeon HD 4770", kFlicker},
{ 0x94C1,0x0D021002, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 XT", kNull},
{ 0x94C1,0x10021002, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 Pro", kNull},
{ 0x94C1,0x0D021028, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 XT", kNull},
{ 0x94C1,0x21741458, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 XT", kNull},
{ 0x94C1,0x10331462, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 XT", kNull},
{ 0x94C1,0x10401462, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 XT", kNull},
{ 0x94C1,0x11101462, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 XT", kNull},
{ 0x94C3,0x03421002, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO", kNull},
{ 0x94C3,0x01011A93, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO", kNull},
{ 0x94C3,0x03021028, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO", kNull},
{ 0x94C3,0x03421002, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO", kNull},
{ 0x94C3,0x04021028, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO", kNull},
{ 0x94C3,0x10321462, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO", kNull},
{ 0x94C3,0x10411462, CHIP_FAMILY_RV610,"ATI Radeon HD 2400", kNull},
{ 0x94C3,0x11041462, CHIP_FAMILY_RV610,"ATI Radeon HD 2400", kNull},
{ 0x94C3,0x11051462, CHIP_FAMILY_RV610,"ATI Radeon HD 2400", kNull},
{ 0x94C3,0x203817AF, CHIP_FAMILY_RV610,"ATI Radeon HD 2400", kNull},
{ 0x94C3,0x216A1458, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO", kNull},
{ 0x94C3,0x21721458, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO", kNull},
{ 0x94C3,0x2247148C, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 LE", kNull},
{ 0x94C3,0x22471787, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 LE", kNull},
{ 0x94C3,0x30001025, CHIP_FAMILY_RV610,"ATI Radeon HD 2350", kNull},
{ 0x94C3,0x30001458, CHIP_FAMILY_RV610,"ATI Radeon HD 3410", kNull},
{ 0x94C3,0x30001462, CHIP_FAMILY_RV610,"ATI Radeon HD 3410", kNull},
{ 0x94C3,0x3000148C, CHIP_FAMILY_RV610,"ATI Radeon HD 2350", kNull},
{ 0x94C3,0x30001642, CHIP_FAMILY_RV610,"ATI Radeon HD 3410", kNull},
{ 0x94C3,0x3000174B, CHIP_FAMILY_RV610,"ATI Radeon HD 2350", kNull},
{ 0x94C3,0x30001787, CHIP_FAMILY_RV610,"ATI Radeon HD 2350", kNull},
{ 0x94C3,0x37161642, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO", kNull},
{ 0x94C3,0x94C31002, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO", kNull},
{ 0x94C3,0xE370174B, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO", kNull},
{ 0x94C3,0xE400174B, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO", kNull},
{ 0x9501,0x25421002, CHIP_FAMILY_RV670,"ATI Radeon HD 3870", kNull},
{ 0x9501,0x30001002, CHIP_FAMILY_RV670,"ATI Radeon HD 3690", kNull},
{ 0x9501,0x3000174B, CHIP_FAMILY_RV670,"ATI Radeon HD 3690", kNull},
{ 0x9501,0x30001787, CHIP_FAMILY_RV670,"ATI Radeon HD 3690", kNull},
{ 0x9501,0x4750174B, CHIP_FAMILY_RV670,"ATI Radeon HD 4750", kNull},
{ 0x9505,0x024A1043, CHIP_FAMILY_RV670,"ATI Radeon HD 3850", kNull},
{ 0x9505,0x25421002, CHIP_FAMILY_RV670,"ATI Radeon HD 3850", kNull},
{ 0x9505,0x30001002, CHIP_FAMILY_RV630,"ATI Radeon HD 3690", kNull},
{ 0x9505,0x3000148C, CHIP_FAMILY_RV670,"ATI Radeon HD 3850", kNull},
{ 0x9505,0x3000174B, CHIP_FAMILY_RV670,"ATI Radeon HD 3690", kNull},
{ 0x9505,0x30001787, CHIP_FAMILY_RV630,"ATI Radeon HD 3690", kNull},
{ 0x9505,0x30011043, CHIP_FAMILY_RV670,"ATI Radeon HD 4730", kNull},
{ 0x9505,0x3001148C, CHIP_FAMILY_RV670,"ATI Radeon HD 4730", kNull},
{ 0x9505,0x3001174B, CHIP_FAMILY_RV670,"ATI Radeon HD 4750", kNull},
{ 0x9505,0x3002148C, CHIP_FAMILY_RV670,"ATI Radeon HD 4730", kNull},
{ 0x9505,0x3003148C, CHIP_FAMILY_RV670,"ATI Radeon HD 4750", kNull},
{ 0x9505,0x3004148C, CHIP_FAMILY_RV670,"ATI Radeon HD 4750", kNull},
{ 0x9505,0x3010174B, CHIP_FAMILY_RV670,"ATI Radeon HD 4750", kNull},
{ 0x9505,0x301017AF, CHIP_FAMILY_RV670,"ATI Radeon HD 4750", kNull},
{ 0x9505,0x4730174B, CHIP_FAMILY_RV670,"ATI Radeon HD 4730", kNull},
{ 0x9505,0xE630174B, CHIP_FAMILY_RV670,"ATI Radeon HD 3800 Series", kNull},
{ 0x9540,0x30501787, CHIP_FAMILY_RV710,"ATI Radeon HD 4590", kPeregrine},
{ 0x9540,0x4590174B, CHIP_FAMILY_RV710,"ATI Radeon HD 4590", kPeregrine},
{ 0x954F,0x16131462, CHIP_FAMILY_RV710,"ATI Radeon HD 4550", kPeregrine},
{ 0x954F,0x20081787, CHIP_FAMILY_RV710,"ATI Radeon HD 4350", kPeregrine},
{ 0x954F,0x29201682, CHIP_FAMILY_RV710,"ATI Radeon HD 4550", kPeregrine},
{ 0x954F,0x29211682, CHIP_FAMILY_RV710,"ATI Radeon HD 4550", kPeregrine},
{ 0x954F,0x3000174B, CHIP_FAMILY_RV710,"ATI Radeon HD 4520", kPeregrine},
{ 0x954F,0x301017AF, CHIP_FAMILY_RV710,"ATI Radeon HD 4450", kPeregrine},
{ 0x954F,0x30501787, CHIP_FAMILY_RV710,"ATI Radeon HD 4450", kPeregrine},
{ 0x954F,0x30901682, CHIP_FAMILY_RV710,"XFX Radeon HD 4570", kPeregrine},
{ 0x954F,0x31001787, CHIP_FAMILY_RV710,"ATI Radeon HD 4520", kPeregrine},
{ 0x954F,0x4450174B, CHIP_FAMILY_RV710,"ATI Radeon HD 4450", kPeregrine},
{ 0x954F,0x4570174B, CHIP_FAMILY_RV710,"ATI Radeon HD 4570", kPeregrine},
{ 0x954F,0x66661043, CHIP_FAMILY_RV710,"ATI Radeon HD 4550", kPeregrine},
{ 0x954F,0xE990174B, CHIP_FAMILY_RV710,"ATI Radeon HD 4350", kPeregrine},
{ 0x9552,0x04341028, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4330", kShrike},
{ 0x9552,0x21AC1458, CHIP_FAMILY_RV710,"ATI Radeon HD 4300/4500", kPeregrine},
{ 0x9552,0x21ED1458, CHIP_FAMILY_RV710,"ATI Radeon HD 4300/4500", kPeregrine},
{ 0x9552,0x308B103C, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4330", kShrike},
{ 0x9552,0x3000148C, CHIP_FAMILY_RV710,"ATI Radeon HD 4300/4500", kPeregrine},
{ 0x9552,0x3000174B, CHIP_FAMILY_RV710,"ATI Radeon HD 4300/4500", kPeregrine},
{ 0x9552,0x30001787, CHIP_FAMILY_RV710,"ATI Radeon HD 4300/4500", kPeregrine},
{ 0x9552,0x300017AF, CHIP_FAMILY_RV710,"ATI Radeon HD 4300/4500", kPeregrine},
{ 0x9552,0x44721545, CHIP_FAMILY_RV710,"VisionTek Radeon 4350", kPeregrine},
{ 0x9553,0x18751043, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4570",kShrike},
{ 0x9553,0x1B321043, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4570",kShrike},
{ 0x9553,0x215B17AA, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4530/4570",kShrike},
{ 0x9553,0x3092174B, CHIP_FAMILY_RV710,"ATI Radeon HD 4300/4500 Series",kPeregrine},
{ 0x9553,0x39291642, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4570",kPeregrine},
{ 0x9553,0xFD001179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 5145",kPeregrine},
{ 0x9553,0xFD121179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 5145",kPeregrine},
{ 0x9553,0xFD501179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 5145",kPeregrine},
{ 0x9553,0xFD921179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 5145",kPeregrine},
{ 0x9553,0xFDD01179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 5145",kPeregrine},
{ 0x9553,0xFF001179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4500",kPeregrine},
{ 0x9553,0xFF151179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4500",kPeregrine},
{ 0x9553,0xFF161179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 5145",kPeregrine},
{ 0x9553,0xFF221179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4500",kPeregrine},
{ 0x9553,0xFF401179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4500",kPeregrine},
{ 0x9553,0xFF501179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4500",kPeregrine},
{ 0x9553,0xFF801179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4500",kPeregrine},
{ 0x9553,0xFF821179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 5145",kPeregrine},
{ 0x9553,0xFFA01179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 5145",kPeregrine},
{ 0x9553,0xFFA21179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4500",kPeregrine},
{ 0x9553,0xFFC01179, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4500",kPeregrine},
{ 0x9555,0x29241682, CHIP_FAMILY_RV710,"ATI Radeon HD 4550", kNull},
{ 0x9555,0x24651682, CHIP_FAMILY_RV710,"ATI Radeon HD4300/HD4500", kNull},
{ 0x9555,0x3711174B, CHIP_FAMILY_RV710,"ATI Radeon HD4300/HD4500", kNull},
{ 0x9581,0x011F1025, CHIP_FAMILY_RV630,"ATI Radeon HD 2600", kNull},
{ 0x9581,0x0562107B, CHIP_FAMILY_RV630,"ATI Radeon HD 2600", kNull},
{ 0x9581,0x15621043, CHIP_FAMILY_RV630,"ATI Radeon HD 2600", kNull},
{ 0x9581,0x3000148C, CHIP_FAMILY_RV630,"ATI Radeon HD 3600", kNull},
{ 0x9581,0x30C5103C, CHIP_FAMILY_RV630,"ATI Radeon HD 2600", kNull},
{ 0x9581,0x3C2D17AA, CHIP_FAMILY_RV630,"ATI Radeon HD 2600", kNull},
{ 0x9581,0x63F61462, CHIP_FAMILY_RV630,"ATI Radeon HD 2600", kNull},
{ 0x9581,0x95811002, CHIP_FAMILY_RV630,"ATI Radeon HD 3600", kNull},
{ 0x9581,0xFF001179, CHIP_FAMILY_RV630,"ATI Radeon HD 2600", kNull},
{ 0x9581,0xFF011179, CHIP_FAMILY_RV630,"ATI Radeon HD 2600", kNull},
{ 0x9583,0x0083106B, CHIP_FAMILY_RV630,"ATI Mobility Radeon HD 2600 XT",kNull},
{ 0x9583,0x11071734, CHIP_FAMILY_RV630,"ATI Mobility Radeon HD 2600 XT",kNull},
{ 0x9583,0x3000148C, CHIP_FAMILY_RV630,"ATI Radeon HD 3600", kNull},
{ 0x9583,0x30D4103C, CHIP_FAMILY_RV630,"ATI Mobility Radeon HD 2600 XT",kNull},
{ 0x9588,0x01021A93, CHIP_FAMILY_RV630,"ATI Radeon HD 2600 XT", kNull},
{ 0x9589,0x01001A93, CHIP_FAMILY_RV630,"ATI Radeon HD 2600 PRO", kNull},
{ 0x9589,0x0E41174B, CHIP_FAMILY_RV630,"ATI Radeon HD 3600", kNull},
{ 0x9589,0x30001462, CHIP_FAMILY_RV630,"ATI Radeon HD 3610", kNull},
{ 0x9589,0x30001642, CHIP_FAMILY_RV630,"ATI Radeon HD 3610", kNull},
{ 0x9589,0x30001787, CHIP_FAMILY_RV630,"ATI Radeon HD 3600", kNull},
{ 0x9591,0x15453992, CHIP_FAMILY_RV635,"ATI Radeon HD 3600", kNull},
{ 0x9591,0x2303148C, CHIP_FAMILY_RV635,"ATI Radeon HD 2600/3600 Series", kNull},
{ 0x9598,0xB3831002, CHIP_FAMILY_RV635,"ATI All-in-Wonder HD", kNull},
{ 0x9598,0x30001043, CHIP_FAMILY_RV635,"ATI Radeon HD 3730", kNull},
{ 0x9598,0x3000148C, CHIP_FAMILY_RV635,"ATI Radeon HD 3730", kNull},
{ 0x9598,0x30001545, CHIP_FAMILY_RV635,"ATI Radeon HD 2600 XT", kNull},
{ 0x9598,0x3000174B, CHIP_FAMILY_RV635,"ATI Radeon HD 3730", kNull},
{ 0x9598,0x30011043, CHIP_FAMILY_RV635,"ATI Radeon HD 4570", kNull},
{ 0x9598,0x3001148C, CHIP_FAMILY_RV635,"ATI Radeon HD 4580", kNull},
{ 0x9598,0x3031148C, CHIP_FAMILY_RV635,"ATI Radeon HD 4570", kNull},
{ 0x9598,0x30011545, CHIP_FAMILY_RV635,"ATI Radeon HD 2600 Pro", kNull},
{ 0x9598,0x3001174B, CHIP_FAMILY_RV635,"ATI Radeon HD 3750", kNull},
{ 0x9598,0x300117AF, CHIP_FAMILY_RV635,"ATI Radeon HD 3750", kNull},
{ 0x9598,0x301017AF, CHIP_FAMILY_RV635,"ATI Radeon HD 4570", kNull},
{ 0x9598,0x301117AF, CHIP_FAMILY_RV635,"ATI Radeon HD 4580", kNull},
{ 0x9598,0x30501787, CHIP_FAMILY_RV635,"ATI Radeon HD 4610", kNull},
{ 0x9598,0x4570174B, CHIP_FAMILY_RV635,"ATI Radeon HD 4570", kNull},
{ 0x9598,0x4580174B, CHIP_FAMILY_RV635,"ATI Radeon HD 4580", kNull},
{ 0x9598,0x4610174B, CHIP_FAMILY_RV635,"ATI Radeon HD 4610", kNull},
{ 0x95C0,0x3000148C, CHIP_FAMILY_RV620,"ATI Radeon HD 3550", kNull},
{ 0x95C0,0x3000174B, CHIP_FAMILY_RV620,"ATI Radeon HD 3550", kNull},
{ 0x95C0,0x3002174B, CHIP_FAMILY_RV620,"ATI Radeon HD 3570", kNull},
{ 0x95C0,0x3020174B, CHIP_FAMILY_RV620,"ATI Radeon HD 4250", kNull},
{ 0x95C0,0xE3901745, CHIP_FAMILY_RV620,"ATI Radeon HD 3550", kNull},
{ 0x95C5,0x01041A93, CHIP_FAMILY_RV620,"ATI Radeon HD 3450", kNull},
{ 0x95C5,0x01051A93, CHIP_FAMILY_RV620,"ATI Radeon HD 3450", kNull},
{ 0x95C5,0x3000148C, CHIP_FAMILY_RV620,"ATI Radeon HD 3450", kNull},
{ 0x95C5,0x3001148C, CHIP_FAMILY_RV620,"ATI Radeon HD 3550", kNull},
{ 0x95C5,0x3002148C, CHIP_FAMILY_RV620,"ATI Radeon HD 4230", kNull},
{ 0x95C5,0x3003148C, CHIP_FAMILY_RV620,"ATI Radeon HD 4250", kNull},
{ 0x95C5,0x3010174B, CHIP_FAMILY_RV620,"ATI Radeon HD 4250", kNull},
{ 0x95C5,0x301017AF, CHIP_FAMILY_RV620,"ATI Radeon HD 4230", kNull},
{ 0x95C5,0x3032148C, CHIP_FAMILY_RV620,"ATI Radeon HD 4250", kNull},
{ 0x95C5,0x3033148C, CHIP_FAMILY_RV620,"ATI Radeon HD 4230", kNull},
{ 0x95C5,0x30501787, CHIP_FAMILY_RV620,"ATI Radeon HD 4250", kNull},
{ 0x95C5,0x4250174B, CHIP_FAMILY_RV620,"ATI Radeon HD 4250", kNull},
/* Evergreen */
{ 0x6898,0x0B001002, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5870",kZonalis},
{ 0x6898,0x032E1043, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5870",kUakari},
{ 0x6898,0x00D0106B, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5870",kLangur},
{ 0x6898,0xE140174B, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5870",kUakari},
{ 0x6898,0x29611682, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5870",kUakari},
{ 0x6899,0x21E41458, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5850",kUakari},
{ 0x6899,0xE140174B, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5850",kUakari},
{ 0x6899,0xE174174B, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5850",kUakari},
{ 0x6899,0x200A1787, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5850",kUakari},
{ 0x6899,0x22901787, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5850",kUakari},
{ 0x689C,0x03521043, CHIP_FAMILY_HEMLOCK,"ATI Radeon HD 5970",kUakari},
{ 0x689C,0x039E1043, CHIP_FAMILY_HEMLOCK,"ATI Radeon HD 5970",kUakari},
{ 0x689C,0x30201682, CHIP_FAMILY_HEMLOCK,"ATI Radeon HD 5970",kUakari},
{ 0x68A0,0x043A1028,CHIP_FAMILY_CYPRESS,"ATI Mobility Radeon HD 5870",kNomascus},
{ 0x68A1,0x144D103C,CHIP_FAMILY_CYPRESS,"ATI Mobility Radeon HD 5850",kNomascus},
{ 0x68A1,0x1522103C, CHIP_FAMILY_CYPRESS,"ATI Mobility Radeon HD 5850",kHoolock},
{ 0x68A8,0x050E1025, CHIP_FAMILY_CYPRESS,"AMD Radeon HD 6850M",kUakari},
{ 0x68B8,0x25431002, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770",kVervet},
{ 0x68B8,0x00CF106B, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770",kHoolock},
{ 0x68B8,0x21D71458, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770",kVervet},
{ 0x68B8,0x21F61458, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770",kVervet},
{ 0x68B8,0x29901682, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770",kVervet},
{ 0x68B8,0x29911682, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770",kVervet},
{ 0x68B8,0x1482174B, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770",kVervet},
{ 0x68B8,0xE144174B, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770",kHoolock},
{ 0x68B8,0xE147174B, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770",kVervet},
{ 0x68B8,0x200A1787, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770",kVervet},
{ 0x68B8,0x200B1787, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770",kVervet},
{ 0x68B8,0x22881787, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770",kVervet},
{ 0x68BA,0x31501682, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6770",kVervet},
{ 0x68BE,0x22881787, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5750",kVervet},
{ 0x68BF,0x220E1458, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6750",kVervet},
{ 0x68BF,0x31401682, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6750",kVervet},
{ 0x68C0,0x1594103C, CHIP_FAMILY_REDWOOD,"AMD Radeon HD 6570M",kNull},
{ 0x68C0,0x392717AA, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5730",kNull},
{ 0x68C0,0x395217AA, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5730",kNull},
{ 0x68C1,0x02051025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
{ 0x68C1,0x02961025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
{ 0x68C1,0x030A1025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
{ 0x68C1,0x033D1025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
{ 0x68C1,0x033E1025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5650",kNull},
{ 0x68C1,0x03471025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
{ 0x68C1,0x03561025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
{ 0x68C1,0x03581025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
{ 0x68C1,0x035A1025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
{ 0x68C1,0x035C1025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
{ 0x68C1,0x03641025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
{ 0x68C1,0x03791025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
{ 0x68C1,0x037E1025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
{ 0x68C1,0x03821025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
{ 0x68C1,0x9071104D,CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5650",kEulemur},
{ 0x68C8,0x2306103C, CHIP_FAMILY_REDWOOD,"ATI FirePro V4800 (FireGL)",kNull},
{ 0x68D8,0x03561043, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5670",kBaboon},
{ 0x68D8,0x21D91458, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5670",kBaboon},
{ 0x68D8,0x5690174B, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5690",kNull},
{ 0x68D8,0x5730174B, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5730",kNull},
{ 0x68D8,0xE151174B, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5670",kBaboon},
{ 0x68D8,0x30001787, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5730",kNull},
{ 0x68D8,0x301017AF, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5730",kNull},
{ 0x68D8,0x301117AF, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5690",kNull},
{ 0x68D9,0x30501682, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5570",kEulemur},
{ 0x68D9,0x301017AF, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5630",kNull},
{ 0x68DA,0x5630174B, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5630",kNull},
{ 0x68DA,0x30001787, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5630",kNull},
{ 0x68DA,0x301017AF, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5630",kNull},
{ 0x68E0,0x04561028, CHIP_FAMILY_CEDAR,"ATI Mobility Radeon HD 5470",kEulemur},
{ 0x68E0,0x1433103C, CHIP_FAMILY_CEDAR,"ATI Mobility Radeon HD 5470",kEulemur},
{ 0x68E1,0x1426103C, CHIP_FAMILY_CEDAR,"ATI Mobility Radeon HD 5430",kEulemur},
{ 0x68E1,0x3000174b, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",kEulemur},
{ 0x68E4,0x1426103C, CHIP_FAMILY_CEDAR,"AMD Radeon HD 6370M ",kNull},
{ 0x68E4,0x397917AA, CHIP_FAMILY_CEDAR,"AMD Radeon HD 6370M ",kNull},
{ 0x68F9,0x010E1002, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",kEulemur},
{ 0x68F9,0x03741043, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",kEulemur},
{ 0x68F9,0x21331462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",kEulemur},
{ 0x68F9,0x23401462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",kEulemur},
{ 0x68F9,0x5470174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470",kNull},
{ 0x68F9,0x5490174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5490",kNull},
{ 0x68F9,0x5530174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5530",kNull},
{ 0x68F9,0xE145174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",kEulemur},
{ 0x68F9,0xE153174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",kEulemur},
{ 0x68F9,0x20091787, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",kEulemur},
{ 0x68F9,0x22911787, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450",kEulemur},
{ 0x68F9,0x30001787, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470",kNull},
{ 0x68F9,0x30011787, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5530",kNull},
{ 0x68F9,0x30021787, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5490",kNull},
{ 0x68F9,0x301117AF, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470",kNull},
{ 0x68F9,0x301217AF, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5490",kNull},
{ 0x68F9,0x301317AF, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470",kNull},
{ 0x6898,0x00D0106B, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5870", kLangur},
{ 0x6898,0x032E1043, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5870", kUakari},
{ 0x6898,0x038C1043, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5870", kNull},
{ 0x6898,0x0B001002, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5870", kZonalis},
{ 0x6898,0x21E51458, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5870", kUakari},
{ 0x6898,0x29611682, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5870", kUakari},
{ 0x6898,0xE140174B, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5870", kUakari},
{ 0x6899,0x200A1787, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5850", kUakari},
{ 0x6899,0x21E41458, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5850", kUakari},
{ 0x6899,0x22901787, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5850", kUakari},
{ 0x6899,0xE140174B, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5850", kUakari},
{ 0x6899,0xE174174B, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5850", kUakari},
{ 0x689C,0x034A1043, CHIP_FAMILY_HEMLOCK,"ATI Radeon HD 5970", kUakari},
{ 0x689C,0x03521043, CHIP_FAMILY_HEMLOCK,"ATI Radeon HD 5870 X2", kUakari},
{ 0x689C,0x039E1043, CHIP_FAMILY_HEMLOCK,"ATI Radeon HD 5870", kUakari},
{ 0x689C,0x25421002, CHIP_FAMILY_HEMLOCK,"ATI Radeon HD 5970", kUakari},
{ 0x689C,0x30201682, CHIP_FAMILY_HEMLOCK,"ATI Radeon HD 5970", kUakari},
{ 0x68A0,0x03081025, CHIP_FAMILY_JUNIPER,"ATI Mobility Radeon HD 5830",kNomascus},
{ 0x68A0,0x030A1025, CHIP_FAMILY_JUNIPER,"ATI Mobility Radeon HD 5830",kNomascus},
{ 0x68A0,0x043A1028, CHIP_FAMILY_JUNIPER,"ATI Mobility Radeon HD 5870",kNomascus},
{ 0x68A1,0x03081025, CHIP_FAMILY_JUNIPER,"ATI Mobility Radeon HD 5850",kHoolock},
{ 0x68A1,0x030A1025, CHIP_FAMILY_JUNIPER,"ATI Mobility Radeon HD 5850",kHoolock},
{ 0x68A1,0x03671025, CHIP_FAMILY_JUNIPER,"ATI Mobility Radeon HD 5850",kHoolock},
{ 0x68A1,0x03681025, CHIP_FAMILY_JUNIPER,"ATI Mobility Radeon HD 5850",kHoolock},
{ 0x68A1,0x038B1025, CHIP_FAMILY_JUNIPER,"ATI Mobility Radeon HD 5850",kHoolock},
{ 0x68A1,0x038C1025, CHIP_FAMILY_JUNIPER,"ATI Mobility Radeon HD 5850",kHoolock},
{ 0x68A1,0x042E1025, CHIP_FAMILY_JUNIPER,"ATI Mobility Radeon HD 5850",kHoolock},
{ 0x68A1,0x042F1025, CHIP_FAMILY_JUNIPER,"ATI Mobility Radeon HD 5850",kHoolock},
{ 0x68A1,0x144D103C, CHIP_FAMILY_JUNIPER,"ATI Mobility Radeon HD 5850",kNomascus},
{ 0x68A1,0x1522103C, CHIP_FAMILY_JUNIPER,"ATI Mobility Radeon HD 5850",kHoolock},
{ 0x68A1,0x22411462, CHIP_FAMILY_JUNIPER,"ATI Mobility Radeon HD 5850",kHoolock},
{ 0x68A1,0x39961462, CHIP_FAMILY_JUNIPER,"ATI Mobility Radeon HD 5850",kHoolock},
{ 0x68A8,0x04421025, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6850M", kUakari},
{ 0x68A8,0x04511025, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6850M", kUakari},
{ 0x68A8,0x048F1028, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6870M", kHoolock},
{ 0x68A8,0x04901028, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6870M", kHoolock},
{ 0x68A8,0x04B91028, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6870M", kHoolock},
{ 0x68A8,0x04BA1028, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6870M", kHoolock},
{ 0x68A8,0x050A1025, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6850M", kUakari},
{ 0x68A8,0x050B1025, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6850M", kUakari},
{ 0x68A8,0x050C1025, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6850M", kUakari},
{ 0x68A8,0x050E1025, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6850M", kUakari},
{ 0x68A8,0x050F1025, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6850M", kUakari},
{ 0x68A8,0x05131025, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6850M", kUakari},
{ 0x68A8,0x05141025, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6850M", kUakari},
{ 0x68A8,0x05151025, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6850M", kUakari},
{ 0x68A8,0x05161025, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6850M", kUakari},
{ 0x68A8,0x05251025, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6850M", kUakari},
{ 0x68A8,0x05261025, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6850M", kUakari},
{ 0x68A8,0x056D1025, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6850M", kUakari},
{ 0x68A8,0x159B103C, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6850M", kUakari},
{ 0x68A8,0xC0AD144D, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6850M", kUakari},
{ 0x68B8,0x00CF106B, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770", kHoolock},
{ 0x68B8,0x0044144D, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 6770", kVervet},
{ 0x68B8,0x1482174B, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770", kVervet},
{ 0x68B8,0x200A1787, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770", kVervet},
{ 0x68B8,0x200B1787, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770", kVervet},
{ 0x68B8,0x21D71458, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770", kVervet},
{ 0x68B8,0x21F61458, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770", kVervet},
{ 0x68B8,0x22881787, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770", kVervet},
{ 0x68B8,0x25431002, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770", kVervet},
{ 0x68B8,0x25431458, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770", kVervet},
{ 0x68B8,0x29901682, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770", kVervet},
{ 0x68B8,0x29911682, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770", kVervet},
{ 0x68B8,0x30001002, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 6700", kVervet},
{ 0x68B8,0x6880103C, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770", kVervet},
{ 0x68B8,0x6881103C, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 6770", kVervet},
{ 0x68B8,0xE144174B, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770", kHoolock},
{ 0x68B8,0xE147174B, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770", kVervet},
{ 0x68B8,0xE160174B, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770", kVervet},
{ 0x68B8,0xEA60174B, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 6770", kVervet},
{ 0x68BA,0x03FE1043, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6770", kVervet},
{ 0x68BA,0x1482174B, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6770", kVervet},
{ 0x68BA,0x174B1482, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6770", kVervet},
{ 0x68BA,0x200A1787, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6770", kVervet},
{ 0x68BA,0x21421462, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6770", kVervet},
{ 0x68BA,0x25431458, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6770", kVervet},
{ 0x68BA,0x31501682, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6770", kVervet},
{ 0x68BA,0x31521682, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6770", kVervet},
{ 0x68BA,0x31531682, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6770", kVervet},
{ 0x68BA,0xE144174B, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6770", kVervet},
{ 0x68BE,0x200A1787, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5750", kVervet},
{ 0x68BE,0x22881787, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5750", kVervet},
{ 0x68BE,0x3000148C, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 6750", kNull},
{ 0x68BE,0x3000174B, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 6750", kNull},
{ 0x68BE,0x300017AF, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 6750", kNull},
{ 0x68BE,0x39821642, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 6750", kNull},
{ 0x68BF,0x220E1458, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 6750", kVervet},
{ 0x68BF,0x3000148C, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 6750", kVervet},
{ 0x68BF,0x31401682, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 6750", kVervet},
{ 0x68BF,0x6750174B, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 6750", kVervet},
{ 0x68BF,0xE144174B, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 6750", kHoolock},
{ 0x68C0,0x1594103C, CHIP_FAMILY_REDWOOD,"AMD Radeon HD 6570M", kNull},
{ 0x68C0,0x392717AA, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5730",kNull},
{ 0x68C0,0x395217AA, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5730",kNull},
{ 0x68C0,0x84721043, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5000",kNull},
{ 0x68C1,0x02051025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
{ 0x68C1,0x02961025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
{ 0x68C1,0x030A1025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
{ 0x68C1,0x033D1025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
{ 0x68C1,0x033E1025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5650",kNull},
{ 0x68C1,0x03471025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
{ 0x68C1,0x03561025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
{ 0x68C1,0x03581025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
{ 0x68C1,0x035A1025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
{ 0x68C1,0x035C1025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
{ 0x68C1,0x03641025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
{ 0x68C1,0x036D1025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5650",kNull},
{ 0x68C1,0x03791025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
{ 0x68C1,0x037E1025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
{ 0x68C1,0x03821025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5750",kNull},
{ 0x68C1,0x04121025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5650",kNull},
{ 0x68C1,0x042E1025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5650",kNull},
{ 0x68C1,0x042F1025, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5650",kNull},
{ 0x68C1,0x9071104D, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5650",kEulemur},
{ 0x68C1,0x1449103C, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5650",kEulemur},
{ 0x68C1,0xFD001179, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5650",kEulemur},
{ 0x68C1,0xFD121179, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5650",kEulemur},
{ 0x68C1,0xFD501179, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5650",kEulemur},
{ 0x68C1,0xFDD01179, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5650",kEulemur},
{ 0x68C8,0x2306103C, CHIP_FAMILY_REDWOOD,"ATI FirePro V4800 (FireGL)",kNull},
{ 0x68C8,0x240A1002, CHIP_FAMILY_REDWOOD,"ATI FirePro V4800 (FireGL)",kNull},
{ 0x68C8,0x240A1028, CHIP_FAMILY_REDWOOD,"ATI FirePro V4800 (FireGL)",kNull},
{ 0x68D8,0x03561043, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5670", kBaboon},
{ 0x68D8,0x03C01043, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5670", kNull},
{ 0x68D8,0x20091787, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5670", kNull},
{ 0x68D8,0x200B1787, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5670", kBaboon}, // catalinz
{ 0x68D8,0x21D91458, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5670", kBaboon},
{ 0x68D8,0x21F41458, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5670", kNull},
{ 0x68D8,0x22051462, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5690", kNull},
{ 0x68D8,0x22941787, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5690", kNull},
{ 0x68D8,0x30001787, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5730", kNull},
{ 0x68D8,0x301017AF, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5730", kNull},
{ 0x68D8,0x301117AF, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5690", kNull},
{ 0x68D8,0x30601682, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5690", kNull},
{ 0x68D8,0x30651682, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5690", kNull},
{ 0x68D8,0x56701545, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5690", kNull},
{ 0x68D8,0x5690174B, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5690", kNull},
{ 0x68D8,0x5730174B, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5730", kNull},
{ 0x68D8,0x68E01028, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5670", kBaboon},
{ 0x68D8,0xE151174B, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5670", kEulemur},
{ 0x68D8,0xE155174B, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5670", kNull},
{ 0x68D8,0xE166174B, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5670", kUakari},
{ 0x68D9,0x03CE1043, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5550", kNull},
{ 0x68D9,0x22401462, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5570", kNull},
{ 0x68D9,0x3000148C, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 6510", kNull},
{ 0x68D9,0x3000174B, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 6510", kNull},
{ 0x68D9,0x301017AF, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5630", kNull},
{ 0x68D9,0x39691642, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5570", kNull},
{ 0x68DA,0x3000148C, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 6390", kNull},
{ 0x68DA,0x3000174B, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 6390", kNull},
{ 0x68DA,0x30001787, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5630", kNull},
{ 0x68DA,0x300017AF, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 6390", kNull},
{ 0x68DA,0x301017AF, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5630", kNull},
{ 0x68DA,0x5630174B, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5630", kNull},
{ 0x68E0,0x02931025, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M", kEulemur},
{ 0x68E0,0x03581025, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M", kEulemur},
{ 0x68E0,0x03591025, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M", kEulemur},
{ 0x68E0,0x035C1025, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M", kEulemur},
{ 0x68E0,0x035D1025, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M", kEulemur},
{ 0x68E0,0x036D1025, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M", kLangur },
{ 0x68E0,0x04471028, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M", kEulemur},
{ 0x68E0,0x04561028, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M", kEulemur},
{ 0x68E0,0x04831025, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M", kEulemur},
{ 0x68E0,0x1433103C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M", kEulemur},
{ 0x68E0,0x1441103C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M", kEulemur},
{ 0x68E0,0x144A103C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M", kEulemur},
{ 0x68E0,0x1BF21043, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M", kNull },
{ 0x68E0,0x848F1043, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M", kNull },
{ 0x68E0,0xFD001179, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M", kEulemur},
{ 0x68E0,0xFD121179, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M", kEulemur},
{ 0x68E0,0xFD501179, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M", kEulemur},
{ 0x68E0,0xFD921179, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M", kEulemur},
{ 0x68E0,0xFDD01179, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M", kEulemur},
{ 0x68E1,0x04661028, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M", kEulemur},
{ 0x68E1,0x10021B61, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450M", kEulemur},
{ 0x68E1,0x10501462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M", kEulemur},
{ 0x68E1,0x1426103C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M", kEulemur},
{ 0x68E1,0x142A103C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 545vM", kEulemur},
{ 0x68E1,0x14E110CF, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5400M", kEulemur},
{ 0x68E1,0x21D81458, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M", kEulemur},
{ 0x68E1,0x21E21458, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M", kEulemur},
{ 0x68E1,0x21F11458, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M", kEulemur},
{ 0x68E1,0x22021458, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M", kEulemur},
{ 0x68E1,0x23421462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M", kEulemur},
{ 0x68E1,0x23431462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M", kEulemur},
{ 0x68E1,0x25481458, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5400M", kEulemur},
{ 0x68E1,0x254A1458, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5000M", kEulemur},
{ 0x68E1,0x30001043, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M", kEulemur},
{ 0x68E1,0x3000148C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M", kEulemur},
{ 0x68E1,0x30001682, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M", kEulemur},
{ 0x68E1,0x3000174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kEulemur},
{ 0x68E1,0x30001787, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kEulemur}, // 5430M ???
{ 0x68E1,0x300017AF, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M", kEulemur},
{ 0x68E1,0x3001148C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M", kEulemur},
{ 0x68E1,0x301417AF, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350", kEulemur},
{ 0x68E1,0x3002148C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M", kEulemur},
{ 0x68E1,0x3003148C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450M", kEulemur},
{ 0x68E1,0x54501545, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M", kEulemur},
{ 0x68E1,0x5470174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470M", kEulemur},
{ 0x68E1,0x60001092, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M", kEulemur},
{ 0x68E1,0x60001682, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M", kEulemur},
{ 0x68E1,0x6000174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M", kEulemur},
{ 0x68E1,0x6230174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350", kEulemur},
{ 0x68E1,0x6350174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350", kEulemur},
{ 0x68E1,0xFDD01179, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5430M", kEulemur},
{ 0x68E4,0x04821025, CHIP_FAMILY_CEDAR,"AMD Radeon HD 6370M", kNull},
{ 0x68E4,0x1426103C, CHIP_FAMILY_CEDAR,"AMD Radeon HD 6370M", kNull},
{ 0x68E4,0x1C921043, CHIP_FAMILY_CEDAR,"AMD Radeon HD 6370M", kNull},
{ 0x68E4,0x397917AA, CHIP_FAMILY_CEDAR,"AMD Radeon HD 6370M", kNull},
{ 0x68E4,0x397F17AA, CHIP_FAMILY_CEDAR,"AMD Radeon HD 7370M", kNull},
{ 0x68E4,0x84A01043, CHIP_FAMILY_CEDAR,"AMD Radeon HD 6370M", kNull},
{ 0x68F9,0x00011019, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kNull},
{ 0x68F9,0x00021019, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kNull},
{ 0x68F9,0x00191019, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350", kNull},
{ 0x68F9,0x010E1002, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kEulemur},
{ 0x68F9,0x010E1028, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kNull},
{ 0x68F9,0x03741043, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kEulemur},
{ 0x68F9,0x03CA1043, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kEulemur},
{ 0x68F9,0x05181025, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kNull},
{ 0x68F9,0x05191025, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kNull},
{ 0x68F9,0x174B3000, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6230", kNull},
{ 0x68F9,0x174B6250, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6250", kNull},
{ 0x68F9,0x174B6290, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6290", kNull},
{ 0x68F9,0x174BE164, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kNull},
{ 0x68F9,0x20091787, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kEulemur},
{ 0x68F9,0x21261028, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350", kNull},
{ 0x68F9,0x2126103C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350", kNull},
{ 0x68F9,0x21301462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kNull},
{ 0x68F9,0x21311462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kNull},
{ 0x68F9,0x21331462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350", kEulemur},
{ 0x68F9,0x21801462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kNull},
{ 0x68F9,0x21811462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kNull},
{ 0x68F9,0x21821462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350", kNull},
{ 0x68F9,0x21831462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350", kNull},
{ 0x68F9,0x22911787, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kEulemur},
{ 0x68F9,0x22301462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kEulemur},
{ 0x68F9,0x22311462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kEulemur},
{ 0x68F9,0x23401462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kEulemur},
{ 0x68F9,0x24951462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350", kNull},
{ 0x68F9,0x2AAC103C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kNull},
{ 0x68F9,0x2AEC103C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kNull},
{ 0x68F9,0x30001787, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470", kNull},
{ 0x68F9,0x300017AF, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6250", kNull},
{ 0x68F9,0x3001148C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6250", kNull},
{ 0x68F9,0x30011787, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5530", kNull},
{ 0x68F9,0x3002148C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6290", kNull},
{ 0x68F9,0x30021787, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5490", kNull},
{ 0x68F9,0x300217AF, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6290", kNull},
{ 0x68F9,0x3003148C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6230", kNull},
{ 0x68F9,0x301117AF, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470", kNull},
{ 0x68F9,0x301217AF, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5490", kNull},
{ 0x68F9,0x301317AF, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470", kNull},
{ 0x68F9,0x301417AF, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350", kNull},
{ 0x68F9,0x30321682, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kEulemur},
{ 0x68F9,0x303A1682, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kEulemur},
{ 0x68F9,0x3580103C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kNull},
{ 0x68F9,0x360217AA, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kEulemur},
{ 0x68F9,0x360317AA, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kEulemur},
{ 0x68F9,0x360F17AA, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kEulemur},
{ 0x68F9,0x361917AA, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kEulemur},
{ 0x68F9,0x39831642, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kNull},
{ 0x68F9,0x39841642, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350", kNull},
{ 0x68F9,0x39871642, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350", kNull},
{ 0x68F9,0x3987174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350", kNull},
{ 0x68F9,0x39971462, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kEulemur},
{ 0x68F9,0x3A051642, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kNull},
{ 0x68F9,0x3B311642, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350A", kNull},
{ 0x68F9,0x5470174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470", kNull},
{ 0x68F9,0x5490174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5490", kNull},
{ 0x68F9,0x5530174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5530", kNull},
{ 0x68F9,0x6230174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6230", kNull},
{ 0x68F9,0x6350174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6350", kNull},
{ 0x68F9,0x7350148C, CHIP_FAMILY_CEDAR,"ATI Radeon HD 7350", kNull},
{ 0x68F9,0xE127174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kEulemur},
{ 0x68F9,0xE145174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kEulemur},
{ 0x68F9,0xE153174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kEulemur},
{ 0x68F9,0xE164174B, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5450", kEulemur},
/* Northen Islands */
{ 0x6718,0x0B001002, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970",kNull},
{ 0x6718,0x67181002, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970",kNull},
{ 0x6718,0x31301682, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970",kNull},
{ 0x6719,0x0B001002, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950",kGibba},
{ 0x6719,0x21FD1458, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950",kGibba},
{ 0x6719,0x186B174B, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950",kNull},
{ 0x6719,0x20101787, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950",kGibba},
{ 0x6720,0x04901028, CHIP_FAMILY_BARTS,"AMD Radeon HD 6970M",kElodea},
{ 0x6720,0x04BA1028, CHIP_FAMILY_BARTS,"AMD Radeon HD 6970M",kElodea},
{ 0x6738,0x00D01002,CHIP_FAMILY_BARTS,"AMD Radeon HD 6870",kDuckweed},
{ 0x6738,0x21FA1002,CHIP_FAMILY_BARTS,"AMD Radeon HD 6870",kDuckweed},
{ 0x6738,0x67381002, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870",kDuckweed},
{ 0x6738,0x21FA1458,CHIP_FAMILY_BARTS,"AMD Radeon HD 6870",kDuckweed},
{ 0x6738,0x31031682,CHIP_FAMILY_BARTS,"AMD Radeon HD 6870",kDuckweed},
{ 0x6738,0x31041682,CHIP_FAMILY_BARTS,"AMD Radeon HD 6870",kDuckweed},
{ 0x6738,0x31071682,CHIP_FAMILY_BARTS,"AMD Radeon HD 6870",kDuckweed},
{ 0x6738,0x31081682,CHIP_FAMILY_BARTS,"AMD Radeon HD 6870",kDuckweed},
{ 0x6738,0xE178174B,CHIP_FAMILY_BARTS,"AMD Radeon HD 6870",kDuckweed},
{ 0x6738,0x174B174B,CHIP_FAMILY_BARTS,"AMD Radeon HD 6870",kBulrushes},
{ 0x6738,0x20101787,CHIP_FAMILY_BARTS,"AMD Radeon HD 6870",kDuckweed},
{ 0x6738,0x23051787,CHIP_FAMILY_BARTS,"AMD Radeon HD 6870",kDuckweed},
{ 0x6739,0x67391002, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850",kDuckweed},
{ 0x6739,0xAA881002, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850",kDuckweed},
{ 0x6739,0x03B41043, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850",kDuckweed},
{ 0x6739,0x21F81458, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850",kDuckweed},
{ 0x6739,0x24411462, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850",kDuckweed},
{ 0x6739,0x31101682, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850",kDuckweed},
{ 0x6739,0x31171682, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850",kDuckweed},
{ 0x6739,0xE177174B,CHIP_FAMILY_BARTS,"AMD Radeon HD 6850",kDuckweed},
{ 0x6740,0x1631103C, CHIP_FAMILY_TURKS,"AMD FirePro M5950",kNull},
{ 0x6740,0x1657103C, CHIP_FAMILY_TURKS,"AMD Radeon HD 6770M",kNull},
{ 0x6740,0x165A103C, CHIP_FAMILY_TURKS,"AMD Radeon HD 6770M",kNull},
{ 0x6740,0x3388103C, CHIP_FAMILY_TURKS,"AMD Radeon HD 6770M",kNull},
{ 0x6740,0x1D121043, CHIP_FAMILY_TURKS,"AMD Radeon HD 6730M",kNull},
{ 0x6741,0x050E1025, CHIP_FAMILY_TURKS,"AMD Radeon HD 6650M",kNull},
{ 0x6741,0x05131025, CHIP_FAMILY_TURKS,"AMD Radeon HD 6650M",kNull},
{ 0x6741,0x1646103C, CHIP_FAMILY_TURKS,"AMD Radeon HD 6750M",kNull},
{ 0x6741,0x1688103C, CHIP_FAMILY_TURKS,"AMD Radeon HD 7690M",kNull},
{ 0x6741,0x9080104D,CHIP_FAMILY_TURKS,"AMD Radeon HD 6630M",kNull},
{ 0x6758,0x67581002,CHIP_FAMILY_TURKS,"AMD Radeon HD 6670",kBulrushes},
{ 0x6758,0x00121028,CHIP_FAMILY_TURKS,"AMD Radeon HD 6670",kBulrushes},
{ 0x6758,0x22051458,CHIP_FAMILY_TURKS,"AMD Radeon HD 6670",kBulrushes},
{ 0x6758,0xE194174B,CHIP_FAMILY_TURKS,"AMD Radeon HD 6670",kBulrushes},
{ 0x6758,0x31811682,CHIP_FAMILY_TURKS,"AMD Radeon HD 6670",kBulrushes},
{ 0x6758,0x31831682,CHIP_FAMILY_TURKS,"AMD Radeon HD 6670",kBulrushes},
{ 0x6758,0xE194174B,CHIP_FAMILY_TURKS,"AMD Radeon HD 6670",kBulrushes},
{ 0x6759,0xE193174B, CHIP_FAMILY_TURKS,"AMD Radeon HD 6570",kNull},
{ 0x6759,0x20121787, CHIP_FAMILY_TURKS,"AMD Radeon HD 6570",kPithecia},
{ 0x6760,0x04CC1028,CHIP_FAMILY_CAICOS,"AMD Radeon HD 6490M",kNull},
{ 0x6760,0x1CB21043, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6470M",kNull},
{ 0x6760,0x165A103C, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6470M",kNull},
{ 0x6760,0x167D103C, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6470M",kNull},
{ 0x6760,0x00031179, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450M",kNull},
{ 0x6779,0x64501092,CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450",kBulrushes},
{ 0x6779,0xE164174B,CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450",kBulrushes},
{ 0x6779,0xE180174B, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450",kPithecia},
/* Southen Islands */
//
// standard/default models
// these definitions are used when no subsys_id was found
//
{ 0x9400,0x00000000, CHIP_FAMILY_R600,"ATI Radeon HD 2900 XT/PRO Series",kNull},
{ 0x9405,0x00000000, CHIP_FAMILY_R600,"ATI Radeon HD 2900 GT Series",kNull},
{ 0x9440,0x00000000, CHIP_FAMILY_RV770,"ATI Radeon HD 4800 Series",kMotmot},
{ 0x9441,0x00000000, CHIP_FAMILY_RV770,"ATI Radeon HD 4870 X2 Series",kMotmot},
{ 0x9442,0x00000000, CHIP_FAMILY_RV770,"ATI Radeon HD 4800 Series",kMotmot},
{ 0x9443,0x00000000, CHIP_FAMILY_RV770,"ATI Radeon HD 4850 X2 Series",kMotmot},
{ 0x944A,0x00000000, CHIP_FAMILY_RV770,"ATI Radeon HD 4800 Series",kMotmot},
{ 0x944C,0x00000000, CHIP_FAMILY_RV770,"ATI Radeon HD 4800 Series",kMotmot},
{ 0x944E,0x00000000, CHIP_FAMILY_RV740,"ATI Radeon HD 4700 Series",kMotmot},
{ 0x9450,0x00000000, CHIP_FAMILY_RV770,"AMD FireStream 9270 Series",kMotmot},
{ 0x9452,0x00000000, CHIP_FAMILY_RV770,"AMD FireStream 9250 Series",kMotmot},
{ 0x9460,0x00000000, CHIP_FAMILY_RV790,"ATI Radeon HD 4800 Series",kMotmot},
{ 0x9462,0x00000000, CHIP_FAMILY_RV790,"ATI Radeon HD 4800 Series",kMotmot},
{ 0x9480,0x00000000, CHIP_FAMILY_RV730,"ATI Mobility Radeon HD 4650 Series",kGliff},
{ 0x9490,0x00000000, CHIP_FAMILY_RV730,"ATI Radeon HD 4600 Series",kFlicker},
{ 0x9498,0x00000000, CHIP_FAMILY_RV730,"ATI Radeon HD 4600 Series",kFlicker},
{ 0x94B3,0x00000000, CHIP_FAMILY_RV740,"ATI Radeon HD 4770 Series",kFlicker},
{ 0x94B4,0x00000000, CHIP_FAMILY_RV740,"ATI Radeon HD 4700 Series",kFlicker},
{ 0x94B5,0x00000000, CHIP_FAMILY_RV740,"ATI Radeon HD 4770 Series",kFlicker},
{ 0x94C1,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 Series",kIago},
{ 0x94C3,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 Series",kIago},
{ 0x94C7,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD 2350 Series",kIago},
{ 0x94CC,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 Series",kIago},
{ 0x9501,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 3800 Series",kMegalodon},
{ 0x9505,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 3800 Series",kMegalodon},
{ 0x9507,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 3830 Series",kMegalodon},
{ 0x950F,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 3870 X2 Series",kMegalodon},
{ 0x9513,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 3850 X2 Series",kMegalodon},
{ 0x9519,0x00000000, CHIP_FAMILY_RV630,"AMD FireStream 9170 Series",kMegalodon},
{ 0x9540,0x00000000, CHIP_FAMILY_RV710,"ATI Radeon HD 4550/4590 Series",kNull},
{ 0x954F,0x00000000, CHIP_FAMILY_RV710,"ATI Radeon HD 4300/4500 Series",kNull},
{ 0x9552,0x00000000, CHIP_FAMILY_RV710,"ATI Radeon HD 4300/4500 Series",kShrike},
{ 0x9553,0x00000000, CHIP_FAMILY_RV710,"ATI Radeon HD 4300/4500 Series",kShrike},
{ 0x9588,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 2600 XT Series",kLamna},
{ 0x9589,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 2600 PRO Series",kLamna},
{ 0x6718,0x03B81043, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970", kGibba},
{ 0x6718,0x03BC1043, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970", kGibba},
{ 0x6718,0x0B001002, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970", kGibba},
{ 0x6718,0x20101458, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970", kGibba},
{ 0x6718,0x20101787, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970", kGibba},
{ 0x6718,0x22001458, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970", kGibba},
{ 0x6718,0x22011458, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970", kGibba},
{ 0x6718,0x23061787, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970", kGibba}, // HIS
{ 0x6718,0x23701462, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970", kGibba}, // MSI
{ 0x6718,0x24701462, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970", kGibba}, // MSI
{ 0x6718,0x31301682, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970", kGibba},
{ 0x6718,0x67181002, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970", kGibba},
{ 0x6718,0xE182174B, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970", kGibba},
{ 0x6718,0xE203174B, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970", kGibba},
{ 0x6719,0x03BE1043, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950", kGibba},
{ 0x6719,0x03D41043, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950", kGibba},
{ 0x6719,0x0B001002, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950", kGibba},
{ 0x6719,0x186B174B, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950", kGibba},
{ 0x6719,0x20101787, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950", kGibba},
{ 0x6719,0x21FD1458, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950", kGibba},
{ 0x6719,0x23071787, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950", kGibba},
{ 0x6719,0x24611462, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950", kGibba},
{ 0x6719,0x31211682, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950", kGibba},
{ 0x6719,0x31221682, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950", kGibba},
{ 0x6719,0xE189174B, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950", kGibba},
//{ 0x671D,0x0B2A1002, CHIP_FAMILY_ANTILLES,"AMD Radeon HD 6990", kNull},
//{ 0x671D,0x1B2A1002, CHIP_FAMILY_ANTILLES,"AMD Radeon HD 6990", kNull},
//{ 0x671D,0x31601682, CHIP_FAMILY_ANTILLES,"AMD Radeon HD 6990", kNull},
{ 0x6720,0x048F1028, CHIP_FAMILY_BARTS,"AMD Radeon HD 6970M", kElodea},
{ 0x6720,0x04901028, CHIP_FAMILY_BARTS,"AMD Radeon HD 6970M", kElodea},
{ 0x6720,0x04A41028, CHIP_FAMILY_BARTS,"AMD FirePro M8900M", kElodea},
{ 0x6720,0x04B91028, CHIP_FAMILY_BARTS,"AMD Radeon HD 6970M", kElodea},
{ 0x6720,0x04BA1028, CHIP_FAMILY_BARTS,"AMD Radeon HD 6970M", kElodea},
{ 0x6720,0x51021558, CHIP_FAMILY_BARTS,"AMD Radeon HD 6970M", kElodea},
{ 0x6720,0x51041558, CHIP_FAMILY_BARTS,"AMD Radeon HD 6990M", kElodea},
{ 0x6720,0x71001558, CHIP_FAMILY_BARTS,"AMD Radeon HD 6970M", kElodea},
{ 0x6720,0x72001558, CHIP_FAMILY_BARTS,"AMD Radeon HD 6970M", kElodea},
{ 0x6720,0x72011558, CHIP_FAMILY_BARTS,"AMD Radeon HD 6990M", kElodea},
{ 0x6720,0xC0AD144D, CHIP_FAMILY_BARTS,"AMD Radeon HD 6970M", kElodea},
{ 0x6738,0x00D01002, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870", kDuckweed},
{ 0x6738,0x03AE1043, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870", kDuckweed},
{ 0x6738,0x03C61043, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870", kDuckweed},
{ 0x6738,0x174B174B, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870", kBulrushes}, // ?? kDuckweed ??
{ 0x6738,0x20101787, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870", kDuckweed},
{ 0x6738,0x21FA1002, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870", kDuckweed},
{ 0x6738,0x21FA1458, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870", kDuckweed},
{ 0x6738,0x23051787, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870", kDuckweed},
{ 0x6738,0x25101462, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870", kDuckweed},
{ 0x6738,0x31031682, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870", kDuckweed},
{ 0x6738,0x31041682, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870", kDuckweed},
{ 0x6738,0x31071682, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870", kDuckweed},
{ 0x6738,0x31081682, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870", kDuckweed}, // ?? kJuncus ??
{ 0x6738,0x67381002, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870", kDuckweed},
{ 0x6738,0xE178174B, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870", kDuckweed},
{ 0x6739,0x03B41043, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850", kDuckweed},
{ 0x6739,0x174B174B, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850", kDuckweed},
{ 0x6739,0x200F1787, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850", kDuckweed},
{ 0x6739,0x21F81458, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850", kBulrushes},
{ 0x6739,0x23041787, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850", kDuckweed},
{ 0x6739,0x24001462, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850", kDuckweed},
{ 0x6739,0x24411462, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850", kDuckweed},
{ 0x6739,0x25201462, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850", kDuckweed},
{ 0x6739,0x30001787, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850", kDuckweed},
{ 0x6739,0x31101682, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850", kDuckweed},
{ 0x6739,0x31131682, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850", kDuckweed},
{ 0x6739,0x31141682, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850", kDuckweed},
{ 0x6739,0x31161682, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850", kDuckweed},
{ 0x6739,0x31171682, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850", kDuckweed},
{ 0x6739,0x67391002, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850", kDuckweed},
{ 0x6739,0xAA881002, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850", kDuckweed},
{ 0x6739,0xE174174B, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850", kDuckweed},
{ 0x6739,0xE177174B, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850", kDuckweed},
{ 0x6739,0xE183174B, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850", kDuckweed},
{ 0x673E,0x174B174B, CHIP_FAMILY_BARTS,"AMD Radeon HD 6790", kNull},
{ 0x673E,0x23101787, CHIP_FAMILY_BARTS,"AMD Radeon HD 6790", kNull},
{ 0x673E,0x31701682, CHIP_FAMILY_BARTS,"AMD Radeon HD 6790", kNull},
{ 0x673E,0x31721682, CHIP_FAMILY_BARTS,"AMD Radeon HD 6790", kNull},
{ 0x6740,0x04A31028, CHIP_FAMILY_TURKS,"AMD Radeon HD 6770M", kNull}, // ??
{ 0x6740,0x1D121043, CHIP_FAMILY_TURKS,"AMD Radeon HD 6730M", kNull},
{ 0x6740,0x1631103C, CHIP_FAMILY_TURKS,"AMD FirePro M5950", kNull},
{ 0x6740,0x1657103C, CHIP_FAMILY_TURKS,"AMD Radeon HD 6770M", kNull},
{ 0x6740,0x165A103C, CHIP_FAMILY_TURKS,"AMD Radeon HD 6770M", kNull},
{ 0x6740,0x3388103C, CHIP_FAMILY_TURKS,"AMD Radeon HD 6770M", kNull},
{ 0x6740,0x3389103C, CHIP_FAMILY_TURKS,"AMD Radeon HD 6770M", kNull}, // ?? kHydrilla ??
{ 0x6740,0x6740106B, CHIP_FAMILY_TURKS,"AMD Radeon HD 6770M", kNull}, // ??
{ 0x6741,0x050E1025, CHIP_FAMILY_TURKS,"AMD Radeon HD 6650M", kNull},
{ 0x6741,0x050F1025, CHIP_FAMILY_TURKS,"AMD Radeon HD 6650M", kNull},
{ 0x6741,0x05131025, CHIP_FAMILY_TURKS,"AMD Radeon HD 6650M", kNull},
{ 0x6741,0x1646103C, CHIP_FAMILY_TURKS,"AMD Radeon HD 6750M", kNull},
{ 0x6741,0x1688103C, CHIP_FAMILY_TURKS,"AMD Radeon HD 7690M", kNull},
{ 0x6741,0x358D103C, CHIP_FAMILY_TURKS,"AMD Radeon HD 6630M/6650M/6750M", kNull},
{ 0x6741,0x9080104D, CHIP_FAMILY_TURKS,"AMD Radeon HD 6630M", kNull},
{ 0x6758,0x00121028, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670", kBulrushes},
{ 0x6758,0x0B0E1002, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670", kPithecia},
{ 0x6758,0x0B0E1028, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670", kBulrushes},
{ 0x6758,0x20121787, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670", kPithecia},
{ 0x6758,0x20141787, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670", kBulrushes},
{ 0x6758,0x22051458, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670", kBulrushes},
{ 0x6758,0x31811682, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670", kBulrushes},
{ 0x6758,0x31831682, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670", kBulrushes},
{ 0x6758,0x67581002, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670", kBulrushes},
{ 0x6758,0x6882103C, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670", kBulrushes},
{ 0x6758,0xE181174B, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670", kBulrushes},
{ 0x6758,0xE1941746, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670", kBulrushes},
{ 0x6758,0xE194174B, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670", kMangabey},
{ 0x6759,0x20121787, CHIP_FAMILY_TURKS,"AMD Radeon HD 6570", kPithecia},
{ 0x6759,0x31951682, CHIP_FAMILY_TURKS,"AMD Radeon HD 6570", kGibba},
{ 0x6759,0x32801682, CHIP_FAMILY_TURKS,"AMD Radeon HD 7570", kPithecia},
{ 0x6759,0xE193174B, CHIP_FAMILY_TURKS,"AMD Radeon HD 6570", kPithecia},
{ 0x675F,0x23141787, CHIP_FAMILY_TURKS,"AMD Radeon HD 5570", kNull},
{ 0x675F,0x254B1458, CHIP_FAMILY_TURKS,"AMD Radeon HD 5570", kNull},
{ 0x675F,0x6510148C, CHIP_FAMILY_TURKS,"AMD Radeon HD 5570", kNull},
{ 0x675F,0x6510174B, CHIP_FAMILY_TURKS,"AMD Radeon HD 5570", kNull},
{ 0x6760,0x00031179, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450M", kIpomoea},
{ 0x6760,0x04C11028, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450M", kIpomoea},
{ 0x6760,0x04CA1028, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450M", kIpomoea},
{ 0x6760,0x04CC1028, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450M", kIpomoea},
{ 0x6760,0x101C1043, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450M", kIpomoea},
{ 0x6760,0x165A103C, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6470M", kIpomoea},
{ 0x6760,0x167D103C, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6470M", kIpomoea},
{ 0x6760,0x1CB21043, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6470M", kIpomoea},
{ 0x6760,0x20011043, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6470M", kIpomoea},
{ 0x6760,0x85171043, CHIP_FAMILY_CAICOS,"AMD Radeon HD 7470M", kNull},
{ 0x6778,0x00241019, CHIP_FAMILY_CAICOS,"AMD Radeon HD 7470", kBulrushes}, // Elitegroup
{ 0x6778,0x00271019, CHIP_FAMILY_CAICOS,"AMD Radeon HD 8470", kBulrushes}, // Elitegroup
{ 0x6778,0x21201028, CHIP_FAMILY_CAICOS,"AMD Radeon HD 7470", kBulrushes}, // Dell
{ 0x6778,0xB4911462, CHIP_FAMILY_CAICOS,"AMD Radeon HD 8470", kBulrushes}, // MSi
{ 0x6778,0xB4921462, CHIP_FAMILY_CAICOS,"AMD Radeon HD 8470", kBulrushes}, // MSi
{ 0x6778,0xB4931462, CHIP_FAMILY_CAICOS,"AMD Radeon HD 8470", kBulrushes}, // MSi
{ 0x6779,0x00001002, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450", kBulrushes},
{ 0x6779,0x03DA1043, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450", kBulrushes},
{ 0x6779,0x03DC1043, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450", kBulrushes},
{ 0x6779,0x20121787, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450", kBulrushes},
{ 0x6779,0x21201028, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450", kBulrushes},
{ 0x6779,0x21251462, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450", kBulrushes},
{ 0x6779,0x22031458, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450", kBulrushes},
{ 0x6779,0x22041458, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450", kBulrushes},
{ 0x6779,0x23111787, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450", kBulrushes},
{ 0x6779,0x32001682, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450", kBulrushes},
{ 0x6779,0x64501092, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450", kBulrushes},
{ 0x6779,0x909D1B0A, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450", kBulrushes},
{ 0x6779,0xE164174B, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450", kIpomoea},
{ 0x6779,0xE180174B, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450", kPithecia},
{ 0x6779,0xE190174B, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450", kBulrushes},
{ 0x6779,0xE199174B, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450", kBulrushes},
/* Southen Islands */
{ 0x6798,0x04181043, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970", kAji },
{ 0x6798,0x041C1043, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970", kAji },
{ 0x6798,0x04201043, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970", kAji },
{ 0x6798,0x04421043, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970", kAji },
{ 0x6798,0x04441043, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970", kAji },
{ 0x6798,0x04461043, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970", kAji },
{ 0x6798,0x04481043, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970", kAji },
{ 0x6798,0x044A1043, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970", kAji },
{ 0x6798,0x044C1043, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970", kAji },
{ 0x6798,0x044E1043, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970", kAji },
{ 0x6798,0x0B001002, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970", kAji },
{ 0x6798,0x201C1787, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970", kAji }, // 7990 ???
{ 0x6798,0x23171787, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970", kAji },
{ 0x6798,0x254D1458, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970", kAji },
{ 0x6798,0x27701462, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970", kAji },
{ 0x6798,0x30001002, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970", kAji },
{ 0x6798,0x30001787, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970", kAji },
{ 0x6798,0x32101682, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970", kAji },
{ 0x6798,0x32111682, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970", kAji },
{ 0x6798,0x32121682, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970", kAji },
{ 0x6798,0x32131682, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970", kAji },
{ 0x6798,0x99991043, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7990", kAji }, // Asus
{ 0x6798,0xE208174B, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970", kAji },
{ 0x679A,0x04241043, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950", kAji },
{ 0x679A,0x04261043, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950", kAji },
{ 0x679A,0x0B001002, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950", kAji },
{ 0x679A,0x0B011002, CHIP_FAMILY_TAHITI,"AMD Radeon HD 8900", kAji },
{ 0x679A,0x201C1787, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950", kAji },
{ 0x679A,0x23161787, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950", kAji },
{ 0x679A,0x254C1458, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950", kAji },
{ 0x679A,0x27601462, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950", kAji },
{ 0x679A,0x27711462, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950", kAji },
{ 0x679A,0x30001002, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950", kAji },
{ 0x679A,0x30001462, CHIP_FAMILY_TAHITI,"AMD Radeon HD 8950", kAji },
{ 0x679A,0x3000174B, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950", kAji },
{ 0x679A,0x30001787, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950", kAji },
{ 0x679A,0x32121682, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950", kAji },
{ 0x679A,0x32201682, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950", kAji },
{ 0x679A,0x32211682, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950", kAji },
{ 0x679A,0x32221682, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950", kAji },
{ 0x679A,0x6616103C, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950", kAji },
{ 0x679A,0x30001002, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950", kAji },
{ 0x679A,0x7950174B, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950", kAji },
{ 0x679A,0xE207174B, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950", kAji },
{ 0x679A,0xE208174B, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950", kAji },
{ 0x6800,0x03711558, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970M", kDashimaki},
{ 0x6800,0x05501028, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970M", kDashimaki},
{ 0x6800,0x05511028, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970M", kDashimaki},
{ 0x6800,0x05544028, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970M", kDashimaki},
{ 0x6800,0x057B1028, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970M", kDashimaki},
{ 0x6800,0x05861028, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970M", kDashimaki},
{ 0x6800,0x05871028, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970M", kDashimaki},
{ 0x6800,0x05881028, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970M", kDashimaki},
{ 0x6818,0x042F1043, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7870", kAji},
{ 0x6818,0x04311043, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7870", kAji},
{ 0x6818,0x0B041002, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7870", kAji},
{ 0x6818,0x0B051002, CHIP_FAMILY_TAHITI,"AMD Radeon HD 8800", kAji},
{ 0x6818,0x201C1787, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7870", kAji},
{ 0x6818,0x23211787, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7870", kAji},
{ 0x6818,0x25541458, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7870", kAji},
{ 0x6818,0x27401462, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7870", kAji},
{ 0x6818,0x32501682, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7870", kChutoro},
{ 0x6818,0x32511682, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7870", kAji},
{ 0x6818,0x7870174B, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7870", kAji},
{ 0x6818,0x8B04174B, CHIP_FAMILY_TAHITI,"AMD Radeon HD 8860", kAji},
{ 0x6818,0xE217174B, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7870", kAji},
{ 0x6819,0x042C1043, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7850", kAji}, // Asus
{ 0x6819,0x04311043, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7850", kAji}, // Asus
{ 0x6819,0x04331043, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7850", kAji}, // Asus
{ 0x6819,0x043A1043, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7850", kAji}, // Asus
{ 0x6819,0x045B1043, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7850", kAji}, // Asus
{ 0x6819,0x0B041002, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7850", kAji}, // ATI
{ 0x6819,0x201C1787, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7850", kAji}, // HIS
{ 0x6819,0x23201787, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7850", kAji}, // HIS
{ 0x6819,0x25531458, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7850", kAji}, // Gigabyte
{ 0x6819,0x27301462, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7850", kAji}, // MSI
{ 0x6819,0x27311462, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7850", kAji}, // MSI
{ 0x6819,0x27321462, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7850", kAji}, // MSI
{ 0x6819,0x32601682, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7850", kAji}, // XFX
{ 0x6819,0x32621682, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7850", kAji}, // XFX
{ 0x6819,0x32641682, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7850", kAji}, // XFX
{ 0x6819,0xE218174B, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7850", kAji}, // Sapphire
{ 0x6819,0xE221174B, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7850", kAji}, // Sapphire
{ 0x682F,0x15271043, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7700M", kAji},
{ 0x682F,0x1831103C, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7730M", kAji},
{ 0x682F,0x1832103C, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7730M", kAji},
{ 0x682F,0x1834103C, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7730M", kAji},
{ 0x682F,0x18A7103C, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7730M", kAji},
{ 0x682F,0xC0DA144D, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7730M", kAji},
{ 0x683D,0x00301002, CHIP_FAMILY_TAHITI,"AMD Radeon HD 8760", kAji}, // VERDE?
{ 0x683D,0x00301019, CHIP_FAMILY_TAHITI,"AMD Radeon HD 8760", kAji}, // VERDE?
{ 0x683D,0x04211043, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7770", kAji},
{ 0x683D,0x23041002, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7700", kAji},
{ 0x683D,0x25561458, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7770", kAji},
{ 0x683D,0x27101462, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7770", kAji},
{ 0x683D,0x2B301002, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7770", kAji},
{ 0x683D,0x32331682, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7770", kAji},
{ 0x683D,0x6886103C, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7700", kAji},
{ 0x683D,0x6890103C, CHIP_FAMILY_TAHITI,"AMD Radeon HD 8760", kAji}, // VERDE?
{ 0x683D,0xE214174B, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7770", kAji},
{ 0x683F,0x04231043, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7750", kChutoro },
{ 0x683F,0x04271043, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7750", kChutoro },
{ 0x683F,0x04591043, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7750", kChutoro },
{ 0x683F,0x200B1787, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7750", kChutoro },
{ 0x683F,0x23181787, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7750", kChutoro },
{ 0x683F,0x25511458, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7750", kChutoro },
{ 0x683F,0x27921462, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7750", kChutoro },
{ 0x683F,0x2B301002, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7750", kChutoro },
{ 0x683F,0x32411682, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7750", kChutoro },
{ 0x683F,0x32421682, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7750", kChutoro },
{ 0x683F,0x32451682, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7750", kChutoro },
{ 0x683F,0xE2131019, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7750", kChutoro },
{ 0x683F,0xE213174B, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7750", kChutoro },
{ 0x683F,0xE215174B, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7750", kChutoro },
{ 0x6840,0x01241002, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7600M", kPondweed },
{ 0x6840,0x01341002, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7600M", kPondweed },
{ 0x6840,0x050E1025, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x050F1025, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x05131025, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x05141025, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x056D1025, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x059A1025, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x059B1025, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x059E1025, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x06001025, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x06061025, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x06961025, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x06971025, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x06981025, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x06991025, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x100A1043, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x104B1043, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x10DC1043, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x1813103C, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7590M", kPondweed },
{ 0x6840,0x182F103C, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x1830103C, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x1835103C, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x183A103C, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x183C103C, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x183E103C, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x1840103C, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x1842103C, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x1844103C, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x1848103C, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x184A103C, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x184C103C, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x1895103C, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x1897103C, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x18A5103C, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x18A7103C, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x18F4103C, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x21211043, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x21221043, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x21231043, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x21251043, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x21271043, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x397017AA, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0x397B17AA, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0xC0C5144D, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 6000M", kPondweed },
{ 0x6840,0xC0CE144D, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0xC0DA144D, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0xFB111179, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0xFB221179, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0xFB231179, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0xFB2C1179, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0xFB311179, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0xFB321179, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0xFB381179, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0xFB391179, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0xFB3A1179, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0xFB401179, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0xFB411179, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0xFB471179, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0xFB481179, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0xFB511179, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0xFB521179, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0xFB531179, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0xFB811179, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0xFB821179, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0xFB831179, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0xFC561179, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0xFCD41179, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
{ 0x6840,0xFCEE1179, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M", kPondweed },
/*old series*/
{ 0x5D48,0x00000000, CHIP_FAMILY_R420,"ATI Radeon HD Mobile ", kNull },
{ 0x5D49,0x00000000, CHIP_FAMILY_R420,"ATI Radeon HD Mobile ", kNull },
{ 0x5D4A,0x00000000, CHIP_FAMILY_R420,"ATI Radeon HD Mobile ", kNull },
{ 0x5D4C,0x00000000, CHIP_FAMILY_R420,"ATI Radeon HD Desktop ", kNull },
{ 0x5D4D,0x00000000, CHIP_FAMILY_R420,"ATI Radeon HD Desktop ", kNull },
{ 0x5D4E,0x00000000, CHIP_FAMILY_R420,"ATI Radeon HD Desktop ", kNull },
{ 0x5D4F,0x00000000, CHIP_FAMILY_R420,"ATI Radeon HD Desktop ", kNull },
{ 0x5D50,0x00000000, CHIP_FAMILY_R420,"ATI Radeon HD Desktop ", kNull },
{ 0x5D52,0x00000000, CHIP_FAMILY_R420,"ATI Radeon HD Desktop ", kNull },
{ 0x5D57,0x00000000, CHIP_FAMILY_R420,"ATI Radeon HD Desktop ", kNull },
{ 0x5E48,0x00000000, CHIP_FAMILY_RV410,"ATI Radeon HD Desktop ", kNull },
{ 0x5E4A,0x00000000, CHIP_FAMILY_RV410,"ATI Radeon HD Desktop ", kNull },
{ 0x5E4B,0x00000000, CHIP_FAMILY_RV410,"ATI Radeon HD Desktop ", kNull },
{ 0x5E4C,0x00000000, CHIP_FAMILY_RV410,"ATI Radeon HD Desktop ", kNull },
{ 0x5E4D,0x00000000, CHIP_FAMILY_RV410,"ATI Radeon HD Desktop ", kNull },
{ 0x5E4F,0x00000000, CHIP_FAMILY_RV410,"ATI Radeon HD Desktop ", kNull },
{ 0x7100,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Desktop ", kNull },
{ 0x7101,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Mobile ", kNull },
{ 0x7102,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Mobile ", kNull },
{ 0x7103,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Mobile ", kNull },
{ 0x7104,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Desktop ", kNull },
{ 0x7105,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Desktop ", kNull },
{ 0x7106,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Mobile ", kNull },
{ 0x7108,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Desktop ", kNull },
{ 0x7109,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Desktop ", kNull },
{ 0x710A,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Desktop ", kNull },
{ 0x710B,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Desktop ", kNull },
{ 0x710C,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Desktop ", kNull },
{ 0x710E,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Desktop ", kNull },
{ 0x710F,0x00000000, CHIP_FAMILY_R520,"ATI Radeon HD Desktop ", kNull },
{ 0x7140,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ", kCaretta },
{ 0x7141,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ", kCaretta },
{ 0x7142,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ", kCaretta },
{ 0x7143,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ", kCaretta },
{ 0x7144,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ", kCaretta },
{ 0x7145,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ", kCaretta },
{ 0x7146,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ", kCaretta },
{ 0x7147,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ", kCaretta },
{ 0x7149,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ", kCaretta },
{ 0x714A,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ", kCaretta },
{ 0x714B,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ", kCaretta },
{ 0x714C,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ", kCaretta },
{ 0x714D,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ", kCaretta },
{ 0x714E,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ", kCaretta },
{ 0x714F,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ", kCaretta },
{ 0x7151,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ", kCaretta },
{ 0x7152,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ", kCaretta },
{ 0x7153,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ", kCaretta },
{ 0x715E,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ", kCaretta },
{ 0x715F,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ", kCaretta },
{ 0x7180,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ", kCaretta },
{ 0x7181,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ", kCaretta },
{ 0x7183,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ", kCaretta },
{ 0x7186,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ", kCaretta },
{ 0x7187,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ", kCaretta },
{ 0x7188,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ", kCaretta },
{ 0x718A,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ", kCaretta },
{ 0x718B,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ", kCaretta },
{ 0x718C,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ", kCaretta },
{ 0x718D,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ", kCaretta },
{ 0x718F,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ", kCaretta },
{ 0x7193,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ", kCaretta },
{ 0x7196,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ", kCaretta },
{ 0x719B,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ", kCaretta },
{ 0x719F,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ", kCaretta },
{ 0x71C0,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Desktop ", kWormy },
{ 0x71C1,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Desktop ", kWormy },
{ 0x71C2,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Desktop ", kWormy },
{ 0x71C3,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Desktop ", kWormy },
{ 0x71C4,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Mobile ", kWormy },
{ 0x71C5,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD 1600 Mobile ", kWormy },
{ 0x71C6,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Desktop ", kWormy },
{ 0x71C7,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Desktop ", kWormy },
{ 0x71CD,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Desktop ", kWormy },
{ 0x71CE,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Desktop ", kWormy },
{ 0x71D2,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Desktop ", kWormy },
{ 0x71D4,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Mobile ", kWormy },
{ 0x71D5,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Mobile ", kWormy },
{ 0x71D6,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Mobile ", kWormy },
{ 0x71DA,0x00000000, CHIP_FAMILY_RV530,"ATI Radeon HD Desktop ", kWormy },
{ 0x71DE,0x00000000, CHIP_FAMILY_RV530,"ASUS M66 ATI Radeon Mobile ", kWormy },
{ 0x7200,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Desktop ", kWormy },
{ 0x7210,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ", kWormy },
{ 0x7211,0x00000000, CHIP_FAMILY_RV515,"ATI Radeon HD Mobile ", kWormy },
{ 0x7240,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ", kAlopias },
{ 0x7243,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ", kAlopias },
{ 0x7244,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ", kAlopias },
{ 0x7245,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ", kAlopias },
{ 0x7246,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ", kAlopias },
{ 0x7247,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ", kAlopias },
{ 0x7248,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ", kAlopias },
{ 0x7249,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ", kAlopias },
{ 0x724A,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ", kAlopias },
{ 0x724B,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ", kAlopias },
{ 0x724C,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ", kAlopias },
{ 0x724D,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ", kAlopias },
{ 0x724E,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ", kAlopias },
{ 0x724F,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Desktop ", kAlopias },
{ 0x7280,0x00000000, CHIP_FAMILY_RV570,"ATI Radeon HD X1950 Pro ", kAlopias },
{ 0x7281,0x00000000, CHIP_FAMILY_RV560,"ATI Radeon HD Desktop ", kAlopias },
{ 0x7283,0x00000000, CHIP_FAMILY_RV560,"ATI Radeon HD Desktop ", kAlopias },
{ 0x7284,0x00000000, CHIP_FAMILY_R580,"ATI Radeon HD Mobile ", kAlopias },
{ 0x7287,0x00000000, CHIP_FAMILY_RV560,"ATI Radeon HD Desktop ", kAlopias },
{ 0x7288,0x00000000, CHIP_FAMILY_RV570,"ATI Radeon HD Desktop ", kAlopias },
{ 0x7289,0x00000000, CHIP_FAMILY_RV570,"ATI Radeon HD Desktop ", kAlopias },
{ 0x728B,0x00000000, CHIP_FAMILY_RV570,"ATI Radeon HD Desktop ", kAlopias },
{ 0x728C,0x00000000, CHIP_FAMILY_RV570,"ATI Radeon HD Desktop ", kAlopias },
{ 0x7290,0x00000000, CHIP_FAMILY_RV560,"ATI Radeon HD Desktop ", kAlopias },
{ 0x7291,0x00000000, CHIP_FAMILY_RV560,"ATI Radeon HD Desktop ", kAlopias },
{ 0x7293,0x00000000, CHIP_FAMILY_RV560,"ATI Radeon HD Desktop ", kAlopias },
{ 0x7297,0x00000000, CHIP_FAMILY_RV560,"ATI Radeon HD Desktop ", kAlopias },
/* IGP */
{ 0x791E,0x00000000, CHIP_FAMILY_RS690,"ATI Radeon IGP ", kNull },
{ 0x791F,0x00000000, CHIP_FAMILY_RS690,"ATI Radeon IGP ", kNull },
{ 0x796C,0x00000000, CHIP_FAMILY_RS740,"ATI Radeon IGP ", kNull },
{ 0x796D,0x00000000, CHIP_FAMILY_RS740,"ATI Radeon IGP ", kNull },
{ 0x796E,0x00000000, CHIP_FAMILY_RS740,"ATI Radeon IGP ", kNull },
{ 0x796F,0x00000000, CHIP_FAMILY_RS740,"ATI Radeon IGP ", kNull },
/* standard/default models */
{ 0x9400,0x00000000, CHIP_FAMILY_R600,"ATI Radeon HD 2900 XT", kNull},
{ 0x9401,0x00000000, CHIP_FAMILY_R600,"ATI Radeon HD 2900 GT", kNull},
{ 0x9402,0x00000000, CHIP_FAMILY_R600,"ATI Radeon HD 2900 GT", kNull},
{ 0x9403,0x00000000, CHIP_FAMILY_R600,"ATI Radeon HD 2900 GT", kNull},
{ 0x9405,0x00000000, CHIP_FAMILY_R600,"ATI Radeon HD 2900 GT", kNull},
{ 0x940A,0x00000000, CHIP_FAMILY_R600,"ATI Radeon HD 2900 GT", kNull},
{ 0x940B,0x00000000, CHIP_FAMILY_R600,"ATI Radeon HD 2900 GT", kNull},
{ 0x940F,0x00000000, CHIP_FAMILY_R600,"ATI Radeon HD 2900 GT", kNull},
{ 0x9440,0x00000000, CHIP_FAMILY_RV770,"ATI Radeon HD 4870 ", kMotmot},
{ 0x9441,0x00000000, CHIP_FAMILY_RV770,"ATI Radeon HD 4870 X2", kMotmot},
{ 0x9442,0x00000000, CHIP_FAMILY_RV770,"ATI Radeon HD 4850 Series", kMotmot},
{ 0x9443,0x00000000, CHIP_FAMILY_RV770,"ATI Radeon HD 4850 X2", kMotmot},
{ 0x9444,0x00000000, CHIP_FAMILY_RV770,"ATI FirePro V8750 (FireGL)", kMotmot},
{ 0x9446,0x00000000, CHIP_FAMILY_RV770,"ATI FirePro V7770 (FireGL)", kMotmot},
{ 0x9447,0x00000000, CHIP_FAMILY_RV770,"ATI FirePro V8700 Duo (FireGL)", kMotmot},
{ 0x944A,0x00000000, CHIP_FAMILY_RV770,"ATI Mobility Radeon HD 4850", kMotmot},
{ 0x944B,0x00000000, CHIP_FAMILY_RV770,"ATI Mobility Radeon HD 4850 X2", kMotmot},
{ 0x944C,0x00000000, CHIP_FAMILY_RV770,"ATI Radeon HD 4830 Series", kMotmot},
{ 0x944E,0x00000000, CHIP_FAMILY_RV770,"ATI Radeon HD 4810 Series", kMotmot},
{ 0x9450,0x00000000, CHIP_FAMILY_RV770,"AMD FireStream 9270", kMotmot},
{ 0x9452,0x00000000, CHIP_FAMILY_RV770,"AMD FireStream 9250", kMotmot},
{ 0x9456,0x00000000, CHIP_FAMILY_RV770,"ATI FirePro V8700 (FireGL)", kMotmot},
{ 0x945A,0x00000000, CHIP_FAMILY_RV770,"ATI Mobility Radeon HD 4870", kMotmot},
{ 0x9460,0x00000000, CHIP_FAMILY_RV770,"ATI Radeon HD 4800 Series", kMotmot},
{ 0x9462,0x00000000, CHIP_FAMILY_RV770,"ATI Radeon HD 4800 Series", kMotmot},
{ 0x9480,0x00000000, CHIP_FAMILY_RV730,"ATI Radeon HD 4650 Series", kGliff},
{ 0x9487,0x00000000, CHIP_FAMILY_RV730,"ATI Radeon HD Series", kGliff},
{ 0x9488,0x00000000, CHIP_FAMILY_RV730,"ATI Radeon HD 4650 Series", kGliff},
{ 0x9489,0x00000000, CHIP_FAMILY_RV730,"ATI Radeon HD Series", kGliff},
{ 0x948A,0x00000000, CHIP_FAMILY_RV730,"ATI Radeon HD Series", kGliff},
{ 0x948F,0x00000000, CHIP_FAMILY_RV730,"ATI Radeon HD Series", kGliff},
{ 0x9490,0x00000000, CHIP_FAMILY_RV730,"ATI Radeon HD 4710 Series", kGliff},
{ 0x9491,0x00000000, CHIP_FAMILY_RV730,"ATI Radeon HD 4600 Series", kGliff},
{ 0x9495,0x00000000, CHIP_FAMILY_RV730,"ATI Radeon HD 4650 Series", kGliff},
{ 0x9498,0x00000000, CHIP_FAMILY_RV730,"ATI Radeon HD 4710 Series", kGliff},
{ 0x949C,0x00000000, CHIP_FAMILY_RV730,"ATI FirePro V7750 (FireGL)", kGliff},
{ 0x949E,0x00000000, CHIP_FAMILY_RV730,"ATI FirePro V5700 (FireGL)", kGliff},
{ 0x949F,0x00000000, CHIP_FAMILY_RV730,"ATI FirePro V3750 (FireGL)", kGliff},
{ 0x94A0,0x00000000, CHIP_FAMILY_RV740,"ATI Radeon HD 4830M", kFlicker},
{ 0x94A1,0x00000000, CHIP_FAMILY_RV740,"ATI Radeon HD 4860M", kFlicker},
{ 0x94A3,0x00000000, CHIP_FAMILY_RV740,"ATI FirePro M7740", kFlicker},
{ 0x94B1,0x00000000, CHIP_FAMILY_RV740,"ATI Radeon HD", kFlicker},
{ 0x94B3,0x00000000, CHIP_FAMILY_RV740,"ATI Radeon HD 4770", kFlicker},
{ 0x94B4,0x00000000, CHIP_FAMILY_RV740,"ATI Radeon HD 4700 Series", kFlicker},
{ 0x94B5,0x00000000, CHIP_FAMILY_RV740,"ATI Radeon HD 4770", kFlicker},
{ 0x94B9,0x00000000, CHIP_FAMILY_RV740,"ATI Radeon HD", kFlicker},
{ 0x94C0,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD Series", kIago},
{ 0x94C1,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 Series", kIago},
{ 0x94C3,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD 2350 Series", kIago},
{ 0x94C4,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 Series", kIago},
{ 0x94C5,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 Series", kIago},
{ 0x94C6,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 Series", kIago},
{ 0x94C7,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD 2350", kIago},
{ 0x94C8,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 Series", kIago},
{ 0x94C9,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 Series", kIago},
{ 0x94CB,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 Series", kIago},
{ 0x94CC,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 Series", kIago},
{ 0x94CD,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD 2400 PRO Series", kIago},
{ 0x9500,0x00000000, CHIP_FAMILY_RV670,"ATI Radeon HD 3800 Series", kMegalodon},
{ 0x9501,0x00000000, CHIP_FAMILY_RV670,"ATI Radeon HD 3690 Series", kMegalodon},
{ 0x9504,0x00000000, CHIP_FAMILY_RV670,"ATI Radeon HD 3850M Series", kMegalodon},
{ 0x9505,0x00000000, CHIP_FAMILY_RV670,"ATI Radeon HD 3800 Series", kMegalodon},
{ 0x9506,0x00000000, CHIP_FAMILY_RV670,"ATI Radeon HD 3850 X2 M Series", kMegalodon},
{ 0x9507,0x00000000, CHIP_FAMILY_RV670,"ATI Radeon HD 3830", kMegalodon},
{ 0x9508,0x00000000, CHIP_FAMILY_RV670,"ATI Radeon HD 3870M Series", kMegalodon},
{ 0x9509,0x00000000, CHIP_FAMILY_RV670,"ATI Radeon HD 3870 X2 MSeries", kMegalodon},
{ 0x950F,0x00000000, CHIP_FAMILY_RV670,"ATI Radeon HD 3870 X2", kMegalodon},
{ 0x9511,0x00000000, CHIP_FAMILY_RV670,"ATI Radeon HD 3850 X2", kMegalodon},
{ 0x9513,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 3850 X2", kMegalodon},
{ 0x9515,0x00000000, CHIP_FAMILY_RV670,"ATI Radeon HD 3850 Series", kMegalodon},
{ 0x9517,0x00000000, CHIP_FAMILY_RV670,"ATI Radeon HD Series", kMegalodon},
{ 0x9519,0x00000000, CHIP_FAMILY_RV670,"AMD FireStream 9170", kMegalodon},
{ 0x9540,0x00000000, CHIP_FAMILY_RV710,"ATI Radeon HD 4550", kFlicker},
{ 0x9541,0x00000000, CHIP_FAMILY_RV710,"ATI Radeon HD", kFlicker},
{ 0x9542,0x00000000, CHIP_FAMILY_RV710,"ATI Radeon HD", kFlicker},
{ 0x954E,0x00000000, CHIP_FAMILY_RV710,"ATI Radeon HD", kFlicker},
{ 0x954F,0x00000000, CHIP_FAMILY_RV710,"ATI Radeon HD 4350", kFlicker},
{ 0x9552,0x00000000, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4300/4500 Series",kShrike},
{ 0x9553,0x00000000, CHIP_FAMILY_RV710,"ATI Mobility Radeon HD 4500M/5100M Series",kShrike},
{ 0x9555,0x00000000, CHIP_FAMILY_RV710,"ATI Radeon HD4300/HD4500 series",kShrike},
{ 0x9557,0x00000000, CHIP_FAMILY_RV710,"ATI FirePro RG220", kFlicker},
{ 0x955F,0x00000000, CHIP_FAMILY_RV710,"ATI Radeon HD 4330M series", kFlicker},
{ 0x9580,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD Series", kHypoprion},
{ 0x9581,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 3600 Series",kHypoprion},
{ 0x9583,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 3600 Series",kHypoprion},
{ 0x9586,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 2600 XT Series",kHypoprion},
{ 0x9587,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 2600 Pro Series", kHypoprion},
{ 0x9588,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 2600 XT", kHypoprion},
{ 0x9589,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 3610 Series",kHypoprion},
{ 0x958A,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 2600 X2 Series",kLamna},
{ 0x9581,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 3600 Series",kNull},
{ 0x9583,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 3600 Series",kNull},
{ 0x9588,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 2600 XT Series",kNull},
{ 0x9589,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 3610 Series",kNull},
{ 0x9591,0x00000000, CHIP_FAMILY_RV635,"ATI Radeon HD 3600 Series",kNull},
{ 0x958B,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 2600 X2 Series",kLamna},
{ 0x958C,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 2600 X2 Series",kLamna},
{ 0x958D,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 2600 X2 Series",kLamna},
{ 0x958E,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 2600 X2 Series",kLamna},
{ 0x958F,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD Series", kHypoprion},
{ 0x9591,0x00000000, CHIP_FAMILY_RV635,"ATI Radeon HD 3600 Series",kMegalodon},
{ 0x9598,0x00000000, CHIP_FAMILY_RV630,"ATI Radeon HD 3600 Series",kMegalodon},
{ 0x95C0,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD 3400 Series",kIago},
{ 0x95C5,0x00000000, CHIP_FAMILY_RV610,"ATI Radeon HD 3400 Series",kIago},
{ 0x95C0,0x00000000, CHIP_FAMILY_RV620,"ATI Radeon HD 3550 Series",kIago},
{ 0x95C4,0x00000000, CHIP_FAMILY_RV620,"ATI Radeon HD 3470 Series",kIago},
{ 0x95C5,0x00000000, CHIP_FAMILY_RV620,"ATI Radeon HD 3450 Series",kIago},
/* IGP */
{ 0x9610,0x00000000, CHIP_FAMILY_RS780,"ATI Radeon HD 3200 Graphics",kNull},
{ 0x9611,0x00000000, CHIP_FAMILY_RS780,"ATI Radeon 3100 Graphics",kNull},
{ 0x9611,0x00000000, CHIP_FAMILY_RS780,"ATI Radeon 3100 Graphics", kNull},
{ 0x9614,0x00000000, CHIP_FAMILY_RS780,"ATI Radeon HD 3300 Graphics",kNull},
{ 0x9616,0x00000000, CHIP_FAMILY_RS780,"ATI Radeon 3000 Graphics",kNull},
{ 0x9616,0x00000000, CHIP_FAMILY_RS780,"ATI Radeon 3000 Graphics", kNull},
{ 0x9710,0x00000000, CHIP_FAMILY_RS880,"ATI Radeon HD 4200 Series",kNull},
{ 0x9714,0x00000000, CHIP_FAMILY_RS880,"ATI Radeon HD 4290 Series",kNull},
{ 0x9715,0x00000000, CHIP_FAMILY_RS880,"ATI Radeon HD 4250 Series",kNull},
{ 0x9723,0x00000000, CHIP_FAMILY_RS880,"ATI Radeon HD 5450 Series",kNull},
{ 0x9802,0x00000000, CHIP_FAMILY_RS880,"ATI Radeon HD 6310 Series",kNull},
{ 0x9803,0x00000000, CHIP_FAMILY_RS880,"ATI Radeon HD 6310 Series",kNull},
{ 0x9804,0x00000000, CHIP_FAMILY_RS880,"ATI Radeon HD 6310 Series",kNull},
{ 0x9805,0x00000000, CHIP_FAMILY_RS880,"ATI Radeon HD 6250 Series",kNull},
{ 0x9806,0x00000000, CHIP_FAMILY_RS880,"ATI Radeon HD 6320 Series",kNull},
/* Evergreen */
{ 0x688D,0x00000000, CHIP_FAMILY_CYPRESS,"AMD FireStream 9350 Series",kUakari},
{ 0x6898,0x00000000, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5800 Series",kUakari},
{ 0x6899,0x00000000, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5800 Series",kUakari},
//{ 0x689B,0x00000000, CHIP_FAMILY_???,"AMD Radeon HD 6800 Series",kNull},
{ 0x689C,0x00000000, CHIP_FAMILY_HEMLOCK,"ATI Radeon HD 5900 Series",kUakari},
{ 0x689E,0x00000000, CHIP_FAMILY_CYPRESS,"ATI Radeon HD 5800 Series",kUakari},
{ 0x68A0,0x00000000, CHIP_FAMILY_CYPRESS,"ATI Mobility Radeon HD 5800 Series",kNomascus},
{ 0x68A1,0x00000000,CHIP_FAMILY_CYPRESS,"ATI Mobility Radeon HD 5800 Series",kNomascus},
{ 0x68A8,0x00000000, CHIP_FAMILY_CYPRESS,"AMD Radeon HD 6800M Series",kUakari},
{ 0x68B8,0x00000000, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5700/6700 Series",kVervet},
{ 0x68B9,0x00000000, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5600/5700 Series",kVervet},
{ 0x68BA,0x00000000, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6700 Series",kVervet},
{ 0x68BE,0x00000000, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5700/6750 Series",kVervet},
{ 0x68BF,0x00000000, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6700 Series",kVervet},
{ 0x68C0,0x00000000, CHIP_FAMILY_REDWOOD,"AMD Radeon HD 6570M/5700 Series",kNull},
{ 0x68C1,0x00000000, CHIP_FAMILY_REDWOOD,"AMD Radeon HD 6500M/5600/5700 Series",kNull},
{ 0x68D8,0x00000000, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5600 Series",kBaboon},
{ 0x689E,0x00000000, CHIP_FAMILY_HEMLOCK,"ATI Radeon HD 5800 Series",kUakari},
{ 0x68A0,0x00000000, CHIP_FAMILY_JUNIPER,"ATI Mobility Radeon HD 5800 Series", kNomascus}, // CHIP_FAMILY_BROADWAY ??
{ 0x68A1,0x00000000, CHIP_FAMILY_JUNIPER,"ATI Mobility Radeon HD 5800 Series", kNomascus}, // CHIP_FAMILY_BROADWAY ??
{ 0x68A8,0x00000000, CHIP_FAMILY_JUNIPER,"AMD Mobility Radeon HD 6800 Series", kNomascus },
{ 0x68A9,0x00000000, CHIP_FAMILY_JUNIPER,"ATI FirePro V5800 (FireGL)",kNull},
{ 0x68B0,0x00000000, CHIP_FAMILY_CYPRESS,"ATI Mobility Radeon HD 5800 Series", kHoolock }, // CHIP_FAMILY_BROADWAY ??
{ 0x68B1,0x00000000, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770 Series",kHoolock },
{ 0x68B8,0x00000000, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5700 Series",kHoolock },
{ 0x68B9,0x00000000, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5600 Series",kHoolock },
{ 0x68BA,0x00000000, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 6700 Series",kHoolock },
{ 0x68BE,0x00000000, CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5700 Series",kHoolock },
{ 0x68BF,0x00000000, CHIP_FAMILY_JUNIPER,"AMD Radeon HD 6700 Series",kHoolock },
{ 0x68C0,0x00000000, CHIP_FAMILY_REDWOOD,"AMD Radeon HD 6570M/5700 Series",kBaboon},
{ 0x68C1,0x00000000, CHIP_FAMILY_REDWOOD,"AMD Radeon HD 6500M/5600/5700 Series",kBaboon},
{ 0x68C8,0x00000000, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5650 Series",kVervet},
{ 0x68C9,0x00000000, CHIP_FAMILY_REDWOOD,"ATI FirePro V3800 (FireGL)",kBaboon},
{ 0x68D8,0x00000000, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5670 Series",kBaboon},
{ 0x68D9,0x00000000, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5500/5600 Series",kBaboon},
{ 0x68DA,0x00000000, CHIP_FAMILY_REDWOOD,"ATI Radeon HD 5500 Series",kBaboon},
{ 0x68E0,0x00000000, CHIP_FAMILY_CEDAR,"ATI Mobility Radeon HD 5400 Series",kEulemur},
{ 0x68E1,0x00000000, CHIP_FAMILY_CEDAR,"ATI Mobility Radeon HD 5400 Series",kEulemur},
{ 0x68E4,0x00000000, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6300M Series",kNull},
{ 0x68F9,0x00000000, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5400 Series",kNull},
//{ 0x68DE,0x00000000, CHIP_FAMILY_REDWOOD,"ATI Radeon HD ??? Series", kNull},
{ 0x68E0,0x00000000, CHIP_FAMILY_REDWOOD,"ATI Mobility Radeon HD 5400 Series", kEulemur},
{ 0x68E1,0x00000000, CHIP_FAMILY_CEDAR, "ATI Mobility Radeon HD 5400 Series", kEulemur},
{ 0x68E4,0x00000000, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6370M Series",kEulemur },
{ 0x68E5,0x00000000, CHIP_FAMILY_CEDAR,"ATI Radeon HD 6300M Series",kEulemur },
//{ 0x68E8,0x00000000, CHIP_FAMILY_CEDAR,"ATI Radeon HD ??? Series", kNull},
//{ 0x68E9,0x00000000, CHIP_FAMILY_CEDAR,"ATI Radeon HD ??? Series", kNull},
//{ 0x68F8,0x00000000, CHIP_FAMILY_CEDAR,"ATI Radeon HD ??? Series", kNull},
{ 0x68F9,0x00000000, CHIP_FAMILY_CEDAR,"ATI Radeon HD 5470 Series",kEulemur},
{ 0x68FA,0x00000000, CHIP_FAMILY_CEDAR,"ATI Radeon HD 7300 Series",kNull},
//{ 0x68FE,0x00000000, CHIP_FAMILY_CEDAR,"ATI Radeon HD ??? Series", kNull},
/* Northen Islands */
{ 0x6718,0x00000000, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970 Series",kNull},
{ 0x6718,0x00000000, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970 Series",kLotus},
{ 0x6719,0x00000000, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950 Series",kGibba},
{ 0x6720,0x00000000, CHIP_FAMILY_BARTS,"AMD Radeon HD 6900M Series",kNull},
{ 0x671C,0x00000000, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6970 Series",kLotus},
{ 0x671D,0x00000000, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6950 Series",kLotus},
{ 0x671F,0x00000000, CHIP_FAMILY_CAYMAN,"AMD Radeon HD 6930 Series",kLotus},
{ 0x6720,0x00000000, CHIP_FAMILY_BARTS,"AMD Radeon HD 6900M Series",kFanwort},
{ 0x6722,0x00000000, CHIP_FAMILY_BARTS,"AMD Radeon HD 6900M Series",kFanwort},
{ 0x6729,0x00000000, CHIP_FAMILY_BARTS,"AMD Radeon HD 6900M Series",kFanwort},
{ 0x6738,0x00000000, CHIP_FAMILY_BARTS,"AMD Radeon HD 6870 Series",kDuckweed},
{ 0x6739,0x00000000, CHIP_FAMILY_BARTS,"AMD Radeon HD 6850 Series",kDuckweed},
{ 0x673E,0x00000000, CHIP_FAMILY_BARTS,"AMD Radeon HD 6790 Series",kNull},
{ 0x6740,0x00000000, CHIP_FAMILY_TURKS,"AMD Radeon HD 6700M Series",kNull},
{ 0x6741,0x00000000, CHIP_FAMILY_TURKS,"AMD Radeon HD 6600M/6700M Series",kNull},
{ 0x6750,0x00000000, CHIP_FAMILY_TURKS,"AMD Radeon HD 6600A Series",kNull},
{ 0x6758,0x00000000, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670 Series",kBulrushes},
{ 0x6759,0x00000000, CHIP_FAMILY_TURKS,"AMD Radeon HD 6570/7570 Series",kNull},
{ 0x6760,0x00000000, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6400M Series",kNull},
{ 0x6761,0x00000000, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6430M Series",kNull},
{ 0x6770,0x00000000, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6400 Series",kNull},
{ 0x673E,0x00000000, CHIP_FAMILY_BARTS,"AMD Radeon HD 6790 Series",kDuckweed},
{ 0x6740,0x00000000, CHIP_FAMILY_TURKS,"AMD Radeon HD 6770M Series",kCattail},
{ 0x6741,0x00000000, CHIP_FAMILY_TURKS,"AMD Radeon HD 6750M Series",kCattail},
{ 0x6745,0x00000000, CHIP_FAMILY_TURKS,"AMD Radeon HD 6600M Series",kCattail},
{ 0x6749,0x00000000, CHIP_FAMILY_TURKS,"ATI Radeon FirePro V4900", kPithecia },
{ 0x674A,0x00000000, CHIP_FAMILY_TURKS,"AMD Radeon HD 6600M Series",kCattail },
{ 0x6750,0x00000000, CHIP_FAMILY_TURKS,"AMD Radeon HD 6600A Series",kPithecia },
{ 0x6758,0x00000000, CHIP_FAMILY_TURKS,"AMD Radeon HD 6670 Series",kPithecia},
{ 0x6759,0x00000000, CHIP_FAMILY_TURKS,"AMD Radeon HD 6570/7570 Series",kPithecia },
{ 0x675D,0x00000000, CHIP_FAMILY_TURKS,"AMD Radeon HD 7570M Series",kCattail },
{ 0x675F,0x00000000, CHIP_FAMILY_TURKS,"AMD Radeon HD 6570 Series",kBulrushes },
{ 0x6760,0x00000000, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6400M Series",kHydrilla },
{ 0x6761,0x00000000, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6430M Series",kHydrilla },
{ 0x6768,0x00000000, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6400M Series",kHydrilla},
{ 0x6770,0x00000000, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6400 Series",kBulrushes },
{ 0x6772,0x00000000, CHIP_FAMILY_CAICOS,"AMD Radeon HD 7400A Series",kBulrushes },
{ 0x6778,0x00000000, CHIP_FAMILY_CAICOS,"AMD Radeon HD 7000 Series",kBulrushes },
{ 0x6779,0x00000000, CHIP_FAMILY_CAICOS,"AMD Radeon HD 6450 Series",kBulrushes},
{ 0x677B,0x00000000, CHIP_FAMILY_CAICOS,"AMD Radeon HD 7400 Series",kBulrushes },
/* Southen Islands */
{ 0x0000,0x00000000, CHIP_FAMILY_UNKNOW,NULL,kNull}
};
{ 0x6780,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7900 Series", kFutomaki }, // ATI7000Controller.kext
typedef struct {
struct DevPropDevice*device;
radeon_card_info_t*info;
pci_dt_t*pci_dev;
uint8_t*fb;
uint8_t*mmio;
uint8_t*io;
uint8_t*rom;
uint32_trom_size;
uint32_tvram_size;
const char*cfg_name;
uint8_tports;
uint32_tflags;
boolposted;
} card_t;
card_t *card;
//{ 0x6784,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD ??? Series", kFutomaki },
/* Flags */
#define MKFLAG(n)(1 << n)
#define FLAGTRUEMKFLAG(0)
#define EVERGREENMKFLAG(1)
//{ 0x6788,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD ??? Series", kFutomaki },
//static uint8_t atN = 0;
{ 0x678A,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7900 Series", kFutomaki },
typedef struct {
type_ttype;
uint32_tsize;
uint8_t*data;
} value_t;
{ 0x6790,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7900 Series", kFutomaki }, // ATI7000Controller.kext
{ 0x6791,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7900 Series", kFutomaki },
{ 0x6792,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7900 Series", kFutomaki },
static value_t aty_name;
static value_t aty_nameparent;
//static value_t aty_model;
{ 0x6798,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970 X-Edition", kFutomaki }, // ATI7000Controller.kext
{ 0x6799,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7990 Series", kAji},
{ 0x679A,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950 Series", kFutomaki }, // ATI7000Controller.kext
{ 0x679B,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7900 Series", kFutomaki },
#define DATVAL(x){kPtr, sizeof(x), (uint8_t *)x}
#define STRVAL(x){kStr, sizeof(x), (uint8_t *)x}
#define BYTVAL(x){kCst, 1, (uint8_t *)x}
#define WRDVAL(x){kCst, 2, (uint8_t *)x}
#define DWRVAL(x){kCst, 4, (uint8_t *)x}
#define QWRVAL(x){kCst, 8, (uint8_t *)x}
#define NULVAL{kNul, 0, (uint8_t *)NULL}
{ 0x679E,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7870 XT", kFutomaki}, // ATI7000Controller.kext
{ 0x679F,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7950 Series", kFutomaki },
bool get_bootdisplay_val(value_t *val);
bool get_vrammemory_val(value_t *val);
bool get_name_val(value_t *val);
bool get_nameparent_val(value_t *val);
bool get_model_val(value_t *val);
bool get_conntype_val(value_t *val);
bool get_vrammemsize_val(value_t *val);
bool get_binimage_val(value_t *val);
bool get_romrevision_val(value_t *val);
bool get_deviceid_val(value_t *val);
bool get_mclk_val(value_t *val);
bool get_sclk_val(value_t *val);
bool get_refclk_val(value_t *val);
bool get_platforminfo_val(value_t *val);
bool get_vramtotalsize_val(value_t *val);
bool get_hdmiaudio(value_t * val);
{ 0x6800,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7970M", kFutomaki}, // ATI7000Controller.kext
//{ 0x6801,0x00000000, CHIP_FAMILY_PITCAIRN,"AMD Radeon HD ???M Series", kFutomaki },
//{ 0x6802,0x00000000, CHIP_FAMILY_PITCAIRN,"AMD Radeon HD ???M Series", kFutomaki },
typedef struct {
uint32_tflags;
boolall_ports;
char*name;
bool(*get_value)(value_t *val);
value_tdefault_val;
} dev_prop_t;
{ 0x6806,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7600 Series", kFutomaki}, // ATI7000Controller.kext
{ 0x6808,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7600 Series", kFutomaki}, // ATI7000Controller.kext
//{ 0x6809,0x00000000, CHIP_FAMILY_PITCAIRN,"AMD Radeon HD ??? Series", kNull},
//{ 0x6810,0x00000000, CHIP_FAMILY_PITCAIRN,"AMD Radeon HD ??? Series", kNull},
{ 0x6818,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7800 Series", kFutomaki}, // CHIP_FAMILY_PITCAIRN ??// ATI7000Controller.kext
{ 0x6819,0x00000000, CHIP_FAMILY_TAHITI,"AMD Radeon HD 7850 Series", kFutomaki},// CHIP_FAMILY_PITCAIRN ??
{ 0x6820,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD 7700 Series", kBuri }, // ATI7000Controller.kext
{ 0x6821,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD 7700 Series", kBuri }, // ATI7000Controller.kext
//{ 0x6823,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD 8800M Series", kBuri },
//{ 0x6824,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD 7700M Series", kBuri },
{ 0x6825,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD 7870 Series", kBuri }, // ATI7000Controller.kext
{ 0x6826,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD 7700 Series", kBuri },
{ 0x6827,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD 7850M/8850M Series", kBuri }, // ATI7000Controller.kext
//{ 0x6828,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD ??? Series", kBuri },
//{ 0x6829,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD ??? Series", kBuri },
{ 0x682B,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD 8800M Series", kBuri },
{ 0x682D,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD 7700 Series", kBuri }, // ATI7000Controller.kext
{ 0x682F,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD 7730 Series", kBuri }, // ATI7000Controller.kext
{ 0x6830,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD 7800M Series", kBuri },
{ 0x6831,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD 7700 Series", kBuri },
{ 0x6837,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD 7700 Series", kBuri },
//{ 0x6838,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD ??? Series", kBuri },
{ 0x6839,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD 7700 Series", kBuri }, // ATI7000Controller.kext
{ 0x683B,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD 7700 Series", kBuri }, // ATI7000Controller.kext
{ 0x683D,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD 7770 Series", kBuri }, // ATI7000Controller.kext
{ 0x683F,0x00000000, CHIP_FAMILY_VERDE,"AMD Radeon HD 7750 Series", kBuri }, // ATI7000Controller.kext
{ 0x6840,0x00000000, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7670M Series", kPondweed }, // THAMES??
{ 0x6841,0x00000000, CHIP_FAMILY_THAMES,"AMD Radeon HD 7500M/7600M Series", kPondweed},
{ 0x6842,0x00000000, CHIP_FAMILY_THAMES,"AMD Radeon HD 7000M Series", kPondweed},
{ 0x6843,0x00000000, CHIP_FAMILY_THAMES,"AMD Radeon HD 7670M Series", kPondweed},
{ 0x6849,0x00000000, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7600M Series", kPondweed },
//{ 0x684C,0x00000000, CHIP_FAMILY_PITCAIRN,"AMD Radeon HD ??? Series", kNull },
{ 0x6850,0x00000000, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7600M Series", kPondweed },
{ 0x6858,0x00000000, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7400 Series", kPondweed },
{ 0x6859,0x00000000, CHIP_FAMILY_LOMBOK,"AMD Radeon HD 7600M Series", kPondweed },
{ 0x0000,0x00000000, CHIP_FAMILY_UNKNOW,NULL, kNull}
};
dev_prop_t ati_devprop_list[] = {
{FLAGTRUE,false,"@0,AAPL,boot-display",get_bootdisplay_val,NULVAL},
//{FLAGTRUE,false,"@0,ATY,EFIDisplay",NULL,STRVAL("TMDSA")},
//{FLAGTRUE,true,"@0,AAPL,vram-memory",get_vrammemory_val,NULVAL},
//{FLAGTRUE,true,"@0,compatible",get_name_val,NULVAL},
//{FLAGTRUE,true,"@0,connector-type",get_conntype_val,NULVAL},
//{FLAGTRUE,true,"@0,display-type",NULL,STRVAL("NONE")},
{FLAGTRUE,true,"@0,name",get_name_val,NULVAL},
//{FLAGTRUE,true,"@0,VRAM,memsize",get_vrammemsize_val,NULVAL},
//{FLAGTRUE,false,"AAPL,aux-power-connected", NULL,DWRVAL((uint32_t)1)},
//{FLAGTRUE,false,"AAPL,aux-power-connected",NULL,DWRVAL((uint32_t)1)},
//{FLAGTRUE,false,"AAPL,backlight-control",NULL,DWRVAL((uint32_t)0)},
{FLAGTRUE,false,"ATY,bin_image",get_binimage_val,NULVAL},
{FLAGTRUE,false,"ATY,Copyright",NULL,STRVAL("Copyright AMD Inc. All Rights Reserved. 2005-2010") },
{FLAGTRUE,false,"ATY,Card#",get_romrevision_val,NULVAL},
{FLAGTRUE,false,"ATY,VendorID",NULL,WRDVAL((uint16_t)0x1002)},
{FLAGTRUE,false,"ATY,DeviceID",get_deviceid_val,NULVAL},
//{FLAGTRUE,false,"ATY,MCLK",get_mclk_val,NULVAL},
//{FLAGTRUE,false,"ATY,SCLK",get_sclk_val,NULVAL},
//{FLAGTRUE,false,"ATY,MCLK",get_mclk_val,NULVAL},
//{FLAGTRUE,false,"ATY,SCLK",get_sclk_val,NULVAL},
//{FLAGTRUE,false,"ATY,RefCLK",get_refclk_val,DWRVAL((uint32_t)0x0a8c)},
//{FLAGTRUE,false,"ATY,PlatformInfo",get_platforminfo_val,NULVAL},
{FLAGTRUE,false,"name",get_nameparent_val,NULVAL},
{FLAGTRUE,false,"name",get_nameparent_val,NULVAL},
{FLAGTRUE,false,"device_type",get_nameparent_val,NULVAL},
{FLAGTRUE,false,"model",get_model_val,STRVAL("ATI Radeon")},
{FLAGTRUE,false,"model",get_model_val,STRVAL("ATI Radeon")},
//{FLAGTRUE,false,"VRAM,totalsize",get_vramtotalsize_val,NULVAL},
{FLAGTRUE,false, "hda-gfx",get_hdmiaudio,NULVAL},
{FLAGTRUE,false,NULL,NULL,NULVAL}
{FLAGTRUE,false,"hda-gfx",get_hdmiaudio,NULVAL},
{FLAGTRUE,false,NULL,NULL,NULVAL}
};
bool get_hdmiaudio(value_t * val)
val->type = kStr;
val->size = strlen("onboard-1") + 1;
val->data = (uint8_t *)"onboard-1";
return true;
}
return false;
}
static uint32_t v = 0;
if (v)
{
return false;
}
if (!card->posted)
{
return false;
}
v = 1;
val->type = kCst;
val->size = 4;
bool get_conntype_val(value_t *val)
{
//Connector types:
//0x4 : DisplayPort
//0x400: DL DVI-I
//0x800: HDMI
//0x00000010: VGA
//0x00000004: DL DVI-I
//0x00000200: SL DVI-I
//0x00000080: S-V
//0x00000800: HDMI
//0x00000400: DisplayPort
//0x00000002: LVDS
return false;
}
idx++;
memsize = ((uint64_t)card->vram_size << 32);
if (idx == 0)
{
memsize = memsize | (uint64_t)card->vram_size;
}
val->type = kCst;
val->size = 8;
val->data = (uint8_t *)&memsize;
bool get_binimage_val(value_t *val)
{
if (!card->rom)
{
return false;
}
val->type = kPtr;
val->size = card->rom_size;
val->data = card->rom;
{
uint8_t *rev;
if (!card->rom)
{
return false;
}
rev = card->rom + *(uint8_t *)(card->rom + OFFSET_TO_GET_ATOMBIOS_STRINGS_START);
val->type = kPtr;
val->data = malloc(val->size);
if (!val->data)
{
return false;
}
memcpy(val->data, rev, val->size);
return true;
{
val->data = malloc(0x80);
if (!val->data)
{
return false;
}
bzero(val->data, 0x80);
val->type= kPtr;
bool get_vramtotalsize_val(value_t *val)
{
val->type = kCst;
val->size = 4;
val->data = (uint8_t *)&card->vram_size;
void free_val(value_t *val)
{
if (val->type == kPtr)
{
free(val->data);
}
bzero(val, sizeof(value_t));
}
void devprop_add_list(dev_prop_t devprop_list[])
{
int i, pnum;
value_t *val = malloc(sizeof(value_t));
int i, pnum;
for (i = 0; devprop_list[i].name != NULL; i++)
{
option_rom_pci_header_t *rom_pci_header;
if (rom_header->signature != 0xaa55)
{
return false;
}
rom_pci_header = (option_rom_pci_header_t *)((uint8_t *)rom_header + rom_header->pci_header_offset);
if (rom_pci_header->signature != 0x52494350)
{
return false;
}
if (rom_pci_header->vendor_id != pci_dev->vendor_id || rom_pci_header->device_id != pci_dev->device_id)
{
return false;
}
return true;
}
int fd;
char file_name[24];
bool do_load = false;
getBoolForKey(key, &do_load, &bootInfo->chameleonConfig);
if (!do_load)
{
return false;
}
sprintf(file_name, "/Extra/%04x_%04x_%08x.rom", vendor_id, device_id, subsys_id);
if ((fd = open_bvdev("bt(0,0)", file_name, 0)) < 0)
{
return false;
}
card->rom_size = file_size(fd);
card->rom = malloc(card->rom_size);
if (!card->rom)
{
return false;
}
read(fd, (char *)card->rom, card->rom_size);
if (!validate_rom((option_rom_header_t *)card->rom, card->pci_dev))
{
card->rom_size = 0;
}
card->rom_size = ((option_rom_header_t *)card->rom)->rom_size * 512;
close(fd);
return true;
}
void get_vram_size(void)
{
chip_family_t chip_family = card->info->chip_family;
ati_chip_family_t chip_family = card->info->chip_family;
card->vram_size = 0;
if (chip_family >= CHIP_FAMILY_CEDAR)
{
// size in MB on evergreen
// XXX watch for overflow!!!
card->vram_size = RegRead32(R600_CONFIG_MEMSIZE) * 1024 * 1024;
}
else
{
if (chip_family >= CHIP_FAMILY_R600)
{
card->vram_size = RegRead32(R600_CONFIG_MEMSIZE);
}
}
}
bool read_vbios(bool from_pci)
if (from_pci)
{
rom_addr = (option_rom_header_t *)(pci_config_read32(card->pci_dev->dev.addr, PCI_ROM_ADDRESS) & ~0x7ff);
verbose(" @0x%x", rom_addr);
verbose(" @0x%x\n", rom_addr);
}
else
{
rom_addr = (option_rom_header_t *)0xc0000;
}
if (!validate_rom(rom_addr, card->pci_dev))
{
return false;
}
card->rom_size = rom_addr->rom_size * 512;
if (!card->rom_size)
{
return false;
}
card->rom = malloc(card->rom_size);
if (!card->rom)
{
return false;
}
memcpy(card->rom, (void *)rom_addr, card->rom_size);
bool read_disabled_vbios(void)
{
bool ret = false;
chip_family_t chip_family = card->info->chip_family;
ati_chip_family_t chip_family = card->info->chip_family;
if (chip_family >= CHIP_FAMILY_RV770)
{
uint32_t viph_control= RegRead32(RADEON_VIPH_CONTROL);
uint32_t bus_cntl= RegRead32(RADEON_BUS_CNTL);
uint32_t bus_cntl= RegRead32(RADEON_BUS_CNTL);
uint32_t d1vga_control= RegRead32(AVIVO_D1VGA_CONTROL);
uint32_t d2vga_control= RegRead32(AVIVO_D2VGA_CONTROL);
uint32_t vga_render_control = RegRead32(AVIVO_VGA_RENDER_CONTROL);
uint32_t rom_cntl= RegRead32(R600_ROM_CNTL);
uint32_t vga_render_control= RegRead32(AVIVO_VGA_RENDER_CONTROL);
uint32_t rom_cntl= RegRead32(R600_ROM_CNTL);
uint32_t cg_spll_func_cntl= 0;
uint32_t cg_spll_status;
// wait for SPLL_CHG_STATUS to change to 1
cg_spll_status = 0;
while (!(cg_spll_status & R600_SPLL_CHG_STATUS))
{
cg_spll_status = RegRead32(R600_CG_SPLL_STATUS);
}
RegWrite32(R600_ROM_CNTL, (rom_cntl & ~R600_SCK_OVERWRITE));
}
else
{
RegWrite32(R600_ROM_CNTL, (rom_cntl | R600_SCK_OVERWRITE));
}
ret = read_vbios(true);
// restore regs
if (chip_family >= CHIP_FAMILY_R600)
{
uint32_t viph_control= RegRead32(RADEON_VIPH_CONTROL);
uint32_t bus_cntl= RegRead32(RADEON_BUS_CNTL);
uint32_t bus_cntl= RegRead32(RADEON_BUS_CNTL);
uint32_t d1vga_control= RegRead32(AVIVO_D1VGA_CONTROL);
uint32_t d2vga_control= RegRead32(AVIVO_D2VGA_CONTROL);
uint32_t vga_render_control= RegRead32(AVIVO_VGA_RENDER_CONTROL);
uint32_t rom_cntl= RegRead32(R600_ROM_CNTL);
uint32_t rom_cntl= RegRead32(R600_ROM_CNTL);
uint32_t general_pwrmgt= RegRead32(R600_GENERAL_PWRMGT);
uint32_t low_vid_lower_gpio_cntl= RegRead32(R600_LOW_VID_LOWER_GPIO_CNTL);
uint32_t medium_vid_lower_gpio_cntl = RegRead32(R600_MEDIUM_VID_LOWER_GPIO_CNTL);
uint32_t high_vid_lower_gpio_cntl= RegRead32(R600_HIGH_VID_LOWER_GPIO_CNTL);
uint32_t ctxsw_vid_lower_gpio_cntl= RegRead32(R600_CTXSW_VID_LOWER_GPIO_CNTL);
uint32_t low_vid_lower_gpio_cntl= RegRead32(R600_LOW_VID_LOWER_GPIO_CNTL);
uint32_t medium_vid_lower_gpio_cntl= RegRead32(R600_MEDIUM_VID_LOWER_GPIO_CNTL);
uint32_t high_vid_lower_gpio_cntl= RegRead32(R600_HIGH_VID_LOWER_GPIO_CNTL);
uint32_t ctxsw_vid_lower_gpio_cntl= RegRead32(R600_CTXSW_VID_LOWER_GPIO_CNTL);
uint32_t lower_gpio_enable= RegRead32(R600_LOWER_GPIO_ENABLE);
// disable VIP
// first check CRTCs
reg = RegRead32(RADEON_CRTC_GEN_CNTL) | RegRead32(RADEON_CRTC2_GEN_CNTL);
if (reg & RADEON_CRTC_EN)
{
return true;
}
// then check MEM_SIZE, in case something turned the crtcs off
reg = RegRead32(R600_CONFIG_MEMSIZE);
if (reg)
{
return true;
}
return false;
}
uint8_t *config_space = malloc(0x100);
if (!config_space)
{
return false;
}
for (offset = 0; offset < 0x100; offset += 4)
{
config_space[offset / 4] = pci_config_read32(card->pci_dev->dev.addr, offset);
}
devprop_add_value(card->device, "ATY,PCIConfigSpace", config_space, 0x100);
free(config_space);
charname_parent[24];
inti;
intn_ports = 0;
card = malloc(sizeof(card_t));
if (!card)
{
return false;
}
bzero(card, sizeof(card_t));
card->pci_dev = pci_dev;
for (i = 0; radeon_cards[i].device_id ; i++)
{
if (radeon_cards[i].device_id == pci_dev->device_id)
{
card->info = &radeon_cards[i];
if ((radeon_cards[i].subsys_id == 0x00000000) ||
(radeon_cards[i].subsys_id == pci_dev->subsys_id.subsys_id))
if ((radeon_cards[i].subsys_id == 0x00000000) || (radeon_cards[i].subsys_id == pci_dev->subsys_id.subsys_id))
{
card->info = &radeon_cards[i];
break;
}
}
}
//why can't this check go down to 1411?
//If we move it down we would still allow the cfg_name check
//if (!card->info->device_id || !card->info->cfg_name)
if (!card->info->device_id)
if (card->info == NULL) // Jief
{
verbose("Unsupported ATI card! Device ID: [%04x:%04x] Subsystem ID: [%08x] \n",
pci_dev->vendor_id, pci_dev->device_id, pci_dev->subsys_id);
verbose("Unsupported ATI card! Device ID: [%04x:%04x] Subsystem ID: [%04x:%04x] \n",
pci_dev->vendor_id, pci_dev->device_id, pci_dev->subsys_id.subsys.vendor_id, pci_dev->subsys_id.subsys.device_id);
return false;
}
card->fb= (uint8_t *)(pci_config_read32(pci_dev->dev.addr, PCI_BASE_ADDRESS_0) & ~0x0f);
card->mmio= (uint8_t *)(pci_config_read32(pci_dev->dev.addr, PCI_BASE_ADDRESS_2) & ~0x0f);
card->io= (uint8_t *)(pci_config_read32(pci_dev->dev.addr, PCI_BASE_ADDRESS_4) & ~0x03);
verbose("ATI Framebuffer Addr: @0x%08X MMIO Addr: @0x%08X I/O Port Addr: @0x%08X ROM Addr: @0x%08X\n",
card->fb, card->mmio, card->io, pci_config_read32(pci_dev->dev.addr, PCI_ROM_ADDRESS));
{
verbose("reading Video BIOS from %s", card->posted ? "legacy space" : "PCI ROM");
if (card->posted)
{
read_vbios(false);
}
else
{
read_disabled_vbios();
}
verbose("\n");
}
}
//card->ports = 2; // default - Azi: default is card_configs
if (card->info->chip_family >= CHIP_FAMILY_CEDAR)
{
card->flags |= EVERGREEN;
//card->ports = 3; //Azi: use the AtiPorts key if needed
}
//atN = 0;
// Check AtiConfig key for a framebuffer name,
card->cfg_name = getStringForKey(kAtiConfig, &bootInfo->chameleonConfig);
// if none,
if (!card->cfg_name)
{
// use the device fb key on radeon_cards, to retrive the default name from card_configs.
// use cfg_name on radeon_cards, to retrive the default name from card_configs,
card->cfg_name = card_configs[card->info->cfg_name].name;
// Uncommented the following line and added verbose for debugging AtiPorts issues on some cards
card->ports = card_configs[card->info->cfg_name].ports;
// Report number of ports card reports
verbose("Card reported ports: %d\n", card->ports);
// which means one of the fb's or kNull
verbose("Framebuffer set to: %s using device's default.\n", card->cfg_name);
// else, use the fb name returned by AtiConfig.
verbose("Framebuffer set to: %s using AtiConfig=%s\n", card->cfg_name, card->cfg_name);
}
// Check AtiPorts key for nr of ports,
card->ports = getIntForKey(kAtiPorts, &n_ports, &bootInfo->chameleonConfig);
// if a value bigger than 0 ?? is found, (do we need >= 0 ?? that's null FB on card_configs)
{
card->ports = n_ports; // use it.
verbose("Number of ports set to: %d using AtiPorts=%d\n", card->ports, card->ports);
}
else// if (card->cfg_name > 0) // do we want 0 ports if fb is kNull or mistyped ?
}
else
{
// else, match cfg_name with card_configs list and retrive default nr of ports.
for (i = 0; i < kCfgEnd; i++)
if (strcmp(card->cfg_name, card_configs[i].name) == 0)
{
card->ports = card_configs[i].ports; // default
}
verbose("Number of ports set to: %d using framebuffer's default.\n", card->ports);
}
//else
//card->ports = 2/1 ?; // set a min if 0 ports ?
//verbose("Nr of ports set to min: %d\n", card->ports);
sprintf(name, "ATY,%s", card->cfg_name);
aty_name.type = kStr;
aty_name.size = strlen(name) + 1;
bool setup_ati_devprop(pci_dt_t *ati_dev)
{
char *devicepath;
if (!init_card(ati_dev))
{
return false;
}
// -------------------------------------------------
// Find a better way to do this (in device_inject.c)
if (!string)
{
string = devprop_create_string();
}
devicepath = get_pci_dev_path(ati_dev);
card->device = devprop_add_device(string, devicepath);
if (!card->device)
{
return false;
}
// -------------------------------------------------
#if 0
uint64_t fb= (uint32_t)card->fb;
uint64_t fb= (uint32_t)card->fb;
uint64_t mmio= (uint32_t)card->mmio;
uint64_t io= (uint32_t)card->io;
uint64_t io= (uint32_t)card->io;
devprop_add_value(card->device, "ATY,FrameBufferOffset", &fb, 8);
devprop_add_value(card->device, "ATY,RegisterSpaceOffset", &mmio, 8);
devprop_add_value(card->device, "ATY,IOSpaceOffset", &io, 8);
#endif
devprop_add_list(ati_devprop_list);
// -------------------------------------------------
// Find a better way to do this (in device_inject.c)
//Azi: XXX tried to fix a malloc error in vain; this is related to XCode 4 compilation!
// -------------------------------------------------
verbose("%s %dMB [%04x:%04x] (subsys [%04x:%04x]) (%s:%s) :: %s\n",
card->info->model_name, (uint32_t)(card->vram_size / (1024 * 1024)),
chip_family_name[card->info->chip_family], card->info->model_name,
(uint32_t)(card->vram_size / (1024 * 1024)), card->cfg_name,
ati_dev->vendor_id, ati_dev->device_id,
ati_dev->subsys_id.subsys.vendor_id, ati_dev->subsys_id.subsys.device_id,
chip_family_name[card->info->chip_family], card->cfg_name,
chip_family_name[card->info->chip_family], card->cfg_name,
devicepath);
free(card);
free(card);
return true;
}
branches/Chimera/i386/libsaio/nvidia.h
5454
5555
5656
57
58
59
60
61
5762
58
63
5964
6065
6166
......
7075
7176
7277
73
7478
7579
7680
typedef struct {
uint32_t device; // VendorID + DeviceID
char *name;
} nvidia_pci_info_t;
typedef struct {
uint32_t device; // VendorID + DeviceID
uint32_t subdev; // SubdeviceID + SubvendorID
char *name_model;
char *name;
//bool kEnableHDMIAudio //HDMi
//VRAM
} nvidia_card_info_t;
uint8_tsize;/* Size in multiples of 512 */
};
#define NV_SUB_IDS 0x00000000
#define NV_PMC_OFFSET0x000000
#define NV_PMC_SIZE 0x2ffff
#define NV_PDISPLAY_OFFSET0x610000
branches/Chimera/i386/libsaio/ati.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
//
// ati.h
// Chameleon
//
// Created by Chris Morton on 1/30/13.
//
//
#ifndef Chameleon_ati_h
#define Chameleon_ati_h
#include "boot.h"
#include "bootstruct.h"
#include "pci.h"
#include "platform.h"
#include "device_inject.h"
#include "ati_reg.h"
/* DEFINES */
#define OFFSET_TO_GET_ATOMBIOS_STRINGS_START 0x6e
#define Reg32(reg)(*(volatile uint32_t *)(card->mmio + reg))
#define RegRead32(reg)(Reg32(reg))
#define RegWrite32(reg, value)(Reg32(reg) = value)
/* Flags */
#define MKFLAG(n)(1 << n)
#define FLAGTRUEMKFLAG(0)
#define EVERGREENMKFLAG(1)
#define DATVAL(x){kPtr, sizeof(x), (uint8_t *)x}
#define STRVAL(x){kStr, sizeof(x), (uint8_t *)x}
#define BYTVAL(x){kCst, 1, (uint8_t *)x}
#define WRDVAL(x){kCst, 2, (uint8_t *)x}
#define DWRVAL(x){kCst, 4, (uint8_t *)x}
#define QWRVAL(x){kCst, 8, (uint8_t *)x}
#define NULVAL{kNul, 0, (uint8_t *)NULL}
/*Typedefs ENUMS*/
typedef enum {
kNul,
kStr,
kPtr,
kCst
} type_t;
typedef enum {
CHIP_FAMILY_UNKNOW,
/* Old */
CHIP_FAMILY_R420,
CHIP_FAMILY_RV410,
CHIP_FAMILY_RV515,
CHIP_FAMILY_R520,
CHIP_FAMILY_RV530,
CHIP_FAMILY_RV560,
CHIP_FAMILY_RV570,
CHIP_FAMILY_R580,
/* IGP */
CHIP_FAMILY_RS600,
CHIP_FAMILY_RS690,
CHIP_FAMILY_RS740,
CHIP_FAMILY_RS780,
CHIP_FAMILY_RS880,
/* R600 */
CHIP_FAMILY_R600,
CHIP_FAMILY_RV610,
CHIP_FAMILY_RV620,
CHIP_FAMILY_RV630,
CHIP_FAMILY_RV635,
CHIP_FAMILY_RV670,
/* R700 */
CHIP_FAMILY_RV710,
CHIP_FAMILY_RV730,
CHIP_FAMILY_RV740,
CHIP_FAMILY_RV770,
CHIP_FAMILY_RV772,
CHIP_FAMILY_RV790,
/* Evergreen */
CHIP_FAMILY_CEDAR,
CHIP_FAMILY_CYPRESS,
CHIP_FAMILY_HEMLOCK,
CHIP_FAMILY_JUNIPER,
CHIP_FAMILY_REDWOOD,
CHIP_FAMILY_BROADWAY,
//CHIP_FAMILY_MADISON,
//CHIP_FAMILY_PARK,
/* Northern Islands */
//CHIP_FAMILY_ANTILLES,
CHIP_FAMILY_BARTS,
CHIP_FAMILY_CAICOS,
CHIP_FAMILY_CAYMAN,
CHIP_FAMILY_TURKS,
/* Southern Islands */
CHIP_FAMILY_TAHITI,
CHIP_FAMILY_PITCAIRN,
CHIP_FAMILY_VERDE,
CHIP_FAMILY_THAMES,
CHIP_FAMILY_LOMBOK,
//CHIP_FAMILY_NEWZEALAND,
CHIP_FAMILY_LAST
} ati_chip_family_t;
typedef enum {
kNull,
/* OLDController */
kWormy,
kAlopias,
kCaretta,
kKakapo,
kKipunji,
kPeregrine,
kRaven,
kSphyrna,
/* AMD2400Controller */
kIago,
/* AMD2600Controller */
kHypoprion,
kLamna,
/* AMD3800Controller */
kMegalodon,
kTriakis,
/* AMD4600Controller */
kFlicker,
kGliff,
kShrike,
/* AMD4800Controller */
kCardinal,
kMotmot,
kQuail,
/* AMD5000Controller */
kDouc,
kLangur,
kUakari,
kZonalis,
kAlouatta,
kHoolock,
kVervet,
kBaboon,
kEulemur,
kGalago,
kColobus,
kMangabey,
kNomascus,
kOrangutan,
/* AMD6000Controller */
kPithecia,
kBulrushes,
kCattail,
kHydrilla,
kDuckweed,
kFanwort,
kElodea,
kKudzu,
kGibba,
kLotus,
kIpomoea,
kMuskgrass,
kJuncus,
kOsmunda,
kPondweed,
kSpikerush,
kTypha,
/* AMD7000Controller */
kAji, // TESTING
kBuri, // TESTING
kChutoro, // TESTING
kDashimaki, // TESTING
kEbi, // TESTING
kGari, // TESTING
kFutomaki, // TESTING
kHamachi, // TESTING
kOPM, // TESTING
kIkura, // TESTING
kIkuraS, // TESTING
kCfgEnd
} ati_config_name_t;
/* Typedefs STRUCTS */
typedef struct {
type_ttype;
uint32_tsize;
uint8_t*data;
} value_t;
//card to #ports
typedef struct {
const char*name;
uint8_tports;
} card_config_t;
//radeon card (includes teh AtiConfig)
typedef struct {
uint16_tdevice_id;
uint32_tsubsys_id;
ati_chip_family_tchip_family;
const char*model_name;
ati_config_name_tcfg_name;
} radeon_card_info_t;
// dev_tree representation
typedef struct {
uint32_tflags;
boolall_ports;
char*name;
bool(*get_value)(value_t *val);
value_tdefault_val;
} dev_prop_t;
typedef struct {
struct DevPropDevice*device;
radeon_card_info_t*info;
pci_dt_t*pci_dev;
uint8_t*fb;
uint8_t*mmio;
uint8_t*io;
uint8_t*rom;
uint64_trom_size;
uint64_tvram_size;
const char*cfg_name;
uint8_tports;
uint32_tflags;
boolposted;
} card_t;
/* functions */
bool get_bootdisplay_val(value_t *val);
bool get_vrammemory_val(value_t *val);
bool get_name_val(value_t *val);
bool get_nameparent_val(value_t *val);
bool get_model_val(value_t *val);
bool get_conntype_val(value_t *val);
bool get_vrammemsize_val(value_t *val);
bool get_binimage_val(value_t *val);
bool get_romrevision_val(value_t *val);
bool get_deviceid_val(value_t *val);
bool get_mclk_val(value_t *val);
bool get_sclk_val(value_t *val);
bool get_refclk_val(value_t *val);
bool get_platforminfo_val(value_t *val);
bool get_vramtotalsize_val(value_t *val);
bool get_hdmiaudio(value_t * val);
/* vals */
static value_t aty_name;
static value_t aty_nameparent;
card_t *card;
#endif
branches/Chimera/i386/libsaio/cpu.c
384384
385385
386386
387
387
388
388389
389390
390391
......
421422
422423
423424
425
424426
425427
426428
p->CPU.Model == CPU_MODEL_WESTMERE_EX ||
p->CPU.Model == CPU_MODEL_SANDYBRIDGE ||
p->CPU.Model == CPU_MODEL_JAKETOWN ||
p->CPU.Model == CPU_MODEL_IVYBRIDGE )) {
p->CPU.Model == CPU_MODEL_IVYBRIDGE ||
p->CPU.Model == CPU_MODEL_HASWELL )){
msr = rdmsr64(MSR_PLATFORM_INFO);
//DBG("msr(%d): platform_info %08x\n", __LINE__, bitfield(msr, 31, 0));
bus_ratio_max = bitfield(msr, 15, 8);//MacMan: Changed bitfield to match Apple tsc.c
case CPU_MODEL_SANDYBRIDGE:// Intel Core i3, i5, i7 LGA1155 (32nm)
case CPU_MODEL_IVYBRIDGE:// Intel Core i3, i5, i7 LGA1155 (22nm)
case CPU_MODEL_JAKETOWN:// Intel Core i7, Xeon E5 LGA2011 (32nm)
case CPU_MODEL_HASWELL: // Intel Core i3, i5, i7, Xeon E3 LGA1050 (22nm)
{
msr = rdmsr64(MSR_IA32_PERF_STATUS);
currcoef = bitfield(msr, 15, 8);
branches/Chimera/i386/libsaio/platform.h
4545
4646
4747
48
4849
4950
5051
#define CPU_MODEL_NEHALEM_EX0x2E// Beckton
#define CPU_MODEL_WESTMERE_EX0x2F // Westmere-EX
#define CPU_MODEL_IVYBRIDGE0x3A// Ivy Bridge
#define CPU_MODEL_HASWELL0x3C// Haswell
/* CPU Features */
#define CPU_FEATURE_MMX0x00000001// MMX Instruction Set
branches/Chimera/i386/libsaio/disk.c
13411341
13421342
13431343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
13581364
13591365
13601366
if ( (efi_guid_compare(&GPT_BASICDATA_GUID, (EFI_GUID const*)gptMap->ent_type) == 0) ||
(efi_guid_compare(&GPT_BASICDATA2_GUID, (EFI_GUID const*)gptMap->ent_type) == 0) )
{
switch (fsType)
{
case FDISK_NTFS:
bvr = newGPTBVRef(biosdev, gptID, gptMap->ent_lba_start, gptMap,
0, 0, 0, 0, 0, 0, NTFSGetDescription,
(BVFree)free, 0, kBIOSDevTypeHardDrive, 0);
break;
default:
bvr = newGPTBVRef(biosdev, gptID, gptMap->ent_lba_start, gptMap,
0, 0, 0, 0, 0, 0, 0,
(BVFree)free, 0, kBIOSDevTypeHardDrive, 0);
break;
}
switch (fsType)
{
case FDISK_NTFS:
bvr = newGPTBVRef(biosdev, gptID, gptMap->ent_lba_start, gptMap,
0, 0, 0, 0, 0, 0, NTFSGetDescription,
(BVFree)free, 0, kBIOSDevTypeHardDrive, 0);
break;
case FDISK_LINUX:
bvr = newGPTBVRef(biosdev, gptID, gptMap->ent_lba_start, gptMap,
0, 0, 0, 0, 0, 0, EX2GetDescription,
(BVFree)free, 0, kBIOSDevTypeHardDrive, 0);
break;
default:
bvr = newGPTBVRef(biosdev, gptID, gptMap->ent_lba_start, gptMap,
0, 0, 0, 0, 0, 0, 0,
(BVFree)free, 0, kBIOSDevTypeHardDrive, 0);
break;
}
}
branches/Chimera/i386/libsaio/smbios.c
325325
326326
327327
328
328
329329
330
330
331331
332332
333333
......
339339
340340
341341
342
343
342
343
344344
345345
346346
347347
348348
349
350
349
350
351351
352352
353353
......
579579
580580
581581
582
582583
583584
584585
{
switch (Platform.CPU.Model)
{
case CPU_MODEL_FIELDS:// Intel Core i5, i7, Xeon X34xx LGA1156 (45nm)
case CPU_MODEL_FIELDS: // Intel Core i5, i7, Xeon X34xx LGA1156 (45nm)
case CPU_MODEL_DALES:
case CPU_MODEL_DALES_32NM:// Intel Core i3, i5 LGA1156 (32nm)
case CPU_MODEL_DALES_32NM: // Intel Core i3, i5 LGA1156 (32nm)
defaultBIOSInfo.version= kDefaultiMacNehalemBIOSVersion;
defaultSystemInfo.productName= kDefaultiMacNehalem;
defaultSystemInfo.family= kDefaultiMacFamily;
defaultSystemInfo.productName= kDefaultiMacSandy;
defaultSystemInfo.family= kDefaultiMacFamily;
break;
case CPU_MODEL_NEHALEM:// Intel Core i7, Xeon W35xx, Xeon X55xx, Xeon E55xx LGA1366 (45nm)
case CPU_MODEL_NEHALEM_EX:// Intel Xeon X75xx, Xeon X65xx, Xeon E75xx, Xeon E65x
case CPU_MODEL_NEHALEM: // Intel Core i7, Xeon W35xx, Xeon X55xx, Xeon E55xx LGA1366 (45nm)
case CPU_MODEL_NEHALEM_EX: // Intel Xeon X75xx, Xeon X65xx, Xeon E75xx, Xeon E65x
defaultBIOSInfo.version= kDefaultMacProNehalemBIOSVersion;
defaultSystemInfo.productName= kDefaultMacProNehalem;
defaultSystemInfo.family= kDefaultMacProFamily;
break;
case CPU_MODEL_WESTMERE:// Intel Core i7, Xeon X56xx, Xeon E56xx, Xeon W36xx LGA1366 (32nm) 6 Core
case CPU_MODEL_WESTMERE_EX:// Intel Xeon E7
case CPU_MODEL_WESTMERE: // Intel Core i7, Xeon X56xx, Xeon E56xx, Xeon W36xx LGA1366 (32nm) 6 Core
case CPU_MODEL_WESTMERE_EX: // Intel Xeon E7
case CPU_MODEL_JAKETOWN:// Intel Core i7, Xeon E5 LGA2011 (32nm)
defaultBIOSInfo.version= kDefaultMacProWestmereBIOSVersion;
defaultBIOSInfo.releaseDate= kDefaulMacProWestmereBIOSReleaseDate;
case CPU_MODEL_SANDYBRIDGE:// Intel Core i3, i5, i7 LGA1155 (32nm)
case CPU_MODEL_IVYBRIDGE:// Intel Core i3, i5, i7 LGA1155 (22nm)
case CPU_MODEL_JAKETOWN:// Intel Core i7, Xeon E5 LGA2011 (32nm)
case CPU_MODEL_HASWELL: // Intel Core i3, i5, i7, Xeon E3 LGA1155 (22nm)
break;
default:
branches/Chimera/i386/libsaio/nvidia_helper.c
110110
111111
112112
113
113
114114
115115
116116
unsigned inti, count;
TagPtr NVDIATag;
char *model_name = NULL, *match_id = NULL, *sub_id = NULL, *vram_size = NULL;
uint32_t dev_id = 0, subdev_id = NV_SUB_IDS;
uint32_t dev_id = 0, subdev_id = 0;
uint64_t VramSize = 0;
if ((NVDIATag = XMLCastArray(XMLGetProperty(bootInfo->chameleonConfig.dictionary, (const char*)"NVIDIA"))))
branches/Chimera/i386/libsaio/pci.c
7070
7171
7272
73
74
73
74
7575
7676
7777
......
8787
8888
8989
90
91
9092
9193
9294
......
178180
179181
180182
181
183
182184
183185
184186
pci_dt_t**current = &start->children;
uint32_tid;
uint32_tpci_addr;
uint8_tdev;
uint8_tfunc;
uint8_tdev = 0;
uint8_tfunc = 0;
uint8_tsecondary_bus;
uint8_theader_type;
new->dev.addr= pci_addr;
new->vendor_id= id & 0xffff;
new->device_id= (id >> 16) & 0xffff;
new->progif = pci_config_read8(pci_addr, PCI_CLASS_PROG);
new->revision_id= pci_config_read8(pci_addr, PCI_CLASS_REVISION);
new->subsys_id.subsys_id= pci_config_read32(pci_addr, PCI_SUBSYSTEM_VENDOR_ID);
new->class_id= pci_config_read16(pci_addr, PCI_CLASS_DEVICE);
new->parent= start;
current = pci_dt;
while (current) {
printf("%02x:%02x.%x [%04x] [%04x:%04x] (subsys [%04x:%04x]):: %s\n",
printf("%02x:%02x.%x [%04x%02x] [%04x:%04x] (subsys [%04x:%04x]):: %s\n",
current->dev.bits.bus, current->dev.bits.dev, current->dev.bits.func,
current->class_id, current->vendor_id, current->device_id,
current->subsys_id.subsys.vendor_id, current->subsys_id.subsys.device_id,
branches/Chimera/i386/libsaio/pci.h
77
88
99
10
11
12
13
14
15
16
1017
1118
1219
......
2532
2633
2734
28
29
35
36
37
38
39
3040
3141
3242
33
34
43
44
3545
3646
3747
3848
39
49
50
51
52
53
4054
4155
4256
......
108122
109123
110124
111
125
126
127
112128
113129
114130
......
142158
143159
144160
145
146
147
161
162
163
148164
149165
150166
......
278294
279295
280296
281
297
282298
283299
284300
......
759775
760776
761777
762
778
779
780
781
763782
764783
765784
......
768787
769788
770789
790
771791
772792
773793
794
774795
775796
776797
......
779800
780801
781802
803
782804
783805
784806
785807
786808
787809
810
788811
789
790
812
813
791814
792
815
793816
794817
818
795819
796820
797821
798822
799823
824
800825
801826
802827
......
811836
812837
813838
839
814840
815841
816842
......
818844
819845
820846
847
821848
822849
850
851
823852
824853
825854
826
855
856
827857
828858
859
829860
830861
831862
......
834865
835866
836867
868
837869
838870
839871
840872
873
841874
842875
843876
......
845878
846879
847880
848
881
849882
883
850884
851
885
886
852887
853888
854
889
890
891
892
893
855894
856895
857896
858897
898
859899
860900
861
901
862902
863
903
904
905
906
907
908
864909
910
865911
866912
867913
914
868915
869916
870917
871918
872919
873920
921
874922
875923
876924
877925
878926
927
879928
880929
881930
882931
883932
884933
934
885935
886936
887937
#ifndef __LIBSAIO_PCI_H
#define __LIBSAIO_PCI_H
/*
* 31 24 16 15 11 10 8
* +---------------------------------------------------------------+
* |1| 0 | BUS | DEV |FUNC | 0 |
* +---------------------------------------------------------------+
*/
typedef struct {
uint32_t:2;
uint32_treg :6;
typedef struct pci_dt_t {
pci_dev_tdev;
uint16_tvendor_id;
uint16_tdevice_id;
uint16_tvendor_id; /* Specifies a vendor ID. The PCI bus configuration code obtains this
vendor ID from the vendor ID device register. */
uint16_tdevice_id; /* Specifies a device ID that identifies the specific device. The PCI
bus configuration code obtains this device ID from the device ID
device register. */
union {
struct {
uint16_tvendor_id;
uint16_tdevice_id;
uint16_tvendor_id; /* Specifies a subsystem vendor ID. */
uint16_tdevice_id; /* Specifies a subsystem device ID that identifies the specific device. */
} subsys;
uint32_tsubsys_id;
}subsys_id;
uint16_tclass_id;
uint8_t progif; /* A read-only register that specifies a register-level programming interface the device has, if it has any at all. */
uint8_t revision_id; /* PCI revision ID. Specifies a revision identifier for a particular device. Where valid IDs are allocated by the vendor. */
uint16_tclass_id; /* Specifies a class code. This member is a data structure that stores information related to the device's class code device register. */
struct pci_dt_t*parent;
struct pci_dt_t*children;
/*
* Under PCI, each device has 256 bytes of configuration address space,
* of which the first 64 bytes are standardized as follows:
*/
*
* register name offset
*******************************************************/
#define PCI_VENDOR_ID0x00/* 16 bits */
#define PCI_DEVICE_ID0x02/* 16 bits */
#define PCI_COMMAND0x04/* 16 bits */
#define PCI_STATUS_DETECTED_PARITY0x8000/* Set on parity error */
#define PCI_CLASS_REVISION0x08/* High 24 bits are class, low 8 revision */
#define PCI_REVISION_ID0x08/* Revision ID */
#define PCI_CLASS_PROG0x09/* Reg. Level Programming Interface */
#define PCI_CLASS_DEVICE0x0a/* Device class */
#define PCI_CLASS_PROG0x09/* Reg. Level Programming Interface know also as PCI_PROG_IF */
#define PCI_CLASS_DEVICE0x0a/* Device subclass */
//#define PCI_SUBCLASS_DEVICE0x0b/* Device class */
#define PCI_CACHE_LINE_SIZE0x0c/* 8 bits */
#define PCI_LATENCY_TIMER0x0d/* 8 bits */
#define PCI_CB_LEGACY_MODE_BASE0x44/* 16-bit PC Card legacy mode base address (ExCa) */
/* 0x48-0x7f reserved */
/* Capability lists */
/* Capability Identification Numbers list */
#define PCI_CAP_LIST_ID0/* Capability ID */
#define PCI_CAP_ID_PM0x01/* Power Management */
#define PCI_CAP_ID_AGP0x02/* Accelerated Graphics Port */
/* Device classes and subclasses */
#define PCI_CLASS_NOT_DEFINED0x0000
#define PCI_CLASS_NOT_DEFINED_VGA0x0001
// values for the class_sub field for class_base = 0x00 (Device was built prior definition of the class code field)
// values for the class_sub field for class_base = 0x01 (Mass Storage Controller)
#define PCI_BASE_CLASS_STORAGE0x01
#define PCI_CLASS_STORAGE_SCSI0x0100
#define PCI_CLASS_STORAGE_IDE0x0101
#define PCI_CLASS_STORAGE_RAID0x0104
#define PCI_CLASS_STORAGE_ATA0x0105
#define PCI_CLASS_STORAGE_SATA0x0106
#define PCI_CLASS_STORAGE_SATA_AHCI0x010601
#define PCI_CLASS_STORAGE_SAS0x0107
#define PCI_CLASS_STORAGE_OTHER0x0180
// values for the class_sub field for class_base = 0x02 (Network Controller)
#define PCI_BASE_CLASS_NETWORK0x02
#define PCI_CLASS_NETWORK_ETHERNET0x0200
#define PCI_CLASS_NETWORK_TOKEN_RING0x0201
#define PCI_CLASS_NETWORK_ISDN0x0204
#define PCI_CLASS_NETWORK_OTHER0x0280
// values for the class_sub field for class_base = 0x03 (Display Controller)
#define PCI_BASE_CLASS_DISPLAY0x03
#define PCI_CLASS_DISPLAY_VGA0x0300
#define PCI_CLASS_DISPLAY_XGA0x0301
#define PCI_CLASS_DISPLAY_3D0x0302
#define PCI_CLASS_DISPLAY_OTHER0x0380
// values for the class_sub field for class_base = 0x04 (Multimedia Controller)
#define PCI_BASE_CLASS_MULTIMEDIA0x04
#define PCI_CLASS_MULTIMEDIA_VIDEO0x0400
#define PCI_CLASS_MULTIMEDIA_AUDIO0x0401
#define PCI_CLASS_MULTIMEDIA_VIDEO0x0400 /* video */
#define PCI_CLASS_MULTIMEDIA_AUDIO0x0401 /* audio */
#define PCI_CLASS_MULTIMEDIA_PHONE0x0402
#define PCI_CLASS_MULTIMEDIA_AUDIO_DEV0x0403
#define PCI_CLASS_MULTIMEDIA_AUDIO_DEV0x0403 /* HD audio */
#define PCI_CLASS_MULTIMEDIA_OTHER0x0480
// values for the class_sub field for class_base = 0x05 (Memory Controller)
#define PCI_BASE_CLASS_MEMORY0x05
#define PCI_CLASS_MEMORY_RAM0x0500
#define PCI_CLASS_MEMORY_FLASH0x0501
#define PCI_CLASS_MEMORY_OTHER0x0580
// values for the class_sub field for class_base = 0x06 (Bridge Device)
#define PCI_BASE_CLASS_BRIDGE0x06
#define PCI_CLASS_BRIDGE_HOST0x0600
#define PCI_CLASS_BRIDGE_ISA0x0601
#define PCI_CLASS_BRIDGE_IB_TO_PCI0x060a
#define PCI_CLASS_BRIDGE_OTHER0x0680
// values for the class_sub field for class_base = 0x07 (Simple Communications Controllers)
#define PCI_BASE_CLASS_COMMUNICATION0x07
#define PCI_CLASS_COMMUNICATION_SERIAL0x0700
#define PCI_CLASS_COMMUNICATION_PARALLEL0x0701
#define PCI_CLASS_COMMUNICATION_MODEM0x0703
#define PCI_CLASS_COMMUNICATION_OTHER0x0780
// values for the class_sub field for class_base = 0x08 (Base System Peripherals)
#define PCI_BASE_CLASS_SYSTEM0x08
#define PCI_CLASS_SYSTEM_PIC0x0800
#define PCI_CLASS_SYSTEM_PIC_IOAPIC 0x080010
#define PCI_CLASS_SYSTEM_PIC_IOXAPIC 0x080020 /* I/O APIC interrupt controller , 32 bye none-prefectable memory. */
#define PCI_CLASS_SYSTEM_DMA0x0801
#define PCI_CLASS_SYSTEM_TIMER0x0802
#define PCI_CLASS_SYSTEM_RTC0x0803
#define PCI_CLASS_SYSTEM_PCI_HOTPLUG0x0804
#define PCI_CLASS_SYSTEM_PCI_HOTPLUG0x0804 /* HotPlug Controller */
#define PCI_CLASS_SYSTEM_SDHCI0x0805
#define PCI_CLASS_SYSTEM_OTHER0x0880
// values for the class_sub field for class_base = 0x09 (Input Devices)
#define PCI_BASE_CLASS_INPUT0x09
#define PCI_CLASS_INPUT_KEYBOARD0x0900
#define PCI_CLASS_INPUT_PEN0x0901
#define PCI_CLASS_INPUT_GAMEPORT0x0904
#define PCI_CLASS_INPUT_OTHER0x0980
// values for the class_sub field for class_base = 0x0a (Docking Stations)
#define PCI_BASE_CLASS_DOCKING0x0a
#define PCI_CLASS_DOCKING_GENERIC0x0a00
#define PCI_CLASS_DOCKING_OTHER0x0a80
// values for the class_sub field for class_base = 0x0b (processor)
#define PCI_BASE_CLASS_PROCESSOR0x0b
#define PCI_CLASS_PROCESSOR_3860x0b00
#define PCI_CLASS_PROCESSOR_4860x0b01
#define PCI_CLASS_PROCESSOR_ALPHA0x0b10
#define PCI_CLASS_PROCESSOR_POWERPC0x0b20
#define PCI_CLASS_PROCESSOR_MIPS0x0b30
#define PCI_CLASS_PROCESSOR_CO0x0b40
#define PCI_CLASS_PROCESSOR_CO0x0b40 /* Co-Processor */
// values for the class_sub field for class_base = 0x0c (serial bus controller)
#define PCI_BASE_CLASS_SERIAL0x0c
#define PCI_CLASS_SERIAL_FIREWIRE0x0c00
#define PCI_CLASS_SERIAL_FIREWIRE0x0c00 /* FireWire (IEEE 1394) */
#define PCI_CLASS_SERIAL_FIREWIRE_OHCI0x0c10
#define PCI_CLASS_SERIAL_ACCESS0x0c01
#define PCI_CLASS_SERIAL_SSA0x0c02
#define PCI_CLASS_SERIAL_USB0x0c03
#define PCI_CLASS_SERIAL_USB0x0c03 /* Universal Serial Bus */
#define PCI_IF_UHCI 0x00 /* Universal Host Controller Interface */
#define PCI_IF_OHCI 0x10 /* Open Host Controller Interface */
#define PCI_IF_EHCI 0x20 /* Enhanced Host Controller Interface */
#define PCI_IF_XHCI 0x30 /* Extensible Host Controller Interface */
#define PCI_CLASS_SERIAL_FIBER0x0c04
#define PCI_CLASS_SERIAL_SMBUS0x0c05
#define PCI_CLASS_SERIAL_INFINIBAND0x0c06
// values for the class_sub field for class_base = 0x0d (Wireless Controller)
#define PCI_BASE_CLASS_WIRELESS0x0d
#define PCI_CLASS_WIRELESS_IRDA0x0d00
#define PCI_CLASS_WIRELESS_CONSUMER_IR0x0d01
#define PCI_CLASS_WIRELESS_IR0x0d01
#define PCI_CLASS_WIRELESS_RF0x0d10
#define PCI_CLASS_WIRELESS_OTHER0x0d80
#define PCI_CLASS_WIRELESS_BLUETOOTH0x0d11
#define PCI_CLASS_WIRELESS_BROADBAND0x0d12
#define PCI_CLASS_WIRELESS_80211A0x0d20
#define PCI_CLASS_WIRELESS_80211B0x0d21
#define PCI_CLASS_WIRELESS_WHCI0x0d1010
#define PCI_CLASS_WIRELESS_OTHER0x80
// values for the class_sub field for class_base = 0x0e (Intelligent I/O Controller)
#define PCI_BASE_CLASS_INTELLIGENT0x0e
#define PCI_CLASS_INTELLIGENT_I2O0x0e00
// values for the class_sub field for class_base = 0x0f (Satellite Communication Controller)
#define PCI_BASE_CLASS_SATELLITE0x0f
#define PCI_CLASS_SATELLITE_TV0x0f00
#define PCI_CLASS_SATELLITE_AUDIO0x0f01
#define PCI_CLASS_SATELLITE_VOICE0x0f03
#define PCI_CLASS_SATELLITE_DATA0x0f04
// values for the class_sub field for class_base = 0x10 (Encryption and decryption controller)
#define PCI_BASE_CLASS_CRYPT0x10
#define PCI_CLASS_CRYPT_NETWORK0x1000
#define PCI_CLASS_CRYPT_ENTERTAINMENT0x1010
#define PCI_CLASS_CRYPT_OTHER0x1080
// values for the class_sub field for class_base = 0x11 (Data Acquisition and Signal Processing Controllers)
#define PCI_BASE_CLASS_SIGNAL0x11
#define PCI_CLASS_SIGNAL_DPIO0x1100
#define PCI_CLASS_SIGNAL_PERF_CTR0x1101
#define PCI_CLASS_SIGNAL_SYNCHRONIZER0x1110
#define PCI_CLASS_SIGNAL_OTHER0x1180
// values for the class_sub field for class_base = 0xff (Device does not fit any defined class)
#define PCI_CLASS_OTHERS0xff
/* Several ID's we need in the library */
branches/Chimera/i386/libsaio/fake_efi.c
33
44
55
6
67
78
89
......
8384
8485
8586
86
87
8788
8889
8990
......
172173
173174
174175
175
176
176177
177178
178179
......
282283
283284
284285
285
286
286287
287288
288289
......
388389
389390
390391
391
392
393
392
393
394
394395
395396
396397
......
424425
425426
426427
427
428
429
430
431
432
433
434
435
436
428
429
430
431
432
433
434
435
436
437
437438
438439
439440
* Copyright 2007 David F. Elliott. All rights reserved.
*/
#include "saio_types.h"
#include "libsaio.h"
#include "boot.h"
#include "bootstruct.h"
static uint8_t const VOIDRET_INSTRUCTIONS[] = {0xc3};
/* movl $0x80000003,%eax; ret */
static uint8_t const UNSUPPORTEDRET_INSTRUCTIONS[] = {0xb8, 0x03, 0x00, 0x00, 0x80, 0xc3};
static uint8_t const UNSUPPORTEDRET_INSTRUCTIONS[] = {0x48, 0xb8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc3};
EFI_SYSTEM_TABLE_32 *gST32 = NULL;
EFI_SYSTEM_TABLE_64 *gST64 = NULL;
struct fake_efi_pages *fakeEfiPages = (struct fake_efi_pages*)AllocateKernelMemory(sizeof(struct fake_efi_pages));
// Zero out all the tables in case fields are added later
bzero(fakeEfiPages, sizeof(struct fake_efi_pages));
//bzero(fakeEfiPages, sizeof(struct fake_efi_pages));
// --------------------------------------------------------------------
// Initialize some machine code that will return EFI_UNSUPPORTED for
struct fake_efi_pages *fakeEfiPages = (struct fake_efi_pages*)AllocateKernelMemory(sizeof(struct fake_efi_pages));
// Zero out all the tables in case fields are added later
bzero(fakeEfiPages, sizeof(struct fake_efi_pages));
//bzero(fakeEfiPages, sizeof(struct fake_efi_pages));
// --------------------------------------------------------------------
// Initialize some machine code that will return EFI_UNSUPPORTED for
*/
/* These should be const but DT__AddProperty takes char* */
static const char const TSC_Frequency_prop[] = "TSCFrequency";
static const char const FSB_Frequency_prop[] = "FSBFrequency";
static const char const CPU_Frequency_prop[] = "CPUFrequency";
static const char TSC_Frequency_prop[] = "TSCFrequency";
static const char FSB_Frequency_prop[] = "FSBFrequency";
static const char CPU_Frequency_prop[] = "CPUFrequency";
/*==========================================================================
* SMBIOS
*/
/* These should be const but DT__AddProperty takes char* */
static const char const FIRMWARE_REVISION_PROP[] = "firmware-revision";
static const char const FIRMWARE_ABI_PROP[] = "firmware-abi";
static const char const FIRMWARE_VENDOR_PROP[] = "firmware-vendor";
static const char const FIRMWARE_ABI_32_PROP_VALUE[] = "EFI32";
static const char const FIRMWARE_ABI_64_PROP_VALUE[] = "EFI64";
static const char const SYSTEM_ID_PROP[] = "system-id";
static const char const SYSTEM_SERIAL_PROP[] = "SystemSerialNumber";
static const char const SYSTEM_TYPE_PROP[] = "system-type";
static const char const MODEL_PROP[] = "Model";
static const char const BOARDID_PROP[] = "board-id";
static const char FIRMWARE_REVISION_PROP[] = "firmware-revision";
static const char FIRMWARE_ABI_PROP[] = "firmware-abi";
static const char FIRMWARE_VENDOR_PROP[] = "firmware-vendor";
static const char FIRMWARE_ABI_32_PROP_VALUE[] = "EFI32";
static const char FIRMWARE_ABI_64_PROP_VALUE[] = "EFI64";
static const char SYSTEM_ID_PROP[] = "system-id";
static const char SYSTEM_SERIAL_PROP[] = "SystemSerialNumber";
static const char SYSTEM_TYPE_PROP[] = "system-type";
static const char MODEL_PROP[] = "Model";
static const char BOARDID_PROP[] = "board-id";
/*
* Get an smbios option string option to convert to EFI_CHAR16 string
branches/Chimera/i386/libsaio/smbios_getters.c
3333
3434
3535
36
3637
3738
3839
......
192193
193194
194195
196
195197
196198
197199
......
202204
203205
204206
205
207
208
206209
207210
208211
// removes FSB info from system profiler as on real mac's.
case CPU_MODEL_SANDYBRIDGE:
case CPU_MODEL_IVYBRIDGE:
case CPU_MODEL_HASWELL:
value->word = 0;
break;
default:
case CPU_MODEL_SANDYBRIDGE:// Intel Core i3, i5, i7 LGA1155 (32nm)
case CPU_MODEL_IVYBRIDGE:// Intel Core i3, i5, i7 LGA1155 (22nm)
case CPU_MODEL_DALES_32NM:// Intel Core i3, i5 LGA1156 (32nm)
case CPU_MODEL_HASWELL: // Intel Core i3, i5, i7, Xeon E3 LGA1155 (22nm)
if (strstr(Platform.CPU.BrandString, "Xeon(R)"))
value->word = 0x0501;// Xeon
else
value->word = 0x0601;// Core i5
else
value->word = 0x0701;// Core i7
return true;}
return true;
}
}
}
}
branches/Chimera/i386/libsaio/saio_internal.h
218218
219219
220220
221
222
223
221224
unsigned int byteoff,
unsigned int byteCount, void * buffer );
// Base64-decode.c
char *BASE64Decode(const char* src, int in_len, int* out_len);
#endif /* !__LIBSAIO_SAIO_INTERNAL_H */
branches/Chimera/i386/boot2/graphics.c
4242
4343
4444
45
45
4646
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
4771
4872
4973
uint8_t *previewSaveunder = 0;
#define VIDEO(x) (bootArgs->Video.v_ ## x)
//==========================================================================
// getVBEVideoRam
uint32_t getVBEVideoRam()
{
VBEInfoBlock vbeInfo;
int err, small;
char *buff = malloc(sizeof(char)*256);
if(!buff) return 0;
bzero( &vbeInfo, sizeof(vbeInfo) );
strcpy( (char*)&vbeInfo, "VBE2" );
err = getVBEInfo( &vbeInfo );
if (err != errSuccess)
return 0;
if ( strncmp( (char *)vbeInfo.VESASignature, "VESA", 4 ) )
return 0;
small = (vbeInfo.TotalMemory < 16);
return vbeInfo.TotalMemory * 64 * 1024;
}
//==========================================================================
// getVBEInfoString
char *getVBEInfoString()
branches/Chimera/i386/boot2/graphics.h
3737
3838
3939
40
40
4141
4242
4343
int loadEmbeddedPngImage(uint8_t *pngData, int pngSize, uint16_t *width, uint16_t *height, uint8_t **imageData);
uint32_t getVBEVideoRam();
char *getVBEInfoString();
char *getVBEModeInfoString();
void getGraphicModeParams(unsigned long params[]);
branches/Chimera/i386/boot2/drivers.c
747747
748748
749749
750
751
752
750
753751
754752
755753
if (length == -1) return -1;
required = XMLGetProperty(moduleDict, kPropOSBundleRequired);
if ( (required == 0) ||
(required->type != kTagTypeString) ||
!strcmp(required->string, "Safe Boot"))
if ( (required != NULL) && (required->type == kTagTypeString) && !strcmp(required->string, "Safe Boot"))
{
XMLFreeTag(moduleDict);
return -2;
branches/Chimera/i386/boot2/boot.c
145145
146146
147147
148
148
149149
150150
151151
......
198198
199199
200200
201
201
202
202203
203204
204205
......
238239
239240
240241
242
241243
242
243
244
244
245
246
247
248
249
245250
246251
247252
reserveKernBootStruct();
// Notify modules that the kernel has been decoded
execute_hook("DecodedKernel", (void*)binary, NULL, NULL, NULL);
execute_hook("DecodedKernel", (void*)binary, (void*)bootArgs->kaddr, (void*)bootArgs->ksize, NULL);
setupFakeEfi();
finalizeBootStruct();
// Jump to kernel's entry point. There's no going back now.
if ((checkOSVersion("10.7")) || (checkOSVersion("10.8"))) {
if ((checkOSVersion("10.7")) || (checkOSVersion("10.8")) || (checkOSVersion("10.9")))
{
// Notify modules that the kernel is about to be started
execute_hook("Kernel Start", (void*)kernelEntry, (void*)bootArgs, NULL, NULL);
// Use specify kernel cache file if not empty
if (cacheFile[0] != 0)
{
strlcpy(kernelCacheFile, cacheFile, sizeof(kernelCacheFile));
else {
// Lion and Mountain Lion prelink kernel cache file
if ((checkOSVersion("10.7")) || (checkOSVersion("10.8"))) {
}
else
{
// Lion, Mountain Lion and Mavericks prelink kernel cache file
if ((checkOSVersion("10.7")) || (checkOSVersion("10.8")) || (checkOSVersion("10.9")))
{
sprintf(kernelCacheFile, "%skernelcache", kDefaultCachePathSnow);
}
// Snow Leopard prelink kernel cache file
branches/Chimera/i386/boot2/modules.c
1515
1616
1717
18
18
1919
2020
2121
......
149149
150150
151151
152
153
154
155
156
152157
153158
154159
#if CONFIG_MODULE_DEBUG
#define DBG(x...)printf(x);
#define DBG(x...)printf(x)
#define DBGPAUSE()getchar()
#else
#define DBG(x...)
}
unsigned int moduleSize = file_size(fh);
if(moduleSize == 0)
{
DBG("WARNING: The module %s has a file size of %d, the module will not be loaded.\n", modString, moduleSize);
return 0;
}
char* module_base = (char*) malloc(moduleSize);
if (moduleSize && read(fh, module_base, moduleSize) == moduleSize)
{
branches/Chimera/i386/boot2/gui.c
4343
4444
4545
46
47
4648
4749
4850
......
5557
5658
5759
60
61
5862
5963
6064
......
118122
119123
120124
125
126
121127
122128
123129
......
131137
132138
133139
140
141
134142
135143
136144
......
228236
229237
230238
239
231240
241
232242
233243
234244
......
351361
352362
353363
364
365
354366
355367
356368
......
364376
365377
366378
379
380
367381
368382
369383
......
884898
885899
886900
901
902
903
887904
888905
889906
iDeviceGeneric_o,
iDeviceHFS,
iDeviceHFS_o,
iDeviceHFS_mav,
iDeviceHFS_mav_o,
iDeviceHFS_ML,
iDeviceHFS_ML_o,
iDeviceHFS_Lion,
iDeviceHFS_Tiger_o,
iDeviceHFSRAID,
iDeviceHFSRAID_o,
iDeviceHFSRAID_mav,
iDeviceHFSRAID_mav_o,
iDeviceHFSRAID_ML,
iDeviceHFSRAID_ML_o,
iDeviceHFSRAID_Lion,
{.name = "device_generic_o", .image = NULL},
{.name = "device_hfsplus", .image = NULL},
{.name = "device_hfsplus_o", .image = NULL},
{.name = "device_hfsplus_mav", .image = NULL},
{.name = "device_hfsplus_mav_o", .image = NULL},
{.name = "device_hfsplus_ml", .image = NULL},
{.name = "device_hfsplus_ml_o", .image = NULL},
{.name = "device_hfsplus_lion", .image = NULL},
{.name = "device_hfsraid", .image = NULL},
{.name = "device_hfsraid_o", .image = NULL},
{.name = "device_hfsraid_mav", .image = NULL},
{.name = "device_hfsraid_mav_o", .image = NULL},
{.name = "device_hfsraid_ml", .image = NULL},
{.name = "device_hfsraid_ml_o", .image = NULL},
{.name = "device_hfsraid_lion", .image = NULL},
for (i = 0; i < sizeof(images) / sizeof(images[0]); i++)
{
if (strcmp(name, images[i].name) == 0)
{
return i; // found the name
}
}
return -1;
}
LOADPNG(device_generic_o, iDeviceGeneric);
LOADPNG(device_hfsplus, iDeviceGeneric);
LOADPNG(device_hfsplus_o, iDeviceHFS);
LOADPNG(device_hfsplus_mav, iDeviceHFS);
LOADPNG(device_hfsplus_mav_o, iDeviceHFS_mav);
LOADPNG(device_hfsplus_ml, iDeviceHFS);
LOADPNG(device_hfsplus_ml_o, iDeviceHFS_ML);
LOADPNG(device_hfsplus_lion, iDeviceHFS);
LOADPNG(device_hfsraid, iDeviceHFS);
LOADPNG(device_hfsraid_o, iDeviceHFSRAID);
LOADPNG(device_hfsraid_mav, iDeviceHFSRAID);
LOADPNG(device_hfsraid_mav_o, iDeviceHFSRAID_mav);
LOADPNG(device_hfsraid_ml, iDeviceHFSRAID);
LOADPNG(device_hfsraid_ml_o, iDeviceHFSRAID_ML);
LOADPNG(device_hfsraid_lion, iDeviceHFSRAID);
{
// Use HFS or HFSRAID icon depending on bvr flags. Fallbacks are handled by alt_image above.
switch (device->OSVersion[3]) {
case '9':
devicetype = (device->flags & kBVFlagBooter ? iDeviceHFSRAID_mav : iDeviceHFS_mav);
break;
case '8':
devicetype = (device->flags & kBVFlagBooter ? iDeviceHFSRAID_ML : iDeviceHFS_ML);
break;
branches/Chimera/i386/boot2/options.c
3030
3131
3232
33
3334
3435
3536
......
188189
189190
190191
192
191193
192194
193
195
194196
195197
196198
197
199
198200
199201
200202
......
848850
849851
850852
851
853
852854
853855
854856
......
856858
857859
858860
859
861
860862
861863
862864
......
866868
867869
868870
871
872
873
874
875
876
877
878
879
869880
870881
871882
......
10581069
10591070
10601071
1072
1073
10611074
10621075
10631076
#include "term.h"
#include "embedded.h"
#include "pci.h"
#include "modules.h"
bool showBootBanner = true; //Azi:showinfo
static bool shouldboot = false;
if (bootArgs->Video.v_display != VGA_TEXT_MODE) {
clearGraphicBootPrompt();
}
execute_hook("ClearArgs", NULL, NULL, NULL, NULL);
}
static void addBootArg(const char * argStr)
void addBootArg(const char * argStr)
{
if ( (gBootArgsPtr + strlen(argStr) + 1) < gBootArgsEnd)
{
*gBootArgsPtr++ = ' ';
if(gBootArgsPtr != gBootArgs) *gBootArgsPtr++ = ' ';
strcat(gBootArgs, argStr);
gBootArgsPtr += strlen(argStr);
}
goto done;
}
if (gDeviceCount) {
if (gDeviceCount >0) {
// Allocate memory for an array of menu items.
menuItems = malloc(sizeof(MenuItem) * gDeviceCount);
if (menuItems == NULL) {
}
// Associate a menu item for each BVRef.
for (bvr=bvChain, i=gDeviceCount-1, selectIndex=0; bvr; bvr=bvr->next) {
for (bvr=bvChain, i=gDeviceCount-1, selectIndex=-1; bvr; bvr=bvr->next) {
if (bvr->visible) {
getBootVolumeDescription(bvr, menuItems[i].name, sizeof(menuItems[i].name) - 1, true);
menuItems[i].param = (void *) bvr;
i--;
}
}
// Jief : In case the default partition (returned by selectBootVolume) is not in the menu
if ( selectIndex == -1 )
{
selectIndex = 0;
// gDeviceCount is actually > 0, so menuItems[selectIndex] exists
menuBVR = (BVRef)(menuItems[selectIndex].param);
// what happen is bvChain is empty ?
}
}
if (bootArgs->Video.v_display != VGA_TEXT_MODE) {
free(menuItems);
menuItems = NULL;
}
// The next line if uncommented will write the command line boot options to nvram
// execute_hook("BootOptions", gBootArgs, gBootArgsPtr, NULL, NULL);
return 0;
}
branches/Chimera/i386/modules/HDAEnabler/Cconfig
1
2
3
4
5
6
7
8
9
10
#
# Chameleon Modules
#
config HDAENABLER_MODULE
tristate "HDAEnabler Module"
default y
---help---
Say Y here if you want to enable the use of this module.
branches/Chimera/i386/modules/HDAEnabler/Readme.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Module:HDAEnabler
Description: This module provides a substitute for the Hight Definition Audio DSDT Edits (HDEF and HDAU).
Dependencies: none
Usage:
- Copy the module HDAEnabler.dylib into /Extra/modules folder
- Set HDAEnabler=Yes (Default value is YES if the module is in modules folder)
- Set HDEFLayoutID="a hex value" for HDEF layout to use with a patched AppleHDA kext.
- Set HDAULayoutID="a hex value" for HDAU layout to use with a patched AppleHDA kext.
-----
- HDAEnabler=No (Disable the HDAEnabler module with module in modules folder).
branches/Chimera/i386/modules/HDAEnabler/Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
MODULE_NAME = HDAEnabler
MODULE_AUTHOR = "ErmaC"
MODULE_DESCRIPTION = This module provides a remplacement for the DSDT edits like HDEF/HDAU
MODULE_VERSION = "1.0.0"
MODULE_COMPAT_VERSION = "1.0.0"
MODULE_START = $(MODULE_NAME)_start
MODULE_DEPENDENCIES =
DIR = HDAEnabler
include ../MakeInc.dir
$(SYMROOT)/modules/$(MODULE_NAME).dylib:
@echo "\t[CP] $(MODULE_NAME).dylib"
@cp $(MODULE_NAME).dylib $(SRCROOT)/sym/i386/modules/$(MODULE_NAME).dylib
$(SRCROOT)/sym/i386/boot_modules.c:
@
branches/Chimera/i386/modules/Keylayout/Keylayout.c
117117
118118
119119
120
120
121121
122122
123123
sprintf(layoutPath, "/Extra/Keymaps/%s", val);
// Add the extension if needed
if (len <= 4 || strcmp(val+len-4,".lyt") != 0)
strncat(layoutPath, ".lyt", sizeof(layoutPath));
strncat(layoutPath, ".lyt", sizeof(layoutPath) - strlen(layoutPath) - 1);
if (!load_keyboard_layout_file(layoutPath)) {
printf("Can't load %s keyboard layout file. Keylayout will not be used !\n",
branches/Chimera/i386/modules/Cconfig
1212
1313
1414
15
1516
source "i386/modules/ACPIcodec/Cconfig"
source "i386/modules/KernelPatcher/Cconfig"
source "i386/modules/FileNVRAM/Cconfig"
source "i386/modules/HDAEnabler/Cconfig"
endmenu
branches/Chimera/i386/modules/AcpiCodec/acpi_codec.c
17691769
17701770
17711771
1772
1772
17731773
17741774
17751775
{
{
TagPtr CstateTag;
TagPtr CstateTag = NULL;
U32 entry_count = 0;
if (bootInfo->chameleonConfig.dictionary)
branches/Chimera/i386/modules/Makefile
4545
4646
4747
48
49
50
51
4852
4953
5054
SUBDIRS += FileNVRAM
endif
ifdef CONFIG_HDAENABLER_MODULE
SUBDIRS += HDAEnabler
endif
CFLAGS= -O3 $(MORECPP) -arch i386 -g -static
DEFINES=
CONFIG = hd
branches/Chimera/i386/libsa/libsa.h
8484
8585
8686
87
88
8789
8890
8991
#ifndef bzero
extern void bzero(void * dst, size_t len);
#else
#error bzero is defined.
#endif
extern void * memset(void * dst, int c, size_t n);
branches/Chimera/package/bin/clean_po_headers.sh
1010
1111
1212
13
13
1414
1515
1616
lang=${pofile##*/}
lang=${lang%.*}
gsed -i 's/; charset=CHARSET/; charset=UTF-8/g' $pofile
gsed -i 's/^\"Project-Id-Version: PACKAGE VERSION/\"Project-Id-Version: Chameleon 2.1/' $pofile
gsed -i 's/^\"Project-Id-Version: PACKAGE VERSION/\"Project-Id-Version: Chameleon 2.2/' $pofile
gsed -i "s/^\"Language:.*\"/\"Language: $lang\\\n\"/" $pofile
gsed -i "s/^\"Language-Team:.*\"/\"Language-Team: $lang <$lang@li.org>\\\n\"/" $pofile
done
branches/Chimera/auto.conf
11
22
33
4
4
55
6
7
8
6
97
108
119
1210
13
1411
15
1612
1713
1814
1915
2016
21
2217
#
# Automatically generated make config: don't edit
# Chameleon Configuration
# Mon May 13 13:47:19 2013
# Thu Jun 20 17:46:59 2013
#
CONFIG_UCLIBCXX_MODULE=m
CONFIG_SATA_MODULE=m
CONFIG_KLIBC_MODULE=m
CONFIG_HDAENABLER_MODULE=y
CONFIG_BOOT1_HFS_VERBOSE=y
CONFIG_BOOT1_HFS=y
CONFIG_MODULES=y
CONFIG_BOOT0_VERBOSE=y
CONFIG_ACPICODEC_MODULE=m
CONFIG_OPTIMIZATION_LEVEL="-Oz"
CONFIG_KERNELPATCHER_MODULE=y
CONFIG_BDMESG=y
CONFIG_BOOT1_HFS_ACTIVE_VERBOSE=y
CONFIG_BOOT1_HFS_ACTIVE=y
CONFIG_FILENVRAM_MODULE=y
CONFIG_FDISK440=y
CONFIG_RESOLUTION_MODULE=m
CONFIG_KEYLAYOUT_MODULE=m
branches/Chimera/CREDITS
33
44
55
6
6
77
88
99
......
1515
1616
1717
18
18
Developers:
----------
zef, Turbo, dfe, netkas, mackerintel, mercurysquad, fassl, Kabyl, Crazor, Dense, kaitek, iNDi, munky, JrCs, asereBLN, rekursor, mozodojo, meklort, AnV, valv, AzimutZ, Slice, cosmo1t, cparm, Conti
zef, Turbo, dfe, netkas, mackerintel, mercurysquad, fassl, Kabyl, Crazor, Dense, kaitek, iNDi, munky, DHP, JrCs, asereBLN, rekursor, mozodojo, meklort, AnV, valv, AzimutZ, Slice, cosmo1t, cparm, Conti, ErmaC
Thanks to:
---------
Copyright:
---------
2008-2012
2008-2013
branches/Chimera/revision
1
1
2109
2246
branches/Chimera/autoconf.h
11
22
33
4
4
55
66
77
8
9
10
8
119
1210
1311
1412
15
1613
17
1814
1915
2016
2117
2218
23
2419
//
// Automatically generated make config: don't edit
// Chameleon Configuration
// Mon May 13 13:47:19 2013
// Thu Jun 20 17:46:59 2013
//
#define CONFIG_IS_BUILTIN 1
#define CONFIG_IS_MODULE 2
#define CONFIG_UCLIBCXX_MODULE CONFIG_IS_MODULE
#define CONFIG_SATA_MODULE CONFIG_IS_MODULE
#define CONFIG_KLIBC_MODULE CONFIG_IS_MODULE
#define CONFIG_HDAENABLER_MODULE CONFIG_IS_BUILTIN
#define CONFIG_BOOT1_HFS_VERBOSE CONFIG_IS_BUILTIN
#define CONFIG_BOOT1_HFS CONFIG_IS_BUILTIN
#define CONFIG_MODULES CONFIG_IS_BUILTIN
#define CONFIG_BOOT0_VERBOSE CONFIG_IS_BUILTIN
#define CONFIG_ACPICODEC_MODULE CONFIG_IS_MODULE
#define CONFIG_OPTIMIZATION_LEVEL "-Oz"
#define CONFIG_KERNELPATCHER_MODULE CONFIG_IS_BUILTIN
#define CONFIG_BDMESG CONFIG_IS_BUILTIN
#define CONFIG_BOOT1_HFS_ACTIVE_VERBOSE CONFIG_IS_BUILTIN
#define CONFIG_BOOT1_HFS_ACTIVE CONFIG_IS_BUILTIN
#define CONFIG_FILENVRAM_MODULE CONFIG_IS_BUILTIN
#define CONFIG_FDISK440 CONFIG_IS_BUILTIN
#define CONFIG_RESOLUTION_MODULE CONFIG_IS_MODULE
#define CONFIG_KEYLAYOUT_MODULE CONFIG_IS_MODULE
branches/Chimera/doc/README
1919
2020
2121
22
2223
2324
2425
......
7071
7172
7273
73
74
7475
7576
7677
7778
7879
7980
80
81
8182
8283
84
8385
8486
8587
- Apple Software RAID support.
- stage2 loader (boot) can be placed as a regular file in the boot
partition's root folder.
- Modules
Installation
--------
If you have any questions, issues etc. feel free to join us
at irc.voodooprojects.org #chameleon
at irc.voodooprojects.org #chameleon or http://forum.voodooprojects.org/
Source Code
-----------
For downloading the source code please visit the project page at
http://chameleon.osx86.hu
http://forge.voodooprojects.org/p/chameleon/
Licensing
---------
branches/Chimera/CHANGES
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
117
218
319
-macman: Chimera 2.1.0 specific changes:
Added Haswell CPU support with model and speed detection
Disabled writing of boot arguments to nvram
Reverted AMD graphics card reporting and log messages to Chimera v1.11.1 style
Reverted NVIDIA graphics card reporting to Chimera v1.11.1 style
Included mosts changes from trunk r2246 that didn't conflict with Chimera 2.0.1 fixes and enhancements
- Fix menuBVR initialization problem
- Implement ErmaC's HDAEnabler.dylib module
- Fix Bug in the loop that look for an ATI card. Credits to Jief Luce
- Fix extension without kPropOSBundleRequired property weren't loaded. Credits to Jief Luce
- Fix Revision mismatch http://forge.voodooprojects.org/p/chameleon/issues/330/
- ErmaC : Improve PCI info. Interface program and device revision.
- Fix Possible bug in i386/libsaio/device_inject.c devprop_add_device() http://forge.voodooprojects.org/p/chameleon/issues/319/
- Fix warnings/errors from new llvm/clang (xcode 4.6)
- Fix base64 decode, fixes Issue http://forge.voodooprojects.org/p/chameleon/issues/320/
- meklort : FileNVRAM module import
-macman: Chimera 2.0.1 specific changes:
iMessage login fix by Meklort from Chameleon 2.2 r2169
HD4000 support from Chimera 1.11.1

Archive Download the corresponding diff file

Revision: 2249