| struct microcode_ops { |
| long (*get_next_ucode)(void **mc, long offset); |
| long (*microcode_get_next_ucode)(void **mc, long offset); |
| int (*get_matching_microcode)(void *mc, int cpu); |
| int (*apply_microcode_check_cpu)(int cpu); |
| int (*microcode_sanity_check)(void *mc); |
| int (*cpu_request_microcode)(int cpu); |
| void (*collect_cpu_info)(int cpu_num); |
| void (*apply_microcode)(int cpu); |
| void (*microcode_fini_cpu)(int cpu); |
| void (*clear_patch)(void *data); |
| }; |
| |
| 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 ucode_cpu_info { |
| int valid; |
| unsigned int sig; |
| unsigned int pf; |
| unsigned int rev; |
| union { |
| struct microcode_intel *mc_intel; |
| struct microcode_amd *mc_amd; |
| } mc; |
| }; |