diff options
| -rw-r--r-- | arch/x86/kernel/cpu/Makefile | 1 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/feature_names.c | 83 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/proc.c | 74 | ||||
| -rw-r--r-- | arch/x86/kernel/setup_64.c | 76 | ||||
| -rw-r--r-- | include/asm-x86/cpufeature.h | 12 | 
5 files changed, 93 insertions, 153 deletions
diff --git a/arch/x86/kernel/cpu/Makefile b/arch/x86/kernel/cpu/Makefile index cfdb2f3bd76..a0c4d7c5dbd 100644 --- a/arch/x86/kernel/cpu/Makefile +++ b/arch/x86/kernel/cpu/Makefile @@ -3,6 +3,7 @@  #  obj-y			:= intel_cacheinfo.o addon_cpuid_features.o +obj-y			+= feature_names.o  obj-$(CONFIG_X86_32)	+= common.o proc.o bugs.o  obj-$(CONFIG_X86_32)	+= amd.o diff --git a/arch/x86/kernel/cpu/feature_names.c b/arch/x86/kernel/cpu/feature_names.c new file mode 100644 index 00000000000..ee975ac6bbc --- /dev/null +++ b/arch/x86/kernel/cpu/feature_names.c @@ -0,0 +1,83 @@ +/* + * Strings for the various x86 capability flags. + * + * This file must not contain any executable code. + */ + +#include "asm/cpufeature.h" + +/* + * These flag bits must match the definitions in <asm/cpufeature.h>. + * NULL means this bit is undefined or reserved; either way it doesn't + * have meaning as far as Linux is concerned.  Note that it's important + * to realize there is a difference between this table and CPUID -- if + * applications want to get the raw CPUID data, they should access + * /dev/cpu/<cpu_nr>/cpuid instead. + */ +const char * const x86_cap_flags[NCAPINTS*32] = { +	/* Intel-defined */ +	"fpu", "vme", "de", "pse", "tsc", "msr", "pae", "mce", +	"cx8", "apic", NULL, "sep", "mtrr", "pge", "mca", "cmov", +	"pat", "pse36", "pn", "clflush", NULL, "dts", "acpi", "mmx", +	"fxsr", "sse", "sse2", "ss", "ht", "tm", "ia64", "pbe", + +	/* AMD-defined */ +	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, +	NULL, NULL, NULL, "syscall", NULL, NULL, NULL, NULL, +	NULL, NULL, NULL, "mp", "nx", NULL, "mmxext", NULL, +	NULL, "fxsr_opt", "pdpe1gb", "rdtscp", NULL, "lm", +	"3dnowext", "3dnow", + +	/* Transmeta-defined */ +	"recovery", "longrun", NULL, "lrti", NULL, NULL, NULL, NULL, +	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, +	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, +	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + +	/* Other (Linux-defined) */ +	"cxmmx", "k6_mtrr", "cyrix_arr", "centaur_mcr", +	NULL, NULL, NULL, NULL, +	"constant_tsc", "up", NULL, "arch_perfmon", +	"pebs", "bts", NULL, NULL, +	"rep_good", NULL, NULL, NULL, NULL, NULL, NULL, NULL, +	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + +	/* Intel-defined (#2) */ +	"pni", NULL, NULL, "monitor", "ds_cpl", "vmx", "smx", "est", +	"tm2", "ssse3", "cid", NULL, NULL, "cx16", "xtpr", NULL, +	NULL, NULL, "dca", "sse4_1", "sse4_2", NULL, NULL, "popcnt", +	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + +	/* VIA/Cyrix/Centaur-defined */ +	NULL, NULL, "rng", "rng_en", NULL, NULL, "ace", "ace_en", +	"ace2", "ace2_en", "phe", "phe_en", "pmm", "pmm_en", NULL, NULL, +	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, +	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + +	/* AMD-defined (#2) */ +	"lahf_lm", "cmp_legacy", "svm", "extapic", +	"cr8_legacy", "abm", "sse4a", "misalignsse", +	"3dnowprefetch", "osvw", "ibs", "sse5", +	"skinit", "wdt", NULL, NULL, +	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, +	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + +	/* Auxiliary (Linux-defined) */ +	"ida", NULL, NULL, NULL, NULL, NULL, NULL, NULL, +	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, +	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, +	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, +}; + +const char *const x86_power_flags[32] = { +	"ts",	/* temperature sensor */ +	"fid",  /* frequency id control */ +	"vid",  /* voltage id control */ +	"ttp",  /* thermal trip */ +	"tm", +	"stc", +	"100mhzsteps", +	"hwpstate", +	"",	/* tsc invariant mapped to constant_tsc */ +		/* nothing */ +}; diff --git a/arch/x86/kernel/cpu/proc.c b/arch/x86/kernel/cpu/proc.c index 02821326014..af11d31dce0 100644 --- a/arch/x86/kernel/cpu/proc.c +++ b/arch/x86/kernel/cpu/proc.c @@ -10,80 +10,6 @@   */  static int show_cpuinfo(struct seq_file *m, void *v)  { -	/*  -	 * These flag bits must match the definitions in <asm/cpufeature.h>. -	 * NULL means this bit is undefined or reserved; either way it doesn't -	 * have meaning as far as Linux is concerned.  Note that it's important -	 * to realize there is a difference between this table and CPUID -- if -	 * applications want to get the raw CPUID data, they should access -	 * /dev/cpu/<cpu_nr>/cpuid instead. -	 */ -	static const char * const x86_cap_flags[] = { -		/* Intel-defined */ -	        "fpu", "vme", "de", "pse", "tsc", "msr", "pae", "mce", -	        "cx8", "apic", NULL, "sep", "mtrr", "pge", "mca", "cmov", -	        "pat", "pse36", "pn", "clflush", NULL, "dts", "acpi", "mmx", -	        "fxsr", "sse", "sse2", "ss", "ht", "tm", "ia64", "pbe", - -		/* AMD-defined */ -		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -		NULL, NULL, NULL, "syscall", NULL, NULL, NULL, NULL, -		NULL, NULL, NULL, "mp", "nx", NULL, "mmxext", NULL, -		NULL, "fxsr_opt", "pdpe1gb", "rdtscp", NULL, "lm", -		"3dnowext", "3dnow", - -		/* Transmeta-defined */ -		"recovery", "longrun", NULL, "lrti", NULL, NULL, NULL, NULL, -		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - -		/* Other (Linux-defined) */ -		"cxmmx", "k6_mtrr", "cyrix_arr", "centaur_mcr", -		NULL, NULL, NULL, NULL, -		"constant_tsc", "up", NULL, "arch_perfmon", -		"pebs", "bts", NULL, "sync_rdtsc", -		"rep_good", NULL, NULL, NULL, NULL, NULL, NULL, NULL, -		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - -		/* Intel-defined (#2) */ -		"pni", NULL, NULL, "monitor", "ds_cpl", "vmx", "smx", "est", -		"tm2", "ssse3", "cid", NULL, NULL, "cx16", "xtpr", NULL, -		NULL, NULL, "dca", "sse4_1", "sse4_2", NULL, NULL, "popcnt", -		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - -		/* VIA/Cyrix/Centaur-defined */ -		NULL, NULL, "rng", "rng_en", NULL, NULL, "ace", "ace_en", -		"ace2", "ace2_en", "phe", "phe_en", "pmm", "pmm_en", NULL, NULL, -		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - -		/* AMD-defined (#2) */ -		"lahf_lm", "cmp_legacy", "svm", "extapic", -		"cr8_legacy", "abm", "sse4a", "misalignsse", -		"3dnowprefetch", "osvw", "ibs", "sse5", -		"skinit", "wdt", NULL, NULL, -		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - -		/* Auxiliary (Linux-defined) */ -		"ida", NULL, NULL, NULL, NULL, NULL, NULL, NULL, -		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -	}; -	static const char * const x86_power_flags[] = { -		"ts",	/* temperature sensor */ -		"fid",  /* frequency id control */ -		"vid",  /* voltage id control */ -		"ttp",  /* thermal trip */ -		"tm", -		"stc", -		"100mhzsteps", -		"hwpstate", -		"",	/* constant_tsc - moved to flags */ -		/* nothing */ -	};  	struct cpuinfo_x86 *c = v;  	int i, n = 0;  	int fpu_exception; diff --git a/arch/x86/kernel/setup_64.c b/arch/x86/kernel/setup_64.c index 18df70c534b..c8939dfddfb 100644 --- a/arch/x86/kernel/setup_64.c +++ b/arch/x86/kernel/setup_64.c @@ -1068,82 +1068,6 @@ static int show_cpuinfo(struct seq_file *m, void *v)  	struct cpuinfo_x86 *c = v;  	int cpu = 0, i; -	/* -	 * These flag bits must match the definitions in <asm/cpufeature.h>. -	 * NULL means this bit is undefined or reserved; either way it doesn't -	 * have meaning as far as Linux is concerned.  Note that it's important -	 * to realize there is a difference between this table and CPUID -- if -	 * applications want to get the raw CPUID data, they should access -	 * /dev/cpu/<cpu_nr>/cpuid instead. -	 */ -	static const char *const x86_cap_flags[] = { -		/* Intel-defined */ -		"fpu", "vme", "de", "pse", "tsc", "msr", "pae", "mce", -		"cx8", "apic", NULL, "sep", "mtrr", "pge", "mca", "cmov", -		"pat", "pse36", "pn", "clflush", NULL, "dts", "acpi", "mmx", -		"fxsr", "sse", "sse2", "ss", "ht", "tm", "ia64", "pbe", - -		/* AMD-defined */ -		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -		NULL, NULL, NULL, "syscall", NULL, NULL, NULL, NULL, -		NULL, NULL, NULL, NULL, "nx", NULL, "mmxext", NULL, -		NULL, "fxsr_opt", "pdpe1gb", "rdtscp", NULL, "lm", -		"3dnowext", "3dnow", - -		/* Transmeta-defined */ -		"recovery", "longrun", NULL, "lrti", NULL, NULL, NULL, NULL, -		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - -		/* Other (Linux-defined) */ -		"cxmmx", "k6_mtrr", "cyrix_arr", "centaur_mcr", -		NULL, NULL, NULL, NULL, -		"constant_tsc", "up", NULL, "arch_perfmon", -		"pebs", "bts", NULL, "sync_rdtsc", -		"rep_good", NULL, NULL, NULL, NULL, NULL, NULL, NULL, -		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - -		/* Intel-defined (#2) */ -		"pni", NULL, NULL, "monitor", "ds_cpl", "vmx", "smx", "est", -		"tm2", "ssse3", "cid", NULL, NULL, "cx16", "xtpr", NULL, -		NULL, NULL, "dca", "sse4_1", "sse4_2", NULL, NULL, "popcnt", -		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - -		/* VIA/Cyrix/Centaur-defined */ -		NULL, NULL, "rng", "rng_en", NULL, NULL, "ace", "ace_en", -		"ace2", "ace2_en", "phe", "phe_en", "pmm", "pmm_en", NULL, NULL, -		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - -		/* AMD-defined (#2) */ -		"lahf_lm", "cmp_legacy", "svm", "extapic", -		"cr8_legacy", "abm", "sse4a", "misalignsse", -		"3dnowprefetch", "osvw", "ibs", "sse5", -		"skinit", "wdt", NULL, NULL, -		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - -		/* Auxiliary (Linux-defined) */ -		"ida", NULL, NULL, NULL, NULL, NULL, NULL, NULL, -		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -	}; -	static const char *const x86_power_flags[] = { -		"ts",	/* temperature sensor */ -		"fid",  /* frequency id control */ -		"vid",  /* voltage id control */ -		"ttp",  /* thermal trip */ -		"tm", -		"stc", -		"100mhzsteps", -		"hwpstate", -		"",	/* tsc invariant mapped to constant_tsc */ -		/* nothing */ -	}; - -  #ifdef CONFIG_SMP  	cpu = c->cpu_index;  #endif diff --git a/include/asm-x86/cpufeature.h b/include/asm-x86/cpufeature.h index 3fb7dfa7fc9..3adc9cf0f39 100644 --- a/include/asm-x86/cpufeature.h +++ b/include/asm-x86/cpufeature.h @@ -4,9 +4,6 @@  #ifndef _ASM_X86_CPUFEATURE_H  #define _ASM_X86_CPUFEATURE_H -#ifndef __ASSEMBLY__ -#include <linux/bitops.h> -#endif  #include <asm/required-features.h>  #define NCAPINTS	8	/* N 32-bit words worth of info */ @@ -115,6 +112,13 @@   */  #define X86_FEATURE_IDA		(7*32+ 0) /* Intel Dynamic Acceleration */ +#if defined(__KERNEL__) && !defined(__ASSEMBLY__) + +#include <linux/bitops.h> + +extern const char * const x86_cap_flags[NCAPINTS*32]; +extern const char * const x86_power_flags[32]; +  #define cpu_has(c, bit)							\  	(__builtin_constant_p(bit) &&					\  	 ( (((bit)>>5)==0 && (1UL<<((bit)&31) & REQUIRED_MASK0)) ||	\ @@ -204,4 +208,6 @@  #endif /* CONFIG_X86_64 */ +#endif /* defined(__KERNEL__) && !defined(__ASSEMBLY__) */ +  #endif /* _ASM_X86_CPUFEATURE_H */  |