svn commit: r195197 - in stable/7/sys: . amd64/amd64
amd64/include contrib/pf dev/coretemp dev/hwpmc i386/cpufreq
i386/i386 i386/include
Max Brazhnikov
makc at issp.ac.ru
Wed Jul 8 07:29:33 UTC 2009
On Tue, 30 Jun 2009 17:10:08 +0000 (UTC)Tue Jun 30 17:10:08 2009, Andriy Gapon
wrote:
> Author: avg
> Date: Tue Jun 30 17:10:08 2009
> New Revision: 195197
> URL: http://svn.freebsd.org/changeset/base/195197
>
> Log:
> MFC 185295, 185341, 185343: cpu identification improvements
>
> Goal of this MFC is to minimize unnecessary code differences between
> head and the branch, and to improve/fix invariant TSC detection for
> a wide range of CPUs.
>
> 185295 by takawata: Honor AMDPM_TSC_INVARIANT for Intel CPUs (i386 only)
> 185341 by jkim: Introduce cpu_vendor_id...
> 185343 by jkim: Use newly introduced cpu_vendor_id...
>
> These revision are bundled together because all intermediate revisions
> have one or more of the following deficiencies:
> o AMDPM_TSC_INVARIANT bit (CPUID.0x80000007.EDX[8]) is not honored for
> Intel CPUs;
> o AMD-specific CPU model/revision checks are performed on Intel CPUs.
>
> Nod from: jkim
>
> Modified:
> stable/7/sys/ (props changed)
> stable/7/sys/amd64/amd64/amd64_mem.c
> stable/7/sys/amd64/amd64/identcpu.c
> stable/7/sys/amd64/amd64/initcpu.c
> stable/7/sys/amd64/amd64/local_apic.c
> stable/7/sys/amd64/amd64/mp_machdep.c
> stable/7/sys/amd64/amd64/msi.c
> stable/7/sys/amd64/include/cputypes.h
> stable/7/sys/amd64/include/md_var.h
> stable/7/sys/amd64/include/specialreg.h
> stable/7/sys/contrib/pf/ (props changed)
> stable/7/sys/dev/coretemp/coretemp.c
> stable/7/sys/dev/hwpmc/hwpmc_intel.c
> stable/7/sys/dev/hwpmc/hwpmc_piv.c
> stable/7/sys/dev/hwpmc/hwpmc_ppro.c
> stable/7/sys/dev/hwpmc/hwpmc_x86.c
> stable/7/sys/i386/cpufreq/est.c
> stable/7/sys/i386/i386/i686_mem.c
> stable/7/sys/i386/i386/identcpu.c
> stable/7/sys/i386/i386/initcpu.c
> stable/7/sys/i386/i386/k6_mem.c
> stable/7/sys/i386/i386/local_apic.c
> stable/7/sys/i386/i386/longrun.c
> stable/7/sys/i386/i386/mp_machdep.c
> stable/7/sys/i386/i386/msi.c
> stable/7/sys/i386/include/cputypes.h
> stable/7/sys/i386/include/md_var.h
> stable/7/sys/i386/include/specialreg.h
>
> Modified: stable/7/sys/amd64/amd64/amd64_mem.c
> ===========================================================================
>=== --- stable/7/sys/amd64/amd64/amd64_mem.c Tue Jun 30 15:23:16
> 2009 (r195196) +++ stable/7/sys/amd64/amd64/amd64_mem.c Tue Jun 30 17:10:08
> 2009 (r195197) @@ -35,6 +35,7 @@ __FBSDID("$FreeBSD$");
> #include <sys/smp.h>
> #include <sys/sysctl.h>
>
> +#include <machine/cputypes.h>
> #include <machine/md_var.h>
> #include <machine/specialreg.h>
>
> @@ -677,8 +678,8 @@ amd64_mem_drvinit(void *unused)
> return;
> if ((cpu_id & 0xf00) != 0x600 && (cpu_id & 0xf00) != 0xf00)
> return;
> - if ((strcmp(cpu_vendor, "GenuineIntel") != 0) &&
> - (strcmp(cpu_vendor, "AuthenticAMD") != 0))
> + if (cpu_vendor_id != CPU_VENDOR_INTEL &&
> + cpu_vendor_id != CPU_VENDOR_AMD)
> return;
> mem_range_softc.mr_op = &amd64_mrops;
> }
>
> Modified: stable/7/sys/amd64/amd64/identcpu.c
> ===========================================================================
>=== --- stable/7/sys/amd64/amd64/identcpu.c Tue Jun 30 15:23:16
> 2009 (r195196) +++ stable/7/sys/amd64/amd64/identcpu.c Tue Jun 30 17:10:08
> 2009 (r195197) @@ -69,6 +69,7 @@ void identify_cpu(void);
> void earlysetcpuclass(void);
> void panicifcpuunsupported(void);
>
> +static u_int find_cpu_vendor_id(void);
> static void print_AMD_info(void);
> static void print_AMD_assoc(int i);
>
> @@ -95,6 +96,14 @@ static struct {
> { "Sledgehammer", CPUCLASS_K8 }, /* CPU_SLEDGEHAMMER */
> };
>
> +static struct {
> + char *vendor;
> + u_int vendor_id;
> +} cpu_vendors[] = {
> + { INTEL_VENDOR_ID, CPU_VENDOR_INTEL }, /* GenuineIntel */
> + { AMD_VENDOR_ID, CPU_VENDOR_AMD }, /* AuthenticAMD */
> +};
> +
> void
> printcpuinfo(void)
> {
> @@ -115,10 +124,10 @@ printcpuinfo(void)
> }
> }
>
> - if (strcmp(cpu_vendor, "GenuineIntel") == 0) {
> + if (cpu_vendor_id == CPU_VENDOR_INTEL) {
> /* Please make up your mind folks! */
> strcat(cpu_model, "EM64T");
> - } else if (strcmp(cpu_vendor, "AuthenticAMD") == 0) {
> + } else if (cpu_vendor_id == CPU_VENDOR_AMD) {
> /*
> * Values taken from AMD Processor Recognition
> * http://www.amd.com/K6/k6docs/pdf/20734g.pdf
> @@ -158,13 +167,13 @@ printcpuinfo(void)
> printf("Unknown"); /* will panic below... */
> }
> printf("-class CPU)\n");
> - if(*cpu_vendor)
> - printf(" Origin = \"%s\"",cpu_vendor);
> - if(cpu_id)
> + if (*cpu_vendor)
> + printf(" Origin = \"%s\"", cpu_vendor);
> + if (cpu_id)
> printf(" Id = 0x%x", cpu_id);
>
> - if (strcmp(cpu_vendor, "GenuineIntel") == 0 ||
> - strcmp(cpu_vendor, "AuthenticAMD") == 0) {
> + if (cpu_vendor_id == CPU_VENDOR_INTEL ||
> + cpu_vendor_id == CPU_VENDOR_AMD) {
> printf(" Stepping = %u", cpu_id & 0xf);
> if (cpu_high > 0) {
> u_int cmp = 1, htt = 1;
> @@ -336,22 +345,28 @@ printcpuinfo(void)
> );
> }
>
> - if (cpu_feature & CPUID_HTT && strcmp(cpu_vendor,
> - "AuthenticAMD") == 0)
> + if ((cpu_feature & CPUID_HTT) &&
> + cpu_vendor_id == CPU_VENDOR_AMD)
> cpu_feature &= ~CPUID_HTT;
>
> /*
> * If this CPU supports P-state invariant TSC then
> * mention the capability.
> */
> - if (!tsc_is_invariant &&
> - (strcmp(cpu_vendor, "AuthenticAMD") == 0 &&
> - ((amd_pminfo & AMDPM_TSC_INVARIANT) != 0 ||
> - AMD64_CPU_FAMILY(cpu_id) >= 0x10 ||
> - cpu_id == 0x60fb2))) {
> - tsc_is_invariant = 1;
> - printf("\n TSC: P-state invariant");
> + switch (cpu_vendor_id) {
> + case CPU_VENDOR_AMD:
> + if ((amd_pminfo & AMDPM_TSC_INVARIANT) ||
> + AMD64_CPU_FAMILY(cpu_id) >= 0x10 ||
> + cpu_id == 0x60fb2)
> + tsc_is_invariant = 1;
> + break;
> + case CPU_VENDOR_INTEL:
> + if (amd_pminfo & AMDPM_TSC_INVARIANT)
> + tsc_is_invariant = 1;
> + break;
> }
> + if (tsc_is_invariant)
> + printf("\n TSC: P-state invariant");
>
> /*
> * If this CPU supports HTT or CMP then mention the
> @@ -359,10 +374,10 @@ printcpuinfo(void)
> */
> if (cpu_feature & CPUID_HTT)
> htt = (cpu_procinfo & CPUID_HTT_CORES) >> 16;
> - if (strcmp(cpu_vendor, "AuthenticAMD") == 0 &&
> + if (cpu_vendor_id == CPU_VENDOR_AMD &&
> (amd_feature2 & AMDID2_CMP))
> cmp = (cpu_procinfo2 & AMDID_CMP_CORES) + 1;
> - else if (strcmp(cpu_vendor, "GenuineIntel") == 0 &&
> + else if (cpu_vendor_id == CPU_VENDOR_INTEL &&
> (cpu_high >= 4)) {
> cpuid_count(4, 0, regs);
> if ((regs[0] & 0x1f) != 0)
> @@ -382,7 +397,7 @@ printcpuinfo(void)
> if (!bootverbose)
> return;
>
> - if (strcmp(cpu_vendor, "AuthenticAMD") == 0)
> + if (cpu_vendor_id == CPU_VENDOR_AMD)
> print_AMD_info();
> }
>
> @@ -441,6 +456,7 @@ identify_cpu(void)
> ((u_int *)&cpu_vendor)[1] = regs[3];
> ((u_int *)&cpu_vendor)[2] = regs[2];
> cpu_vendor[12] = '\0';
> + cpu_vendor_id = find_cpu_vendor_id();
>
> do_cpuid(1, regs);
> cpu_id = regs[0];
> @@ -448,8 +464,8 @@ identify_cpu(void)
> cpu_feature = regs[3];
> cpu_feature2 = regs[2];
>
> - if (strcmp(cpu_vendor, "GenuineIntel") == 0 ||
> - strcmp(cpu_vendor, "AuthenticAMD") == 0) {
> + if (cpu_vendor_id == CPU_VENDOR_INTEL ||
> + cpu_vendor_id == CPU_VENDOR_AMD) {
> do_cpuid(0x80000000, regs);
> cpu_exthigh = regs[0];
> }
> @@ -471,6 +487,17 @@ identify_cpu(void)
> cpu = CPU_CLAWHAMMER;
> }
>
> +static u_int
> +find_cpu_vendor_id(void)
> +{
> + int i;
> +
> + for (i = 0; i < sizeof(cpu_vendors) / sizeof(cpu_vendors[0]); i++)
> + if (strcmp(cpu_vendor, cpu_vendors[i].vendor) == 0)
> + return (cpu_vendors[i].vendor_id);
> + return (0);
> +}
> +
> static void
> print_AMD_assoc(int i)
> {
>
> Modified: stable/7/sys/amd64/amd64/initcpu.c
> ===========================================================================
>=== --- stable/7/sys/amd64/amd64/initcpu.c Tue Jun 30 15:23:16
> 2009 (r195196) +++ stable/7/sys/amd64/amd64/initcpu.c Tue Jun 30 17:10:08
> 2009 (r195197) @@ -60,6 +60,7 @@ u_int cpu_id; /* Stepping ID */
> u_int cpu_procinfo; /* HyperThreading Info / Brand Index / CLFUSH */
> u_int cpu_procinfo2; /* Multicore info */
> char cpu_vendor[20]; /* CPU Origin code */
> +u_int cpu_vendor_id; /* CPU vendor ID */
> u_int cpu_fxsr; /* SSE enabled */
> u_int cpu_mxcsr_mask; /* Valid bits in mxcsr */
>
>
> Modified: stable/7/sys/amd64/amd64/local_apic.c
> ===========================================================================
>=== --- stable/7/sys/amd64/amd64/local_apic.c Tue Jun 30 15:23:16
> 2009 (r195196) +++ stable/7/sys/amd64/amd64/local_apic.c Tue Jun 30
> 17:10:08 2009 (r195197) @@ -323,7 +323,7 @@ lapic_setup(int boot)
>
> /* XXX: Error and thermal LVTs */
>
> - if (strcmp(cpu_vendor, "AuthenticAMD") == 0) {
> + if (cpu_vendor_id == CPU_VENDOR_AMD) {
> /*
> * Detect the presence of C1E capability mostly on latest
> * dual-cores (or future) k8 family. This feature renders
>
> Modified: stable/7/sys/amd64/amd64/mp_machdep.c
> ===========================================================================
>=== --- stable/7/sys/amd64/amd64/mp_machdep.c Tue Jun 30 15:23:16
> 2009 (r195196) +++ stable/7/sys/amd64/amd64/mp_machdep.c Tue Jun 30
> 17:10:08 2009 (r195197) @@ -57,6 +57,7 @@ __FBSDID("$FreeBSD$");
> #include <vm/vm_extern.h>
>
> #include <machine/apicreg.h>
> +#include <machine/cputypes.h>
> #include <machine/md_var.h>
> #include <machine/mp_watchdog.h>
> #include <machine/pcb.h>
> @@ -376,8 +377,7 @@ cpu_mp_start(void)
> * First determine if this is an Intel processor which claims
> * to have hyperthreading support.
> */
> - if ((cpu_feature & CPUID_HTT) &&
> - (strcmp(cpu_vendor, "GenuineIntel") == 0)) {
> + if ((cpu_feature & CPUID_HTT) && cpu_vendor_id == CPU_VENDOR_INTEL) {
> /*
> * If the "deterministic cache parameters" cpuid calls
> * are available, use them.
>
> Modified: stable/7/sys/amd64/amd64/msi.c
> ===========================================================================
>=== --- stable/7/sys/amd64/amd64/msi.c Tue Jun 30 15:23:16 2009 (r195196)
> +++ stable/7/sys/amd64/amd64/msi.c Tue Jun 30 17:10:08 2009 (r195197) @@
> -46,6 +46,7 @@ __FBSDID("$FreeBSD$");
> #include <sys/sx.h>
> #include <sys/systm.h>
> #include <machine/apicreg.h>
> +#include <machine/cputypes.h>
> #include <machine/md_var.h>
> #include <machine/frame.h>
> #include <machine/intr_machdep.h>
> @@ -211,8 +212,8 @@ msi_init(void)
> {
>
> /* Check if we have a supported CPU. */
> - if (!(strcmp(cpu_vendor, "GenuineIntel") == 0 ||
> - strcmp(cpu_vendor, "AuthenticAMD") == 0))
> + if (!(cpu_vendor_id == CPU_VENDOR_INTEL ||
> + cpu_vendor_id == CPU_VENDOR_AMD))
> return;
>
> msi_enabled = 1;
>
> Modified: stable/7/sys/amd64/include/cputypes.h
> ===========================================================================
>=== --- stable/7/sys/amd64/include/cputypes.h Tue Jun 30 15:23:16
> 2009 (r195196) +++ stable/7/sys/amd64/include/cputypes.h Tue Jun 30
> 17:10:08 2009 (r195197) @@ -33,15 +33,21 @@
> /*
> * Classes of processor.
> */
> -#define CPUCLASS_X86 0 /* X86 */
> -#define CPUCLASS_K8 1 /* K8 AMD64 class */
> +#define CPUCLASS_X86 0 /* X86 */
> +#define CPUCLASS_K8 1 /* K8 AMD64 class */
>
> /*
> * Kinds of processor.
> */
> -#define CPU_X86 0 /* Intel */
> -#define CPU_CLAWHAMMER 1 /* AMD Clawhammer */
> -#define CPU_SLEDGEHAMMER 2 /* AMD Sledgehammer */
> +#define CPU_X86 0 /* Intel */
> +#define CPU_CLAWHAMMER 1 /* AMD Clawhammer */
> +#define CPU_SLEDGEHAMMER 2 /* AMD Sledgehammer */
> +
> +/*
> + * Vendors of processor.
> + */
> +#define CPU_VENDOR_AMD 0x1022 /* AMD */
> +#define CPU_VENDOR_INTEL 0x8086 /* Intel */
>
> #ifndef LOCORE
> extern int cpu;
>
> Modified: stable/7/sys/amd64/include/md_var.h
> ===========================================================================
>=== --- stable/7/sys/amd64/include/md_var.h Tue Jun 30 15:23:16
> 2009 (r195196) +++ stable/7/sys/amd64/include/md_var.h Tue Jun 30 17:10:08
> 2009 (r195197) @@ -52,6 +52,7 @@ extern u_int cpu_mxcsr_mask;
> extern u_int cpu_procinfo;
> extern u_int cpu_procinfo2;
> extern char cpu_vendor[];
> +extern u_int cpu_vendor_id;
> extern char kstack[];
> extern char sigcode[];
> extern int szsigcode;
>
> Modified: stable/7/sys/amd64/include/specialreg.h
> ===========================================================================
>=== --- stable/7/sys/amd64/include/specialreg.h Tue Jun 30 15:23:16
> 2009 (r195196) +++ stable/7/sys/amd64/include/specialreg.h Tue Jun 30
> 17:10:08 2009 (r195197) @@ -204,8 +204,8 @@
> /*
> * CPUID manufacturers identifiers
> */
> -#define INTEL_VENDOR_ID "GenuineIntel"
> -#define AMD_VENDOR_ID "AuthenticAMD"
> +#define AMD_VENDOR_ID "AuthenticAMD"
> +#define INTEL_VENDOR_ID "GenuineIntel"
>
> /*
> * Model-specific registers for the i386 family
>
> Modified: stable/7/sys/dev/coretemp/coretemp.c
> ===========================================================================
>=== --- stable/7/sys/dev/coretemp/coretemp.c Tue Jun 30 15:23:16
> 2009 (r195196) +++ stable/7/sys/dev/coretemp/coretemp.c Tue Jun 30 17:10:08
> 2009 (r195197) @@ -45,6 +45,7 @@ __FBSDID("$FreeBSD$");
>
> #include <machine/specialreg.h>
> #include <machine/cpufunc.h>
> +#include <machine/cputypes.h>
> #include <machine/md_var.h>
>
> struct coretemp_softc {
> @@ -94,7 +95,7 @@ coretemp_identify(driver_t *driver, devi
> return;
>
> /* Check that CPUID 0x06 is supported and the vendor is Intel.*/
> - if (cpu_high < 6 || strcmp(cpu_vendor, "GenuineIntel"))
> + if (cpu_high < 6 || cpu_vendor_id != CPU_VENDOR_INTEL)
> return;
> /*
> * CPUID 0x06 returns 1 if the processor has on-die thermal
>
> Modified: stable/7/sys/dev/hwpmc/hwpmc_intel.c
> ===========================================================================
>=== --- stable/7/sys/dev/hwpmc/hwpmc_intel.c Tue Jun 30 15:23:16
> 2009 (r195196) +++ stable/7/sys/dev/hwpmc/hwpmc_intel.c Tue Jun 30 17:10:08
> 2009 (r195197) @@ -37,6 +37,7 @@ __FBSDID("$FreeBSD$");
> #include <sys/systm.h>
>
> #include <machine/cpu.h>
> +#include <machine/cputypes.h>
> #include <machine/md_var.h>
> #include <machine/specialreg.h>
>
> @@ -79,7 +80,7 @@ pmc_intel_initialize(void)
> enum pmc_cputype cputype;
> int error, model, nclasses, ncpus;
>
> - KASSERT(strcmp(cpu_vendor, "GenuineIntel") == 0,
> + KASSERT(cpu_vendor_id == CPU_VENDOR_INTEL,
> ("[intel,%d] Initializing non-intel processor", __LINE__));
>
> PMCDBG(MDP,INI,0, "intel-initialize cpuid=0x%x", cpu_id);
>
> Modified: stable/7/sys/dev/hwpmc/hwpmc_piv.c
> ===========================================================================
>=== --- stable/7/sys/dev/hwpmc/hwpmc_piv.c Tue Jun 30 15:23:16
> 2009 (r195196) +++ stable/7/sys/dev/hwpmc/hwpmc_piv.c Tue Jun 30 17:10:08
> 2009 (r195197) @@ -41,6 +41,7 @@ __FBSDID("$FreeBSD$");
>
> #include <machine/cpu.h>
> #include <machine/cpufunc.h>
> +#include <machine/cputypes.h>
> #include <machine/md_var.h>
> #include <machine/specialreg.h>
>
> @@ -1610,7 +1611,7 @@ pmc_p4_initialize(struct pmc_mdep *md, i
> struct p4_event_descr *pe;
>
> KASSERT(md != NULL, ("[p4,%d] md is NULL", __LINE__));
> - KASSERT(strcmp(cpu_vendor, "GenuineIntel") == 0,
> + KASSERT(cpu_vendor_id == CPU_VENDOR_INTEL,
> ("[p4,%d] Initializing non-intel processor", __LINE__));
>
> PMCDBG(MDP,INI,1, "%s", "p4-initialize");
>
> Modified: stable/7/sys/dev/hwpmc/hwpmc_ppro.c
> ===========================================================================
>=== --- stable/7/sys/dev/hwpmc/hwpmc_ppro.c Tue Jun 30 15:23:16
> 2009 (r195196) +++ stable/7/sys/dev/hwpmc/hwpmc_ppro.c Tue Jun 30 17:10:08
> 2009 (r195197) @@ -41,6 +41,7 @@ __FBSDID("$FreeBSD$");
>
> #include <machine/cpu.h>
> #include <machine/cpufunc.h>
> +#include <machine/cputypes.h>
> #include <machine/md_var.h>
> #include <machine/pmc_mdep.h>
> #include <machine/specialreg.h>
> @@ -781,7 +782,7 @@ pmc_p6_initialize(struct pmc_mdep *md, i
> {
> struct pmc_classdep *pcd;
>
> - KASSERT(strcmp(cpu_vendor, "GenuineIntel") == 0,
> + KASSERT(cpu_vendor_id == CPU_VENDOR_INTEL,
> ("[p6,%d] Initializing non-intel processor", __LINE__));
>
> PMCDBG(MDP,INI,1, "%s", "p6-initialize");
>
> Modified: stable/7/sys/dev/hwpmc/hwpmc_x86.c
> ===========================================================================
>=== --- stable/7/sys/dev/hwpmc/hwpmc_x86.c Tue Jun 30 15:23:16
> 2009 (r195196) +++ stable/7/sys/dev/hwpmc/hwpmc_x86.c Tue Jun 30 17:10:08
> 2009 (r195197) @@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$");
> #include <sys/systm.h>
>
> #include <machine/cpu.h>
> +#include <machine/cputypes.h>
> #include <machine/apicreg.h>
> #include <machine/pmc_mdep.h>
> #include <machine/md_var.h>
> @@ -252,9 +253,9 @@ pmc_md_initialize()
>
> /* determine the CPU kind */
> md = NULL;
> - if (strcmp(cpu_vendor, "AuthenticAMD") == 0)
> + if (cpu_vendor_id == CPU_VENDOR_AMD)
> md = pmc_amd_initialize();
> - else if (strcmp(cpu_vendor, "GenuineIntel") == 0)
> + else if (cpu_vendor_id == CPU_VENDOR_INTEL)
> md = pmc_intel_initialize();
> else
> KASSERT(0, ("[x86,%d] Unknown vendor", __LINE__));
> @@ -270,9 +271,9 @@ pmc_md_initialize()
> void
> pmc_md_finalize(struct pmc_mdep *md)
> {
> - if (strcmp(cpu_vendor, "AuthenticAMD") == 0)
> + if (cpu_vendor_id == CPU_VENDOR_AMD)
> pmc_amd_finalize(md);
> - else if (strcmp(cpu_vendor, "GenuineIntel") == 0)
> + else if (cpu_vendor_id == CPU_VENDOR_INTEL)
> pmc_intel_finalize(md);
> else
> KASSERT(0, ("[x86,%d] Unknown vendor", __LINE__));
>
> Modified: stable/7/sys/i386/cpufreq/est.c
> ===========================================================================
>=== --- stable/7/sys/i386/cpufreq/est.c Tue Jun 30 15:23:16 2009 (r195196)
> +++ stable/7/sys/i386/cpufreq/est.c Tue Jun 30 17:10:08 2009 (r195197) @@
> -39,6 +39,7 @@ __FBSDID("$FreeBSD$");
>
> #include "cpufreq_if.h"
> #include <machine/clock.h>
> +#include <machine/cputypes.h>
> #include <machine/md_var.h>
> #include <machine/specialreg.h>
>
> @@ -54,6 +55,10 @@ __FBSDID("$FreeBSD$");
> #define MSR_MISC_ENABLE 0x1a0
> #define MSR_SS_ENABLE (1<<16)
>
> +#ifndef CPU_VENDOR_CENTAUR
> +#define CPU_VENDOR_CENTAUR 0x111d
> +#endif
> +
> /* Frequency and MSR control values. */
> typedef struct {
> uint16_t freq;
> @@ -64,7 +69,7 @@ typedef struct {
>
> /* Identifying characteristics of a processor and supported frequencies.
> */ typedef struct {
> - const char *vendor;
> + const u_int vendor_id;
> uint32_t id32;
> freq_info *freqtab;
> } cpu_info;
> @@ -88,12 +93,10 @@ struct est_softc {
> #define FREQ_INFO(MHz, mV, bus_clk) \
> FREQ_INFO_PWR(MHz, mV, bus_clk, CPUFREQ_VAL_UNKNOWN)
> #define INTEL(tab, zhi, vhi, zlo, vlo, bus_clk) \
> - { intel_id, ID32(zhi, vhi, zlo, vlo, bus_clk), tab }
> + { CPU_VENDOR_INTEL, ID32(zhi, vhi, zlo, vlo, bus_clk), tab }
> #define CENTAUR(tab, zhi, vhi, zlo, vlo, bus_clk) \
> - { centaur_id, ID32(zhi, vhi, zlo, vlo, bus_clk), tab }
> + { CPU_VENDOR_CENTAUR, ID32(zhi, vhi, zlo, vlo, bus_clk), tab }
>
> -const char intel_id[] = "GenuineIntel";
> -const char centaur_id[] = "CentaurHauls";
> static int msr_info_enabled = 0;
> TUNABLE_INT("hw.est.msr_info", &msr_info_enabled);
>
> @@ -891,7 +894,7 @@ static cpu_info ESTprocs[] = {
> CENTAUR(C7M_772_ULV, 1200, 844, 400, 796, 100),
> CENTAUR(C7M_779_ULV, 1000, 796, 400, 796, 100),
> CENTAUR(C7M_770_ULV, 1000, 844, 400, 796, 100),
> - { NULL, 0, NULL },
> + { 0, 0, NULL },
> };
>
> static void est_identify(driver_t *driver, device_t parent);
> @@ -958,8 +961,8 @@ est_identify(driver_t *driver, device_t
> return;
>
> /* Check that CPUID is supported and the vendor is Intel.*/
> - if (cpu_high == 0 || (strcmp(cpu_vendor, intel_id) != 0 &&
> - strcmp(cpu_vendor, centaur_id) != 0))
> + if (cpu_high == 0 || (cpu_vendor_id != CPU_VENDOR_INTEL &&
> + cpu_vendor_id != CPU_VENDOR_CENTAUR))
> return;
>
> /*
> @@ -1159,7 +1162,7 @@ est_table_info(device_t dev, uint64_t ms
> /* Find a table which matches (vendor, id32). */
> id = msr >> 32;
> for (p = ESTprocs; p->id32 != 0; p++) {
> - if (strcmp(p->vendor, cpu_vendor) == 0 && p->id32 == id)
> + if (p->vendor_id == cpu_vendor_id && p->id32 == id)
> break;
> }
> if (p->id32 == 0)
>
> Modified: stable/7/sys/i386/i386/i686_mem.c
> ===========================================================================
>=== --- stable/7/sys/i386/i386/i686_mem.c Tue Jun 30 15:23:16 2009 (r195196)
> +++ stable/7/sys/i386/i386/i686_mem.c Tue Jun 30 17:10:08 2009 (r195197) @@
> -35,6 +35,7 @@ __FBSDID("$FreeBSD$");
> #include <sys/smp.h>
> #include <sys/sysctl.h>
>
> +#include <machine/cputypes.h>
> #include <machine/md_var.h>
> #include <machine/specialreg.h>
>
> @@ -677,8 +678,8 @@ i686_mem_drvinit(void *unused)
> return;
> if ((cpu_id & 0xf00) != 0x600 && (cpu_id & 0xf00) != 0xf00)
> return;
> - if ((strcmp(cpu_vendor, "GenuineIntel") != 0) &&
> - (strcmp(cpu_vendor, "AuthenticAMD") != 0))
> + if (cpu_vendor_id != CPU_VENDOR_INTEL &&
> + cpu_vendor_id != CPU_VENDOR_AMD)
> return;
> mem_range_softc.mr_op = &i686_mrops;
> }
>
> Modified: stable/7/sys/i386/i386/identcpu.c
> ===========================================================================
>=== --- stable/7/sys/i386/i386/identcpu.c Tue Jun 30 15:23:16 2009 (r195196)
> +++ stable/7/sys/i386/i386/identcpu.c Tue Jun 30 17:10:08 2009 (r195197) @@
> -77,6 +77,7 @@ void panicifcpuunsupported(void);
>
> static void identifycyrix(void);
> static void init_exthigh(void);
> +static u_int find_cpu_vendor_id(void);
> static void print_AMD_info(void);
> static void print_INTEL_info(void);
> static void print_INTEL_TLB(u_int data);
> @@ -138,6 +139,26 @@ static struct {
> { "Pentium 4", CPUCLASS_686 }, /* CPU_P4 */
> };
>
> +static struct {
> + char *vendor;
> + u_int vendor_id;
> +} cpu_vendors[] = {
> + { INTEL_VENDOR_ID, CPU_VENDOR_INTEL }, /* GenuineIntel */
> + { AMD_VENDOR_ID, CPU_VENDOR_AMD }, /* AuthenticAMD */
> + { CENTAUR_VENDOR_ID, CPU_VENDOR_CENTAUR }, /* CentaurHauls */
> + { NSC_VENDOR_ID, CPU_VENDOR_NSC }, /* Geode by NSC */
> + { CYRIX_VENDOR_ID, CPU_VENDOR_CYRIX }, /* CyrixInstead */
> + { TRANSMETA_VENDOR_ID, CPU_VENDOR_TRANSMETA }, /* GenuineTMx86 */
> + { SIS_VENDOR_ID, CPU_VENDOR_SIS }, /* SiS SiS SiS */
> + { UMC_VENDOR_ID, CPU_VENDOR_UMC }, /* UMC UMC UMC */
> + { NEXGEN_VENDOR_ID, CPU_VENDOR_NEXGEN }, /* NexGenDriven */
> + { RISE_VENDOR_ID, CPU_VENDOR_RISE }, /* RiseRiseRise */
> +#if 0
> + /* XXX CPUID 8000_0000h and 8086_0000h, not 0000_0000h */
> + { "TransmetaCPU", CPU_VENDOR_TRANSMETA },
> +#endif
> +};
> +
> #if defined(I586_CPU) && !defined(NO_F00F_HACK)
> int has_f00f_bug = 0; /* Initialized so that it can be patched. */
> #endif
> @@ -150,12 +171,11 @@ init_exthigh(void)
>
> if (done == 0) {
> if (cpu_high > 0 &&
> - (strcmp(cpu_vendor, "GenuineIntel") == 0 ||
> - strcmp(cpu_vendor, "AuthenticAMD") == 0 ||
> - strcmp(cpu_vendor, "GenuineTMx86") == 0 ||
> - strcmp(cpu_vendor, "TransmetaCPU") == 0 ||
> - strcmp(cpu_vendor, "CentaurHauls") == 0 ||
> - strcmp(cpu_vendor, "Geode by NSC") == 0)) {
> + (cpu_vendor_id == CPU_VENDOR_INTEL ||
> + cpu_vendor_id == CPU_VENDOR_AMD ||
> + cpu_vendor_id == CPU_VENDOR_TRANSMETA ||
> + cpu_vendor_id == CPU_VENDOR_CENTAUR ||
> + cpu_vendor_id == CPU_VENDOR_NSC)) {
> do_cpuid(0x80000000, regs);
> if (regs[0] >= 0x80000000)
> cpu_exthigh = regs[0];
> @@ -186,7 +206,7 @@ printcpuinfo(void)
> }
> }
>
> - if (strcmp(cpu_vendor, "GenuineIntel") == 0) {
> + if (cpu_vendor_id == CPU_VENDOR_INTEL) {
> if ((cpu_id & 0xf00) > 0x300) {
> u_int brand_index;
> u_int model;
> @@ -330,7 +350,7 @@ printcpuinfo(void)
> cpu_brandtable[brand_index]);
> }
> }
> - } else if (strcmp(cpu_vendor, "AuthenticAMD") == 0) {
> + } else if (cpu_vendor_id == CPU_VENDOR_AMD) {
> /*
> * Values taken from AMD Processor Recognition
> * http://www.amd.com/K6/k6docs/pdf/20734g.pdf
> @@ -410,7 +430,7 @@ printcpuinfo(void)
> enable_K6_wt_alloc();
> }
> #endif
> - } else if (strcmp(cpu_vendor, "CyrixInstead") == 0) {
> + } else if (cpu_vendor_id == CPU_VENDOR_CYRIX) {
> strcpy(cpu_model, "Cyrix ");
> switch (cpu_id & 0xff0) {
> case 0x440:
> @@ -546,7 +566,7 @@ printcpuinfo(void)
> }
> break;
> }
> - } else if (strcmp(cpu_vendor, "RiseRiseRise") == 0) {
> + } else if (cpu_vendor_id == CPU_VENDOR_RISE) {
> strcpy(cpu_model, "Rise ");
> switch (cpu_id & 0xff0) {
> case 0x500:
> @@ -555,7 +575,7 @@ printcpuinfo(void)
> default:
> strcat(cpu_model, "Unknown");
> }
> - } else if (strcmp(cpu_vendor, "CentaurHauls") == 0) {
> + } else if (cpu_vendor_id == CPU_VENDOR_CENTAUR) {
> switch (cpu_id & 0xff0) {
> case 0x540:
> strcpy(cpu_model, "IDT WinChip C6");
> @@ -586,9 +606,9 @@ printcpuinfo(void)
> default:
> strcpy(cpu_model, "VIA/IDT Unknown");
> }
> - } else if (strcmp(cpu_vendor, "IBM") == 0) {
> + } else if (cpu_vendor_id == CPU_VENDOR_IBM) {
> strcpy(cpu_model, "Blue Lightning CPU");
> - } else if (strcmp(cpu_vendor, "Geode by NSC") == 0) {
> + } else if (cpu_vendor_id == CPU_VENDOR_NSC) {
> switch (cpu_id & 0xfff) {
> case 0x540:
> strcpy(cpu_model, "Geode SC1100");
> @@ -652,17 +672,16 @@ printcpuinfo(void)
> if(cpu_id)
> printf(" Id = 0x%x", cpu_id);
>
> - if (strcmp(cpu_vendor, "GenuineIntel") == 0 ||
> - strcmp(cpu_vendor, "AuthenticAMD") == 0 ||
> - strcmp(cpu_vendor, "GenuineTMx86") == 0 ||
> - strcmp(cpu_vendor, "TransmetaCPU") == 0 ||
> - strcmp(cpu_vendor, "RiseRiseRise") == 0 ||
> - strcmp(cpu_vendor, "CentaurHauls") == 0 ||
> - strcmp(cpu_vendor, "Geode by NSC") == 0 ||
> - ((strcmp(cpu_vendor, "CyrixInstead") == 0) &&
> + if (cpu_vendor_id == CPU_VENDOR_INTEL ||
> + cpu_vendor_id == CPU_VENDOR_AMD ||
> + cpu_vendor_id == CPU_VENDOR_TRANSMETA ||
> + cpu_vendor_id == CPU_VENDOR_RISE ||
> + cpu_vendor_id == CPU_VENDOR_CENTAUR ||
> + cpu_vendor_id == CPU_VENDOR_NSC ||
> + (cpu_vendor_id == CPU_VENDOR_CYRIX &&
> ((cpu_id & 0xf00) > 0x500))) {
> printf(" Stepping = %u", cpu_id & 0xf);
> - if (strcmp(cpu_vendor, "CyrixInstead") == 0)
> + if (cpu_vendor_id == CPU_VENDOR_CYRIX)
> printf(" DIR=0x%04x", cyrix_did);
> if (cpu_high > 0) {
> u_int cmp = 1, htt = 1;
> @@ -834,22 +853,28 @@ printcpuinfo(void)
> );
> }
>
> - if (cpu_feature & CPUID_HTT && strcmp(cpu_vendor,
> - "AuthenticAMD") == 0)
> + if ((cpu_feature & CPUID_HTT) &&
> + cpu_vendor_id == CPU_VENDOR_AMD)
> cpu_feature &= ~CPUID_HTT;
>
> /*
> * If this CPU supports P-state invariant TSC then
> * mention the capability.
> */
> - if (!tsc_is_invariant &&
> - (strcmp(cpu_vendor, "AuthenticAMD") == 0 &&
> - ((amd_pminfo & AMDPM_TSC_INVARIANT) != 0 ||
> - I386_CPU_FAMILY(cpu_id) >= 0x10 ||
> - cpu_id == 0x60fb2))) {
> - tsc_is_invariant = 1;
> - printf("\n TSC: P-state invariant");
> + switch (cpu_vendor_id) {
> + case CPU_VENDOR_AMD:
> + if ((amd_pminfo & AMDPM_TSC_INVARIANT) ||
> + I386_CPU_FAMILY(cpu_id) >= 0x10 ||
> + cpu_id == 0x60fb2)
> + tsc_is_invariant = 1;
> + break;
> + case CPU_VENDOR_INTEL:
> + if (amd_pminfo & AMDPM_TSC_INVARIANT)
> + tsc_is_invariant = 1;
> + break;
> }
> + if (tsc_is_invariant)
> + printf("\n TSC: P-state invariant");
>
> /*
> * If this CPU supports HTT or CMP then mention the
> @@ -857,10 +882,10 @@ printcpuinfo(void)
> */
> if (cpu_feature & CPUID_HTT)
> htt = (cpu_procinfo & CPUID_HTT_CORES) >> 16;
> - if (strcmp(cpu_vendor, "AuthenticAMD") == 0 &&
> + if (cpu_vendor_id == CPU_VENDOR_AMD &&
> (amd_feature2 & AMDID2_CMP))
> cmp = (cpu_procinfo2 & AMDID_CMP_CORES) + 1;
> - else if (strcmp(cpu_vendor, "GenuineIntel") == 0 &&
> + else if (cpu_vendor_id == CPU_VENDOR_INTEL &&
> (cpu_high >= 4)) {
> cpuid_count(4, 0, regs);
> if ((regs[0] & 0x1f) != 0)
> @@ -872,7 +897,7 @@ printcpuinfo(void)
> printf("\n Logical CPUs per core: %d",
> htt / cmp);
> }
> - } else if (strcmp(cpu_vendor, "CyrixInstead") == 0) {
> + } else if (cpu_vendor_id == CPU_VENDOR_CYRIX) {
> printf(" DIR=0x%04x", cyrix_did);
> printf(" Stepping=%u", (cyrix_did & 0xf000) >> 12);
> printf(" Revision=%u", (cyrix_did & 0x0f00) >> 8);
> @@ -881,7 +906,7 @@ printcpuinfo(void)
> printf("\n CPU cache: write-through mode");
> #endif
> }
> - if (strcmp(cpu_vendor, "CentaurHauls") == 0)
> + if (cpu_vendor_id == CPU_VENDOR_CENTAUR)
> print_via_padlock_info();
>
> /* Avoid ugly blank lines: only print newline when we have to. */
> @@ -891,12 +916,11 @@ printcpuinfo(void)
> if (!bootverbose)
> return;
>
> - if (strcmp(cpu_vendor, "AuthenticAMD") == 0)
> + if (cpu_vendor_id == CPU_VENDOR_AMD)
> print_AMD_info();
> - else if (strcmp(cpu_vendor, "GenuineIntel") == 0)
> + else if (cpu_vendor_id == CPU_VENDOR_INTEL)
> print_INTEL_info();
> - else if (strcmp(cpu_vendor, "GenuineTMx86") == 0 ||
> - strcmp(cpu_vendor, "TransmetaCPU") == 0)
> + else if (cpu_vendor_id == CPU_VENDOR_TRANSMETA)
> print_transmeta_info();
> }
>
> @@ -1091,9 +1115,11 @@ finishidentcpu(void)
> u_char ccr3;
> u_int regs[4];
>
> + cpu_vendor_id = find_cpu_vendor_id();
> +
> /* Detect AMD features (PTE no-execute bit, 3dnow, 64 bit mode etc) */
> - if (strcmp(cpu_vendor, "GenuineIntel") == 0 ||
> - strcmp(cpu_vendor, "AuthenticAMD") == 0) {
> + if (cpu_vendor_id == CPU_VENDOR_INTEL ||
> + cpu_vendor_id == CPU_VENDOR_AMD) {
> init_exthigh();
> if (cpu_exthigh >= 0x80000001) {
> do_cpuid(0x80000001, regs);
> @@ -1108,7 +1134,7 @@ finishidentcpu(void)
> do_cpuid(0x80000008, regs);
> cpu_procinfo2 = regs[2];
> }
> - } else if (strcmp(cpu_vendor, "CyrixInstead") == 0) {
> + } else if (cpu_vendor_id == CPU_VENDOR_CYRIX) {
> if (cpu == CPU_486) {
> /*
> * These conditions are equivalent to:
> @@ -1118,6 +1144,7 @@ finishidentcpu(void)
> isblue = identblue();
> if (isblue == IDENTBLUE_IBMCPU) {
> strcpy(cpu_vendor, "IBM");
> + cpu_vendor_id = CPU_VENDOR_IBM;
> cpu = CPU_BLUE;
> return;
> }
> @@ -1191,12 +1218,24 @@ finishidentcpu(void)
> isblue = identblue();
> if (isblue == IDENTBLUE_IBMCPU) {
> strcpy(cpu_vendor, "IBM");
> + cpu_vendor_id = CPU_VENDOR_IBM;
> cpu = CPU_BLUE;
> return;
> }
> }
> }
>
> +static u_int
> +find_cpu_vendor_id(void)
> +{
> + int i;
> +
> + for (i = 0; i < sizeof(cpu_vendors) / sizeof(cpu_vendors[0]); i++)
> + if (strcmp(cpu_vendor, cpu_vendors[i].vendor) == 0)
> + return (cpu_vendors[i].vendor_id);
> + return (0);
> +}
> +
> static void
> print_AMD_assoc(int i)
> {
>
> Modified: stable/7/sys/i386/i386/initcpu.c
> ===========================================================================
>=== --- stable/7/sys/i386/i386/initcpu.c Tue Jun 30 15:23:16 2009 (r195196)
> +++ stable/7/sys/i386/i386/initcpu.c Tue Jun 30 17:10:08 2009 (r195197) @@
> -90,6 +90,7 @@ u_int cpu_id = 0; /* Stepping ID */
> u_int cpu_procinfo = 0; /* HyperThreading Info / Brand Index / CLFUSH */
> u_int cpu_procinfo2 = 0; /* Multicore info */
> char cpu_vendor[20] = ""; /* CPU Origin code */
> +u_int cpu_vendor_id = 0; /* CPU vendor ID */
>
> SYSCTL_UINT(_hw, OID_AUTO, via_feature_rng, CTLFLAG_RD,
> &via_feature_rng, 0, "VIA C3/C7 RNG feature available in CPU");
>
> Modified: stable/7/sys/i386/i386/k6_mem.c
> ===========================================================================
>=== --- stable/7/sys/i386/i386/k6_mem.c Tue Jun 30 15:23:16 2009 (r195196)
> +++ stable/7/sys/i386/i386/k6_mem.c Tue Jun 30 17:10:08 2009 (r195197) @@
> -33,6 +33,7 @@ __FBSDID("$FreeBSD$");
> #include <sys/malloc.h>
> #include <sys/memrange.h>
>
> +#include <machine/cputypes.h>
> #include <machine/md_var.h>
> #include <machine/specialreg.h>
>
> @@ -175,7 +176,7 @@ static void
> k6_mem_drvinit(void *unused)
> {
>
> - if (strcmp(cpu_vendor, "AuthenticAMD") != 0)
> + if (cpu_vendor_id != CPU_VENDOR_AMD)
> return;
> if ((cpu_id & 0xf00) != 0x500)
> return;
>
> Modified: stable/7/sys/i386/i386/local_apic.c
> ===========================================================================
>=== --- stable/7/sys/i386/i386/local_apic.c Tue Jun 30 15:23:16
> 2009 (r195196) +++ stable/7/sys/i386/i386/local_apic.c Tue Jun 30 17:10:08
> 2009 (r195197) @@ -325,7 +325,7 @@ lapic_setup(int boot)
>
> /* XXX: Error and thermal LVTs */
>
> - if (strcmp(cpu_vendor, "AuthenticAMD") == 0) {
> + if (cpu_vendor_id == CPU_VENDOR_AMD) {
> /*
> * Detect the presence of C1E capability mostly on latest
> * dual-cores (or future) k8 family. This feature renders
> @@ -1073,7 +1073,7 @@ apic_init(void *dummy __unused)
> * CPUs during early startup. We need to turn the local APIC back
> * on on such CPUs now.
> */
> - if (cpu == CPU_686 && strcmp(cpu_vendor, "GenuineIntel") == 0 &&
> + if (cpu == CPU_686 && cpu_vendor_id == CPU_VENDOR_INTEL &&
> (cpu_id & 0xff0) == 0x610) {
> apic_base = rdmsr(MSR_APICBASE);
> apic_base |= APICBASE_ENABLED;
>
> Modified: stable/7/sys/i386/i386/longrun.c
> ===========================================================================
>=== --- stable/7/sys/i386/i386/longrun.c Tue Jun 30 15:23:16 2009 (r195196)
> +++ stable/7/sys/i386/i386/longrun.c Tue Jun 30 17:10:08 2009 (r195197) @@
> -46,6 +46,7 @@ __FBSDID("$FreeBSD$");
> #include <sys/sysctl.h>
> #include <sys/types.h>
>
> +#include <machine/cputypes.h>
> #include <machine/md_var.h>
> #include <machine/specialreg.h>
>
> @@ -262,8 +263,8 @@ tmx86_longrun_profile_sysctl(SYSCTL_HAND
> static void
> setup_tmx86_longrun(void *dummy __unused)
> {
> - if (strcmp(cpu_vendor, "GenuineTMx86") != 0 &&
> - strcmp(cpu_vendor, "TransmetaCPU") != 0)
> +
> + if (cpu_vendor_id != CPU_VENDOR_TRANSMETA)
> return;
>
> crusoe_longrun = tmx86_get_longrun_mode();
>
> Modified: stable/7/sys/i386/i386/mp_machdep.c
> ===========================================================================
>=== --- stable/7/sys/i386/i386/mp_machdep.c Tue Jun 30 15:23:16
> 2009 (r195196) +++ stable/7/sys/i386/i386/mp_machdep.c Tue Jun 30 17:10:08
> 2009 (r195197) @@ -72,6 +72,7 @@ __FBSDID("$FreeBSD$");
> #include <vm/vm_extern.h>
>
> #include <machine/apicreg.h>
> +#include <machine/cputypes.h>
> #include <machine/md_var.h>
> #include <machine/mp_watchdog.h>
> #include <machine/pcb.h>
> @@ -425,8 +426,7 @@ cpu_mp_start(void)
> * First determine if this is an Intel processor which claims
> * to have hyperthreading support.
> */
> - if ((cpu_feature & CPUID_HTT) &&
> - (strcmp(cpu_vendor, "GenuineIntel") == 0)) {
> + if ((cpu_feature & CPUID_HTT) && cpu_vendor_id == CPU_VENDOR_INTEL) {
> /*
> * If the "deterministic cache parameters" cpuid calls
> * are available, use them.
>
> Modified: stable/7/sys/i386/i386/msi.c
> ===========================================================================
>=== --- stable/7/sys/i386/i386/msi.c Tue Jun 30 15:23:16 2009 (r195196) +++
> stable/7/sys/i386/i386/msi.c Tue Jun 30 17:10:08 2009 (r195197) @@ -46,6
> +46,7 @@ __FBSDID("$FreeBSD$");
> #include <sys/sx.h>
> #include <sys/systm.h>
> #include <machine/apicreg.h>
> +#include <machine/cputypes.h>
> #include <machine/md_var.h>
> #include <machine/frame.h>
> #include <machine/intr_machdep.h>
> @@ -211,8 +212,8 @@ msi_init(void)
> {
>
> /* Check if we have a supported CPU. */
> - if (!(strcmp(cpu_vendor, "GenuineIntel") == 0 ||
> - strcmp(cpu_vendor, "AuthenticAMD") == 0))
> + if (!(cpu_vendor_id == CPU_VENDOR_INTEL ||
> + cpu_vendor_id == CPU_VENDOR_AMD))
> return;
>
> msi_enabled = 1;
>
> Modified: stable/7/sys/i386/include/cputypes.h
> ===========================================================================
>=== --- stable/7/sys/i386/include/cputypes.h Tue Jun 30 15:23:16
> 2009 (r195196) +++ stable/7/sys/i386/include/cputypes.h Tue Jun 30 17:10:08
> 2009 (r195197) @@ -33,33 +33,49 @@
> /*
> * Classes of processor.
> */
> -#define CPUCLASS_286 0
> -#define CPUCLASS_386 1
> -#define CPUCLASS_486 2
> -#define CPUCLASS_586 3
> -#define CPUCLASS_686 4
> +#define CPUCLASS_286 0
> +#define CPUCLASS_386 1
> +#define CPUCLASS_486 2
> +#define CPUCLASS_586 3
> +#define CPUCLASS_686 4
>
> /*
> * Kinds of processor.
> */
> -#define CPU_286 0 /* Intel 80286 */
> -#define CPU_386SX 1 /* Intel 80386SX */
> -#define CPU_386 2 /* Intel 80386DX */
> -#define CPU_486SX 3 /* Intel 80486SX */
> -#define CPU_486 4 /* Intel 80486DX */
> -#define CPU_586 5 /* Intel P.....m (I hate lawyers; it's TM) */
> -#define CPU_486DLC 6 /* Cyrix 486DLC */
> -#define CPU_686 7 /* Pentium Pro */
> -#define CPU_M1SC 8 /* Cyrix M1sc (aka 5x86) */
> -#define CPU_M1 9 /* Cyrix M1 (aka 6x86) */
> -#define CPU_BLUE 10 /* IBM BlueLighting CPU */
> -#define CPU_M2 11 /* Cyrix M2 (aka enhanced 6x86 with MMX */
> -#define CPU_NX586 12 /* NexGen (now AMD) 586 */
> -#define CPU_CY486DX 13 /* Cyrix 486S/DX/DX2/DX4 */
> -#define CPU_PII 14 /* Intel Pentium II */
> -#define CPU_PIII 15 /* Intel Pentium III */
> -#define CPU_P4 16 /* Intel Pentium 4 */
> -#define CPU_GEODE1100 17 /* NS Geode SC1100 */
> +#define CPU_286 0 /* Intel 80286 */
> +#define CPU_386SX 1 /* Intel 80386SX */
> +#define CPU_386 2 /* Intel 80386DX */
> +#define CPU_486SX 3 /* Intel 80486SX */
> +#define CPU_486 4 /* Intel 80486DX */
> +#define CPU_586 5 /* Intel Pentium */
> +#define CPU_486DLC 6 /* Cyrix 486DLC */
> +#define CPU_686 7 /* Pentium Pro */
> +#define CPU_M1SC 8 /* Cyrix M1sc (aka 5x86) */
> +#define CPU_M1 9 /* Cyrix M1 (aka 6x86) */
> +#define CPU_BLUE 10 /* IBM BlueLighting CPU */
> +#define CPU_M2 11 /* Cyrix M2 (enhanced 6x86 with MMX) */
> +#define CPU_NX586 12 /* NexGen (now AMD) 586 */
> +#define CPU_CY486DX 13 /* Cyrix 486S/DX/DX2/DX4 */
> +#define CPU_PII 14 /* Intel Pentium II */
> +#define CPU_PIII 15 /* Intel Pentium III */
> +#define CPU_P4 16 /* Intel Pentium 4 */
> +#define CPU_GEODE1100 17 /* NS Geode SC1100 */
> +
> +/*
> + * Vendors of processor.
> + */
> +#define CPU_VENDOR_NSC 0x100b /* NSC */
> +#define CPU_VENDOR_IBM 0x1014 /* IBM */
> +#define CPU_VENDOR_AMD 0x1022 /* AMD */
> +#define CPU_VENDOR_SIS 0x1039 /* SiS */
> +#define CPU_VENDOR_UMC 0x1060 /* UMC */
> +#define CPU_VENDOR_NEXGEN 0x1074 /* Nexgen */
> +#define CPU_VENDOR_CYRIX 0x1078 /* Cyrix */
> +#define CPU_VENDOR_IDT 0x111d /* Centaur/IDT/VIA */
> +#define CPU_VENDOR_TRANSMETA 0x1279 /* Transmeta */
> +#define CPU_VENDOR_INTEL 0x8086 /* Intel */
> +#define CPU_VENDOR_RISE 0xdead2bad /* Rise */
> +#define CPU_VENDOR_CENTAUR CPU_VENDOR_IDT
>
> #ifndef LOCORE
> extern int cpu;
>
> Modified: stable/7/sys/i386/include/md_var.h
> ===========================================================================
>=== --- stable/7/sys/i386/include/md_var.h Tue Jun 30 15:23:16
> 2009 (r195196) +++ stable/7/sys/i386/include/md_var.h Tue Jun 30 17:10:08
> 2009 (r195197) @@ -59,6 +59,7 @@ extern u_int cpu_mxcsr_mask;
> extern u_int cpu_procinfo;
> extern u_int cpu_procinfo2;
> extern char cpu_vendor[];
> +extern u_int cpu_vendor_id;
> extern u_int cyrix_did;
> extern char kstack[];
> extern char sigcode[];
>
> Modified: stable/7/sys/i386/include/specialreg.h
> ===========================================================================
>=== --- stable/7/sys/i386/include/specialreg.h Tue Jun 30 15:23:16
> 2009 (r195196) +++ stable/7/sys/i386/include/specialreg.h Tue Jun 30
> 17:10:08 2009 (r195197) @@ -203,8 +203,16 @@
> /*
> * CPUID manufacturers identifiers
> */
> -#define INTEL_VENDOR_ID "GenuineIntel"
> -#define AMD_VENDOR_ID "AuthenticAMD"
> +#define AMD_VENDOR_ID "AuthenticAMD"
> +#define CENTAUR_VENDOR_ID "CentaurHauls"
> +#define CYRIX_VENDOR_ID "CyrixInstead"
> +#define INTEL_VENDOR_ID "GenuineIntel"
> +#define NEXGEN_VENDOR_ID "NexGenDriven"
> +#define NSC_VENDOR_ID "Geode by NSC"
> +#define RISE_VENDOR_ID "RiseRiseRise"
> +#define SIS_VENDOR_ID "SiS SiS SiS "
> +#define TRANSMETA_VENDOR_ID "GenuineTMx86"
> +#define UMC_VENDOR_ID "UMC UMC UMC "
>
> /*
> * Model-specific registers for the i386 family
buildkernel fails for me with latest stable:
===> coretemp (all)
cc -O2 -fno-strict-aliasing -pipe -march=prescott -D_KERNEL -DKLD_MODULE -
std=c99 -nostdinc -DHAVE_KERNEL_OPTION_HEADERS -include
/usr/obj/usr/src/sys/LQC/opt_global.h -I. -I@ -I@/contrib/altq -finline-
limit=8000 --param inline-unit-growth=100 --param large-function-growth=1000 -
fno-common -g -I/usr/obj/usr/src/sys/LQC -mno-align-long-strings -mpreferred-
stack-boundary=2 -mno-mmx -mno-3dnow -mno-sse -mno-sse2 -mno-sse3 -
ffreestanding -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -
Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -Wundef -Wno-
pointer-sign -fformat-extensions -c
/usr/src/sys/modules/coretemp/../../dev/coretemp/coretemp.c
/usr/src/sys/modules/coretemp/../../dev/coretemp/coretemp.c: In function
'coretemp_identify':
/usr/src/sys/modules/coretemp/../../dev/coretemp/coretemp.c:98: error:
'cpu_vendor_id' undeclared (first use in this function)
/usr/src/sys/modules/coretemp/../../dev/coretemp/coretemp.c:98: error: (Each
undeclared identifier is reported only once
/usr/src/sys/modules/coretemp/../../dev/coretemp/coretemp.c:98: error: for
each function it appears in.)
/usr/src/sys/modules/coretemp/../../dev/coretemp/coretemp.c:98: error:
'CPU_VENDOR_INTEL' undeclared (first use in this function)
*** Error code 1
Stop in /usr/src/sys/modules/coretemp.
*** Error code 1
Stop in /usr/src/sys/modules.
*** Error code 1
Stop in /usr/obj/usr/src/sys/LQC.
*** Error code 1
Stop in /usr/src.
*** Error code 1
Stop in /usr/src.
More information about the svn-src-stable-7
mailing list