Local Advanced Programmable Interrupt Controller — Änderungen 2475 → 2476

Zeile 1: Zeile 1:
 
Die '''LAPIC''' oder '''Local APIC''' (= '''Local Advanced Programmable Interrupt Controller''') nimmt [[Interrupt | 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 [[IPI | IPIs]] zu senden und zu empfangen.
 
Die '''LAPIC''' oder '''Local APIC''' (= '''Local Advanced Programmable Interrupt Controller''') nimmt [[Interrupt | 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 [[IPI | 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.
 +
 +
{| border="1"
 +
! Offset || Name
 +
|-
 +
| 0x20  || [[#Local APIC ID Register | Local APIC ID Register]]
 +
|-
 +
| 0x30  || [[#Local APIC Version Register | 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.
 +
<br />
 +
 +
=== Local APIC ID Register ===
 +
P6-Prozessorfamilie und Pentium-Prozessoren:
 +
{| border="1" cellpadding="2"
 +
! 31-28      || 27-24        || 23-0
 +
|-
 +
| Reserviert || Local APIC ID || Reserviert
 +
|}
 +
 +
Pentium4, IntelXeon und spätere Prozessoren:
 +
{| border="1" cellpadding="2"
 +
! 31-24        || 23-0
 +
|-
 +
| Local APIC ID || Reserviert
 +
|}
 +
<br />
 +
 +
=== Local APIC Version Register ===
 +
{| border="1" cellpadding="2"
 +
! 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.
 +
<br />
  
 
== Weblinks ==
 
== Weblinks ==