mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
453 lines
7.7 KiB
453 lines
7.7 KiB
/*++ BUILD Version: 0003 // Increment this if a change has global effects
|
|
|
|
Copyright (c) 1991 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
halp.h
|
|
|
|
Abstract:
|
|
|
|
This header file defines the private Hardware Architecture Layer (HAL)
|
|
interfaces.
|
|
|
|
Author:
|
|
|
|
David N. Cutler (davec) 25-Apr-1991
|
|
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#ifndef _HALP_
|
|
#define _HALP_
|
|
#include "nthal.h"
|
|
#include "hal.h"
|
|
#include "hali.h"
|
|
#include "dtidef.h"
|
|
#include "jxhalp.h"
|
|
#include "string.h"
|
|
|
|
|
|
#define __0K (ULONG)(0x0)
|
|
#define __0MB (ULONG)(0x0)
|
|
#define __0GB (ULONG)(0x0)
|
|
#define __2K (ULONG)(0x800)
|
|
#define __4K (ULONG)(0x1000)
|
|
#define __8K (ULONG)(0x2000)
|
|
#define __16K (ULONG)(0x4000)
|
|
#define __32K (ULONG)(0x8000)
|
|
#define __64K (ULONG)(0x10000)
|
|
#define __128K (ULONG)(0x20000)
|
|
#define __256K (ULONG)(0x40000)
|
|
#define __512K (ULONG)(0x80000)
|
|
#define __1MB (ULONG)(0x100000)
|
|
#define __2MB (ULONG)(0x200000)
|
|
#define __4MB (ULONG)(0x400000)
|
|
#define __8MB (ULONG)(0x800000)
|
|
#define __16MB (ULONG)(0x1000000)
|
|
#define __32MB (ULONG)(0x2000000)
|
|
#define __64MB (ULONG)(0x4000000)
|
|
#define __128MB (ULONG)(0x8000000)
|
|
#define __256MB (ULONG)(0x10000000)
|
|
#define __512MB (ULONG)(0x20000000)
|
|
#define __1GB (ULONG)(0x40000000)
|
|
#define __2GB (ULONG)(0x80000000)
|
|
|
|
//
|
|
// Define the context structure for use by the interrupt routine.
|
|
//
|
|
|
|
typedef BOOLEAN (*PSECONDARY_DISPATCH)(
|
|
PVOID InterruptRoutine
|
|
);
|
|
|
|
//
|
|
// Define adapter object structure.
|
|
//
|
|
|
|
typedef struct _ADAPTER_OBJECT {
|
|
CSHORT Type;
|
|
CSHORT Size;
|
|
struct _ADAPTER_OBJECT *MasterAdapter;
|
|
ULONG MapRegistersPerChannel;
|
|
ULONG BusNumber;
|
|
PVOID AdapterBaseVa;
|
|
PVOID MapRegisterBase;
|
|
ULONG NumberOfMapRegisters;
|
|
ULONG CommittedMapRegisters;
|
|
struct _WAIT_CONTEXT_BLOCK *CurrentWcb;
|
|
KDEVICE_QUEUE ChannelWaitQueue;
|
|
PKDEVICE_QUEUE RegisterWaitQueue;
|
|
LIST_ENTRY AdapterQueue;
|
|
KSPIN_LOCK SpinLock;
|
|
PRTL_BITMAP MapRegisters;
|
|
PUCHAR PagePort;
|
|
UCHAR ChannelNumber;
|
|
UCHAR AdapterNumber;
|
|
USHORT DmaPortAddress;
|
|
UCHAR AdapterMode;
|
|
BOOLEAN NeedsMapRegisters;
|
|
BOOLEAN MasterDevice;
|
|
BOOLEAN Width16Bits;
|
|
BOOLEAN ScatterGather;
|
|
} ADAPTER_OBJECT;
|
|
|
|
//
|
|
// Define function prototypes.
|
|
//
|
|
|
|
BOOLEAN
|
|
HalpInitSystem (
|
|
IN ULONG Phase,
|
|
IN PLOADER_PARAMETER_BLOCK LoaderBlock
|
|
);
|
|
|
|
VOID
|
|
HalpDisablePlatformInterrupt (
|
|
IN ULONG Vector,
|
|
IN KIRQL Irql
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpEnablePlatformInterrupt (
|
|
IN ULONG Vector,
|
|
IN KIRQL Irql,
|
|
IN KINTERRUPT_MODE InterruptMode
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpCreateEisaStructures(
|
|
ULONG BusNumber
|
|
);
|
|
|
|
VOID
|
|
HalpDisableEisaInterrupt(
|
|
IN ULONG Vector
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpEisaDispatch(
|
|
IN PKINTERRUPT Interrupt,
|
|
IN PVOID ServiceContext,
|
|
IN ULONG BusNumber
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpPciDispatch(
|
|
IN PKINTERRUPT Interrupt,
|
|
IN PVOID ServiceContext
|
|
);
|
|
|
|
VOID
|
|
HalpEnableEisaInterrupt(
|
|
IN ULONG Vector,
|
|
IN KINTERRUPT_MODE InterruptMode
|
|
);
|
|
|
|
ULONG
|
|
HalpAllocateTbEntry (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HalpFreeTbEntry (
|
|
VOID
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpCalibrateStall (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HalpClockInterrupt (
|
|
VOID
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpCreateDmaStructures (
|
|
VOID
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpInitializeDisplay (
|
|
IN PLOADER_PARAMETER_BLOCK LoaderBlock
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpInitializeInterrupts (
|
|
VOID
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpMapIoSpace (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HalpProfileInterrupt (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HalpStallInterrupt (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HalpInitializeX86DisplayAdapter (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HalpResetX86DisplayAdapter (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HalpProgramIntervalTimer (
|
|
IN ULONG IntervalCount
|
|
);
|
|
|
|
VOID
|
|
HalpConnectInterruptDispatchers(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HalpEnablePciInterrupt(
|
|
IN ULONG Vector
|
|
);
|
|
|
|
VOID
|
|
HalpDisablePciInterrupt(
|
|
IN ULONG Vector
|
|
);
|
|
|
|
VOID
|
|
HalpDisableAllInterrupts (
|
|
);
|
|
|
|
ULONG
|
|
HalpVirtualIsaInterruptToInterruptLine (
|
|
IN ULONG Index
|
|
);
|
|
|
|
ULONG
|
|
HalpReadPciData (
|
|
IN ULONG BusNumber,
|
|
IN ULONG SlotNumber,
|
|
OUT PVOID Buffer,
|
|
IN ULONG Offset,
|
|
IN ULONG Length
|
|
);
|
|
|
|
ULONG
|
|
HalpWritePciData (
|
|
IN ULONG BusNumber,
|
|
IN ULONG SlotNumber,
|
|
IN PVOID Buffer,
|
|
IN ULONG Offset,
|
|
IN ULONG Length
|
|
);
|
|
|
|
VOID
|
|
HalpAllocateArcsResources (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HalpFreeArcsResources (
|
|
VOID
|
|
);
|
|
|
|
PUCHAR
|
|
HalpAllocateKdPortResources(
|
|
PVOID *SP_READ,
|
|
PVOID *SP_WRITE
|
|
);
|
|
|
|
VOID
|
|
HalpFreeKdPortResources(
|
|
VOID
|
|
);
|
|
|
|
//
|
|
// Define Bus Handler support function prototypes.
|
|
//
|
|
|
|
|
|
VOID
|
|
HalpRegisterInternalBusHandlers (
|
|
VOID
|
|
);
|
|
|
|
ULONG
|
|
HalpGetSystemInterruptVector(
|
|
IN PBUS_HANDLER BusHandler,
|
|
IN PBUS_HANDLER RootHandler,
|
|
IN ULONG BusInterruptLevel,
|
|
IN ULONG BusInterruptVector,
|
|
OUT PKIRQL Irql,
|
|
OUT PKAFFINITY Affinity
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpTranslateSystemBusAddress(
|
|
IN PBUS_HANDLER BusHandler,
|
|
IN PBUS_HANDLER RootHandler,
|
|
IN PHYSICAL_ADDRESS BusAddress,
|
|
IN OUT PULONG AddressSpace,
|
|
OUT PPHYSICAL_ADDRESS TranslatedAddress
|
|
);
|
|
|
|
|
|
VOID
|
|
HalpAdjustResourceListUpperLimits (
|
|
IN OUT PIO_RESOURCE_REQUIREMENTS_LIST *pResourceList,
|
|
IN LARGE_INTEGER MaximumPortAddress,
|
|
IN LARGE_INTEGER MaximumMemoryAddress,
|
|
IN ULONG MaximumInterruptVector,
|
|
IN ULONG MaximumDmaChannel
|
|
);
|
|
|
|
//
|
|
//
|
|
//
|
|
|
|
NTSTATUS
|
|
HalpAdjustIsaResourceList (
|
|
IN PBUS_HANDLER BusHandler,
|
|
IN PBUS_HANDLER RootHandler,
|
|
IN OUT PIO_RESOURCE_REQUIREMENTS_LIST *pResourceList
|
|
);
|
|
|
|
//
|
|
// Define PCI support function prototypes.
|
|
//
|
|
|
|
VOID
|
|
HalpInitializePCIBus (
|
|
VOID
|
|
);
|
|
|
|
PBUS_HANDLER
|
|
HalpAllocateAndInitPCIBusHandler (
|
|
IN ULONG BusNo
|
|
);
|
|
|
|
VOID
|
|
HalpRegisterPCIInstallHandler(
|
|
IN PINSTALL_BUS_HANDLER MachineSpecificPCIInstallHandler
|
|
);
|
|
|
|
NTSTATUS
|
|
HalpDefaultPCIInstallHandler(
|
|
IN PBUS_HANDLER Bus
|
|
);
|
|
|
|
VOID
|
|
HalpDeterminePCIDevicesPresent(
|
|
IN PBUS_HANDLER Bus
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpInitializePCIInterrupts(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HalpEnablePCIInterrupt(
|
|
IN ULONG Vector
|
|
);
|
|
|
|
VOID
|
|
HalpDisablePCIInterrupt(
|
|
IN ULONG Vector
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpPCIInterruptHandler(
|
|
IN PKINTERRUPT Interrupt,
|
|
IN PVOID ServiceContext
|
|
);
|
|
|
|
UCHAR
|
|
READ_CONFIG_UCHAR(
|
|
IN PVOID ConfigurationAddress,
|
|
IN ULONG ConfigurationType
|
|
);
|
|
|
|
USHORT
|
|
READ_CONFIG_USHORT(
|
|
IN PVOID ConfigurationAddress,
|
|
IN ULONG ConfigurationType
|
|
);
|
|
|
|
ULONG
|
|
READ_CONFIG_ULONG(
|
|
IN PVOID ConfigurationAddress,
|
|
IN ULONG ConfigurationType
|
|
);
|
|
|
|
VOID
|
|
WRITE_CONFIG_UCHAR(
|
|
IN PVOID ConfigurationAddress,
|
|
IN UCHAR ConfigurationData,
|
|
IN ULONG ConfigurationType
|
|
);
|
|
|
|
VOID
|
|
WRITE_CONFIG_USHORT(
|
|
IN PVOID ConfigurationAddress,
|
|
IN USHORT ConfigurationData,
|
|
IN ULONG ConfigurationType
|
|
);
|
|
|
|
VOID
|
|
WRITE_CONFIG_ULONG(
|
|
IN PVOID ConfigurationAddress,
|
|
IN ULONG ConfigurationData,
|
|
IN ULONG ConfigurationType
|
|
);
|
|
|
|
NTSTATUS
|
|
HalpMachineSpecificPCIInstallHandler(
|
|
IN PBUS_HANDLER Bus
|
|
);
|
|
|
|
//
|
|
// Define external references.
|
|
//
|
|
|
|
extern PVOID HalpEisaControlBase[MAX_EISA_BUSSES];
|
|
extern PVOID HalpEisaMemoryBase[MAX_EISA_BUSSES];
|
|
extern PVOID HalpPciControlBase[MAX_PCI_BUSSES];
|
|
extern PVOID HalpPciMemoryBase[MAX_PCI_BUSSES];
|
|
extern PVOID HalpRealTimeClockBase;
|
|
extern PLATFORM_PARAMETER_BLOCK *HalpPlatformParameterBlock;
|
|
extern PLATFORM_SPECIFIC_EXTENSION *HalpPlatformSpecificExtension;
|
|
|
|
extern PHAL_RESET_DISPLAY_PARAMETERS HalpResetDisplayParameters;
|
|
|
|
extern ULONG HalpCurrentTimeIncrement;
|
|
extern ULONG HalpNextIntervalCount;
|
|
extern ULONG HalpNextTimeIncrement;
|
|
extern ULONG HalpNewTimeIncrement;
|
|
extern ULONG HalpProfileCountRate;
|
|
|
|
extern PADAPTER_OBJECT MasterAdapterObject;
|
|
|
|
//
|
|
// Map buffer prameters. These are initialized in HalInitSystem
|
|
//
|
|
|
|
extern PHYSICAL_ADDRESS HalpMapBufferPhysicalAddress;
|
|
|
|
extern ULONG HalpMapBufferSize;
|
|
|
|
extern ULONG HalpBusType;
|
|
|
|
#endif // _HALP_
|