/** @file | |
This library defines some routines that are generic for IA32 family CPU. | |
The library routines are UEFI specification compliant. | |
Copyright (c) 2020, AMD Inc. All rights reserved.<BR> | |
Copyright (c) 2021, Intel Corporation. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#include <Register/Intel/Cpuid.h> | |
#include <Register/Amd/Cpuid.h> | |
#include <Library/BaseLib.h> | |
#include <Library/CpuLib.h> | |
/** | |
Determine if the standard CPU signature is "AuthenticAMD". | |
@retval TRUE The CPU signature matches. | |
@retval FALSE The CPU signature does not match. | |
**/ | |
BOOLEAN | |
EFIAPI | |
StandardSignatureIsAuthenticAMD ( | |
VOID | |
) | |
{ | |
UINT32 RegEbx; | |
UINT32 RegEcx; | |
UINT32 RegEdx; | |
AsmCpuid (CPUID_SIGNATURE, NULL, &RegEbx, &RegEcx, &RegEdx); | |
return (RegEbx == CPUID_SIGNATURE_AUTHENTIC_AMD_EBX && | |
RegEcx == CPUID_SIGNATURE_AUTHENTIC_AMD_ECX && | |
RegEdx == CPUID_SIGNATURE_AUTHENTIC_AMD_EDX); | |
} | |
/** | |
Return the 32bit CPU family and model value. | |
@return CPUID[01h].EAX with Processor Type and Stepping ID cleared. | |
**/ | |
UINT32 | |
EFIAPI | |
GetCpuFamilyModel ( | |
VOID | |
) | |
{ | |
CPUID_VERSION_INFO_EAX Eax; | |
AsmCpuid (CPUID_VERSION_INFO, &Eax.Uint32, NULL, NULL, NULL); | |
// | |
// Mask other fields than Family and Model. | |
// | |
Eax.Bits.SteppingId = 0; | |
Eax.Bits.ProcessorType = 0; | |
Eax.Bits.Reserved1 = 0; | |
Eax.Bits.Reserved2 = 0; | |
return Eax.Uint32; | |
} | |
/** | |
Return the CPU stepping ID. | |
@return CPU stepping ID value in CPUID[01h].EAX. | |
**/ | |
UINT8 | |
EFIAPI | |
GetCpuSteppingId ( | |
VOID | |
) | |
{ | |
CPUID_VERSION_INFO_EAX Eax; | |
AsmCpuid (CPUID_VERSION_INFO, &Eax.Uint32, NULL, NULL, NULL); | |
return (UINT8)Eax.Bits.SteppingId; | |
} |