diff options
Diffstat (limited to 'arch/x86/include/asm/microcode.h')
| -rw-r--r-- | arch/x86/include/asm/microcode.h | 36 | 
1 files changed, 34 insertions, 2 deletions
diff --git a/arch/x86/include/asm/microcode.h b/arch/x86/include/asm/microcode.h index ef51b501e22..64dc362506b 100644 --- a/arch/x86/include/asm/microcode.h +++ b/arch/x86/include/asm/microcode.h @@ -1,6 +1,21 @@  #ifndef _ASM_X86_MICROCODE_H  #define _ASM_X86_MICROCODE_H +#define native_rdmsr(msr, val1, val2)			\ +do {							\ +	u64 __val = native_read_msr((msr));		\ +	(void)((val1) = (u32)__val);			\ +	(void)((val2) = (u32)(__val >> 32));		\ +} while (0) + +#define native_wrmsr(msr, low, high)			\ +	native_write_msr(msr, low, high) + +#define native_wrmsrl(msr, val)				\ +	native_write_msr((msr),				\ +			 (u32)((u64)(val)),		\ +			 (u32)((u64)(val) >> 32)) +  struct cpu_signature {  	unsigned int sig;  	unsigned int pf; @@ -10,13 +25,14 @@ struct cpu_signature {  struct device;  enum ucode_state { UCODE_ERROR, UCODE_OK, UCODE_NFOUND }; +extern bool dis_ucode_ldr;  struct microcode_ops {  	enum ucode_state (*request_microcode_user) (int cpu,  				const void __user *buf, size_t size); -	enum ucode_state (*request_microcode_fw) (int cpu, -				struct device *device); +	enum ucode_state (*request_microcode_fw) (int cpu, struct device *, +						  bool refresh_fw);  	void (*microcode_fini_cpu) (int cpu); @@ -48,11 +64,27 @@ static inline struct microcode_ops * __init init_intel_microcode(void)  #ifdef CONFIG_MICROCODE_AMD  extern struct microcode_ops * __init init_amd_microcode(void); +extern void __exit exit_amd_microcode(void);  #else  static inline struct microcode_ops * __init init_amd_microcode(void)  {  	return NULL;  } +static inline void __exit exit_amd_microcode(void) {} +#endif + +#ifdef CONFIG_MICROCODE_EARLY +#define MAX_UCODE_COUNT 128 +extern void __init load_ucode_bsp(void); +extern void load_ucode_ap(void); +extern int __init save_microcode_in_initrd(void); +#else +static inline void __init load_ucode_bsp(void) {} +static inline void load_ucode_ap(void) {} +static inline int __init save_microcode_in_initrd(void) +{ +	return 0; +}  #endif  #endif /* _ASM_X86_MICROCODE_H */  | 
