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: Laszlo Ersek <lersek@redhat.com>
		
			
				
	
	
		
			93 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Detect Xen hvmloader SMBIOS data for usage by OVMF.
 | 
						|
 | 
						|
  Copyright (c) 2011, Bei Guan <gbtju85@gmail.com>
 | 
						|
  Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
 | 
						|
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#include "SmbiosPlatformDxe.h"
 | 
						|
#include <Library/HobLib.h>
 | 
						|
#include <Guid/XenInfo.h>
 | 
						|
 | 
						|
#define XEN_SMBIOS_PHYSICAL_ADDRESS       0x000EB000
 | 
						|
#define XEN_SMBIOS_PHYSICAL_END           0x000F0000
 | 
						|
 | 
						|
/**
 | 
						|
  Validates the SMBIOS entry point structure
 | 
						|
 | 
						|
  @param  EntryPointStructure  SMBIOS entry point structure
 | 
						|
 | 
						|
  @retval TRUE   The entry point structure is valid
 | 
						|
  @retval FALSE  The entry point structure is not valid
 | 
						|
 | 
						|
**/
 | 
						|
STATIC
 | 
						|
BOOLEAN
 | 
						|
IsEntryPointStructureValid (
 | 
						|
  IN SMBIOS_TABLE_ENTRY_POINT  *EntryPointStructure
 | 
						|
  )
 | 
						|
{
 | 
						|
  UINTN                     Index;
 | 
						|
  UINT8                     Length;
 | 
						|
  UINT8                     Checksum;
 | 
						|
  UINT8                     *BytePtr;
 | 
						|
 | 
						|
  BytePtr = (UINT8*) EntryPointStructure;
 | 
						|
  Length = EntryPointStructure->EntryPointLength;
 | 
						|
  Checksum = 0;
 | 
						|
 | 
						|
  for (Index = 0; Index < Length; Index++) {
 | 
						|
    Checksum = Checksum + (UINT8) BytePtr[Index];
 | 
						|
  }
 | 
						|
 | 
						|
  if (Checksum != 0) {
 | 
						|
    return FALSE;
 | 
						|
  } else {
 | 
						|
    return TRUE;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Locates the Xen SMBIOS data if it exists
 | 
						|
 | 
						|
  @return SMBIOS_TABLE_ENTRY_POINT   Address of Xen SMBIOS data
 | 
						|
 | 
						|
**/
 | 
						|
SMBIOS_TABLE_ENTRY_POINT *
 | 
						|
GetXenSmbiosTables (
 | 
						|
  VOID
 | 
						|
  )
 | 
						|
{
 | 
						|
  UINT8                     *XenSmbiosPtr;
 | 
						|
  SMBIOS_TABLE_ENTRY_POINT  *XenSmbiosEntryPointStructure;
 | 
						|
  EFI_HOB_GUID_TYPE         *GuidHob;
 | 
						|
 | 
						|
  //
 | 
						|
  // See if a XenInfo HOB is available
 | 
						|
  //
 | 
						|
  GuidHob = GetFirstGuidHob (&gEfiXenInfoGuid);
 | 
						|
  if (GuidHob == NULL) {
 | 
						|
    return NULL;
 | 
						|
  }
 | 
						|
 | 
						|
  for (XenSmbiosPtr = (UINT8*)(UINTN) XEN_SMBIOS_PHYSICAL_ADDRESS;
 | 
						|
       XenSmbiosPtr < (UINT8*)(UINTN) XEN_SMBIOS_PHYSICAL_END;
 | 
						|
       XenSmbiosPtr += 0x10) {
 | 
						|
 | 
						|
    XenSmbiosEntryPointStructure = (SMBIOS_TABLE_ENTRY_POINT *) XenSmbiosPtr;
 | 
						|
 | 
						|
    if (!AsciiStrnCmp ((CHAR8 *) XenSmbiosEntryPointStructure->AnchorString, "_SM_", 4) &&
 | 
						|
        !AsciiStrnCmp ((CHAR8 *) XenSmbiosEntryPointStructure->IntermediateAnchorString, "_DMI_", 5) &&
 | 
						|
        IsEntryPointStructureValid (XenSmbiosEntryPointStructure)) {
 | 
						|
 | 
						|
      return XenSmbiosEntryPointStructure;
 | 
						|
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  return NULL;
 | 
						|
}
 |