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