105 lines
1.8 KiB
C
105 lines
1.8 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1991 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
ixreboot.c
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Provides the interface to the firmware for x86. Since there is no
|
||
|
firmware to speak of on x86, this is just reboot support.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
John Vert (jvert) 12-Aug-1991
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
#include "halp.h"
|
||
|
|
||
|
//
|
||
|
// Defines to let us diddle the CMOS clock and the keyboard
|
||
|
//
|
||
|
|
||
|
#define CMOS_CTRL (PUCHAR )0x70
|
||
|
#define CMOS_DATA (PUCHAR )0x71
|
||
|
|
||
|
#define RESET 0xfe
|
||
|
#define KEYBPORT (PUCHAR )0x64
|
||
|
|
||
|
//
|
||
|
// Private function prototypes
|
||
|
//
|
||
|
|
||
|
VOID
|
||
|
HalpReboot (
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
HalpReboot (
|
||
|
VOID
|
||
|
)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This procedure resets the CMOS clock to the standard timer settings
|
||
|
so the bios will work, and then issues a reset command to the keyboard
|
||
|
to cause a warm boot.
|
||
|
|
||
|
It is very machine dependent, this implementation is intended for
|
||
|
PC-AT like machines.
|
||
|
|
||
|
This code copied from the "old debugger" sources.
|
||
|
|
||
|
N.B.
|
||
|
|
||
|
Will NOT return.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
UCHAR Scratch;
|
||
|
PUSHORT Magic;
|
||
|
EFI_STATUS status;
|
||
|
|
||
|
|
||
|
//
|
||
|
// Disable IA64 Errror Handling
|
||
|
//
|
||
|
|
||
|
HalpMCADisable();
|
||
|
|
||
|
//
|
||
|
// Instead of the previous code we will use Efi's reset proc (RESET_TYPE = cold boot).
|
||
|
//
|
||
|
|
||
|
status = HalpCallEfi (
|
||
|
EFI_RESET_SYSTEM_INDEX,
|
||
|
(ULONGLONG)EfiResetCold,
|
||
|
EFI_SUCCESS,
|
||
|
0,
|
||
|
0,
|
||
|
0,
|
||
|
0,
|
||
|
0,
|
||
|
0
|
||
|
);
|
||
|
|
||
|
|
||
|
HalDebugPrint(( HAL_INFO, "HAL: HalpReboot - returned from HalpCallEfi: %I64X\n", status ));
|
||
|
|
||
|
|
||
|
//
|
||
|
// If we return, send the reset command to the keyboard controller
|
||
|
//
|
||
|
|
||
|
WRITE_PORT_UCHAR(KEYBPORT, RESET);
|
||
|
|
||
|
}
|