IN EFI_IA32_REGISTER_SET *Regs\r
)\r
{\r
+ UINT32 *VectorBase;\r
+\r
Regs->X.Flags.Reserved1 = 1;\r
Regs->X.Flags.Reserved2 = 0;\r
Regs->X.Flags.Reserved3 = 0;\r
Regs->X.Flags.IF = 0;\r
Regs->X.Flags.TF = 0;\r
Regs->X.Flags.CF = 0;\r
-\r
+ //\r
+ // The base address of legacy interrupt vector table is 0.\r
+ // We use this base address to get the legacy interrupt handler.\r
+ //\r
+ VectorBase = 0;\r
+ \r
return InternalLegacyBiosFarCall (\r
This,\r
- (UINT16) (((UINT32 *)NULL)[BiosInt] >> 16),\r
- (UINT16) ((UINT32 *)NULL)[BiosInt],\r
+ (UINT16) ((VectorBase)[BiosInt] >> 16),\r
+ (UINT16) (VectorBase)[BiosInt],\r
Regs,\r
&Regs->X.Flags,\r
sizeof (Regs->X.Flags)\r
mThunkContext.RealModeState = NULL;\r
\r
//\r
- // End critical section\r
+ // Enable and restore rate of DXE Timer\r
//\r
- gBS->RestoreTPL (OriginalTpl);\r
+ Private->Timer->SetTimerPeriod (Private->Timer, TimerPeriod);\r
\r
//\r
- // Enable and restore rate of DXE Timer\r
+ // End critical section\r
//\r
- Private->Timer->SetTimerPeriod (Private->Timer, TimerPeriod);\r
+ gBS->RestoreTPL (OriginalTpl);\r
\r
//\r
// Restore interrupt of debug timer\r