Introduce lapic enumerators, which is used to probe and config lapics
authorMichael Neumann <mneumann@ntecs.de>
Wed, 13 Oct 2010 20:52:58 +0000 (22:52 +0200)
committerMichael Neumann <mneumann@ntecs.de>
Wed, 13 Oct 2010 20:52:58 +0000 (22:52 +0200)
commit91903a05a379e840a80f2091f37064f19ab35d36
tree18e848ca0cad97e5ddd95e063d47d722cecff4a0
parentc2abfdd7b037093f3b344d4eb4a6a20d2bc81ee2
Introduce lapic enumerators, which is used to probe and config lapics

Apply commit 281d9482759bb075834585452a405a8c9bdf18e7 for x86_64.

lapic enumerator implementation should provide two method:
lapic_probe()     -- make sure that if this enumerator is selected, later
                     lapic enumeration could work.  Return error code upon
                     failure.
lapic_enumerate() -- enumerate lapic and properly configure lapic (currently
                     only mapping lapic is needed).

lapic enumerator implementation could be registered by calling:
lapic_enumerator_register()
with lapic_enumerator struct.  The higher the priority field, the earlier
the lapic enumerator's lapic_probe method will be invoked.

Currently two lapic enumerators are implemented and registered:
- lapic enumerator using MP table
- lapic enumerator using ACPI MADT
ACPI MADT lapic enumerator has higher priority.  For testing purpose, ACPI
MADT lapic enumerator's priority could be overridden by setting tunable
hw.madt_lapic_prio to a smaller value (less than 20 currently)

Idea-from: FreeBSD
sys/platform/pc64/apic/mpapic.c
sys/platform/pc64/include/smp.h
sys/platform/pc64/x86_64/mp_machdep.c
sys/platform/pc64/x86_64/mp_madt.c