742 lines
18 KiB
C
742 lines
18 KiB
C
|
/*++
|
|||
|
|
|||
|
Copyright (c) 1993 Digital Equipment Corporation
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
fwcallbk.h
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
This module defines the firmware vendor vector callbacks that
|
|||
|
will be implemented on all Alpha AXP platforms.
|
|||
|
|
|||
|
Author:
|
|||
|
|
|||
|
John DeRosa [DEC] 10-December-1993
|
|||
|
|
|||
|
Revision History:
|
|||
|
|
|||
|
14-July-1994 John DeRosa [DEC]
|
|||
|
|
|||
|
Added definitions for GetBusDataByOffset and SetBusDataByOffset.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
#ifndef _FWCALLBK_
|
|||
|
#define _FWCALLBK_
|
|||
|
|
|||
|
//
|
|||
|
// This module contains typedefs, which are not parsable by the assembler.
|
|||
|
//
|
|||
|
|
|||
|
#ifndef _LANGUAGE_ASSEMBLY
|
|||
|
|
|||
|
#include "arc.h"
|
|||
|
|
|||
|
//
|
|||
|
// Define the structure used to pass information to the
|
|||
|
// ECU, and other ARC applications.
|
|||
|
//
|
|||
|
|
|||
|
typedef struct _ARC_INFORMATION {
|
|||
|
|
|||
|
//
|
|||
|
// The version number of this structure definition.
|
|||
|
//
|
|||
|
|
|||
|
ULONG Version;
|
|||
|
|
|||
|
//
|
|||
|
// A pointer to an argv-like array. Each entry is a search path
|
|||
|
// string.
|
|||
|
//
|
|||
|
// This is used to pass to the ECU a list of directories to search
|
|||
|
// through for configuration files. The definition passed back to
|
|||
|
// the ECU depends on both the platform it is running on and the
|
|||
|
// operating system selection in effect at the time that the call
|
|||
|
// to VenReturnArcInformation is made.
|
|||
|
//
|
|||
|
// Rules:
|
|||
|
//
|
|||
|
// 1. The end of the search list is marked with a NULL.
|
|||
|
// 2. Each entry must be a subset of a valid FAT filesystem.
|
|||
|
// 3. Each entry must start with "\\".
|
|||
|
// 4. Each entry must end with an ECU configuration file
|
|||
|
// prefix character. (Currently, we use ! and A.)
|
|||
|
//
|
|||
|
// It is possible that other configuration utilities might want to
|
|||
|
// use this search path someday.
|
|||
|
//
|
|||
|
|
|||
|
PUCHAR * SearchPath;
|
|||
|
|
|||
|
PUCHAR Reserved1;
|
|||
|
PUCHAR Reserved2;
|
|||
|
PUCHAR Reserved3;
|
|||
|
PUCHAR Reserved4;
|
|||
|
|
|||
|
} ARC_INFORMATION, *PARC_INFORMATION;
|
|||
|
|
|||
|
#define ARC_INFORMATION_VERSION 0
|
|||
|
|
|||
|
//
|
|||
|
// Structure used to return system and processor information.
|
|||
|
//
|
|||
|
|
|||
|
typedef struct _EXTENDED_SYSTEM_INFORMATION {
|
|||
|
ULONG ProcessorId;
|
|||
|
ULONG ProcessorRevision;
|
|||
|
ULONG ProcessorPageSize;
|
|||
|
ULONG NumberOfPhysicalAddressBits;
|
|||
|
ULONG MaximumAddressSpaceNumber;
|
|||
|
ULONG ProcessorCycleCounterPeriod;
|
|||
|
ULONG SystemRevision;
|
|||
|
UCHAR SystemSerialNumber[16];
|
|||
|
UCHAR FirmwareVersion[16];
|
|||
|
UCHAR FirmwareBuildTimeStamp[12]; // yymmdd.hhmm (Available as of 5.10)
|
|||
|
} EXTENDED_SYSTEM_INFORMATION, *PEXTENDED_SYSTEM_INFORMATION;
|
|||
|
|
|||
|
//
|
|||
|
// Define structure used to call BIOS emulator. This mimics the
|
|||
|
// VIDEO_X86_BIOS_ARGUMENTS typedef in \nt\private\ntos\inc\video.h.
|
|||
|
//
|
|||
|
|
|||
|
typedef struct X86_BIOS_ARGUMENTS {
|
|||
|
ULONG Eax;
|
|||
|
ULONG Ebx;
|
|||
|
ULONG Ecx;
|
|||
|
ULONG Edx;
|
|||
|
ULONG Esi;
|
|||
|
ULONG Edi;
|
|||
|
ULONG Ebp;
|
|||
|
} X86_BIOS_ARGUMENTS, *PX86_BIOS_ARGUMENTS;
|
|||
|
|
|||
|
//
|
|||
|
// Define the firmware vendor specific entry point numbers that are
|
|||
|
// common to all Alpha AXP platforms.
|
|||
|
//
|
|||
|
|
|||
|
typedef enum _VENDOR_GENERIC_ENTRY {
|
|||
|
AllocatePoolRoutine,
|
|||
|
StallExecutionRoutine,
|
|||
|
PrintRoutine,
|
|||
|
ReturnExtendedSystemInformationRoutine,
|
|||
|
VideoDisplayInitializeRoutine,
|
|||
|
EISAReadRegisterBufferUCHARRoutine,
|
|||
|
EISAWriteRegisterBufferUCHARRoutine,
|
|||
|
EISAReadPortUCHARRoutine,
|
|||
|
EISAReadPortUSHORTRoutine,
|
|||
|
EISAReadPortULONGRoutine,
|
|||
|
EISAWritePortUCHARRoutine,
|
|||
|
EISAWritePortUSHORTRoutine,
|
|||
|
EISAWritePortULONGRoutine,
|
|||
|
FreePoolRoutine,
|
|||
|
CallBiosRoutine,
|
|||
|
TranslateBusAddressRoutine,
|
|||
|
ReadPortUCHARRoutine,
|
|||
|
ReadPortUSHORTRoutine,
|
|||
|
ReadPortULONGRoutine,
|
|||
|
WritePortUCHARRoutine,
|
|||
|
WritePortUSHORTRoutine,
|
|||
|
WritePortULONGRoutine,
|
|||
|
ReadRegisterUCHARRoutine,
|
|||
|
ReadRegisterUSHORTRoutine,
|
|||
|
ReadRegisterULONGRoutine,
|
|||
|
WriteRegisterUCHARRoutine,
|
|||
|
WriteRegisterUSHORTRoutine,
|
|||
|
WriteRegisterULONGRoutine,
|
|||
|
GetBusDataByOffsetRoutine,
|
|||
|
SetBusDataByOffsetRoutine,
|
|||
|
WidePrintRoutine,
|
|||
|
ReturnLanguageIdRoutine,
|
|||
|
GetAdapterRoutine,
|
|||
|
AllocateCommonBufferRoutine,
|
|||
|
FreeCommonBufferRoutine,
|
|||
|
ReturnArcInformationRoutine,
|
|||
|
IssueSrbDirectRoutine,
|
|||
|
ReservedRoutine0,
|
|||
|
ReadWriteErrorFrameRoutine,
|
|||
|
MaximumVendorRoutine
|
|||
|
} VENDOR_GENERIC_ENTRY;
|
|||
|
|
|||
|
//
|
|||
|
// Define vendor specific routine types.
|
|||
|
//
|
|||
|
|
|||
|
typedef
|
|||
|
PVOID
|
|||
|
(*PVEN_ALLOCATE_POOL_ROUTINE) (
|
|||
|
IN ULONG NumberOfBytes
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
VOID
|
|||
|
(*PVEN_STALL_EXECUTION_ROUTINE) (
|
|||
|
IN ULONG Microseconds
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
ULONG
|
|||
|
(*PVEN_PRINT_ROUTINE) (
|
|||
|
IN PCHAR Format,
|
|||
|
...
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
ULONG
|
|||
|
(*PVEN_WIDE_PRINT_ROUTINE) (
|
|||
|
IN PWCHAR Format,
|
|||
|
...
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
LONG
|
|||
|
(*PVEN_RETURN_LANGUAGE_ID_ROUTINE) (
|
|||
|
IN VOID
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
VOID
|
|||
|
(*PVEN_RETURN_EXTENDED_SYSTEM_INFORMATION_ROUTINE) (
|
|||
|
OUT PEXTENDED_SYSTEM_INFORMATION SystemInfo
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
ARC_STATUS
|
|||
|
(*PVEN_VIDEO_DISPLAY_INITIALIZE_ROUTINE) (
|
|||
|
OUT PVOID UnusedParameter
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
ULONG
|
|||
|
(*PVEN_EISA_READ_REGISTER_BUFFER_UCHAR_ROUTINE) (
|
|||
|
IN ULONG BusNumber,
|
|||
|
IN ULONG Offset,
|
|||
|
OUT PVOID Buffer,
|
|||
|
IN ULONG Length
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
ULONG
|
|||
|
(*PVEN_EISA_WRITE_REGISTER_BUFFER_UCHAR_ROUTINE) (
|
|||
|
IN ULONG BusNumber,
|
|||
|
IN ULONG Offset,
|
|||
|
OUT PVOID Buffer,
|
|||
|
IN ULONG Length
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
UCHAR
|
|||
|
(*PVEN_EISA_READ_PORT_UCHAR_ROUTINE) (
|
|||
|
IN ULONG BusNumber,
|
|||
|
IN ULONG Offset
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
USHORT
|
|||
|
(*PVEN_EISA_READ_PORT_USHORT_ROUTINE) (
|
|||
|
IN ULONG BusNumber,
|
|||
|
IN ULONG Offset
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
ULONG
|
|||
|
(*PVEN_EISA_READ_PORT_ULONG_ROUTINE) (
|
|||
|
IN ULONG BusNumber,
|
|||
|
IN ULONG Offset
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
VOID
|
|||
|
(*PVEN_EISA_WRITE_PORT_UCHAR_ROUTINE) (
|
|||
|
IN ULONG BusNumber,
|
|||
|
IN ULONG Offset,
|
|||
|
IN UCHAR Datum
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
VOID
|
|||
|
(*PVEN_EISA_WRITE_PORT_USHORT_ROUTINE) (
|
|||
|
IN ULONG BusNumber,
|
|||
|
IN ULONG Offset,
|
|||
|
IN USHORT Datum
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
VOID
|
|||
|
(*PVEN_EISA_WRITE_PORT_ULONG_ROUTINE) (
|
|||
|
IN ULONG BusNumber,
|
|||
|
IN ULONG Offset,
|
|||
|
IN ULONG Datum
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
VOID
|
|||
|
(*PVEN_FREE_POOL_ROUTINE) (
|
|||
|
IN PVOID MemoryPointer
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
VOID
|
|||
|
(*PVEN_CALL_BIOS_ROUTINE) (
|
|||
|
IN ULONG InterruptNumber,
|
|||
|
IN OUT PX86_BIOS_ARGUMENTS BiosArguments
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
BOOLEAN
|
|||
|
(*PVEN_TRANSLATE_BUS_ADDRESS_ROUTINE) (
|
|||
|
IN INTERFACE_TYPE InterfaceType,
|
|||
|
IN ULONG BusNumber,
|
|||
|
IN PHYSICAL_ADDRESS BusAddress,
|
|||
|
IN OUT PULONG AddressSpace,
|
|||
|
OUT PPHYSICAL_ADDRESS TranslatedAddress
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
UCHAR
|
|||
|
(*PVEN_READ_PORT_UCHAR_ROUTINE) (
|
|||
|
PUCHAR Port
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
USHORT
|
|||
|
(*PVEN_READ_PORT_USHORT_ROUTINE) (
|
|||
|
PUSHORT Port
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
ULONG
|
|||
|
(*PVEN_READ_PORT_ULONG_ROUTINE) (
|
|||
|
PULONG Port
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
VOID
|
|||
|
(*PVEN_WRITE_PORT_UCHAR_ROUTINE) (
|
|||
|
PUCHAR Port,
|
|||
|
UCHAR Value
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
VOID
|
|||
|
(*PVEN_WRITE_PORT_USHORT_ROUTINE) (
|
|||
|
PUSHORT Port,
|
|||
|
USHORT Value
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
VOID
|
|||
|
(*PVEN_WRITE_PORT_ULONG_ROUTINE) (
|
|||
|
PULONG Port,
|
|||
|
ULONG Value
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
UCHAR
|
|||
|
(*PVEN_READ_REGISTER_UCHAR_ROUTINE) (
|
|||
|
PUCHAR Register
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
USHORT
|
|||
|
(*PVEN_READ_REGISTER_USHORT_ROUTINE) (
|
|||
|
PUSHORT Register
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
ULONG
|
|||
|
(*PVEN_READ_REGISTER_ULONG_ROUTINE) (
|
|||
|
PULONG Register
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
VOID
|
|||
|
(*PVEN_WRITE_REGISTER_UCHAR_ROUTINE) (
|
|||
|
PUCHAR Register,
|
|||
|
UCHAR Value
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
VOID
|
|||
|
(*PVEN_WRITE_REGISTER_USHORT_ROUTINE) (
|
|||
|
PUSHORT Register,
|
|||
|
USHORT Value
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
VOID
|
|||
|
(*PVEN_WRITE_REGISTER_ULONG_ROUTINE) (
|
|||
|
PULONG Register,
|
|||
|
ULONG Value
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
ULONG
|
|||
|
(*PVEN_GET_BUS_DATA_BY_OFFSET_ROUTINE) (
|
|||
|
IN BUS_DATA_TYPE BusDataType,
|
|||
|
IN ULONG BusNumber,
|
|||
|
IN ULONG SlotNumber,
|
|||
|
IN PVOID Buffer,
|
|||
|
IN ULONG Offset,
|
|||
|
IN ULONG Length
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
ULONG
|
|||
|
(*PVEN_SET_BUS_DATA_BY_OFFSET_ROUTINE) (
|
|||
|
IN BUS_DATA_TYPE BusDataType,
|
|||
|
IN ULONG BusNumber,
|
|||
|
IN ULONG SlotNumber,
|
|||
|
IN PVOID Buffer,
|
|||
|
IN ULONG Offset,
|
|||
|
IN ULONG Length
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
PADAPTER_OBJECT
|
|||
|
(*PVEN_GET_ADAPTER_ROUTINE) (
|
|||
|
IN PDEVICE_DESCRIPTION DeviceDescription,
|
|||
|
IN OUT PULONG NumberOfMapRegisters
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
PVOID
|
|||
|
(*PVEN_ALLOCATE_COMMON_BUFFER_ROUTINE) (
|
|||
|
IN PADAPTER_OBJECT AdapterObject,
|
|||
|
IN ULONG Length,
|
|||
|
OUT PPHYSICAL_ADDRESS LogicalAddress,
|
|||
|
IN BOOLEAN CacheEnabled
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
VOID
|
|||
|
(*PVEN_FREE_COMMON_BUFFER_ROUTINE) (
|
|||
|
IN PADAPTER_OBJECT AdapterObject,
|
|||
|
IN ULONG Length,
|
|||
|
IN PHYSICAL_ADDRESS LogicalAddress,
|
|||
|
IN PVOID VirtualAddress,
|
|||
|
IN BOOLEAN CacheEnabled
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
ARC_STATUS
|
|||
|
(*PVEN_RETURN_ARC_INFORMATION_ROUTINE) (
|
|||
|
OUT PARC_INFORMATION ArcInformation
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
ARC_STATUS
|
|||
|
(*PVEN_ISSUE_SRB_DIRECT_ROUTINE) (
|
|||
|
UCHAR ScsiAdapterId,
|
|||
|
UCHAR PathId,
|
|||
|
UCHAR TargetId,
|
|||
|
UCHAR LunId,
|
|||
|
PVOID Srb,
|
|||
|
PVOID BufferAddress,
|
|||
|
ULONG BufferLength,
|
|||
|
BOOLEAN WriteToDevice
|
|||
|
);
|
|||
|
|
|||
|
typedef
|
|||
|
ARC_STATUS
|
|||
|
(*PVEN_READ_WRITE_ERROR_FRAME_ROUTINE) (
|
|||
|
ULONG ReadWrite,
|
|||
|
ULONG FrameType,
|
|||
|
PVOID FrameAddress,
|
|||
|
PLONG FrameSize,
|
|||
|
ULONG FrameNumber
|
|||
|
);
|
|||
|
|
|||
|
//
|
|||
|
// Define the stub function prototypes necessary to interface with the
|
|||
|
// 32-bit firmware on 64-bit systems.
|
|||
|
//
|
|||
|
// These routines are required for the 64-bit system until (if) 64-bit
|
|||
|
// firmware is ever supplied.
|
|||
|
//
|
|||
|
|
|||
|
#if defined(_AXP64_) && defined(_NTHAL_)
|
|||
|
|
|||
|
VOID
|
|||
|
HalpVenCallBios(
|
|||
|
IN ULONG InterruptNumber,
|
|||
|
IN OUT PX86_BIOS_ARGUMENTS BiosArguments
|
|||
|
);
|
|||
|
|
|||
|
ARC_STATUS
|
|||
|
HalpVenReadWriteErrorFrame(
|
|||
|
IN ULONG ReadWrite,
|
|||
|
IN ULONG FrameType,
|
|||
|
IN OUT PVOID FrameAddress,
|
|||
|
IN OUT PLONG FrameSize,
|
|||
|
IN ULONG FrameNumber
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
HalpVenVideoDisplayInitialize(
|
|||
|
OUT PVOID UnusedParameter
|
|||
|
);
|
|||
|
|
|||
|
#endif
|
|||
|
|
|||
|
//
|
|||
|
// Define vendor specific macros for use by programs that run on
|
|||
|
// Alpha AXP NT firmware.
|
|||
|
//
|
|||
|
// These calls are guaranteed to return legitimate values. If a function
|
|||
|
// is not defined for a particular platform, it will return with an error
|
|||
|
// code or just return normally, as appropriate.
|
|||
|
//
|
|||
|
|
|||
|
#define VenAllocatePool(NumberOfBytes) \
|
|||
|
((PVEN_ALLOCATE_POOL_ROUTINE)(SYSTEM_BLOCK->VendorVector[AllocatePoolRoutine])) \
|
|||
|
((NumberOfBytes))
|
|||
|
|
|||
|
#define VenStallExecution(Microseconds) \
|
|||
|
((PVEN_STALL_EXECUTION_ROUTINE)(SYSTEM_BLOCK->VendorVector[StallExecutionRoutine])) \
|
|||
|
((Microseconds))
|
|||
|
|
|||
|
#define VenReturnLanguageId \
|
|||
|
((PVEN_RETURN_LANGUAGE_ID_ROUTINE)(SYSTEM_BLOCK->VendorVector[ReturnLanguageIdRoutine]))
|
|||
|
|
|||
|
#define VenWPrint \
|
|||
|
((PVEN_WIDE_PRINT_ROUTINE)(SYSTEM_BLOCK->VendorVector[WidePrintRoutine]))
|
|||
|
|
|||
|
#define VenPrint \
|
|||
|
((PVEN_PRINT_ROUTINE)(SYSTEM_BLOCK->VendorVector[PrintRoutine]))
|
|||
|
|
|||
|
//
|
|||
|
// N.B. VenPrint1 and VenPrint2 are retained here for backwards compatibility.
|
|||
|
//
|
|||
|
|
|||
|
#define VenPrint1 VenPrint
|
|||
|
#define VenPrint2 VenPrint
|
|||
|
|
|||
|
#define VenReturnExtendedSystemInformation(x) \
|
|||
|
((PVEN_RETURN_EXTENDED_SYSTEM_INFORMATION_ROUTINE)(SYSTEM_BLOCK->VendorVector[ReturnExtendedSystemInformationRoutine]))(x)
|
|||
|
|
|||
|
#if defined(_AXP64_) && defined(_NTHAL_)
|
|||
|
|
|||
|
__inline
|
|||
|
VOID
|
|||
|
VenVideoDisplayInitialize(
|
|||
|
OUT PVOID UnusedParameter
|
|||
|
)
|
|||
|
|
|||
|
{
|
|||
|
KIRQL OldIrql = FwAcquireFirmwareLock();
|
|||
|
HalpVenVideoDisplayInitialize(UnusedParameter);
|
|||
|
FwReleaseFirmwareLock(OldIrql);
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
#else
|
|||
|
|
|||
|
#define VenVideoDisplayInitialize(x) \
|
|||
|
((PVEN_VIDEO_DISPLAY_INITIALIZE_ROUTINE)(SYSTEM_BLOCK->VendorVector[VideoDisplayInitializeRoutine]))(x)
|
|||
|
|
|||
|
#endif
|
|||
|
|
|||
|
#define VenEISAReadRegisterBufferUCHAR(BusNumber, Offset, Buffer, Length) \
|
|||
|
((PVEN_EISA_READ_REGISTER_BUFFER_UCHAR_ROUTINE)(SYSTEM_BLOCK->VendorVector[EISAReadRegisterBufferUCHARRoutine])) \
|
|||
|
((BusNumber), (Offset), (Buffer), (Length))
|
|||
|
|
|||
|
#define VenEISAWriteRegisterBufferUCHAR(BusNumber, Offset, Buffer, Length) \
|
|||
|
((PVEN_EISA_WRITE_REGISTER_BUFFER_UCHAR_ROUTINE)(SYSTEM_BLOCK->VendorVector[EISAWriteRegisterBufferUCHARRoutine])) \
|
|||
|
((BusNumber), (Offset), (Buffer), (Length))
|
|||
|
|
|||
|
#define VenEISAReadPortUCHAR(BusNumber, Offset) \
|
|||
|
((PVEN_EISA_READ_PORT_UCHAR_ROUTINE)(SYSTEM_BLOCK->VendorVector[EISAReadPortUCHARRoutine])) \
|
|||
|
((BusNumber), (Offset))
|
|||
|
|
|||
|
#define VenEISAReadPortUSHORT(BusNumber, Offset) \
|
|||
|
((PVEN_EISA_READ_PORT_USHORT_ROUTINE)(SYSTEM_BLOCK->VendorVector[EISAReadPortUSHORTRoutine])) \
|
|||
|
((BusNumber), (Offset))
|
|||
|
|
|||
|
#define VenEISAReadPortULONG(BusNumber, Offset) \
|
|||
|
((PVEN_EISA_READ_PORT_ULONG_ROUTINE)(SYSTEM_BLOCK->VendorVector[EISAReadPortULONGRoutine])) \
|
|||
|
((BusNumber), (Offset))
|
|||
|
|
|||
|
#define VenEISAWritePortUCHAR(BusNumber, Offset, Datum) \
|
|||
|
((PVEN_EISA_WRITE_PORT_UCHAR_ROUTINE)(SYSTEM_BLOCK->VendorVector[EISAWritePortUCHARRoutine])) \
|
|||
|
((BusNumber), (Offset), (Datum))
|
|||
|
|
|||
|
#define VenEISAWritePortUSHORT(BusNumber, Offset, Datum) \
|
|||
|
((PVEN_EISA_WRITE_PORT_USHORT_ROUTINE)(SYSTEM_BLOCK->VendorVector[EISAWritePortUSHORTRoutine])) \
|
|||
|
((BusNumber), (Offset), (Datum))
|
|||
|
|
|||
|
#define VenEISAWritePortULONG(BusNumber, Offset, Datum) \
|
|||
|
((PVEN_EISA_WRITE_PORT_ULONG_ROUTINE)(SYSTEM_BLOCK->VendorVector[EISAWritePortULONGRoutine])) \
|
|||
|
((BusNumber), (Offset), (Datum))
|
|||
|
|
|||
|
#define VenFreePool(MemoryPointer) \
|
|||
|
((PVEN_FREE_POOL_ROUTINE)(SYSTEM_BLOCK->VendorVector[FreePoolRoutine])) \
|
|||
|
((MemoryPointer))
|
|||
|
|
|||
|
#if defined(_AXP64_) && defined(_NTHAL_)
|
|||
|
|
|||
|
__inline
|
|||
|
VOID
|
|||
|
VenCallBios(
|
|||
|
IN ULONG InterruptNumber,
|
|||
|
IN OUT PX86_BIOS_ARGUMENTS BiosArguments
|
|||
|
)
|
|||
|
|
|||
|
{
|
|||
|
KIRQL OldIrql = FwAcquireFirmwareLock();
|
|||
|
HalpVenCallBios(InterruptNumber, BiosArguments);
|
|||
|
FwReleaseFirmwareLock(OldIrql);
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
#else
|
|||
|
|
|||
|
#define VenCallBios(InterruptNumber, BiosArguments) \
|
|||
|
((PVEN_CALL_BIOS_ROUTINE)(SYSTEM_BLOCK->VendorVector[CallBiosRoutine])) \
|
|||
|
((InterruptNumber), (BiosArguments))
|
|||
|
#endif
|
|||
|
|
|||
|
#define VenTranslateBusAddress(InterfaceType, BusNumber, BusAddress, AddressSpace, TranslatedAddress) \
|
|||
|
((PVEN_TRANSLATE_BUS_ADDRESS_ROUTINE)(SYSTEM_BLOCK->VendorVector[TranslateBusAddressRoutine])) \
|
|||
|
((InterfaceType), (BusNumber), (BusAddress), (AddressSpace), (TranslatedAddress))
|
|||
|
|
|||
|
#define VenReadPortUCHAR(Port) \
|
|||
|
((PVEN_READ_PORT_UCHAR_ROUTINE)(SYSTEM_BLOCK->VendorVector[ReadPortUCHARRoutine])) \
|
|||
|
((Port))
|
|||
|
|
|||
|
#define VenReadPortUSHORT(Port) \
|
|||
|
((PVEN_READ_PORT_USHORT_ROUTINE)(SYSTEM_BLOCK->VendorVector[ReadPortUSHORTRoutine])) \
|
|||
|
((Port))
|
|||
|
|
|||
|
#define VenReadPortULONG(Port) \
|
|||
|
((PVEN_READ_PORT_ULONG_ROUTINE)(SYSTEM_BLOCK->VendorVector[ReadPortULONGRoutine])) \
|
|||
|
((Port))
|
|||
|
|
|||
|
#define VenWritePortUCHAR(Port, Value) \
|
|||
|
((PVEN_WRITE_PORT_UCHAR_ROUTINE)(SYSTEM_BLOCK->VendorVector[WritePortUCHARRoutine])) \
|
|||
|
((Port), (Value))
|
|||
|
|
|||
|
#define VenWritePortUSHORT(Port, Value) \
|
|||
|
((PVEN_WRITE_PORT_USHORT_ROUTINE)(SYSTEM_BLOCK->VendorVector[WritePortUSHORTRoutine])) \
|
|||
|
((Port), (Value))
|
|||
|
|
|||
|
#define VenWritePortULONG(Port, Value) \
|
|||
|
((PVEN_WRITE_PORT_ULONG_ROUTINE)(SYSTEM_BLOCK->VendorVector[WritePortULONGRoutine])) \
|
|||
|
((Port), (Value))
|
|||
|
|
|||
|
#define VenReadRegisterUCHAR(Register) \
|
|||
|
((PVEN_READ_REGISTER_UCHAR_ROUTINE)(SYSTEM_BLOCK->VendorVector[ReadRegisterUCHARRoutine])) \
|
|||
|
((Register))
|
|||
|
|
|||
|
#define VenReadRegisterUSHORT(Register) \
|
|||
|
((PVEN_READ_REGISTER_USHORT_ROUTINE)(SYSTEM_BLOCK->VendorVector[ReadRegisterUSHORTRoutine])) \
|
|||
|
((Register))
|
|||
|
|
|||
|
#define VenReadRegisterULONG(Register) \
|
|||
|
((PVEN_READ_REGISTER_ULONG_ROUTINE)(SYSTEM_BLOCK->VendorVector[ReadRegisterULONGRoutine])) \
|
|||
|
((Register))
|
|||
|
|
|||
|
#define VenWriteRegisterUCHAR(Register, Value) \
|
|||
|
((PVEN_WRITE_REGISTER_UCHAR_ROUTINE)(SYSTEM_BLOCK->VendorVector[WriteRegisterUCHARRoutine])) \
|
|||
|
((Register), (Value))
|
|||
|
|
|||
|
#define VenWriteRegisterUSHORT(Register, Value) \
|
|||
|
((PVEN_WRITE_REGISTER_USHORT_ROUTINE)(SYSTEM_BLOCK->VendorVector[WriteRegisterUSHORTRoutine])) \
|
|||
|
((Register), (Value))
|
|||
|
|
|||
|
#define VenWriteRegisterULONG(Register, Value) \
|
|||
|
((PVEN_WRITE_REGISTER_ULONG_ROUTINE)(SYSTEM_BLOCK->VendorVector[WriteRegisterULONGRoutine])) \
|
|||
|
((Register), (Value))
|
|||
|
|
|||
|
#define VenGetBusDataByOffset(BusDataType, BusNumber, SlotNumber, Buffer, Offset, Length) \
|
|||
|
((PVEN_GET_BUS_DATA_BY_OFFSET_ROUTINE)(SYSTEM_BLOCK->VendorVector[GetBusDataByOffsetRoutine])) \
|
|||
|
((BusDataType), (BusNumber), (SlotNumber), (Buffer), (Offset), (Length))
|
|||
|
|
|||
|
#define VenSetBusDataByOffset(BusDataType, BusNumber, SlotNumber, Buffer, Offset, Length) \
|
|||
|
((PVEN_SET_BUS_DATA_BY_OFFSET_ROUTINE)(SYSTEM_BLOCK->VendorVector[SetBusDataByOffsetRoutine])) \
|
|||
|
((BusDataType), (BusNumber), (SlotNumber), (Buffer), (Offset), (Length))
|
|||
|
|
|||
|
#define VenGetAdapter(DeviceDescription, NumberOfMapRegisters) \
|
|||
|
((PVEN_GET_ADAPTER_ROUTINE)(SYSTEM_BLOCK->VendorVector[GetAdapterRoutine])) \
|
|||
|
((DeviceDescription), (NumberOfMapRegisters))
|
|||
|
|
|||
|
#define VenAllocateCommonBuffer(AdapterObject, Length, LogicalAddress, CacheEnabled) \
|
|||
|
((PVEN_ALLOCATE_COMMON_BUFFER_ROUTINE)(SYSTEM_BLOCK->VendorVector[AllocateCommonBufferRoutine])) \
|
|||
|
((AdapterObject), (Length), (LogicalAddress), (CacheEnabled))
|
|||
|
|
|||
|
#define VenFreeCommonBuffer(AdapterObject, Length, LogicalAddress, VirtualAddress, CacheEnabled) \
|
|||
|
((PVEN_FREE_COMMON_BUFFER_ROUTINE)(SYSTEM_BLOCK->VendorVector[FreeCommonBufferRoutine])) \
|
|||
|
((AdapterObject), (Length), (LogicalAddress), (VirtualAddress), (CacheEnabled))
|
|||
|
|
|||
|
#define VenReturnArcInformation(ArcInfo) \
|
|||
|
((PVEN_RETURN_ARC_INFORMATION_ROUTINE)(SYSTEM_BLOCK->VendorVector[ReturnArcInformationRoutine])) \
|
|||
|
((ArcInfo))
|
|||
|
|
|||
|
#define VenIssueSrbDirect(ScsiAdapterId, PathId, TargetId, LunId, Srb, BufferAddress, BufferLength, WriteToDevice) \
|
|||
|
((PVEN_ISSUE_SRB_DIRECT_ROUTINE)(SYSTEM_BLOCK->VendorVector[IssueSrbDirectRoutine])) \
|
|||
|
((ScsiAdapterId), (PathId), (TargetId), (LunId), (Srb), (BufferAddress), (BufferLength), (WriteToDevice))
|
|||
|
|
|||
|
//
|
|||
|
// As we are extending the vendor array here. Let's check the AlphaBIOS
|
|||
|
// has set the CDS tree up to support th extension. If not, don't do the call.
|
|||
|
//
|
|||
|
|
|||
|
//
|
|||
|
// Define the params used for the Error Logging callbacks.
|
|||
|
//
|
|||
|
|
|||
|
typedef enum _VENDOR_READWRITE_TYPE {
|
|||
|
ReadFrame = 1,
|
|||
|
WriteFrame
|
|||
|
} VENDOR_READWRITE_TYPE;
|
|||
|
|
|||
|
typedef enum _VENDOR_READWRITE_FRAMETYPE {
|
|||
|
FatalErrorFrame = 1,
|
|||
|
DoubleErrorFrame,
|
|||
|
FRUErrorFrame
|
|||
|
} VENDOR_READWRITE_FRAMETYPE;
|
|||
|
|
|||
|
#if defined(_AXP64_) && defined(_NTHAL_)
|
|||
|
|
|||
|
__inline
|
|||
|
ARC_STATUS
|
|||
|
VenReadWriteErrorFrame(
|
|||
|
IN ULONG ReadWrite,
|
|||
|
IN ULONG FrameType,
|
|||
|
IN OUT PVOID FrameAddress,
|
|||
|
IN OUT PLONG FrameSize,
|
|||
|
IN ULONG FrameNumber
|
|||
|
)
|
|||
|
|
|||
|
{
|
|||
|
|
|||
|
ARC_STATUS Status;
|
|||
|
|
|||
|
KIRQL OldIrql = FwAcquireFirmwareLock();
|
|||
|
Status = HalpVenReadWriteErrorFrame(ReadWrite,
|
|||
|
FrameType,
|
|||
|
FrameAddress,
|
|||
|
FrameSize,
|
|||
|
FrameNumber);
|
|||
|
|
|||
|
FwReleaseFirmwareLock(OldIrql);
|
|||
|
return Status;
|
|||
|
}
|
|||
|
|
|||
|
#else
|
|||
|
|
|||
|
#define VenReadWriteErrorFrame(ReadWrite, Frametype, FrameAddress, FrameSizeAddress, FrameNumber) \
|
|||
|
(SYSTEM_BLOCK->VendorVectorLength > (ReadWriteErrorFrameRoutine * sizeof(SYSTEM_BLOCK->VendorVector[0])) ? \
|
|||
|
((PVEN_READ_WRITE_ERROR_FRAME_ROUTINE)(SYSTEM_BLOCK->VendorVector[ReadWriteErrorFrameRoutine])) \
|
|||
|
((ReadWrite), (Frametype), (FrameAddress), (FrameSizeAddress), (FrameNumber)) : \
|
|||
|
(EINVAL)) // Return bad status if vector not present.
|
|||
|
|
|||
|
#endif
|
|||
|
|
|||
|
#endif // _LANGUAGE_ASSEMBLY not defined
|
|||
|
|
|||
|
#endif // _FWCALLBK_
|
|||
|
|
|||
|
|