+++ /dev/null
-/** @file\r
-\r
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>\r
- \r\r
- SPDX-License-Identifier: BSD-2-Clause-Patent\r
-\r
- \r\r
-\r
-Module Name:\r
-\r
-\r
- EfiCpuVersion.c\r
-\r
-Abstract:\r
-\r
- Provide cpu version extract considering extended family & model ID.\r
---*/\r
-\r
-#include <Library/CpuIA32.h>\r
-\r
-/**\r
- Extract CPU detail version infomation\r
-\r
- @param FamilyId FamilyId, including ExtendedFamilyId\r
- @param Model Model, including ExtendedModel\r
- @param SteppingId SteppingId\r
- @param Processor Processor\r
-\r
-**/\r
-VOID\r
-EFIAPI\r
-EfiCpuVersion (\r
- IN OUT UINT16 *FamilyId, OPTIONAL\r
- IN OUT UINT8 *Model, OPTIONAL\r
- IN OUT UINT8 *SteppingId, OPTIONAL\r
- IN OUT UINT8 *Processor OPTIONAL\r
- )\r
-\r
-{\r
- EFI_CPUID_REGISTER Register;\r
- UINT8 TempFamilyId;\r
-\r
- EfiCpuid (EFI_CPUID_VERSION_INFO, &Register);\r
-\r
- if (SteppingId != NULL) {\r
- *SteppingId = (UINT8) (Register.RegEax & 0xF);\r
- }\r
-\r
- if (Processor != NULL) {\r
- *Processor = (UINT8) ((Register.RegEax >> 12) & 0x3);\r
- }\r
-\r
- if (Model != NULL || FamilyId != NULL) {\r
- TempFamilyId = (UINT8) ((Register.RegEax >> 8) & 0xF);\r
-\r
- if (Model != NULL) {\r
- *Model = (UINT8) ((Register.RegEax >> 4) & 0xF);\r
- if (TempFamilyId == 0x6 || TempFamilyId == 0xF) {\r
- *Model = (UINT8) (*Model | ((Register.RegEax >> 12) & 0xF0));\r
- }\r
- }\r
-\r
- if (FamilyId != NULL) {\r
- *FamilyId = TempFamilyId;\r
- if (TempFamilyId == 0xF) {\r
- *FamilyId = (UINT8 ) (*FamilyId + (UINT16) ((Register.RegEax >> 20) & 0xFF));\r
- }\r
- }\r
- }\r
-}\r