summaryrefslogtreecommitdiffstats
path: root/UefiCpuPkg/Include/Guid/MpInformation2.h
blob: 7a25fcc2f391a6519fe687af91abafac1b1b1e12 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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.<BR>

  SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef MP_INFORMATION2_H_
#define MP_INFORMATION2_H_

#include <Protocol/MpService.h>
#include <PiPei.h>
#include <Ppi/SecPlatformInformation.h>

#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