Root/drivers/watchdog/octeon-wdt-nmi.S

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

Archive Download this file



interactive