RFC: https://bugzilla.tianocore.org/show_bug.cgi?id=3429 In Tdx BSP may issues commands to APs for some task, for example, to accept pages paralelly. BSP also need to wait until all the APs have done the task. TdxMailboxLib wraps these common funtions for BSP. 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>
		
			
				
	
	
		
			77 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
 | 
						|
  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
 | 
						|
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef TDX_MAILBOX_LIB_H_
 | 
						|
#define TDX_MAILBOX_LIB_H_
 | 
						|
 | 
						|
#include <Library/BaseLib.h>
 | 
						|
#include <Uefi/UefiBaseType.h>
 | 
						|
#include <Uefi/UefiSpec.h>
 | 
						|
#include <Pi/PiPeiCis.h>
 | 
						|
#include <Library/DebugLib.h>
 | 
						|
#include <Protocol/DebugSupport.h>
 | 
						|
 | 
						|
/**
 | 
						|
  This function will be called by BSP to get the CPU number.
 | 
						|
 | 
						|
  @retval   CPU number
 | 
						|
**/
 | 
						|
UINT32
 | 
						|
EFIAPI
 | 
						|
GetCpusNum (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Get the address of Td mailbox.
 | 
						|
**/
 | 
						|
volatile VOID *
 | 
						|
EFIAPI
 | 
						|
GetTdxMailBox (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This function will be called by BSP to wakeup APs the are spinning on mailbox
 | 
						|
  in protected mode
 | 
						|
 | 
						|
  @param[in] Command          Command to send APs
 | 
						|
  @param[in] WakeupVector     If used, address for APs to start executing
 | 
						|
  @param[in] WakeArgsX        Args to pass to APs for excuting commands
 | 
						|
**/
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
MpSendWakeupCommand (
 | 
						|
  IN UINT16  Command,
 | 
						|
  IN UINT64  WakeupVector,
 | 
						|
  IN UINT64  WakeupArgs1,
 | 
						|
  IN UINT64  WakeupArgs2,
 | 
						|
  IN UINT64  WakeupArgs3,
 | 
						|
  IN UINT64  WakeupArgs4
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  BSP wait until all the APs arriving. It means the task triggered by BSP is started.
 | 
						|
**/
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
MpSerializeStart (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  BSP wait until all the APs arriving. It means the task triggered by BSP is ended.
 | 
						|
**/
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
MpSerializeEnd (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
#endif
 |