summaryrefslogtreecommitdiff
path: root/util/cbfstool/linux_trampoline.S
diff options
context:
space:
mode:
Diffstat (limited to 'util/cbfstool/linux_trampoline.S')
-rw-r--r--util/cbfstool/linux_trampoline.S14
1 files changed, 13 insertions, 1 deletions
diff --git a/util/cbfstool/linux_trampoline.S b/util/cbfstool/linux_trampoline.S
index 726852804f..767c8bebd3 100644
--- a/util/cbfstool/linux_trampoline.S
+++ b/util/cbfstool/linux_trampoline.S
@@ -13,7 +13,9 @@
#define CB_TAG_FORWARD 0x11
#define CB_TAG_MEMORY 0x1
#define CB_TAG_FRAMEBUFFER 0x12
+#define CB_TAG_ACPI_RSDP 0x43
+#define ACPI_RSDP_ADDR 0x70
#define E820_NR_OFFSET 0x1e8
#define LINUX_ENTRY_OFFSET 0x214
#define E820_OFFSET 0x2d0
@@ -52,7 +54,7 @@ jmp .headerSearch
.testMemory:
cmp $CB_TAG_MEMORY, (%ebx)
-jne .testFramebuffer
+jne .testAcpiRsdp
/* memory tag: copy e820 map and entry count. also determine alt_mem_k */
mov 4(%ebx), %eax
@@ -87,6 +89,16 @@ dec %eax
add $20, %edi
jmp .test_e820_entry
+.testAcpiRsdp:
+cmp $CB_TAG_ACPI_RSDP, (%ebx)
+jne .testFramebuffer
+
+mov 8(%ebx), %eax
+mov %eax, (LINUX_PARAM_LOC + ACPI_RSDP_ADDR)
+mov 12(%ebx), %eax
+mov %eax, (LINUX_PARAM_LOC + ACPI_RSDP_ADDR + 4)
+jmp .endScan
+
.testFramebuffer:
cmp $CB_TAG_FRAMEBUFFER, (%ebx)
jne .endScan