diff options
Diffstat (limited to 'include/asm-x86/processor.h')
| -rw-r--r-- | include/asm-x86/processor.h | 84 |
1 files changed, 37 insertions, 47 deletions
diff --git a/include/asm-x86/processor.h b/include/asm-x86/processor.h index 4df3e2f6fb56..ee7cbb30773a 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) |
| @@ -561,41 +586,6 @@ static inline void clear_in_cr4(unsigned long mask) | |||
| 561 | write_cr4(cr4); | 586 | write_cr4(cr4); |
| 562 | } | 587 | } |
| 563 | 588 | ||
| 564 | struct microcode_header { | ||
| 565 | unsigned int hdrver; | ||
| 566 | unsigned int rev; | ||
| 567 | unsigned int date; | ||
| 568 | unsigned int sig; | ||
| 569 | unsigned int cksum; | ||
| 570 | unsigned int ldrver; | ||
| 571 | unsigned int pf; | ||
| 572 | unsigned int datasize; | ||
| 573 | unsigned int totalsize; | ||
| 574 | unsigned int reserved[3]; | ||
| 575 | }; | ||
| 576 | |||
| 577 | struct microcode { | ||
| 578 | struct microcode_header hdr; | ||
| 579 | unsigned int bits[0]; | ||
| 580 | }; | ||
| 581 | |||
| 582 | typedef struct microcode microcode_t; | ||
| 583 | typedef struct microcode_header microcode_header_t; | ||
| 584 | |||
| 585 | /* microcode format is extended from prescott processors */ | ||
| 586 | struct extended_signature { | ||
| 587 | unsigned int sig; | ||
| 588 | unsigned int pf; | ||
| 589 | unsigned int cksum; | ||
| 590 | }; | ||
| 591 | |||
| 592 | struct extended_sigtable { | ||
| 593 | unsigned int count; | ||
| 594 | unsigned int cksum; | ||
| 595 | unsigned int reserved[3]; | ||
| 596 | struct extended_signature sigs[0]; | ||
| 597 | }; | ||
| 598 | |||
| 599 | typedef struct { | 589 | typedef struct { |
| 600 | unsigned long seg; | 590 | unsigned long seg; |
| 601 | } mm_segment_t; | 591 | } mm_segment_t; |
| @@ -943,4 +933,4 @@ extern void start_thread(struct pt_regs *regs, unsigned long new_ip, | |||
| 943 | extern int get_tsc_mode(unsigned long adr); | 933 | extern int get_tsc_mode(unsigned long adr); |
| 944 | extern int set_tsc_mode(unsigned int val); | 934 | extern int set_tsc_mode(unsigned int val); |
| 945 | 935 | ||
| 946 | #endif | 936 | #endif /* ASM_X86__PROCESSOR_H */ |
