]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
x86: get_bios_ebda_length()
authorMike Waychison <mikew@google.com>
Tue, 15 Mar 2011 06:58:45 +0000 (23:58 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 29 Apr 2011 21:13:15 +0000 (14:13 -0700)
Add a wrapper routine that tells us the length of the EBDA if it is
present.  This guy also ensures that the returned length doesn't let the
EBDA run past the 640KiB mark.

Signed-off-by: Mike Waychison <mikew@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
arch/x86/include/asm/bios_ebda.h

index 3c7521063d3fd3f70ea346cf855e4d02c4fdb9f0..5174cf0bf590b35587730baed8f8dd2ae5adbed9 100644 (file)
@@ -14,6 +14,27 @@ static inline unsigned int get_bios_ebda(void)
        return address; /* 0 means none */
 }
 
+/*
+ * Return the sanitized length of the EBDA in bytes, if it exists.
+ */
+static inline unsigned int get_bios_ebda_length(void)
+{
+       unsigned int address;
+       unsigned int length;
+
+       address = get_bios_ebda();
+       if (!address)
+               return 0;
+
+       /* EBDA length is byte 0 of the EBDA (stored in KiB) */
+       length = *(unsigned char *)phys_to_virt(address);
+       length <<= 10;
+
+       /* Trim the length if it extends beyond 640KiB */
+       length = min_t(unsigned int, (640 * 1024) - address, length);
+       return length;
+}
+
 void reserve_ebda_region(void);
 
 #ifdef CONFIG_X86_CHECK_BIOS_CORRUPTION