diff options
Diffstat (limited to 'private/ntos/nthals/halr96b/mips/r94aio.s')
-rw-r--r-- | private/ntos/nthals/halr96b/mips/r94aio.s | 149 |
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 |