0001
0002 #ifndef _ASM_POWERPC_EXCEPTION_H
0003 #define _ASM_POWERPC_EXCEPTION_H
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033 #include <asm/feature-fixups.h>
0034
0035
0036 #define EX_SIZE 10
0037
0038
0039 #define EX_R9 0
0040 #define EX_R10 8
0041 #define EX_R11 16
0042 #define EX_R12 24
0043 #define EX_R13 32
0044 #define EX_DAR 40
0045 #define EX_DSISR 48
0046 #define EX_CCR 52
0047 #define EX_CFAR 56
0048 #define EX_PPR 64
0049 #define EX_CTR 72
0050
0051
0052
0053
0054 #define MAX_MCE_DEPTH 4
0055
0056 #ifdef __ASSEMBLY__
0057
0058 #define STF_ENTRY_BARRIER_SLOT \
0059 STF_ENTRY_BARRIER_FIXUP_SECTION; \
0060 nop; \
0061 nop; \
0062 nop
0063
0064 #define STF_EXIT_BARRIER_SLOT \
0065 STF_EXIT_BARRIER_FIXUP_SECTION; \
0066 nop; \
0067 nop; \
0068 nop; \
0069 nop; \
0070 nop; \
0071 nop
0072
0073 #define ENTRY_FLUSH_SLOT \
0074 ENTRY_FLUSH_FIXUP_SECTION; \
0075 nop; \
0076 nop; \
0077 nop;
0078
0079 #define SCV_ENTRY_FLUSH_SLOT \
0080 SCV_ENTRY_FLUSH_FIXUP_SECTION; \
0081 nop; \
0082 nop; \
0083 nop;
0084
0085
0086
0087
0088 #define INTERRUPT_TO_KERNEL \
0089 STF_ENTRY_BARRIER_SLOT; \
0090 ENTRY_FLUSH_SLOT
0091
0092
0093
0094
0095 #define SCV_INTERRUPT_TO_KERNEL \
0096 STF_ENTRY_BARRIER_SLOT; \
0097 SCV_ENTRY_FLUSH_SLOT
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113 #define RFI_FLUSH_SLOT \
0114 RFI_FLUSH_FIXUP_SECTION; \
0115 nop; \
0116 nop; \
0117 nop
0118
0119 #define RFI_TO_KERNEL \
0120 rfid
0121
0122 #define RFI_TO_USER \
0123 STF_EXIT_BARRIER_SLOT; \
0124 RFI_FLUSH_SLOT; \
0125 rfid; \
0126 b rfi_flush_fallback
0127
0128 #define RFI_TO_USER_OR_KERNEL \
0129 STF_EXIT_BARRIER_SLOT; \
0130 RFI_FLUSH_SLOT; \
0131 rfid; \
0132 b rfi_flush_fallback
0133
0134 #define RFI_TO_GUEST \
0135 STF_EXIT_BARRIER_SLOT; \
0136 RFI_FLUSH_SLOT; \
0137 rfid; \
0138 b rfi_flush_fallback
0139
0140 #define HRFI_TO_KERNEL \
0141 hrfid
0142
0143 #define HRFI_TO_USER \
0144 STF_EXIT_BARRIER_SLOT; \
0145 RFI_FLUSH_SLOT; \
0146 hrfid; \
0147 b hrfi_flush_fallback
0148
0149 #define HRFI_TO_USER_OR_KERNEL \
0150 STF_EXIT_BARRIER_SLOT; \
0151 RFI_FLUSH_SLOT; \
0152 hrfid; \
0153 b hrfi_flush_fallback
0154
0155 #define HRFI_TO_GUEST \
0156 STF_EXIT_BARRIER_SLOT; \
0157 RFI_FLUSH_SLOT; \
0158 hrfid; \
0159 b hrfi_flush_fallback
0160
0161 #define HRFI_TO_UNKNOWN \
0162 STF_EXIT_BARRIER_SLOT; \
0163 RFI_FLUSH_SLOT; \
0164 hrfid; \
0165 b hrfi_flush_fallback
0166
0167 #define RFSCV_TO_USER \
0168 STF_EXIT_BARRIER_SLOT; \
0169 RFI_FLUSH_SLOT; \
0170 RFSCV; \
0171 b rfscv_flush_fallback
0172
0173 #else
0174
0175 void do_uaccess_flush(void);
0176 #endif
0177
0178 #endif