2020-09-30 17:12:29 +02:00

366 lines
6.7 KiB
C
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// #pragma comment(exestr, "@(#) halp.h 1.1 95/09/28 15:33:24 nec")
/*++ BUILD Version: 0003 // Increment this if a change has global effects
Copyright (c) 1991-1993 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:
L0001 1994.9.20 kbnes!kuriyama(A)
-Modify for R94A original halfxs\mips\halp.h
-add #include"r94axxx.h "
L0002 Thu Oct 13 18:09:33 JST 1994 kbnes!kuriyama(A)
- Del HalpDisplayLED
- Del HalpLEDDisplayLock
- Del HalpLEDControlBase
- Add READ_REGISTER_DWORD
ADD001 ataka@oa2.kb.nec.co.jp Mon Oct 17 20:31:21 JST 1994
- add data definitions for HalReportResourceUsage
CMP001 ataka@oa2.kb.nec.co.jp Tue Oct 18 15:15:11 JST 1994
- resolve compile error
ADD002 kisimoto@oa2.kb.nec.co.jp Fri Nov 25 15:46:03 1994
add HalpGetStatusRegister() definition
S0003 kuriyama@oa2.kb.nec.co.jp Fri Mar 31 16:51:00 JST 1995
add _IPI_LIMIT_ support
H0004 kisimoto@oa2.kb.nec.co.jp Sun Jun 25 14:39:38 1995
- Merge build 1057
H0005 kisimoto@oa2.kb.nec.co.jp Thu Jul 20 20:03:30 1995
- Merge code for ESM from J94C
H0006 kisimoto@oa2.kb.nec.co.jp Sat Aug 12 19:23:03 1995
- Removed _J94C_ definitions.
_J94C_ definition indicates that the status of
the dump switch can acknowledge from Self-test
register.
S0007 kuriyama@oa2.kb.nec.co.jp Wed Aug 23 20:18:18 JST 1995
- change for x86bios support
H0008 kisimoto@oa2.kb.nec.co.jp Wed Aug 30 12:23:36 1995
- add spinlock to support PCI Fast Back-to-back transfer.
--*/
#ifndef _HALP_
#define _HALP_
#if defined(NT_UP)
#undef NT_UP
#endif
#include "nthal.h"
#include "hal.h" // H0004
#ifndef _HALI_ // H0004
#include "..\inc\hali.h"
#endif
#if defined(_DUO_)
#if defined(_R94A_)
#include "r94adma.h"
#include "r94adef.h"
#include "r94aint.h"
#else // _R94A_
#include "duodma.h"
#include "duodef.h"
#include "duoint.h"
#endif // _R94A_
#endif
#if defined(_JAZZ_)
#include "jazzdma.h"
#include "jazzdef.h"
#include "jazzint.h"
#endif
#include "jxhalp.h"
#if defined(USE_BIOS_EMULATOR) // H0004
#include "xm86.h"
#include "x86new.h"
#endif
//
// 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
);
BOOLEAN
HalpDmaDispatch(
IN PKINTERRUPT Interrupt,
IN PVOID ServiceContext
);
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
);
// S0007
// change prototype HalpInitializeX86DisplayAdapter()
BOOLEAN
HalpInitializeX86DisplayAdapter(
VOID
);
VOID
HalpResetX86DisplayAdapter(
VOID
);
#if defined(_R94A_)
VOID
READ_REGISTER_DWORD(
PLARGE_INTEGER,
PVOID
);
VOID
WRITE_REGISTER_DWORD(
PLARGE_INTEGER,
PVOID
);
VOID
HalpGetStatusRegister (
IN PULONG Variable
);
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
);
#endif
//
// Define external references.
//
extern KSPIN_LOCK HalpBeepLock;
extern USHORT HalpBuiltinInterruptEnable;
extern ULONG HalpCurrentTimeIncrement;
extern KSPIN_LOCK HalpDisplayAdapterLock;
extern KAFFINITY HalpEisaBusAffinity;
extern ULONG HalpNextIntervalCount;
extern ULONG HalpNextTimeIncrement;
extern ULONG HalpNewTimeIncrement;
extern ULONG HalpProfileCountRate;
extern ULONG HalpStallScaleFactor;
extern KSPIN_LOCK HalpSystemInterruptLock;
#if defined(_IPI_LIMIT_)
extern KSPIN_LOCK HalpIpiRequestLock;
#endif //_IPI_LIMIT_
extern KSPIN_LOCK Ecc1bitDisableLock;// H005
extern KSPIN_LOCK Ecc1bitRoutineLock;// H005
extern KSPIN_LOCK HalpPCIBackToBackLock; // H008
// ADD001
//
// Resource usage information
//
#if !defined (_R94A_)
#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 (_R94A_)
#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
);
//
// H0004: from halx86/i386/halp.h
// Temp definitions to thunk into supporting new bus extension format
//
VOID
HalpRegisterInternalBusHandlers (
VOID
);
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
);
#define HalpHandlerForBus HaliHandlerForBus
#define HalpSetBusHandlerParent(c,p) (c)->ParentHandler = p;
#endif // _HALP_