at v4.0 92 lines 2.3 kB view raw
1#ifndef _ASM_X86_MICROCODE_H 2#define _ASM_X86_MICROCODE_H 3 4#define native_rdmsr(msr, val1, val2) \ 5do { \ 6 u64 __val = native_read_msr((msr)); \ 7 (void)((val1) = (u32)__val); \ 8 (void)((val2) = (u32)(__val >> 32)); \ 9} while (0) 10 11#define native_wrmsr(msr, low, high) \ 12 native_write_msr(msr, low, high) 13 14#define native_wrmsrl(msr, val) \ 15 native_write_msr((msr), \ 16 (u32)((u64)(val)), \ 17 (u32)((u64)(val) >> 32)) 18 19struct cpu_signature { 20 unsigned int sig; 21 unsigned int pf; 22 unsigned int rev; 23}; 24 25struct device; 26 27enum ucode_state { UCODE_ERROR, UCODE_OK, UCODE_NFOUND }; 28extern bool dis_ucode_ldr; 29 30struct microcode_ops { 31 enum ucode_state (*request_microcode_user) (int cpu, 32 const void __user *buf, size_t size); 33 34 enum ucode_state (*request_microcode_fw) (int cpu, struct device *, 35 bool refresh_fw); 36 37 void (*microcode_fini_cpu) (int cpu); 38 39 /* 40 * The generic 'microcode_core' part guarantees that 41 * the callbacks below run on a target cpu when they 42 * are being called. 43 * See also the "Synchronization" section in microcode_core.c. 44 */ 45 int (*apply_microcode) (int cpu); 46 int (*collect_cpu_info) (int cpu, struct cpu_signature *csig); 47}; 48 49struct ucode_cpu_info { 50 struct cpu_signature cpu_sig; 51 int valid; 52 void *mc; 53}; 54extern struct ucode_cpu_info ucode_cpu_info[]; 55 56#ifdef CONFIG_MICROCODE_INTEL 57extern struct microcode_ops * __init init_intel_microcode(void); 58#else 59static inline struct microcode_ops * __init init_intel_microcode(void) 60{ 61 return NULL; 62} 63#endif /* CONFIG_MICROCODE_INTEL */ 64 65#ifdef CONFIG_MICROCODE_AMD 66extern struct microcode_ops * __init init_amd_microcode(void); 67extern void __exit exit_amd_microcode(void); 68#else 69static inline struct microcode_ops * __init init_amd_microcode(void) 70{ 71 return NULL; 72} 73static inline void __exit exit_amd_microcode(void) {} 74#endif 75 76#ifdef CONFIG_MICROCODE_EARLY 77#define MAX_UCODE_COUNT 128 78extern void __init load_ucode_bsp(void); 79extern void load_ucode_ap(void); 80extern int __init save_microcode_in_initrd(void); 81void reload_early_microcode(void); 82#else 83static inline void __init load_ucode_bsp(void) {} 84static inline void load_ucode_ap(void) {} 85static inline int __init save_microcode_in_initrd(void) 86{ 87 return 0; 88} 89static inline void reload_early_microcode(void) {} 90#endif 91 92#endif /* _ASM_X86_MICROCODE_H */