X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=bootcensus;a=blobdiff_plain;f=src%2Fpower.c;fp=src%2Fpower.c;h=8a677d0306b0372ad82ec78a82ec1b005873bf0b;hp=0000000000000000000000000000000000000000;hb=81c11bdd80190ec319a82b0402173cfb65fcbf72;hpb=7dcd5071e600f8cf48174d1fddb3dba57ec9476d diff --git a/src/power.c b/src/power.c new file mode 100644 index 0000000..8a677d0 --- /dev/null +++ b/src/power.c @@ -0,0 +1,45 @@ +/* +pcboot - bootable PC demo/game kernel +Copyright (C) 2018-2019 John Tsiombikas + +This program 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 +(at your option) any later version. + +This program 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 this program. If not, see . +*/ +#include +#include "power.h" +#include "keyb.h" +#include "kbregs.h" +#include "timer.h" +#include "panic.h" +#include "asmops.h" + +/* defined in intr_asm.S */ +void set_idt(uint32_t addr, uint16_t limit); + +void reboot(void) +{ + int i; + + printf("reboot: keyboard controller\n"); + kb_send_cmd(KB_CMD_PULSE_RESET); + + for(i=0; i<32768; i++) { + iodelay(); + } + + printf("reboot: triple-fault\n"); + set_idt(0, 0); + asm volatile("int $3"); + + panic("can't reboot!"); +}