2010-05-28 23:09:12 -04:00
/*
* Copyright 2010 Tilera Corporation . All Rights Reserved .
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation , version 2.
*
* This program is distributed in the hope that it will be useful , but
* WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE , GOOD TITLE or
* NON INFRINGEMENT . See the GNU General Public License for
* more details .
*/
# ifndef _ASM_TILE_TRAPS_H
# define _ASM_TILE_TRAPS_H
2013-08-06 16:04:13 -04:00
# ifndef __ASSEMBLY__
2011-05-02 14:50:06 -04:00
# include <arch/chip.h>
2010-05-28 23:09:12 -04:00
/* mm/fault.c */
void do_page_fault ( struct pt_regs * , int fault_num ,
unsigned long address , unsigned long write ) ;
2013-08-15 16:23:24 -04:00
# if CHIP_HAS_TILE_DMA()
2010-06-25 17:04:17 -04:00
void do_async_page_fault ( struct pt_regs * ) ;
2011-05-02 14:50:06 -04:00
# endif
2010-06-25 17:04:17 -04:00
# ifndef __tilegx__
/*
* We return this structure in registers to avoid having to write
* additional save / restore code in the intvec . S caller .
*/
struct intvec_state {
void * handler ;
unsigned long vecnum ;
unsigned long fault_num ;
unsigned long info ;
unsigned long retval ;
} ;
struct intvec_state do_page_fault_ics ( struct pt_regs * regs , int fault_num ,
unsigned long address ,
unsigned long info ) ;
# endif
2010-05-28 23:09:12 -04:00
/* kernel/traps.c */
void do_trap ( struct pt_regs * , int fault_num , unsigned long reason ) ;
2010-06-25 17:04:17 -04:00
void kernel_double_fault ( int dummy , ulong pc , ulong lr , ulong sp , ulong r52 ) ;
2010-05-28 23:09:12 -04:00
/* kernel/time.c */
void do_timer_interrupt ( struct pt_regs * , int fault_num ) ;
/* kernel/messaging.c */
void hv_message_intr ( struct pt_regs * , int intnum ) ;
2015-05-04 17:26:35 -04:00
# define TILE_NMI_DUMP_STACK 1 /* Dump stack for sysrq+'l' */
/* kernel/process.c */
void do_nmi_dump_stack ( struct pt_regs * regs ) ;
/* kernel/traps.c */
void do_nmi ( struct pt_regs * , int fault_num , unsigned long reason ) ;
2010-05-28 23:09:12 -04:00
/* kernel/irq.c */
void tile_dev_intr ( struct pt_regs * , int intnum ) ;
2010-06-25 17:04:17 -04:00
# ifdef CONFIG_HARDWALL
/* kernel/hardwall.c */
void do_hardwall_trap ( struct pt_regs * , int fault_num ) ;
# endif
/* kernel/ptrace.c */
void do_breakpoint ( struct pt_regs * , int fault_num ) ;
2010-05-28 23:09:12 -04:00
2010-10-14 16:32:41 -04:00
# ifdef __tilegx__
2012-03-29 14:52:00 -04:00
/* kernel/single_step.c */
2010-10-14 16:32:41 -04:00
void gx_singlestep_handle ( struct pt_regs * , int fault_num ) ;
2012-03-29 14:52:00 -04:00
/* kernel/intvec_64.S */
void fill_ra_stack ( void ) ;
2013-08-06 16:04:13 -04:00
/* Handle unalign data fixup. */
extern void do_unaligned ( struct pt_regs * regs , int vecnum ) ;
# endif
# endif /* __ASSEMBLY__ */
# ifdef __tilegx__
/* 128 byte JIT per unalign fixup. */
# define UNALIGN_JIT_SHIFT 7
2010-10-14 16:32:41 -04:00
# endif
2012-03-29 14:52:00 -04:00
# endif /* _ASM_TILE_TRAPS_H */