1ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan/** @file 2ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan Definitions for loading microcode on processors. 3ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan 4ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan Copyright (c) 2015, Intel Corporation. All rights reserved.<BR> 5ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan This program and the accompanying materials 6ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan are licensed and made available under the terms and conditions of the BSD License 7ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan which accompanies this distribution. The full text of the license may be found at 8ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan http://opensource.org/licenses/bsd-license.php 9ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan 10ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan 13ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan**/ 14ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan 15ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan#ifndef _CPU_MICROCODE_H_ 16ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan#define _CPU_MICROCODE_H_ 17ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan 18ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan#define EFI_MSR_IA32_PLATFORM_ID 0x17 19ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan#define EFI_MSR_IA32_BIOS_UPDT_TRIG 0x79 20ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan#define EFI_MSR_IA32_BIOS_SIGN_ID 0x8b 21ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan 22ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan#define MAX_MICROCODE_DESCRIPTOR_LENGTH 100 23ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan 24ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fantypedef struct { 25ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan VOID *MicrocodeData; 26ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan UINTN MicrocodeSize; 27ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan UINT32 ProcessorId; 28ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan BOOLEAN Load; 29ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan} MICROCODE_INFO; 30ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan 31ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan// 32ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan// Definition for IA32 microcode format 33ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan// 34ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fantypedef struct { 35ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan UINT32 HeaderVersion; 36ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan UINT32 UpdateRevision; 37ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan UINT32 Date; 38ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan UINT32 ProcessorId; 39ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan UINT32 Checksum; 40ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan UINT32 LoaderRevision; 41ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan UINT32 ProcessorFlags; 42ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan UINT32 DataSize; 43ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan UINT32 TotalSize; 44ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan UINT8 Reserved[12]; 45ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan} EFI_CPU_MICROCODE_HEADER; 46ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan 47ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fantypedef struct { 48ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan UINT32 ExtendedSignatureCount; 49ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan UINT32 ExtendedTableChecksum; 50ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan UINT8 Reserved[12]; 51ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan} EFI_CPU_MICROCODE_EXTENDED_TABLE_HEADER; 52ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan 53ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fantypedef struct { 54ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan UINT32 ProcessorSignature; 55ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan UINT32 ProcessorFlag; 56ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan UINT32 ProcessorChecksum; 57ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan} EFI_CPU_MICROCODE_EXTENDED_TABLE; 58ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan 59ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan/** 60ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan Detect whether specified processor can find matching microcode patch and load it. 61ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan 62ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan**/ 63ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff FanVOID 64ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff FanMicrocodeDetect ( 65ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan VOID 66ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan ); 67ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan 68ea0f431cec51247658901a4f65ae76d6bbdd96e9Jeff Fan#endif 69