mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-11-03 22:54:50 +00:00 
			
		
		
		
	https://bugzilla.tianocore.org/show_bug.cgi?id=1373 Replace BSD 2-Clause License with BSD+Patent License. This change is based on the following emails: https://lists.01.org/pipermail/edk2-devel/2019-February/036260.html https://lists.01.org/pipermail/edk2-devel/2018-October/030385.html RFCs with detailed process for the license change: V3: https://lists.01.org/pipermail/edk2-devel/2019-March/038116.html V2: https://lists.01.org/pipermail/edk2-devel/2019-March/037669.html V1: https://lists.01.org/pipermail/edk2-devel/2019-March/037500.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Jian J Wang <jian.j.wang@intel.com>
		
			
				
	
	
		
			145 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Publishes ESRT table from Firmware Management Protocol instances
 | 
						|
 | 
						|
  Copyright (c) 2016, Microsoft Corporation
 | 
						|
  Copyright (c) 2018, Intel Corporation. All rights reserved.<BR>
 | 
						|
 | 
						|
  All rights reserved.
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#include <Uefi.h>
 | 
						|
#include <Library/BaseLib.h>
 | 
						|
#include <Library/BaseMemoryLib.h>
 | 
						|
#include <Library/DebugLib.h>
 | 
						|
#include <Protocol/FirmwareManagement.h>
 | 
						|
#include <Guid/SystemResourceTable.h>
 | 
						|
 | 
						|
/**
 | 
						|
  Function to print a single ESRT Entry (ESRE) to the debug console.
 | 
						|
 | 
						|
  Print Format:
 | 
						|
  | 00000000-0000-0000-0000-000000000000 | SSSSSSSSSSSS | 0x00000000 | 0x00000000 | 0x00000000 | 0x00000000 | 0x00000000 |
 | 
						|
 | 
						|
  @param[in]  Entry  - Pointer to an ESRE entry
 | 
						|
  @retval  EFI_SUCCESS
 | 
						|
                        EFI_INVALID_PARAMETER
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
PrintOutEsrtEntry (
 | 
						|
  IN EFI_SYSTEM_RESOURCE_ENTRY  *Entry
 | 
						|
  )
 | 
						|
{
 | 
						|
  if (Entry == NULL) {
 | 
						|
    DEBUG ((DEBUG_INFO, "| ERROR:  Invalid resource entry pointer                           "));
 | 
						|
    DEBUG ((DEBUG_INFO, "                                                    |\n"));
 | 
						|
    return EFI_INVALID_PARAMETER;
 | 
						|
  }
 | 
						|
 | 
						|
  //
 | 
						|
  // GUID FW Class (36 chars plus table formatting)
 | 
						|
  //
 | 
						|
  DEBUG ((DEBUG_INFO, "| %g |", &Entry->FwClass));
 | 
						|
 | 
						|
  //
 | 
						|
  // Entry Type (12 chars plus table formatting)
 | 
						|
  //
 | 
						|
  switch (Entry->FwType) {
 | 
						|
  case (ESRT_FW_TYPE_SYSTEMFIRMWARE) :
 | 
						|
    DEBUG ((DEBUG_INFO, " System FW    |"));
 | 
						|
    break;
 | 
						|
  case (ESRT_FW_TYPE_DEVICEFIRMWARE) :
 | 
						|
    DEBUG ((DEBUG_INFO, " Device FW    |"));
 | 
						|
    break;
 | 
						|
  case (ESRT_FW_TYPE_UEFIDRIVER) :
 | 
						|
    DEBUG ((DEBUG_INFO, " Uefi Driver  |"));
 | 
						|
    break;
 | 
						|
  case (ESRT_FW_TYPE_UNKNOWN) :
 | 
						|
    DEBUG ((DEBUG_INFO, " Unknown Type |"));
 | 
						|
    break;
 | 
						|
  default:
 | 
						|
    DEBUG ((DEBUG_INFO, " ? 0x%8X |", Entry->FwType));
 | 
						|
    break;
 | 
						|
  }
 | 
						|
 | 
						|
  //
 | 
						|
  // FW Version (10 char UINT32 string plus table formatting)
 | 
						|
  // Lowest Supported Version (10 char UINT32 string plus table formatting)
 | 
						|
  // Capsule Flags (10 char UINT32 string plus table formatting)
 | 
						|
  // Last Attempt Version (10 char UINT32 string plus table formatting)
 | 
						|
  // Last Attempt Status (10 char UINT32 string plus table formatting)
 | 
						|
  //
 | 
						|
  DEBUG ((DEBUG_INFO,
 | 
						|
    " 0x%8X | 0x%8X | 0x%8X | 0x%8X | 0x%8X |\n",
 | 
						|
    Entry->FwVersion,
 | 
						|
    Entry->LowestSupportedFwVersion,
 | 
						|
    Entry->CapsuleFlags,
 | 
						|
    Entry->LastAttemptVersion,
 | 
						|
    Entry->LastAttemptStatus
 | 
						|
    ));
 | 
						|
 | 
						|
  return EFI_SUCCESS;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Function to print the ESRT table to the debug console.
 | 
						|
 | 
						|
  @param[in]  Table  - Pointer to the ESRT table
 | 
						|
**/
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
PrintTable (
 | 
						|
  IN EFI_SYSTEM_RESOURCE_TABLE  *Table
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_SYSTEM_RESOURCE_ENTRY  *Entry;
 | 
						|
  UINTN                      Index;
 | 
						|
 | 
						|
  Entry = (EFI_SYSTEM_RESOURCE_ENTRY *)(((UINT8 *)Table) + sizeof (EFI_SYSTEM_RESOURCE_TABLE));
 | 
						|
 | 
						|
  //
 | 
						|
  // Print ESRT table information
 | 
						|
  //
 | 
						|
  DEBUG ((DEBUG_INFO, "ESRT Table Information:\n"));
 | 
						|
  if (Table == NULL) {
 | 
						|
    DEBUG ((DEBUG_INFO, "ERROR:  Invalid table pointer\n"));
 | 
						|
    return;
 | 
						|
  }
 | 
						|
 | 
						|
  DEBUG ((DEBUG_INFO, "+--------------------------------------------------------+\n"));
 | 
						|
  DEBUG ((DEBUG_INFO, "| Firmware Resource Count          : 0x%08x          |\n",  Table->FwResourceCount));
 | 
						|
  DEBUG ((DEBUG_INFO, "| Firmware Resource Count Max      : 0x%08x          |\n",  Table->FwResourceCountMax));
 | 
						|
  DEBUG ((DEBUG_INFO, "| Firmware Resource Entry Version  : 0x%016x  |\n",         Table->FwResourceVersion));
 | 
						|
  DEBUG ((DEBUG_INFO, "+--------------------------------------------------------+\n"));
 | 
						|
 | 
						|
  //
 | 
						|
  // Print table entry information
 | 
						|
  //
 | 
						|
  DEBUG ((DEBUG_INFO, "ESRT Table Entries:\n"));
 | 
						|
  if (Table->FwResourceVersion != EFI_SYSTEM_RESOURCE_TABLE_FIRMWARE_RESOURCE_VERSION) {
 | 
						|
    DEBUG ((DEBUG_INFO, "ERROR:  Unsupported Resource Entry Version\n"));
 | 
						|
    return;
 | 
						|
  }
 | 
						|
 | 
						|
  DEBUG ((DEBUG_INFO, "+--------------------------------------+--------------+------------"));
 | 
						|
  DEBUG ((DEBUG_INFO, "+------------+------------+------------+------------+\n"));
 | 
						|
  DEBUG ((DEBUG_INFO, "|                                      |              |            "));
 | 
						|
  DEBUG ((DEBUG_INFO, "| Lowest     |            | Last       | Last       |\n"));
 | 
						|
  DEBUG ((DEBUG_INFO, "|                                      | Firmware     |            "));
 | 
						|
  DEBUG ((DEBUG_INFO, "| Supported  | Capsule    | Attempted  | Attempted  |\n"));
 | 
						|
  DEBUG ((DEBUG_INFO, "| CLASS GUID                           | Type         | Version    "));
 | 
						|
  DEBUG ((DEBUG_INFO, "| Version    | Flags      | Version    | Status     |\n"));
 | 
						|
  DEBUG ((DEBUG_INFO, "+--------------------------------------+--------------+------------"));
 | 
						|
  DEBUG ((DEBUG_INFO, "+------------+------------+------------+------------+\n"));
 | 
						|
 | 
						|
  for (Index = 0; Index < Table->FwResourceCount; Index++) {
 | 
						|
    PrintOutEsrtEntry (&(Entry[Index]));
 | 
						|
  }
 | 
						|
 | 
						|
  DEBUG ((DEBUG_INFO, "+--------------------------------------+--------------+------------"));
 | 
						|
  DEBUG ((DEBUG_INFO, "+------------+------------+------------+------------+\n"));
 | 
						|
}
 | 
						|
 |