1 /* 2 * Copyright 2007-2009 Analog Devices Inc. 3 * Philippe Gerum <rpm@xenomai.org> 4 * 5 * Licensed under the GPL-2 or later. 6 */ 7 8 #ifndef _ASM_BLACKFIN_PDA_H 9 #define _ASM_BLACKFIN_PDA_H 10 11 #include <mach/anomaly.h> 12 13 #ifndef __ASSEMBLY__ 14 15 struct blackfin_pda { /* Per-processor Data Area */ 16 #ifdef CONFIG_SMP 17 struct blackfin_pda *next; 18 #endif 19 20 unsigned long syscfg; 21 #ifdef CONFIG_SMP 22 unsigned long imask; /* Current IMASK value */ 23 #endif 24 25 unsigned long *ipdt; /* Start of switchable I-CPLB table */ 26 unsigned long *ipdt_swapcount; /* Number of swaps in ipdt */ 27 unsigned long *dpdt; /* Start of switchable D-CPLB table */ 28 unsigned long *dpdt_swapcount; /* Number of swaps in dpdt */ 29 30 /* 31 * Single instructions can have multiple faults, which 32 * need to be handled by traps.c, in irq5. We store 33 * the exception cause to ensure we don't miss a 34 * double fault condition 35 */ 36 unsigned long ex_iptr; 37 unsigned long ex_optr; 38 unsigned long ex_buf[4]; 39 unsigned long ex_imask; /* Saved imask from exception */ 40 unsigned long ex_ipend; /* Saved IPEND from exception */ 41 unsigned long *ex_stack; /* Exception stack space */ 42 43 #ifdef ANOMALY_05000261 44 unsigned long last_cplb_fault_retx; 45 #endif 46 unsigned long dcplb_fault_addr; 47 unsigned long icplb_fault_addr; 48 unsigned long retx; 49 unsigned long seqstat; 50 unsigned int __nmi_count; /* number of times NMI asserted on this CPU */ 51 #ifdef CONFIG_DEBUG_DOUBLEFAULT 52 unsigned long dcplb_doublefault_addr; 53 unsigned long icplb_doublefault_addr; 54 unsigned long retx_doublefault; 55 unsigned long seqstat_doublefault; 56 #endif 57 }; 58 59 struct blackfin_initial_pda { 60 void *retx; 61 #ifdef CONFIG_DEBUG_DOUBLEFAULT 62 void *dcplb_doublefault_addr; 63 void *icplb_doublefault_addr; 64 void *retx_doublefault; 65 unsigned seqstat_doublefault; 66 #endif 67 }; 68 69 extern struct blackfin_pda cpu_pda[]; 70 71 #endif /* __ASSEMBLY__ */ 72 73 #endif /* _ASM_BLACKFIN_PDA_H */ 74