mirror of
https://github.com/Dr-Noob/cpufetch.git
synced 2026-03-25 07:50:40 +01:00
[v0.97] Merge branch bugfix2
This commit is contained in:
@@ -24,6 +24,10 @@ struct uarch {
|
|||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
ISA_ARMv6,
|
||||||
|
ISA_ARMv6_T2,
|
||||||
|
ISA_ARMv6_KZ,
|
||||||
|
ISA_ARMv6_K,
|
||||||
ISA_ARMv7_A,
|
ISA_ARMv7_A,
|
||||||
ISA_ARMv8_A,
|
ISA_ARMv8_A,
|
||||||
ISA_ARMv8_A_AArch32,
|
ISA_ARMv8_A_AArch32,
|
||||||
@@ -36,8 +40,11 @@ enum {
|
|||||||
UARCH_UNKNOWN,
|
UARCH_UNKNOWN,
|
||||||
// ARM
|
// ARM
|
||||||
UARCH_ARM7,
|
UARCH_ARM7,
|
||||||
UARCH_ARM9,
|
UARCH_ARM9,
|
||||||
UARCH_ARM11, // ARM 1136, ARM 1156, ARM 1176, or ARM 11MPCore.
|
UARCH_ARM1136,
|
||||||
|
UARCH_ARM1156,
|
||||||
|
UARCH_ARM1176,
|
||||||
|
UARCH_ARM11MPCORE,
|
||||||
UARCH_CORTEX_A5,
|
UARCH_CORTEX_A5,
|
||||||
UARCH_CORTEX_A7,
|
UARCH_CORTEX_A7,
|
||||||
UARCH_CORTEX_A8,
|
UARCH_CORTEX_A8,
|
||||||
@@ -98,6 +105,10 @@ enum {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const ISA isas_uarch[] = {
|
static const ISA isas_uarch[] = {
|
||||||
|
[UARCH_ARM1136] = ISA_ARMv6,
|
||||||
|
[UARCH_ARM1156] = ISA_ARMv6_T2,
|
||||||
|
[UARCH_ARM1176] = ISA_ARMv6_KZ,
|
||||||
|
[UARCH_ARM11MPCORE] = ISA_ARMv6_K,
|
||||||
[UARCH_CORTEX_A5] = ISA_ARMv7_A,
|
[UARCH_CORTEX_A5] = ISA_ARMv7_A,
|
||||||
[UARCH_CORTEX_A7] = ISA_ARMv7_A,
|
[UARCH_CORTEX_A7] = ISA_ARMv7_A,
|
||||||
[UARCH_CORTEX_A8] = ISA_ARMv7_A,
|
[UARCH_CORTEX_A8] = ISA_ARMv7_A,
|
||||||
@@ -143,6 +154,10 @@ static const ISA isas_uarch[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static char* isas_string[] = {
|
static char* isas_string[] = {
|
||||||
|
[ISA_ARMv6] = "ARMv6",
|
||||||
|
[ISA_ARMv6_T2] = "ARMv6T2",
|
||||||
|
[ISA_ARMv6_KZ] = "ARMv6KZ",
|
||||||
|
[ISA_ARMv6_K] = "ARMv6K",
|
||||||
[ISA_ARMv7_A] = "ARMv7",
|
[ISA_ARMv7_A] = "ARMv7",
|
||||||
[ISA_ARMv8_A] = "ARMv8",
|
[ISA_ARMv8_A] = "ARMv8",
|
||||||
[ISA_ARMv8_A_AArch32] = "ARMv8 AArch32",
|
[ISA_ARMv8_A_AArch32] = "ARMv8 AArch32",
|
||||||
@@ -181,7 +196,7 @@ struct uarch* get_uarch_from_midr(uint32_t midr, struct cpuInfo* cpu) {
|
|||||||
uint32_t p = midr_get_part(midr);
|
uint32_t p = midr_get_part(midr);
|
||||||
uint32_t v = midr_get_variant(midr);
|
uint32_t v = midr_get_variant(midr);
|
||||||
uint32_t r = midr_get_revision(midr);
|
uint32_t r = midr_get_revision(midr);
|
||||||
|
|
||||||
// ----------------------------------------------------------------------- //
|
// ----------------------------------------------------------------------- //
|
||||||
// IM: Implementer //
|
// IM: Implementer //
|
||||||
// P: Part //
|
// P: Part //
|
||||||
@@ -189,7 +204,11 @@ struct uarch* get_uarch_from_midr(uint32_t midr, struct cpuInfo* cpu) {
|
|||||||
// R: Revision //
|
// R: Revision //
|
||||||
// ----------------------------------------------------------------------- //
|
// ----------------------------------------------------------------------- //
|
||||||
// IM P V R //
|
// IM P V R //
|
||||||
UARCH_START
|
UARCH_START
|
||||||
|
CHECK_UARCH(arch, cpu, 'A', 0xB36, NA, NA, "ARM1136", UARCH_ARM1136, CPU_VENDOR_ARM)
|
||||||
|
CHECK_UARCH(arch, cpu, 'A', 0xB56, NA, NA, "ARM1156", UARCH_ARM1156, CPU_VENDOR_ARM)
|
||||||
|
CHECK_UARCH(arch, cpu, 'A', 0xB76, NA, NA, "ARM1176", UARCH_ARM1176, CPU_VENDOR_ARM)
|
||||||
|
CHECK_UARCH(arch, cpu, 'A', 0xB02, NA, NA, "ARM11 MPCore", UARCH_ARM11MPCORE, CPU_VENDOR_ARM)
|
||||||
CHECK_UARCH(arch, cpu, 'A', 0xC05, NA, NA, "Cortex-A5", UARCH_CORTEX_A5, CPU_VENDOR_ARM)
|
CHECK_UARCH(arch, cpu, 'A', 0xC05, NA, NA, "Cortex-A5", UARCH_CORTEX_A5, CPU_VENDOR_ARM)
|
||||||
CHECK_UARCH(arch, cpu, 'A', 0xC07, NA, NA, "Cortex-A7", UARCH_CORTEX_A7, CPU_VENDOR_ARM)
|
CHECK_UARCH(arch, cpu, 'A', 0xC07, NA, NA, "Cortex-A7", UARCH_CORTEX_A7, CPU_VENDOR_ARM)
|
||||||
CHECK_UARCH(arch, cpu, 'A', 0xC08, NA, NA, "Cortex-A8", UARCH_CORTEX_A8, CPU_VENDOR_ARM)
|
CHECK_UARCH(arch, cpu, 'A', 0xC08, NA, NA, "Cortex-A8", UARCH_CORTEX_A8, CPU_VENDOR_ARM)
|
||||||
|
|||||||
@@ -18,25 +18,34 @@
|
|||||||
int get_ncores_from_cpuinfo() {
|
int get_ncores_from_cpuinfo() {
|
||||||
// Examples:
|
// Examples:
|
||||||
// 0-271
|
// 0-271
|
||||||
// 0-5
|
|
||||||
// 0-7
|
// 0-7
|
||||||
|
// 0
|
||||||
|
|
||||||
int filelen;
|
int filelen;
|
||||||
char* buf;
|
char* buf;
|
||||||
if((buf = read_file(_PATH_CPUS_PRESENT, &filelen)) == NULL) {
|
if((buf = read_file(_PATH_CPUS_PRESENT, &filelen)) == NULL) {
|
||||||
perror("open");
|
perror("open");
|
||||||
return UNKNOWN;
|
return UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ncores;
|
||||||
|
char* tmp1;
|
||||||
|
if((tmp1 = strstr(buf, "-")) == NULL) {
|
||||||
|
// file contains no - character, we assume that it contains 0,
|
||||||
|
// which means that the CPU contains only one core
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
tmp1++;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ncores = 0;
|
|
||||||
char* tmp1 = strstr(buf, "-") + 1;
|
|
||||||
char* tmp2 = strstr(buf, "\n");
|
char* tmp2 = strstr(buf, "\n");
|
||||||
char ncores_str[filelen];
|
char ncores_str[filelen];
|
||||||
memset(ncores_str, 0, sizeof(char) * filelen);
|
memset(ncores_str, 0, sizeof(char) * filelen);
|
||||||
memcpy(ncores_str, tmp1, tmp2-tmp1);
|
memcpy(ncores_str, tmp1, tmp2-tmp1);
|
||||||
|
|
||||||
char* end;
|
char* end;
|
||||||
errno = 0;
|
errno = 0;
|
||||||
ncores = strtol(ncores_str, &end, 10) + 1;
|
ncores = strtol(ncores_str, &end, 10) + 1;
|
||||||
if(errno != 0) {
|
if(errno != 0) {
|
||||||
perror("strtol");
|
perror("strtol");
|
||||||
return UNKNOWN;
|
return UNKNOWN;
|
||||||
|
|||||||
@@ -38,6 +38,8 @@
|
|||||||
|
|
||||||
typedef uint32_t MICROARCH;
|
typedef uint32_t MICROARCH;
|
||||||
|
|
||||||
|
#define STRING_UNKNOWN "Unknown"
|
||||||
|
|
||||||
// Data not available
|
// Data not available
|
||||||
#define NA -1
|
#define NA -1
|
||||||
|
|
||||||
@@ -402,14 +404,23 @@ char* get_str_uarch(struct cpuInfo* cpu) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
char* get_str_process(struct cpuInfo* cpu) {
|
char* get_str_process(struct cpuInfo* cpu) {
|
||||||
char* str = malloc(sizeof(char) * (4+2+1));
|
char* str = malloc(sizeof(char) * (strlen(STRING_UNKNOWN)+1));
|
||||||
uint32_t process = cpu->arch->process;
|
int32_t process = cpu->arch->process;
|
||||||
|
|
||||||
if(process > 100)
|
if(process == UNK) {
|
||||||
|
snprintf(str, strlen(STRING_UNKNOWN)+1, STRING_UNKNOWN);
|
||||||
|
}
|
||||||
|
else if(process > 100) {
|
||||||
sprintf(str, "%.2fum", (double)process/100);
|
sprintf(str, "%.2fum", (double)process/100);
|
||||||
else
|
}
|
||||||
|
else if(process > 0){
|
||||||
sprintf(str, "%dnm", process);
|
sprintf(str, "%dnm", process);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
snprintf(str, strlen(STRING_UNKNOWN)+1, STRING_UNKNOWN);
|
||||||
|
printBug("Found invalid process: '%d'", process);
|
||||||
|
}
|
||||||
|
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user