aboutsummaryrefslogtreecommitdiffstats
path: root/src/apm.c
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2014-04-07 17:31:43 -0400
committerKevin O'Connor <kevin@koconnor.net>2014-04-07 17:35:47 -0400
commitf5037fd2e9cf842b5ebc4dab120aa1c31ad52226 (patch)
tree684a46b2880660bd99ee9ef7357c0e3f108613d9 /src/apm.c
parent8996ad2cd9cdca1977dc75f262dca7f6e549be15 (diff)
downloadseabios-f5037fd2e9cf842b5ebc4dab120aa1c31ad52226.tar.gz
apm: Remove old Bochs mechanism for shutdown/suspend/standby.
Remove the old mechanism that used port 0x8900 to send apm signals. Recent versions of QEMU no longer support this port. Bochs and QEMU only ever supported shutdown anyway, and shutdown is already available via an ACPI mechanism. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'src/apm.c')
-rw-r--r--src/apm.c34
1 files changed, 6 insertions, 28 deletions
diff --git a/src/apm.c b/src/apm.c
index fd71a01e..f7c2306c 100644
--- a/src/apm.c
+++ b/src/apm.c
@@ -9,30 +9,11 @@
#include "biosvar.h" // GET_GLOBAL
#include "bregs.h" // struct bregs
#include "config.h" // CONFIG_*
-#include "fw/paravirt.h" // runningOnQEMU
#include "output.h" // dprintf
#include "stacks.h" // yield_toirq
#include "util.h" // apm_shutdown
#include "x86.h" // outb
-static void
-out_str(const char *str_cs)
-{
- if (!runningOnQEMU()) {
- dprintf(1, "APM request '%s'\n", str_cs);
- return;
- }
-
- u8 *s = (u8*)str_cs;
- for (;;) {
- u8 c = GET_GLOBAL(*s);
- if (!c)
- break;
- outb(c, PORT_BIOS_APM);
- s++;
- }
-}
-
// APM installation check
static void
handle_155300(struct bregs *regs)
@@ -54,14 +35,11 @@ handle_155301(struct bregs *regs)
set_success(regs);
}
-// Assembler entry points defined in romlayout.S
-extern void entry_apm16(void);
-extern void entry_apm32(void);
-
// APM 16 bit protected mode interface connect
static void
handle_155302(struct bregs *regs)
{
+ extern void entry_apm16(void);
regs->bx = (u32)entry_apm16;
regs->ax = SEG_BIOS; // 16 bit code segment base
regs->si = 0xfff0; // 16 bit code segment size
@@ -74,6 +52,7 @@ handle_155302(struct bregs *regs)
static void
handle_155303(struct bregs *regs)
{
+ extern void entry_apm32(void);
regs->ax = SEG_BIOS; // 32 bit code segment base
regs->ebx = (u32)entry_apm32;
regs->cx = SEG_BIOS; // 16 bit code segment base
@@ -111,11 +90,10 @@ void
apm_shutdown(void)
{
u16 pm1a_cnt = GET_GLOBAL(acpi_pm1a_cnt);
-
- irq_disable();
if (pm1a_cnt)
outw(0x2000, pm1a_cnt);
- out_str("Shutdown");
+
+ irq_disable();
for (;;)
hlt();
}
@@ -130,10 +108,10 @@ handle_155307(struct bregs *regs)
}
switch (regs->cx) {
case 1:
- out_str("Standby");
+ dprintf(1, "APM standby request\n");
break;
case 2:
- out_str("Suspend");
+ dprintf(1, "APM suspend request\n");
break;
case 3:
apm_shutdown();