Merge branch 'driver-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6
* 'driver-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6: (44 commits) debugfs: Silence DEBUG_STRICT_USER_COPY_CHECKS=y warning sysfs: remove "last sysfs file:" line from the oops messages drivers/base/memory.c: fix warning due to "memory hotplug: Speed up add/remove when blocks are larger than PAGES_PER_SECTION" memory hotplug: Speed up add/remove when blocks are larger than PAGES_PER_SECTION SYSFS: Fix erroneous comments for sysfs_update_group(). driver core: remove the driver-model structures from the documentation driver core: Add the device driver-model structures to kerneldoc Translated Documentation/email-clients.txt RAW driver: Remove call to kobject_put(). reboot: disable usermodehelper to prevent fs access efivars: prevent oops on unload when efi is not enabled Allow setting of number of raw devices as a module parameter Introduce CONFIG_GOOGLE_FIRMWARE driver: Google Memory Console driver: Google EFI SMI x86: Better comments for get_bios_ebda() x86: get_bios_ebda_length() misc: fix ti-st build issues params.c: Use new strtobool function to process boolean inputs debugfs: move to new strtobool ... Fix up trivial conflicts in fs/debugfs/file.c due to the same patch being applied twice, and an unrelated cleanup nearby.
This commit is contained in:
@@ -4,16 +4,40 @@
|
||||
#include <asm/io.h>
|
||||
|
||||
/*
|
||||
* there is a real-mode segmented pointer pointing to the
|
||||
* 4K EBDA area at 0x40E.
|
||||
* Returns physical address of EBDA. Returns 0 if there is no EBDA.
|
||||
*/
|
||||
static inline unsigned int get_bios_ebda(void)
|
||||
{
|
||||
/*
|
||||
* There is a real-mode segmented pointer pointing to the
|
||||
* 4K EBDA area at 0x40E.
|
||||
*/
|
||||
unsigned int address = *(unsigned short *)phys_to_virt(0x40E);
|
||||
address <<= 4;
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user