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_
|
||
|
||
|