summaryrefslogtreecommitdiffstats
path: root/private/ntos/nthals/halsni4x/mips/jxmapio.c
diff options
context:
space:
mode:
Diffstat (limited to 'private/ntos/nthals/halsni4x/mips/jxmapio.c')
-rw-r--r--private/ntos/nthals/halsni4x/mips/jxmapio.c133
1 files changed, 133 insertions, 0 deletions
diff --git a/private/ntos/nthals/halsni4x/mips/jxmapio.c b/private/ntos/nthals/halsni4x/mips/jxmapio.c
new file mode 100644
index 000000000..482a287f3
--- /dev/null
+++ b/private/ntos/nthals/halsni4x/mips/jxmapio.c
@@ -0,0 +1,133 @@
+//#pragma comment(exestr, "$Header: /usr4/winnt/SOURCES/ddk35/src/hal/halsni/mips/RCS/jxmapio.c,v 1.1 1994/10/13 15:47:06 holli Exp $")
+
+/*++
+
+Copyright (c) 1993 - 1994 Siemens Nixdorf Informationssysteme AG
+Copyright (c) 1991 - 1994 Microsoft Corporation
+
+Module Name:
+
+ jxmapio.c
+
+Abstract:
+
+ This module implements the mapping of HAL I/O space for a SNI
+ or R4x00 system.
+ For use of EISA I/O Space during phase 0 we go via KSEG1_BASE
+
+Environment:
+
+ Kernel mode
+
+
+--*/
+
+#include "halp.h"
+
+//
+// Put all code for HAL initialization in the INIT section. It will be
+// deallocated by memory management when phase 1 initialization is
+// completed.
+//
+
+#if defined(ALLOC_PRAGMA)
+
+#pragma alloc_text(INIT, HalpMapIoSpace)
+
+#endif
+
+//
+// Define global data used to locate the EISA control space and the realtime
+// clock registers.
+//
+
+PVOID HalpEisaControlBase =(PVOID) (EISA_CONTROL_PHYSICAL_BASE | KSEG1_BASE);
+PVOID HalpOnboardControlBase=(PVOID) (RM200_ONBOARD_CONTROL_PHYSICAL_BASE | KSEG1_BASE);
+PVOID HalpEisaMemoryBase =(PVOID) (EISA_MEMORY_PHYSICAL_BASE | KSEG1_BASE);
+
+BOOLEAN
+HalpMapIoSpace (
+ VOID
+ )
+
+/*++
+
+Routine Description:
+
+ This routine maps the HAL I/O space for a MIPS R4x00 SNI
+ system (Phase 1, so the mapping goes via MmMapIoSpace()).
+
+Arguments:
+
+ None.
+
+Return Value:
+
+ If the initialization is successfully completed, than a value of TRUE
+ is returned. Otherwise, a value of FALSE is returned.
+
+--*/
+
+{
+ PHYSICAL_ADDRESS physicalAddress;
+
+ //
+ // Map EISA control space. Map all 16 slots. This is done so the NMI
+ // code can probe the cards.
+ // (64KB I/O Space)
+ //
+
+ physicalAddress.HighPart = 0;
+ physicalAddress.LowPart = EISA_CONTROL_PHYSICAL_BASE;
+ HalpEisaControlBase = MmMapIoSpace(physicalAddress,
+ PAGE_SIZE * 16,
+ FALSE);
+
+ //
+ // for the sni deskop model, may need an extra address space
+ // HalpEisaExtensionInstalled can only be TRUE on RM200 (Desktop)
+ //
+
+ if (HalpEisaExtensionInstalled) {
+ physicalAddress.HighPart = 0;
+ physicalAddress.LowPart = RM200_ONBOARD_CONTROL_PHYSICAL_BASE;
+ HalpOnboardControlBase = MmMapIoSpace(physicalAddress,
+ PAGE_SIZE * 16,
+ FALSE);
+
+ } else
+
+ //
+ // In the SNI Minitower model, we have only one
+ // address space
+ //
+
+ HalpOnboardControlBase = HalpEisaControlBase;
+
+ //
+ // Map EISA memory space so the x86 bios emulator emulator can
+ // initialze a video adapter in an EISA/Isa slot.
+ // (first 1MB only to have access to Card Bioses)
+ // We do not have to call HalTranslateBusAddress on our SNI machines,
+ // because we always use EISA_MEMORY_PHYSICAL_BASE for Extension Cards
+ // on all machines
+ //
+
+ physicalAddress.HighPart = 0;
+ physicalAddress.LowPart = EISA_MEMORY_PHYSICAL_BASE;
+ HalpEisaMemoryBase = MmMapIoSpace(physicalAddress,
+ PAGE_SIZE * 256,
+ FALSE);
+ //
+ // If either mapped address is NULL, then return FALSE as the function
+ // value. Otherwise, return TRUE.
+ //
+
+ if ((HalpEisaControlBase == NULL) ||
+ (HalpOnboardControlBase == NULL) ||
+ (HalpEisaMemoryBase == NULL)) {
+ return FALSE;
+ } else {
+ return TRUE;
+ }
+}