NT4/private/ntos/fw/alpha/stubs.c
2020-09-30 17:12:29 +02:00

377 lines
6.5 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
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