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

Reply via email to