summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brown2016-07-03 13:50:19 +0200
committerMichael Brown2016-07-03 13:50:19 +0200
commitc22da4b8ba09b60f8cfce9ac7136351c25588c65 (patch)
tree1263ad93a5529211ebe8debbb9914d90b4920e8e
parent[efi] Fix uninitialised data in HII IFR structures (diff)
downloadipxe-c22da4b8ba09b60f8cfce9ac7136351c25588c65.tar.gz
ipxe-c22da4b8ba09b60f8cfce9ac7136351c25588c65.tar.xz
ipxe-c22da4b8ba09b60f8cfce9ac7136351c25588c65.zip
[bios] Do not enable interrupts when printing to the console
There seems to be no reason for the sti/cli pair used around each call to INT 10. Remove these instructions, so that printing debug messages from within an ISR does not temporarily reenable interrupts. Signed-off-by: Michael Brown <mcb30@ipxe.org>
-rw-r--r--src/arch/x86/interface/pcbios/bios_console.c18
1 files changed, 4 insertions, 14 deletions
diff --git a/src/arch/x86/interface/pcbios/bios_console.c b/src/arch/x86/interface/pcbios/bios_console.c
index c081a41e..81e3a7d7 100644
--- a/src/arch/x86/interface/pcbios/bios_console.c
+++ b/src/arch/x86/interface/pcbios/bios_console.c
@@ -98,9 +98,7 @@ static void bios_handle_cup ( struct ansiesc_context *ctx __unused,
if ( cy < 0 )
cy = 0;
- __asm__ __volatile__ ( REAL_CODE ( "sti\n\t"
- "int $0x10\n\t"
- "cli\n\t" )
+ __asm__ __volatile__ ( REAL_CODE ( "int $0x10\n\t" )
: : "a" ( 0x0200 ), "b" ( 1 ),
"d" ( ( cy << 8 ) | cx ) );
}
@@ -118,9 +116,7 @@ static void bios_handle_ed ( struct ansiesc_context *ctx __unused,
/* We assume that we always clear the whole screen */
assert ( params[0] == ANSIESC_ED_ALL );
- __asm__ __volatile__ ( REAL_CODE ( "sti\n\t"
- "int $0x10\n\t"
- "cli\n\t" )
+ __asm__ __volatile__ ( REAL_CODE ( "int $0x10\n\t" )
: : "a" ( 0x0600 ), "b" ( bios_attr << 8 ),
"c" ( 0 ),
"d" ( ( ( console_height - 1 ) << 8 ) |
@@ -188,9 +184,7 @@ static void bios_handle_dectcem_set ( struct ansiesc_context *ctx __unused,
/* Get character height */
get_real ( height, BDA_SEG, BDA_CHAR_HEIGHT );
- __asm__ __volatile__ ( REAL_CODE ( "sti\n\t"
- "int $0x10\n\t"
- "cli\n\t" )
+ __asm__ __volatile__ ( REAL_CODE ( "int $0x10\n\t" )
: : "a" ( 0x0100 ),
"c" ( ( ( height - 2 ) << 8 ) |
( height - 1 ) ) );
@@ -207,9 +201,7 @@ static void bios_handle_dectcem_reset ( struct ansiesc_context *ctx __unused,
unsigned int count __unused,
int params[] __unused ) {
- __asm__ __volatile__ ( REAL_CODE ( "sti\n\t"
- "int $0x10\n\t"
- "cli\n\t" )
+ __asm__ __volatile__ ( REAL_CODE ( "int $0x10\n\t" )
: : "a" ( 0x0100 ), "c" ( 0x2000 ) );
}
@@ -243,7 +235,6 @@ static void bios_putchar ( int character ) {
/* Print character with attribute */
__asm__ __volatile__ ( REAL_CODE ( "pushl %%ebp\n\t" /* gcc bug */
- "sti\n\t"
/* Skip non-printable characters */
"cmpb $0x20, %%al\n\t"
"jb 1f\n\t"
@@ -264,7 +255,6 @@ static void bios_putchar ( int character ) {
"xorw %%bx, %%bx\n\t"
"movb $0x0e, %%ah\n\t"
"int $0x10\n\t"
- "cli\n\t"
"popl %%ebp\n\t" /* gcc bug */ )
: "=a" ( discard_a ), "=b" ( discard_b ),
"=c" ( discard_c )