diff options
Diffstat (limited to 'include/asm-x86/processor.h')
-rw-r--r-- | include/asm-x86/processor.h | 49 |
1 files changed, 37 insertions, 12 deletions
diff --git a/include/asm-x86/processor.h b/include/asm-x86/processor.h index 4df3e2f6fb56..c7d35464a4bb 100644 --- a/include/asm-x86/processor.h +++ b/include/asm-x86/processor.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_X86_PROCESSOR_H | 1 | #ifndef ASM_X86__PROCESSOR_H |
2 | #define __ASM_X86_PROCESSOR_H | 2 | #define ASM_X86__PROCESSOR_H |
3 | 3 | ||
4 | #include <asm/processor-flags.h> | 4 | #include <asm/processor-flags.h> |
5 | 5 | ||
@@ -20,6 +20,7 @@ struct mm_struct; | |||
20 | #include <asm/msr.h> | 20 | #include <asm/msr.h> |
21 | #include <asm/desc_defs.h> | 21 | #include <asm/desc_defs.h> |
22 | #include <asm/nops.h> | 22 | #include <asm/nops.h> |
23 | #include <asm/ds.h> | ||
23 | 24 | ||
24 | #include <linux/personality.h> | 25 | #include <linux/personality.h> |
25 | #include <linux/cpumask.h> | 26 | #include <linux/cpumask.h> |
@@ -75,11 +76,11 @@ struct cpuinfo_x86 { | |||
75 | int x86_tlbsize; | 76 | int x86_tlbsize; |
76 | __u8 x86_virt_bits; | 77 | __u8 x86_virt_bits; |
77 | __u8 x86_phys_bits; | 78 | __u8 x86_phys_bits; |
79 | #endif | ||
78 | /* CPUID returned core id bits: */ | 80 | /* CPUID returned core id bits: */ |
79 | __u8 x86_coreid_bits; | 81 | __u8 x86_coreid_bits; |
80 | /* Max extended CPUID function supported: */ | 82 | /* Max extended CPUID function supported: */ |
81 | __u32 extended_cpuid_level; | 83 | __u32 extended_cpuid_level; |
82 | #endif | ||
83 | /* Maximum supported CPUID level, -1=no CPUID: */ | 84 | /* Maximum supported CPUID level, -1=no CPUID: */ |
84 | int cpuid_level; | 85 | int cpuid_level; |
85 | __u32 x86_capability[NCAPINTS]; | 86 | __u32 x86_capability[NCAPINTS]; |
@@ -140,6 +141,8 @@ DECLARE_PER_CPU(struct cpuinfo_x86, cpu_info); | |||
140 | #define current_cpu_data boot_cpu_data | 141 | #define current_cpu_data boot_cpu_data |
141 | #endif | 142 | #endif |
142 | 143 | ||
144 | extern const struct seq_operations cpuinfo_op; | ||
145 | |||
143 | static inline int hlt_works(int cpu) | 146 | static inline int hlt_works(int cpu) |
144 | { | 147 | { |
145 | #ifdef CONFIG_X86_32 | 148 | #ifdef CONFIG_X86_32 |
@@ -153,6 +156,8 @@ static inline int hlt_works(int cpu) | |||
153 | 156 | ||
154 | extern void cpu_detect(struct cpuinfo_x86 *c); | 157 | extern void cpu_detect(struct cpuinfo_x86 *c); |
155 | 158 | ||
159 | extern struct pt_regs *idle_regs(struct pt_regs *); | ||
160 | |||
156 | extern void early_cpu_init(void); | 161 | extern void early_cpu_init(void); |
157 | extern void identify_boot_cpu(void); | 162 | extern void identify_boot_cpu(void); |
158 | extern void identify_secondary_cpu(struct cpuinfo_x86 *); | 163 | extern void identify_secondary_cpu(struct cpuinfo_x86 *); |
@@ -161,11 +166,8 @@ extern void init_scattered_cpuid_features(struct cpuinfo_x86 *c); | |||
161 | extern unsigned int init_intel_cacheinfo(struct cpuinfo_x86 *c); | 166 | extern unsigned int init_intel_cacheinfo(struct cpuinfo_x86 *c); |
162 | extern unsigned short num_cache_leaves; | 167 | extern unsigned short num_cache_leaves; |
163 | 168 | ||
164 | #if defined(CONFIG_X86_HT) || defined(CONFIG_X86_64) | 169 | extern void detect_extended_topology(struct cpuinfo_x86 *c); |
165 | extern void detect_ht(struct cpuinfo_x86 *c); | 170 | extern void detect_ht(struct cpuinfo_x86 *c); |
166 | #else | ||
167 | static inline void detect_ht(struct cpuinfo_x86 *c) {} | ||
168 | #endif | ||
169 | 171 | ||
170 | static inline void native_cpuid(unsigned int *eax, unsigned int *ebx, | 172 | static inline void native_cpuid(unsigned int *eax, unsigned int *ebx, |
171 | unsigned int *ecx, unsigned int *edx) | 173 | unsigned int *ecx, unsigned int *edx) |
@@ -322,7 +324,12 @@ struct i387_fxsave_struct { | |||
322 | /* 16*16 bytes for each XMM-reg = 256 bytes: */ | 324 | /* 16*16 bytes for each XMM-reg = 256 bytes: */ |
323 | u32 xmm_space[64]; | 325 | u32 xmm_space[64]; |
324 | 326 | ||
325 | u32 padding[24]; | 327 | u32 padding[12]; |
328 | |||
329 | union { | ||
330 | u32 padding1[12]; | ||
331 | u32 sw_reserved[12]; | ||
332 | }; | ||
326 | 333 | ||
327 | } __attribute__((aligned(16))); | 334 | } __attribute__((aligned(16))); |
328 | 335 | ||
@@ -346,10 +353,23 @@ struct i387_soft_struct { | |||
346 | u32 entry_eip; | 353 | u32 entry_eip; |
347 | }; | 354 | }; |
348 | 355 | ||
356 | struct xsave_hdr_struct { | ||
357 | u64 xstate_bv; | ||
358 | u64 reserved1[2]; | ||
359 | u64 reserved2[5]; | ||
360 | } __attribute__((packed)); | ||
361 | |||
362 | struct xsave_struct { | ||
363 | struct i387_fxsave_struct i387; | ||
364 | struct xsave_hdr_struct xsave_hdr; | ||
365 | /* new processor state extensions will go here */ | ||
366 | } __attribute__ ((packed, aligned (64))); | ||
367 | |||
349 | union thread_xstate { | 368 | union thread_xstate { |
350 | struct i387_fsave_struct fsave; | 369 | struct i387_fsave_struct fsave; |
351 | struct i387_fxsave_struct fxsave; | 370 | struct i387_fxsave_struct fxsave; |
352 | struct i387_soft_struct soft; | 371 | struct i387_soft_struct soft; |
372 | struct xsave_struct xsave; | ||
353 | }; | 373 | }; |
354 | 374 | ||
355 | #ifdef CONFIG_X86_64 | 375 | #ifdef CONFIG_X86_64 |
@@ -411,9 +431,14 @@ struct thread_struct { | |||
411 | unsigned io_bitmap_max; | 431 | unsigned io_bitmap_max; |
412 | /* MSR_IA32_DEBUGCTLMSR value to switch in if TIF_DEBUGCTLMSR is set. */ | 432 | /* MSR_IA32_DEBUGCTLMSR value to switch in if TIF_DEBUGCTLMSR is set. */ |
413 | unsigned long debugctlmsr; | 433 | unsigned long debugctlmsr; |
414 | /* Debug Store - if not 0 points to a DS Save Area configuration; | 434 | #ifdef CONFIG_X86_DS |
415 | * goes into MSR_IA32_DS_AREA */ | 435 | /* Debug Store context; see include/asm-x86/ds.h; goes into MSR_IA32_DS_AREA */ |
416 | unsigned long ds_area_msr; | 436 | struct ds_context *ds_ctx; |
437 | #endif /* CONFIG_X86_DS */ | ||
438 | #ifdef CONFIG_X86_PTRACE_BTS | ||
439 | /* the signal to send on a bts buffer overflow */ | ||
440 | unsigned int bts_ovfl_signal; | ||
441 | #endif /* CONFIG_X86_PTRACE_BTS */ | ||
417 | }; | 442 | }; |
418 | 443 | ||
419 | static inline unsigned long native_get_debugreg(int regno) | 444 | static inline unsigned long native_get_debugreg(int regno) |
@@ -943,4 +968,4 @@ extern void start_thread(struct pt_regs *regs, unsigned long new_ip, | |||
943 | extern int get_tsc_mode(unsigned long adr); | 968 | extern int get_tsc_mode(unsigned long adr); |
944 | extern int set_tsc_mode(unsigned int val); | 969 | extern int set_tsc_mode(unsigned int val); |
945 | 970 | ||
946 | #endif | 971 | #endif /* ASM_X86__PROCESSOR_H */ |