diff options
author | H. Peter Anvin <hpa@linux.intel.com> | 2009-04-01 18:08:28 -0700 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2009-04-09 16:08:11 -0700 |
commit | 7a734e7dd93b9aea08ed51036a9a0e2c9dfd8dac (patch) | |
tree | 222c2ce27f583cccd4c8e7fb14903870b36a2b45 /arch/x86/boot/regs.c | |
parent | 62b8e680e61d3f48f2a12ee248ca03ea8f376926 (diff) |
x86, setup: "glove box" BIOS calls -- infrastructure
Impact: new interfaces (not yet used)
For all the platforms out there, there is an infinite number of buggy
BIOSes. This adds infrastructure to treat BIOS interrupts more like
toxic waste and "glove box" them -- we switch out the register set,
perform the BIOS interrupt, and then restore the previous state.
LKML-Reference: <49DE7F79.4030106@zytor.com>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: Rafael J. Wysocki <rjw@sisk.pl>
Diffstat (limited to 'arch/x86/boot/regs.c')
-rw-r--r-- | arch/x86/boot/regs.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/arch/x86/boot/regs.c b/arch/x86/boot/regs.c new file mode 100644 index 000000000000..958019b1cfa5 --- /dev/null +++ b/arch/x86/boot/regs.c @@ -0,0 +1,29 @@ +/* ----------------------------------------------------------------------- + * + * Copyright 2009 Intel Corporation; author H. Peter Anvin + * + * This file is part of the Linux kernel, and is made available under + * the terms of the GNU General Public License version 2 or (at your + * option) any later version; incorporated herein by reference. + * + * ----------------------------------------------------------------------- */ + +/* + * Simple helper function for initializing a register set. + * + * Note that this sets EFLAGS_CF in the input register set; this + * makes it easier to catch functions which do nothing but don't + * explicitly set CF. + */ + +#include "boot.h" + +void initregs(struct biosregs *reg) +{ + memset(reg, 0, sizeof *reg); + reg->eflags |= X86_EFLAGS_CF; + reg->ds = ds(); + reg->es = ds(); + reg->fs = fs(); + reg->gs = gs(); +} |