This commit was manufactured by cvs2svn to create branch 'vserver'.
[linux-2.6.git] / arch / mips / mm / tlb64-glue-sb1.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) 1999 Ralf Baechle
7  * Copyright (C) 1999 Silicon Graphics, Inc.
8  */
9 #include <linux/init.h>
10 #include <asm/mipsregs.h>
11 #include <asm/page.h>
12 #include <asm/regdef.h>
13 #include <asm/stackframe.h>
14 #include <asm/war.h>
15
16         .macro  __BUILD_cli
17         CLI
18         .endm
19
20         .macro  __BUILD_sti
21         STI
22         .endm
23
24         .macro  __BUILD_kmode
25         KMODE
26         .endm
27
28         .macro  tlb_handler name interruptible writebit
29         NESTED(__\name, PT_SIZE, sp)
30         SAVE_ALL
31         dmfc0   a2, CP0_BADVADDR
32         __BUILD_\interruptible
33         li      a1, \writebit
34         sd      a2, PT_BVADDR(sp)
35         move    a0, sp
36         jal     do_page_fault
37         j       ret_from_exception
38         END(__\name)
39         .endm
40
41         .macro  tlb_handler_m3 name interruptible writebit
42         NESTED(__\name, PT_SIZE, sp)
43         dmfc0   k0, CP0_BADVADDR
44         dmfc0   k1, CP0_ENTRYHI
45         xor     k0, k1
46         dsrl    k0, k0, PAGE_SHIFT + 1
47         bnez    k0, 1f
48         SAVE_ALL
49         dmfc0   a2, CP0_BADVADDR
50         __BUILD_\interruptible
51         li      a1, \writebit
52         sd      a2, PT_BVADDR(sp)
53         move    a0, sp
54         jal     do_page_fault
55 1:
56         j       ret_from_exception
57         END(__\name)
58         .endm
59
60         tlb_handler     xtlb_mod kmode 1
61 #if BCM1250_M3_WAR
62         tlb_handler_m3  xtlb_tlbl kmode 0
63 #else
64         tlb_handler     xtlb_tlbl kmode 0
65 #endif
66         tlb_handler     xtlb_tlbs kmode 1