blob: 01b05be23a5de07e6dcd464b5c58f049bbf386f0 [file] [log] [blame]
Ralf Baechle69f3a7d2009-11-24 01:24:58 +00001/*
2 * This file is subject to the terms and conditions of the GNU General Public
3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details.
5 *
6 * Copyright (C) 2009 Wind River Systems,
7 * written by Ralf Baechle <ralf@linux-mips.org>
8 */
9#ifndef __ASM_COP2_H
10#define __ASM_COP2_H
11
Ralf Baechle4483b152010-08-05 13:25:59 +010012#include <linux/notifier.h>
13
Jayachandran C2c952e02013-06-10 06:30:00 +000014#if defined(CONFIG_CPU_CAVIUM_OCTEON)
15
16extern void octeon_cop2_save(struct octeon_cop2_state *);
17extern void octeon_cop2_restore(struct octeon_cop2_state *);
18
Ralf Baechle68c77d82014-08-25 19:35:53 +020019#define cop2_save(r) octeon_cop2_save(&(r)->thread.cp2)
20#define cop2_restore(r) octeon_cop2_restore(&(r)->thread.cp2)
Jayachandran C2c952e02013-06-10 06:30:00 +000021
22#define cop2_present 1
23#define cop2_lazy_restore 1
24
Jiaxun Yang268a2d62019-10-20 22:43:13 +080025#elif defined(CONFIG_CPU_LOONGSON64)
Huacai Chenef2f8262014-06-26 11:41:31 +080026
Huacai Chenef2f8262014-06-26 11:41:31 +080027#define cop2_present 1
28#define cop2_lazy_restore 1
Paul Burtonb89f3062014-09-25 10:26:15 +010029#define cop2_save(r) do { (void)(r); } while (0)
30#define cop2_restore(r) do { (void)(r); } while (0)
Huacai Chenef2f8262014-06-26 11:41:31 +080031
Jayachandran C2c952e02013-06-10 06:30:00 +000032#else
33
34#define cop2_present 0
35#define cop2_lazy_restore 0
Paul Burtonb89f3062014-09-25 10:26:15 +010036#define cop2_save(r) do { (void)(r); } while (0)
37#define cop2_restore(r) do { (void)(r); } while (0)
Jayachandran C2c952e02013-06-10 06:30:00 +000038#endif
39
Ralf Baechle69f3a7d2009-11-24 01:24:58 +000040enum cu2_ops {
41 CU2_EXCEPTION,
42 CU2_LWC2_OP,
43 CU2_LDC2_OP,
44 CU2_SWC2_OP,
45 CU2_SDC2_OP,
46};
47
48extern int register_cu2_notifier(struct notifier_block *nb);
49extern int cu2_notifier_call_chain(unsigned long val, void *v);
50
Ralf Baechle4483b152010-08-05 13:25:59 +010051#define cu2_notifier(fn, pri) \
52({ \
David Daney4c7106c2010-09-23 11:23:29 -070053 static struct notifier_block fn##_nb = { \
Ralf Baechle4483b152010-08-05 13:25:59 +010054 .notifier_call = fn, \
55 .priority = pri \
56 }; \
57 \
58 register_cu2_notifier(&fn##_nb); \
59})
60
Ralf Baechle69f3a7d2009-11-24 01:24:58 +000061#endif /* __ASM_COP2_H */