Reviewed-by: Giri P Mudusuru <[email protected]> 

> -----Original Message-----
> From: Fan, Jeff
> Sent: Tuesday, August 2, 2016 1:59 AM
> To: [email protected]
> Cc: Kinney, Michael D <[email protected]>; Tian, Feng
> <[email protected]>; Mudusuru, Giri P <[email protected]>; Laszlo
> Ersek <[email protected]>
> Subject: [Patch v5 02/48] UefiCpuPkg/MpInitLib: Add microcode definitions
> defined in IA32 SDM
> 
> Add microcode definitions defined in Intel(R) 64 and IA-32 Architectures
> Software Developer's Manual Volume 3A, Section 9.11.
> 
> v4:
>   1. ProcessorSignature type changed to
> CPU_MICROCODE_PROCESSOR_SIGNATURE
>   2. Add pack(1) for structure CPU_MICROCODE_HEADER and
>      CPU_MICROCODE_EXTENDED_TABLE.
> v3:
>   1. Update SDM date to June, 2016
>   2. Mention BCD format in CPU_MICROCODE_DATE
>   3. Rename ProcessorChecksum to Checksum to match SDM.
> 
> Cc: Michael Kinney <[email protected]>
> Cc: Feng Tian <[email protected]>
> Cc: Giri P Mudusuru <[email protected]>
> Cc: Laszlo Ersek <[email protected]>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Jeff Fan <[email protected]>
> Reviewed-by: Laszlo Ersek <[email protected]>
> ---
>  UefiCpuPkg/Include/Register/Microcode.h | 200
> ++++++++++++++++++++++++++++++++
>  1 file changed, 200 insertions(+)
>  create mode 100644 UefiCpuPkg/Include/Register/Microcode.h
> 
> diff --git a/UefiCpuPkg/Include/Register/Microcode.h
> b/UefiCpuPkg/Include/Register/Microcode.h
> new file mode 100644
> index 0000000..94529a1
> --- /dev/null
> +++ b/UefiCpuPkg/Include/Register/Microcode.h
> @@ -0,0 +1,200 @@
> +/** @file
> +  Microcode Definitions.
> +
> +  Microcode Definitions based on contents of the
> +  Intel(R) 64 and IA-32 Architectures Software Developer's Manual
> +    Volume 3A, Section 9.11  Microcode Definitions
> +
> +  Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
> +  This program and the accompanying materials
> +  are licensed and made available under the terms and conditions of the BSD
> License
> +  which accompanies this distribution.  The full text of the license may be 
> found
> at
> +  http://opensource.org/licenses/bsd-license.php
> +
> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> BASIS,
> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
> EXPRESS OR IMPLIED.
> +
> +  @par Specification Reference:
> +  Intel(R) 64 and IA-32 Architectures Software Developer's Manual, Volume 3A,
> +  June 2016, Chapter 9 Processor Management and Initialization, Section 9-11.
> +
> +**/
> +
> +#ifndef __MICROCODE_H__
> +#define __MICROCODE_H__
> +
> +///
> +/// CPU Microcode Date in BCD format
> +///
> +typedef union {
> +  struct {
> +    UINT32   Year:16;
> +    UINT32   Day:8;
> +    UINT32   Month:8;
> +  } Bits;
> +  UINT32     Uint32;
> +} CPU_MICROCODE_DATE;
> +
> +///
> +/// CPU Microcode Processor Signature format
> +///
> +typedef union {
> +  struct {
> +    UINT32   Stepping:4;
> +    UINT32   Model:4;
> +    UINT32   Family:4;
> +    UINT32   Type:2;
> +    UINT32   Reserved1:2;
> +    UINT32   ExtendedModel:4;
> +    UINT32   ExtendedFamily:8;
> +    UINT32   Reserved2:4;
> +  } Bits;
> +  UINT32     Uint32;
> +} CPU_MICROCODE_PROCESSOR_SIGNATURE;
> +
> +#pragma pack (1)
> +
> +///
> +/// Microcode Update Format definition
> +///
> +typedef struct {
> +  ///
> +  /// Version number of the update header
> +  ///
> +  UINT32                            HeaderVersion;
> +  ///
> +  /// Unique version number for the update, the basis for the update
> +  /// signature provided by the processor to indicate the current update
> +  /// functioning within the processor. Used by the BIOS to authenticate
> +  /// the update and verify that the processor loads successfully. The
> +  /// value in this field cannot be used for processor stepping 
> identification
> +  /// alone. This is a signed 32-bit number.
> +  ///
> +  UINT32                            UpdateRevision;
> +  ///
> +  /// Date of the update creation in binary format: mmddyyyy (e.g.
> +  /// 07/18/98 is 07181998H).
> +  ///
> +  CPU_MICROCODE_DATE                Date;
> +  ///
> +  /// Extended family, extended model, type, family, model, and stepping
> +  /// of processor that requires this particular update revision (e.g.,
> +  /// 00000650H). Each microcode update is designed specifically for a
> +  /// given extended family, extended model, type, family, model, and
> +  /// stepping of the processor.
> +  /// The BIOS uses the processor signature field in conjunction with the
> +  /// CPUID instruction to determine whether or not an update is
> +  /// appropriate to load on a processor. The information encoded within
> +  /// this field exactly corresponds to the bit representations returned by
> +  /// the CPUID instruction.
> +  ///
> +  CPU_MICROCODE_PROCESSOR_SIGNATURE ProcessorSignature;
> +  ///
> +  /// Checksum of Update Data and Header. Used to verify the integrity of
> +  /// the update header and data. Checksum is correct when the
> +  /// summation of all the DWORDs (including the extended Processor
> +  /// Signature Table) that comprise the microcode update result in
> +  /// 00000000H.
> +  ///
> +  UINT32                            Checksum;
> +  ///
> +  /// Version number of the loader program needed to correctly load this
> +  /// update. The initial version is 00000001H
> +  ///
> +  UINT32                            LoaderRevision;
> +  ///
> +  /// Platform type information is encoded in the lower 8 bits of this 4-
> +  /// byte field. Each bit represents a particular platform type for a given
> +  /// CPUID. The BIOS uses the processor flags field in conjunction with
> +  /// the platform Id bits in MSR (17H) to determine whether or not an
> +  /// update is appropriate to load on a processor. Multiple bits may be set
> +  /// representing support for multiple platform IDs.
> +  ///
> +  UINT32                            ProcessorFlags;
> +  ///
> +  /// Specifies the size of the encrypted data in bytes, and must be a
> +  /// multiple of DWORDs. If this value is 00000000H, then the microcode
> +  /// update encrypted data is 2000 bytes (or 500 DWORDs).
> +  ///
> +  UINT32                            DataSize;
> +  ///
> +  /// Specifies the total size of the microcode update in bytes. It is the
> +  /// summation of the header size, the encrypted data size and the size of
> +  /// the optional extended signature table. This value is always a multiple
> +  /// of 1024.
> +  ///
> +  UINT32                            TotalSize;
> +  ///
> +  /// Reserved fields for future expansion.
> +  ///
> +  UINT8                             Reserved[12];
> +} CPU_MICROCODE_HEADER;
> +
> +///
> +/// Extended Signature Table Header Field Definitions
> +///
> +typedef struct {
> +  ///
> +  /// Specifies the number of extended signature structures (Processor
> +  /// Signature[n], processor flags[n] and checksum[n]) that exist in this
> +  /// microcode update
> +  ///
> +  UINT32                            ExtendedSignatureCount;
> +  ///
> +  /// Checksum of update extended processor signature table. Used to
> +  /// verify the integrity of the extended processor signature table.
> +  /// Checksum is correct when the summation of the DWORDs that
> +  /// comprise the extended processor signature table results in
> +  /// 00000000H.
> +  ///
> +  UINT32                            ExtendedChecksum;
> +  ///
> +  /// Reserved fields.
> +  ///
> +  UINT8                             Reserved[12];
> +} CPU_MICROCODE_EXTENDED_TABLE_HEADER;
> +
> +///
> +/// Extended Signature Table Field Definitions
> +///
> +typedef struct {
> +  ///
> +  /// Extended family, extended model, type, family, model, and stepping
> +  /// of processor that requires this particular update revision (e.g.,
> +  /// 00000650H). Each microcode update is designed specifically for a
> +  /// given extended family, extended model, type, family, model, and
> +  /// stepping of the processor.
> +  /// The BIOS uses the processor signature field in conjunction with the
> +  /// CPUID instruction to determine whether or not an update is
> +  /// appropriate to load on a processor. The information encoded within
> +  /// this field exactly corresponds to the bit representations returned by
> +  /// the CPUID instruction.
> +  ///
> +  CPU_MICROCODE_PROCESSOR_SIGNATURE ProcessorSignature;
> +  ///
> +  /// Platform type information is encoded in the lower 8 bits of this 4-
> +  /// byte field. Each bit represents a particular platform type for a given
> +  /// CPUID. The BIOS uses the processor flags field in conjunction with
> +  /// the platform Id bits in MSR (17H) to determine whether or not an
> +  /// update is appropriate to load on a processor. Multiple bits may be set
> +  /// representing support for multiple platform IDs.
> +  ///
> +  UINT32                             ProcessorFlag;
> +  ///
> +  /// Used by utility software to decompose a microcode update into
> +  /// multiple microcode updates where each of the new updates is
> +  /// constructed without the optional Extended Processor Signature
> +  /// Table.
> +  /// To calculate the Checksum, substitute the Primary Processor
> +  /// Signature entry and the Processor Flags entry with the
> +  /// corresponding Extended Patch entry. Delete the Extended Processor
> +  /// Signature Table entries. The Checksum is correct when the
> +  /// summation of all DWORDs that comprise the created Extended
> +  /// Processor Patch results in 00000000H.
> +  ///
> +  UINT32                             Checksum;
> +} CPU_MICROCODE_EXTENDED_TABLE;
> +
> +#pragma pack ()
> +
> +#endif
> --
> 2.7.4.windows.1

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to