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