1 #ifndef ASM_X86__MICROCODE_H
2 #define ASM_X86__MICROCODE_H
4 extern int microcode_init(void *opaque, struct module *module);
5 extern void microcode_exit(void);
10 long (*get_next_ucode)(void **mc, long offset);
11 long (*microcode_get_next_ucode)(void **mc, long offset);
12 int (*get_matching_microcode)(void *mc, int cpu);
13 int (*microcode_sanity_check)(void *mc);
14 int (*cpu_request_microcode)(int cpu);
15 int (*collect_cpu_info)(int cpu_num, struct cpu_signature *csig);
16 void (*apply_microcode)(int cpu);
17 void (*microcode_fini_cpu)(int cpu);
18 void (*clear_patch)(void *data);
21 struct microcode_header_intel {
29 unsigned int datasize;
30 unsigned int totalsize;
31 unsigned int reserved[3];
34 struct microcode_intel {
35 struct microcode_header_intel hdr;
39 /* microcode format is extended from prescott processors */
40 struct extended_signature {
46 struct extended_sigtable {
49 unsigned int reserved[3];
50 struct extended_signature sigs[0];
53 struct equiv_cpu_entry {
54 unsigned int installed_cpu;
55 unsigned int fixed_errata_mask;
56 unsigned int fixed_errata_compare;
57 unsigned int equiv_cpu;
60 struct microcode_header_amd {
61 unsigned int data_code;
62 unsigned int patch_id;
63 unsigned char mc_patch_data_id[2];
64 unsigned char mc_patch_data_len;
65 unsigned char init_flag;
66 unsigned int mc_patch_data_checksum;
67 unsigned int nb_dev_id;
68 unsigned int sb_dev_id;
69 unsigned char processor_rev_id[2];
70 unsigned char nb_rev_id;
71 unsigned char sb_rev_id;
72 unsigned char bios_api_rev;
73 unsigned char reserved1[3];
74 unsigned int match_reg[8];
77 struct microcode_amd {
78 struct microcode_header_amd hdr;
82 struct cpu_signature {
88 struct ucode_cpu_info {
89 struct cpu_signature cpu_sig;
92 struct microcode_intel *mc_intel;
93 struct microcode_amd *mc_amd;
97 extern struct ucode_cpu_info ucode_cpu_info[];
99 #endif /* ASM_X86__MICROCODE_H */