blob: df566ec56b027fdea31951e25be5aeb75b0284c5 [file] [log] [blame]
Marc Moreno Berengue8e0fa7a2018-10-04 18:25:13 +01001/*
Raef Coles249aba92022-06-16 10:20:29 +01002 * Copyright (c) 2018-2022, Arm Limited. All rights reserved.
Marc Moreno Berengue8e0fa7a2018-10-04 18:25:13 +01003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 *
6 */
7
Tamas Kaman262dc7b2019-03-20 13:37:12 +01008#include <stdbool.h>
Marc Moreno Berengue8e0fa7a2018-10-04 18:25:13 +01009#include "tfm_platform_api.h"
Antonio de Angelis05b24192019-07-04 15:28:46 +010010#include "tfm_ns_interface.h"
Tamas Kaman262dc7b2019-03-20 13:37:12 +010011#include "tfm_veneers.h"
Marc Moreno Berengue8e0fa7a2018-10-04 18:25:13 +010012
13enum tfm_platform_err_t tfm_platform_system_reset(void)
14{
Antonio de Angelis05b24192019-07-04 15:28:46 +010015 return (enum tfm_platform_err_t) tfm_ns_interface_dispatch(
Miklos Balintc7b1b6c2019-04-24 12:38:36 +020016 (veneer_fn)tfm_platform_sp_system_reset_veneer,
Marc Moreno Berengue8e0fa7a2018-10-04 18:25:13 +010017 0,
18 0,
19 0,
20 0);
21}
Tamas Kaman262dc7b2019-03-20 13:37:12 +010022
23enum tfm_platform_err_t
Miklos Balintc7b1b6c2019-04-24 12:38:36 +020024tfm_platform_ioctl(tfm_platform_ioctl_req_t request,
25 psa_invec *input, psa_outvec *output)
Tamas Kaman262dc7b2019-03-20 13:37:12 +010026{
Miklos Balintc7b1b6c2019-04-24 12:38:36 +020027 tfm_platform_ioctl_req_t req = request;
28 struct psa_invec in_vec[2];
29 size_t inlen, outlen;
Tamas Kaman262dc7b2019-03-20 13:37:12 +010030
Miklos Balintc7b1b6c2019-04-24 12:38:36 +020031 in_vec[0].base = &req;
32 in_vec[0].len = sizeof(req);
33 if (input != NULL) {
34 in_vec[1].base = input->base;
35 in_vec[1].len = input->len;
36 inlen = 2;
37 } else {
38 inlen = 1;
Tamas Kaman262dc7b2019-03-20 13:37:12 +010039 }
40
Miklos Balintc7b1b6c2019-04-24 12:38:36 +020041 if (output != NULL) {
42 outlen = 1;
43 } else {
44 outlen = 0;
Tamas Kaman262dc7b2019-03-20 13:37:12 +010045 }
46
Antonio de Angelis05b24192019-07-04 15:28:46 +010047 return (enum tfm_platform_err_t) tfm_ns_interface_dispatch(
Miklos Balintc7b1b6c2019-04-24 12:38:36 +020048 (veneer_fn)tfm_platform_sp_ioctl_veneer,
49 (uint32_t)in_vec, (uint32_t)inlen,
50 (uint32_t)output, (uint32_t)outlen);
Tamas Kaman262dc7b2019-03-20 13:37:12 +010051}
52
Raef Coles249aba92022-06-16 10:20:29 +010053enum tfm_platform_err_t
54tfm_platform_nv_counter_increment(uint32_t counter_id)
55{
56 struct psa_invec in_vec[1];
57
58 in_vec[0].base = &counter_id;
59 in_vec[0].len = sizeof(counter_id);
60
61 return (enum tfm_platform_err_t) tfm_ns_interface_dispatch(
62 (veneer_fn)tfm_platform_sp_nv_counter_increment_veneer,
63 (uint32_t)in_vec, 1,
64 (uint32_t)NULL, 0);
65}
66
67enum tfm_platform_err_t
68tfm_platform_nv_counter_read(uint32_t counter_id,
69 uint32_t size, uint8_t *val)
70{
71 struct psa_invec in_vec[1];
72 struct psa_outvec out_vec[1];
73
74 in_vec[0].base = &counter_id;
75 in_vec[0].len = sizeof(counter_id);
76
77 out_vec[0].base = val;
78 out_vec[0].len = size;
79
80 return (enum tfm_platform_err_t) tfm_ns_interface_dispatch(
81 (veneer_fn)tfm_platform_sp_nv_counter_read_veneer,
82 (uint32_t)in_vec, 1,
83 (uint32_t)out_vec, 1);
84}