| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| #define CPU_UNKNOWN 0 |
| #define CPU_SICORTEX 1 |
| #define CPU_LOONGSON3A 2 |
| #define CPU_LOONGSON3B 3 |
| |
| static char *cpuname[] = { |
| "UNKOWN", |
| "SICORTEX", |
| "LOONGSON3A", |
| "LOONGSON3B" |
| }; |
| |
| int detect(void){ |
| |
| #ifdef linux |
| FILE *infile; |
| char buffer[512], *p; |
| |
| p = (char *)NULL; |
| infile = fopen("/proc/cpuinfo", "r"); |
| while (fgets(buffer, sizeof(buffer), infile)){ |
| if (!strncmp("cpu", buffer, 3)){ |
| p = strchr(buffer, ':') + 2; |
| #if 0 |
| fprintf(stderr, "%s\n", p); |
| #endif |
| break; |
| } |
| } |
| |
| fclose(infile); |
| |
| if (strstr(p, "Loongson-3A")){ |
| return CPU_LOONGSON3A; |
| }else if(strstr(p, "Loongson-3B")){ |
| return CPU_LOONGSON3B; |
| }else if (strstr(p, "Loongson-3")){ |
| infile = fopen("/proc/cpuinfo", "r"); |
| while (fgets(buffer, sizeof(buffer), infile)){ |
| if (!strncmp("system type", buffer, 11)){ |
| p = strchr(buffer, ':') + 2; |
| break; |
| } |
| } |
| fclose(infile); |
| if (strstr(p, "loongson3a")) |
| return CPU_LOONGSON3A; |
| }else{ |
| return CPU_SICORTEX; |
| } |
| #endif |
| return CPU_UNKNOWN; |
| } |
| |
| char *get_corename(void){ |
| return cpuname[detect()]; |
| } |
| |
| void get_architecture(void){ |
| printf("MIPS64"); |
| } |
| |
| void get_subarchitecture(void){ |
| if(detect()==CPU_LOONGSON3A) { |
| printf("LOONGSON3A"); |
| }else if(detect()==CPU_LOONGSON3B){ |
| printf("LOONGSON3B"); |
| }else{ |
| printf("SICORTEX"); |
| } |
| } |
| |
| void get_subdirname(void){ |
| printf("mips64"); |
| } |
| |
| void get_cpuconfig(void){ |
| if(detect()==CPU_LOONGSON3A) { |
| printf("#define LOONGSON3A\n"); |
| printf("#define L1_DATA_SIZE 65536\n"); |
| printf("#define L1_DATA_LINESIZE 32\n"); |
| printf("#define L2_SIZE 512488\n"); |
| printf("#define L2_LINESIZE 32\n"); |
| printf("#define DTB_DEFAULT_ENTRIES 64\n"); |
| printf("#define DTB_SIZE 4096\n"); |
| printf("#define L2_ASSOCIATIVE 4\n"); |
| }else if(detect()==CPU_LOONGSON3B){ |
| printf("#define LOONGSON3B\n"); |
| printf("#define L1_DATA_SIZE 65536\n"); |
| printf("#define L1_DATA_LINESIZE 32\n"); |
| printf("#define L2_SIZE 512488\n"); |
| printf("#define L2_LINESIZE 32\n"); |
| printf("#define DTB_DEFAULT_ENTRIES 64\n"); |
| printf("#define DTB_SIZE 4096\n"); |
| printf("#define L2_ASSOCIATIVE 4\n"); |
| }else{ |
| printf("#define SICORTEX\n"); |
| printf("#define L1_DATA_SIZE 32768\n"); |
| printf("#define L1_DATA_LINESIZE 32\n"); |
| printf("#define L2_SIZE 512488\n"); |
| printf("#define L2_LINESIZE 32\n"); |
| printf("#define DTB_DEFAULT_ENTRIES 32\n"); |
| printf("#define DTB_SIZE 4096\n"); |
| printf("#define L2_ASSOCIATIVE 8\n"); |
| } |
| } |
| |
| void get_libname(void){ |
| if(detect()==CPU_LOONGSON3A) { |
| printf("loongson3a\n"); |
| }else if(detect()==CPU_LOONGSON3B) { |
| printf("loongson3b\n"); |
| }else{ |
| #ifdef __mips64 |
| printf("mips64\n"); |
| #else |
| printf("mips32\n"); |
| #endif |
| } |
| } |