#pragma once #include #include #include #include enum cpuinfo_arm_chipset_vendor { cpuinfo_arm_chipset_vendor_unknown = 0, cpuinfo_arm_chipset_vendor_qualcomm, cpuinfo_arm_chipset_vendor_mediatek, cpuinfo_arm_chipset_vendor_samsung, cpuinfo_arm_chipset_vendor_hisilicon, cpuinfo_arm_chipset_vendor_actions, cpuinfo_arm_chipset_vendor_allwinner, cpuinfo_arm_chipset_vendor_amlogic, cpuinfo_arm_chipset_vendor_broadcom, cpuinfo_arm_chipset_vendor_lg, cpuinfo_arm_chipset_vendor_leadcore, cpuinfo_arm_chipset_vendor_marvell, cpuinfo_arm_chipset_vendor_mstar, cpuinfo_arm_chipset_vendor_novathor, cpuinfo_arm_chipset_vendor_nvidia, cpuinfo_arm_chipset_vendor_pinecone, cpuinfo_arm_chipset_vendor_renesas, cpuinfo_arm_chipset_vendor_rockchip, cpuinfo_arm_chipset_vendor_spreadtrum, cpuinfo_arm_chipset_vendor_telechips, cpuinfo_arm_chipset_vendor_texas_instruments, cpuinfo_arm_chipset_vendor_wondermedia, cpuinfo_arm_chipset_vendor_max, }; enum cpuinfo_arm_chipset_series { cpuinfo_arm_chipset_series_unknown = 0, cpuinfo_arm_chipset_series_qualcomm_qsd, cpuinfo_arm_chipset_series_qualcomm_msm, cpuinfo_arm_chipset_series_qualcomm_apq, cpuinfo_arm_chipset_series_qualcomm_snapdragon, cpuinfo_arm_chipset_series_mediatek_mt, cpuinfo_arm_chipset_series_samsung_exynos, cpuinfo_arm_chipset_series_hisilicon_k3v, cpuinfo_arm_chipset_series_hisilicon_hi, cpuinfo_arm_chipset_series_hisilicon_kirin, cpuinfo_arm_chipset_series_actions_atm, cpuinfo_arm_chipset_series_allwinner_a, cpuinfo_arm_chipset_series_amlogic_aml, cpuinfo_arm_chipset_series_amlogic_s, cpuinfo_arm_chipset_series_broadcom_bcm, cpuinfo_arm_chipset_series_lg_nuclun, cpuinfo_arm_chipset_series_leadcore_lc, cpuinfo_arm_chipset_series_marvell_pxa, cpuinfo_arm_chipset_series_mstar_6a, cpuinfo_arm_chipset_series_novathor_u, cpuinfo_arm_chipset_series_nvidia_tegra_t, cpuinfo_arm_chipset_series_nvidia_tegra_ap, cpuinfo_arm_chipset_series_nvidia_tegra_sl, cpuinfo_arm_chipset_series_pinecone_surge_s, cpuinfo_arm_chipset_series_renesas_mp, cpuinfo_arm_chipset_series_rockchip_rk, cpuinfo_arm_chipset_series_spreadtrum_sc, cpuinfo_arm_chipset_series_telechips_tcc, cpuinfo_arm_chipset_series_texas_instruments_omap, cpuinfo_arm_chipset_series_wondermedia_wm, cpuinfo_arm_chipset_series_max, }; #define CPUINFO_ARM_CHIPSET_SUFFIX_MAX 8 struct cpuinfo_arm_chipset { enum cpuinfo_arm_chipset_vendor vendor; enum cpuinfo_arm_chipset_series series; uint32_t model; char suffix[CPUINFO_ARM_CHIPSET_SUFFIX_MAX]; }; #define CPUINFO_ARM_CHIPSET_NAME_MAX CPUINFO_PACKAGE_NAME_MAX #ifndef __cplusplus CPUINFO_INTERNAL void cpuinfo_arm_chipset_to_string( const struct cpuinfo_arm_chipset chipset[restrict static 1], char name[restrict static CPUINFO_ARM_CHIPSET_NAME_MAX]); CPUINFO_INTERNAL void cpuinfo_arm_fixup_chipset( struct cpuinfo_arm_chipset chipset[restrict static 1], uint32_t cores, uint32_t max_cpu_freq_max); CPUINFO_INTERNAL void cpuinfo_arm_decode_vendor_uarch( uint32_t midr, #if CPUINFO_ARCH_ARM bool has_vfpv4, #endif enum cpuinfo_vendor vendor[restrict static 1], enum cpuinfo_uarch uarch[restrict static 1]); CPUINFO_INTERNAL void cpuinfo_arm_decode_cache( enum cpuinfo_uarch uarch, uint32_t cluster_cores, uint32_t midr, const struct cpuinfo_arm_chipset chipset[restrict static 1], uint32_t cluster_id, uint32_t arch_version, struct cpuinfo_cache l1i[restrict static 1], struct cpuinfo_cache l1d[restrict static 1], struct cpuinfo_cache l2[restrict static 1], struct cpuinfo_cache l3[restrict static 1]); CPUINFO_INTERNAL uint32_t cpuinfo_arm_compute_max_cache_size( const struct cpuinfo_processor processor[restrict static 1]); #else /* defined(__cplusplus) */ CPUINFO_INTERNAL void cpuinfo_arm_decode_cache( enum cpuinfo_uarch uarch, uint32_t cluster_cores, uint32_t midr, const struct cpuinfo_arm_chipset chipset[1], uint32_t cluster_id, uint32_t arch_version, struct cpuinfo_cache l1i[1], struct cpuinfo_cache l1d[1], struct cpuinfo_cache l2[1], struct cpuinfo_cache l3[1]); #endif