1 /** @file 2 ACPI Firmware Performance Data Table (FPDT) implementation specific definitions. 3 4 Copyright (c) 2011 - 2016, Intel Corporation. All rights reserved.<BR> 5 This program and the accompanying materials 6 are licensed and made available under the terms and conditions of the BSD License 7 which accompanies this distribution. The full text of the license may be found at 8 http://opensource.org/licenses/bsd-license.php 9 10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12 13 **/ 14 15 #ifndef _FIRMWARE_PERFORMANCE_GUID_H_ 16 #define _FIRMWARE_PERFORMANCE_GUID_H_ 17 18 #include <PiPei.h> 19 #include <IndustryStandard/Acpi.h> 20 #include <Ppi/SecPerformance.h> 21 22 /// 23 /// This GUID is used for FPDT implementation specific EFI Variable, LockBox and Hob. 24 /// 25 /// EFI Variable: 26 /// GUID - gEfiFirmwarePerformanceGuid 27 /// Name - EFI_FIRMWARE_PERFORMANCE_VARIABLE_NAME 28 /// Data - FIRMWARE_PERFORMANCE_VARIABLE 29 /// 30 /// LockBox: 31 /// GUID - gEfiFirmwarePerformanceGuid 32 /// Data - EFI_ACPI_BASIC_S3_SUSPEND_PERFORMANCE_RECORD 33 /// 34 /// Hob: 35 /// GUID - gEfiFirmwarePerformanceGuid 36 /// Data - FIRMWARE_SEC_PERFORMANCE (defined in <Ppi/SecPerformance.h>) 37 /// 38 /// SMI: 39 /// GUID - gEfiFirmwarePerformanceGuid 40 /// Data - SMM_BOOT_RECORD_COMMUNICATE 41 /// 42 /// StatusCodeData: 43 /// Type - gEfiFirmwarePerformanceGuid 44 /// Data - One or more boot record 45 /// 46 #define EFI_FIRMWARE_PERFORMANCE_GUID \ 47 { \ 48 0xc095791a, 0x3001, 0x47b2, {0x80, 0xc9, 0xea, 0xc7, 0x31, 0x9f, 0x2f, 0xa4 } \ 49 } 50 51 #define EFI_FIRMWARE_PERFORMANCE_VARIABLE_NAME L"FirmwarePerformance" 52 53 /// LockBox: 54 /// GUID - gFirmwarePerformanceS3PointerGuid 55 /// Data - S3 performance table pointer 56 /// 57 #define FIRMWARE_PERFORMANCE_S3_POINTER_GUID \ 58 { \ 59 0xdc65adc, 0xa973, 0x4130, { 0x8d, 0xf0, 0x2a, 0xdb, 0xeb, 0x9e, 0x4a, 0x31 } \ 60 } 61 62 #pragma pack(1) 63 64 /// 65 /// Firmware Performance Data Table. 66 /// This structure will be installed into ACPI table as FPDT in normal boot path. 67 /// 68 typedef struct { 69 EFI_ACPI_DESCRIPTION_HEADER Header; ///< Common ACPI description table header. 70 EFI_ACPI_5_0_FPDT_BOOT_PERFORMANCE_TABLE_POINTER_RECORD BootPointerRecord; ///< Basic Boot Performance Table Pointer record. 71 EFI_ACPI_5_0_FPDT_S3_PERFORMANCE_TABLE_POINTER_RECORD S3PointerRecord; ///< S3 Performance Table Pointer record. 72 } FIRMWARE_PERFORMANCE_TABLE; 73 74 /// 75 /// S3 Performance Data Table. 76 /// This structure contains S3 performance records which will be updated in S3 77 /// suspend and S3 resume boot path. 78 /// 79 typedef struct { 80 EFI_ACPI_5_0_FPDT_PERFORMANCE_TABLE_HEADER Header; ///< Common ACPI table header. 81 EFI_ACPI_5_0_FPDT_S3_RESUME_RECORD S3Resume; ///< Basic S3 Resume performance record. 82 EFI_ACPI_5_0_FPDT_S3_SUSPEND_RECORD S3Suspend; ///< Basic S3 Suspend performance record. 83 } S3_PERFORMANCE_TABLE; 84 85 /// 86 /// Basic Boot Performance Data Table. 87 /// This structure contains BasicBoot performance record. 88 /// 89 typedef struct { 90 EFI_ACPI_5_0_FPDT_PERFORMANCE_TABLE_HEADER Header; ///< Common ACPI table header. 91 EFI_ACPI_5_0_FPDT_FIRMWARE_BASIC_BOOT_RECORD BasicBoot; ///< Basic Boot Resume performance record. 92 // 93 // one or more boot performance records. 94 // 95 } BOOT_PERFORMANCE_TABLE; 96 97 /// 98 /// Performance data pointed by Performance Pointer Record. 99 /// 100 typedef struct { 101 BOOT_PERFORMANCE_TABLE BootPerformance; ///< Basic Boot Performance. 102 S3_PERFORMANCE_TABLE S3Performance; ///< S3 performance. 103 } FIRMWARE_PERFORMANCE_RUNTIME_DATA; 104 105 /// 106 /// Variable defined for FPDT implementation. 107 /// This Variable is produced by FPDT DXE module. 108 /// 109 typedef struct { 110 EFI_PHYSICAL_ADDRESS BootPerformanceTablePointer; ///< Pointer to Boot Performance Table. 111 EFI_PHYSICAL_ADDRESS S3PerformanceTablePointer; ///< Pointer to S3 Performance Table. 112 } FIRMWARE_PERFORMANCE_VARIABLE; 113 114 #pragma pack() 115 116 // 117 // Log BOOT RECORD from SMM driver on boot time. 118 // 119 #define SMM_FPDT_FUNCTION_GET_BOOT_RECORD_SIZE 1 120 #define SMM_FPDT_FUNCTION_GET_BOOT_RECORD_DATA 2 121 #define SMM_FPDT_FUNCTION_GET_BOOT_RECORD_DATA_BY_OFFSET 3 122 123 typedef struct { 124 UINTN Function; 125 EFI_STATUS ReturnStatus; 126 UINTN BootRecordSize; 127 VOID *BootRecordData; 128 UINTN BootRecordOffset; 129 } SMM_BOOT_RECORD_COMMUNICATE; 130 131 extern EFI_GUID gEfiFirmwarePerformanceGuid; 132 extern EFI_GUID gFirmwarePerformanceS3PointerGuid; 133 134 #endif 135