diff --git a/UefiCpuPkg/Include/Guid/MpInformation2.h b/UefiCpuPkg/Include/Guid/MpInformation2.h new file mode 100644 index 0000000000..7a25fcc2f3 --- /dev/null +++ b/UefiCpuPkg/Include/Guid/MpInformation2.h @@ -0,0 +1,56 @@ +/** @file + EFI MP information protocol provides a lightweight MP_SERVICES_PROTOCOL. + + MP information protocol only provides static information of MP processor. + + If SwitchBSP or Enable/DisableAP in MP service is called between the HOB + production and HOB consumption, EFI_PROCESSOR_INFORMATION.StatusFlag field + in this HOB may be invalidated. + + Copyright (c) 2023, Intel Corporation. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef MP_INFORMATION2_H_ +#define MP_INFORMATION2_H_ + +#include +#include +#include + +#define MP_INFORMATION2_HOB_REVISION 1 + +#define MP_INFORMATION2_GUID \ + { \ + 0x417a7f64, 0xf4e9, 0x4b32, {0x84, 0x6a, 0x5c, 0xc4, 0xd8, 0x62, 0x18, 0x79} \ + } + +typedef struct { + EFI_PROCESSOR_INFORMATION ProcessorInfo; + // + // Add more fields in future + // +} MP_INFORMATION2_ENTRY; + +typedef struct { + UINT16 NumberOfProcessors; + UINT16 EntrySize; + UINT8 Version; + UINT8 Reserved[3]; + UINT64 ProcessorIndex; + MP_INFORMATION2_ENTRY Entry[0]; +} MP_INFORMATION2_HOB_DATA; + +// +// Producer of MP_INFORMATION2_HOB_DATA should assign sizeof (MP_INFORMATION2_ENTRY) to MP_INFORMATION2_HOB_DATA.EntrySize +// Consumer of MP_INFORMATION2_HOB_DATA should use below macro or similar logic to get the individual entry +// as the entry structure might be updated to include more information. +// +#define GET_MP_INFORMATION_ENTRY(MpInfoHobData, Index) \ + (MP_INFORMATION2_ENTRY *)((UINTN)&((MP_INFORMATION2_HOB_DATA *)(MpInfoHobData))->Entry + (MpInfoHobData)->EntrySize * Index) + +extern EFI_GUID gMpInformationHobGuid2; + +#endif diff --git a/UefiCpuPkg/UefiCpuPkg.dec b/UefiCpuPkg/UefiCpuPkg.dec index 0b5431dbf7..61bd34ef17 100644 --- a/UefiCpuPkg/UefiCpuPkg.dec +++ b/UefiCpuPkg/UefiCpuPkg.dec @@ -85,6 +85,9 @@ ## Include/Guid/SmmBaseHob.h gSmmBaseHobGuid = { 0xc2217ba7, 0x03bb, 0x4f63, {0xa6, 0x47, 0x7c, 0x25, 0xc5, 0xfc, 0x9d, 0x73 }} + ## Include/Guid/MpInformation2.h + gMpInformationHobGuid2 = { 0x417a7f64, 0xf4e9, 0x4b32, {0x84, 0x6a, 0x5c, 0xc4, 0xd8, 0x62, 0x18, 0x79 }} + [Protocols] ## Include/Protocol/SmmCpuService.h gEfiSmmCpuServiceProtocolGuid = { 0x1d202cab, 0xc8ab, 0x4d5c, { 0x94, 0xf7, 0x3c, 0xfc, 0xc0, 0xd3, 0xd3, 0x35 }}