aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-07-18 15:13:02 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-07-18 15:13:02 -0400
commit97405fe26b2a4df7090884b086ee8224ace2a6d1 (patch)
tree528f9f1f3f8cf0ce933a366f137faaf55ab89079
parenta10d9a71bafd3a283da240d2868e71346d2aef6f (diff)
parent3fbc54165d7217abf62b871c0dd074e76ce0eb31 (diff)
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
-rw-r--r--MAINTAINERS1
-rw-r--r--arch/i386/boot/Makefile2
-rw-r--r--arch/i386/boot/boot.h2
-rw-r--r--arch/i386/boot/cpucheck.c4
-rw-r--r--arch/i386/boot/mca.c2
-rw-r--r--arch/i386/boot/pm.c2
-rw-r--r--arch/i386/boot/tools/build.c2
-rw-r--r--arch/i386/boot/tty.c2
-rw-r--r--arch/i386/boot/video.c9
-rw-r--r--arch/i386/boot/video.h9
-rw-r--r--arch/i386/boot/voyager.c2
11 files changed, 25 insertions, 12 deletions
diff --git a/MAINTAINERS b/MAINTAINERS
index 1698dbbc7375..e78f62f13bac 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1740,6 +1740,7 @@ S: Maintained
1740i386 SETUP CODE / CPU ERRATA WORKAROUNDS 1740i386 SETUP CODE / CPU ERRATA WORKAROUNDS
1741P: H. Peter Anvin 1741P: H. Peter Anvin
1742M: hpa@zytor.com 1742M: hpa@zytor.com
1743T: git.kernel.org:/pub/scm/linux/kernel/git/hpa/linux-2.6-x86setup.git
1743S: Maintained 1744S: Maintained
1744 1745
1745IA64 (Itanium) PLATFORM 1746IA64 (Itanium) PLATFORM
diff --git a/arch/i386/boot/Makefile b/arch/i386/boot/Makefile
index 08678a0a3d19..93386a4e40b4 100644
--- a/arch/i386/boot/Makefile
+++ b/arch/i386/boot/Makefile
@@ -39,7 +39,7 @@ setup-y += printf.o string.o tty.o video.o version.o voyager.o
39setup-y += video-vga.o 39setup-y += video-vga.o
40setup-y += video-vesa.o 40setup-y += video-vesa.o
41setup-y += video-bios.o 41setup-y += video-bios.o
42 42targets += $(setup-y)
43hostprogs-y := tools/build 43hostprogs-y := tools/build
44 44
45HOSTCFLAGS_build.o := $(LINUXINCLUDE) 45HOSTCFLAGS_build.o := $(LINUXINCLUDE)
diff --git a/arch/i386/boot/boot.h b/arch/i386/boot/boot.h
index 0329c4fe4f88..dec70c9b6050 100644
--- a/arch/i386/boot/boot.h
+++ b/arch/i386/boot/boot.h
@@ -56,7 +56,7 @@ static inline u16 inw(u16 port)
56 56
57static inline void outl(u32 v, u16 port) 57static inline void outl(u32 v, u16 port)
58{ 58{
59 asm volatile("outl %0,%1" : : "a" (v), "dn" (port)); 59 asm volatile("outl %0,%1" : : "a" (v), "dN" (port));
60} 60}
61static inline u32 inl(u32 port) 61static inline u32 inl(u32 port)
62{ 62{
diff --git a/arch/i386/boot/cpucheck.c b/arch/i386/boot/cpucheck.c
index 8b0f4473b083..991e8ceae1de 100644
--- a/arch/i386/boot/cpucheck.c
+++ b/arch/i386/boot/cpucheck.c
@@ -115,8 +115,8 @@ static int has_eflag(u32 mask)
115 "pushfl ; " 115 "pushfl ; "
116 "popl %1 ; " 116 "popl %1 ; "
117 "popfl" 117 "popfl"
118 : "=r" (f0), "=r" (f1) 118 : "=&r" (f0), "=&r" (f1)
119 : "g" (mask)); 119 : "ri" (mask));
120 120
121 return !!((f0^f1) & mask); 121 return !!((f0^f1) & mask);
122} 122}
diff --git a/arch/i386/boot/mca.c b/arch/i386/boot/mca.c
index 9b68bd1aef19..68222f2d4b67 100644
--- a/arch/i386/boot/mca.c
+++ b/arch/i386/boot/mca.c
@@ -26,7 +26,7 @@ int query_mca(void)
26 "setc %0 ; " 26 "setc %0 ; "
27 "movw %%es, %1 ; " 27 "movw %%es, %1 ; "
28 "popw %%es" 28 "popw %%es"
29 : "=acdSDm" (err), "=acdSDm" (es), "=b" (bx) 29 : "=acd" (err), "=acdSD" (es), "=b" (bx)
30 : "a" (0xc000)); 30 : "a" (0xc000));
31 31
32 if (err) 32 if (err)
diff --git a/arch/i386/boot/pm.c b/arch/i386/boot/pm.c
index 3fa53e15ed77..1df025c73261 100644
--- a/arch/i386/boot/pm.c
+++ b/arch/i386/boot/pm.c
@@ -65,7 +65,7 @@ static void move_kernel_around(void)
65 "popw %%ds ; " 65 "popw %%ds ; "
66 "popw %%es" 66 "popw %%es"
67 : "+c" (dwords) 67 : "+c" (dwords)
68 : "rm" (dst_seg), "rm" (src_seg) 68 : "r" (dst_seg), "r" (src_seg)
69 : "esi", "edi"); 69 : "esi", "edi");
70 70
71 syssize -= paras; 71 syssize -= paras;
diff --git a/arch/i386/boot/tools/build.c b/arch/i386/boot/tools/build.c
index 886f47d8a488..b4248740ff0d 100644
--- a/arch/i386/boot/tools/build.c
+++ b/arch/i386/boot/tools/build.c
@@ -5,7 +5,7 @@
5 */ 5 */
6 6
7/* 7/*
8 * This file builds a disk-image from three different files: 8 * This file builds a disk-image from two different files:
9 * 9 *
10 * - setup: 8086 machine code, sets up system parm 10 * - setup: 8086 machine code, sets up system parm
11 * - system: 80386 code for actual system 11 * - system: 80386 code for actual system
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.c b/arch/i386/boot/video.c
index 3bb3573cd6a1..958130ef0042 100644
--- a/arch/i386/boot/video.c
+++ b/arch/i386/boot/video.c
@@ -195,7 +195,7 @@ static void vga_recalc_vertical(void)
195{ 195{
196 unsigned int font_size, rows; 196 unsigned int font_size, rows;
197 u16 crtc; 197 u16 crtc;
198 u8 ov; 198 u8 pt, ov;
199 199
200 set_fs(0); 200 set_fs(0);
201 font_size = rdfs8(0x485); /* BIOS: font size (pixels) */ 201 font_size = rdfs8(0x485); /* BIOS: font size (pixels) */
@@ -206,7 +206,12 @@ static void vga_recalc_vertical(void)
206 206
207 crtc = vga_crtc(); 207 crtc = vga_crtc();
208 208
209 pt = in_idx(crtc, 0x11);
210 pt &= ~0x80; /* Unlock CR0-7 */
211 out_idx(pt, crtc, 0x11);
212
209 out_idx((u8)rows, crtc, 0x12); /* Lower height register */ 213 out_idx((u8)rows, crtc, 0x12); /* Lower height register */
214
210 ov = in_idx(crtc, 0x07); /* Overflow register */ 215 ov = in_idx(crtc, 0x07); /* Overflow register */
211 ov &= 0xbd; 216 ov &= 0xbd;
212 ov |= (rows >> (8-1)) & 0x02; 217 ov |= (rows >> (8-1)) & 0x02;
@@ -411,7 +416,7 @@ static void restore_screen(void)
411 "1: rep;stosl ; " 416 "1: rep;stosl ; "
412 "popw %%es" 417 "popw %%es"
413 : "+D" (dst), "+c" (npad) 418 : "+D" (dst), "+c" (npad)
414 : "bdSm" (video_segment), 419 : "bdS" (video_segment),
415 "a" (0x07200720)); 420 "a" (0x07200720));
416 } 421 }
417 422
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)
diff --git a/arch/i386/boot/voyager.c b/arch/i386/boot/voyager.c
index 9221614d0db8..61c8fe0453be 100644
--- a/arch/i386/boot/voyager.c
+++ b/arch/i386/boot/voyager.c
@@ -32,7 +32,7 @@ int query_voyager(void)
32 "setc %0 ; " 32 "setc %0 ; "
33 "movw %%es, %1 ; " 33 "movw %%es, %1 ; "
34 "popw %%es" 34 "popw %%es"
35 : "=qm" (err), "=rm" (es), "=D" (di) 35 : "=q" (err), "=r" (es), "=D" (di)
36 : "a" (0xffc0)); 36 : "a" (0xffc0));
37 37
38 if (err) 38 if (err)