Merge git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86
[linux-2.6] / arch / powerpc / platforms / iseries / exception.h
1 #ifndef _ASM_POWERPC_ISERIES_EXCEPTION_H
2 #define _ASM_POWERPC_ISERIES_EXCEPTION_H
3 /*
4  * Extracted from head_64.S
5  *
6  *  PowerPC version
7  *    Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org)
8  *
9  *  Rewritten by Cort Dougan (cort@cs.nmt.edu) for PReP
10  *    Copyright (C) 1996 Cort Dougan <cort@cs.nmt.edu>
11  *  Adapted for Power Macintosh by Paul Mackerras.
12  *  Low-level exception handlers and MMU support
13  *  rewritten by Paul Mackerras.
14  *    Copyright (C) 1996 Paul Mackerras.
15  *
16  *  Adapted for 64bit PowerPC by Dave Engebretsen, Peter Bergner, and
17  *    Mike Corrigan {engebret|bergner|mikejc}@us.ibm.com
18  *
19  *  This file contains the low-level support and setup for the
20  *  PowerPC-64 platform, including trap and interrupt dispatch.
21  *
22  *  This program is free software; you can redistribute it and/or
23  *  modify it under the terms of the GNU General Public License
24  *  as published by the Free Software Foundation; either version
25  *  2 of the License, or (at your option) any later version.
26  */
27 #include <asm/exception.h>
28
29 #define EXCEPTION_PROLOG_ISERIES_1                                      \
30         mfmsr   r10;                                                    \
31         ld      r12,PACALPPACAPTR(r13);                                 \
32         ld      r11,LPPACASRR0(r12);                                    \
33         ld      r12,LPPACASRR1(r12);                                    \
34         ori     r10,r10,MSR_RI;                                         \
35         mtmsrd  r10,1
36
37 #define STD_EXCEPTION_ISERIES(label, area)                              \
38         .globl label##_iSeries;                                         \
39 label##_iSeries:                                                        \
40         HMT_MEDIUM;                                                     \
41         mtspr   SPRN_SPRG1,r13;         /* save r13 */                  \
42         EXCEPTION_PROLOG_1(area);                                       \
43         EXCEPTION_PROLOG_ISERIES_1;                                     \
44         b       label##_common
45
46 #define MASKABLE_EXCEPTION_ISERIES(label)                               \
47         .globl label##_iSeries;                                         \
48 label##_iSeries:                                                        \
49         HMT_MEDIUM;                                                     \
50         mtspr   SPRN_SPRG1,r13;         /* save r13 */                  \
51         EXCEPTION_PROLOG_1(PACA_EXGEN);                                 \
52         lbz     r10,PACASOFTIRQEN(r13);                                 \
53         cmpwi   0,r10,0;                                                \
54         beq-    label##_iSeries_masked;                                 \
55         EXCEPTION_PROLOG_ISERIES_1;                                     \
56         b       label##_common;                                         \
57
58 #endif  /* _ASM_POWERPC_ISERIES_EXCEPTION_H */