提交 97405fe2 编写于 作者: L Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/hpa/linux-2.6-x86setup

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/hpa/linux-2.6-x86setup:
  [PATCH] x86: do not recompile boot for each build
  [x86 setup] Save/restore DS around invocations of INT 10h
  [x86 setup] VGA: Clear the Protect bit before setting the vertical height
  [x86 setup] Fix assembly constraints
  [x86 setup] build/tools.c: fix comment
  [x86 setup] MAINTAINERS: document x86 setup code git tree
...@@ -1740,6 +1740,7 @@ S: Maintained ...@@ -1740,6 +1740,7 @@ S: Maintained
i386 SETUP CODE / CPU ERRATA WORKAROUNDS i386 SETUP CODE / CPU ERRATA WORKAROUNDS
P: H. Peter Anvin P: H. Peter Anvin
M: hpa@zytor.com M: hpa@zytor.com
T: git.kernel.org:/pub/scm/linux/kernel/git/hpa/linux-2.6-x86setup.git
S: Maintained S: Maintained
IA64 (Itanium) PLATFORM IA64 (Itanium) PLATFORM
......
...@@ -39,7 +39,7 @@ setup-y += printf.o string.o tty.o video.o version.o voyager.o ...@@ -39,7 +39,7 @@ setup-y += printf.o string.o tty.o video.o version.o voyager.o
setup-y += video-vga.o setup-y += video-vga.o
setup-y += video-vesa.o setup-y += video-vesa.o
setup-y += video-bios.o setup-y += video-bios.o
targets += $(setup-y)
hostprogs-y := tools/build hostprogs-y := tools/build
HOSTCFLAGS_build.o := $(LINUXINCLUDE) HOSTCFLAGS_build.o := $(LINUXINCLUDE)
......
...@@ -56,7 +56,7 @@ static inline u16 inw(u16 port) ...@@ -56,7 +56,7 @@ static inline u16 inw(u16 port)
static inline void outl(u32 v, u16 port) static inline void outl(u32 v, u16 port)
{ {
asm volatile("outl %0,%1" : : "a" (v), "dn" (port)); asm volatile("outl %0,%1" : : "a" (v), "dN" (port));
} }
static inline u32 inl(u32 port) static inline u32 inl(u32 port)
{ {
......
...@@ -115,8 +115,8 @@ static int has_eflag(u32 mask) ...@@ -115,8 +115,8 @@ static int has_eflag(u32 mask)
"pushfl ; " "pushfl ; "
"popl %1 ; " "popl %1 ; "
"popfl" "popfl"
: "=r" (f0), "=r" (f1) : "=&r" (f0), "=&r" (f1)
: "g" (mask)); : "ri" (mask));
return !!((f0^f1) & mask); return !!((f0^f1) & mask);
} }
......
...@@ -26,7 +26,7 @@ int query_mca(void) ...@@ -26,7 +26,7 @@ int query_mca(void)
"setc %0 ; " "setc %0 ; "
"movw %%es, %1 ; " "movw %%es, %1 ; "
"popw %%es" "popw %%es"
: "=acdSDm" (err), "=acdSDm" (es), "=b" (bx) : "=acd" (err), "=acdSD" (es), "=b" (bx)
: "a" (0xc000)); : "a" (0xc000));
if (err) if (err)
......
...@@ -65,7 +65,7 @@ static void move_kernel_around(void) ...@@ -65,7 +65,7 @@ static void move_kernel_around(void)
"popw %%ds ; " "popw %%ds ; "
"popw %%es" "popw %%es"
: "+c" (dwords) : "+c" (dwords)
: "rm" (dst_seg), "rm" (src_seg) : "r" (dst_seg), "r" (src_seg)
: "esi", "edi"); : "esi", "edi");
syssize -= paras; syssize -= paras;
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
*/ */
/* /*
* This file builds a disk-image from three different files: * This file builds a disk-image from two different files:
* *
* - setup: 8086 machine code, sets up system parm * - setup: 8086 machine code, sets up system parm
* - system: 80386 code for actual system * - system: 80386 code for actual system
......
...@@ -31,7 +31,7 @@ void __attribute__((section(".inittext"))) putchar(int ch) ...@@ -31,7 +31,7 @@ void __attribute__((section(".inittext"))) putchar(int ch)
/* int $0x10 is known to have bugs involving touching registers /* int $0x10 is known to have bugs involving touching registers
it shouldn't. Be extra conservative... */ it shouldn't. Be extra conservative... */
asm volatile("pushal; int $0x10; popal" asm volatile("pushal; pushw %%ds; int $0x10; popw %%ds; popal"
: : "b" (0x0007), "c" (0x0001), "a" (0x0e00|ch)); : : "b" (0x0007), "c" (0x0001), "a" (0x0e00|ch));
} }
......
...@@ -195,7 +195,7 @@ static void vga_recalc_vertical(void) ...@@ -195,7 +195,7 @@ static void vga_recalc_vertical(void)
{ {
unsigned int font_size, rows; unsigned int font_size, rows;
u16 crtc; u16 crtc;
u8 ov; u8 pt, ov;
set_fs(0); set_fs(0);
font_size = rdfs8(0x485); /* BIOS: font size (pixels) */ font_size = rdfs8(0x485); /* BIOS: font size (pixels) */
...@@ -206,7 +206,12 @@ static void vga_recalc_vertical(void) ...@@ -206,7 +206,12 @@ static void vga_recalc_vertical(void)
crtc = vga_crtc(); crtc = vga_crtc();
pt = in_idx(crtc, 0x11);
pt &= ~0x80; /* Unlock CR0-7 */
out_idx(pt, crtc, 0x11);
out_idx((u8)rows, crtc, 0x12); /* Lower height register */ out_idx((u8)rows, crtc, 0x12); /* Lower height register */
ov = in_idx(crtc, 0x07); /* Overflow register */ ov = in_idx(crtc, 0x07); /* Overflow register */
ov &= 0xbd; ov &= 0xbd;
ov |= (rows >> (8-1)) & 0x02; ov |= (rows >> (8-1)) & 0x02;
...@@ -411,7 +416,7 @@ static void restore_screen(void) ...@@ -411,7 +416,7 @@ static void restore_screen(void)
"1: rep;stosl ; " "1: rep;stosl ; "
"popw %%es" "popw %%es"
: "+D" (dst), "+c" (npad) : "+D" (dst), "+c" (npad)
: "bdSm" (video_segment), : "bdS" (video_segment),
"a" (0x07200720)); "a" (0x07200720));
} }
......
...@@ -117,8 +117,15 @@ extern int graphic_mode; /* Graphics mode with linear frame buffer */ ...@@ -117,8 +117,15 @@ extern int graphic_mode; /* Graphics mode with linear frame buffer */
* int $0x10 is notorious for touching registers it shouldn't. * int $0x10 is notorious for touching registers it shouldn't.
* gcc doesn't like %ebp being clobbered, so define it as a push/pop * gcc doesn't like %ebp being clobbered, so define it as a push/pop
* sequence here. * sequence here.
*
* A number of systems, including the original PC can clobber %bp in
* certain circumstances, like when scrolling. There exists at least
* one Trident video card which could clobber DS under a set of
* circumstances that we are unlikely to encounter (scrolling when
* using an extended graphics mode of more than 800x600 pixels), but
* it's cheap insurance to deal with that here.
*/ */
#define INT10 "pushl %%ebp; int $0x10; popl %%ebp" #define INT10 "pushl %%ebp; pushw %%ds; int $0x10; popw %%ds; popl %%ebp"
/* Accessing VGA indexed registers */ /* Accessing VGA indexed registers */
static inline u8 in_idx(u16 port, u8 index) static inline u8 in_idx(u16 port, u8 index)
......
...@@ -32,7 +32,7 @@ int query_voyager(void) ...@@ -32,7 +32,7 @@ int query_voyager(void)
"setc %0 ; " "setc %0 ; "
"movw %%es, %1 ; " "movw %%es, %1 ; "
"popw %%es" "popw %%es"
: "=qm" (err), "=rm" (es), "=D" (di) : "=q" (err), "=r" (es), "=D" (di)
: "a" (0xffc0)); : "a" (0xffc0));
if (err) if (err)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册