Files
fastfetch/src/detection/cpu/cpu_arm.h
T
2026-07-10 18:10:09 +08:00

589 lines
14 KiB
C

#pragma once
#include "fastfetch.h"
// https://github.com/util-linux/util-linux/blob/master/sys-utils/lscpu-arm.c
// We use the util-linux's data but not its code. Call me if it violates util-linux's GPL license.
static const char* hwImplId2Vendor(uint32_t implId) {
switch (implId) {
case 0x41:
return "ARM";
case 0x42:
return "Broadcom";
case 0x43:
return "Cavium";
case 0x44:
return "DEC";
case 0x46:
return "FUJITSU";
case 0x48:
return "HiSilicon";
case 0x49:
return "Infineon";
case 0x4d:
return "Motorola";
case 0x4e:
return "NVIDIA";
case 0x50:
return "APM";
case 0x51:
return "Qualcomm";
case 0x53:
return "Samsung";
case 0x56:
return "Marvell";
case 0x61:
return "Apple";
case 0x66:
return "Faraday";
case 0x69:
return "Intel";
case 0x6D:
return "Microsoft";
case 0x70:
return "Phytium";
case 0xc0:
return "Ampere";
default:
return "Unknown";
}
}
static const char* armPartId2name(uint32_t partId) {
switch (partId) {
case 0x810:
return "ARM810";
case 0x920:
return "ARM920";
case 0x922:
return "ARM922";
case 0x926:
return "ARM926";
case 0x940:
return "ARM940";
case 0x946:
return "ARM946";
case 0x966:
return "ARM966";
case 0xa20:
return "ARM1020";
case 0xa22:
return "ARM1022";
case 0xa26:
return "ARM1026";
case 0xb02:
return "ARM11-MPCore";
case 0xb36:
return "ARM1136";
case 0xb56:
return "ARM1156";
case 0xb76:
return "ARM1176";
case 0xc05:
return "Cortex-A5";
case 0xc07:
return "Cortex-A7";
case 0xc08:
return "Cortex-A8";
case 0xc09:
return "Cortex-A9";
case 0xc0d:
return "Cortex-A17"; /* Originally A12 */
case 0xc0f:
return "Cortex-A15";
case 0xc0e:
return "Cortex-A17";
case 0xc14:
return "Cortex-R4";
case 0xc15:
return "Cortex-R5";
case 0xc17:
return "Cortex-R7";
case 0xc18:
return "Cortex-R8";
case 0xc20:
return "Cortex-M0";
case 0xc21:
return "Cortex-M1";
case 0xc23:
return "Cortex-M3";
case 0xc24:
return "Cortex-M4";
case 0xc27:
return "Cortex-M7";
case 0xc60:
return "Cortex-M0+";
case 0xd01:
return "Cortex-A32";
case 0xd02:
return "Cortex-A34";
case 0xd03:
return "Cortex-A53";
case 0xd04:
return "Cortex-A35";
case 0xd05:
return "Cortex-A55";
case 0xd06:
return "Cortex-A65";
case 0xd07:
return "Cortex-A57";
case 0xd08:
return "Cortex-A72";
case 0xd09:
return "Cortex-A73";
case 0xd0a:
return "Cortex-A75";
case 0xd0b:
return "Cortex-A76";
case 0xd0c:
return "Neoverse-N1";
case 0xd0d:
return "Cortex-A77";
case 0xd0e:
return "Cortex-A76AE";
case 0xd13:
return "Cortex-R52";
case 0xd14:
return "Cortex-R82AE";
case 0xd15:
return "Cortex-R82";
case 0xd16:
return "Cortex-R52+";
case 0xd20:
return "Cortex-M23";
case 0xd21:
return "Cortex-M33";
case 0xd24:
return "Cortex-M52";
case 0xd22:
return "Cortex-M55";
case 0xd23:
return "Cortex-M85";
case 0xd40:
return "Neoverse-V1";
case 0xd41:
return "Cortex-A78";
case 0xd42:
return "Cortex-A78AE";
case 0xd43:
return "Cortex-A65AE";
case 0xd44:
return "Cortex-X1";
case 0xd46:
return "Cortex-A510";
case 0xd47:
return "Cortex-A710";
case 0xd48:
return "Cortex-X2";
case 0xd49:
return "Neoverse-N2";
case 0xd4a:
return "Neoverse-E1";
case 0xd4b:
return "Cortex-A78C";
case 0xd4c:
return "Cortex-X1C";
case 0xd4d:
return "Cortex-A715";
case 0xd4e:
return "Cortex-X3";
case 0xd4f:
return "Neoverse-V2";
case 0xd80:
return "Cortex-A520";
case 0xd81:
return "Cortex-A720";
case 0xd82:
return "Cortex-X4";
case 0xd83:
return "Neoverse-V3AE";
case 0xd84:
return "Neoverse-V3";
case 0xd85:
return "Cortex-X925";
case 0xd87:
return "Cortex-A725";
case 0xd88:
return "Cortex-A520AE";
case 0xd89:
return "Cortex-A720AE";
case 0xd8a:
return "C1-Nano";
case 0xd8b:
return "C1-Pro";
case 0xd8c:
return "C1-Ultra";
case 0xd8e:
return "Neoverse-N3";
case 0xd8f:
return "Cortex-A320";
case 0xd90:
return "C1-Premium";
default:
return nullptr;
}
}
static const char* brcmPartId2name(uint32_t partId) {
switch (partId) {
case 0x0f:
return "Brahma-B15";
case 0x100:
return "Brahma-B53";
case 0x516:
return "ThunderX2";
default:
return nullptr;
}
}
static const char* decPartId2name(uint32_t partId) {
switch (partId) {
case 0xa10:
return "SA110";
case 0xa11:
return "SA1100";
default:
return nullptr;
}
}
static const char* caviumPartId2name(uint32_t partId) {
switch (partId) {
case 0x0a0:
return "ThunderX";
case 0x0a1:
return "ThunderX-88XX";
case 0x0a2:
return "ThunderX-81XX";
case 0x0a3:
return "ThunderX-83XX";
case 0x0af:
return "ThunderX2-99xx";
case 0x0b0:
return "OcteonTX2";
case 0x0b1:
return "OcteonTX2-98XX";
case 0x0b2:
return "OcteonTX2-96XX";
case 0x0b3:
return "OcteonTX2-95XX";
case 0x0b4:
return "OcteonTX2-95XXN";
case 0x0b5:
return "OcteonTX2-95XXMM";
case 0x0b6:
return "OcteonTX2-95XXO";
case 0x0b8:
return "ThunderX3-T110";
default:
return nullptr;
}
}
static const char* apmPartId2name(uint32_t partId) {
switch (partId) {
case 0x000:
return "X-Gene";
default:
return nullptr;
}
}
static const char* qcomPartId2name(uint32_t partId) {
switch (partId) {
case 0x001:
return "Oryon 1";
case 0x002:
return "Oryon 2";
case 0x00f:
return "Scorpion";
case 0x02d:
return "Scorpion";
case 0x04d:
return "Krait";
case 0x06f:
return "Krait";
case 0x201:
return "Kryo";
case 0x205:
return "Kryo";
case 0x211:
return "Kryo";
case 0x800:
return "Falkor-V1/Kryo";
case 0x801:
return "Kryo-V2";
case 0x802:
return "Kryo-3XX-Gold";
case 0x803:
return "Kryo-3XX-Silver";
case 0x804:
return "Kryo-4XX-Gold";
case 0x805:
return "Kryo-4XX-Silver";
case 0xc00:
return "Falkor";
case 0xc01:
return "Saphira";
default:
return nullptr;
}
}
static const char* samsungPartId2name(uint32_t partId) {
switch (partId) {
case 0x001:
return "Exynos-M1";
case 0x002:
return "Exynos-M3";
case 0x003:
return "Exynos-M4";
case 0x004:
return "Exynos-M5";
default:
return nullptr;
}
}
static const char* nvidiaPartId2name(uint32_t partId) {
switch (partId) {
case 0x000:
return "Denver";
case 0x003:
return "Denver-2";
case 0x004:
return "Carmel";
case 0x010:
return "Olympus";
default:
return nullptr;
}
}
static const char* marvellPartId2name(uint32_t partId) {
switch (partId) {
case 0x131:
return "Feroceon-88FR131";
case 0x581:
return "PJ4/PJ4b";
case 0x584:
return "PJ4B-MP";
default:
return nullptr;
}
}
static const char* applePartId2name(uint32_t partId) {
switch (partId) {
case 0x000:
return "Swift";
case 0x001:
return "Cyclone";
case 0x002:
return "Typhoon";
case 0x003:
return "Typhoon/Capri";
case 0x004:
return "Twister";
case 0x005:
return "Twister/Elba/Malta";
case 0x006:
return "Hurricane";
case 0x007:
return "Hurricane/Myst";
case 0x008:
return "Monsoon";
case 0x009:
return "Mistral";
case 0x00b:
return "Vortex";
case 0x00c:
return "Tempest";
case 0x00f:
return "Tempest-M9";
case 0x010:
return "Vortex/Aruba";
case 0x011:
return "Tempest/Aruba";
case 0x012:
return "Lightning";
case 0x013:
return "Thunder";
case 0x020:
return "Icestorm-A14";
case 0x021:
return "Firestorm-A14";
case 0x022:
return "Icestorm-M1";
case 0x023:
return "Firestorm-M1";
case 0x024:
return "Icestorm-M1-Pro";
case 0x025:
return "Firestorm-M1-Pro";
case 0x026:
return "Thunder-M10";
case 0x028:
return "Icestorm-M1-Max";
case 0x029:
return "Firestorm-M1-Max";
case 0x030:
return "Blizzard-A15";
case 0x031:
return "Avalanche-A15";
case 0x032:
return "Blizzard-M2";
case 0x033:
return "Avalanche-M2";
case 0x034:
return "Blizzard-M2-Pro";
case 0x035:
return "Avalanche-M2-Pro";
case 0x036:
return "Sawtooth-A16";
case 0x037:
return "Everest-A16";
case 0x038:
return "Blizzard-M2-Max";
case 0x039:
return "Avalanche-M2-Max";
case 0x046:
return "Sawtooth-M11";
case 0x048:
return "Sawtooth-M3-Max";
case 0x049:
return "Everest-M3-Max";
default:
return nullptr;
}
}
static const char* faradayPartId2name(uint32_t partId) {
switch (partId) {
case 0x526:
return "FA526";
case 0x626:
return "FA626";
default:
return nullptr;
}
}
static const char* intelPartId2name(uint32_t partId) {
switch (partId) {
case 0x200:
return "i80200";
case 0x210:
return "PXA250A";
case 0x212:
return "PXA210A";
case 0x242:
return "i80321-400";
case 0x243:
return "i80321-600";
case 0x290:
return "PXA250B/PXA26x";
case 0x292:
return "PXA210B";
case 0x2c2:
return "i80321-400-B0";
case 0x2c3:
return "i80321-600-B0";
case 0x2d0:
return "PXA250C/PXA255/PXA26x";
case 0x2d2:
return "PXA210C";
case 0x411:
return "PXA27x";
case 0x41c:
return "IPX425-533";
case 0x41d:
return "IPX425-400";
case 0x41f:
return "IPX425-266";
case 0x682:
return "PXA32x";
case 0x683:
return "PXA930/PXA935";
case 0x688:
return "PXA30x";
case 0x689:
return "PXA31x";
case 0xb11:
return "SA1110";
case 0xc12:
return "IPX1200";
default:
return nullptr;
}
}
static const char* fujitsuPartId2name(uint32_t partId) {
switch (partId) {
case 0x001:
return "A64FX";
case 0x003:
return "MONAKA";
default:
return nullptr;
}
}
static const char* hisiPartId2name(uint32_t partId) {
switch (partId) {
case 0xd01:
return "TaiShan-v110"; /* used in Kunpeng-920 SoC */
case 0xd02:
return "TaiShan-v120"; /* used in Kirin 990A and 9000S SoCs */
case 0xd40:
return "Cortex-A76"; /* HiSilicon uses this ID though advertises A76 */
case 0xd41:
return "Cortex-A77"; /* HiSilicon uses this ID though advertises A77 */
default:
return nullptr;
}
}
static const char* amperePartId2name(uint32_t partId) {
switch (partId) {
case 0xac3:
return "Ampere-1";
case 0xac4:
return "Ampere-1a";
default:
return nullptr;
}
}
static const char* ftPartId2name(uint32_t partId) {
switch (partId) {
case 0x303:
return "FTC310";
case 0x660:
return "FTC660";
case 0x661:
return "FTC661";
case 0x662:
return "FTC662";
case 0x663:
return "FTC663";
case 0x664:
return "FTC664";
case 0x862:
return "FTC862";
default:
return nullptr;
}
}
static const char* msPartId2name(uint32_t partId) {
switch (partId) {
case 0xd49:
return "Azure-Cobalt-100";
default:
return nullptr;
}
}