summaryrefslogtreecommitdiffstats
path: root/private/ntos/fw/alpha/jnfsstb.c
diff options
context:
space:
mode:
Diffstat (limited to 'private/ntos/fw/alpha/jnfsstb.c')
-rw-r--r--private/ntos/fw/alpha/jnfsstb.c335
1 files changed, 335 insertions, 0 deletions
diff --git a/private/ntos/fw/alpha/jnfsstb.c b/private/ntos/fw/alpha/jnfsstb.c
new file mode 100644
index 000000000..4cf40edea
--- /dev/null
+++ b/private/ntos/fw/alpha/jnfsstb.c
@@ -0,0 +1,335 @@
+/*++
+
+Module Name:
+
+ jnfsstb.c
+
+Abstract:
+
+ \nt\private\ntos\bldr\alpha\stubs.c variant stub functions for
+ the FailSafe Booter.
+
+Author:
+
+ John DeRosa 20-Oct-1992
+
+Environment:
+
+ Kernel mode only.
+
+Revision History:
+
+--*/
+
+#include "fwp.h"
+#include "fwstring.h"
+
+//
+// Define global data.
+//
+
+ULONG BlDcacheFillSize = 32;
+
+VOID
+KeBugCheck (
+ IN ULONG BugCheckCode
+ )
+
+/*++
+
+Routine Description:
+
+ This function crashes the system in a controlled manner.
+
+ Alpha/Jensen firmware will try to run the Monitor instead of the
+ kernel debugger.
+
+Arguments:
+
+ BugCheckCode - Supplies the reason for the bug check.
+
+Return Value:
+
+ None.
+
+--*/
+
+{
+
+#ifdef JENSEN
+
+ //
+ // Print out the bug check code and halt.
+ //
+
+ VenPrint1(ST_BUGCHECK_MSG, BugCheckCode);
+ VenPrint(ST_HIT_KEY_FOR_REBOOT_MSG);
+ FwWaitForKeypress(FALSE);
+ AlphaInstHalt();
+
+#else
+
+ //
+ // Print out the bug check code and break.
+ //
+
+ DbgPrint(ST_BUGCHECK_MSG, BugCheckCode);
+ while(TRUE) {
+ DbgBreakPoint();
+ };
+
+#endif
+
+ return;
+}
+
+LARGE_INTEGER
+KeQueryPerformanceCounter (
+ OUT PLARGE_INTEGER Frequency OPTIONAL
+ )
+
+/*++
+
+Routine Description:
+
+ This routine is a stub for the kernel debugger and always returns a
+ value of zero.
+
+Arguments:
+
+ Frequency - Supplies an optional pointer to a variable which receives
+ the performance counter frequency in Hertz.
+
+Return Value:
+
+ A value of zero is returned.
+
+--*/
+
+{
+
+ LARGE_INTEGER Counter;
+
+ //
+ // Return the current system time as the function value.
+ //
+
+ Counter.LowPart = 0;
+ Counter.HighPart = 0;
+ return Counter;
+}
+
+VOID
+KeStallExecutionProcessor (
+ IN ULONG MicroSeconds
+ )
+
+/*++
+
+Routine Description:
+
+ This function stalls execution for the specified number of microseconds.
+
+Arguments:
+
+ MicroSeconds - Supplies the number of microseconds that execution is to be
+ stalled.
+
+Return Value:
+
+ None.
+
+--*/
+
+{
+
+ ULONG Index;
+ ULONG Limit;
+ PULONG Store;
+ ULONG Value;
+
+ //
+ // ****** begin temporary code ******
+ //
+ // This code must be replaced with a smarter version. For now it assumes
+ // an execution rate of 80,000,000 instructions per second and 4 instructions
+ // per iteration.
+ //
+
+ Store = &Value;
+ Limit = (MicroSeconds * 80 / 4);
+ for (Index = 0; Index < Limit; Index += 1) {
+ *Store = Index;
+ }
+ return;
+}
+
+BOOLEAN
+KeFreezeExecution (
+ IN PKTRAP_FRAME TrapFrame,
+ IN PEXCEPTION_RECORD ExceptionRecord
+ )
+
+/*++
+
+Routine Description:
+
+ This function freezes the execution of all other processors in the host
+ configuration and then returns to the caller. It is intended for use by
+ the kernel debugger.
+
+Arguments:
+
+ None.
+
+Return Value:
+
+ Whether interrupts were previously enabled.
+
+--*/
+
+{
+
+ return FALSE;
+}
+
+VOID
+KeThawExecution (
+ IN KIRQL Irql
+ )
+
+/*++
+
+Routine Description:
+
+ This function unfreezes the execution of all other processors in the host
+ configuration and then returns to the caller. It is intended for use by
+ the kernel debugger.
+
+Arguments:
+
+ Irql - Supplies the level that the IRQL is to be lowered to after having
+ unfrozen the execution of all other processors.
+
+Return Value:
+
+ None.
+
+--*/
+
+{
+
+ return;
+}
+
+PVOID
+MmDbgReadCheck (
+ IN PVOID VirtualAddress
+ )
+
+/*++
+
+Routine Description:
+
+ This routine returns the phyiscal address for a virtual address
+ which is valid (mapped) for read access.
+
+Arguments:
+
+ VirtualAddress - Supplies the virtual address to check.
+
+Return Value:
+
+ Returns NULL if the address is not valid or readable, otherwise
+ returns the physical address of the corresponding virtual address.
+
+--*/
+
+{
+
+ return VirtualAddress;
+}
+
+PVOID
+MmDbgTranslatePhysicalAddress (
+ IN PHYSICAL_ADDRESS PhysicalAddress
+ )
+
+/*++
+
+Routine Description:
+
+ This routine returns the phyiscal address for a physical address
+ which is valid (mapped).
+
+Arguments:
+
+ PhysicalAddress - Supplies the physical address to check.
+
+Return Value:
+
+ Returns NULL if the address is not valid or readable, otherwise
+ returns the physical address of the corresponding virtual address.
+
+--*/
+
+{
+
+ return (PVOID)PhysicalAddress.LowPart;
+}
+
+PVOID
+MmDbgWriteCheck (
+ IN PVOID VirtualAddress
+ )
+
+/*++
+
+Routine Description:
+
+ This routine returns the phyiscal address for a virtual address
+ which is valid (mapped) for write access.
+
+Arguments:
+
+ VirtualAddress - Supplies the virtual address to check.
+
+Return Value:
+
+ Returns NULL if the address is not valid or readable, otherwise
+ returns the physical address of the corresponding virtual address.
+
+--*/
+
+{
+ return VirtualAddress;
+}
+
+VOID
+RtlAssert(
+ IN PVOID FailedAssertion,
+ IN PVOID FileName,
+ IN ULONG LineNumber,
+ IN PCHAR Message OPTIONAL
+ )
+{
+
+#ifdef JENSEN
+
+ //
+ // Print out the assertion failure and go to the monitor.
+ //
+
+ VenPrint(ST_ASSERT_MSG);
+ AlphaInstHalt();
+
+#else
+
+ DbgPrint(ST_ASSERT_MSG);
+ while (TRUE) {
+ DbgBreakPoint();
+ }
+
+#endif
+
+}