2009-11-24 01:24:58 +00:00
/*
* This file is subject to the terms and conditions of the GNU General Public
* License . See the file " COPYING " in the main directory of this archive
* for more details .
*
* Copyright ( C ) 2009 Wind River Systems ,
* written by Ralf Baechle < ralf @ linux - mips . org >
*/
# ifndef __ASM_COP2_H
# define __ASM_COP2_H
2010-08-05 13:25:59 +01:00
# include <linux/notifier.h>
2013-06-10 06:30:00 +00:00
# if defined(CONFIG_CPU_CAVIUM_OCTEON)
extern void octeon_cop2_save ( struct octeon_cop2_state * ) ;
extern void octeon_cop2_restore ( struct octeon_cop2_state * ) ;
2014-08-25 19:35:53 +02:00
# define cop2_save(r) octeon_cop2_save(&(r)->thread.cp2)
# define cop2_restore(r) octeon_cop2_restore(&(r)->thread.cp2)
2013-06-10 06:30:00 +00:00
# define cop2_present 1
# define cop2_lazy_restore 1
2013-06-10 06:30:04 +00:00
# elif defined(CONFIG_CPU_XLP)
extern void nlm_cop2_save ( struct nlm_cop2_state * ) ;
extern void nlm_cop2_restore ( struct nlm_cop2_state * ) ;
2014-08-25 19:35:53 +02:00
# define cop2_save(r) nlm_cop2_save(&(r)->thread.cp2)
# define cop2_restore(r) nlm_cop2_restore(&(r)->thread.cp2)
2013-06-10 06:30:04 +00:00
# define cop2_present 1
# define cop2_lazy_restore 0
2014-06-26 11:41:31 +08:00
# elif defined(CONFIG_CPU_LOONGSON3)
# define cop2_present 1
# define cop2_lazy_restore 1
2014-09-25 10:26:15 +01:00
# define cop2_save(r) do { (void)(r); } while (0)
# define cop2_restore(r) do { (void)(r); } while (0)
2014-06-26 11:41:31 +08:00
2013-06-10 06:30:00 +00:00
# else
# define cop2_present 0
# define cop2_lazy_restore 0
2014-09-25 10:26:15 +01:00
# define cop2_save(r) do { (void)(r); } while (0)
# define cop2_restore(r) do { (void)(r); } while (0)
2013-06-10 06:30:00 +00:00
# endif
2009-11-24 01:24:58 +00:00
enum cu2_ops {
CU2_EXCEPTION ,
CU2_LWC2_OP ,
CU2_LDC2_OP ,
CU2_SWC2_OP ,
CU2_SDC2_OP ,
} ;
extern int register_cu2_notifier ( struct notifier_block * nb ) ;
extern int cu2_notifier_call_chain ( unsigned long val , void * v ) ;
2010-08-05 13:25:59 +01:00
# define cu2_notifier(fn, pri) \
( { \
2010-09-23 11:23:29 -07:00
static struct notifier_block fn # # _nb = { \
2010-08-05 13:25:59 +01:00
. notifier_call = fn , \
. priority = pri \
} ; \
\
register_cu2_notifier ( & fn # # _nb ) ; \
} )
2009-11-24 01:24:58 +00:00
# endif /* __ASM_COP2_H */