summaryrefslogtreecommitdiffstats
path: root/sys/x86
diff options
context:
space:
mode:
authorattilio <attilio@FreeBSD.org>2013-05-07 22:49:56 +0000
committerattilio <attilio@FreeBSD.org>2013-05-07 22:49:56 +0000
commite5932eeddb01068933c489eda23465fdcf8335b6 (patch)
tree9d79e1b9702db440ee4b948b518451163ec25f7b /sys/x86
parentb24a52ec9e4e733ae0b5b5932af72cf6fc7d5752 (diff)
downloadFreeBSD-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.c42
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.
OpenPOWER on IntegriCloud