]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blame - include/asm-x86/microcode.h
x86, microcode rework, v2, fix
[mirror_ubuntu-artful-kernel.git] / include / asm-x86 / microcode.h
CommitLineData
d45de409
DA
1#ifndef ASM_X86__MICROCODE_H
2#define ASM_X86__MICROCODE_H
3
8d86f390
PO
4extern int microcode_init(void *opaque, struct module *module);
5extern void microcode_exit(void);
6
d45de409 7struct cpu_signature;
a0a29b62 8struct device;
d45de409 9
26bf7a48 10struct microcode_ops {
a0a29b62
DA
11 int (*request_microcode_user) (int cpu, const void __user *buf, size_t size);
12 int (*request_microcode_fw) (int cpu, struct device *device);
13
14 void (*apply_microcode) (int cpu);
15
16 int (*collect_cpu_info) (int cpu, struct cpu_signature *csig);
17 void (*microcode_fini_cpu) (int cpu);
26bf7a48
PO
18};
19
d4ee3668 20struct microcode_header_intel {
9a56a0f8
PO
21 unsigned int hdrver;
22 unsigned int rev;
23 unsigned int date;
24 unsigned int sig;
25 unsigned int cksum;
26 unsigned int ldrver;
27 unsigned int pf;
28 unsigned int datasize;
29 unsigned int totalsize;
30 unsigned int reserved[3];
31};
32
d4ee3668
PO
33struct microcode_intel {
34 struct microcode_header_intel hdr;
9a56a0f8
PO
35 unsigned int bits[0];
36};
37
9a56a0f8
PO
38/* microcode format is extended from prescott processors */
39struct extended_signature {
40 unsigned int sig;
41 unsigned int pf;
42 unsigned int cksum;
43};
44
45struct extended_sigtable {
46 unsigned int count;
47 unsigned int cksum;
48 unsigned int reserved[3];
49 struct extended_signature sigs[0];
50};
c3b71bce 51
9835fd4a
PO
52struct equiv_cpu_entry {
53 unsigned int installed_cpu;
54 unsigned int fixed_errata_mask;
55 unsigned int fixed_errata_compare;
56 unsigned int equiv_cpu;
57};
58
59struct microcode_header_amd {
60 unsigned int data_code;
61 unsigned int patch_id;
62 unsigned char mc_patch_data_id[2];
63 unsigned char mc_patch_data_len;
64 unsigned char init_flag;
65 unsigned int mc_patch_data_checksum;
66 unsigned int nb_dev_id;
67 unsigned int sb_dev_id;
68 unsigned char processor_rev_id[2];
69 unsigned char nb_rev_id;
70 unsigned char sb_rev_id;
71 unsigned char bios_api_rev;
72 unsigned char reserved1[3];
73 unsigned int match_reg[8];
74};
75
76struct microcode_amd {
77 struct microcode_header_amd hdr;
78 unsigned int mpb[0];
79};
80
d45de409 81struct cpu_signature {
c3b71bce
PO
82 unsigned int sig;
83 unsigned int pf;
84 unsigned int rev;
d45de409
DA
85};
86
87struct ucode_cpu_info {
88 struct cpu_signature cpu_sig;
89 int valid;
d4ee3668
PO
90 union {
91 struct microcode_intel *mc_intel;
9835fd4a 92 struct microcode_amd *mc_amd;
d45de409 93 void *valid_mc;
d4ee3668 94 } mc;
c3b71bce 95};
d45de409
DA
96extern struct ucode_cpu_info ucode_cpu_info[];
97
98#endif /* ASM_X86__MICROCODE_H */