mirror of
https://github.com/Dr-Noob/cpufetch.git
synced 2026-03-25 07:50:40 +01:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2fc3ef4ada | ||
|
|
360562afe9 | ||
|
|
7e71cf1eb9 |
@@ -237,7 +237,7 @@ struct cpuInfo* get_cpu_info_linux(struct cpuInfo* cpu) {
|
|||||||
cpu->num_cpus = sockets;
|
cpu->num_cpus = sockets;
|
||||||
cpu->hv = emalloc(sizeof(struct hypervisor));
|
cpu->hv = emalloc(sizeof(struct hypervisor));
|
||||||
cpu->hv->present = false;
|
cpu->hv->present = false;
|
||||||
cpu->soc = get_soc();
|
cpu->soc = get_soc(cpu);
|
||||||
cpu->peak_performance = get_peak_performance(cpu);
|
cpu->peak_performance = get_peak_performance(cpu);
|
||||||
|
|
||||||
return cpu;
|
return cpu;
|
||||||
@@ -374,19 +374,19 @@ struct cpuInfo* get_cpu_info_mach(struct cpuInfo* cpu) {
|
|||||||
// the CPU is an Apple SoC
|
// the CPU is an Apple SoC
|
||||||
if(cpu_family == CPUFAMILY_ARM_FIRESTORM_ICESTORM) {
|
if(cpu_family == CPUFAMILY_ARM_FIRESTORM_ICESTORM) {
|
||||||
fill_cpu_info_firestorm_icestorm(cpu, pcores, ecores);
|
fill_cpu_info_firestorm_icestorm(cpu, pcores, ecores);
|
||||||
cpu->soc = get_soc();
|
cpu->soc = get_soc(cpu);
|
||||||
cpu->peak_performance = get_peak_performance(cpu);
|
cpu->peak_performance = get_peak_performance(cpu);
|
||||||
}
|
}
|
||||||
else if(cpu_family == CPUFAMILY_ARM_AVALANCHE_BLIZZARD) {
|
else if(cpu_family == CPUFAMILY_ARM_AVALANCHE_BLIZZARD) {
|
||||||
fill_cpu_info_avalanche_blizzard(cpu, pcores, ecores);
|
fill_cpu_info_avalanche_blizzard(cpu, pcores, ecores);
|
||||||
cpu->soc = get_soc();
|
cpu->soc = get_soc(cpu);
|
||||||
cpu->peak_performance = get_peak_performance(cpu);
|
cpu->peak_performance = get_peak_performance(cpu);
|
||||||
}
|
}
|
||||||
else if(cpu_family == CPUFAMILY_ARM_EVEREST_SAWTOOTH ||
|
else if(cpu_family == CPUFAMILY_ARM_EVEREST_SAWTOOTH ||
|
||||||
cpu_family == CPUFAMILY_ARM_EVEREST_SAWTOOTH_PRO ||
|
cpu_family == CPUFAMILY_ARM_EVEREST_SAWTOOTH_PRO ||
|
||||||
cpu_family == CPUFAMILY_ARM_EVEREST_SAWTOOTH_MAX) {
|
cpu_family == CPUFAMILY_ARM_EVEREST_SAWTOOTH_MAX) {
|
||||||
fill_cpu_info_everest_sawtooth(cpu, pcores, ecores);
|
fill_cpu_info_everest_sawtooth(cpu, pcores, ecores);
|
||||||
cpu->soc = get_soc();
|
cpu->soc = get_soc(cpu);
|
||||||
cpu->peak_performance = get_peak_performance(cpu);
|
cpu->peak_performance = get_peak_performance(cpu);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include "soc.h"
|
#include "soc.h"
|
||||||
#include "socs.h"
|
#include "socs.h"
|
||||||
#include "udev.h"
|
#include "udev.h"
|
||||||
|
#include "uarch.h"
|
||||||
#include "../common/global.h"
|
#include "../common/global.h"
|
||||||
|
|
||||||
#if defined(__APPLE__) || defined(__MACH__)
|
#if defined(__APPLE__) || defined(__MACH__)
|
||||||
@@ -801,6 +802,38 @@ struct system_on_chip* guess_soc_from_nvmem(struct system_on_chip* soc) {
|
|||||||
return soc;
|
return soc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct system_on_chip* guess_soc_from_uarch(struct system_on_chip* soc, struct cpuInfo* cpu) {
|
||||||
|
// Currently we only support CPUs with only one uarch (in other words, one socket)
|
||||||
|
struct uarch* arch = cpu->arch;
|
||||||
|
if (arch == NULL) {
|
||||||
|
printWarn("guess_soc_from_uarch: uarch is NULL");
|
||||||
|
return soc;
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
MICROARCH u;
|
||||||
|
struct system_on_chip soc;
|
||||||
|
} uarchToSoC;
|
||||||
|
|
||||||
|
uarchToSoC socFromUarch[] = {
|
||||||
|
{UARCH_TAISHAN_V110, {SOC_KUNPENG_920, SOC_VENDOR_KUNPENG, 7, "920", NULL} },
|
||||||
|
{UARCH_TAISHAN_V200, {SOC_KUNPENG_930, SOC_VENDOR_KUNPENG, 7, "930", NULL} }, // manufacturing process is not well-known
|
||||||
|
{UARCH_UNKNOWN, {UNKNOWN, SOC_VENDOR_UNKNOWN, -1, "", NULL} }
|
||||||
|
};
|
||||||
|
|
||||||
|
int index = 0;
|
||||||
|
while(socFromUarch[index].u != UARCH_UNKNOWN) {
|
||||||
|
if(socFromUarch[index].u == get_uarch(arch)) {
|
||||||
|
fill_soc(soc, socFromUarch[index].soc.soc_name, socFromUarch[index].soc.soc_model, socFromUarch[index].soc.process);
|
||||||
|
return soc;
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
|
||||||
|
printWarn("guess_soc_from_uarch: No uarch matched the list");
|
||||||
|
return soc;
|
||||||
|
}
|
||||||
|
|
||||||
int hex2int(char c) {
|
int hex2int(char c) {
|
||||||
if (c >= '0' && c <= '9')
|
if (c >= '0' && c <= '9')
|
||||||
return c - '0';
|
return c - '0';
|
||||||
@@ -935,7 +968,7 @@ struct system_on_chip* guess_soc_apple(struct system_on_chip* soc) {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct system_on_chip* get_soc(void) {
|
struct system_on_chip* get_soc(struct cpuInfo* cpu) {
|
||||||
struct system_on_chip* soc = emalloc(sizeof(struct system_on_chip));
|
struct system_on_chip* soc = emalloc(sizeof(struct system_on_chip));
|
||||||
soc->raw_name = NULL;
|
soc->raw_name = NULL;
|
||||||
soc->soc_vendor = SOC_VENDOR_UNKNOWN;
|
soc->soc_vendor = SOC_VENDOR_UNKNOWN;
|
||||||
@@ -975,6 +1008,10 @@ struct system_on_chip* get_soc(void) {
|
|||||||
if(soc->soc_vendor == SOC_VENDOR_UNKNOWN) {
|
if(soc->soc_vendor == SOC_VENDOR_UNKNOWN) {
|
||||||
soc = guess_soc_from_nvmem(soc);
|
soc = guess_soc_from_nvmem(soc);
|
||||||
}
|
}
|
||||||
|
// If everything else failed, try infering it from the microarchitecture
|
||||||
|
if(soc->soc_vendor == SOC_VENDOR_UNKNOWN) {
|
||||||
|
soc = guess_soc_from_uarch(soc, cpu);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#elif defined __APPLE__ || __MACH__
|
#elif defined __APPLE__ || __MACH__
|
||||||
soc = guess_soc_apple(soc);
|
soc = guess_soc_apple(soc);
|
||||||
|
|||||||
@@ -5,6 +5,6 @@
|
|||||||
#include "../common/soc.h"
|
#include "../common/soc.h"
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
struct system_on_chip* get_soc(void);
|
struct system_on_chip* get_soc(struct cpuInfo* cpu);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -29,6 +29,9 @@ enum {
|
|||||||
SOC_HISILICON_3670,
|
SOC_HISILICON_3670,
|
||||||
SOC_HISILICON_3680,
|
SOC_HISILICON_3680,
|
||||||
SOC_HISILICON_3690,
|
SOC_HISILICON_3690,
|
||||||
|
// Kunpeng //
|
||||||
|
SOC_KUNPENG_920,
|
||||||
|
SOC_KUNPENG_930,
|
||||||
// Exynos //
|
// Exynos //
|
||||||
SOC_EXYNOS_3475,
|
SOC_EXYNOS_3475,
|
||||||
SOC_EXYNOS_4210,
|
SOC_EXYNOS_4210,
|
||||||
@@ -367,6 +370,7 @@ enum {
|
|||||||
inline static VENDOR get_soc_vendor_from_soc(SOC soc) {
|
inline static VENDOR get_soc_vendor_from_soc(SOC soc) {
|
||||||
if(soc >= SOC_BCM_2835 && soc <= SOC_BCM_2712) return SOC_VENDOR_BROADCOM;
|
if(soc >= SOC_BCM_2835 && soc <= SOC_BCM_2712) return SOC_VENDOR_BROADCOM;
|
||||||
else if(soc >= SOC_HISILICON_3620 && soc <= SOC_HISILICON_3690) return SOC_VENDOR_KIRIN;
|
else if(soc >= SOC_HISILICON_3620 && soc <= SOC_HISILICON_3690) return SOC_VENDOR_KIRIN;
|
||||||
|
else if(soc >= SOC_KUNPENG_920 && soc <= SOC_KUNPENG_930) return SOC_VENDOR_KUNPENG;
|
||||||
else if(soc >= SOC_EXYNOS_3475 && soc <= SOC_EXYNOS_880) return SOC_VENDOR_EXYNOS;
|
else if(soc >= SOC_EXYNOS_3475 && soc <= SOC_EXYNOS_880) return SOC_VENDOR_EXYNOS;
|
||||||
else if(soc >= SOC_MTK_MT6893 && soc <= SOC_MTK_MT8783) return SOC_VENDOR_MEDIATEK;
|
else if(soc >= SOC_MTK_MT6893 && soc <= SOC_MTK_MT8783) return SOC_VENDOR_MEDIATEK;
|
||||||
else if(soc >= SOC_SNAPD_QSD8650 && soc <= SOC_SNAPD_SM8450) return SOC_VENDOR_SNAPDRAGON;
|
else if(soc >= SOC_SNAPD_QSD8650 && soc <= SOC_SNAPD_SM8450) return SOC_VENDOR_SNAPDRAGON;
|
||||||
|
|||||||
@@ -10,7 +10,6 @@
|
|||||||
// Data not available
|
// Data not available
|
||||||
#define NA -1
|
#define NA -1
|
||||||
|
|
||||||
typedef uint32_t MICROARCH;
|
|
||||||
typedef uint32_t ISA;
|
typedef uint32_t ISA;
|
||||||
|
|
||||||
struct uarch {
|
struct uarch {
|
||||||
@@ -37,89 +36,6 @@ enum {
|
|||||||
ISA_ARMv9_A
|
ISA_ARMv9_A
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
|
||||||
UARCH_UNKNOWN,
|
|
||||||
// ARM
|
|
||||||
UARCH_ARM7,
|
|
||||||
UARCH_ARM9,
|
|
||||||
UARCH_ARM1136,
|
|
||||||
UARCH_ARM1156,
|
|
||||||
UARCH_ARM1176,
|
|
||||||
UARCH_ARM11MPCORE,
|
|
||||||
UARCH_CORTEX_A5,
|
|
||||||
UARCH_CORTEX_A7,
|
|
||||||
UARCH_CORTEX_A8,
|
|
||||||
UARCH_CORTEX_A9,
|
|
||||||
UARCH_CORTEX_A12,
|
|
||||||
UARCH_CORTEX_A15,
|
|
||||||
UARCH_CORTEX_A17,
|
|
||||||
UARCH_CORTEX_A32,
|
|
||||||
UARCH_CORTEX_A35,
|
|
||||||
UARCH_CORTEX_A53,
|
|
||||||
UARCH_CORTEX_A55r0, // ARM Cortex-A55 revision 0 (restricted dual-issue capabilities compared to revision 1+).
|
|
||||||
UARCH_CORTEX_A55,
|
|
||||||
UARCH_CORTEX_A57,
|
|
||||||
UARCH_CORTEX_A65,
|
|
||||||
UARCH_CORTEX_A72,
|
|
||||||
UARCH_CORTEX_A73,
|
|
||||||
UARCH_CORTEX_A75,
|
|
||||||
UARCH_CORTEX_A76,
|
|
||||||
UARCH_CORTEX_A77,
|
|
||||||
UARCH_CORTEX_A78,
|
|
||||||
UARCH_CORTEX_A510,
|
|
||||||
UARCH_CORTEX_A710,
|
|
||||||
UARCH_CORTEX_A715,
|
|
||||||
UARCH_CORTEX_X1,
|
|
||||||
UARCH_CORTEX_X2,
|
|
||||||
UARCH_CORTEX_X3,
|
|
||||||
UARCH_NEOVERSE_N1,
|
|
||||||
UARCH_NEOVERSE_E1,
|
|
||||||
UARCH_NEOVERSE_V1,
|
|
||||||
UARCH_SCORPION,
|
|
||||||
UARCH_KRAIT,
|
|
||||||
UARCH_KYRO,
|
|
||||||
UARCH_FALKOR,
|
|
||||||
UARCH_SAPHIRA,
|
|
||||||
UARCH_DENVER,
|
|
||||||
UARCH_DENVER2,
|
|
||||||
UARCH_CARMEL,
|
|
||||||
// SAMSUNG
|
|
||||||
UARCH_EXYNOS_M1, // Samsung Exynos M1 (Exynos 8890 big cores)
|
|
||||||
UARCH_EXYNOS_M2, // Samsung Exynos M2 (Exynos 8895 big cores)
|
|
||||||
UARCH_EXYNOS_M3, // Samsung Exynos M3 (Exynos 9810 big cores)
|
|
||||||
UARCH_EXYNOS_M4, // Samsung Exynos M4 (Exynos 9820 big cores)
|
|
||||||
UARCH_EXYNOS_M5, // Samsung Exynos M5 (Exynos 9830 big cores)
|
|
||||||
// APPLE
|
|
||||||
UARCH_SWIFT, // Apple A6 and A6X processors.
|
|
||||||
UARCH_CYCLONE, // Apple A7 processor.
|
|
||||||
UARCH_TYPHOON, // Apple A8 and A8X processor
|
|
||||||
UARCH_TWISTER, // Apple A9 and A9X processor.
|
|
||||||
UARCH_HURRICANE, // Apple A10 and A10X processor.
|
|
||||||
UARCH_MONSOON, // Apple A11 processor (big cores).
|
|
||||||
UARCH_MISTRAL, // Apple A11 processor (little cores).
|
|
||||||
UARCH_VORTEX, // Apple A12 processor (big cores).
|
|
||||||
UARCH_TEMPEST, // Apple A12 processor (big cores).
|
|
||||||
UARCH_LIGHTNING, // Apple A13 processor (big cores).
|
|
||||||
UARCH_THUNDER, // Apple A13 processor (little cores).
|
|
||||||
UARCH_ICESTORM, // Apple M1 processor (little cores).
|
|
||||||
UARCH_FIRESTORM, // Apple M1 processor (big cores).
|
|
||||||
UARCH_BLIZZARD, // Apple M2 processor (little cores).
|
|
||||||
UARCH_AVALANCHE, // Apple M2 processor (big cores).
|
|
||||||
UARCH_SAWTOOTH, // Apple M3 processor (little cores).
|
|
||||||
UARCH_EVEREST, // Apple M3 processor (big cores).
|
|
||||||
// CAVIUM
|
|
||||||
UARCH_THUNDERX, // Cavium ThunderX
|
|
||||||
UARCH_THUNDERX2, // Cavium ThunderX2 (originally Broadcom Vulkan).
|
|
||||||
// MARVELL
|
|
||||||
UARCH_PJ4,
|
|
||||||
UARCH_BRAHMA_B15,
|
|
||||||
UARCH_BRAHMA_B53,
|
|
||||||
UARCH_XGENE, // Applied Micro X-Gene.
|
|
||||||
UARCH_TAISHAN_V110, // HiSilicon TaiShan v110 (Huawei Kunpeng 920 series processors).
|
|
||||||
// PHYTIUM
|
|
||||||
UARCH_XIAOMI, // Not to be confused with Xiaomi Inc
|
|
||||||
};
|
|
||||||
|
|
||||||
static const ISA isas_uarch[] = {
|
static const ISA isas_uarch[] = {
|
||||||
[UARCH_ARM1136] = ISA_ARMv6,
|
[UARCH_ARM1136] = ISA_ARMv6,
|
||||||
[UARCH_ARM1156] = ISA_ARMv6_T2,
|
[UARCH_ARM1156] = ISA_ARMv6_T2,
|
||||||
@@ -159,6 +75,7 @@ static const ISA isas_uarch[] = {
|
|||||||
[UARCH_THUNDERX] = ISA_ARMv8_A,
|
[UARCH_THUNDERX] = ISA_ARMv8_A,
|
||||||
[UARCH_THUNDERX2] = ISA_ARMv8_1_A,
|
[UARCH_THUNDERX2] = ISA_ARMv8_1_A,
|
||||||
[UARCH_TAISHAN_V110] = ISA_ARMv8_2_A,
|
[UARCH_TAISHAN_V110] = ISA_ARMv8_2_A,
|
||||||
|
[UARCH_TAISHAN_V200] = ISA_ARMv8_2_A, // Not confirmed
|
||||||
[UARCH_DENVER] = ISA_ARMv8_A,
|
[UARCH_DENVER] = ISA_ARMv8_A,
|
||||||
[UARCH_DENVER2] = ISA_ARMv8_A,
|
[UARCH_DENVER2] = ISA_ARMv8_A,
|
||||||
[UARCH_CARMEL] = ISA_ARMv8_A,
|
[UARCH_CARMEL] = ISA_ARMv8_A,
|
||||||
@@ -284,7 +201,8 @@ struct uarch* get_uarch_from_midr(uint32_t midr, struct cpuInfo* cpu) {
|
|||||||
CHECK_UARCH(arch, cpu, 'C', 0x0A3, NA, NA, "ThunderX 81XX", UARCH_THUNDERX, CPU_VENDOR_CAVIUM)
|
CHECK_UARCH(arch, cpu, 'C', 0x0A3, NA, NA, "ThunderX 81XX", UARCH_THUNDERX, CPU_VENDOR_CAVIUM)
|
||||||
CHECK_UARCH(arch, cpu, 'C', 0x0AF, NA, NA, "ThunderX2 99XX", UARCH_THUNDERX2, CPU_VENDOR_CAVIUM)
|
CHECK_UARCH(arch, cpu, 'C', 0x0AF, NA, NA, "ThunderX2 99XX", UARCH_THUNDERX2, CPU_VENDOR_CAVIUM)
|
||||||
|
|
||||||
CHECK_UARCH(arch, cpu, 'H', 0xD01, NA, NA, "TaiShan v110", UARCH_TAISHAN_V110, CPU_VENDOR_HUAWUEI) // Kunpeng 920 series
|
CHECK_UARCH(arch, cpu, 'H', 0xD01, NA, NA, "TaiShan v110", UARCH_TAISHAN_V110, CPU_VENDOR_HUAWEI) // Kunpeng 920 series
|
||||||
|
CHECK_UARCH(arch, cpu, 'H', 0xD02, NA, NA, "TaiShan v200", UARCH_TAISHAN_V200, CPU_VENDOR_HUAWEI) // Kunpeng 930 series (found in openeuler: https://mailweb.openeuler.org/hyperkitty/list/kernel@openeuler.org/message/XQCV7NX2UKRIUWUFKRF4PO3QENCOUFR3)
|
||||||
CHECK_UARCH(arch, cpu, 'H', 0xD40, NA, NA, "Cortex-A76", UARCH_CORTEX_A76, CPU_VENDOR_ARM) // Kirin 980 Big/Medium cores -> Cortex-A76
|
CHECK_UARCH(arch, cpu, 'H', 0xD40, NA, NA, "Cortex-A76", UARCH_CORTEX_A76, CPU_VENDOR_ARM) // Kirin 980 Big/Medium cores -> Cortex-A76
|
||||||
|
|
||||||
CHECK_UARCH(arch, cpu, 'N', 0x000, NA, NA, "Denver", UARCH_DENVER, CPU_VENDOR_NVIDIA)
|
CHECK_UARCH(arch, cpu, 'N', 0x000, NA, NA, "Denver", UARCH_DENVER, CPU_VENDOR_NVIDIA)
|
||||||
@@ -437,6 +355,10 @@ char* get_str_uarch(struct cpuInfo* cpu) {
|
|||||||
return cpu->arch->uarch_str;
|
return cpu->arch->uarch_str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MICROARCH get_uarch(struct uarch* arch) {
|
||||||
|
return arch->uarch;
|
||||||
|
}
|
||||||
|
|
||||||
void free_uarch_struct(struct uarch* arch) {
|
void free_uarch_struct(struct uarch* arch) {
|
||||||
free(arch->uarch_str);
|
free(arch->uarch_str);
|
||||||
free(arch);
|
free(arch);
|
||||||
|
|||||||
@@ -5,11 +5,98 @@
|
|||||||
|
|
||||||
#include "midr.h"
|
#include "midr.h"
|
||||||
|
|
||||||
|
enum {
|
||||||
|
UARCH_UNKNOWN,
|
||||||
|
// ARM
|
||||||
|
UARCH_ARM7,
|
||||||
|
UARCH_ARM9,
|
||||||
|
UARCH_ARM1136,
|
||||||
|
UARCH_ARM1156,
|
||||||
|
UARCH_ARM1176,
|
||||||
|
UARCH_ARM11MPCORE,
|
||||||
|
UARCH_CORTEX_A5,
|
||||||
|
UARCH_CORTEX_A7,
|
||||||
|
UARCH_CORTEX_A8,
|
||||||
|
UARCH_CORTEX_A9,
|
||||||
|
UARCH_CORTEX_A12,
|
||||||
|
UARCH_CORTEX_A15,
|
||||||
|
UARCH_CORTEX_A17,
|
||||||
|
UARCH_CORTEX_A32,
|
||||||
|
UARCH_CORTEX_A35,
|
||||||
|
UARCH_CORTEX_A53,
|
||||||
|
UARCH_CORTEX_A55r0, // ARM Cortex-A55 revision 0 (restricted dual-issue capabilities compared to revision 1+).
|
||||||
|
UARCH_CORTEX_A55,
|
||||||
|
UARCH_CORTEX_A57,
|
||||||
|
UARCH_CORTEX_A65,
|
||||||
|
UARCH_CORTEX_A72,
|
||||||
|
UARCH_CORTEX_A73,
|
||||||
|
UARCH_CORTEX_A75,
|
||||||
|
UARCH_CORTEX_A76,
|
||||||
|
UARCH_CORTEX_A77,
|
||||||
|
UARCH_CORTEX_A78,
|
||||||
|
UARCH_CORTEX_A510,
|
||||||
|
UARCH_CORTEX_A710,
|
||||||
|
UARCH_CORTEX_A715,
|
||||||
|
UARCH_CORTEX_X1,
|
||||||
|
UARCH_CORTEX_X2,
|
||||||
|
UARCH_CORTEX_X3,
|
||||||
|
UARCH_NEOVERSE_N1,
|
||||||
|
UARCH_NEOVERSE_E1,
|
||||||
|
UARCH_NEOVERSE_V1,
|
||||||
|
UARCH_SCORPION,
|
||||||
|
UARCH_KRAIT,
|
||||||
|
UARCH_KYRO,
|
||||||
|
UARCH_FALKOR,
|
||||||
|
UARCH_SAPHIRA,
|
||||||
|
UARCH_DENVER,
|
||||||
|
UARCH_DENVER2,
|
||||||
|
UARCH_CARMEL,
|
||||||
|
// SAMSUNG
|
||||||
|
UARCH_EXYNOS_M1, // Samsung Exynos M1 (Exynos 8890 big cores)
|
||||||
|
UARCH_EXYNOS_M2, // Samsung Exynos M2 (Exynos 8895 big cores)
|
||||||
|
UARCH_EXYNOS_M3, // Samsung Exynos M3 (Exynos 9810 big cores)
|
||||||
|
UARCH_EXYNOS_M4, // Samsung Exynos M4 (Exynos 9820 big cores)
|
||||||
|
UARCH_EXYNOS_M5, // Samsung Exynos M5 (Exynos 9830 big cores)
|
||||||
|
// APPLE
|
||||||
|
UARCH_SWIFT, // Apple A6 and A6X processors.
|
||||||
|
UARCH_CYCLONE, // Apple A7 processor.
|
||||||
|
UARCH_TYPHOON, // Apple A8 and A8X processor
|
||||||
|
UARCH_TWISTER, // Apple A9 and A9X processor.
|
||||||
|
UARCH_HURRICANE, // Apple A10 and A10X processor.
|
||||||
|
UARCH_MONSOON, // Apple A11 processor (big cores).
|
||||||
|
UARCH_MISTRAL, // Apple A11 processor (little cores).
|
||||||
|
UARCH_VORTEX, // Apple A12 processor (big cores).
|
||||||
|
UARCH_TEMPEST, // Apple A12 processor (big cores).
|
||||||
|
UARCH_LIGHTNING, // Apple A13 processor (big cores).
|
||||||
|
UARCH_THUNDER, // Apple A13 processor (little cores).
|
||||||
|
UARCH_ICESTORM, // Apple M1 processor (little cores).
|
||||||
|
UARCH_FIRESTORM, // Apple M1 processor (big cores).
|
||||||
|
UARCH_BLIZZARD, // Apple M2 processor (little cores).
|
||||||
|
UARCH_AVALANCHE, // Apple M2 processor (big cores).
|
||||||
|
UARCH_SAWTOOTH, // Apple M3 processor (little cores).
|
||||||
|
UARCH_EVEREST, // Apple M3 processor (big cores).
|
||||||
|
// CAVIUM
|
||||||
|
UARCH_THUNDERX, // Cavium ThunderX
|
||||||
|
UARCH_THUNDERX2, // Cavium ThunderX2 (originally Broadcom Vulkan).
|
||||||
|
// MARVELL
|
||||||
|
UARCH_PJ4,
|
||||||
|
UARCH_BRAHMA_B15,
|
||||||
|
UARCH_BRAHMA_B53,
|
||||||
|
UARCH_XGENE, // Applied Micro X-Gene.
|
||||||
|
UARCH_TAISHAN_V110, // HiSilicon TaiShan v110
|
||||||
|
UARCH_TAISHAN_V200, // HiSilicon TaiShan v200
|
||||||
|
// PHYTIUM
|
||||||
|
UARCH_XIAOMI, // Not to be confused with Xiaomi Inc
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef uint32_t MICROARCH;
|
||||||
|
|
||||||
struct uarch* get_uarch_from_midr(uint32_t midr, struct cpuInfo* cpu);
|
struct uarch* get_uarch_from_midr(uint32_t midr, struct cpuInfo* cpu);
|
||||||
int get_number_of_vpus(struct cpuInfo* cpu);
|
int get_number_of_vpus(struct cpuInfo* cpu);
|
||||||
int get_vpus_width(struct cpuInfo* cpu);
|
int get_vpus_width(struct cpuInfo* cpu);
|
||||||
bool has_fma_support(struct cpuInfo* cpu);
|
bool has_fma_support(struct cpuInfo* cpu);
|
||||||
char* get_str_uarch(struct cpuInfo* cpu);
|
char* get_str_uarch(struct cpuInfo* cpu);
|
||||||
void free_uarch_struct(struct uarch* arch);
|
void free_uarch_struct(struct uarch* arch);
|
||||||
|
MICROARCH get_uarch(struct uarch* arch);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -145,6 +145,25 @@ $C2 Exynos \
|
|||||||
$C2 \
|
$C2 \
|
||||||
$C2 "
|
$C2 "
|
||||||
|
|
||||||
|
#define ASCII_KUNPENG \
|
||||||
|
"$C2 . \
|
||||||
|
$C2 .. \
|
||||||
|
$C2 .## \
|
||||||
|
$C1 .$CR $C2.###. \
|
||||||
|
$C1 ..$CR $C2#####. \
|
||||||
|
$C1 .#.$CR $C2.#######. \
|
||||||
|
$C1 .####.$CR $C2.#######. \
|
||||||
|
$C1 ..######*$CR $C2.#######. . \
|
||||||
|
$C1 .#########*$CR $C2.#######* . \
|
||||||
|
$C1 ######*$CR $C2.#######. .#. \
|
||||||
|
$C1*#######*$CR $C2.#######. *##. \
|
||||||
|
$C1 ##*$CR $C2.#######. ####### \
|
||||||
|
$C2 ###.$CR $C1#####$C2 *### \
|
||||||
|
$C1 *########## \
|
||||||
|
$C1 *######## \
|
||||||
|
$C1 #####. \
|
||||||
|
$C1 *###. "
|
||||||
|
|
||||||
#define ASCII_KIRIN \
|
#define ASCII_KIRIN \
|
||||||
"$C1 ####### \
|
"$C1 ####### \
|
||||||
$C1 ##### #################### \
|
$C1 ##### #################### \
|
||||||
@@ -485,6 +504,7 @@ asciiL logo_snapd = { ASCII_SNAPD, 39, 16, false, {C_FG_RED, C_FG_WH
|
|||||||
asciiL logo_mtk = { ASCII_MTK, 59, 5, false, {C_FG_BLUE, C_FG_YELLOW}, {C_FG_BLUE, C_FG_YELLOW} };
|
asciiL logo_mtk = { ASCII_MTK, 59, 5, false, {C_FG_BLUE, C_FG_YELLOW}, {C_FG_BLUE, C_FG_YELLOW} };
|
||||||
asciiL logo_exynos = { ASCII_EXYNOS, 22, 13, true, {C_BG_BLUE, C_FG_WHITE}, {C_FG_BLUE, C_FG_WHITE} };
|
asciiL logo_exynos = { ASCII_EXYNOS, 22, 13, true, {C_BG_BLUE, C_FG_WHITE}, {C_FG_BLUE, C_FG_WHITE} };
|
||||||
asciiL logo_kirin = { ASCII_KIRIN, 53, 12, false, {C_FG_RED}, {C_FG_WHITE, C_FG_RED} };
|
asciiL logo_kirin = { ASCII_KIRIN, 53, 12, false, {C_FG_RED}, {C_FG_WHITE, C_FG_RED} };
|
||||||
|
asciiL logo_kunpeng = { ASCII_KUNPENG, 48, 17, false, {C_FG_RED, C_FG_WHITE}, {C_FG_WHITE, C_FG_RED} };
|
||||||
asciiL logo_broadcom = { ASCII_BROADCOM, 44, 19, false, {C_FG_WHITE, C_FG_RED}, {C_FG_WHITE, C_FG_RED} };
|
asciiL logo_broadcom = { ASCII_BROADCOM, 44, 19, false, {C_FG_WHITE, C_FG_RED}, {C_FG_WHITE, C_FG_RED} };
|
||||||
asciiL logo_arm = { ASCII_ARM, 42, 5, false, {C_FG_CYAN}, {C_FG_WHITE, C_FG_CYAN} };
|
asciiL logo_arm = { ASCII_ARM, 42, 5, false, {C_FG_CYAN}, {C_FG_WHITE, C_FG_CYAN} };
|
||||||
asciiL logo_ibm = { ASCII_IBM, 42, 9, false, {C_FG_CYAN, C_FG_WHITE}, {C_FG_CYAN, C_FG_WHITE} };
|
asciiL logo_ibm = { ASCII_IBM, 42, 9, false, {C_FG_CYAN, C_FG_WHITE}, {C_FG_CYAN, C_FG_WHITE} };
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ enum {
|
|||||||
CPU_VENDOR_NVIDIA,
|
CPU_VENDOR_NVIDIA,
|
||||||
CPU_VENDOR_APM,
|
CPU_VENDOR_APM,
|
||||||
CPU_VENDOR_QUALCOMM,
|
CPU_VENDOR_QUALCOMM,
|
||||||
CPU_VENDOR_HUAWUEI,
|
CPU_VENDOR_HUAWEI,
|
||||||
CPU_VENDOR_SAMSUNG,
|
CPU_VENDOR_SAMSUNG,
|
||||||
CPU_VENDOR_MARVELL,
|
CPU_VENDOR_MARVELL,
|
||||||
CPU_VENDOR_PHYTIUM,
|
CPU_VENDOR_PHYTIUM,
|
||||||
|
|||||||
@@ -364,6 +364,8 @@ void choose_ascii_art(struct ascii* art, struct color** cs, struct terminal* ter
|
|||||||
art->art = &logo_exynos;
|
art->art = &logo_exynos;
|
||||||
else if(art->vendor == SOC_VENDOR_KIRIN)
|
else if(art->vendor == SOC_VENDOR_KIRIN)
|
||||||
art->art = &logo_kirin;
|
art->art = &logo_kirin;
|
||||||
|
else if(art->vendor == SOC_VENDOR_KUNPENG)
|
||||||
|
art->art = &logo_kunpeng;
|
||||||
else if(art->vendor == SOC_VENDOR_BROADCOM)
|
else if(art->vendor == SOC_VENDOR_BROADCOM)
|
||||||
art->art = &logo_broadcom;
|
art->art = &logo_broadcom;
|
||||||
else if(art->vendor == SOC_VENDOR_APPLE)
|
else if(art->vendor == SOC_VENDOR_APPLE)
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ static char* soc_trademark_string[] = {
|
|||||||
[SOC_VENDOR_MEDIATEK] = "MediaTek ",
|
[SOC_VENDOR_MEDIATEK] = "MediaTek ",
|
||||||
[SOC_VENDOR_EXYNOS] = "Exynos ",
|
[SOC_VENDOR_EXYNOS] = "Exynos ",
|
||||||
[SOC_VENDOR_KIRIN] = "Kirin ",
|
[SOC_VENDOR_KIRIN] = "Kirin ",
|
||||||
|
[SOC_VENDOR_KUNPENG] = "Kunpeng ",
|
||||||
[SOC_VENDOR_BROADCOM] = "Broadcom BCM",
|
[SOC_VENDOR_BROADCOM] = "Broadcom BCM",
|
||||||
[SOC_VENDOR_APPLE] = "Apple ",
|
[SOC_VENDOR_APPLE] = "Apple ",
|
||||||
[SOC_VENDOR_ROCKCHIP] = "Rockchip ",
|
[SOC_VENDOR_ROCKCHIP] = "Rockchip ",
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ enum {
|
|||||||
SOC_VENDOR_MEDIATEK,
|
SOC_VENDOR_MEDIATEK,
|
||||||
SOC_VENDOR_EXYNOS,
|
SOC_VENDOR_EXYNOS,
|
||||||
SOC_VENDOR_KIRIN,
|
SOC_VENDOR_KIRIN,
|
||||||
|
SOC_VENDOR_KUNPENG,
|
||||||
SOC_VENDOR_BROADCOM,
|
SOC_VENDOR_BROADCOM,
|
||||||
SOC_VENDOR_APPLE,
|
SOC_VENDOR_APPLE,
|
||||||
SOC_VENDOR_ROCKCHIP,
|
SOC_VENDOR_ROCKCHIP,
|
||||||
@@ -39,7 +40,7 @@ struct system_on_chip {
|
|||||||
char* raw_name;
|
char* raw_name;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct system_on_chip* get_soc(void);
|
struct system_on_chip* get_soc(struct cpuInfo* cpu);
|
||||||
char* get_soc_name(struct system_on_chip* soc);
|
char* get_soc_name(struct system_on_chip* soc);
|
||||||
VENDOR get_soc_vendor(struct system_on_chip* soc);
|
VENDOR get_soc_vendor(struct system_on_chip* soc);
|
||||||
bool match_soc(struct system_on_chip* soc, char* raw_name, char* expected_name, char* soc_name, SOC soc_model, int32_t process);
|
bool match_soc(struct system_on_chip* soc, char* raw_name, char* expected_name, char* soc_name, SOC soc_model, int32_t process);
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ struct cpuInfo* get_cpu_info(void) {
|
|||||||
cpu->ext = get_extensions_from_str(ext_str);
|
cpu->ext = get_extensions_from_str(ext_str);
|
||||||
if(cpu->ext->str != NULL && cpu->ext->mask == 0) return NULL;
|
if(cpu->ext->str != NULL && cpu->ext->mask == 0) return NULL;
|
||||||
cpu->arch = get_uarch_from_cpuinfo_str(cpuinfo_str, cpu);
|
cpu->arch = get_uarch_from_cpuinfo_str(cpuinfo_str, cpu);
|
||||||
cpu->soc = get_soc();
|
cpu->soc = get_soc(cpu);
|
||||||
cpu->freq = get_frequency_info(0);
|
cpu->freq = get_frequency_info(0);
|
||||||
cpu->peak_performance = get_peak_performance(cpu);
|
cpu->peak_performance = get_peak_performance(cpu);
|
||||||
|
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ struct system_on_chip* guess_soc_from_devtree(struct system_on_chip* soc) {
|
|||||||
return soc;
|
return soc;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct system_on_chip* get_soc(void) {
|
struct system_on_chip* get_soc(struct cpuInfo* cpu) {
|
||||||
struct system_on_chip* soc = emalloc(sizeof(struct system_on_chip));
|
struct system_on_chip* soc = emalloc(sizeof(struct system_on_chip));
|
||||||
soc->raw_name = NULL;
|
soc->raw_name = NULL;
|
||||||
soc->soc_vendor = SOC_VENDOR_UNKNOWN;
|
soc->soc_vendor = SOC_VENDOR_UNKNOWN;
|
||||||
|
|||||||
@@ -5,6 +5,6 @@
|
|||||||
#include "../common/cpu.h"
|
#include "../common/cpu.h"
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
struct system_on_chip* get_soc(void);
|
struct system_on_chip* get_soc(struct cpuInfo* cpu);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user