From 079e2ab5f8707e4412c57c0f3473eeb21a9750c1 Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Tue, 7 May 2019 23:39:05 +0200 Subject: [PATCH 1/3] Shutdown ! --- Makefile | 2 +- kaleid/kernel/init/init.c | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 64e8552..6488f72 100644 --- a/Makefile +++ b/Makefile @@ -98,7 +98,7 @@ KernSources = kernel/cpu/cpuid.c \ kernel/mm/gdt.c kernel/ps/sched.c \ kernel/init/info.c kernel/init/ssp.c \ kernel/io/rtc.c kernel/io/keyb.c \ - kernel/io/spkr.c + kernel/io/spkr.c kernel/po/shtdwn.c LibCObj=$(patsubst %.c,$(KOBJDIR)/%.o,$(LibCSources)) diff --git a/kaleid/kernel/init/init.c b/kaleid/kernel/init/init.c index d7cfa28..a1431e5 100644 --- a/kaleid/kernel/init/init.c +++ b/kaleid/kernel/init/init.c @@ -30,6 +30,7 @@ #include #include #include +#include // info.c extern void BtDoSanityChecks(uint mbMagic); @@ -90,6 +91,9 @@ noreturn void BtStartKern(multiboot_info_t *mbInfo, uint mbMagic, void *codeSeg) KernLog("Goodbye at %s\n", IoGetRtcTimeChar()); + PoShutdownQemu(); + + // End this machine's suffering BFlushBuf(BStdOut); KeCrashSystem(); From 9a51f663c403ef9b2511aed1c1c9dafc810870ab Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Tue, 7 May 2019 23:40:08 +0200 Subject: [PATCH 2/3] Shutdown ! --- kaleid/kernel/init/init.c | 1 - 1 file changed, 1 deletion(-) diff --git a/kaleid/kernel/init/init.c b/kaleid/kernel/init/init.c index a1431e5..64be366 100644 --- a/kaleid/kernel/init/init.c +++ b/kaleid/kernel/init/init.c @@ -93,7 +93,6 @@ noreturn void BtStartKern(multiboot_info_t *mbInfo, uint mbMagic, void *codeSeg) PoShutdownQemu(); - // End this machine's suffering BFlushBuf(BStdOut); KeCrashSystem(); From 7383a03952a3422663bae0645c0052d211e38b47 Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Tue, 7 May 2019 23:40:56 +0200 Subject: [PATCH 3/3] Shutdown ! --- include/kernel/pwmgnt.h | 42 ++++++++++++++++++++++++++++++ kaleid/kernel/po/shtdwn.c | 54 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 include/kernel/pwmgnt.h create mode 100644 kaleid/kernel/po/shtdwn.c diff --git a/include/kernel/pwmgnt.h b/include/kernel/pwmgnt.h new file mode 100644 index 0000000..03fe1de --- /dev/null +++ b/include/kernel/pwmgnt.h @@ -0,0 +1,42 @@ +//----------------------------------------------------------------------------// +// GNU GPL OS/K // +// // +// Desc: Power Management related functions // +// // +// // +// Copyright © 2018-2019 The OS/K Team // +// // +// This file is part of OS/K. // +// // +// OS/K is free software: you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation, either version 3 of the License, or // +// any later version. // +// // +// OS/K is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY//without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with OS/K. If not, see . // +//----------------------------------------------------------------------------// + +#ifndef _KALKERN_BASE_H +#include +#endif + +#ifndef _KALKERN_IDT_H +#define _KALKERN_IDT_H + +//----------------------------------------------------------------------------// + +void PoShutdownQemu(void); + +void PoShutdownVirtualbox(void); + +void PoShutdownBochs(void); + +//----------------------------------------------------------------------------// + +#endif diff --git a/kaleid/kernel/po/shtdwn.c b/kaleid/kernel/po/shtdwn.c new file mode 100644 index 0000000..364621b --- /dev/null +++ b/kaleid/kernel/po/shtdwn.c @@ -0,0 +1,54 @@ +//----------------------------------------------------------------------------// +// GNU GPL OS/K // +// // +// Desc: Shutdown related function // +// // +// // +// Copyright © 2018-2019 The OS/K Team // +// // +// This file is part of OS/K. // +// // +// OS/K is free software: you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation, either version 3 of the License, or // +// any later version. // +// // +// OS/K is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY//without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with OS/K. If not, see . // +//----------------------------------------------------------------------------// + +#include +#include +#include + +void PoShutdownQemu(void) +{ + KernLog("Shutdown QEMU at %s...\n", IoGetRtcTimeChar()); + + IoRtcWait(1000); + + IoWriteWordOnPort(0x604, 0x2000); +}; + +void PoShutdownVirtualbox(void) +{ + KernLog("Shutdown VirtualBox at %s...\n", IoGetRtcTimeChar()); + + IoRtcWait(1000); + + IoWriteWordOnPort(0x4004, 0x3400); +}; + +void PoShutdownBochs(void) +{ + KernLog("Shutdown Bochs at %s...\n", IoGetRtcTimeChar()); + + IoRtcWait(1000); + + IoWriteWordOnPort(0xB004, 0x2000); +};