2 Publishes ESRT table from Firmware Management Protocol instances
4 Copyright (c) 2016, Microsoft Corporation
5 Copyright (c) 2018, Intel Corporation. All rights reserved.<BR>
8 SPDX-License-Identifier: BSD-2-Clause-Patent
13 #include <Library/BaseLib.h>
14 #include <Library/BaseMemoryLib.h>
15 #include <Library/DebugLib.h>
16 #include <Protocol/FirmwareManagement.h>
17 #include <Guid/SystemResourceTable.h>
20 Function to print a single ESRT Entry (ESRE) to the debug console.
23 | 00000000-0000-0000-0000-000000000000 | SSSSSSSSSSSS | 0x00000000 | 0x00000000 | 0x00000000 | 0x00000000 | 0x00000000 |
25 @param[in] Entry - Pointer to an ESRE entry
32 IN EFI_SYSTEM_RESOURCE_ENTRY
*Entry
36 DEBUG ((DEBUG_INFO
, "| ERROR: Invalid resource entry pointer "));
37 DEBUG ((DEBUG_INFO
, " |\n"));
38 return EFI_INVALID_PARAMETER
;
42 // GUID FW Class (36 chars plus table formatting)
44 DEBUG ((DEBUG_INFO
, "| %g |", &Entry
->FwClass
));
47 // Entry Type (12 chars plus table formatting)
49 switch (Entry
->FwType
) {
50 case (ESRT_FW_TYPE_SYSTEMFIRMWARE
) :
51 DEBUG ((DEBUG_INFO
, " System FW |"));
53 case (ESRT_FW_TYPE_DEVICEFIRMWARE
) :
54 DEBUG ((DEBUG_INFO
, " Device FW |"));
56 case (ESRT_FW_TYPE_UEFIDRIVER
) :
57 DEBUG ((DEBUG_INFO
, " Uefi Driver |"));
59 case (ESRT_FW_TYPE_UNKNOWN
) :
60 DEBUG ((DEBUG_INFO
, " Unknown Type |"));
63 DEBUG ((DEBUG_INFO
, " ? 0x%8X |", Entry
->FwType
));
68 // FW Version (10 char UINT32 string plus table formatting)
69 // Lowest Supported Version (10 char UINT32 string plus table formatting)
70 // Capsule Flags (10 char UINT32 string plus table formatting)
71 // Last Attempt Version (10 char UINT32 string plus table formatting)
72 // Last Attempt Status (10 char UINT32 string plus table formatting)
75 " 0x%8X | 0x%8X | 0x%8X | 0x%8X | 0x%8X |\n",
77 Entry
->LowestSupportedFwVersion
,
79 Entry
->LastAttemptVersion
,
80 Entry
->LastAttemptStatus
87 Function to print the ESRT table to the debug console.
89 @param[in] Table - Pointer to the ESRT table
94 IN EFI_SYSTEM_RESOURCE_TABLE
*Table
97 EFI_SYSTEM_RESOURCE_ENTRY
*Entry
;
100 Entry
= (EFI_SYSTEM_RESOURCE_ENTRY
*)(((UINT8
*)Table
) + sizeof (EFI_SYSTEM_RESOURCE_TABLE
));
103 // Print ESRT table information
105 DEBUG ((DEBUG_INFO
, "ESRT Table Information:\n"));
107 DEBUG ((DEBUG_INFO
, "ERROR: Invalid table pointer\n"));
111 DEBUG ((DEBUG_INFO
, "+--------------------------------------------------------+\n"));
112 DEBUG ((DEBUG_INFO
, "| Firmware Resource Count : 0x%08x |\n", Table
->FwResourceCount
));
113 DEBUG ((DEBUG_INFO
, "| Firmware Resource Count Max : 0x%08x |\n", Table
->FwResourceCountMax
));
114 DEBUG ((DEBUG_INFO
, "| Firmware Resource Entry Version : 0x%016x |\n", Table
->FwResourceVersion
));
115 DEBUG ((DEBUG_INFO
, "+--------------------------------------------------------+\n"));
118 // Print table entry information
120 DEBUG ((DEBUG_INFO
, "ESRT Table Entries:\n"));
121 if (Table
->FwResourceVersion
!= EFI_SYSTEM_RESOURCE_TABLE_FIRMWARE_RESOURCE_VERSION
) {
122 DEBUG ((DEBUG_INFO
, "ERROR: Unsupported Resource Entry Version\n"));
126 DEBUG ((DEBUG_INFO
, "+--------------------------------------+--------------+------------"));
127 DEBUG ((DEBUG_INFO
, "+------------+------------+------------+------------+\n"));
128 DEBUG ((DEBUG_INFO
, "| | | "));
129 DEBUG ((DEBUG_INFO
, "| Lowest | | Last | Last |\n"));
130 DEBUG ((DEBUG_INFO
, "| | Firmware | "));
131 DEBUG ((DEBUG_INFO
, "| Supported | Capsule | Attempted | Attempted |\n"));
132 DEBUG ((DEBUG_INFO
, "| CLASS GUID | Type | Version "));
133 DEBUG ((DEBUG_INFO
, "| Version | Flags | Version | Status |\n"));
134 DEBUG ((DEBUG_INFO
, "+--------------------------------------+--------------+------------"));
135 DEBUG ((DEBUG_INFO
, "+------------+------------+------------+------------+\n"));
137 for (Index
= 0; Index
< Table
->FwResourceCount
; Index
++) {
138 PrintOutEsrtEntry (&(Entry
[Index
]));
141 DEBUG ((DEBUG_INFO
, "+--------------------------------------+--------------+------------"));
142 DEBUG ((DEBUG_INFO
, "+------------+------------+------------+------------+\n"));