| #ifndef ASM_X86__MICROCODE_H |
| #define ASM_X86__MICROCODE_H |
| |
| extern int microcode_init(void *opaque, struct module *module); |
| extern void microcode_exit(void); |
| |
| struct cpu_signature; |
| struct device; |
| |
| struct microcode_ops { |
| int (*request_microcode_user) (int cpu, const void __user *buf, size_t size); |
| int (*request_microcode_fw) (int cpu, struct device *device); |
| |
| void (*apply_microcode) (int cpu); |
| |
| int (*collect_cpu_info) (int cpu, struct cpu_signature *csig); |
| void (*microcode_fini_cpu) (int cpu); |
| }; |
| |
| struct microcode_header_intel { |
| unsigned int hdrver; |
| unsigned int rev; |
| unsigned int date; |
| unsigned int sig; |
| unsigned int cksum; |
| unsigned int ldrver; |
| unsigned int pf; |
| unsigned int datasize; |
| unsigned int totalsize; |
| unsigned int reserved[3]; |
| }; |
| |
| struct microcode_intel { |
| struct microcode_header_intel hdr; |
| unsigned int bits[0]; |
| }; |
| |
| /* microcode format is extended from prescott processors */ |
| struct extended_signature { |
| unsigned int sig; |
| unsigned int pf; |
| unsigned int cksum; |
| }; |
| |
| struct extended_sigtable { |
| unsigned int count; |
| unsigned int cksum; |
| unsigned int reserved[3]; |
| struct extended_signature sigs[0]; |
| }; |
| |
| struct equiv_cpu_entry { |
| unsigned int installed_cpu; |
| unsigned int fixed_errata_mask; |
| unsigned int fixed_errata_compare; |
| unsigned int equiv_cpu; |
| }; |
| |
| struct microcode_header_amd { |
| unsigned int data_code; |
| unsigned int patch_id; |
| unsigned char mc_patch_data_id[2]; |
| unsigned char mc_patch_data_len; |
| unsigned char init_flag; |
| unsigned int mc_patch_data_checksum; |
| unsigned int nb_dev_id; |
| unsigned int sb_dev_id; |
| unsigned char processor_rev_id[2]; |
| unsigned char nb_rev_id; |
| unsigned char sb_rev_id; |
| unsigned char bios_api_rev; |
| unsigned char reserved1[3]; |
| unsigned int match_reg[8]; |
| }; |
| |
| struct microcode_amd { |
| struct microcode_header_amd hdr; |
| unsigned int mpb[0]; |
| }; |
| |
| struct cpu_signature { |
| unsigned int sig; |
| unsigned int pf; |
| unsigned int rev; |
| }; |
| |
| struct ucode_cpu_info { |
| struct cpu_signature cpu_sig; |
| int valid; |
| union { |
| struct microcode_intel *mc_intel; |
| struct microcode_amd *mc_amd; |
| void *valid_mc; |
| } mc; |
| }; |
| extern struct ucode_cpu_info ucode_cpu_info[]; |
| |
| #endif /* ASM_X86__MICROCODE_H */ |