ReactOS 0.4.17-dev-1190-g4c812f4
x2apicp.h File Reference
#include <pshpack1.h>
#include <poppack.h>
Include dependency graph for x2apicp.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

union  _X2APIC_BASE_ADDRESS_REGISTER
 
union  _X2APIC_INTERRUPT_COMMAND_REGISTER
 

Macros

#define MSR_APIC_BASE   0x0000001B
 
#define X2APIC_MSR_BASE   0x00000800
 
#define X2APIC_MSR_ICR   0x00000830
 
#define X2APIC_MSR_SELF_IPI   0x0000083F
 
#define CPUID_X2APIC_FEATURE_BIT   21
 

Typedefs

typedef union _X2APIC_BASE_ADDRESS_REGISTER X2APIC_BASE_ADDRESS_REGISTER
 
typedef enum _X2APIC_REGISTER X2APIC_REGISTER
 
typedef union _X2APIC_INTERRUPT_COMMAND_REGISTER X2APIC_INTERRUPT_COMMAND_REGISTER
 

Enumerations

enum  _X2APIC_REGISTER { X2APIC_ID_REG = 0x0020 , X2APIC_EOI_REG = 0x00B0 , X2APIC_SIVR_REG = 0x00F0 , X2APIC_ICR0_REG = 0x0300 }
 

Functions

FORCEINLINE X2APIC_REGISTER X2ApicMsrFromRegister (_In_ X2APIC_REGISTER Register)
 
FORCEINLINE ULONG X2ApicRead (_In_ X2APIC_REGISTER Register)
 
FORCEINLINE VOID X2ApicWrite (_In_ X2APIC_REGISTER Register, _In_ ULONG Value)
 
FORCEINLINE VOID X2ApicWriteIcr (_In_ X2APIC_INTERRUPT_COMMAND_REGISTER IcrValue)
 
BOOLEAN NTAPI X2ApicIsSupported (VOID)
 Checks whether the current processor supports x2APIC mode.
 
VOID NTAPI X2ApicEnable (VOID)
 Switches the current processor's local APIC into x2APIC mode.
 

Macro Definition Documentation

◆ CPUID_X2APIC_FEATURE_BIT

#define CPUID_X2APIC_FEATURE_BIT   21

Definition at line 14 of file x2apicp.h.

◆ MSR_APIC_BASE

#define MSR_APIC_BASE   0x0000001B

Definition at line 10 of file x2apicp.h.

◆ X2APIC_MSR_BASE

#define X2APIC_MSR_BASE   0x00000800

Definition at line 11 of file x2apicp.h.

◆ X2APIC_MSR_ICR

#define X2APIC_MSR_ICR   0x00000830

Definition at line 12 of file x2apicp.h.

◆ X2APIC_MSR_SELF_IPI

#define X2APIC_MSR_SELF_IPI   0x0000083F

Definition at line 13 of file x2apicp.h.

Typedef Documentation

◆ X2APIC_BASE_ADDRESS_REGISTER

◆ X2APIC_INTERRUPT_COMMAND_REGISTER

◆ X2APIC_REGISTER

Enumeration Type Documentation

◆ _X2APIC_REGISTER

Enumerator
X2APIC_ID_REG 
X2APIC_EOI_REG 
X2APIC_SIVR_REG 
X2APIC_ICR0_REG 

Definition at line 33 of file x2apicp.h.

34{
35 X2APIC_ID_REG = 0x0020,
36 X2APIC_EOI_REG = 0x00B0,
37 X2APIC_SIVR_REG = 0x00F0,
38 X2APIC_ICR0_REG = 0x0300,
@ X2APIC_SIVR_REG
Definition: x2apicp.h:37
@ X2APIC_EOI_REG
Definition: x2apicp.h:36
@ X2APIC_ID_REG
Definition: x2apicp.h:35
@ X2APIC_ICR0_REG
Definition: x2apicp.h:38
enum _X2APIC_REGISTER X2APIC_REGISTER

Function Documentation

◆ X2ApicEnable()

VOID NTAPI X2ApicEnable ( VOID  )

Switches the current processor's local APIC into x2APIC mode.

Remarks
This must only be called after verifying support with X2ApicIsSupported, and before you try to do any MSR based register access.
Returns
None.

Definition at line 51 of file x2apic.c.

52{
54
55 BaseRegister.LongLong = __readmsr(MSR_APIC_BASE);
56
57 /* xAPIC (Enable) must already be set before x2APIC can be enabled */
58 BaseRegister.Enable = 1;
59 BaseRegister.EnableX2Apic = 1;
60
61 __writemsr(MSR_APIC_BASE, BaseRegister.LongLong);
62}
#define MSR_APIC_BASE
Definition: apicp.h:121
PPC_QUAL void __writemsr(const unsigned long Value)
Definition: intrin_ppc.h:748
PPC_QUAL unsigned long long __readmsr()
Definition: intrin_ppc.h:741

◆ X2ApicIsSupported()

BOOLEAN NTAPI X2ApicIsSupported ( VOID  )

Checks whether the current processor supports x2APIC mode.

Returns
TRUE if CPUID.01H:ECX.x2APIC[bit 21] is set, FALSE otherwise.

Definition at line 28 of file x2apic.c.

29{
31
33
34 return VersionInfo.Ecx.Bits.x2APIC != 0;
35}
#define CPUID_VERSION_INFO
Definition: Cpuid.h:81
OSVERSIONINFOW VersionInfo
Definition: wkssvc.c:40
PPC_QUAL void __cpuid(int CPUInfo[], const int InfoType)
Definition: intrin_ppc.h:682

◆ X2ApicMsrFromRegister()

FORCEINLINE X2APIC_REGISTER X2ApicMsrFromRegister ( _In_ X2APIC_REGISTER  Register)

Definition at line 64 of file x2apicp.h.

66{
67 return (X2APIC_REGISTER)(X2APIC_MSR_BASE + (Register / 0x10));
68}
#define X2APIC_MSR_BASE
Definition: x2apicp.h:11

Referenced by X2ApicRead(), and X2ApicWrite().

◆ X2ApicRead()

FORCEINLINE ULONG X2ApicRead ( _In_ X2APIC_REGISTER  Register)

Definition at line 72 of file x2apicp.h.

74{
76}
uint32_t ULONG
Definition: typedefs.h:59
FORCEINLINE X2APIC_REGISTER X2ApicMsrFromRegister(_In_ X2APIC_REGISTER Register)
Definition: x2apicp.h:64

◆ X2ApicWrite()

FORCEINLINE VOID X2ApicWrite ( _In_ X2APIC_REGISTER  Register,
_In_ ULONG  Value 
)

Definition at line 80 of file x2apicp.h.

83{
85}
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413

◆ X2ApicWriteIcr()

Definition at line 89 of file x2apicp.h.

91{
92 __writemsr(X2APIC_MSR_ICR, IcrValue.LongLong);
93}
#define X2APIC_MSR_ICR
Definition: x2apicp.h:12