Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 7 May 2013 22:49:57 +0000 (UTC)
From:      Attilio Rao <attilio@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r250339 - head/sys/x86/acpica
Message-ID:  <201305072249.r47MnvrO009846@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: attilio
Date: Tue May  7 22:49:56 2013
New Revision: 250339
URL: http://svnweb.freebsd.org/changeset/base/250339

Log:
  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)

Modified:
  head/sys/x86/acpica/srat.c

Modified: head/sys/x86/acpica/srat.c
==============================================================================
--- head/sys/x86/acpica/srat.c	Tue May  7 22:46:24 2013	(r250338)
+++ head/sys/x86/acpica/srat.c	Tue May  7 22:49:56 2013	(r250339)
@@ -331,6 +331,48 @@ srat_walk_table(acpi_subtable_handler *h
 	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.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201305072249.r47MnvrO009846>