diff options
author | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
---|---|---|
committer | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
commit | e611b132f9b8abe35b362e5870b74bce94a1e58e (patch) | |
tree | a5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/ntos/fw/alpha/stubs.c | |
download | NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2 NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip |
Diffstat (limited to 'private/ntos/fw/alpha/stubs.c')
-rw-r--r-- | private/ntos/fw/alpha/stubs.c | 376 |
1 files changed, 376 insertions, 0 deletions
diff --git a/private/ntos/fw/alpha/stubs.c b/private/ntos/fw/alpha/stubs.c new file mode 100644 index 000000000..c64c86266 --- /dev/null +++ b/private/ntos/fw/alpha/stubs.c @@ -0,0 +1,376 @@ +/*++ + +Copyright (c) 1990 Microsoft Corporation +Copyright (c) 1993 Digital Equipment Corporation + +Module Name: + + stubs.c + +Abstract: + + This module implements stub routines for the firmware, FailSafe + Booter, and the Alpha AXP/Jensen ROM update tool (JNUPDATE.EXE). + +Author: + + Lluia Abello (lluis) 3-Oct-1991 + +Environment: + + Kernel mode only. + +Revision History: + + John DeRosa [DEC] 11-May-1993 + + Made Alpha AXP modification. + +--*/ + +#include "ntos.h" +#include "fwp.h" +#include "fwstring.h" + +LONG +DebugPrint( + IN PSTRING Output + ); + + +#if defined(MORGAN) +#include "ex.h" + +PVOID +ExAllocatePool( + IN POOL_TYPE PoolType, + IN ULONG NumberOfBytes + ) +{ + return((PVOID)NULL); +} + + + +VOID +KeRaiseIrql ( + KIRQL NewIrql, + PKIRQL OldIrql + ) +{ + return; +} + + + +VOID +KeLowerIrql ( + KIRQL NewIrql + ) +{ + return; +} + + +#endif // MORGAN + + + +#ifndef JNUPDATE + +VOID +FwpFreeStub( + IN PVOID Buffer + ) +{ +} + +VOID +FwpReservedRoutine( + VOID + ) +{ + FwPrint(ST_RESERVED_ROUTINE_MSG); + return; +} + +#endif + + + +// +// This is defined in ntos\rtl\imagedir.c. This is linked in unnecessarily +// on a normal build, and is needed on a kd build. The problem is that the +// rtl copy has an try/except block, which causes SEH code to be pulled into +// the link, which we are not prepared for. So, this copy is identical to +// the rtl copy except it has no try/except form. +// + +PIMAGE_NT_HEADERS +RtlImageNtHeader ( + IN PVOID Base + ) + +/*++ + +Routine Description: + + This function returns the address of the NT Header. + +Arguments: + + Base - Supplies the base of the image. + +Return Value: + + Returns the address of the NT Header. + +--*/ + +{ + + PIMAGE_NT_HEADERS NtHeaders; + + if (Base != NULL && + Base != (PVOID)-1 + ) { +// try { + if (((PIMAGE_DOS_HEADER)Base)->e_magic == IMAGE_DOS_SIGNATURE) { + NtHeaders = (PIMAGE_NT_HEADERS)((PCHAR)Base + ((PIMAGE_DOS_HEADER)Base)->e_lfanew); + if (NtHeaders->Signature == IMAGE_NT_SIGNATURE) { + return NtHeaders; + } + } + +// } except(EXCEPTION_EXECUTE_HANDLER) { +// return NULL; +// } + + } + + return NULL; +} + + + + +#ifndef JNUPDATE + +#ifndef ALPHA_FW_KDHOOKS + +// +// This must not be defined for kd link. +// + +LONG +DebugPrint( + IN PSTRING Output + ) + +/*++ + +Routine Description: + + This function is defined in rtl\alpha\debugstb.s. There, it calls + BREAK_DEBUG_PRINT, which is defined in public\sdk\inc\kxalpha.h to + do a call_pal callkd, which in the NT PALcode will invoke the + AlphaKd link. + + The normal firmware PALcode has no AlphaKd support, so DebugPrint is + stubbed off here. There are references to DebugPrint in the bldr + directory and some fw files. + +Arguments: + + +Return Value: + +--*/ + +{ + return (0); +} + +#endif + +#endif + + +#ifndef JNUPDATE + +VOID +RtlInitString( + OUT PSTRING DestinationString, + IN PCSZ SourceString OPTIONAL + ) + +/*++ + +Routine Description: + + The RtlInitString function initializes an NT counted string. + The DestinationString is initialized to point to the SourceString + and the Length and MaximumLength fields of DestinationString are + initialized to the length of the SourceString, which is zero if + SourceString is not specified. + + This is a copy of the same function in \nt\private\ntos\rtl\string.c. + It is here to minimize what the linker drags into the image. + +Arguments: + + DestinationString - Pointer to the counted string to initialize + + SourceString - Optional pointer to a null terminated string that + the counted string is to point to. + + +Return Value: + + None. + +--*/ + +{ + DestinationString->Length = 0; + DestinationString->Buffer = (PCHAR)SourceString; + if (ARGUMENT_PRESENT( SourceString )) { + while (*SourceString++) { + DestinationString->Length++; + } + + DestinationString->MaximumLength = (SHORT)(DestinationString->Length+1); + } + else { + DestinationString->MaximumLength = 0; + } +} + +#endif + +#if (!defined FAILSAFE_BOOTER) && (!defined JNUPDATE) + + +// +// This stub is needed by some function in the rtl library. +// + +NTSTATUS +ZwQuerySystemInformation ( + IN SYSTEM_INFORMATION_CLASS SystemInformationClass, + OUT PVOID SystemInformation, + IN ULONG SystemInformationLength, + OUT PULONG ReturnLength OPTIONAL + ) + +{ + return; +} + +#endif + + +VOID +FwErrorStackUnderflow ( + IN ULONG Caller, + IN ULONG CallerOfTheCaller, + IN ULONG CallerRequestedStackArea + ) + +/*++ + +Routine Description: + + A function was called that requested a stack area too large for + the current Firmware stack. The firmware _RtlCheckStack function + (see fwchkstk.s) calls this function to print out the fatal error + message. + + The 64KB underneath the Firmware stack is used as a panic stack. + +Arguments: + + Caller The address of the function that tried to + allocate the stack space. + + CallerOfTheCaller The address of the function that called the + function held in "Caller". + + CallerRequestedStackArea The amount of stack space requested by + "Caller". + +Return Value: + + This never returns. + +--*/ + +{ + VenSetScreenColor(ArcColorRed, ArcColorWhite); + VenPrint(ST_STACK_UNDERFLOW_1_MSG); + VenPrint2(ST_STACK_UNDERFLOW_2_MSG, Caller, CallerOfTheCaller); + VenPrint2(ST_STACK_UNDERFLOW_3_MSG, + CallerRequestedStackArea, + FW_STACK_LOWER_BOUND); + +#if (!defined FAILSAFE_BOOTER) && (!defined JNUPDATE) + + VenPrint(ST_HIT_KEY_FOR_MONITOR_MSG); + VenSetScreenColor(ArcColorWhite, ArcColorBlue); + + FwWaitForKeypress(TRUE); + + FwMonitor(0); // Should never return. + +#endif + + while (TRUE) { + } +} + + +#ifndef JNUPDATE + +VOID +KeFlushIoBuffers ( + IN PMDL Mdl, + IN BOOLEAN ReadOperation, + IN BOOLEAN DmaOperation + ) + +/*++ + +Routine Description: + + This function flushes the I/O buffer specified by the memory descriptor + list from the data cache on the current processor. + +Arguments: + + Mdl - Supplies a pointer to a memory descriptor list that describes the + I/O buffer location. + + ReadOperation - Supplies a boolean value that describes whether the I/O + operation is a read into memory. + + DmaOperation - Supplies a boolean value that describes whether the I/O + operation is a DMA operation. + +Return Value: + + None. + +--*/ +{ + + // + // temptemp + // + // This function must distribute the flush in an MP system. + // + + HalFlushIoBuffers( Mdl, ReadOperation, DmaOperation ); + return; +} + +#endif |