80 lines
1.9 KiB
ArmAsm
80 lines
1.9 KiB
ArmAsm
// 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
|
|
|
|
|