REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the OvmfPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Andrew Fish <afish@apple.com>
		
			
				
	
	
		
			129 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
| 
 | |
|   A hook-in library for MdeModulePkg/Universal/SmbiosDxe, in order to set
 | |
|   gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosVersion (and possibly other PCDs)
 | |
|   just before SmbiosDxe consumes them.
 | |
| 
 | |
|   Copyright (C) 2013, 2015, Red Hat, Inc.
 | |
|   Copyright (c) 2008 - 2012, Intel Corporation. All rights reserved.<BR>
 | |
| 
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| 
 | |
| #include <IndustryStandard/SmBios.h>
 | |
| 
 | |
| #include <Base.h>
 | |
| #include <Library/BaseMemoryLib.h>
 | |
| #include <Library/DebugLib.h>
 | |
| #include <Library/PcdLib.h>
 | |
| #include <Library/QemuFwCfgLib.h>
 | |
| 
 | |
| typedef union {
 | |
|   SMBIOS_TABLE_ENTRY_POINT        V2;
 | |
|   SMBIOS_TABLE_3_0_ENTRY_POINT    V3;
 | |
| } QEMU_SMBIOS_ANCHOR;
 | |
| 
 | |
| RETURN_STATUS
 | |
| EFIAPI
 | |
| DetectSmbiosVersion (
 | |
|   VOID
 | |
|   )
 | |
| {
 | |
|   FIRMWARE_CONFIG_ITEM  Anchor, Tables;
 | |
|   UINTN                 AnchorSize, TablesSize;
 | |
|   QEMU_SMBIOS_ANCHOR    QemuAnchor;
 | |
|   UINT16                SmbiosVersion;
 | |
|   RETURN_STATUS         PcdStatus;
 | |
| 
 | |
|   if (PcdGetBool (PcdQemuSmbiosValidated)) {
 | |
|     //
 | |
|     // Some other module, linked against this library, has already performed
 | |
|     // the task at hand. This should never happen, but it's easy to handle;
 | |
|     // just exit early.
 | |
|     //
 | |
|     return RETURN_SUCCESS;
 | |
|   }
 | |
| 
 | |
|   if (RETURN_ERROR (
 | |
|         QemuFwCfgFindFile (
 | |
|           "etc/smbios/smbios-anchor",
 | |
|           &Anchor,
 | |
|           &AnchorSize
 | |
|           )
 | |
|         ) ||
 | |
|       RETURN_ERROR (
 | |
|         QemuFwCfgFindFile (
 | |
|           "etc/smbios/smbios-tables",
 | |
|           &Tables,
 | |
|           &TablesSize
 | |
|           )
 | |
|         ) ||
 | |
|       (TablesSize == 0))
 | |
|   {
 | |
|     return RETURN_SUCCESS;
 | |
|   }
 | |
| 
 | |
|   QemuFwCfgSelectItem (Anchor);
 | |
| 
 | |
|   switch (AnchorSize) {
 | |
|     case sizeof QemuAnchor.V2:
 | |
|       QemuFwCfgReadBytes (AnchorSize, &QemuAnchor);
 | |
| 
 | |
|       if ((QemuAnchor.V2.MajorVersion != 2) ||
 | |
|           (QemuAnchor.V2.TableLength != TablesSize) ||
 | |
|           (CompareMem (QemuAnchor.V2.AnchorString, "_SM_", 4) != 0) ||
 | |
|           (CompareMem (QemuAnchor.V2.IntermediateAnchorString, "_DMI_", 5) != 0))
 | |
|       {
 | |
|         return RETURN_SUCCESS;
 | |
|       }
 | |
| 
 | |
|       SmbiosVersion = (UINT16)(QemuAnchor.V2.MajorVersion << 8 |
 | |
|                                QemuAnchor.V2.MinorVersion);
 | |
|       break;
 | |
| 
 | |
|     case sizeof QemuAnchor.V3:
 | |
|       QemuFwCfgReadBytes (AnchorSize, &QemuAnchor);
 | |
| 
 | |
|       if ((QemuAnchor.V3.MajorVersion != 3) ||
 | |
|           (QemuAnchor.V3.TableMaximumSize != TablesSize) ||
 | |
|           (CompareMem (QemuAnchor.V3.AnchorString, "_SM3_", 5) != 0))
 | |
|       {
 | |
|         return RETURN_SUCCESS;
 | |
|       }
 | |
| 
 | |
|       SmbiosVersion = (UINT16)(QemuAnchor.V3.MajorVersion << 8 |
 | |
|                                QemuAnchor.V3.MinorVersion);
 | |
| 
 | |
|       DEBUG ((
 | |
|         DEBUG_INFO,
 | |
|         "%a: SMBIOS 3.x DocRev from QEMU: 0x%02x\n",
 | |
|         __FUNCTION__,
 | |
|         QemuAnchor.V3.DocRev
 | |
|         ));
 | |
|       PcdStatus = PcdSet8S (PcdSmbiosDocRev, QemuAnchor.V3.DocRev);
 | |
|       ASSERT_RETURN_ERROR (PcdStatus);
 | |
|       break;
 | |
| 
 | |
|     default:
 | |
|       return RETURN_SUCCESS;
 | |
|   }
 | |
| 
 | |
|   DEBUG ((
 | |
|     DEBUG_INFO,
 | |
|     "%a: SMBIOS version from QEMU: 0x%04x\n",
 | |
|     __FUNCTION__,
 | |
|     SmbiosVersion
 | |
|     ));
 | |
|   PcdStatus = PcdSet16S (PcdSmbiosVersion, SmbiosVersion);
 | |
|   ASSERT_RETURN_ERROR (PcdStatus);
 | |
| 
 | |
|   //
 | |
|   // SMBIOS platform drivers can now fetch and install
 | |
|   // "etc/smbios/smbios-tables" from QEMU.
 | |
|   //
 | |
|   PcdStatus = PcdSetBoolS (PcdQemuSmbiosValidated, TRUE);
 | |
|   ASSERT_RETURN_ERROR (PcdStatus);
 | |
|   return RETURN_SUCCESS;
 | |
| }
 |