[syslinux:memdisk-acpi] memdisk: write a message if the RSDP is writable or not

syslinux-bot for H. Peter Anvin hpa at zytor.com
Thu Jul 15 23:15:04 PDT 2010


Commit-ID:  866826b3dd41636ef6e93f036a44aa12ab99a046
Gitweb:     http://syslinux.zytor.com/commit/866826b3dd41636ef6e93f036a44aa12ab99a046
Author:     H. Peter Anvin <hpa at zytor.com>
AuthorDate: Fri, 9 Jul 2010 21:03:13 -0700
Committer:  H. Peter Anvin <hpa at zytor.com>
CommitDate: Fri, 9 Jul 2010 21:04:05 -0700

memdisk: write a message if the RSDP is writable or not

Test the RSDP for writability; print a message if it is.

Signed-off-by: H. Peter Anvin <hpa at zytor.com>


---
 memdisk/acpi.c |   22 ++++++++++++++++++++++
 1 files changed, 22 insertions(+), 0 deletions(-)

diff --git a/memdisk/acpi.c b/memdisk/acpi.c
index cd0431c..82a0808 100644
--- a/memdisk/acpi.c
+++ b/memdisk/acpi.c
@@ -165,6 +165,7 @@ size_t acpi_bytes_needed(void)
 {
     struct acpi_rsdp *rsdp;
     struct acpi_description_header *dsdt;
+    bool rsdp_writable;
     int i, n;
 
     rsdp = find_rsdp();
@@ -173,6 +174,27 @@ size_t acpi_bytes_needed(void)
 	return 0;
     }
 
+    /* Check to see if the RSDP is writable */
+    if (0 && (size_t)rsdp < 0xa0000) {
+	rsdp_writable = true;
+    } else {
+	size_t t1, t2;
+
+	asm volatile(
+	    "cli ; "
+	    "movl %2,%0 ; "
+	    "xorl $-1,%2 ; "
+	    "movl %2,%1 ; "
+	    "movl %0,%2 ; "
+	    "sti"
+	    : "=r" (t1), "=r" (t2)
+	    : "m" (rsdp->rsdt_addr));
+
+	rsdp_writable = (t1 ^ t2) == -1;
+    }
+
+    printf("ACPI: RSDP is %s\n", rsdp_writable ? "writable" : "readonly");
+
     rsdt = (struct acpi_rsdt *)rsdp->rsdt_addr;
     if (is_valid_table(rsdt) != ERR_NONE) {
 	printf("ACPI: unable to locate an ACPI RSDT\n");



More information about the Syslinux-commits mailing list