aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/i386/boot/tty.c2
-rw-r--r--arch/i386/boot/video.h9
2 files changed, 9 insertions, 2 deletions
diff --git a/arch/i386/boot/tty.c b/arch/i386/boot/tty.c
index a8db78736b02..9c668aad3515 100644
--- a/arch/i386/boot/tty.c
+++ b/arch/i386/boot/tty.c
@@ -31,7 +31,7 @@ void __attribute__((section(".inittext"))) putchar(int ch)
31 31
32 /* int $0x10 is known to have bugs involving touching registers 32 /* int $0x10 is known to have bugs involving touching registers
33 it shouldn't. Be extra conservative... */ 33 it shouldn't. Be extra conservative... */
34 asm volatile("pushal; int $0x10; popal" 34 asm volatile("pushal; pushw %%ds; int $0x10; popw %%ds; popal"
35 : : "b" (0x0007), "c" (0x0001), "a" (0x0e00|ch)); 35 : : "b" (0x0007), "c" (0x0001), "a" (0x0e00|ch));
36} 36}
37 37
diff --git a/arch/i386/boot/video.h b/arch/i386/boot/video.h
index 29eca1710b2c..b92447d51213 100644
--- a/arch/i386/boot/video.h
+++ b/arch/i386/boot/video.h
@@ -117,8 +117,15 @@ extern int graphic_mode; /* Graphics mode with linear frame buffer */
117 * int $0x10 is notorious for touching registers it shouldn't. 117 * int $0x10 is notorious for touching registers it shouldn't.
118 * gcc doesn't like %ebp being clobbered, so define it as a push/pop 118 * gcc doesn't like %ebp being clobbered, so define it as a push/pop
119 * sequence here. 119 * sequence here.
120 *
121 * A number of systems, including the original PC can clobber %bp in
122 * certain circumstances, like when scrolling. There exists at least
123 * one Trident video card which could clobber DS under a set of
124 * circumstances that we are unlikely to encounter (scrolling when
125 * using an extended graphics mode of more than 800x600 pixels), but
126 * it's cheap insurance to deal with that here.
120 */ 127 */
121#define INT10 "pushl %%ebp; int $0x10; popl %%ebp" 128#define INT10 "pushl %%ebp; pushw %%ds; int $0x10; popw %%ds; popl %%ebp"
122 129
123/* Accessing VGA indexed registers */ 130/* Accessing VGA indexed registers */
124static inline u8 in_idx(u16 port, u8 index) 131static inline u8 in_idx(u16 port, u8 index)