mirror of https://github.com/acidanthera/audk.git
UefiCpuPkg: Sync the init timer count instead of current timer count
BSP should save and sync to AP the init timer count instead of current timer count. Also, BSP can check the init timer count to know if the local apic timer is enabled. Only sync the setting when it is enabled. Signed-off-by: Zhiguang Liu <zhiguang.liu@intel.com>
This commit is contained in:
parent
7033f359a9
commit
7fc08c68cd
|
@ -167,16 +167,19 @@ SaveLocalApicTimerSetting (
|
|||
IN CPU_MP_DATA *CpuMpData
|
||||
)
|
||||
{
|
||||
//
|
||||
// Record the current local APIC timer setting of BSP
|
||||
//
|
||||
GetApicTimerState (
|
||||
&CpuMpData->DivideValue,
|
||||
&CpuMpData->PeriodicMode,
|
||||
&CpuMpData->Vector
|
||||
);
|
||||
CpuMpData->CurrentTimerCount = GetApicTimerCurrentCount ();
|
||||
CpuMpData->TimerInterruptState = GetApicTimerInterruptState ();
|
||||
CpuMpData->InitTimerCount = GetApicTimerInitCount ();
|
||||
if (CpuMpData->InitTimerCount != 0) {
|
||||
//
|
||||
// Record the current local APIC timer setting of BSP
|
||||
//
|
||||
GetApicTimerState (
|
||||
&CpuMpData->DivideValue,
|
||||
&CpuMpData->PeriodicMode,
|
||||
&CpuMpData->Vector
|
||||
);
|
||||
|
||||
CpuMpData->TimerInterruptState = GetApicTimerInterruptState ();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -189,19 +192,21 @@ SyncLocalApicTimerSetting (
|
|||
IN CPU_MP_DATA *CpuMpData
|
||||
)
|
||||
{
|
||||
//
|
||||
// Sync local APIC timer setting from BSP to AP
|
||||
//
|
||||
InitializeApicTimer (
|
||||
CpuMpData->DivideValue,
|
||||
CpuMpData->CurrentTimerCount,
|
||||
CpuMpData->PeriodicMode,
|
||||
CpuMpData->Vector
|
||||
);
|
||||
//
|
||||
// Disable AP's local APIC timer interrupt
|
||||
//
|
||||
DisableApicTimerInterrupt ();
|
||||
if (CpuMpData->InitTimerCount != 0) {
|
||||
//
|
||||
// Sync local APIC timer setting from BSP to AP
|
||||
//
|
||||
InitializeApicTimer (
|
||||
CpuMpData->DivideValue,
|
||||
CpuMpData->InitTimerCount,
|
||||
CpuMpData->PeriodicMode,
|
||||
CpuMpData->Vector
|
||||
);
|
||||
//
|
||||
// Disable AP's local APIC timer interrupt
|
||||
//
|
||||
DisableApicTimerInterrupt ();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -289,7 +289,7 @@ struct _CPU_MP_DATA {
|
|||
CPU_AP_DATA *CpuData;
|
||||
volatile MP_CPU_EXCHANGE_INFO *MpCpuExchangeInfo;
|
||||
|
||||
UINT32 CurrentTimerCount;
|
||||
UINT32 InitTimerCount;
|
||||
UINTN DivideValue;
|
||||
UINT8 Vector;
|
||||
BOOLEAN PeriodicMode;
|
||||
|
|
Loading…
Reference in New Issue