-/*++\r
-\r
-Copyright (c) 2004 - 2006, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials \r
-are licensed and made available under the terms and conditions of the BSD License \r
-which accompanies this distribution. The full text of the license may be found at \r
-http://opensource.org/licenses/bsd-license.php \r
- \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
-\r
-Module Name:\r
-\r
- EfiCpuVersion.c\r
- \r
-Abstract:\r
- \r
- Provide cpu version extract considering extended family & model ID.\r
---*/\r
-\r
-#include "CpuIA32.h"\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
-Routine Description:\r
- Extract CPU detail version infomation\r
-\r
-Arguments:\r
- FamilyId - FamilyId, including ExtendedFamilyId\r
- Model - Model, including ExtendedModel\r
- SteppingId - SteppingId\r
- Processor - Processor\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