diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2009-09-24 21:01:16 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2009-09-24 21:01:16 -0400 |
commit | f8e800dea4aad59c83254bddd8e9ccfcd3b45774 (patch) | |
tree | 44673b259d1dede47648e58f2aeac1352893ca4f | |
parent | f416fe97ae885e97a4c9678813a6005aa83fb4b6 (diff) | |
download | seabios-f8e800dea4aad59c83254bddd8e9ccfcd3b45774.tar.gz |
Interrupts should be enabled when calling 16bit code.
Set most code paths to have interrupts on when calling 16bit code.
This fixes at least one optionrom that needed irqs on.
-rw-r--r-- | src/boot.c | 3 | ||||
-rw-r--r-- | src/optionroms.c | 2 | ||||
-rw-r--r-- | src/output.c | 1 | ||||
-rw-r--r-- | src/post.c | 1 | ||||
-rw-r--r-- | src/ramdisk.c | 2 | ||||
-rw-r--r-- | src/util.c | 3 |
6 files changed, 11 insertions, 1 deletions
@@ -328,6 +328,7 @@ call_boot_entry(u16 bootseg, u16 bootip, u8 bootdrv) struct bregs br; memset(&br, 0, sizeof(br)); + br.flags = F_IF; br.code = SEGOFF(bootseg, bootip); // Set the magic number in ax and the boot drive in dl. br.dl = bootdrv; @@ -344,6 +345,7 @@ boot_disk(u8 bootdrv, int checksig) // Read sector struct bregs br; memset(&br, 0, sizeof(br)); + br.flags = F_IF; br.dl = bootdrv; br.es = bootseg; br.ah = 2; @@ -459,6 +461,7 @@ do_boot(u16 seq_nr) // Boot failed: invoke the boot recovery function struct bregs br; memset(&br, 0, sizeof(br)); + br.flags = F_IF; call16_int(0x18, &br); } diff --git a/src/optionroms.c b/src/optionroms.c index 18526f4b..bdc0cb5f 100644 --- a/src/optionroms.c +++ b/src/optionroms.c @@ -87,6 +87,7 @@ __callrom(struct rom_header *rom, u16 offset, u16 bdf) struct bregs br; memset(&br, 0, sizeof(br)); + br.flags = F_IF; br.ax = bdf; br.bx = 0xffff; br.dx = 0xffff; @@ -442,6 +443,7 @@ vga_setup() dprintf(1, "Turning on vga console\n"); struct bregs br; memset(&br, 0, sizeof(br)); + br.flags = F_IF; br.ax = 0x0003; call16_int(0x10, &br); diff --git a/src/output.c b/src/output.c index 6a164e1e..da585b4f 100644 --- a/src/output.c +++ b/src/output.c @@ -70,6 +70,7 @@ screenc(u8 c) return; struct bregs br; memset(&br, 0, sizeof(br)); + br.flags = F_IF; br.ah = 0x0e; br.al = c; call16_int(0x10, &br); @@ -227,5 +227,6 @@ _start() dprintf(3, "Jump to int19\n"); struct bregs br; memset(&br, 0, sizeof(br)); + br.flags = F_IF; call16_int(0x19, &br); } diff --git a/src/ramdisk.c b/src/ramdisk.c index 83aa7c4a..36b9f226 100644 --- a/src/ramdisk.c +++ b/src/ramdisk.c @@ -73,7 +73,7 @@ ramdisk_copy(struct disk_op_s *op, int iswrite) // Call int 1587 to copy data. struct bregs br; memset(&br, 0, sizeof(br)); - br.flags = F_CF; + br.flags = F_CF|F_IF; br.ah = 0x87; br.es = GET_SEG(SS); br.si = (u32)gdt; @@ -239,6 +239,7 @@ usleep(u32 usec) { struct bregs br; memset(&br, 0, sizeof(br)); + br.flags = F_IF; br.ah = 0x86; br.cx = usec >> 16; br.dx = usec; @@ -251,6 +252,7 @@ check_for_keystroke() { struct bregs br; memset(&br, 0, sizeof(br)); + br.flags = F_IF; br.ah = 1; call16_int(0x16, &br); return !(br.flags & F_ZF); @@ -262,6 +264,7 @@ get_raw_keystroke() { struct bregs br; memset(&br, 0, sizeof(br)); + br.flags = F_IF; call16_int(0x16, &br); return br.ah; } |