123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345 |
- /*++
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
- Module Name:
- CpuIA32.h
- Abstract:
- --*/
- #ifndef _CPU_IA32_H
- #define _CPU_IA32_H
- typedef struct {
- UINT32 RegEax;
- UINT32 RegEbx;
- UINT32 RegEcx;
- UINT32 RegEdx;
- } EFI_CPUID_REGISTER;
- typedef struct {
- UINT32 HeaderVersion;
- UINT32 UpdateRevision;
- UINT32 Date;
- UINT32 ProcessorId;
- UINT32 Checksum;
- UINT32 LoaderRevision;
- UINT32 ProcessorFlags;
- UINT32 DataSize;
- UINT32 TotalSize;
- UINT8 Reserved[12];
- } EFI_CPU_MICROCODE_HEADER;
- typedef struct {
- UINT32 ExtendedSignatureCount;
- UINT32 ExtendedTableChecksum;
- UINT8 Reserved[12];
- } EFI_CPU_MICROCODE_EXTENDED_TABLE_HEADER;
- typedef struct {
- UINT32 ProcessorSignature;
- UINT32 ProcessorFlag;
- UINT32 ProcessorChecksum;
- } EFI_CPU_MICROCODE_EXTENDED_TABLE;
- typedef struct {
- UINT32 Stepping : 4;
- UINT32 Model : 4;
- UINT32 Family : 4;
- UINT32 Type : 2;
- UINT32 Reserved1 : 2;
- UINT32 ExtendedModel : 4;
- UINT32 ExtendedFamily : 8;
- UINT32 Reserved2 : 4;
- } EFI_CPU_VERSION;
- #define EFI_CPUID_SIGNATURE 0x0
- #define EFI_CPUID_VERSION_INFO 0x1
- #define EFI_CPUID_CACHE_INFO 0x2
- #define EFI_CPUID_SERIAL_NUMBER 0x3
- #define EFI_CPUID_EXTENDED_FUNCTION 0x80000000
- #define EFI_CPUID_EXTENDED_CPU_SIG 0x80000001
- #define EFI_CPUID_BRAND_STRING1 0x80000002
- #define EFI_CPUID_BRAND_STRING2 0x80000003
- #define EFI_CPUID_BRAND_STRING3 0x80000004
- #define EFI_MSR_IA32_PLATFORM_ID 0x17
- #define EFI_MSR_IA32_APIC_BASE 0x1B
- #define EFI_MSR_EBC_HARD_POWERON 0x2A
- #define EFI_MSR_EBC_SOFT_POWERON 0x2B
- #define BINIT_DRIVER_DISABLE 0x40
- #define INTERNAL_MCERR_DISABLE 0x20
- #define INITIATOR_MCERR_DISABLE 0x10
- #define EFI_MSR_EBC_FREQUENCY_ID 0x2C
- #define EFI_MSR_IA32_BIOS_UPDT_TRIG 0x79
- #define EFI_MSR_IA32_BIOS_SIGN_ID 0x8B
- #define EFI_MSR_PSB_CLOCK_STATUS 0xCD
- #define EFI_APIC_GLOBAL_ENABLE 0x800
- #define EFI_MSR_IA32_MISC_ENABLE 0x1A0
- #define LIMIT_CPUID_MAXVAL_ENABLE_BIT 0x00400000
- #define AUTOMATIC_THERMAL_CONTROL_ENABLE_BIT 0x00000008
- #define COMPATIBLE_FPU_OPCODE_ENABLE_BIT 0x00000004
- #define LOGICAL_PROCESSOR_PRIORITY_ENABLE_BIT 0x00000002
- #define FAST_STRING_ENABLE_BIT 0x00000001
- #define EFI_CACHE_VARIABLE_MTRR_BASE 0x200
- #define EFI_CACHE_VARIABLE_MTRR_END 0x20F
- #define EFI_CACHE_IA32_MTRR_DEF_TYPE 0x2FF
- #define EFI_CACHE_MTRR_VALID 0x800
- #define EFI_CACHE_FIXED_MTRR_VALID 0x400
- #define EFI_CACHE_VALID_ADDRESS 0xFFFFFF000
- #define EFI_MSR_VALID_MASK 0xFFFFFFFFF
- #define EFI_CACHE_VALID_EXTENDED_ADDRESS 0xFFFFFFFFFF000
- #define EFI_MSR_VALID_EXTENDED_MASK 0xFFFFFFFFFFFFF
- #define EFI_IA32_MTRR_FIX64K_00000 0x250
- #define EFI_IA32_MTRR_FIX16K_80000 0x258
- #define EFI_IA32_MTRR_FIX16K_A0000 0x259
- #define EFI_IA32_MTRR_FIX4K_C0000 0x268
- #define EFI_IA32_MTRR_FIX4K_C8000 0x269
- #define EFI_IA32_MTRR_FIX4K_D0000 0x26A
- #define EFI_IA32_MTRR_FIX4K_D8000 0x26B
- #define EFI_IA32_MTRR_FIX4K_E0000 0x26C
- #define EFI_IA32_MTRR_FIX4K_E8000 0x26D
- #define EFI_IA32_MTRR_FIX4K_F0000 0x26E
- #define EFI_IA32_MTRR_FIX4K_F8000 0x26F
- #define EFI_IA32_MCG_CAP 0x179
- #define EFI_IA32_MCG_CTL 0x17B
- #define EFI_IA32_MC0_CTL 0x400
- #define EFI_IA32_MC0_STATUS 0x401
- #define EFI_IA32_PERF_STATUS 0x198
- #define EFI_IA32_PERF_CTL 0x199
- #define EFI_CACHE_UNCACHEABLE 0
- #define EFI_CACHE_WRITECOMBINING 1
- #define EFI_CACHE_WRITETHROUGH 4
- #define EFI_CACHE_WRITEPROTECTED 5
- #define EFI_CACHE_WRITEBACK 6
- //
- // Combine f(FamilyId), m(Model), s(SteppingId) to a single 32 bit number
- //
- #define EfiMakeCpuVersion(f, m, s) \
- (((UINT32) (f) << 16) | ((UINT32) (m) << 8) | ((UINT32) (s)))
- /**
- Halt the Cpu
- @param[in] None
- @retval None
- **/
- VOID
- EFIAPI
- EfiHalt (
- VOID
- );
- /**
- Write back and invalidate the Cpu cache
- @param[in] None
- @retval None
- **/
- VOID
- EFIAPI
- EfiWbinvd (
- VOID
- );
- /**
- Invalidate the Cpu cache
- @param[in] None
- @retval None
- **/
- VOID
- EFIAPI
- EfiInvd (
- VOID
- );
- /**
- Get the Cpu info by execute the CPUID instruction
- @param[in] RegisterInEax The input value to put into register EAX
- @param[in] Regs The Output value
- @retval None
- **/
- VOID
- EFIAPI
- EfiCpuid (
- IN UINT32 RegisterInEax,
- OUT EFI_CPUID_REGISTER *Regs
- );
- /**
- When RegisterInEax != 4, the functionality is the same as EfiCpuid.
- When RegisterInEax == 4, the function return the deterministic cache
- parameters by excuting the CPUID instruction.
- @param[in] RegisterInEax The input value to put into register EAX.
- @param[in] CacheLevel The deterministic cache level.
- @param[in] Regs The Output value.
- @retval None
- **/
- VOID
- EFIAPI
- EfiCpuidExt (
- IN UINT32 RegisterInEax,
- IN UINT32 CacheLevel,
- OUT EFI_CPUID_REGISTER *Regs
- );
- /**
- Read Cpu MSR
- @param[in] Index The index value to select the register
- @retval Return the read data
- **/
- UINT64
- EFIAPI
- EfiReadMsr (
- IN UINT32 Index
- );
- /**
- Write Cpu MSR
- @param[in] Index The index value to select the register
- @param[in] Value The value to write to the selected register
- @retval None
- **/
- VOID
- EFIAPI
- EfiWriteMsr (
- IN UINT32 Index,
- IN UINT64 Value
- );
- /**
- Read Time stamp
- @param[in] None
- @retval Return the read data
- **/
- UINT64
- EFIAPI
- EfiReadTsc (
- VOID
- );
- /**
- Writing back and invalidate the cache,then diable it
- @param[in] None
- @retval None
- **/
- VOID
- EFIAPI
- EfiDisableCache (
- VOID
- );
- /**
- Invalidate the cache,then Enable it
- @param[in] None
- @retval None
- **/
- VOID
- EFIAPI
- EfiEnableCache (
- VOID
- );
- /**
- Get Eflags
- @param[in] None
- @retval Return the Eflags value
- **/
- UINT32
- EFIAPI
- EfiGetEflags (
- VOID
- );
- /**
- Disable Interrupts
- @param[in] None
- @retval None
- **/
- VOID
- EFIAPI
- EfiDisableInterrupts (
- VOID
- );
- /**
- Enable Interrupts
- @param[in] None
- @retval None
- **/
- VOID
- EFIAPI
- EfiEnableInterrupts (
- VOID
- );
- /**
- Extract CPU detail version infomation
- @param[in] FamilyId FamilyId, including ExtendedFamilyId
- @param[in] Model Model, including ExtendedModel
- @param[in] SteppingId SteppingId
- @param[in] Processor Processor
- **/
- VOID
- EFIAPI
- EfiCpuVersion (
- IN UINT16 *FamilyId, OPTIONAL
- IN UINT8 *Model, OPTIONAL
- IN UINT8 *SteppingId, OPTIONAL
- IN UINT8 *Processor OPTIONAL
- );
- #endif
|