Local Advanced Programmable Interrupt Controller

Aus Lowlevel
Version vom 23. Dezember 2007, 16:46 Uhr von Jgraef (Diskussion | Beiträge) (Tabelle aller Register; Local APIC ID Register und Version Register erleutert.)
Wechseln zu:Navigation,

Die LAPIC oder Local APIC (= Local Advanced Programmable Interrupt Controller) nimmt Interrupts von der I/O APIC (oder auch von der PIC) und anderen prozessorinternen Einheiten an und leitet diese an den Prozessorkern zum Abarbeiten weiter. Außerdem ist es nur über die LAPIC möglich IPIs zu senden und zu empfangen.

Register

Die Register liegen normalerweise an der Adresse 0xFEE00000, es ist allerdings sicherer diesen Wert z.B aus dem MP-Header zu entnehmen. Außerdem können sie auch umplatziert werden. Alle Register sind 32bit groß und sind 128bit-aligned.

Offset Name
0x20 Local APIC ID Register
0x30 Local APIC Version Register
0x80 Task Priority Register (TPR)
0x90 Arbitration Priority Register¹ (APR)
0xA0 Processor Priority Register (PPR)
0xB0 EOI Register
0xD0 Logical Destination Register
0xE0 Destination Format Register
0xF0 Spurious Interrupt Vector Register
0x100 In-Service Register (ISR) (0-31)
0x110 In-Service Register (ISR) (32-63)
0x120 In-Service Register (ISR) (64-95)
0x130 In-Service Register (ISR) (96:-27)
0x140 In-Service Register (ISR) (128-159)
0x150 In-Service Register (ISR) (160-191)
0x160 In-Service Register (ISR) (192-223)
0x170 In-Service Register (ISR) (224-255)
0x180 Trigger Mode Register (TMR) (0-31)
0x190 Trigger Mode Register (TMR) (32-63)
0x1A0 Trigger Mode Register (TMR) (64-95)
0x1B0 Trigger Mode Register (TMR) (96-127)
0x1C0 Trigger Mode Register (TMR) (128-159)
0x1D0 Trigger Mode Register (TMR) (160-191)
0x1E0 Trigger Mode Register (TMR) (192-223)
0x1F0 Trigger Mode Register (TMR) (224-255)
0x200 Interrupt Request Register (IRR) (0-31)
0x210 Interrupt Request Register (IRR) (32-63)
0x220 Interrupt Request Register (IRR) (64-95)
0x230 Interrupt Request Register (IRR) (96-127)
0x240 Interrupt Request Register (IRR) (128-159)
0x250 Interrupt Request Register (IRR) (160-191)
0x260 Interrupt Request Register (IRR) (192-223)
0x270 Interrupt Request Register (IRR) (224-255)
0x280 Error Status Register
0x300 Interrupt Command Register (ICR) (0-31)
0x310 Interrupt Command Register (ICR) (32-63)
0x320 LVT Timer Register
0x330 LVT Thermal Register²
0x340 LVT Performance Register³
0x350 LVT LINT0 Register
0x360 LVT LINT1 Register
0x370 LVT Error Register
0x380 Initial Count Register (für Timer)
0x390 Current Count Register (für Timer)
0x3E0 Divide Configuration Register (für Timer)

1) Nicht unterstützt in Pentium 4 und Intel Xeon Prozessoren 2) Eingeführt mit dem Pentium 4 und Intel Xeon Prozessoren. Dieses Register ist implementations-abhängig und muss in Zukunft nicht mehr vorhanden sein. 3) Eingeführt mit dem Pentium Pro Prozessor. Dieses Register ist implementations-abhängig und muss in Zukunft nicht mehr vorhanden sein.

Local APIC ID Register

P6-Prozessorfamilie und Pentium-Prozessoren:

31-28 27-24 23-0
Reserviert Local APIC ID Reserviert

Pentium4, IntelXeon und spätere Prozessoren:

31-24 23-0
Local APIC ID Reserviert


Local APIC Version Register

31-24 23-16 15-8 7-0
Reserviert Max. LVT-Einträge Reserviert Version

Wenn beim Version-Byte das HighNibble 1 ist, ist es ein Local APIC. Andernfalls ein externer APIC. Bei Pentium 4 und Intel Xeon wird als LocalApic 0x14 zurückgegeben. Bei einem externen APIC entspricht das LowNibble X dem Chip 82489DX.

Das Feld "Max. LVT-Einträge" gibt die Anzahl an maximalen LVT-Einträgen minus 1 an. Das Feld muss bei Pentium 4 und Intel Xeon also auf 5 gesetzt sein, da es maximal 6 LVT-Einträge gibt. Bei der P6-Familie gibt es maximal 5 LVT-Einträge. Pentium-Prozessoren haben nur 4 LVT-Einträge.

Weblinks