Skip to content

Commit

Permalink
x86: get_bios_ebda_length()
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Mike Waychison authored and Greg Kroah-Hartman committed Apr 29, 2011
1 parent 773d679 commit 57d5f9f
Showing 1 changed file with 21 additions and 0 deletions.
21 changes: 21 additions & 0 deletions arch/x86/include/asm/bios_ebda.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 57d5f9f

Please sign in to comment.