Replace debug_exit calls with debug info while setting a failure.
Calling debug_exit at the end of a call doesn't help much - several of
the registers are already clobbered at this point. It also increases
stack usage because it prevents call tail optimization in many places.
diff --git a/src/clock.c b/src/clock.c
index 6b12137..8c4f301 100644
--- a/src/clock.c
+++ b/src/clock.c
@@ -51,7 +51,7 @@
regs->dx = ticks;
regs->al = GET_BDA(timer_rollover);
SET_BDA(timer_rollover, 0); // reset flag
- set_cf(regs, 0);
+ set_success(regs);
}
// Set Current Clock Count
@@ -62,7 +62,7 @@
SET_BDA(timer_counter, ticks);
SET_BDA(timer_rollover, 0); // reset flag
regs->ah = 0;
- set_cf(regs, 0);
+ set_success(regs);
}
// Read CMOS Time
@@ -70,7 +70,7 @@
handle_1a02(struct bregs *regs)
{
if (rtc_updating()) {
- set_cf(regs, 1);
+ set_fail(regs);
return;
}
@@ -80,7 +80,7 @@
regs->dl = inb_cmos(CMOS_STATUS_B) & 0x01;
regs->ah = 0;
regs->al = regs->ch;
- set_cf(regs, 0);
+ set_success(regs);
}
// Set CMOS Time
@@ -109,7 +109,7 @@
outb_cmos(val8, CMOS_STATUS_B);
regs->ah = 0;
regs->al = val8; // val last written to Reg B
- set_cf(regs, 0);
+ set_success(regs);
}
// Read CMOS Date
@@ -118,7 +118,7 @@
{
regs->ah = 0;
if (rtc_updating()) {
- set_cf(regs, 1);
+ set_fail(regs);
return;
}
regs->cl = inb_cmos(CMOS_RTC_YEAR);
@@ -126,7 +126,7 @@
regs->dl = inb_cmos(CMOS_RTC_DAY_MONTH);
regs->ch = inb_cmos(CMOS_CENTURY);
regs->al = regs->ch;
- set_cf(regs, 0);
+ set_success(regs);
}
// Set CMOS Date
@@ -145,7 +145,7 @@
// My assumption: RegB = (RegB & 01111111b)
if (rtc_updating()) {
init_rtc();
- set_cf(regs, 1);
+ set_fail(regs);
return;
}
outb_cmos(regs->cl, CMOS_RTC_YEAR);
@@ -156,7 +156,7 @@
outb_cmos(val8, CMOS_STATUS_B);
regs->ah = 0;
regs->al = val8; // AL = val last written to Reg B
- set_cf(regs, 0);
+ set_success(regs);
}
// Set Alarm Time in CMOS
@@ -177,7 +177,7 @@
regs->ax = 0;
if (val8 & 0x20) {
// Alarm interrupt enabled already
- set_cf(regs, 1);
+ set_fail(regs);
return;
}
if (rtc_updating()) {
@@ -190,7 +190,7 @@
outb(inb(PORT_PIC2_DATA) & ~PIC2_IRQ8, PORT_PIC2_DATA); // enable IRQ 8
// enable Status Reg B alarm bit, clear halt clock bit
outb_cmos((val8 & 0x7f) | 0x20, CMOS_STATUS_B);
- set_cf(regs, 0);
+ set_success(regs);
}
// Turn off Alarm
@@ -212,21 +212,21 @@
outb_cmos(val8 & 0x57, CMOS_STATUS_B); // disable alarm bit
regs->ah = 0;
regs->al = val8; // val last written to Reg B
- set_cf(regs, 0);
+ set_success(regs);
}
static void
handle_1ab1(struct bregs *regs)
{
// XXX - pcibios stuff
- set_cf(regs, 1);
+ set_fail(regs);
}
// Unsupported
static void
handle_1aXX(struct bregs *regs)
{
- set_cf(regs, 1);
+ set_fail(regs);
}
// INT 1Ah Time-of-day Service Entry Point
@@ -246,7 +246,6 @@
case 0xb1: handle_1ab1(regs); break;
default: handle_1aXX(regs); break;
}
- debug_exit(regs);
}
// User Timer Tick
@@ -290,7 +289,7 @@
if (GET_BDA(rtc_wait_flag) & RWS_WAIT_PENDING) {
// Interval already set.
DEBUGF("int15: Func 83h, failed, already waiting.\n" );
- handle_ret(regs, RET_EUNSUPPORTED);
+ set_code_fail(regs, RET_EUNSUPPORTED);
}
// Interval not already set.
SET_BDA(rtc_wait_flag, RWS_WAIT_PENDING); // Set status byte.
@@ -306,7 +305,7 @@
u8 bRegister = inb_cmos(CMOS_STATUS_B);
outb_cmos(CMOS_STATUS_B, bRegister | CSB_EN_ALARM_IRQ);
- set_cf(regs, 0); // XXX - no set ah?
+ set_success(regs); // XXX - no set ah?
}
// Clear interval requested
@@ -317,14 +316,14 @@
// Turn off the Periodic Interrupt timer
u8 bRegister = inb_cmos(CMOS_STATUS_B);
outb_cmos(CMOS_STATUS_B, bRegister & ~CSB_EN_ALARM_IRQ);
- set_cf(regs, 0); // XXX - no set ah?
+ set_success(regs); // XXX - no set ah?
}
static void
handle_1583XX(struct bregs *regs)
{
+ set_code_fail(regs, RET_EUNSUPPORTED);
regs->al--;
- handle_ret(regs, RET_EUNSUPPORTED);
}
void