12edfe428SAndrew Jones #ifndef _ASMARM_PROCESSOR_H_ 22edfe428SAndrew Jones #define _ASMARM_PROCESSOR_H_ 32edfe428SAndrew Jones /* 42edfe428SAndrew Jones * Copyright (C) 2014, Red Hat Inc, Andrew Jones <drjones@redhat.com> 52edfe428SAndrew Jones * 62edfe428SAndrew Jones * This work is licensed under the terms of the GNU LGPL, version 2. 72edfe428SAndrew Jones */ 88cca5668SAndrew Jones #include <asm/ptrace.h> 9*92fca209SWei Huang #include <asm/sysreg.h> 102edfe428SAndrew Jones 112edfe428SAndrew Jones enum vector { 122edfe428SAndrew Jones EXCPTN_RST, 132edfe428SAndrew Jones EXCPTN_UND, 142edfe428SAndrew Jones EXCPTN_SVC, 152edfe428SAndrew Jones EXCPTN_PABT, 162edfe428SAndrew Jones EXCPTN_DABT, 172edfe428SAndrew Jones EXCPTN_ADDREXCPTN, 182edfe428SAndrew Jones EXCPTN_IRQ, 192edfe428SAndrew Jones EXCPTN_FIQ, 202edfe428SAndrew Jones EXCPTN_MAX, 212edfe428SAndrew Jones }; 222edfe428SAndrew Jones 232edfe428SAndrew Jones typedef void (*exception_fn)(struct pt_regs *); 242edfe428SAndrew Jones extern void install_exception_handler(enum vector v, exception_fn fn); 252edfe428SAndrew Jones 262edfe428SAndrew Jones extern void show_regs(struct pt_regs *regs); 272edfe428SAndrew Jones 282edfe428SAndrew Jones static inline unsigned long current_cpsr(void) 292edfe428SAndrew Jones { 302edfe428SAndrew Jones unsigned long cpsr; 312edfe428SAndrew Jones asm volatile("mrs %0, cpsr" : "=r" (cpsr)); 322edfe428SAndrew Jones return cpsr; 332edfe428SAndrew Jones } 342edfe428SAndrew Jones 352edfe428SAndrew Jones #define current_mode() (current_cpsr() & MODE_MASK) 362edfe428SAndrew Jones 37*92fca209SWei Huang #define MPIDR __ACCESS_CP15(c0, 0, c0, 5) 38f6d10793SAndrew Jones static inline unsigned int get_mpidr(void) 39f6d10793SAndrew Jones { 40*92fca209SWei Huang return read_sysreg(MPIDR); 41f6d10793SAndrew Jones } 42f6d10793SAndrew Jones 43f6d10793SAndrew Jones /* Only support Aff0 for now, up to 4 cpus */ 44f6d10793SAndrew Jones #define mpidr_to_cpu(mpidr) ((int)((mpidr) & 0xff)) 45f6d10793SAndrew Jones 462edfe428SAndrew Jones extern void start_usr(void (*func)(void *arg), void *arg, unsigned long sp_usr); 47f6d10793SAndrew Jones extern bool is_user(void); 482edfe428SAndrew Jones 492edfe428SAndrew Jones #endif /* _ASMARM_PROCESSOR_H_ */ 50