]> git.proxmox.com Git - mirror_edk2.git/blob - MdePkg/Include/Register/Intel/Microcode.h
MdePkg: Apply uncrustify changes
[mirror_edk2.git] / MdePkg / Include / Register / Intel / Microcode.h
1 /** @file
2 Microcode Definitions.
3
4 Microcode Definitions based on contents of the
5 Intel(R) 64 and IA-32 Architectures Software Developer's Manual
6 Volume 3A, Section 9.11 Microcode Definitions
7
8 Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
9 SPDX-License-Identifier: BSD-2-Clause-Patent
10
11 @par Specification Reference:
12 Intel(R) 64 and IA-32 Architectures Software Developer's Manual, Volume 3A,
13 June 2016, Chapter 9 Processor Management and Initialization, Section 9-11.
14
15 **/
16
17 #ifndef __INTEL_MICROCODE_H__
18 #define __INTEL_MICROCODE_H__
19
20 ///
21 /// CPU Microcode Date in BCD format
22 ///
23 typedef union {
24 struct {
25 UINT32 Year : 16;
26 UINT32 Day : 8;
27 UINT32 Month : 8;
28 } Bits;
29 UINT32 Uint32;
30 } CPU_MICROCODE_DATE;
31
32 ///
33 /// CPU Microcode Processor Signature format
34 ///
35 typedef union {
36 struct {
37 UINT32 Stepping : 4;
38 UINT32 Model : 4;
39 UINT32 Family : 4;
40 UINT32 Type : 2;
41 UINT32 Reserved1 : 2;
42 UINT32 ExtendedModel : 4;
43 UINT32 ExtendedFamily : 8;
44 UINT32 Reserved2 : 4;
45 } Bits;
46 UINT32 Uint32;
47 } CPU_MICROCODE_PROCESSOR_SIGNATURE;
48
49 #pragma pack (1)
50
51 ///
52 /// Microcode Update Format definition
53 ///
54 typedef struct {
55 ///
56 /// Version number of the update header
57 ///
58 UINT32 HeaderVersion;
59 ///
60 /// Unique version number for the update, the basis for the update
61 /// signature provided by the processor to indicate the current update
62 /// functioning within the processor. Used by the BIOS to authenticate
63 /// the update and verify that the processor loads successfully. The
64 /// value in this field cannot be used for processor stepping identification
65 /// alone. This is a signed 32-bit number.
66 ///
67 UINT32 UpdateRevision;
68 ///
69 /// Date of the update creation in binary format: mmddyyyy (e.g.
70 /// 07/18/98 is 07181998H).
71 ///
72 CPU_MICROCODE_DATE Date;
73 ///
74 /// Extended family, extended model, type, family, model, and stepping
75 /// of processor that requires this particular update revision (e.g.,
76 /// 00000650H). Each microcode update is designed specifically for a
77 /// given extended family, extended model, type, family, model, and
78 /// stepping of the processor.
79 /// The BIOS uses the processor signature field in conjunction with the
80 /// CPUID instruction to determine whether or not an update is
81 /// appropriate to load on a processor. The information encoded within
82 /// this field exactly corresponds to the bit representations returned by
83 /// the CPUID instruction.
84 ///
85 CPU_MICROCODE_PROCESSOR_SIGNATURE ProcessorSignature;
86 ///
87 /// Checksum of Update Data and Header. Used to verify the integrity of
88 /// the update header and data. Checksum is correct when the
89 /// summation of all the DWORDs (including the extended Processor
90 /// Signature Table) that comprise the microcode update result in
91 /// 00000000H.
92 ///
93 UINT32 Checksum;
94 ///
95 /// Version number of the loader program needed to correctly load this
96 /// update. The initial version is 00000001H
97 ///
98 UINT32 LoaderRevision;
99 ///
100 /// Platform type information is encoded in the lower 8 bits of this 4-
101 /// byte field. Each bit represents a particular platform type for a given
102 /// CPUID. The BIOS uses the processor flags field in conjunction with
103 /// the platform Id bits in MSR (17H) to determine whether or not an
104 /// update is appropriate to load on a processor. Multiple bits may be set
105 /// representing support for multiple platform IDs.
106 ///
107 UINT32 ProcessorFlags;
108 ///
109 /// Specifies the size of the encrypted data in bytes, and must be a
110 /// multiple of DWORDs. If this value is 00000000H, then the microcode
111 /// update encrypted data is 2000 bytes (or 500 DWORDs).
112 ///
113 UINT32 DataSize;
114 ///
115 /// Specifies the total size of the microcode update in bytes. It is the
116 /// summation of the header size, the encrypted data size and the size of
117 /// the optional extended signature table. This value is always a multiple
118 /// of 1024.
119 ///
120 UINT32 TotalSize;
121 ///
122 /// Reserved fields for future expansion.
123 ///
124 UINT8 Reserved[12];
125 } CPU_MICROCODE_HEADER;
126
127 ///
128 /// Extended Signature Table Header Field Definitions
129 ///
130 typedef struct {
131 ///
132 /// Specifies the number of extended signature structures (Processor
133 /// Signature[n], processor flags[n] and checksum[n]) that exist in this
134 /// microcode update
135 ///
136 UINT32 ExtendedSignatureCount;
137 ///
138 /// Checksum of update extended processor signature table. Used to
139 /// verify the integrity of the extended processor signature table.
140 /// Checksum is correct when the summation of the DWORDs that
141 /// comprise the extended processor signature table results in
142 /// 00000000H.
143 ///
144 UINT32 ExtendedChecksum;
145 ///
146 /// Reserved fields.
147 ///
148 UINT8 Reserved[12];
149 } CPU_MICROCODE_EXTENDED_TABLE_HEADER;
150
151 ///
152 /// Extended Signature Table Field Definitions
153 ///
154 typedef struct {
155 ///
156 /// Extended family, extended model, type, family, model, and stepping
157 /// of processor that requires this particular update revision (e.g.,
158 /// 00000650H). Each microcode update is designed specifically for a
159 /// given extended family, extended model, type, family, model, and
160 /// stepping of the processor.
161 /// The BIOS uses the processor signature field in conjunction with the
162 /// CPUID instruction to determine whether or not an update is
163 /// appropriate to load on a processor. The information encoded within
164 /// this field exactly corresponds to the bit representations returned by
165 /// the CPUID instruction.
166 ///
167 CPU_MICROCODE_PROCESSOR_SIGNATURE ProcessorSignature;
168 ///
169 /// Platform type information is encoded in the lower 8 bits of this 4-
170 /// byte field. Each bit represents a particular platform type for a given
171 /// CPUID. The BIOS uses the processor flags field in conjunction with
172 /// the platform Id bits in MSR (17H) to determine whether or not an
173 /// update is appropriate to load on a processor. Multiple bits may be set
174 /// representing support for multiple platform IDs.
175 ///
176 UINT32 ProcessorFlag;
177 ///
178 /// Used by utility software to decompose a microcode update into
179 /// multiple microcode updates where each of the new updates is
180 /// constructed without the optional Extended Processor Signature
181 /// Table.
182 /// To calculate the Checksum, substitute the Primary Processor
183 /// Signature entry and the Processor Flags entry with the
184 /// corresponding Extended Patch entry. Delete the Extended Processor
185 /// Signature Table entries. The Checksum is correct when the
186 /// summation of all DWORDs that comprise the created Extended
187 /// Processor Patch results in 00000000H.
188 ///
189 UINT32 Checksum;
190 } CPU_MICROCODE_EXTENDED_TABLE;
191
192 #pragma pack ()
193
194 #endif