File tree Expand file tree Collapse file tree 11 files changed +25
-12
lines changed Expand file tree Collapse file tree 11 files changed +25
-12
lines changed Original file line number Diff line number Diff line change @@ -1740,6 +1740,7 @@ S: Maintained
1740
1740
i386 SETUP CODE / CPU ERRATA WORKAROUNDS
1741
1741
P: H. Peter Anvin
1742
1742
1743
+ T: git.kernel.org:/pub/scm/linux/kernel/git/hpa/linux-2.6-x86setup.git
1743
1744
S: Maintained
1744
1745
1745
1746
IA64 (Itanium) PLATFORM
Original file line number Diff line number Diff line change @@ -39,7 +39,7 @@ setup-y += printf.o string.o tty.o video.o version.o voyager.o
39
39
setup-y += video-vga.o
40
40
setup-y += video-vesa.o
41
41
setup-y += video-bios.o
42
-
42
+ targets += $( setup-y )
43
43
hostprogs-y := tools/build
44
44
45
45
HOSTCFLAGS_build.o := $(LINUXINCLUDE )
Original file line number Diff line number Diff line change @@ -56,7 +56,7 @@ static inline u16 inw(u16 port)
56
56
57
57
static 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
}
61
61
static inline u32 inl (u32 port )
62
62
{
Original file line number Diff line number Diff line change @@ -115,8 +115,8 @@ static int has_eflag(u32 mask)
115
115
"pushfl ; "
116
116
"popl %1 ; "
117
117
"popfl"
118
- : "=r" (f0 ), "=r" (f1 )
119
- : "g " (mask ));
118
+ : "=& r" (f0 ), "=& r" (f1 )
119
+ : "ri " (mask ));
120
120
121
121
return !!((f0 ^f1 ) & mask );
122
122
}
Original file line number Diff line number Diff line change @@ -26,7 +26,7 @@ int query_mca(void)
26
26
"setc %0 ; "
27
27
"movw %%es, %1 ; "
28
28
"popw %%es"
29
- : "=acdSDm " (err ), "=acdSDm " (es ), "=b" (bx )
29
+ : "=acd " (err ), "=acdSD " (es ), "=b" (bx )
30
30
: "a" (0xc000 ));
31
31
32
32
if (err )
Original file line number Diff line number Diff line change @@ -65,7 +65,7 @@ static void move_kernel_around(void)
65
65
"popw %%ds ; "
66
66
"popw %%es"
67
67
: "+c" (dwords )
68
- : "rm " (dst_seg ), "rm " (src_seg )
68
+ : "r " (dst_seg ), "r " (src_seg )
69
69
: "esi" , "edi" );
70
70
71
71
syssize -= paras ;
Original file line number Diff line number Diff line change 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
10
* - setup: 8086 machine code, sets up system parm
11
11
* - system: 80386 code for actual system
Original file line number Diff line number Diff line change @@ -31,7 +31,7 @@ void __attribute__((section(".inittext"))) putchar(int ch)
31
31
32
32
/* int $0x10 is known to have bugs involving touching registers
33
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
35
: : "b" (0x0007 ), "c" (0x0001 ), "a" (0x0e00 |ch ));
36
36
}
37
37
Original file line number Diff line number Diff line change @@ -195,7 +195,7 @@ static void vga_recalc_vertical(void)
195
195
{
196
196
unsigned int font_size , rows ;
197
197
u16 crtc ;
198
- u8 ov ;
198
+ u8 pt , ov ;
199
199
200
200
set_fs (0 );
201
201
font_size = rdfs8 (0x485 ); /* BIOS: font size (pixels) */
@@ -206,7 +206,12 @@ static void vga_recalc_vertical(void)
206
206
207
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
213
out_idx ((u8 )rows , crtc , 0x12 ); /* Lower height register */
214
+
210
215
ov = in_idx (crtc , 0x07 ); /* Overflow register */
211
216
ov &= 0xbd ;
212
217
ov |= (rows >> (8 - 1 )) & 0x02 ;
@@ -411,7 +416,7 @@ static void restore_screen(void)
411
416
"1: rep;stosl ; "
412
417
"popw %%es"
413
418
: "+D" (dst ), "+c" (npad )
414
- : "bdSm " (video_segment ),
419
+ : "bdS " (video_segment ),
415
420
"a" (0x07200720 ));
416
421
}
417
422
Original file line number Diff line number Diff line change @@ -117,8 +117,15 @@ extern int graphic_mode; /* Graphics mode with linear frame buffer */
117
117
* int $0x10 is notorious for touching registers it shouldn't.
118
118
* gcc doesn't like %ebp being clobbered, so define it as a push/pop
119
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
130
/* Accessing VGA indexed registers */
124
131
static inline u8 in_idx (u16 port , u8 index )
Original file line number Diff line number Diff line change @@ -32,7 +32,7 @@ int query_voyager(void)
32
32
"setc %0 ; "
33
33
"movw %%es, %1 ; "
34
34
"popw %%es"
35
- : "=qm " (err ), "=rm " (es ), "=D" (di )
35
+ : "=q " (err ), "=r " (es ), "=D" (di )
36
36
: "a" (0xffc0 ));
37
37
38
38
if (err )
You can’t perform that action at this time.
0 commit comments