at v3.13 1.8 kB view raw
1#ifndef _ASM_X86_MICROCODE_H 2#define _ASM_X86_MICROCODE_H 3 4struct cpu_signature { 5 unsigned int sig; 6 unsigned int pf; 7 unsigned int rev; 8}; 9 10struct device; 11 12enum ucode_state { UCODE_ERROR, UCODE_OK, UCODE_NFOUND }; 13 14struct microcode_ops { 15 enum ucode_state (*request_microcode_user) (int cpu, 16 const void __user *buf, size_t size); 17 18 enum ucode_state (*request_microcode_fw) (int cpu, struct device *, 19 bool refresh_fw); 20 21 void (*microcode_fini_cpu) (int cpu); 22 23 /* 24 * The generic 'microcode_core' part guarantees that 25 * the callbacks below run on a target cpu when they 26 * are being called. 27 * See also the "Synchronization" section in microcode_core.c. 28 */ 29 int (*apply_microcode) (int cpu); 30 int (*collect_cpu_info) (int cpu, struct cpu_signature *csig); 31}; 32 33struct ucode_cpu_info { 34 struct cpu_signature cpu_sig; 35 int valid; 36 void *mc; 37}; 38extern struct ucode_cpu_info ucode_cpu_info[]; 39 40#ifdef CONFIG_MICROCODE_INTEL 41extern struct microcode_ops * __init init_intel_microcode(void); 42#else 43static inline struct microcode_ops * __init init_intel_microcode(void) 44{ 45 return NULL; 46} 47#endif /* CONFIG_MICROCODE_INTEL */ 48 49#ifdef CONFIG_MICROCODE_AMD 50extern struct microcode_ops * __init init_amd_microcode(void); 51extern void __exit exit_amd_microcode(void); 52#else 53static inline struct microcode_ops * __init init_amd_microcode(void) 54{ 55 return NULL; 56} 57static inline void __exit exit_amd_microcode(void) {} 58#endif 59 60#ifdef CONFIG_MICROCODE_EARLY 61#define MAX_UCODE_COUNT 128 62extern void __init load_ucode_bsp(void); 63extern void load_ucode_ap(void); 64extern int __init save_microcode_in_initrd(void); 65#else 66static inline void __init load_ucode_bsp(void) {} 67static inline void load_ucode_ap(void) {} 68static inline int __init save_microcode_in_initrd(void) 69{ 70 return 0; 71} 72#endif 73 74#endif /* _ASM_X86_MICROCODE_H */