diff options
author | attilio <attilio@FreeBSD.org> | 2013-05-07 22:49:56 +0000 |
---|---|---|
committer | attilio <attilio@FreeBSD.org> | 2013-05-07 22:49:56 +0000 |
commit | e5932eeddb01068933c489eda23465fdcf8335b6 (patch) | |
tree | 9d79e1b9702db440ee4b948b518451163ec25f7b /sys/x86 | |
parent | b24a52ec9e4e733ae0b5b5932af72cf6fc7d5752 (diff) | |
download | FreeBSD-src-e5932eeddb01068933c489eda23465fdcf8335b6.zip FreeBSD-src-e5932eeddb01068933c489eda23465fdcf8335b6.tar.gz |
Add functions to do ACPI System Locality Information Table parsing
and printing at boot.
For reference on table informations and purposes please review ACPI specs.
Sponsored by: EMC / Isilon storage division
Obtained from: jeff
Reviewed by: jhb (earlier version)
Diffstat (limited to 'sys/x86')
-rw-r--r-- | sys/x86/acpica/srat.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/sys/x86/acpica/srat.c b/sys/x86/acpica/srat.c index 8737688..c2d7268 100644 --- a/sys/x86/acpica/srat.c +++ b/sys/x86/acpica/srat.c @@ -331,6 +331,48 @@ srat_walk_table(acpi_subtable_handler *handler, void *arg) acpi_walk_subtables(srat + 1, (char *)srat + srat->Header.Length, handler, arg); } + +static void +acpi_handle_slit(ACPI_TABLE_SLIT *slit) +{ + UINT64 i, j; + + printf("ACPI System Locality Information Table: %ju localities\n", + (uintmax_t)slit->LocalityCount); + printf(" "); + for (i = 0; i < slit->LocalityCount; i++) + printf(" %3ju", (uintmax_t)i); + printf("\n +"); + for (i = 0; i < slit->LocalityCount; i++) + printf("----"); + printf("\n"); + for (i = 0; i < slit->LocalityCount; i++) { + printf(" %3ju |", (uintmax_t)i); + for (j = 0; j < slit->LocalityCount; j++) + printf(" %3u", + slit->Entry[i * slit->LocalityCount + j]); + printf("\n"); + } +} + +static void +parse_slit(void *arg __unused) +{ + ACPI_TABLE_SLIT *slit; + vm_paddr_t slit_physaddr; + + if (resource_disabled("slit", 0)) + return; + + slit_physaddr = acpi_find_table(ACPI_SIG_SLIT); + if (slit_physaddr == 0) + return; + slit = acpi_map_table(slit_physaddr, ACPI_SIG_SLIT); + acpi_handle_slit(slit); + acpi_unmap_table(slit); +} + +SYSINIT(parse_slit, SI_SUB_VM - 1, SI_ORDER_SECOND, parse_slit, NULL); /* * Setup per-CPU ACPI IDs. |