xref: /linux/arch/hexagon/kernel/vm_ops.S (revision e1858b2a21cd84a855945a4747fb2db41b250c22)
1e49ee290SRichard Kuo/*
2e49ee290SRichard Kuo * Hexagon VM instruction support
3e49ee290SRichard Kuo *
4*e1858b2aSRichard Kuo * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
5e49ee290SRichard Kuo *
6e49ee290SRichard Kuo * This program is free software; you can redistribute it and/or modify
7e49ee290SRichard Kuo * it under the terms of the GNU General Public License version 2 and
8e49ee290SRichard Kuo * only version 2 as published by the Free Software Foundation.
9e49ee290SRichard Kuo *
10e49ee290SRichard Kuo * This program is distributed in the hope that it will be useful,
11e49ee290SRichard Kuo * but WITHOUT ANY WARRANTY; without even the implied warranty of
12e49ee290SRichard Kuo * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13e49ee290SRichard Kuo * GNU General Public License for more details.
14e49ee290SRichard Kuo *
15e49ee290SRichard Kuo * You should have received a copy of the GNU General Public License
16e49ee290SRichard Kuo * along with this program; if not, write to the Free Software
17e49ee290SRichard Kuo * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18e49ee290SRichard Kuo * 02110-1301, USA.
19e49ee290SRichard Kuo */
20e49ee290SRichard Kuo
21e49ee290SRichard Kuo#include <linux/linkage.h>
22e49ee290SRichard Kuo#include <asm/hexagon_vm.h>
23e49ee290SRichard Kuo
24e49ee290SRichard Kuo/*
25e49ee290SRichard Kuo * C wrappers for virtual machine "instructions".  These
26e49ee290SRichard Kuo * could be, and perhaps some day will be, handled as in-line
27e49ee290SRichard Kuo * macros, but for tracing/debugging it's handy to have
28e49ee290SRichard Kuo * a single point of invocation for each of them.
29e49ee290SRichard Kuo * Conveniently, they take paramters and return values
30e49ee290SRichard Kuo * consistent with the ABI calling convention.
31e49ee290SRichard Kuo */
32e49ee290SRichard Kuo
33e49ee290SRichard KuoENTRY(__vmrte)
34e49ee290SRichard Kuo	trap1(#HVM_TRAP1_VMRTE);
35e49ee290SRichard Kuo	jumpr	R31;
36e49ee290SRichard Kuo
37e49ee290SRichard KuoENTRY(__vmsetvec)
38e49ee290SRichard Kuo	trap1(#HVM_TRAP1_VMSETVEC);
39e49ee290SRichard Kuo	jumpr	R31;
40e49ee290SRichard Kuo
41e49ee290SRichard KuoENTRY(__vmsetie)
42e49ee290SRichard Kuo	trap1(#HVM_TRAP1_VMSETIE);
43e49ee290SRichard Kuo	jumpr	R31;
44e49ee290SRichard Kuo
45e49ee290SRichard KuoENTRY(__vmgetie)
46e49ee290SRichard Kuo	trap1(#HVM_TRAP1_VMGETIE);
47e49ee290SRichard Kuo	jumpr	R31;
48e49ee290SRichard Kuo
49e49ee290SRichard KuoENTRY(__vmintop)
50e49ee290SRichard Kuo	trap1(#HVM_TRAP1_VMINTOP);
51e49ee290SRichard Kuo	jumpr	R31;
52e49ee290SRichard Kuo
53e49ee290SRichard KuoENTRY(__vmclrmap)
54e49ee290SRichard Kuo	trap1(#HVM_TRAP1_VMCLRMAP);
55e49ee290SRichard Kuo	jumpr	R31;
56e49ee290SRichard Kuo
57e49ee290SRichard KuoENTRY(__vmnewmap)
58e49ee290SRichard Kuo	r1 = #VM_NEWMAP_TYPE_PGTABLES;
59e49ee290SRichard Kuo	trap1(#HVM_TRAP1_VMNEWMAP);
60e49ee290SRichard Kuo	jumpr	R31;
61e49ee290SRichard Kuo
62e49ee290SRichard KuoENTRY(__vmcache)
63e49ee290SRichard Kuo	trap1(#HVM_TRAP1_VMCACHE);
64e49ee290SRichard Kuo	jumpr	R31;
65e49ee290SRichard Kuo
66e49ee290SRichard KuoENTRY(__vmgettime)
67e49ee290SRichard Kuo	trap1(#HVM_TRAP1_VMGETTIME);
68e49ee290SRichard Kuo	jumpr	R31;
69e49ee290SRichard Kuo
70e49ee290SRichard KuoENTRY(__vmsettime)
71e49ee290SRichard Kuo	trap1(#HVM_TRAP1_VMSETTIME);
72e49ee290SRichard Kuo	jumpr	R31;
73e49ee290SRichard Kuo
74e49ee290SRichard KuoENTRY(__vmwait)
75e49ee290SRichard Kuo	trap1(#HVM_TRAP1_VMWAIT);
76e49ee290SRichard Kuo	jumpr	R31;
77e49ee290SRichard Kuo
78e49ee290SRichard KuoENTRY(__vmyield)
79e49ee290SRichard Kuo	trap1(#HVM_TRAP1_VMYIELD);
80e49ee290SRichard Kuo	jumpr	R31;
81e49ee290SRichard Kuo
82e49ee290SRichard KuoENTRY(__vmstart)
83e49ee290SRichard Kuo	trap1(#HVM_TRAP1_VMSTART);
84e49ee290SRichard Kuo	jumpr	R31;
85e49ee290SRichard Kuo
86e49ee290SRichard KuoENTRY(__vmstop)
87e49ee290SRichard Kuo	trap1(#HVM_TRAP1_VMSTOP);
88e49ee290SRichard Kuo	jumpr	R31;
89e49ee290SRichard Kuo
90e49ee290SRichard KuoENTRY(__vmvpid)
91e49ee290SRichard Kuo	trap1(#HVM_TRAP1_VMVPID);
92e49ee290SRichard Kuo	jumpr	R31;
93e49ee290SRichard Kuo
94e49ee290SRichard Kuo/*  Probably not actually going to use these; see vm_entry.S  */
95e49ee290SRichard Kuo
96e49ee290SRichard KuoENTRY(__vmsetregs)
97e49ee290SRichard Kuo	trap1(#HVM_TRAP1_VMSETREGS);
98e49ee290SRichard Kuo	jumpr	R31;
99e49ee290SRichard Kuo
100e49ee290SRichard KuoENTRY(__vmgetregs)
101e49ee290SRichard Kuo	trap1(#HVM_TRAP1_VMGETREGS);
102e49ee290SRichard Kuo	jumpr	R31;
103