]> git.proxmox.com Git - mirror_edk2.git/blob - Vlv2TbltDevicePkg/Library/CpuIA32Lib/EfiCpuVersion.c
935f11e87136b47364f602f041bbc719a5d74a61
[mirror_edk2.git] / Vlv2TbltDevicePkg / Library / CpuIA32Lib / EfiCpuVersion.c
1 /** @file
2
3 Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
4
5 SPDX-License-Identifier: BSD-2-Clause-Patent
6
7
8
9 Module Name:
10
11
12 EfiCpuVersion.c
13
14 Abstract:
15
16 Provide cpu version extract considering extended family & model ID.
17 --*/
18
19 #include <Library/CpuIA32.h>
20
21 /**
22 Extract CPU detail version infomation
23
24 @param FamilyId FamilyId, including ExtendedFamilyId
25 @param Model Model, including ExtendedModel
26 @param SteppingId SteppingId
27 @param Processor Processor
28
29 **/
30 VOID
31 EFIAPI
32 EfiCpuVersion (
33 IN OUT UINT16 *FamilyId, OPTIONAL
34 IN OUT UINT8 *Model, OPTIONAL
35 IN OUT UINT8 *SteppingId, OPTIONAL
36 IN OUT UINT8 *Processor OPTIONAL
37 )
38
39 {
40 EFI_CPUID_REGISTER Register;
41 UINT8 TempFamilyId;
42
43 EfiCpuid (EFI_CPUID_VERSION_INFO, &Register);
44
45 if (SteppingId != NULL) {
46 *SteppingId = (UINT8) (Register.RegEax & 0xF);
47 }
48
49 if (Processor != NULL) {
50 *Processor = (UINT8) ((Register.RegEax >> 12) & 0x3);
51 }
52
53 if (Model != NULL || FamilyId != NULL) {
54 TempFamilyId = (UINT8) ((Register.RegEax >> 8) & 0xF);
55
56 if (Model != NULL) {
57 *Model = (UINT8) ((Register.RegEax >> 4) & 0xF);
58 if (TempFamilyId == 0x6 || TempFamilyId == 0xF) {
59 *Model = (UINT8) (*Model | ((Register.RegEax >> 12) & 0xF0));
60 }
61 }
62
63 if (FamilyId != NULL) {
64 *FamilyId = TempFamilyId;
65 if (TempFamilyId == 0xF) {
66 *FamilyId = (UINT8 ) (*FamilyId + (UINT16) ((Register.RegEax >> 20) & 0xFF));
67 }
68 }
69 }
70 }