}
// Assembler entry points defined in romlayout.S
-extern void apm16protected_entry();
-extern void apm32protected_entry();
+extern void entry_apm16(void);
+extern void entry_apm32(void);
// APM 16 bit protected mode interface connect
static void
handle_155302(struct bregs *regs)
{
- regs->bx = (u32)apm16protected_entry;
+ regs->bx = (u32)entry_apm16;
regs->ax = SEG_BIOS; // 16 bit code segment base
regs->si = 0xfff0; // 16 bit code segment size
regs->cx = SEG_BIOS; // data segment address
handle_155303(struct bregs *regs)
{
regs->ax = SEG_BIOS; // 32 bit code segment base
- regs->ebx = (u32)apm32protected_entry;
+ regs->ebx = (u32)entry_apm32;
regs->cx = SEG_BIOS; // 16 bit code segment base
// 32 bit code segment size (low 16 bits)
// 16 bit code segment size (high 16 bits)
set_success(regs);
}
+void
+apm_shutdown(void)
+{
+ irq_disable();
+ out_str("Shutdown");
+ for (;;)
+ hlt();
+}
+
// APM Set Power State
static void
handle_155307(struct bregs *regs)
out_str("Suspend");
break;
case 3:
- irq_disable();
- out_str("Shutdown");
- for (;;)
- hlt();
+ apm_shutdown();
break;
}
set_success(regs);
static void
handle_15530b(struct bregs *regs)
{
- set_code_fail_silent(regs, RET_ENOEVENT);
+ set_code_invalid_silent(regs, RET_ENOEVENT);
}
// APM Driver Version
static void
handle_1553XX(struct bregs *regs)
{
- set_fail(regs);
+ set_unimplemented(regs);
}
-void VISIBLE16
+void
handle_1553(struct bregs *regs)
{
if (! CONFIG_APMBIOS) {
- set_code_fail(regs, RET_EUNSUPPORTED);
+ set_code_invalid(regs, RET_EUNSUPPORTED);
return;
}
default: handle_1553XX(regs); break;
}
}
+
+void VISIBLE16
+handle_apm16(struct bregs *regs)
+{
+ debug_enter(regs, DEBUG_HDL_apm);
+ handle_1553(regs);
+}
+
+void VISIBLE32SEG
+handle_apm32(struct bregs *regs)
+{
+ debug_enter(regs, DEBUG_HDL_apm);
+ handle_1553(regs);
+}