1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- /*
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * Copyright (C) 2007 Cavium Networks
- */
- #include <asm/asm.h>
- #include <asm/regdef.h>
- #define SAVE_REG(r) sd $r, -32768+6912-(32-r)*8($0)
- NESTED(octeon_wdt_nmi_stage2, 0, sp)
- .set push
- .set noreorder
- .set noat
- /* Save all registers to the top CVMSEG. This shouldn't
- * corrupt any state used by the kernel. Also all registers
- * should have the value right before the NMI. */
- SAVE_REG(0)
- SAVE_REG(1)
- SAVE_REG(2)
- SAVE_REG(3)
- SAVE_REG(4)
- SAVE_REG(5)
- SAVE_REG(6)
- SAVE_REG(7)
- SAVE_REG(8)
- SAVE_REG(9)
- SAVE_REG(10)
- SAVE_REG(11)
- SAVE_REG(12)
- SAVE_REG(13)
- SAVE_REG(14)
- SAVE_REG(15)
- SAVE_REG(16)
- SAVE_REG(17)
- SAVE_REG(18)
- SAVE_REG(19)
- SAVE_REG(20)
- SAVE_REG(21)
- SAVE_REG(22)
- SAVE_REG(23)
- SAVE_REG(24)
- SAVE_REG(25)
- SAVE_REG(26)
- SAVE_REG(27)
- SAVE_REG(28)
- SAVE_REG(29)
- SAVE_REG(30)
- SAVE_REG(31)
- /* Set the stack to begin right below the registers */
- li sp, -32768+6912-32*8
- /* Load the address of the third stage handler */
- dla a0, octeon_wdt_nmi_stage3
- /* Call the third stage handler */
- jal a0
- /* a0 is the address of the saved registers */
- move a0, sp
- /* Loop forvever if we get here. */
- 1: b 1b
- nop
- .set pop
- END(octeon_wdt_nmi_stage2)
|