Dear Expert, I see in file OvmfPkg\Sec\SecMain.c, line 810: // // Initialize Local APIC Timer hardware and disable Local APIC Timer // interrupts before initializing the Debug Agent and the debug timer is // enabled. // InitializeApicTimer (0, MAX_UINT32, TRUE, 5); DisableApicTimerInterrupt (); Ovmf initializes apic timer and give it a vector number 5, according to "Intel® 64 and IA-32 Architectures Software Developer’s Manual", vol 3, 10.5.2 Valid Interrupt Vectors:
When an interrupt vector in the range of 0 to 15 is sent or received through the local APIC, the APIC indicates an illegal vector in its Error Status Register (see Section 10.5.3, “Error Handling”). The Intel 64 and IA-32 architec- tures reserve vectors 16 through 31 for predefined interrupts, exceptions, and Intel-reserved encodings (see Table 6-1). However, the local APIC does not treat vectors in this range as illegal. When an illegal vector value (0 to 15) is written to an LVT entry and the delivery mode is Fixed (bits 8-11 equal 0), the APIC may signal an illegal vector error, without regard to whether the mask bit is set or whether an interrupt is actually seen on the input. So here "vector 5" is a fake value, right? we just want to let timer be running, and we can fill it with 6, 7, 8, also? If next function "DisableApicTimerInterrupt()" does not invoke, a interrupt will be occurred when current timer value down to Zero? And I see CPU Interrupt 5 is "BOUND Range Exceeded Exception" for BOUND instruction. Thanks. ------------------ BR winddy_zhang _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel