Index: branches/Chimera/.config =================================================================== --- branches/Chimera/.config (revision 2248) +++ branches/Chimera/.config (revision 2249) @@ -1,7 +1,7 @@ # # 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 @@ -21,13 +21,12 @@ # # 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 Index: branches/Chimera/version =================================================================== --- branches/Chimera/version (revision 2248) +++ branches/Chimera/version (revision 2249) @@ -1 +1 @@ -2.0.1 +2.1.0 Index: branches/Chimera/autoconf.inc =================================================================== --- branches/Chimera/autoconf.inc (revision 2248) +++ branches/Chimera/autoconf.inc (revision 2249) @@ -1,28 +1,27 @@ ; ; 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 Index: branches/Chimera/i386/libsaio/xml.c =================================================================== --- branches/Chimera/i386/libsaio/xml.c (revision 2248) +++ branches/Chimera/i386/libsaio/xml.c (revision 2249) @@ -793,6 +793,7 @@ static long ParseTagData( char * buffer, TagPtr * tag ) { + int actuallen = 0; long length; TagPtr tmpTag; @@ -806,13 +807,11 @@ //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; @@ -972,7 +971,7 @@ #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); @@ -1114,6 +1113,10 @@ return entry && (entry->type == kTagTypeDict); } +bool XMLIsData(TagPtr entry) +{ + return entry && (entry->type == kTagTypeData); +} TagPtr XMLCastDict(TagPtr dict) { @@ -1139,6 +1142,20 @@ 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 && Index: branches/Chimera/i386/libsaio/xml.h =================================================================== --- branches/Chimera/i386/libsaio/xml.h (revision 2248) +++ branches/Chimera/i386/libsaio/xml.h (revision 2249) @@ -97,14 +97,15 @@ 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); Index: branches/Chimera/i386/libsaio/bootstruct.c =================================================================== --- branches/Chimera/i386/libsaio/bootstruct.c (revision 2248) +++ branches/Chimera/i386/libsaio/bootstruct.c (revision 2249) @@ -110,7 +110,7 @@ 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)); @@ -146,7 +146,7 @@ bootArgs->MemoryMapDescriptorSize = sizeof(EfiMemoryRange); bootArgs->MemoryMapDescriptorVersion = 0; - for (i=0; imemoryMap[i]; switch(range->type) { case kMemoryRangeACPI: Index: branches/Chimera/i386/libsaio/bootstruct.h =================================================================== --- branches/Chimera/i386/libsaio/bootstruct.h (revision 2248) +++ branches/Chimera/i386/libsaio/bootstruct.h (revision 2249) @@ -52,7 +52,7 @@ #define CONFIG_SIZE (40 * 4096) -#define kMemoryMapCountMax 40 +#define kMemoryMapCountMax 1000 /* * PCI bus information. Index: branches/Chimera/i386/libsaio/acpi_patcher.c =================================================================== --- branches/Chimera/i386/libsaio/acpi_patcher.c (revision 2248) +++ branches/Chimera/i386/libsaio/acpi_patcher.c (revision 2249) @@ -572,10 +572,12 @@ 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 { Index: branches/Chimera/i386/libsaio/spd.c =================================================================== --- branches/Chimera/i386/libsaio/spd.c (revision 2248) +++ branches/Chimera/i386/libsaio/spd.c (revision 2249) @@ -373,6 +373,7 @@ {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 }, }; Index: branches/Chimera/i386/libsaio/Makefile =================================================================== --- branches/Chimera/i386/libsaio/Makefile (revision 2248) +++ branches/Chimera/i386/libsaio/Makefile (revision 2249) @@ -38,7 +38,7 @@ 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)) Index: branches/Chimera/i386/libsaio/gma.c =================================================================== --- branches/Chimera/i386/libsaio/gma.c (revision 2248) +++ branches/Chimera/i386/libsaio/gma.c (revision 2249) @@ -12,6 +12,8 @@ #include "platform.h" #include "device_inject.h" #include "gma.h" +#include "vbe.h" +#include "graphics.h" #ifndef DEBUG_GMA #define DEBUG_GMA 0 Index: branches/Chimera/i386/libsaio/device_inject.c =================================================================== --- branches/Chimera/i386/libsaio/device_inject.c (revision 2248) +++ branches/Chimera/i386/libsaio/device_inject.c (revision 2249) @@ -171,7 +171,7 @@ 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)); Index: branches/Chimera/i386/libsaio/device_inject.h =================================================================== --- branches/Chimera/i386/libsaio/device_inject.h (revision 2248) +++ branches/Chimera/i386/libsaio/device_inject.h (revision 2249) @@ -11,6 +11,7 @@ #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; Index: branches/Chimera/i386/libsaio/base64-decode.c =================================================================== --- branches/Chimera/i386/libsaio/base64-decode.c (revision 0) +++ branches/Chimera/i386/libsaio/base64-decode.c (revision 2249) @@ -0,0 +1,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 + +//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 */ \ No newline at end of file Index: branches/Chimera/i386/libsaio/nvidia.c =================================================================== --- branches/Chimera/i386/libsaio/nvidia.c (revision 2248) +++ branches/Chimera/i386/libsaio/nvidia.c (revision 2249) @@ -65,9 +65,9 @@ #define DBG(x...) #endif -#define NVIDIA_ROM_SIZE 0x10000 +#define NVIDIA_ROM_SIZE 0x20000 #define PATCH_ROM_SUCCESS 1 -#define PATCH_ROM_SUCCESS_HAS_LVDS 2 +#define PATCH_ROM_SUCCESS_HAS_LVDS 2 #define PATCH_ROM_FAILED 0 #define MAX_NUM_DCB_ENTRIES 16 #define TYPE_GROUPED 0xff @@ -112,280 +112,340 @@ #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 @@ -396,6 +456,22 @@ // 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 @@ -403,12 +479,12 @@ // 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 @@ -420,168 +496,193 @@ // 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 @@ -597,64 +698,71 @@ // 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 @@ -676,52 +784,64 @@ // 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 @@ -757,20 +877,22 @@ // 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 @@ -788,58 +910,75 @@ // 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 @@ -853,8 +992,8 @@ // 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 @@ -867,71 +1006,103 @@ // 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 @@ -939,59 +1110,93 @@ // 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 @@ -999,6 +1204,204 @@ // 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)) { @@ -1226,7 +1629,9 @@ 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); @@ -1238,23 +1643,44 @@ } } - 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; @@ -1265,14 +1691,11 @@ } 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; @@ -1366,15 +1789,38 @@ 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; @@ -1382,7 +1828,7 @@ 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) { @@ -1445,14 +1891,13 @@ // 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) { @@ -1462,11 +1907,14 @@ 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; @@ -1506,11 +1954,11 @@ 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 @@ -1528,10 +1976,10 @@ 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 @@ -1604,7 +2052,7 @@ } } } - + sprintf(biosVersion, "%s", (nvBiosOveride > 0) ? nvFilename : version_str); sprintf(kNVCAP, "NVCAP_%04x", nvda_dev->device_id); Index: branches/Chimera/i386/libsaio/ati.c =================================================================== --- branches/Chimera/i386/libsaio/ati.c (revision 2248) +++ branches/Chimera/i386/libsaio/ati.c (revision 2249) @@ -5,63 +5,19 @@ * */ -#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", @@ -79,829 +35,1536 @@ "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_t ports; -} 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_t device_id; - uint32_t subsys_id; - chip_family_t chip_family; - const char *model_name; - config_name_t cfg_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_t rom_size; - uint32_t vram_size; - const char *cfg_name; - uint8_t ports; - uint32_t flags; - bool posted; -} card_t; -card_t *card; +// { 0x6784, 0x00000000, CHIP_FAMILY_TAHITI, "AMD Radeon HD ??? Series", kFutomaki }, -/* Flags */ -#define MKFLAG(n) (1 << n) -#define FLAGTRUE MKFLAG(0) -#define EVERGREEN MKFLAG(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_t type; - uint32_t size; - 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_t flags; - bool all_ports; - char *name; - bool (*get_value)(value_t *val); - value_t default_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 }, @@ -910,28 +1573,28 @@ // {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) @@ -941,11 +1604,8 @@ val->type = kStr; val->size = strlen("onboard-1") + 1; val->data = (uint8_t *)"onboard-1"; - + return true; - - - } return false; } @@ -955,11 +1615,13 @@ static uint32_t v = 0; if (v) + { return false; - + } if (!card->posted) + { return false; - + } v = 1; val->type = kCst; val->size = 4; @@ -1006,9 +1668,13 @@ 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; } @@ -1021,8 +1687,9 @@ 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; @@ -1033,8 +1700,9 @@ bool get_binimage_val(value_t *val) { if (!card->rom) + { return false; - + } val->type = kPtr; val->size = card->rom_size; val->data = card->rom; @@ -1046,8 +1714,10 @@ { uint8_t *rev; if (!card->rom) + { return false; - + } + rev = card->rom + *(uint8_t *)(card->rom + OFFSET_TO_GET_ATOMBIOS_STRINGS_START); val->type = kPtr; @@ -1055,8 +1725,10 @@ val->data = malloc(val->size); if (!val->data) + { return false; - + } + memcpy(val->data, rev, val->size); return true; @@ -1090,8 +1762,9 @@ { val->data = malloc(0x80); if (!val->data) + { return false; - + } bzero(val->data, 0x80); val->type = kPtr; @@ -1103,6 +1776,7 @@ bool get_vramtotalsize_val(value_t *val) { + val->type = kCst; val->size = 4; val->data = (uint8_t *)&card->vram_size; @@ -1113,15 +1787,17 @@ 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++) { @@ -1183,15 +1859,21 @@ 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; } @@ -1201,22 +1883,28 @@ 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; @@ -1225,25 +1913,31 @@ } 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) @@ -1253,21 +1947,28 @@ 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); @@ -1277,16 +1978,16 @@ 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; @@ -1311,13 +2012,17 @@ // 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 @@ -1341,16 +2046,16 @@ 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 @@ -1398,12 +2103,16 @@ // 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; } @@ -1415,10 +2124,14 @@ 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); @@ -1434,41 +2147,39 @@ char name_parent[24]; int i; int n_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)); @@ -1485,34 +2196,32 @@ { 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); @@ -1522,7 +2231,7 @@ // 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) @@ -1530,20 +2239,20 @@ { 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; @@ -1560,32 +2269,37 @@ 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! @@ -1595,13 +2309,14 @@ // ------------------------------------------------- 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; } Index: branches/Chimera/i386/libsaio/nvidia.h =================================================================== --- branches/Chimera/i386/libsaio/nvidia.h (revision 2248) +++ branches/Chimera/i386/libsaio/nvidia.h (revision 2249) @@ -54,8 +54,13 @@ 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; @@ -70,7 +75,6 @@ uint8_t size; /* Size in multiples of 512 */ }; -#define NV_SUB_IDS 0x00000000 #define NV_PMC_OFFSET 0x000000 #define NV_PMC_SIZE 0x2ffff #define NV_PDISPLAY_OFFSET 0x610000 Index: branches/Chimera/i386/libsaio/ati.h =================================================================== --- branches/Chimera/i386/libsaio/ati.h (revision 0) +++ branches/Chimera/i386/libsaio/ati.h (revision 2249) @@ -0,0 +1,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 FLAGTRUE MKFLAG(0) +#define EVERGREEN MKFLAG(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_t type; + uint32_t size; + uint8_t *data; +} value_t; + +//card to #ports +typedef struct { + const char *name; + uint8_t ports; +} card_config_t; + +//radeon card (includes teh AtiConfig) +typedef struct { + uint16_t device_id; + uint32_t subsys_id; + ati_chip_family_t chip_family; + const char *model_name; + ati_config_name_t cfg_name; +} radeon_card_info_t; + +// dev_tree representation +typedef struct { + uint32_t flags; + bool all_ports; + char *name; + bool (*get_value)(value_t *val); + value_t default_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_t rom_size; + uint64_t vram_size; + const char *cfg_name; + uint8_t ports; + uint32_t flags; + bool posted; +} 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 Index: branches/Chimera/i386/libsaio/cpu.c =================================================================== --- branches/Chimera/i386/libsaio/cpu.c (revision 2248) +++ branches/Chimera/i386/libsaio/cpu.c (revision 2249) @@ -384,7 +384,8 @@ 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 @@ -421,6 +422,7 @@ 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); Index: branches/Chimera/i386/libsaio/platform.h =================================================================== --- branches/Chimera/i386/libsaio/platform.h (revision 2248) +++ branches/Chimera/i386/libsaio/platform.h (revision 2249) @@ -45,6 +45,7 @@ #define CPU_MODEL_NEHALEM_EX 0x2E // Beckton #define CPU_MODEL_WESTMERE_EX 0x2F // Westmere-EX #define CPU_MODEL_IVYBRIDGE 0x3A // Ivy Bridge +#define CPU_MODEL_HASWELL 0x3C // Haswell /* CPU Features */ #define CPU_FEATURE_MMX 0x00000001 // MMX Instruction Set Index: branches/Chimera/i386/libsaio/disk.c =================================================================== --- branches/Chimera/i386/libsaio/disk.c (revision 2248) +++ branches/Chimera/i386/libsaio/disk.c (revision 2249) @@ -1341,20 +1341,26 @@ 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; + } } Index: branches/Chimera/i386/libsaio/smbios.c =================================================================== --- branches/Chimera/i386/libsaio/smbios.c (revision 2248) +++ branches/Chimera/i386/libsaio/smbios.c (revision 2249) @@ -325,9 +325,9 @@ { 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; @@ -339,15 +339,15 @@ 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; @@ -579,6 +579,7 @@ 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: Index: branches/Chimera/i386/libsaio/nvidia_helper.c =================================================================== --- branches/Chimera/i386/libsaio/nvidia_helper.c (revision 2248) +++ branches/Chimera/i386/libsaio/nvidia_helper.c (revision 2249) @@ -110,7 +110,7 @@ unsigned int i, 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")))) Index: branches/Chimera/i386/libsaio/pci.c =================================================================== --- branches/Chimera/i386/libsaio/pci.c (revision 2248) +++ branches/Chimera/i386/libsaio/pci.c (revision 2249) @@ -70,8 +70,8 @@ pci_dt_t **current = &start->children; uint32_t id; uint32_t pci_addr; - uint8_t dev; - uint8_t func; + uint8_t dev = 0; + uint8_t func = 0; uint8_t secondary_bus; uint8_t header_type; @@ -87,6 +87,8 @@ 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; @@ -178,7 +180,7 @@ 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, Index: branches/Chimera/i386/libsaio/pci.h =================================================================== --- branches/Chimera/i386/libsaio/pci.h (revision 2248) +++ branches/Chimera/i386/libsaio/pci.h (revision 2249) @@ -7,6 +7,13 @@ #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_t reg :6; @@ -25,18 +32,25 @@ typedef struct pci_dt_t { pci_dev_t dev; - uint16_t vendor_id; - uint16_t device_id; + uint16_t vendor_id; /* Specifies a vendor ID. The PCI bus configuration code obtains this + vendor ID from the vendor ID device register. */ + uint16_t device_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_t vendor_id; - uint16_t device_id; + uint16_t vendor_id; /* Specifies a subsystem vendor ID. */ + uint16_t device_id; /* Specifies a subsystem device ID that identifies the specific device. */ } subsys; uint32_t subsys_id; } subsys_id; - uint16_t class_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_t class_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; @@ -108,7 +122,9 @@ /* * 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_ID 0x00 /* 16 bits */ #define PCI_DEVICE_ID 0x02 /* 16 bits */ #define PCI_COMMAND 0x04 /* 16 bits */ @@ -142,9 +158,9 @@ #define PCI_STATUS_DETECTED_PARITY 0x8000 /* Set on parity error */ #define PCI_CLASS_REVISION 0x08 /* High 24 bits are class, low 8 revision */ -#define PCI_REVISION_ID 0x08 /* Revision ID */ -#define PCI_CLASS_PROG 0x09 /* Reg. Level Programming Interface */ -#define PCI_CLASS_DEVICE 0x0a /* Device class */ +#define PCI_CLASS_PROG 0x09 /* Reg. Level Programming Interface know also as PCI_PROG_IF */ +#define PCI_CLASS_DEVICE 0x0a /* Device subclass */ +//#define PCI_SUBCLASS_DEVICE 0x0b /* Device class */ #define PCI_CACHE_LINE_SIZE 0x0c /* 8 bits */ #define PCI_LATENCY_TIMER 0x0d /* 8 bits */ @@ -278,7 +294,7 @@ #define PCI_CB_LEGACY_MODE_BASE 0x44 /* 16-bit PC Card legacy mode base address (ExCa) */ /* 0x48-0x7f reserved */ -/* Capability lists */ +/* Capability Identification Numbers list */ #define PCI_CAP_LIST_ID 0 /* Capability ID */ #define PCI_CAP_ID_PM 0x01 /* Power Management */ #define PCI_CAP_ID_AGP 0x02 /* Accelerated Graphics Port */ @@ -759,7 +775,10 @@ /* Device classes and subclasses */ #define PCI_CLASS_NOT_DEFINED 0x0000 #define PCI_CLASS_NOT_DEFINED_VGA 0x0001 - + +// 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_STORAGE 0x01 #define PCI_CLASS_STORAGE_SCSI 0x0100 #define PCI_CLASS_STORAGE_IDE 0x0101 @@ -768,9 +787,11 @@ #define PCI_CLASS_STORAGE_RAID 0x0104 #define PCI_CLASS_STORAGE_ATA 0x0105 #define PCI_CLASS_STORAGE_SATA 0x0106 +#define PCI_CLASS_STORAGE_SATA_AHCI 0x010601 #define PCI_CLASS_STORAGE_SAS 0x0107 #define PCI_CLASS_STORAGE_OTHER 0x0180 +// values for the class_sub field for class_base = 0x02 (Network Controller) #define PCI_BASE_CLASS_NETWORK 0x02 #define PCI_CLASS_NETWORK_ETHERNET 0x0200 #define PCI_CLASS_NETWORK_TOKEN_RING 0x0201 @@ -779,24 +800,28 @@ #define PCI_CLASS_NETWORK_ISDN 0x0204 #define PCI_CLASS_NETWORK_OTHER 0x0280 +// values for the class_sub field for class_base = 0x03 (Display Controller) #define PCI_BASE_CLASS_DISPLAY 0x03 #define PCI_CLASS_DISPLAY_VGA 0x0300 #define PCI_CLASS_DISPLAY_XGA 0x0301 #define PCI_CLASS_DISPLAY_3D 0x0302 #define PCI_CLASS_DISPLAY_OTHER 0x0380 +// values for the class_sub field for class_base = 0x04 (Multimedia Controller) #define PCI_BASE_CLASS_MULTIMEDIA 0x04 -#define PCI_CLASS_MULTIMEDIA_VIDEO 0x0400 -#define PCI_CLASS_MULTIMEDIA_AUDIO 0x0401 +#define PCI_CLASS_MULTIMEDIA_VIDEO 0x0400 /* video */ +#define PCI_CLASS_MULTIMEDIA_AUDIO 0x0401 /* audio */ #define PCI_CLASS_MULTIMEDIA_PHONE 0x0402 -#define PCI_CLASS_MULTIMEDIA_AUDIO_DEV 0x0403 +#define PCI_CLASS_MULTIMEDIA_AUDIO_DEV 0x0403 /* HD audio */ #define PCI_CLASS_MULTIMEDIA_OTHER 0x0480 +// values for the class_sub field for class_base = 0x05 (Memory Controller) #define PCI_BASE_CLASS_MEMORY 0x05 #define PCI_CLASS_MEMORY_RAM 0x0500 #define PCI_CLASS_MEMORY_FLASH 0x0501 #define PCI_CLASS_MEMORY_OTHER 0x0580 +// values for the class_sub field for class_base = 0x06 (Bridge Device) #define PCI_BASE_CLASS_BRIDGE 0x06 #define PCI_CLASS_BRIDGE_HOST 0x0600 #define PCI_CLASS_BRIDGE_ISA 0x0601 @@ -811,6 +836,7 @@ #define PCI_CLASS_BRIDGE_IB_TO_PCI 0x060a #define PCI_CLASS_BRIDGE_OTHER 0x0680 +// values for the class_sub field for class_base = 0x07 (Simple Communications Controllers) #define PCI_BASE_CLASS_COMMUNICATION 0x07 #define PCI_CLASS_COMMUNICATION_SERIAL 0x0700 #define PCI_CLASS_COMMUNICATION_PARALLEL 0x0701 @@ -818,14 +844,19 @@ #define PCI_CLASS_COMMUNICATION_MODEM 0x0703 #define PCI_CLASS_COMMUNICATION_OTHER 0x0780 +// values for the class_sub field for class_base = 0x08 (Base System Peripherals) #define PCI_BASE_CLASS_SYSTEM 0x08 #define PCI_CLASS_SYSTEM_PIC 0x0800 +#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_DMA 0x0801 #define PCI_CLASS_SYSTEM_TIMER 0x0802 #define PCI_CLASS_SYSTEM_RTC 0x0803 -#define PCI_CLASS_SYSTEM_PCI_HOTPLUG 0x0804 +#define PCI_CLASS_SYSTEM_PCI_HOTPLUG 0x0804 /* HotPlug Controller */ +#define PCI_CLASS_SYSTEM_SDHCI 0x0805 #define PCI_CLASS_SYSTEM_OTHER 0x0880 +// values for the class_sub field for class_base = 0x09 (Input Devices) #define PCI_BASE_CLASS_INPUT 0x09 #define PCI_CLASS_INPUT_KEYBOARD 0x0900 #define PCI_CLASS_INPUT_PEN 0x0901 @@ -834,10 +865,12 @@ #define PCI_CLASS_INPUT_GAMEPORT 0x0904 #define PCI_CLASS_INPUT_OTHER 0x0980 +// values for the class_sub field for class_base = 0x0a (Docking Stations) #define PCI_BASE_CLASS_DOCKING 0x0a #define PCI_CLASS_DOCKING_GENERIC 0x0a00 #define PCI_CLASS_DOCKING_OTHER 0x0a80 +// values for the class_sub field for class_base = 0x0b (processor) #define PCI_BASE_CLASS_PROCESSOR 0x0b #define PCI_CLASS_PROCESSOR_386 0x0b00 #define PCI_CLASS_PROCESSOR_486 0x0b01 @@ -845,43 +878,60 @@ #define PCI_CLASS_PROCESSOR_ALPHA 0x0b10 #define PCI_CLASS_PROCESSOR_POWERPC 0x0b20 #define PCI_CLASS_PROCESSOR_MIPS 0x0b30 -#define PCI_CLASS_PROCESSOR_CO 0x0b40 +#define PCI_CLASS_PROCESSOR_CO 0x0b40 /* Co-Processor */ +// values for the class_sub field for class_base = 0x0c (serial bus controller) #define PCI_BASE_CLASS_SERIAL 0x0c -#define PCI_CLASS_SERIAL_FIREWIRE 0x0c00 +#define PCI_CLASS_SERIAL_FIREWIRE 0x0c00 /* FireWire (IEEE 1394) */ +#define PCI_CLASS_SERIAL_FIREWIRE_OHCI 0x0c10 #define PCI_CLASS_SERIAL_ACCESS 0x0c01 #define PCI_CLASS_SERIAL_SSA 0x0c02 -#define PCI_CLASS_SERIAL_USB 0x0c03 +#define PCI_CLASS_SERIAL_USB 0x0c03 /* 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_FIBER 0x0c04 #define PCI_CLASS_SERIAL_SMBUS 0x0c05 #define PCI_CLASS_SERIAL_INFINIBAND 0x0c06 +// values for the class_sub field for class_base = 0x0d (Wireless Controller) #define PCI_BASE_CLASS_WIRELESS 0x0d #define PCI_CLASS_WIRELESS_IRDA 0x0d00 -#define PCI_CLASS_WIRELESS_CONSUMER_IR 0x0d01 +#define PCI_CLASS_WIRELESS_IR 0x0d01 #define PCI_CLASS_WIRELESS_RF 0x0d10 -#define PCI_CLASS_WIRELESS_OTHER 0x0d80 +#define PCI_CLASS_WIRELESS_BLUETOOTH 0x0d11 +#define PCI_CLASS_WIRELESS_BROADBAND 0x0d12 +#define PCI_CLASS_WIRELESS_80211A 0x0d20 +#define PCI_CLASS_WIRELESS_80211B 0x0d21 +#define PCI_CLASS_WIRELESS_WHCI 0x0d1010 +#define PCI_CLASS_WIRELESS_OTHER 0x80 +// values for the class_sub field for class_base = 0x0e (Intelligent I/O Controller) #define PCI_BASE_CLASS_INTELLIGENT 0x0e #define PCI_CLASS_INTELLIGENT_I2O 0x0e00 +// values for the class_sub field for class_base = 0x0f (Satellite Communication Controller) #define PCI_BASE_CLASS_SATELLITE 0x0f #define PCI_CLASS_SATELLITE_TV 0x0f00 #define PCI_CLASS_SATELLITE_AUDIO 0x0f01 #define PCI_CLASS_SATELLITE_VOICE 0x0f03 #define PCI_CLASS_SATELLITE_DATA 0x0f04 +// values for the class_sub field for class_base = 0x10 (Encryption and decryption controller) #define PCI_BASE_CLASS_CRYPT 0x10 #define PCI_CLASS_CRYPT_NETWORK 0x1000 #define PCI_CLASS_CRYPT_ENTERTAINMENT 0x1010 #define PCI_CLASS_CRYPT_OTHER 0x1080 +// values for the class_sub field for class_base = 0x11 (Data Acquisition and Signal Processing Controllers) #define PCI_BASE_CLASS_SIGNAL 0x11 #define PCI_CLASS_SIGNAL_DPIO 0x1100 #define PCI_CLASS_SIGNAL_PERF_CTR 0x1101 #define PCI_CLASS_SIGNAL_SYNCHRONIZER 0x1110 #define PCI_CLASS_SIGNAL_OTHER 0x1180 +// values for the class_sub field for class_base = 0xff (Device does not fit any defined class) #define PCI_CLASS_OTHERS 0xff /* Several ID's we need in the library */ Index: branches/Chimera/i386/libsaio/fake_efi.c =================================================================== --- branches/Chimera/i386/libsaio/fake_efi.c (revision 2248) +++ branches/Chimera/i386/libsaio/fake_efi.c (revision 2249) @@ -3,6 +3,7 @@ * Copyright 2007 David F. Elliott. All rights reserved. */ +#include "saio_types.h" #include "libsaio.h" #include "boot.h" #include "bootstruct.h" @@ -83,7 +84,7 @@ 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; @@ -172,7 +173,7 @@ 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 @@ -282,7 +283,7 @@ 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 @@ -388,9 +389,9 @@ */ /* 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 @@ -424,16 +425,16 @@ */ /* 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 Index: branches/Chimera/i386/libsaio/smbios_getters.c =================================================================== --- branches/Chimera/i386/libsaio/smbios_getters.c (revision 2248) +++ branches/Chimera/i386/libsaio/smbios_getters.c (revision 2249) @@ -33,6 +33,7 @@ // 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: @@ -192,6 +193,7 @@ 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 @@ -202,7 +204,8 @@ value->word = 0x0601; // Core i5 else value->word = 0x0701; // Core i7 - return true; } + return true; + } } } } Index: branches/Chimera/i386/libsaio/saio_internal.h =================================================================== --- branches/Chimera/i386/libsaio/saio_internal.h (revision 2248) +++ branches/Chimera/i386/libsaio/saio_internal.h (revision 2249) @@ -218,4 +218,7 @@ 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 */ Index: branches/Chimera/i386/boot2/graphics.c =================================================================== --- branches/Chimera/i386/boot2/graphics.c (revision 2248) +++ branches/Chimera/i386/boot2/graphics.c (revision 2249) @@ -42,8 +42,32 @@ 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() Index: branches/Chimera/i386/boot2/graphics.h =================================================================== --- branches/Chimera/i386/boot2/graphics.h (revision 2248) +++ branches/Chimera/i386/boot2/graphics.h (revision 2249) @@ -37,7 +37,7 @@ 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[]); Index: branches/Chimera/i386/boot2/drivers.c =================================================================== --- branches/Chimera/i386/boot2/drivers.c (revision 2248) +++ branches/Chimera/i386/boot2/drivers.c (revision 2249) @@ -747,9 +747,7 @@ 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; Index: branches/Chimera/i386/boot2/boot.c =================================================================== --- branches/Chimera/i386/boot2/boot.c (revision 2248) +++ branches/Chimera/i386/boot2/boot.c (revision 2249) @@ -145,7 +145,7 @@ 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(); @@ -198,7 +198,8 @@ 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); @@ -238,10 +239,14 @@ // 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 Index: branches/Chimera/i386/boot2/modules.c =================================================================== --- branches/Chimera/i386/boot2/modules.c (revision 2248) +++ branches/Chimera/i386/boot2/modules.c (revision 2249) @@ -15,7 +15,7 @@ #if CONFIG_MODULE_DEBUG -#define DBG(x...) printf(x); +#define DBG(x...) printf(x) #define DBGPAUSE() getchar() #else #define DBG(x...) @@ -149,6 +149,11 @@ } 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) { Index: branches/Chimera/i386/boot2/gui.c =================================================================== --- branches/Chimera/i386/boot2/gui.c (revision 2248) +++ branches/Chimera/i386/boot2/gui.c (revision 2249) @@ -43,6 +43,8 @@ iDeviceGeneric_o, iDeviceHFS, iDeviceHFS_o, + iDeviceHFS_mav, + iDeviceHFS_mav_o, iDeviceHFS_ML, iDeviceHFS_ML_o, iDeviceHFS_Lion, @@ -55,6 +57,8 @@ iDeviceHFS_Tiger_o, iDeviceHFSRAID, iDeviceHFSRAID_o, + iDeviceHFSRAID_mav, + iDeviceHFSRAID_mav_o, iDeviceHFSRAID_ML, iDeviceHFSRAID_ML_o, iDeviceHFSRAID_Lion, @@ -118,6 +122,8 @@ {.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}, @@ -131,6 +137,8 @@ {.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}, @@ -228,7 +236,9 @@ for (i = 0; i < sizeof(images) / sizeof(images[0]); i++) { if (strcmp(name, images[i].name) == 0) + { return i; // found the name + } } return -1; } @@ -351,6 +361,8 @@ 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); @@ -364,6 +376,8 @@ 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); @@ -884,6 +898,9 @@ { // 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; Index: branches/Chimera/i386/boot2/options.c =================================================================== --- branches/Chimera/i386/boot2/options.c (revision 2248) +++ branches/Chimera/i386/boot2/options.c (revision 2249) @@ -30,6 +30,7 @@ #include "term.h" #include "embedded.h" #include "pci.h" +#include "modules.h" bool showBootBanner = true; //Azi:showinfo static bool shouldboot = false; @@ -188,13 +189,14 @@ 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); } @@ -848,7 +850,7 @@ goto done; } - if (gDeviceCount) { + if (gDeviceCount >0) { // Allocate memory for an array of menu items. menuItems = malloc(sizeof(MenuItem) * gDeviceCount); if (menuItems == NULL) { @@ -856,7 +858,7 @@ } // 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; @@ -866,6 +868,15 @@ 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) { @@ -1058,6 +1069,8 @@ 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; } Index: branches/Chimera/i386/modules/HDAEnabler/HDAEnabler.dylib =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: branches/Chimera/i386/modules/HDAEnabler/HDAEnabler.dylib ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Index: branches/Chimera/i386/modules/HDAEnabler/Cconfig =================================================================== --- branches/Chimera/i386/modules/HDAEnabler/Cconfig (revision 0) +++ branches/Chimera/i386/modules/HDAEnabler/Cconfig (revision 2249) @@ -0,0 +1,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. + Index: branches/Chimera/i386/modules/HDAEnabler/Readme.txt =================================================================== --- branches/Chimera/i386/modules/HDAEnabler/Readme.txt (revision 0) +++ branches/Chimera/i386/modules/HDAEnabler/Readme.txt (revision 2249) @@ -0,0 +1,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). + Index: branches/Chimera/i386/modules/HDAEnabler/Makefile =================================================================== --- branches/Chimera/i386/modules/HDAEnabler/Makefile (revision 0) +++ branches/Chimera/i386/modules/HDAEnabler/Makefile (revision 2249) @@ -0,0 +1,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: + @ Index: branches/Chimera/i386/modules/Keylayout/Keylayout.c =================================================================== --- branches/Chimera/i386/modules/Keylayout/Keylayout.c (revision 2248) +++ branches/Chimera/i386/modules/Keylayout/Keylayout.c (revision 2249) @@ -117,7 +117,7 @@ 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", Index: branches/Chimera/i386/modules/Cconfig =================================================================== --- branches/Chimera/i386/modules/Cconfig (revision 2248) +++ branches/Chimera/i386/modules/Cconfig (revision 2249) @@ -12,4 +12,5 @@ source "i386/modules/ACPIcodec/Cconfig" source "i386/modules/KernelPatcher/Cconfig" source "i386/modules/FileNVRAM/Cconfig" +source "i386/modules/HDAEnabler/Cconfig" endmenu Index: branches/Chimera/i386/modules/AcpiCodec/acpi_codec.c =================================================================== --- branches/Chimera/i386/modules/AcpiCodec/acpi_codec.c (revision 2248) +++ branches/Chimera/i386/modules/AcpiCodec/acpi_codec.c (revision 2249) @@ -1769,7 +1769,7 @@ { { - TagPtr CstateTag; + TagPtr CstateTag = NULL; U32 entry_count = 0; if (bootInfo->chameleonConfig.dictionary) Index: branches/Chimera/i386/modules/Makefile =================================================================== --- branches/Chimera/i386/modules/Makefile (revision 2248) +++ branches/Chimera/i386/modules/Makefile (revision 2249) @@ -45,6 +45,10 @@ SUBDIRS += FileNVRAM endif +ifdef CONFIG_HDAENABLER_MODULE +SUBDIRS += HDAEnabler +endif + CFLAGS= -O3 $(MORECPP) -arch i386 -g -static DEFINES= CONFIG = hd Index: branches/Chimera/i386/libsa/libsa.h =================================================================== --- branches/Chimera/i386/libsa/libsa.h (revision 2248) +++ branches/Chimera/i386/libsa/libsa.h (revision 2249) @@ -84,6 +84,8 @@ #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); Index: branches/Chimera/artwork/themes/default/device_hfsraid_mav_o.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: branches/Chimera/artwork/themes/default/device_hfsraid_mav_o.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: branches/Chimera/artwork/themes/default/device_hfsraid_mav.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: branches/Chimera/artwork/themes/default/device_hfsraid_mav.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: branches/Chimera/artwork/themes/default/device_hfsplus_mav_o.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: branches/Chimera/artwork/themes/default/device_hfsplus_mav_o.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: branches/Chimera/artwork/themes/default/device_hfsplus_mav.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: branches/Chimera/artwork/themes/default/device_hfsplus_mav.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: branches/Chimera/artwork/themes/default/device_hfsfusion_mav_o.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: branches/Chimera/artwork/themes/default/device_hfsfusion_mav_o.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: branches/Chimera/artwork/themes/default/device_hfsfusion_mav.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: branches/Chimera/artwork/themes/default/device_hfsfusion_mav.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: branches/Chimera/package/bin/clean_po_headers.sh =================================================================== --- branches/Chimera/package/bin/clean_po_headers.sh (revision 2248) +++ branches/Chimera/package/bin/clean_po_headers.sh (revision 2249) @@ -10,7 +10,7 @@ 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 Index: branches/Chimera/auto.conf =================================================================== --- branches/Chimera/auto.conf (revision 2248) +++ branches/Chimera/auto.conf (revision 2249) @@ -1,22 +1,17 @@ # # 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 Index: branches/Chimera/CREDITS =================================================================== --- branches/Chimera/CREDITS (revision 2248) +++ branches/Chimera/CREDITS (revision 2249) @@ -3,7 +3,7 @@ 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: --------- @@ -15,4 +15,4 @@ Copyright: --------- -2008-2012 +2008-2013 Index: branches/Chimera/revision =================================================================== --- branches/Chimera/revision (revision 2248) +++ branches/Chimera/revision (revision 2249) @@ -1 +1 @@ -2109 +2246 Index: branches/Chimera/autoconf.h =================================================================== --- branches/Chimera/autoconf.h (revision 2248) +++ branches/Chimera/autoconf.h (revision 2249) @@ -1,24 +1,19 @@ // // 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 Index: branches/Chimera/doc/README =================================================================== --- branches/Chimera/doc/README (revision 2248) +++ branches/Chimera/doc/README (revision 2249) @@ -19,6 +19,7 @@ - Apple Software RAID support. - stage2 loader (boot) can be placed as a regular file in the boot partition's root folder. + - Modules Installation @@ -70,16 +71,17 @@ -------- 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 --------- Index: branches/Chimera/CHANGES =================================================================== --- branches/Chimera/CHANGES (revision 2248) +++ branches/Chimera/CHANGES (revision 2249) @@ -1,3 +1,19 @@ +-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