From ea830cd11ee1f05fd510ea0f97b7c6020d0387df Mon Sep 17 00:00:00 2001 From: "A. Samy" Date: Tue, 11 Aug 2015 05:09:32 +0000 Subject: [PATCH] cpuid: minor clean up --- ccan/cpuid/cpuid.c | 49 ++++++++++------------------------------------ ccan/cpuid/cpuid.h | 46 ++++++++++++++++++++++++++++++++----------- 2 files changed, 45 insertions(+), 50 deletions(-) diff --git a/ccan/cpuid/cpuid.c b/ccan/cpuid/cpuid.c index d64f2cf5..df215eef 100644 --- a/ccan/cpuid/cpuid.c +++ b/ccan/cpuid/cpuid.c @@ -215,7 +215,7 @@ static uint32_t fetch_edx(uint32_t what) static uint32_t REGISTER; \ if (REGISTER == 0) \ REGISTER = fetch_##REGISTER(TYPE); \ - return (REGISTER & feature) == feature; \ + return !!(REGISTER & feature); \ } DEFINE_FEATURE_FUNC(ecxfeature, ecx, CPUID_PROCINFO_AND_FEATUREBITS) @@ -226,25 +226,6 @@ DEFINE_FEATURE_FUNC(edxfeature_ext, edx, CPUID_EXTENDED_PROC_INFO_FEATURE_BITS) #undef DEFINE_FEATURE_FUNC -static const char *const cpuids[] = { - "Nooooooooone", - "AMDisbetter!", - "AuthenticAMD", - "CentaurHauls", - "CyrixInstead", - "GenuineIntel", - "TransmetaCPU", - "GeniuneTMx86", - "Geode by NSC", - "NexGenDriven", - "RiseRiseRise", - "SiS SiS SiS ", - "UMC UMC UMC ", - "VIA VIA VIA ", - "Vortex86 SoC", - "KVMKVMKVMKVM" -}; - cputype_t cpuid_get_cpu_type(void) { static cputype_t cputype; @@ -256,8 +237,8 @@ cputype_t cpuid_get_cpu_type(void) uint32_t i; ___cpuid(CPUID_VENDORID, &i, &u.bufu32[0], &u.bufu32[2], &u.bufu32[1]); - for (i = 0; i < sizeof(cpuids) / sizeof(cpuids[0]); ++i) { - if (strncmp(cpuids[i], u.buf, 12) == 0) { + for (i = 0; i < sizeof(c_cpunames) / sizeof(c_cpunames); ++i) { + if (strncmp(c_cpunames[i], u.buf, sizeof(c_cpunames[0])) == 0) { cputype = (cputype_t)i; break; } @@ -267,16 +248,6 @@ cputype_t cpuid_get_cpu_type(void) return cputype; } -bool cpuid_sprintf_cputype(const cputype_t cputype, char *buf) -{ - if (cputype == CT_NONE) - return false; - - memcpy(buf, cpuids[(int)cputype], 12); - buf[12] = '\0'; - return true; -} - uint32_t cpuid_highest_ext_func_supported(void) { static uint32_t highest; @@ -300,16 +271,16 @@ uint32_t cpuid_highest_ext_func_supported(void) return highest; } -void cpuid(cpuid_t info, uint32_t *buf) +void cpuid(cpuid_t request, uint32_t *buf) { /* Sanity checks, make sure we're not trying to do something * invalid or we are trying to get information that isn't supported * by the CPU. */ - if (info > CPUID_VIRT_PHYS_ADDR_SIZES || (info > CPUID_HIGHEST_EXTENDED_FUNCTION_SUPPORTED - && !cpuid_test_feature(info))) + if (request > CPUID_VIRT_PHYS_ADDR_SIZES || (request > CPUID_HIGHEST_EXTENDED_FUNCTION_SUPPORTED + && !cpuid_test_feature(request))) return; - if (info == CPUID_PROC_BRAND_STRING) { + if (request == CPUID_PROC_BRAND_STRING) { static char cached[48] = { 0 }; if (cached[0] == '\0') { ___cpuid(CPUID_PROC_BRAND_STRING, &buf[0], &buf[1], &buf[2], &buf[3] ); @@ -321,15 +292,15 @@ void cpuid(cpuid_t info, uint32_t *buf) buf = (uint32_t *)cached; return; - } else if (info == CPUID_HIGHEST_EXTENDED_FUNCTION_SUPPORTED) { + } else if (request == CPUID_HIGHEST_EXTENDED_FUNCTION_SUPPORTED) { *buf = cpuid_highest_ext_func_supported(); return; } uint32_t eax, ebx, ecx, edx; - ___cpuid(info, &eax, &ebx, &ecx, &edx); + ___cpuid(request, &eax, &ebx, &ecx, &edx); - switch (info) { + switch (request) { case CPUID_VENDORID: buf[0] = ebx; buf[1] = edx; diff --git a/ccan/cpuid/cpuid.h b/ccan/cpuid/cpuid.h index 89ef8649..86f200d6 100644 --- a/ccan/cpuid/cpuid.h +++ b/ccan/cpuid/cpuid.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013 Ahmed Samy + * Copyright (c) 2013, 2015 Ahmed Samy * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -230,6 +230,25 @@ typedef enum cputype { CT_KVM } cputype_t; +static char const *const c_cpunames[] = { + "Nooooooooone", + "AMDisbetter!", + "AuthenticAMD", + "CentaurHauls", + "CyrixInstead", + "GenuineIntel", + "TransmetaCPU", + "GeniuneTMx86", + "Geode by NSC", + "NexGenDriven", + "RiseRiseRise", + "SiS SiS SiS ", + "UMC UMC UMC ", + "VIA VIA VIA ", + "Vortex86 SoC", + "KVMKVMKVMKVM" +}; + #if defined(__i386__) || defined(__i386) || defined(__x86_64) \ || defined(_M_AMD64) || defined(__M_X64) @@ -240,17 +259,22 @@ typedef enum cputype { * * See also: cpuid_get_cpu_type_string() */ -#define is_intel_cpu() cpuid_get_cpu_type() == CT_INTEL -#define is_amd_cpu() cpuid_get_cpu_type() == CT_AMDK5 || cpuid_get_cpu_type() == CT_AMD cputype_t cpuid_get_cpu_type(void); -/** - * cpuid_sprintf_cputype - Get CPU Type string - * @cputype: a char of atleast 12 bytes in it. - * - * Returns true on success, false on failure - */ -bool cpuid_sprintf_cputype(const cputype_t cputype, char *buf); +static inline bool is_intel_cpu(void) +{ + return cpuid_get_cpu_type() == CT_INTEL; +} + +static inline bool is_amd_cpu(void) +{ + return cpuid_get_cpu_type() == CT_AMDK5 || cpuid_get_cpu_type() == CT_AMD; +} + +static inline const char *cpuid_get_name(void) +{ + return c_cpunames[(int)cpuid_get_cpu_type()]; +} /** * cpuid_is_supported - test if the CPUID instruction is supported @@ -341,7 +365,7 @@ uint32_t cpuid_highest_ext_func_supported(void); * * If an invalid flag has been passed a 0xbaadf00d is returned in *buf. */ -void cpuid(cpuid_t info, uint32_t *buf); +void cpuid(cpuid_t request, uint32_t *buf); /** * cpuid_write_info - Write specified CPU information to a file. -- 2.39.2