12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #ifndef _ASM_X86_MICROCODE_H
- #define _ASM_X86_MICROCODE_H
- struct cpu_signature {
- unsigned int sig;
- unsigned int pf;
- unsigned int rev;
- };
- struct device;
- enum ucode_state { UCODE_ERROR, UCODE_OK, UCODE_NFOUND };
- 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);
- void (*microcode_fini_cpu) (int cpu);
- /*
- * The generic 'microcode_core' part guarantees that
- * the callbacks below run on a target cpu when they
- * are being called.
- * See also the "Synchronization" section in microcode_core.c.
- */
- int (*apply_microcode) (int cpu);
- int (*collect_cpu_info) (int cpu, struct cpu_signature *csig);
- };
- struct ucode_cpu_info {
- struct cpu_signature cpu_sig;
- int valid;
- void *mc;
- };
- extern struct ucode_cpu_info ucode_cpu_info[];
- #ifdef CONFIG_MICROCODE_INTEL
- extern struct microcode_ops * __init init_intel_microcode(void);
- #else
- static inline struct microcode_ops * __init init_intel_microcode(void)
- {
- return NULL;
- }
- #endif /* CONFIG_MICROCODE_INTEL */
- #ifdef CONFIG_MICROCODE_AMD
- extern struct microcode_ops * __init init_amd_microcode(void);
- extern void __exit exit_amd_microcode(void);
- static inline void get_ucode_data(void *to, const u8 *from, size_t n)
- {
- memcpy(to, from, n);
- }
- #else
- static inline struct microcode_ops * __init init_amd_microcode(void)
- {
- return NULL;
- }
- static inline void __exit exit_amd_microcode(void) {}
- #endif
- #endif /* _ASM_X86_MICROCODE_H */
|