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