microcode.h 1.4 KB
Newer Older
H
H. Peter Anvin 已提交
1 2
#ifndef _ASM_X86_MICROCODE_H
#define _ASM_X86_MICROCODE_H
3

4 5 6 7 8
struct cpu_signature {
	unsigned int sig;
	unsigned int pf;
	unsigned int rev;
};
P
Peter Oruba 已提交
9

D
Dmitry Adamushko 已提交
10
struct device;
11

12 13
enum ucode_state { UCODE_ERROR, UCODE_OK, UCODE_NFOUND };

14
struct microcode_ops {
15 16
	enum ucode_state (*request_microcode_user) (int cpu,
				const void __user *buf, size_t size);
D
Dmitry Adamushko 已提交
17

18 19
	enum ucode_state (*request_microcode_fw) (int cpu, struct device *,
						  bool refresh_fw);
D
Dmitry Adamushko 已提交
20 21

	void (*microcode_fini_cpu) (int cpu);
22 23 24 25 26 27 28 29 30

	/*
	 * 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);
31 32
};

33
struct ucode_cpu_info {
34 35 36
	struct cpu_signature	cpu_sig;
	int			valid;
	void			*mc;
37
};
38 39
extern struct ucode_cpu_info ucode_cpu_info[];

40 41 42 43 44 45 46 47 48 49 50
#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);
51
extern void __exit exit_amd_microcode(void);
52 53 54 55 56
#else
static inline struct microcode_ops * __init init_amd_microcode(void)
{
	return NULL;
}
57
static inline void __exit exit_amd_microcode(void) {}
58 59
#endif

H
H. Peter Anvin 已提交
60
#endif /* _ASM_X86_MICROCODE_H */