/*++

Copyright (c) 1991  Microsoft Corporation
Copyright (c) 1993  Digital Equipment Corporation

Module Name:

    jxreboot.c

Abstract:

    This module contains the Firmware Termination Functions.

Author:

    Lluis Abello (lluis) 4-Sep-1991


Revision History:

    11-June-1992	John DeRosa [DEC]

    Added Alpha/Jensen modifications.

--*/
#include "fwp.h"
#include "fwstring.h"


VOID
ResetSystem (
    IN VOID
    )
/*++

Routine Description:

    This effectively resets the system by restarting the firmware
    at the beginning of the firmware PALcode.

Arguments:

    None.

Return Value:

    None.

--*/
{
    AlphaInstHalt();
}

VOID
FwRestart(
    IN VOID
    )
/*++

Routine Description:

    This routine implements the Firmware Restart termination function.
    It generates a soft reset to the system.

Arguments:

    None.

Return Value:

    Does not return to the caller.

--*/
{
    ResetSystem();
}

VOID
FwReboot(
    IN VOID
    )
/*++

Routine Description:

    This routine implements the Firmware Reboot termination function.
    It generates a soft reset to the system.

Arguments:

    None.

Return Value:

    Does not return to the caller.

--*/
{
    ResetSystem();
}

VOID
FwEnterInteractiveMode(
    IN VOID
    )
/*++

Routine Description:

    This routine implements the Firmware EnterInteractiveMode function.

Arguments:

    None.

Return Value:

    None.

--*/
{
    FwMonitor(3);
    return;
}

VOID
FwTerminationInitialize(
    IN VOID
    )

/*++

Routine Description:

    //
    // Initialize the termination function entry points in the transfer vector
    //
    This routine initializes the termination function entry points
    in the transfer vector.

Arguments:

    None.

Return Value:

    None.

--*/
{
    (PARC_HALT_ROUTINE)SYSTEM_BLOCK->FirmwareVector[HaltRoutine] = FwHalt;
    (PARC_POWERDOWN_ROUTINE)SYSTEM_BLOCK->FirmwareVector[PowerDownRoutine] = FwHalt;
    (PARC_RESTART_ROUTINE)SYSTEM_BLOCK->FirmwareVector[RestartRoutine] = FwRestart;
    (PARC_REBOOT_ROUTINE)SYSTEM_BLOCK->FirmwareVector[RebootRoutine] = FwReboot;
    (PARC_INTERACTIVE_MODE_ROUTINE)SYSTEM_BLOCK->FirmwareVector[InteractiveModeRoutine] = FwEnterInteractiveMode;
//    (PARC_RETURN_FROM_MAIN_ROUTINE)SYSTEM_BLOCK->FirmwareVector[ReturnFromMainRoutine] = FwReturnFromMain;
}