background image

10-32 Vol. 3A

ADVANCED PROGRAMMABLE INTERRUPT CONTROLLER (APIC)

APIC.TPR[bits 7:4] = CR8[bits 3:0], APIC.TPR[bits 3:0] = 0. A read of CR8 returns a 64-bit value which is the 
value of TPR[bits 7:4], zero extended to 64 bits.

There are no ordering mechanisms between direct updates of the APIC.TPR and CR8. Operating software should 
implement either direct APIC TPR updates or CR8 style TPR updates but not mix them. Software can use a serial-
izing instruction (for example, CPUID) to serialize updates between MOV CR8 and stores to the APIC.

10.9 SPURIOUS 

INTERRUPT

A special situation may occur when a processor raises its task priority to be greater than or equal to the level of the 
interrupt for which the processor INTR signal is currently being asserted. If at the time the INTA cycle is issued, the 
interrupt that was to be dispensed has become masked (programmed by software), the local APIC will deliver a 
spurious-interrupt vector. Dispensing the spurious-interrupt vector does not affect the ISR, so the handler for this 
vector should return without an EOI.
The vector number for the spurious-interrupt vector is specified in the spurious-interrupt vector register (see 
Figure 10-23). The functions of the fields in this register are as follows:
Spurious Vector

Determines the vector number to be delivered to the processor when the local APIC generates 

a spurious vector. 

(Pentium 4 and Intel Xeon processors.) Bits 0 through 7 of the this field are programmable by 

software. 

(P6 family and Pentium processors). Bits 4 through 7 of the this field are programmable by 

software, and bits 0 through 3 are hardwired to logical ones. Software writes to bits 0 through 
3 have no effect.

APIC Software Enable/Disable

Allows software to temporarily enable (1) or disable (0) the local APIC (see Section 10.4.3, 

“Enabling or Disabling the Local APIC”).

Focus Processor Checking

Determines if focus processor checking is enabled (0) or disabled (1) when using the lowest-

priority delivery mode. In Pentium 4 and Intel Xeon processors, this bit is reserved and should 
be cleared to 0.

Suppress EOI Broadcasts

Determines whether an EOI for a level-triggered interrupt causes EOI messages to be broad-

cast to the I/O APICs (0) or not (1). See Section 10.8.5. The default value for this bit is 0, indi-
cating that EOI broadcasts are performed. This bit is reserved to 0 if the processor does not 
support EOI-broadcast suppression.

NOTE

Do not program an LVT or IOAPIC RTE with a spurious vector even if you set the mask bit. A 
spurious vector ISR does not do an EOI. If for some reason an interrupt is generated by an LVT or 
RTE entry, the bit in the in-service register will be left set for the spurious vector. This will mask all 
interrupts at the same or lower priority

10.10  APIC BUS MESSAGE PASSING MECHANISM AND

PROTOCOL (P6 FAMILY, PENTIUM PROCESSORS)

The Pentium 4 and Intel Xeon processors pass messages among the local and I/O APICs on the system bus, using 
the system bus message passing mechanism and protocol.
The P6 family and Pentium processors, pass messages among the local and I/O APICs on the serial APIC bus, as 
follows. Because only one message can be sent at a time on the APIC bus, the I/O APIC and local APICs employ a 
“rotating priority” arbitration protocol to gain permission to send a message on the APIC bus. One or more APICs 
may start sending their messages simultaneously. At the beginning of every message, each APIC presents the type 
of the message it is sending and its current arbitration priority on the APIC bus. This information is used for arbi-