summaryrefslogtreecommitdiffstats
path: root/private/ntos/nthals/halr96b/mips/r94aio.s
diff options
context:
space:
mode:
Diffstat (limited to 'private/ntos/nthals/halr96b/mips/r94aio.s')
-rw-r--r--private/ntos/nthals/halr96b/mips/r94aio.s149
1 files changed, 149 insertions, 0 deletions
diff --git a/private/ntos/nthals/halr96b/mips/r94aio.s b/private/ntos/nthals/halr96b/mips/r94aio.s
new file mode 100644
index 000000000..fed2171e2
--- /dev/null
+++ b/private/ntos/nthals/halr96b/mips/r94aio.s
@@ -0,0 +1,149 @@
+// .ident "@(#) r94aio.s 1.1 95/09/28 18:36:07 nec"
+//++
+//
+// Copyright (c) 1994 KOBE NEC Software Corporation
+//
+// Module Name:
+//
+// r94aio.s
+//
+// Abstract:
+//
+// This module implements the system dependent kernel function to read
+// and write the 64-bit register on a MIPS R4000 R94A system.
+//
+// Author:
+//
+// Environment:
+//
+// Kernel mode only.
+//
+// Revision History:
+//
+// H000 Fri Oct 7 19:57:09 JST 1994 kbnes!kisimoto
+// new READ_REGISTER_DWORD
+// new WRITE_REGISTER_DWORD
+//
+//--
+
+#if defined(_R94A_)
+
+#include "halmips.h"
+
+//++
+//
+// VOID
+// READ_REGISTER_DWORD (
+// IN PLARGE_INTEGER RegisterAddress,
+// IN PVOID Variable
+// )
+//
+// Routine Description:
+//
+// 64-bit I/O space register read function.
+//
+// Arguments:
+//
+// RegisterAddress (a0) - Supplies a pointer to the destination address of
+// the move operation.
+//
+// Variable (a1) - Supplies a pointer to the source address of the move
+// operation.
+//
+// Return Value:
+//
+// None.
+//
+// Destination and Source must be 8-byte aligned.
+//
+//--
+
+ LEAF_ENTRY(READ_REGISTER_DWORD)
+
+ ldc1 f0,0(a0) // move 8-byte block
+ sdc1 f0,0(a1) //
+
+ sync // synchronize read
+
+ j ra // return
+
+ .end READ_REGISTER_DWORD
+
+
+//++
+//
+// VOID
+// WRITE_REGISTER_DWORD (
+// IN PLARGE_INTEGER RegisterAddress,
+// IN PVOID Variable
+// )
+//
+// Routine Description:
+//
+// 64-bit I/O space register write function.
+//
+// Arguments:
+//
+// RegisterAddress (a0) - Supplies a pointer to the destination address of
+// the move operation.
+//
+// Variable (a1) - Supplies a pointer to the source address of the move
+// operation.
+//
+// Return Value:
+//
+// None.
+//
+// Destination and Source must be 8-byte aligned.
+//
+//--
+
+ LEAF_ENTRY(WRITE_REGISTER_DWORD)
+
+ ldc1 f0,0(a1) // move 8-byte block
+ sdc1 f0,0(a0) //
+
+ sync // synchronize write
+
+ j ra // return
+
+ .end WRITE_REGISTER_DWORD
+
+
+//++
+//
+// VOID
+// HalpGetStatusRegister (
+// IN PULONG Variable
+// )
+//
+// Routine Description:
+//
+// This function returns value which is status register of R4400.
+//
+// Arguments:
+//
+// Variable (a0) - Supplies a pointer to the destination address of
+// the move operation.
+//
+// Return Value:
+//
+// None.
+//
+//--
+
+ LEAF_ENTRY(HalpGetStatusRegister)
+
+ .set noreorder
+ .set noat
+ mfc0 t0,psr // get current processor status
+ nop // 1 cycle hazzard
+ sw t0,0(a0) // save integer registers a0 - a3
+ .set at
+ .set reorder
+
+ j ra // return
+
+ .end HalpGetStatusRegister
+
+#endif