1/* 2 * Copyright 2020, Data61, CSIRO (ABN 41 687 119 230) 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7 8#include <sel4vm/guest_vm.h> 9 10#include "smc.h" 11 12seL4_Word smc_get_function_id(seL4_UserContext *u) 13{ 14 return u->x0; 15} 16 17seL4_Word smc_set_return_value(seL4_UserContext *u, seL4_Word val) 18{ 19 u->x0 = val; 20} 21 22seL4_Word smc_get_arg(seL4_UserContext *u, seL4_Word arg) 23{ 24 switch (arg) { 25 case 1: 26 return u->x1; 27 case 2: 28 return u->x2; 29 case 3: 30 return u->x3; 31 case 4: 32 return u->x4; 33 case 5: 34 return u->x5; 35 case 6: 36 return u->x6; 37 default: 38 ZF_LOGF("SMC only has 6 argument registers"); 39 } 40} 41 42void smc_set_arg(seL4_UserContext *u, seL4_Word arg, seL4_Word val) 43{ 44 switch (arg) { 45 case 1: 46 u->x1 = val; 47 break; 48 case 2: 49 u->x2 = val; 50 break; 51 case 3: 52 u->x3 = val; 53 break; 54 case 4: 55 u->x4 = val; 56 break; 57 case 5: 58 u->x5 = val; 59 break; 60 case 6: 61 u->x6 = val; 62 break; 63 default: 64 ZF_LOGF("SMC only has 6 argument registers"); 65 } 66} 67