]> git.proxmox.com Git - mirror_edk2.git/commitdiff
PcAtChipsetPkg HPET Timer DXE Driver: Update CPU Arch Protocol.SetTimerPeriod() to...
authorrsun3 <rsun3@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 25 Nov 2011 01:59:50 +0000 (01:59 +0000)
committerrsun3 <rsun3@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 25 Nov 2011 01:59:50 +0000 (01:59 +0000)
Signed-off-by: rsun3
Reviewed-by: li-elvin
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12778 6f19259b-4bc3-4df7-8a09-765794883524

PcAtChipsetPkg/HpetTimerDxe/HpetTimer.c

index 4f165bdc521dd8f52b0e1068a2a675b9e3f419e5..b9bf080c74ea03b9b600887b9254137aef51888f 100644 (file)
@@ -492,9 +492,10 @@ TimerDriverSetTimerPeriod (
   IN UINT64                   TimerPeriod\r
   )\r
 {\r
-  UINT64  MainCounter;\r
-  UINT64  Delta;\r
-  UINT64  CurrentComparator;\r
+  UINT64                         MainCounter;\r
+  UINT64                         Delta;\r
+  UINT64                         CurrentComparator;\r
+  HPET_TIMER_MSI_ROUTE_REGISTER  HpetTimerMsiRoute;\r
   \r
   //\r
   // Disable HPET timer when adjusting the timer period\r
@@ -576,6 +577,13 @@ TimerDriverSetTimerPeriod (
     // Enable HPET Timer interrupt generation\r
     //\r
     if (mTimerConfiguration.Bits.MsiInterruptCapablity != 0 && FeaturePcdGet (PcdHpetMsiEnable)) {\r
+      //\r
+      // Program MSI Address and MSI Data values in the selected HPET Timer\r
+      // Program HPET register with APIC ID of current BSP in case BSP has been switched\r
+      //\r
+      HpetTimerMsiRoute.Bits.Address = GetApicMsiAddress ();\r
+      HpetTimerMsiRoute.Bits.Value   = (UINT32)GetApicMsiValue (PcdGet8 (PcdHpetLocalApicVector), LOCAL_APIC_DELIVERY_MODE_LOWEST_PRIORITY, FALSE, FALSE);\r
+      HpetWrite (HPET_TIMER_MSI_ROUTE_OFFSET + mTimerIndex * HPET_TIMER_STRIDE, HpetTimerMsiRoute.Uint64);\r
       //\r
       // Enable HPET MSI Interrupt\r
       //\r
@@ -583,8 +591,9 @@ TimerDriverSetTimerPeriod (
     } else {\r
       //\r
       // Enable timer interrupt through I/O APIC\r
+      // Program IOAPIC register with APIC ID of current BSP in case BSP has been switched\r
       //\r
-      IoApicEnableInterrupt (mTimerIrq, TRUE);\r
+      IoApicConfigureInterrupt (mTimerIrq, PcdGet8 (PcdHpetLocalApicVector), IO_APIC_DELIVERY_MODE_LOWEST_PRIORITY, TRUE, FALSE);\r
     }\r
 \r
     //\r