709 lines
12 KiB
C
709 lines
12 KiB
C
#ident "@(#) NEC halp.h 1.19 95/06/19 10:53:45"
|
|
/*++ BUILD Version: 0003 // Increment this if a change has global effects
|
|
|
|
Copyright (c) 1991-1994 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
halp.h
|
|
|
|
Abstract:
|
|
|
|
This header file defines the private Hardware Architecture Layer (HAL)
|
|
interfaces.
|
|
|
|
--*/
|
|
|
|
/*
|
|
* Original source: Build Number 1.531
|
|
*
|
|
* Modify for R98(MIPS/R4400)
|
|
*
|
|
***********************************************************************
|
|
*
|
|
* S001 3/25-5/30 T.Samezima
|
|
*
|
|
* add Spinlock HalpEifInterruptLock
|
|
* define function
|
|
* define external references
|
|
*
|
|
* change include file
|
|
*
|
|
* del '#if defined(_JAZZ_)' with content
|
|
* '#if defined(_DUO_)' with content
|
|
*
|
|
***********************************************************************
|
|
*
|
|
* S002 6/10 T.Samezima
|
|
*
|
|
* Del Compile err
|
|
*
|
|
***********************************************************************
|
|
*
|
|
* S003 7/7 T.Samezima
|
|
*
|
|
* Del Arbitration point variable name
|
|
*
|
|
* Add Function define
|
|
*
|
|
*
|
|
***********************************************************************
|
|
*
|
|
* S004 8/22 T.Samezima on SNES
|
|
*
|
|
* Chg Register buffer size from USHORT to ULONG
|
|
*
|
|
***********************************************************************
|
|
*
|
|
* S005 '94.9/27 T.Samezima
|
|
*
|
|
* Add Define debug Print
|
|
*
|
|
* K000 94/10/11 N.Kugimoto
|
|
* Fix 807 base
|
|
* K001 94/10/12 N.Kugimoto
|
|
* add halpNmihandler
|
|
* K002 94/10/13 N.Kugimoto
|
|
* add HalpEifRegisterBuffer
|
|
* K003 94/10/13 N.Kugimoto
|
|
* add HalpEisaMemoryBase
|
|
* chg extern
|
|
*
|
|
* S006 '94.10/14 T.Samezima
|
|
* Add extern valiable
|
|
* Chg Change condition of ifdef
|
|
*
|
|
* A001 ataka@oa2.kb.nec.co.jp
|
|
* add ADD001 Resource Usage Information
|
|
*
|
|
* S007 '94.10/23 T.Samezima
|
|
* chg variable size from ULONG to UCHAR
|
|
*
|
|
* K004 94/12/06 N.Kugimoto
|
|
* Add ESM NVRAM Interface Add
|
|
*
|
|
* S008 94/12/07 N.Kugimoto
|
|
* Add HalpDisablePciInterrupt,HalpEnablePciInterrupt
|
|
*
|
|
* S009 94/12/23 T.Samezima
|
|
* Add ESM function and variable.
|
|
*
|
|
* S00a 94/01/15 T.Samezima
|
|
* Add ESM function.
|
|
*
|
|
* S00b 94/01/16-20 T.Samezima
|
|
* Add ESM variable and ESM function.
|
|
*
|
|
* S00c 94/03/10 T.Samezima
|
|
* Add HalpNMIFlag
|
|
*
|
|
* S00d 94/03/10 T.Samezima
|
|
* Add HalpLRErrorInterrupt(), HalpReadAndWritePhysicalAddr()
|
|
*
|
|
* A002 95/06/13 ataka@oa2.kb.nec.co.jp
|
|
* Marge build 1050
|
|
*
|
|
*/
|
|
|
|
|
|
#ifndef _HALP_
|
|
#define _HALP_
|
|
#if defined(NT_UP)
|
|
#undef NT_UP
|
|
#endif
|
|
#include "nthal.h"
|
|
#include "hal.h" // A002
|
|
|
|
#ifndef _HALI_ // A002
|
|
#include "..\inc\hali.h"
|
|
#endif
|
|
|
|
/* Start S001 */
|
|
#include "r98def.h"
|
|
#include "r98reg.h"
|
|
#include "r98hal.h" // S002
|
|
/* End S001 */
|
|
|
|
|
|
#if defined(USE_BIOS_EMULATOR) // A002
|
|
#include "xm86.h"
|
|
#include "x86new.h"
|
|
#endif
|
|
|
|
/* Start S002 */
|
|
// #include "jxhalp.h"
|
|
|
|
|
|
// A002
|
|
// Define map register translation entry structure.
|
|
//
|
|
//typedef struct _TRANSLATION_ENTRY {
|
|
// PVOID VirtualAddress;
|
|
// ULONG PhysicalAddress;
|
|
// ULONG Index;
|
|
//} TRANSLATION_ENTRY, *PTRANSLATION_ENTRY;
|
|
|
|
|
|
extern PVOID HalpEisaControlBase;
|
|
extern PVOID HalpRealTimeClockBase;
|
|
extern PVOID HalpEisaMemoryBase; //K003
|
|
/* End S002 */
|
|
//
|
|
// Define function prototypes.
|
|
//
|
|
|
|
PADAPTER_OBJECT
|
|
HalpAllocateAdapter(
|
|
IN ULONG MapRegistersPerChannel,
|
|
IN PVOID AdapterBaseVa,
|
|
IN PVOID MapRegisterBase
|
|
);
|
|
|
|
ULONG
|
|
HalpAllocateTbEntry (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HalpFreeTbEntry (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HalpCacheErrorRoutine (
|
|
VOID
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpCalibrateStall (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HalpClockInterrupt0 (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HalpClockInterrupt1 (
|
|
VOID
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpCreateDmaStructures (
|
|
VOID
|
|
);
|
|
|
|
/* Start S002 */
|
|
#if !defined(_R98_)
|
|
BOOLEAN
|
|
HalpDmaDispatch(
|
|
IN PKINTERRUPT Interrupt,
|
|
IN PVOID ServiceContext
|
|
);
|
|
#endif
|
|
/* End S002 */
|
|
|
|
BOOLEAN
|
|
HalpInitializeDisplay0 (
|
|
IN PLOADER_PARAMETER_BLOCK LoaderBlock
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpInitializeDisplay1 (
|
|
IN PLOADER_PARAMETER_BLOCK LoaderBlock
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpInitializeInterrupts (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HalpIpiInterrupt (
|
|
VOID
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpMapFixedTbEntries (
|
|
VOID
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpMapIoSpace (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HalpProfileInterrupt (
|
|
VOID
|
|
);
|
|
|
|
#if defined(R4000)
|
|
|
|
ULONG
|
|
HalpReadCountRegister (
|
|
VOID
|
|
);
|
|
|
|
ULONG
|
|
HalpWriteCompareRegisterAndClear (
|
|
IN ULONG Value
|
|
);
|
|
|
|
#endif
|
|
|
|
VOID
|
|
HalpStallInterrupt (
|
|
VOID
|
|
);
|
|
|
|
VOID //K000
|
|
HalpInitializeX86DisplayAdapter(
|
|
VOID
|
|
);
|
|
|
|
VOID //K000
|
|
HalpResetX86DisplayAdapter(
|
|
VOID
|
|
);
|
|
|
|
|
|
/* Start S001 */
|
|
/* Start S002 */
|
|
VOID
|
|
HalpInt0Dispatch(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HalpInt1Dispatch(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HalpInt2Dispatch(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HalpTimerDispatch(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HalpEifDispatch(
|
|
VOID
|
|
);
|
|
/* End S002 */
|
|
|
|
VOID
|
|
HalpOutputSegment(
|
|
IN ULONG Number,
|
|
IN UCHAR Data
|
|
);
|
|
|
|
VOID
|
|
HalpDisplaySegment(
|
|
IN ULONG Number,
|
|
IN UCHAR Data
|
|
);
|
|
/* End S001 */
|
|
|
|
/* Start S002 */
|
|
ULONG
|
|
HalpAllocPhysicalMemory(
|
|
IN PLOADER_PARAMETER_BLOCK LoaderBlock,
|
|
IN ULONG MaxPhysicalAddress,
|
|
IN ULONG NoPages,
|
|
IN BOOLEAN bAlignOn64k
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpGrowMapBuffers(
|
|
PADAPTER_OBJECT AdapterObject,
|
|
ULONG Amount
|
|
);
|
|
|
|
VOID
|
|
HalpCopyBufferMap(
|
|
IN PMDL Mdl,
|
|
IN PINTERNAL_TRANSLATION_ENTRY TranslationEntry,
|
|
IN PVOID CurrentVa,
|
|
IN ULONG Length,
|
|
IN BOOLEAN WriteToDevice
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpEisaDispatch(
|
|
IN PKINTERRUPT Interrupt,
|
|
IN PVOID ServiceContext
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpCreateEisaStructures (
|
|
VOID
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpCreatePciStructures (
|
|
VOID
|
|
);
|
|
|
|
PADAPTER_OBJECT
|
|
HalpAllocateEisaAdapter(
|
|
IN PDEVICE_DESCRIPTION DeviceDescriptor
|
|
);
|
|
|
|
VOID
|
|
HalpEisaMapTransfer(
|
|
IN PADAPTER_OBJECT AdapterObject,
|
|
IN ULONG Offset,
|
|
IN ULONG Length,
|
|
IN BOOLEAN WriteToDevice
|
|
);
|
|
|
|
KIRQL
|
|
HalpMapNvram (
|
|
IN PENTRYLO SavedPte
|
|
);
|
|
|
|
VOID
|
|
HalpUnmapNvram (
|
|
IN PENTRYLO SavedPte,
|
|
IN KIRQL OldIrql
|
|
);
|
|
|
|
VOID
|
|
HalpDisableEisaInterrupt(
|
|
IN ULONG Vector
|
|
);
|
|
|
|
VOID
|
|
HalpEnableEisaInterrupt(
|
|
IN ULONG Vector,
|
|
IN KINTERRUPT_MODE InterruptMode
|
|
);
|
|
|
|
// S008 vvv
|
|
VOID
|
|
HalpDisablePciInterrupt(
|
|
IN ULONG Vector
|
|
);
|
|
|
|
VOID
|
|
HalpEnablePciInterrupt(
|
|
IN ULONG Vector
|
|
);
|
|
// S008 ^^^
|
|
|
|
VOID
|
|
HalpReadLargeRegister(
|
|
IN ULONG VirtualAddress,
|
|
OUT PULONG UpperPart,
|
|
OUT PULONG LowerPart
|
|
);
|
|
|
|
VOID
|
|
HalpWriteLargeRegister(
|
|
IN ULONG VirtualAddress,
|
|
IN PULONG UpperPart,
|
|
IN PULONG LowerPart
|
|
);
|
|
|
|
VOID
|
|
HalpRegisterNmi(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HalpAllocateMapRegisters(
|
|
IN PLOADER_PARAMETER_BLOCK LoaderBlock
|
|
);
|
|
|
|
/* Start S003 */
|
|
VOID
|
|
HalpHandleEif(
|
|
VOID
|
|
);
|
|
|
|
ULONG
|
|
HalpGetCause(
|
|
VOID
|
|
);
|
|
/* End S003 */
|
|
|
|
//K001
|
|
VOID
|
|
HalpNmiHandler(
|
|
VOID
|
|
);
|
|
|
|
//K004 Start
|
|
|
|
BOOLEAN
|
|
HalNvramWrite(
|
|
ULONG Offset,
|
|
ULONG Count,
|
|
PVOID Buffer
|
|
);
|
|
|
|
BOOLEAN
|
|
HalNvramRead(
|
|
ULONG Offset,
|
|
ULONG Count,
|
|
PVOID Buffer
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpNvramReadWrite(
|
|
ULONG Offset,
|
|
ULONG Count,
|
|
PVOID Buffer,
|
|
ULONG Write
|
|
);
|
|
|
|
//K004 End
|
|
//S009 vvv
|
|
ULONG
|
|
HalpEccError(
|
|
IN ULONG EifrRegister
|
|
);
|
|
|
|
VOID
|
|
HalpInitDisplayStringIntoNvram(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HalpSetInitDisplayTimeStamp(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HalpSuccessOsStartUp(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HalpChangePanicFlag(
|
|
IN ULONG NewPanicFlg,
|
|
IN UCHAR NewLogFlg,
|
|
IN UCHAR CurrentLogFlgMask
|
|
);
|
|
|
|
#if 0 // S00b
|
|
VOID
|
|
HalpStringIntoNvram(
|
|
IN ULONG Column,
|
|
IN ULONG Row,
|
|
IN PUCHAR String
|
|
);
|
|
#endif // S00b
|
|
//S009 ^^^
|
|
|
|
// S00a vvv
|
|
ULONG
|
|
HalpReadPhysicalAddr(
|
|
IN ULONG PhysicalAddr
|
|
);
|
|
// S00a ^^^
|
|
// S00b vvv
|
|
VOID
|
|
HalStringIntoBuffer(
|
|
IN UCHAR Character
|
|
);
|
|
|
|
VOID
|
|
HalStringIntoBufferStart(
|
|
IN ULONG Column,
|
|
IN ULONG Row
|
|
);
|
|
|
|
VOID
|
|
HalpStringBufferCopyToNvram(
|
|
VOID
|
|
);
|
|
// S00b ^^^
|
|
// S00d vvv
|
|
ULONG
|
|
HalpReadAndWritePhysicalAddr(
|
|
IN ULONG PhysicalAddr
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpLRErrorInterrupt(
|
|
VOID
|
|
);
|
|
// S00d ^^^
|
|
|
|
/* Start S005 */
|
|
#if DBG // S006
|
|
VOID
|
|
R98DebugOutPut(
|
|
ULONG DebugPrintLevel, // Debug Level
|
|
PCSZ DebugMessageLed, // For LED strings. shuld be 4Byte.
|
|
PCSZ DebugMessage, // For DISPLAY or SIO
|
|
...
|
|
);
|
|
|
|
#define R98DbgPrint(_x_) R98DebugOutPut _x_
|
|
#else
|
|
#define R98DbgPrint(_x_)
|
|
#endif
|
|
/* End S005 */
|
|
|
|
#ifdef RtlMoveMemory
|
|
#undef RtlMoveMemory
|
|
#undef RtlCopyMemory
|
|
#undef RtlFillMemory
|
|
#undef RtlZeroMemory
|
|
|
|
#define RtlCopyMemory(Destination,Source,Length) RtlMoveMemory((Destination),(Source),(Length))
|
|
VOID
|
|
RtlMoveMemory (
|
|
PVOID Destination,
|
|
CONST VOID *Source,
|
|
ULONG Length
|
|
);
|
|
|
|
VOID
|
|
RtlFillMemory (
|
|
PVOID Destination,
|
|
ULONG Length,
|
|
UCHAR Fill
|
|
);
|
|
|
|
VOID
|
|
RtlZeroMemory (
|
|
PVOID Destination,
|
|
ULONG Length
|
|
);
|
|
|
|
#endif // #ifdef RtlMoveMemory
|
|
/* End S002 */
|
|
|
|
//
|
|
// Define external references.
|
|
//
|
|
|
|
extern KSPIN_LOCK HalpBeepLock;
|
|
extern ULONG HalpBuiltinInterruptEnable; // S004
|
|
extern KSPIN_LOCK HalpDisplayAdapterLock;
|
|
extern ULONG HalpProfileCountRate;
|
|
extern ULONG HalpStallScaleFactor;
|
|
extern KSPIN_LOCK HalpSystemInterruptLock;
|
|
/* Start S001 */
|
|
extern KSPIN_LOCK HalpEifInterruptLock;
|
|
/* Start S003 */
|
|
extern ULONG HalpInt2ArbitrationPoint;
|
|
extern ULONG HalpInt1ArbitrationPoint;
|
|
extern ULONG HalpInt0ArbitrationPoint;
|
|
/* End S003 */
|
|
extern ULONG HalpUnknownInterruptCount[];
|
|
/* Start S002 */
|
|
extern KAFFINITY HalpEisaBusAffinity; //K000
|
|
extern KAFFINITY HalpPCIBusAffinity; //S006
|
|
extern KAFFINITY HalpInt1Affinity; //S006
|
|
extern UCHAR HalpChangeIntervalFlg[]; //S006, S007
|
|
extern ULONG HalpChangeIntervalCount;
|
|
extern ULONG HalpNextTimeIncrement;
|
|
extern ULONG HalpCurrentTimeIncrement;
|
|
extern ULONG HalpNextIntervalCount;
|
|
extern ULONG HalpNewTimeIncrement;
|
|
/* End S002 */
|
|
/* End S001 */
|
|
extern ULONG HalpEifRegisterBuffer[]; //K002,K003
|
|
|
|
// S009 vvv
|
|
extern ULONG HalpNvramValid;
|
|
extern USHORT ErrBufferArea;
|
|
// S009 ^^^
|
|
// S00b vvv
|
|
LONG HalpECC1bitDisableFlag;
|
|
LONG HalpECC1bitDisableTime;
|
|
ULONG HalpECC1bitScfrBuffer;
|
|
// S00b ^^^
|
|
extern volatile ULONG HalpNMIFlag; // R98TEMP
|
|
|
|
|
|
// ADD001
|
|
//
|
|
// Resource usage information
|
|
//
|
|
|
|
#if !defined (_R98_)
|
|
#pragma pack(1)
|
|
#endif
|
|
typedef struct {
|
|
UCHAR Flags;
|
|
KIRQL Irql;
|
|
UCHAR BusReleativeVector;
|
|
} IDTUsage;
|
|
|
|
typedef struct _HalAddressUsage{
|
|
struct _HalAddressUsage *Next;
|
|
CM_RESOURCE_TYPE Type; // Port or Memory
|
|
UCHAR Flags; // same as IDTUsage.Flags
|
|
struct {
|
|
ULONG Start;
|
|
USHORT Length;
|
|
} Element[];
|
|
} ADDRESS_USAGE;
|
|
#if !defined (_R98_)
|
|
#pragma pack()
|
|
#endif
|
|
|
|
#define IDTOwned 0x01 // IDT is not available for others
|
|
#define InterruptLatched 0x02 // Level or Latched
|
|
#define InternalUsage 0x11 // Report usage on internal bus
|
|
#define DeviceUsage 0x21 // Report usage on device bus
|
|
|
|
extern IDTUsage HalpIDTUsage[];
|
|
extern ADDRESS_USAGE *HalpAddressUsageList;
|
|
// CMP001
|
|
extern ADDRESS_USAGE HalpDefaultPcIoSpace;
|
|
extern ADDRESS_USAGE HalpEisaIoSpace;
|
|
extern ADDRESS_USAGE HalpMapRegisterMemorySpace;
|
|
|
|
#define HalpRegisterAddressUsage(a) \
|
|
(a)->Next = HalpAddressUsageList, HalpAddressUsageList = (a);
|
|
|
|
// CMP001
|
|
#define IRQ_PREFERRED 0x02
|
|
#define IRQ_VALID 0x01
|
|
|
|
// CMP001
|
|
VOID
|
|
HalpReportResourceUsage (
|
|
IN PUNICODE_STRING HalName,
|
|
IN INTERFACE_TYPE DeviceInterfaceToUse
|
|
);
|
|
|
|
//
|
|
// Temp definitions to thunk into supporting new bus extension format
|
|
//
|
|
// A002
|
|
VOID
|
|
HalpRegisterInternalBusHandlers (
|
|
VOID
|
|
);
|
|
|
|
// A002
|
|
PBUS_HANDLER
|
|
HalpAllocateBusHandler (
|
|
IN INTERFACE_TYPE InterfaceType,
|
|
IN BUS_DATA_TYPE BusDataType,
|
|
IN ULONG BusNumber,
|
|
IN INTERFACE_TYPE ParentBusDataType,
|
|
IN ULONG ParentBusNumber,
|
|
IN ULONG BusSpecificData
|
|
);
|
|
|
|
// A002
|
|
#define HalpHandlerForBus HaliHandlerForBus
|
|
#define HalpSetBusHandlerParent(c,p) (c)->ParentHandler = p;
|
|
|
|
|
|
#endif // _HALP_
|