blob: 8f6beb446184509cb7130541bf8d6781abe82499 [file] [log] [blame]
Manish Pandey29495372020-04-09 15:19:26 +01001/*
2 * Copyright (c) 2020, Arm Limited. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
J-Alves7581c382020-05-07 18:34:20 +01007#ifndef __FFA_HELPERS_H__
8#define __FFA_HELPERS_H__
Manish Pandey29495372020-04-09 15:19:26 +01009
10
J-Alves7581c382020-05-07 18:34:20 +010011#include <ffa_svc.h>
Manish Pandey29495372020-04-09 15:19:26 +010012#include "tftf_lib.h"
13
14#define SPM_VM_ID_FIRST (1)
15
16#define SPM_VM_GET_COUNT (0xFF01)
17#define SPM_VCPU_GET_COUNT (0xFF02)
18#define SPM_DEBUG_LOG (0xBD000000)
19
J-Alves7581c382020-05-07 18:34:20 +010020/* Hypervisor ID at physical FFA instance */
Manish Pandey29495372020-04-09 15:19:26 +010021#define HYP_ID (0)
22
23/* By convention, SP IDs (as opposed to VM IDs) have bit 15 set */
24#define SP_ID(x) ((x) | (1 << 15))
25
J-Alves7581c382020-05-07 18:34:20 +010026typedef unsigned short ffa_vm_id_t;
27typedef unsigned short ffa_vm_count_t;
28typedef unsigned short ffa_vcpu_count_t;
Manish Pandey29495372020-04-09 15:19:26 +010029
30/* Functions */
31
J-Alves7581c382020-05-07 18:34:20 +010032static inline ffa_vcpu_count_t spm_vcpu_get_count(ffa_vm_id_t vm_id)
Manish Pandey29495372020-04-09 15:19:26 +010033{
34 hvc_args args = {
35 .fid = SPM_VCPU_GET_COUNT,
36 .arg1 = vm_id
37 };
38
39 hvc_ret_values ret = tftf_hvc(&args);
40
41 return ret.ret0;
42}
43
J-Alves7581c382020-05-07 18:34:20 +010044static inline ffa_vm_count_t spm_vm_get_count(void)
Manish Pandey29495372020-04-09 15:19:26 +010045{
46 hvc_args args = {
47 .fid = SPM_VM_GET_COUNT
48 };
49
50 hvc_ret_values ret = tftf_hvc(&args);
51
52 return ret.ret0;
53}
54
55static inline void spm_debug_log(char c)
56{
57 hvc_args args = {
58 .fid = SPM_DEBUG_LOG,
59 .arg1 = c
60 };
61
62 (void)tftf_hvc(&args);
63}
64
J-Alves7581c382020-05-07 18:34:20 +010065static inline smc_ret_values ffa_id_get(void)
Manish Pandey29495372020-04-09 15:19:26 +010066{
67 smc_args args = {
J-Alves7581c382020-05-07 18:34:20 +010068 .fid = FFA_ID_GET
Manish Pandey29495372020-04-09 15:19:26 +010069 };
70
71 return tftf_smc(&args);
72}
73
J-Alves7581c382020-05-07 18:34:20 +010074static inline smc_ret_values ffa_msg_wait(void)
Manish Pandey29495372020-04-09 15:19:26 +010075{
76 smc_args args = {
J-Alves7581c382020-05-07 18:34:20 +010077 .fid = FFA_MSG_WAIT
Manish Pandey29495372020-04-09 15:19:26 +010078 };
79
80 return tftf_smc(&args);
81}
82
83/* Send response through registers using direct messaging */
J-Alves7581c382020-05-07 18:34:20 +010084static inline smc_ret_values ffa_msg_send_direct_resp(ffa_vm_id_t sender_vm_id,
85 ffa_vm_id_t target_vm_id,
Manish Pandey29495372020-04-09 15:19:26 +010086 uint32_t message)
87{
88 smc_args args = {
J-Alves7581c382020-05-07 18:34:20 +010089 .fid = FFA_MSG_SEND_DIRECT_RESP_SMC32,
Manish Pandey29495372020-04-09 15:19:26 +010090 .arg1 = ((uint32_t)sender_vm_id << 16) | target_vm_id,
91 .arg3 = message
92 };
93
94 return tftf_smc(&args);
95}
96
J-Alves7581c382020-05-07 18:34:20 +010097static inline smc_ret_values ffa_error(int32_t error_code)
Manish Pandey29495372020-04-09 15:19:26 +010098{
99 smc_args args = {
J-Alves7581c382020-05-07 18:34:20 +0100100 .fid = FFA_ERROR,
Manish Pandey29495372020-04-09 15:19:26 +0100101 .arg1 = 0,
102 .arg2 = error_code
103 };
104
105 return tftf_smc(&args);
106}
107
J-Alves7581c382020-05-07 18:34:20 +0100108#endif /* __FFA_HELPERS_H__ */