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