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