| 
									
										
										
										
											2007-02-06 21:29:00 +01:00
										 |  |  | #ifndef _ARM_KEXEC_H
 | 
					
						
							|  |  |  | #define _ARM_KEXEC_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef CONFIG_KEXEC
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Maximum physical address we can use pages from */ | 
					
						
							|  |  |  | #define KEXEC_SOURCE_MEMORY_LIMIT (-1UL)
 | 
					
						
							|  |  |  | /* Maximum address we can reach in physical address mode */ | 
					
						
							|  |  |  | #define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL)
 | 
					
						
							|  |  |  | /* Maximum address we can use for the control code buffer */ | 
					
						
							| 
									
										
										
										
											2008-02-24 17:59:34 +01:00
										 |  |  | #define KEXEC_CONTROL_MEMORY_LIMIT (-1UL)
 | 
					
						
							| 
									
										
										
										
											2007-02-06 21:29:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-15 00:40:22 -07:00
										 |  |  | #define KEXEC_CONTROL_PAGE_SIZE	4096
 | 
					
						
							| 
									
										
										
										
											2007-02-06 21:29:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define KEXEC_ARCH KEXEC_ARCH_ARM
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-02 00:56:46 +01:00
										 |  |  | #define KEXEC_ARM_ATAGS_OFFSET  0x1000
 | 
					
						
							|  |  |  | #define KEXEC_ARM_ZIMAGE_OFFSET 0x8000
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-02-06 21:29:00 +01:00
										 |  |  | #ifndef __ASSEMBLY__
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-10 09:22:14 +01:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * crash_setup_regs() - save registers for the panic kernel | 
					
						
							|  |  |  |  * @newregs: registers are saved here | 
					
						
							|  |  |  |  * @oldregs: registers to be saved (may be %NULL) | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Function copies machine registers from @oldregs to @newregs. If @oldregs is | 
					
						
							|  |  |  |  * %NULL then current registers are stored there. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2007-02-06 21:29:00 +01:00
										 |  |  | static inline void crash_setup_regs(struct pt_regs *newregs, | 
					
						
							| 
									
										
										
										
											2010-05-10 09:22:14 +01:00
										 |  |  | 				    struct pt_regs *oldregs) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if (oldregs) { | 
					
						
							|  |  |  | 		memcpy(newregs, oldregs, sizeof(*newregs)); | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		__asm__ __volatile__ ("stmia %0, {r0 - r15}" | 
					
						
							|  |  |  | 				      : : "r" (&newregs->ARM_r0)); | 
					
						
							|  |  |  | 		__asm__ __volatile__ ("mrs %0, cpsr" | 
					
						
							|  |  |  | 				      : "=r" (newregs->ARM_cpsr)); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2007-02-06 21:29:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | #endif /* __ASSEMBLY__ */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif /* CONFIG_KEXEC */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif /* _ARM_KEXEC_H */
 |