BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3863 There are 3 variants of PlatformPei in OvmfPkg: - OvmfPkg/PlatformPei - OvmfPkg/XenPlatformPei - OvmfPkg/Bhyve/PlatformPei/PlatformPei.inf These PlatformPeis can share many common codes, such as Cmos / Hob / Memory / Platform related functions. This commit (and its following several patches) are to create a PlatformInitLib which wraps the common code called in above PlatformPeis. In this initial version of PlatformInitLib, below Cmos related functions are introduced: - PlatformCmosRead8 - PlatformCmosWrite8 - PlatformDebugDumpCmos They correspond to the functions in OvmfPkg/PlatformPei: - CmosRead8 - CmosWrite8 - DebugDumpCmos Considering this PlatformInitLib will be used in SEC phase, global variables and dynamic PCDs are avoided. We use PlatformInfoHob to exchange information between functions. EFI_HOB_PLATFORM_INFO is the data struct which contains the platform information, such as HostBridgeDevId, BootMode, S3Supported, SmmSmramRequire, etc. After PlatformInitLib is created, OvmfPkg/PlatformPei is refactored with this library. Cc: Ard Biesheuvel <ardb+tianocore@kernel.org> Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Brijesh Singh <brijesh.singh@amd.com> Cc: Erdem Aktas <erdemaktas@google.com> Cc: James Bottomley <jejb@linux.ibm.com> Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Tom Lendacky <thomas.lendacky@amd.com> Cc: Gerd Hoffmann <kraxel@redhat.com> Acked-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Jiewen Yao <jiewen.yao@intel.com> Signed-off-by: Min Xu <min.m.xu@intel.com>
		
			
				
	
	
		
			82 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  PC/AT CMOS access routines
 | 
						|
 | 
						|
  Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#include <Library/PlatformInitLib.h>
 | 
						|
#include <Library/DebugLib.h>
 | 
						|
#include "Library/IoLib.h"
 | 
						|
 | 
						|
/**
 | 
						|
  Reads 8-bits of CMOS data.
 | 
						|
 | 
						|
  Reads the 8-bits of CMOS data at the location specified by Index.
 | 
						|
  The 8-bit read value is returned.
 | 
						|
 | 
						|
  @param  Index  The CMOS location to read.
 | 
						|
 | 
						|
  @return The value read.
 | 
						|
 | 
						|
**/
 | 
						|
UINT8
 | 
						|
EFIAPI
 | 
						|
PlatformCmosRead8 (
 | 
						|
  IN      UINTN  Index
 | 
						|
  )
 | 
						|
{
 | 
						|
  IoWrite8 (0x70, (UINT8)Index);
 | 
						|
  return IoRead8 (0x71);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Writes 8-bits of CMOS data.
 | 
						|
 | 
						|
  Writes 8-bits of CMOS data to the location specified by Index
 | 
						|
  with the value specified by Value and returns Value.
 | 
						|
 | 
						|
  @param  Index  The CMOS location to write.
 | 
						|
  @param  Value  The value to write to CMOS.
 | 
						|
 | 
						|
  @return The value written to CMOS.
 | 
						|
 | 
						|
**/
 | 
						|
UINT8
 | 
						|
EFIAPI
 | 
						|
PlatformCmosWrite8 (
 | 
						|
  IN      UINTN  Index,
 | 
						|
  IN      UINT8  Value
 | 
						|
  )
 | 
						|
{
 | 
						|
  IoWrite8 (0x70, (UINT8)Index);
 | 
						|
  IoWrite8 (0x71, Value);
 | 
						|
  return Value;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
   Dump the CMOS content
 | 
						|
 */
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
PlatformDebugDumpCmos (
 | 
						|
  VOID
 | 
						|
  )
 | 
						|
{
 | 
						|
  UINT32  Loop;
 | 
						|
 | 
						|
  DEBUG ((DEBUG_INFO, "CMOS:\n"));
 | 
						|
 | 
						|
  for (Loop = 0; Loop < 0x80; Loop++) {
 | 
						|
    if ((Loop % 0x10) == 0) {
 | 
						|
      DEBUG ((DEBUG_INFO, "%02x:", Loop));
 | 
						|
    }
 | 
						|
 | 
						|
    DEBUG ((DEBUG_INFO, " %02x", PlatformCmosRead8 (Loop)));
 | 
						|
    if ((Loop % 0x10) == 0xf) {
 | 
						|
      DEBUG ((DEBUG_INFO, "\n"));
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |