* add p cc
[mascara-docs.git] / i386 / linux / linux-2.3.21 / arch / mips / baget / balo_supp.S
blob1c57539a550c2f2a3c1ca9de1b6b80eadf898cc0
1 /* $Id$
2  * balo_supp.S: BAget Loader supplement
3  *
4  * Copyright (C) 1998 Gleb Raiko & Vladimir Roganov
5  */
7 #include <asm/asm.h>
8 #include <asm/regdef.h>
9 #include <asm/stackframe.h>
10 #include <asm/mipsregs.h>
11 #include <asm/addrspace.h>
12         
13         .text
14         .set    mips1
15         
16         /* General exception vector. */
17 NESTED(except_vec3_generic, 0, sp)
18         .set    noat
19         la      k0, except_vec3_generic_code
20         jr      k0
21 END(except_vec3_generic)
23 NESTED(except_vec3_generic_code, 0, sp)
24         SAVE_ALL 
25         mfc0    k1, CP0_CAUSE
26         la      k0, int_cause
27         sw      k1, (k0)
29         mfc0    k1, CP0_EPC
30         la      k0, epc
31         sw      k1, (k0)
33         mfc0    k1, CP0_BADVADDR
34         la      k0, badvaddr
35         sw      k1, (k0)
37         la      k0, int_handler 
38         .set    noreorder
39         jal     k0
40         .set    reorder
41         move    a0, sp
43         RESTORE_ALL_AND_RET
44 END(except_vec3_generic_code)
46         .align  5
47 NESTED(flush_cache_low, PT_SIZE, sp)
48         .set    at
49         .set    macro
50         .set    noreorder
51         
52         move    t1, a0  # ISIZE
53         move    t2, a1  # DSIZE
55         mfc0    t3, CP0_STATUS       # Save the status register.
56         mtc0    zero, CP0_STATUS     # Disable interrupts.
57         la      v0, 1f
58         or      v0, KSEG1            # Run uncached.
59         j       v0
60         nop
62  * Flush the instruction cache.
63  */
65         li      v0, ST0_DE | ST0_CE
66         mtc0    v0, CP0_STATUS       # Isolate and swap caches.
67         li      t0, KSEG1
68         subu    t0, t0, t1
69         li      t1, KSEG1
70         la      v0, 1f                          # Run cached
71         j       v0
72         nop
74         addu    t0, t0, 64
75         sb      zero, -64(t0)
76         sb      zero, -60(t0)
77         sb      zero, -56(t0)
78         sb      zero, -52(t0)
79         sb      zero, -48(t0)
80         sb      zero, -44(t0)
81         sb      zero, -40(t0)
82         sb      zero, -36(t0)
83         sb      zero, -32(t0)
84         sb      zero, -28(t0)
85         sb      zero, -24(t0)
86         sb      zero, -20(t0)
87         sb      zero, -16(t0)
88         sb      zero, -12(t0)
89         sb      zero, -8(t0)
90         bne     t0, t1, 1b
91         sb      zero, -4(t0)
92         
93         la      v0, 1f
94         or      v0, KSEG1
95         j       v0                              # Run uncached
96         nop
98  * Flush the data cache.
99  */
101         li      v0, ST0_DE
102         mtc0    v0, CP0_STATUS       # Isolate and swap back caches
103         li      t0, KSEG1
104         subu    t0, t0, t2
105         la      v0, 1f
106         j       v0                              # Back to cached mode
107         nop
109         addu    t0, t0, 64
110         sb      zero, -64(t0)
111         sb      zero, -60(t0)
112         sb      zero, -56(t0)
113         sb      zero, -52(t0)
114         sb      zero, -48(t0)
115         sb      zero, -44(t0)
116         sb      zero, -40(t0)
117         sb      zero, -36(t0)
118         sb      zero, -32(t0)
119         sb      zero, -28(t0)
120         sb      zero, -24(t0)
121         sb      zero, -20(t0)
122         sb      zero, -16(t0)
123         sb      zero, -12(t0)
124         sb      zero, -8(t0)
125         bne     t0, t1, 1b
126         sb      zero, -4(t0)
128         nop                                     # Insure isolated stores
129         nop                                     #   out of pipe.
130         nop
131         nop
132         mtc0    t3, CP0_STATUS                 # Restore status reg.
133         nop                                    # Insure cache unisolated.
134         nop
135         nop
136         nop
137         j       ra
138         nop
139 END(flush_cache_low)
141 /* To satisfy macros only */
142 EXPORT(kernelsp)
143         PTR     0x80001000