1// vi:set ft=cpp: -*- Mode: C++ -*- 2/* 3 * Copyright (C) 2018 Kernkonzept GmbH. 4 * Author(s): Sarah Hoffmann <sarah.hoffmann@kernkonzept.com> 5 * 6 * This file is distributed under the terms of the GNU General Public 7 * License, version 2. Please see the COPYING-GPL-2 file for details. 8 */ 9#pragma once 10 11#include <l4/sys/capability> 12#include <l4/sys/cxx/ipc_iface> 13 14namespace L4 { 15 16/** 17 * Wrapper for function calls that follow the ARM SMC/HVC 18 * calling convention. 19 */ 20class L4_EXPORT Arm_smccc : public Kobject_0t<Arm_smccc, L4_PROTO_SMCCC> 21{ 22public: 23 /** 24 * ARM SMC/HVC function call. 25 * 26 * The input parameters consist of a function identifier, 6 arguments 27 * and a client id. Results are returned in 4 output parameters. 28 */ 29 L4_INLINE_RPC(l4_msgtag_t, call, 30 (l4_umword_t func, l4_umword_t in0, l4_umword_t in1, 31 l4_umword_t in2, l4_umword_t in3, l4_umword_t in4, 32 l4_umword_t in5, l4_umword_t *out0, l4_umword_t *out1, 33 l4_umword_t *out2, l4_umword_t *out3, 34 l4_umword_t client_id)); 35 36 typedef L4::Typeid::Rpc_nocode<call_t> Rpcs; 37}; 38 39} 40