summaryrefslogtreecommitdiffstats
path: root/private/ntos/nthals/halflex/alpha/halpal.s
diff options
context:
space:
mode:
Diffstat (limited to 'private/ntos/nthals/halflex/alpha/halpal.s')
-rw-r--r--private/ntos/nthals/halflex/alpha/halpal.s276
1 files changed, 276 insertions, 0 deletions
diff --git a/private/ntos/nthals/halflex/alpha/halpal.s b/private/ntos/nthals/halflex/alpha/halpal.s
new file mode 100644
index 000000000..d34a29084
--- /dev/null
+++ b/private/ntos/nthals/halflex/alpha/halpal.s
@@ -0,0 +1,276 @@
+// TITLE("Alpha PAL funtions for HAL")
+//++
+//
+// Copyright (c) 1992 Digital Equipment Corporation
+// Copyright (c) 1993 Digital Equipment Corporation
+//
+// Module Name:
+//
+// halpal.s
+//
+// Abstract:
+//
+// This module implements routines to call PAL functions
+// from the Hal.
+//
+//
+// Author:
+//
+// Jeff McLeman (mcleman) 09-Jul-1992
+//
+// Environment:
+//
+// Kernel mode only.
+//
+// Revision History:
+//
+// 13-Jul-1992 Jeff McLeman (mcleman)
+// add HalpMb to functions.
+//
+// 14-Dec-1993 Joe Notarangelo
+// use new encoding to return to firmware: HalpReboot instead of
+// HalpHalt
+//--
+
+#include "halalpha.h"
+
+//++
+//
+// VOID
+// HalpReboot(
+// )
+//
+// Routine Description:
+//
+// This function merely calls the PAL to reboot the Alpha processor.
+// This is used to restart the console firmware. (Note, MIPS does
+// not have a HALT instruction, so there had to be a mechanism to
+// restart the firware. Alpha merely reboots, which causes a jump
+// to firmware PAL, which restarts the firmware.)
+//
+// Arguments:
+//
+// None.
+//
+// Return Value:
+//
+// None.
+//
+//--
+
+ LEAF_ENTRY(HalpReboot)
+
+ REBOOT // call the PAL to reboot
+
+ .end HalpReboot
+
+//++
+//
+// VOID
+// HalpSwppal(
+// )
+//
+// Routine Description:
+//
+// This function merely calls the PAL to issue a SWPPAL
+// on the Alpha processor...
+//
+// Arguments:
+//
+// a0 The physical address to do the Swappal to.
+// a1 -- a5 Any other arguments to the PALcode.
+//
+// Return Value:
+//
+// None.
+//
+//--
+
+ LEAF_ENTRY(HalpSwppal)
+
+ SWPPAL // call the PAL to do a swap_pal
+
+ ret zero,(ra)
+
+ .end HalpSwppal
+
+
+//++
+//
+// VOID
+// HalpImb(
+// )
+//
+// Routine Description:
+//
+// This function merely calls the PAL to issue an Instruction
+// Memory Barrier on the Alpha processor..
+//
+// Arguments:
+//
+// None.
+//
+// Return Value:
+//
+// None.
+//
+//--
+
+ LEAF_ENTRY(HalpImb)
+
+ IMB // call the PAL to do an IMB
+
+ ret zero,(ra)
+
+ .end HalpImb
+
+
+//++
+//
+// VOID
+// HalpMb(
+// )
+//
+// Routine Description:
+//
+// This function merely calls the PAL to issue a general
+// Memory Barrier on the Alpha processor..
+//
+// Arguments:
+//
+// None.
+//
+// Return Value:
+//
+// None.
+//
+//--
+
+ LEAF_ENTRY(HalpMb)
+
+ mb // memory barrier
+
+ ret zero, (ra)
+
+ .end HalpMb
+
+//++
+//
+// VOID
+// HalpCachePcrValues(
+// )
+//
+// Routine Description:
+//
+// This function merely calls the PAL to cache values in the
+// PCR for faster access.
+//
+// Arguments:
+//
+// None.
+//
+// Return Value:
+//
+// None.
+//
+//--
+
+ LEAF_ENTRY(HalpCachePcrValues)
+
+ CACHE_PCR_VALUES // call the palcode
+
+ ret zero,(ra)
+
+ .end HalpCachePcrValues
+//++
+//
+// ULONG
+// HalpRpcc(
+// )
+//
+// Routine Description:
+//
+// This function executes the RPCC (read processor cycle counter)
+// instruction.
+//
+// Arguments:
+//
+// None.
+//
+// Return Value:
+//
+// The low-order 32 bits of the processor cycle counter is returned
+// as the function value.
+// N.B. At 125 MHz this counter wraps about every 30 seconds. It is
+// the caller's responsibility to deal with overflow or wraparound.
+//
+//--
+
+ LEAF_ENTRY(HalpRpcc)
+
+ rpcc v0 // get rpcc value
+ addl v0, zero, v0 // extend
+
+ ret zero, (ra) // return
+
+ .end HalpRpcc
+
+
+//++
+//
+// MCES
+// HalpReadMces(
+// VOID
+// )
+//
+// Routine Description:
+//
+// Read the state of the MCES (Machine Check Error Summary)
+// internal processor register.
+//
+// Arguments:
+//
+// None.
+//
+// Return Value:
+//
+// v0 - Current MCES value.
+//--
+
+ LEAF_ENTRY(HalpReadMces)
+
+ GET_MACHINE_CHECK_ERROR_SUMMARY // v0 = current value
+
+ ret zero, (ra) // return
+
+ .end HalpReadMces
+
+
+//++
+//
+// MCES
+// HalpWriteMces(
+// IN MCES Mces
+// )
+//
+// Routine Description:
+//
+// Update the current value of the MCES internal processor register.
+//
+// Arguments:
+//
+// Mces(a0) - Supplies the new value for the MCES register.
+//
+// Return Value:
+//
+// v0 - Previous MCES value.
+//
+//--
+
+ LEAF_ENTRY(HalpWriteMces)
+
+ WRITE_MACHINE_CHECK_ERROR_SUMMARY // v0 = previous value
+
+ ret zero, (ra) // return
+
+ .end HalpWriteMces