123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- /** @file
- Public include file for Microcode library.
- Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #ifndef MICROCODE_LIB_H_
- #define MICROCODE_LIB_H_
- #include <Register/Intel/Microcode.h>
- #include <Ppi/ShadowMicrocode.h>
- /**
- Get microcode update signature of currently loaded microcode update.
- @return Microcode signature.
- **/
- UINT32
- EFIAPI
- GetProcessorMicrocodeSignature (
- VOID
- );
- /**
- Get the processor signature and platform ID for current processor.
- @param MicrocodeCpuId Return the processor signature and platform ID.
- **/
- VOID
- EFIAPI
- GetProcessorMicrocodeCpuId (
- EDKII_PEI_MICROCODE_CPU_ID *MicrocodeCpuId
- );
- /**
- Return the total size of the microcode entry.
- Logic follows pseudo code in SDM as below:
- N = 512
- If (Update.DataSize != 00000000H)
- N = Update.TotalSize / 4
- If Microcode is NULL, then ASSERT.
- @param Microcode Pointer to the microcode entry.
- @return The microcode total size.
- **/
- UINT32
- EFIAPI
- GetMicrocodeLength (
- IN CPU_MICROCODE_HEADER *Microcode
- );
- /**
- Load the microcode to the processor.
- If Microcode is NULL, then ASSERT.
- @param Microcode Pointer to the microcode entry.
- **/
- VOID
- EFIAPI
- LoadMicrocode (
- IN CPU_MICROCODE_HEADER *Microcode
- );
- /**
- Detect whether specified processor can find matching microcode patch and load it.
- Microcode format is as below:
- +----------------------------------------+-------------------------------------------------+
- | CPU_MICROCODE_HEADER | |
- +----------------------------------------+ V
- | Update Data | CPU_MICROCODE_HEADER.Checksum
- +----------------------------------------+-------+ ^
- | CPU_MICROCODE_EXTENDED_TABLE_HEADER | | |
- +----------------------------------------+ V |
- | CPU_MICROCODE_EXTENDED_TABLE[0] | CPU_MICROCODE_EXTENDED_TABLE_HEADER.Checksum |
- | CPU_MICROCODE_EXTENDED_TABLE[1] | ^ |
- | ... | | |
- +----------------------------------------+-------+-----------------------------------------+
- There may by multiple CPU_MICROCODE_EXTENDED_TABLE in this format.
- The count of CPU_MICROCODE_EXTENDED_TABLE is indicated by ExtendedSignatureCount
- of CPU_MICROCODE_EXTENDED_TABLE_HEADER structure.
- If Microcode is NULL, then ASSERT.
- @param Microcode Pointer to a microcode entry.
- @param MicrocodeLength The total length of the microcode entry.
- @param MinimumRevision The microcode whose revision <= MinimumRevision is treated as invalid.
- Caller can supply value get from GetProcessorMicrocodeSignature() to check
- whether the microcode is newer than loaded one.
- Caller can supply 0 to treat any revision (except 0) microcode as valid.
- @param MicrocodeCpuIds Pointer to an array of processor signature and platform ID that represents
- a set of processors.
- Caller can supply zero-element array to skip the processor signature and
- platform ID check.
- @param MicrocodeCpuIdCount The number of elements in MicrocodeCpuIds.
- @param VerifyChecksum FALSE to skip all the checksum verifications.
- @retval TRUE The microcode is valid.
- @retval FALSE The microcode is invalid.
- **/
- BOOLEAN
- EFIAPI
- IsValidMicrocode (
- IN CPU_MICROCODE_HEADER *Microcode,
- IN UINTN MicrocodeLength,
- IN UINT32 MinimumRevision,
- IN EDKII_PEI_MICROCODE_CPU_ID *MicrocodeCpuIds,
- IN UINTN MicrocodeCpuIdCount,
- IN BOOLEAN VerifyChecksum
- );
- #endif
|