Home | History | Annotate | Download | only in X64
      1 /*++
      2 
      3 Copyright (c) 2005 - 2006, Intel Corporation. All rights reserved.<BR>
      4 This program and the accompanying materials
      5 are licensed and made available under the terms and conditions of the BSD License
      6 which accompanies this distribution.  The full text of the license may be found at
      7 http://opensource.org/licenses/bsd-license.php
      8 
      9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     11 
     12 Module Name:
     13 
     14   CpuFuncs.h
     15 
     16 Abstract:
     17 
     18 --*/
     19 
     20 #ifndef _CPU_FUNCS_H_
     21 #define _CPU_FUNCS_H_
     22 
     23 #define EFI_CPUID_SIGNATURE         0x0
     24 #define EFI_CPUID_VERSION_INFO      0x1
     25 #define EFI_CPUID_CACHE_INFO        0x2
     26 #define EFI_CPUID_SERIAL_NUMBER     0x3
     27 #define EFI_CPUID_EXTENDED_FUNCTION 0x80000000
     28 #define EFI_CPUID_EXTENDED_CPU_SIG  0x80000001
     29 #define EFI_CPUID_BRAND_STRING1     0x80000002
     30 #define EFI_CPUID_BRAND_STRING2     0x80000003
     31 #define EFI_CPUID_BRAND_STRING3     0x80000004
     32 
     33 //
     34 // CPUID version information masks
     35 // Note: leaving masks here is for the compatibility
     36 //       use EfiCpuVersion (...) instead
     37 //
     38 
     39 #define EFI_CPUID_FAMILY                      0x0F00
     40 #define EFI_CPUID_MODEL                       0x00F0
     41 #define EFI_CPUID_STEPPING                    0x000F
     42 
     43 #define EFI_CPUID_PENTIUM_M                   0x0600
     44 #define EFI_CPUID_BANIAS                      0x0090
     45 #define EFI_CPUID_DOTHAN                      0x00D0
     46 #define EFI_CPUID_NETBURST                    0x0F00
     47 
     48 #define EFI_MSR_IA32_PLATFORM_ID              0x17
     49 #define EFI_MSR_IA32_APIC_BASE                0x1B
     50 #define EFI_MSR_EBC_HARD_POWERON              0x2A
     51 #define EFI_MSR_EBC_SOFT_POWERON              0x2B
     52 #define BINIT_DRIVER_DISABLE                  0x40
     53 #define INTERNAL_MCERR_DISABLE                0x20
     54 #define INITIATOR_MCERR_DISABLE               0x10
     55 #define EFI_MSR_EBC_FREQUENCY_ID              0x2C
     56 #define EFI_MSR_IA32_BIOS_UPDT_TRIG           0x79
     57 #define EFI_MSR_IA32_BIOS_SIGN_ID             0x8B
     58 #define EFI_MSR_PSB_CLOCK_STATUS              0xCD
     59 #define EFI_APIC_GLOBAL_ENABLE                0x800
     60 #define EFI_MSR_IA32_MISC_ENABLE              0x1A0
     61 #define LIMIT_CPUID_MAXVAL_ENABLE_BIT         0x00400000
     62 #define AUTOMATIC_THERMAL_CONTROL_ENABLE_BIT  0x00000008
     63 #define COMPATIBLE_FPU_OPCODE_ENABLE_BIT      0x00000004
     64 #define LOGICAL_PROCESSOR_PRIORITY_ENABLE_BIT 0x00000002
     65 #define FAST_STRING_ENABLE_BIT                0x00000001
     66 
     67 #define EFI_CACHE_VARIABLE_MTRR_BASE          0x200
     68 #define EFI_CACHE_VARIABLE_MTRR_END           0x20F
     69 #define EFI_CACHE_IA32_MTRR_DEF_TYPE          0x2FF
     70 #define EFI_CACHE_VALID_ADDRESS               0xFFFFFF000
     71 #define EFI_CACHE_MTRR_VALID                  0x800
     72 #define EFI_CACHE_FIXED_MTRR_VALID            0x400
     73 #define EFI_MSR_VALID_MASK                    0xFFFFFFFFF
     74 
     75 #define EFI_IA32_MTRR_FIX64K_00000            0x250
     76 #define EFI_IA32_MTRR_FIX16K_80000            0x258
     77 #define EFI_IA32_MTRR_FIX16K_A0000            0x259
     78 #define EFI_IA32_MTRR_FIX4K_C0000             0x268
     79 #define EFI_IA32_MTRR_FIX4K_C8000             0x269
     80 #define EFI_IA32_MTRR_FIX4K_D0000             0x26A
     81 #define EFI_IA32_MTRR_FIX4K_D8000             0x26B
     82 #define EFI_IA32_MTRR_FIX4K_E0000             0x26C
     83 #define EFI_IA32_MTRR_FIX4K_E8000             0x26D
     84 #define EFI_IA32_MTRR_FIX4K_F0000             0x26E
     85 #define EFI_IA32_MTRR_FIX4K_F8000             0x26F
     86 
     87 #define EFI_IA32_MCG_CAP                      0x179
     88 #define EFI_IA32_MCG_CTL                      0x17B
     89 #define EFI_IA32_MC0_CTL                      0x400
     90 #define EFI_IA32_MC0_STATUS                   0x401
     91 
     92 #define EFI_CACHE_UNCACHEABLE                 0
     93 #define EFI_CACHE_WRITECOMBINING              1
     94 #define EFI_CACHE_WRITETHROUGH                4
     95 #define EFI_CACHE_WRITEPROTECTED              5
     96 #define EFI_CACHE_WRITEBACK                   6
     97 
     98 //
     99 // Combine f(FamilyId), m(Model), s(SteppingId) to a single 32 bit number
    100 //
    101 #define EfiMakeCpuVersion(f, m, s)         \
    102   (((UINT32) (f) << 16) | ((UINT32) (m) << 8) | ((UINT32) (s)))
    103 
    104 
    105 typedef struct {
    106   UINT32  HeaderVersion;
    107   UINT32  UpdateRevision;
    108   UINT32  Date;
    109   UINT32  ProcessorId;
    110   UINT32  Checksum;
    111   UINT32  LoaderRevision;
    112   UINT32  ProcessorFlags;
    113   UINT32  DataSize;
    114   UINT32  TotalSize;
    115   UINT8   Reserved[12];
    116 } EFI_CPU_MICROCODE_HEADER;
    117 
    118 typedef struct {
    119   UINT32  ExtSigCount;
    120   UINT32  ExtChecksum;
    121   UINT8   Reserved[12];
    122   UINT32  ProcessorId;
    123   UINT32  ProcessorFlags;
    124   UINT32  Checksum;
    125 } EFI_CPU_MICROCODE_EXT_HEADER;
    126 
    127 typedef struct {
    128   UINT32  RegEax;
    129   UINT32  RegEbx;
    130   UINT32  RegEcx;
    131   UINT32  RegEdx;
    132 } EFI_CPUID_REGISTER;
    133 
    134 VOID
    135 EfiWriteMsr (
    136   IN  UINT32      Input,
    137   IN  UINT64      Value
    138   )
    139 /*++
    140 
    141 Routine Description:
    142 
    143   Write Cpu MSR
    144 
    145 Arguments:
    146 
    147   Input  -The index value to select the register
    148   Value  -The value to write to the selected register
    149 
    150 Returns:
    151 
    152    None
    153 
    154 --*/
    155 ;
    156 
    157 UINT64
    158 EfiReadMsr (
    159   IN  UINT32      Input
    160   )
    161 /*++
    162 
    163 Routine Description:
    164 
    165   Read Cpu MSR.
    166 
    167 Arguments:
    168 
    169   Input: -The index value to select the register
    170 
    171 Returns:
    172 
    173    Return the read data
    174 
    175 --*/
    176 ;
    177 
    178 VOID
    179 EfiCpuid (
    180   IN  UINT32                    RegEax,
    181   OUT EFI_CPUID_REGISTER        *Reg
    182   )
    183 /*++
    184 
    185 Routine Description:
    186 
    187   Get the Cpu info by execute the CPUID instruction.
    188 
    189 Arguments:
    190 
    191    RegEax  -The input value to put into register EAX
    192    Reg     -The Output value
    193 
    194 Returns:
    195 
    196    None
    197 
    198 --*/
    199 ;
    200 
    201 VOID
    202 EfiCpuVersion (
    203   IN   UINT16  *FamilyId,    OPTIONAL
    204   IN   UINT8   *Model,       OPTIONAL
    205   IN   UINT8   *SteppingId,  OPTIONAL
    206   IN   UINT8   *Processor    OPTIONAL
    207   )
    208 /*++
    209 
    210 Routine Description:
    211   Extract CPU detail version infomation
    212 
    213 Arguments:
    214   FamilyId   - FamilyId, including ExtendedFamilyId
    215   Model      - Model, including ExtendedModel
    216   SteppingId - SteppingId
    217   Processor  - Processor
    218 
    219 --*/
    220 ;
    221 
    222 UINT64
    223 EfiReadTsc (
    224   VOID
    225   )
    226 /*++
    227 
    228 Routine Description:
    229 
    230   Read Time stamp.
    231 
    232 Arguments:
    233 
    234   None
    235 
    236 Returns:
    237 
    238    Return the read data
    239 
    240 --*/
    241 ;
    242 VOID
    243 EfiCpuidExt (
    244   IN  UINT32                 RegisterInEax,
    245   IN  UINT32                 CacheLevel,
    246   OUT EFI_CPUID_REGISTER     *Regs
    247   )
    248 /*++
    249 Routine Description:
    250   When RegisterInEax != 4, the functionality is the same as EfiCpuid.
    251   When RegisterInEax == 4, the function return the deterministic cache
    252   parameters by excuting the CPUID instruction
    253 Arguments:
    254    RegisterInEax: - The input value to put into register EAX
    255    CacheLevel:      - The deterministic cache level
    256    Regs:          - The Output value
    257 Returns:
    258    None
    259 --*/
    260 ;
    261 
    262 #endif
    263