1 /** @file
2   This file declares Sec Platform Information2 PPI.
3 
4   This service is the primary handoff state into the PEI Foundation.
5   This service abstracts platform-specific information for many CPU's.
6 
7 Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
8 This program and the accompanying materials are licensed and made available under
9 the terms and conditions of the BSD License that accompanies this distribution.
10 The full text of the license may be found at
11 http://opensource.org/licenses/bsd-license.php.
12 
13 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
14 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
15 
16   @par Revision Reference:
17   This PPI is defined in PI Version 1.4.
18 
19 **/
20 
21 #ifndef __SEC_PLATFORM_INFORMATION2_PPI_H__
22 #define __SEC_PLATFORM_INFORMATION2_PPI_H__
23 
24 #include <Ppi/SecPlatformInformation.h>
25 
26 #define EFI_SEC_PLATFORM_INFORMATION2_GUID \
27   { \
28     0x9e9f374b, 0x8f16, 0x4230, {0x98, 0x24, 0x58, 0x46, 0xee, 0x76, 0x6a, 0x97 } \
29   }
30 
31 typedef struct _EFI_SEC_PLATFORM_INFORMATION2_PPI EFI_SEC_PLATFORM_INFORMATION2_PPI;
32 
33 ///
34 /// EFI_SEC_PLATFORM_INFORMATION_CPU.
35 ///
36 typedef struct {
37   UINT32                               CpuLocation;
38   EFI_SEC_PLATFORM_INFORMATION_RECORD  InfoRecord;
39 } EFI_SEC_PLATFORM_INFORMATION_CPU;
40 
41 ///
42 /// EFI_SEC_PLATFORM_INFORMATION_RECORD2.
43 ///
44 typedef struct {
45   ///
46   /// The CPU location would be the local APIC ID
47   ///
48   UINT32                               NumberOfCpus;
49   EFI_SEC_PLATFORM_INFORMATION_CPU     CpuInstance[1];
50 } EFI_SEC_PLATFORM_INFORMATION_RECORD2;
51 
52 /**
53   This interface conveys state information out of the Security (SEC) phase into PEI.
54 
55   This service is published by the SEC phase.
56 
57   @param  PeiServices                The pointer to the PEI Services Table.
58   @param  StructureSize              The pointer to the variable describing size of the input buffer.
59   @param  PlatformInformationRecord2 The pointer to the EFI_SEC_PLATFORM_INFORMATION_RECORD2.
60 
61   @retval EFI_SUCCESS                The data was successfully returned.
62   @retval EFI_BUFFER_TOO_SMALL       The buffer was too small. The current buffer size needed to
63                                      hold the record is returned in StructureSize.
64 
65 **/
66 typedef
67 EFI_STATUS
68 (EFIAPI *EFI_SEC_PLATFORM_INFORMATION2)(
69   IN CONST  EFI_PEI_SERVICES                     **PeiServices,
70   IN OUT    UINT64                               *StructureSize,
71   OUT       EFI_SEC_PLATFORM_INFORMATION_RECORD2 *PlatformInformationRecord2
72 );
73 
74 ///
75 /// This service abstracts platform-specific information for many CPU's.
76 /// It is the multi-processor equivalent of PlatformInformation for
77 /// implementations that synchronize all CPU's in the SEC phase.
78 ///
79 struct _EFI_SEC_PLATFORM_INFORMATION2_PPI {
80   EFI_SEC_PLATFORM_INFORMATION2  PlatformInformation2;
81 };
82 
83 extern EFI_GUID gEfiSecPlatformInformation2PpiGuid;
84 
85 #endif
86