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.
338 lines
5.8 KiB
338 lines
5.8 KiB
//#pragma comment(exestr, "$Header: /usr4/winnt/SOURCES/ddk351/src/hal/halsni4x/mips/RCS/snihalp.h,v 1.1 1995/05/19 11:24:26 flo Exp $")
|
|
/*++
|
|
|
|
Copyright (c) 1991-1993 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
SNIhalp.h, original file jxhalp.h
|
|
|
|
Abstract:
|
|
|
|
This header file defines the private Hardware Architecture Layer (HAL)
|
|
SNI specific interfaces, defines and structures.
|
|
|
|
|
|
--*/
|
|
|
|
#ifndef _SNIHALP_
|
|
#define _SNIHALP_
|
|
#include "SNIdef.h"
|
|
|
|
//
|
|
// Determine if an virtual address is really a physical address.
|
|
//
|
|
|
|
#define HALP_IS_PHYSICAL_ADDRESS(Va) \
|
|
((((ULONG)Va >= KSEG0_BASE) && ((ULONG)Va < KSEG2_BASE)) ? TRUE : FALSE)
|
|
|
|
#define IS_KSEG0_ADDRESS(Va) \
|
|
((((ULONG)Va >= KSEG0_BASE) && ((ULONG)Va < KSEG1_BASE)) ? TRUE : FALSE)
|
|
|
|
#define IS_KSEG1_ADDRESS(Va) \
|
|
((((ULONG)Va >= KSEG1_BASE) && ((ULONG)Va < KSEG2_BASE)) ? TRUE : FALSE)
|
|
|
|
#define KSEG0_TO_KSEG1(Va) { \
|
|
Va &= ~KSEG0_BASE; \
|
|
Va |= KSEG1_BASE; \
|
|
}
|
|
|
|
//
|
|
// Define global data used to locate the EISA control space and the realtime
|
|
// clock registers.
|
|
//
|
|
|
|
extern PVOID HalpEisaControlBase;
|
|
extern PVOID HalpOnboardControlBase;
|
|
extern PVOID HalpEisaMemoryBase;
|
|
extern PVOID HalpRealTimeClockBase;
|
|
extern PVOID HalpEisaMemoryBase;
|
|
|
|
extern BOOLEAN HalpEisaExtensionInstalled;
|
|
extern BOOLEAN HalpIsRM200;
|
|
extern BOOLEAN HalpIsMulti;
|
|
|
|
extern KAFFINITY HalpActiveProcessors;
|
|
|
|
//
|
|
// possibly processor types for SNI machines ...
|
|
//
|
|
|
|
typedef enum _HalpProcessorType {
|
|
ORIONSC, // Orion + Writeback secondary cache
|
|
MPAGENT, // R4000 + MpAgent
|
|
R4x00, // R4000 SC
|
|
UNKNOWN // not yet identified (initial value)
|
|
} HalpProcessorType;
|
|
|
|
//
|
|
// Kind of processor of SNI machines
|
|
//
|
|
|
|
extern HalpProcessorType HalpProcessorId;
|
|
|
|
#define HalpR4600 32
|
|
|
|
//
|
|
// possibly moterboard types for SNI machines ...
|
|
//
|
|
|
|
typedef enum _MotherBoardType {
|
|
M8022 = 2, // RM400-10 mother board
|
|
M8022D = 3, // RM400-10 mother board (new PCB)
|
|
M8032 = 4, // RM400 Tower
|
|
M8042 = 5, // RM400 Minitower
|
|
M8036 = 7 // RM200 Desktop
|
|
} MotherBoardType;
|
|
|
|
//
|
|
// Kind of Mainboard of SNI machines
|
|
//
|
|
|
|
extern MotherBoardType HalpMainBoard;
|
|
|
|
//
|
|
// Define map register translation entry structure.
|
|
//
|
|
|
|
typedef struct _TRANSLATION_ENTRY {
|
|
PVOID VirtualAddress;
|
|
ULONG PhysicalAddress;
|
|
ULONG Index;
|
|
} TRANSLATION_ENTRY, *PTRANSLATION_ENTRY;
|
|
|
|
//
|
|
// Define adapter object structure.
|
|
//
|
|
|
|
typedef struct _ADAPTER_OBJECT {
|
|
CSHORT Type;
|
|
CSHORT Size;
|
|
struct _ADAPTER_OBJECT *MasterAdapter;
|
|
ULONG MapRegistersPerChannel;
|
|
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;
|
|
INTERFACE_TYPE InterfaceType;
|
|
} ADAPTER_OBJECT;
|
|
|
|
extern PADAPTER_OBJECT MasterAdapterObject;
|
|
|
|
extern POBJECT_TYPE *IoAdapterObjectType;
|
|
|
|
extern BOOLEAN LessThan16Mb;
|
|
extern BOOLEAN HalpEisaDma;
|
|
|
|
//
|
|
// Map buffer parameters. These are initialized in HalInitSystem
|
|
//
|
|
|
|
extern PHYSICAL_ADDRESS HalpMapBufferPhysicalAddress;
|
|
extern ULONG HalpMapBufferSize;
|
|
extern ULONG HalpBusType;
|
|
|
|
//
|
|
// Firmware interface
|
|
//
|
|
|
|
typedef struct {
|
|
CHAR (*getchar)();
|
|
PCHAR (*gets)();
|
|
VOID (*printf)();
|
|
PCHAR (*parsefile)();
|
|
VOID (*reinit_slave)();
|
|
} SNI_PRIVATE_VECTOR;
|
|
|
|
//
|
|
// Define function prototypes.
|
|
//
|
|
|
|
|
|
ULONG
|
|
HalpGetStatusRegister(
|
|
VOID
|
|
);
|
|
|
|
ULONG
|
|
HalpSetStatusRegister(
|
|
ULONG Value
|
|
);
|
|
|
|
ULONG
|
|
HalpGetCauseRegister(
|
|
VOID
|
|
);
|
|
|
|
ULONG
|
|
HalpSetCauseRegister(
|
|
ULONG value
|
|
);
|
|
|
|
ULONG
|
|
HalpGetConfigRegister(
|
|
VOID
|
|
);
|
|
|
|
ULONG
|
|
HalpSetConfigRegister(
|
|
ULONG value
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpMapIoSpace(
|
|
VOID
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpCreateIntStructures(
|
|
VOID
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpCreateIntMultiStructures (
|
|
VOID
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpCreateEisaStructures(
|
|
IN INTERFACE_TYPE Interface
|
|
);
|
|
|
|
|
|
VOID
|
|
HalpDisableEisaInterrupt(
|
|
IN ULONG Vector
|
|
);
|
|
|
|
VOID
|
|
HalpEnableEisaInterrupt(
|
|
IN ULONG Vector,
|
|
IN KINTERRUPT_MODE InterruptMode
|
|
);
|
|
|
|
VOID
|
|
HalpDisableOnboardInterrupt(
|
|
IN ULONG Vector
|
|
);
|
|
|
|
VOID
|
|
HalpEnableOnboardInterrupt(
|
|
IN ULONG Vector,
|
|
IN KINTERRUPT_MODE InterruptMode
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpEisaDispatch(
|
|
IN PKINTERRUPT Interrupt,
|
|
IN PVOID ServiceContext
|
|
);
|
|
|
|
|
|
BOOLEAN
|
|
HalpGrowMapBuffers(
|
|
PADAPTER_OBJECT AdapterObject,
|
|
ULONG Amount
|
|
);
|
|
|
|
PADAPTER_OBJECT
|
|
HalpAllocateAdapter(
|
|
IN ULONG MapRegistersPerChannel,
|
|
IN PVOID AdapterBaseVa,
|
|
IN PVOID MapRegisterBase
|
|
);
|
|
|
|
ULONG
|
|
HalpAllocPhysicalMemory(
|
|
IN PLOADER_PARAMETER_BLOCK LoaderBlock,
|
|
IN ULONG MaxPhysicalAddress,
|
|
IN ULONG NoPages,
|
|
IN BOOLEAN bAlignOn64k
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpRM200Int0Dispatch(
|
|
IN PKINTERRUPT Interrupt,
|
|
IN PVOID ServiceContext
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpRM400Int0Dispatch(
|
|
IN PKINTERRUPT Interrupt,
|
|
IN PVOID ServiceContext
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpRM400TowerInt0Dispatch(
|
|
IN PKINTERRUPT Interrupt,
|
|
IN PVOID ServiceContext
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpInt1Dispatch(
|
|
IN PKINTERRUPT Interrupt,
|
|
IN PVOID ServiceContext
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpRM400Int3Process (
|
|
IN PKINTERRUPT Interrupt,
|
|
IN PVOID ServiceContext
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpRM400Int4Process (
|
|
IN PKINTERRUPT Interrupt,
|
|
IN PVOID ServiceContext
|
|
);
|
|
|
|
VOID
|
|
HalpRM400Int5Process (
|
|
);
|
|
|
|
VOID
|
|
HalpSystemInit(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HalpDisplayCopyRight(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HalpIpiInterrupt(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HalpInitMPAgent(
|
|
ULONG Number
|
|
);
|
|
|
|
ULONG
|
|
HalpOrionIdentify(
|
|
VOID
|
|
);
|
|
|
|
BOOLEAN
|
|
HalpMpAgentIdentify(
|
|
VOID
|
|
);
|
|
|
|
#endif // _SNIHALP_
|