/** @file
|
Header file for Cpu Common Lib implementation.
|
|
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
**/
|
|
#ifndef _CPU_COMMON_LIB_H_
|
#define _CPU_COMMON_LIB_H_
|
|
typedef UINT32 CPU_RESET_TYPE;
|
|
#define NO_RESET 0
|
#define WARM_RESET BIT0
|
#define COLD_RESET (BIT0 | BIT1)
|
|
|
/**
|
Set up flags in CR4 for XMM instruction enabling
|
**/
|
VOID
|
EFIAPI
|
XmmInit (
|
VOID
|
);
|
|
/**
|
Enable "Machine Check Enable"
|
**/
|
VOID
|
EFIAPI
|
EnableMce (
|
VOID
|
);
|
|
/**
|
Mtrr Synch Up Entry
|
**/
|
UINTN
|
EFIAPI
|
MpMtrrSynchUpEntry (
|
VOID
|
);
|
|
/**
|
Mtrr Synch Up Exit
|
**/
|
VOID
|
EFIAPI
|
MpMtrrSynchUpExit (
|
UINTN Cr4
|
);
|
|
/**
|
This procedure sends an IPI to the designated processor in
|
the requested delivery mode with the requested vector.
|
|
@param[in] ApicID - APIC ID of processor.
|
@param[in] VectorNumber - Vector number.
|
@param[in] DeliveryMode - I/O APIC Interrupt Deliver Modes
|
|
@retval EFI_INVALID_PARAMETER - Input paramters were not correct.
|
@retval EFI_NOT_READY - There was a pending interrupt
|
@retval EFI_SUCCESS - Interrupt sent successfully
|
**/
|
EFI_STATUS
|
EFIAPI
|
CpuSendIpi (
|
IN UINT32 ApicID,
|
IN UINTN VectorNumber,
|
IN UINTN DeliveryMode
|
);
|
|
|
/**
|
Get APIC ID of processor
|
|
@retval APIC ID of processor
|
**/
|
UINT32
|
GetCpuApicId (
|
VOID
|
);
|
|
/**
|
Programs XAPIC registers.
|
|
@param[in] Bsp - Is this BSP?
|
**/
|
VOID
|
ProgramXApic (
|
BOOLEAN Bsp
|
);
|
|
/**
|
This function is to disable BIOS Write Protect in SMM phase.
|
**/
|
VOID
|
EFIAPI
|
CpuSmmDisableBiosWriteProtect (
|
VOID
|
);
|
|
/**
|
This function is to enable BIOS Write Protect in SMM phase.
|
**/
|
VOID
|
EFIAPI
|
CpuSmmEnableBiosWriteProtect (
|
VOID
|
);
|
|
/**
|
This function returns the maximum number of cores supported in this physical processor package.
|
|
@retval Maximum number of supported cores in the package.
|
**/
|
UINT8
|
GetMaxSupportedCoreCount (
|
VOID
|
);
|
|
/**
|
This function returns the actual factory-configured number of threads per core,
|
and actual factory-configured number of cores in this physical processor package.
|
|
@param[out] *ThreadsPerCore - variable that will store Maximum enabled threads per core
|
@param[out] *NumberOfCores - variable that will store Maximum enabled cores per die
|
**/
|
VOID
|
GetSupportedCount (
|
OUT UINT16 *ThreadsPerCore, OPTIONAL
|
OUT UINT16 *NumberOfCores OPTIONAL
|
);
|
|
|
/**
|
Check to see if the executing thread is BSP
|
|
@retval TRUE Executing thread is BSP
|
@retval FALSE Executing thread is AP
|
**/
|
BOOLEAN
|
IsBsp (
|
VOID
|
);
|
|
|
/**
|
Return TRUE if PRMRR base was already set on this core and was
|
locked
|
|
@retval TRUE PRMRR base was already set
|
@retval FALSE PRMRR base wasn't set
|
**/
|
BOOLEAN
|
IsPrmrrAlreadySet (
|
VOID
|
);
|
|
/**
|
Check if this is non-core processor - HT AP thread
|
|
@retval TRUE if this is HT AP thread
|
@retval FALSE if this is core thread
|
**/
|
BOOLEAN
|
IsSecondaryThread (
|
VOID
|
);
|
|
|
/**
|
Based on ResetType, perform warm or cold reset using PCH reset PPI.
|
|
@param[in] ResetType - CPU_RESET_TYPE to indicate which reset should be performed.
|
|
@retval EFI_SUCCESS - Function successful (system should already reset).
|
@retval EFI_UNSUPPORTED - Reset type unsupported.
|
**/
|
EFI_STATUS
|
PerformWarmOrColdReset (
|
IN CPU_RESET_TYPE ResetType
|
);
|
#endif
|