added ARMCpuInfo.cpp

This commit is contained in:
2023-07-17 20:36:05 +08:00
parent 22070d4169
commit dc22dc4d85
4 changed files with 243 additions and 12 deletions

View File

@@ -29,18 +29,112 @@ namespace hgl
ENUM_CLASS_RANGE(Unknow,JLQ)
};
struct SOCInfo
enum class CpuArch
{
Unknow=0,
ARMv7, ///<ARMv7
ARMv8, ///<ARMv8
ARMv9, ///<ARMv9
MIPS,
X86_32,
X86_64,
ENUM_CLASS_RANGE(Unknow,X86_64)
};
enum class ARMArch
{
Unknow=0,
ARMv7, ///<ARMv7A
ARMv8,
ARMv8_2,
ARMv9,
ARMv9_2,
ENUM_CLASS_RANGE(Unknow,ARMv9_2)
};
union ARMCpuName
{
//如A76level为7,gen为6
//A710level为7,gen为10
struct
{
char family; ///<A或X
uint8 level; ///<级别,目前就0,1,3,5,7
uint8 gen; ///<代数
bool ae:1;
bool c:1;
};
uint32 value;
};
struct ARMCpuInfo
{
ARMCpuName name;
ARMArch arch;
bool support_32bit;
bool support_64bit;
};
const uint32 ParseARMCpuName(const char *); ///<根据字符串解晰ARM CPU名称ID
bool ParseARMCpuInfo(ARMCpuInfo *,const uint32 &cpu_name_id); ///<根据ARM CPU名字ID解晰CPU信息
enum class KryoArchLevel
{
Prime,
Gold,
Silver,
ENUM_CLASS_RANGE(Prime,Silver)
};
/**
* 高通 Kryo CPU核心信息<br>
* 注这里的频率单位为MHz而且只是默认频率实际频率可能会更高或更低
*/
struct KryoCpuCoreInfo
{
ARMCpuInfo arm; ///<对应的ARM处理器
uint core_count; ///<核心数量
uint base_freq; ///<基础频率
uint boost_freq; ///<最高频率
};
struct KryoCPUInfo
{
/**
* Kryo CPU 型号
* 旧系列直接使用数字型号新的6gen1/7gen1/8gen1之类直接写为601/701/801
*/
uint model;
KryoCpuCoreInfo core[size_t(KryoArchLevel::RANGE_SIZE)];
};
struct SOCModel
{
SOCVendor vendor;
char model[32];
public:
CompOperatorMemcmp(const SOCInfo &);
CompOperatorMemcmp(const SOCModel &);
};
/**
* 根据收集到的SOC信息解晰具体的SOC厂商和主要型号
*/
bool ParseSOCInfo(SOCInfo &,const char *);
bool ParseSOCModel(SOCModel &,const char *);
}//namespace hgl