summaryrefslogtreecommitdiffstats
path: root/private/ntos/nthals/halr98b/mips/rxipiint.s
diff options
context:
space:
mode:
authorAdam <you@example.com>2020-05-17 05:51:50 +0200
committerAdam <you@example.com>2020-05-17 05:51:50 +0200
commite611b132f9b8abe35b362e5870b74bce94a1e58e (patch)
treea5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/ntos/nthals/halr98b/mips/rxipiint.s
downloadNT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip
Diffstat (limited to 'private/ntos/nthals/halr98b/mips/rxipiint.s')
-rw-r--r--private/ntos/nthals/halr98b/mips/rxipiint.s79
1 files changed, 79 insertions, 0 deletions
diff --git a/private/ntos/nthals/halr98b/mips/rxipiint.s b/private/ntos/nthals/halr98b/mips/rxipiint.s
new file mode 100644
index 000000000..c3e99ffd2
--- /dev/null
+++ b/private/ntos/nthals/halr98b/mips/rxipiint.s
@@ -0,0 +1,79 @@
+// TITLE("Interprocessor Interrupts")
+//++
+//
+// Copyright (c) 1993 Microsoft Corporation
+//
+// Module Name:
+//
+// rxipiint.s
+//
+// Abstract:
+//
+// This module implements the code necessary to field and process the
+// interprocessor interrupts on a MIPS R98 system.
+//
+// Author:
+//
+//
+//
+// Environment:
+//
+// Kernel mode only.
+//
+// Revision History:
+//
+//--
+
+#include "halmips.h"
+
+
+ SBTTL("Interprocessor Interrupt")
+//++
+//
+// Routine Description:
+//
+// This routine is entered as the result of an interprocessor interrupt.
+// Its function is to acknowledge the interrupt and transfer control to
+// the standard system routine to process interprocessor requrests.
+//
+// Arguments:
+//
+// s8 - Supplies a pointer to a trap frame at hal first dispatch
+// a0 - Supplies a pointer to a trap frame at kernel trap frame
+// a1 - intx
+// Return Value:
+//
+// None.
+//
+//--
+// secondary
+
+ .struct 0
+ //
+liArgs: .space 4 * 4 // saved arguments
+IiS8: .space 4 //
+IiRa: .space 4 //
+IiFrameLength: //
+
+ NESTED_ENTRY(HalpIpiInterrupt, IiFrameLength, zero)
+
+ subu sp,sp,IiFrameLength // allocate stack frame
+ sw s8,IiS8(sp) // save s8
+ sw ra,IiRa(sp) // save Ra
+
+ PROLOGUE_END
+
+ or s8,a0,zero // set up trapframe to s8
+ // KeIpiInterrupt require trapframe at s8
+
+ lw t1,__imp_KeIpiInterrupt // process interprocessor requests
+ jal t1 //
+
+ lw ra,IiRa(sp) // restore ra
+ lw s8,IiS8(sp) // restore s8
+ addu sp,sp,IiFrameLength // deallocate stack frame
+ j ra // return
+
+ .end HalpIpIInterrupt
+
+