reboot.c
来自「一个类似windows」· C语言 代码 · 共 72 行
C
72 行
/* $Id: reboot.c 21261 2006-03-08 23:26:25Z audit $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* FILE: ntoskrnl/hal/x86/reboot.c
* PURPOSE: Reboot functions.
* PROGRAMMER: Eric Kohl (ekohl@abo.rhein-zeitung.de)
* UPDATE HISTORY:
* Created 11/10/99
*/
#include <hal.h>
#define NDEBUG
#include <debug.h>
static VOID
HalReboot (VOID)
{
char data;
extern PVOID HalpZeroPageMapping;
/* enable warm reboot */
((PUCHAR)HalpZeroPageMapping)[0x472] = 0x34;
((PUCHAR)HalpZeroPageMapping)[0x473] = 0x12;
/* disable interrupts */
Ki386DisableInterrupts();
/* disable periodic interrupt (RTC) */
WRITE_PORT_UCHAR((PUCHAR)0x70, 0x0b);
data = READ_PORT_UCHAR((PUCHAR)0x71);
WRITE_PORT_UCHAR((PUCHAR)0x71, (UCHAR)(data & 0xbf));
/* */
WRITE_PORT_UCHAR((PUCHAR)0x70, 0x0a);
data = READ_PORT_UCHAR((PUCHAR)0x71);
WRITE_PORT_UCHAR((PUCHAR)0x71, (UCHAR)((data & 0xf0) | 0x06));
/* */
WRITE_PORT_UCHAR((PUCHAR)0x70, 0x15);
/* generate RESET signal via keyboard controller */
WRITE_PORT_UCHAR((PUCHAR)0x64, 0xfe);
/* stop the processor */
#if 1
Ki386HaltProcessor();
for(;;);
#endif
}
VOID STDCALL
HalReturnToFirmware (
FIRMWARE_REENTRY Action
)
{
if (Action == HalHaltRoutine)
{
DbgPrint ("HalReturnToFirmware called!\n");
DbgBreakPoint ();
}
else if (Action == HalRebootRoutine)
{
HalReboot ();
}
}
/* EOF */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?