blob: 2d09f78732cf18674bb9a72f99da299c83c9aa48 [file] [log] [blame]
nabkah01002e5692022-10-10 12:36:46 +01001/*
2 * Copyright (c) 2022, Arm Limited. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#include <string.h>
Shruti Gupta550e3e82023-08-16 13:20:11 +01008#include <arch_helpers.h>
9#include <assert.h>
nabkah01002e5692022-10-10 12:36:46 +010010#include <host_shared_data.h>
11
12/**
13 * @brief - Returns the base address of the shared region
14 * @param - Void
15 * @return - Base address of the shared region
16 **/
17
18static host_shared_data_t *guest_shared_data;
19
20/*
21 * Set guest mapped shared buffer pointer
22 */
23void realm_set_shared_structure(host_shared_data_t *ptr)
24{
25 guest_shared_data = ptr;
26}
27
28/*
29 * Get guest mapped shared buffer pointer
30 */
Shruti Gupta550e3e82023-08-16 13:20:11 +010031host_shared_data_t *realm_get_my_shared_structure(void)
nabkah01002e5692022-10-10 12:36:46 +010032{
Shruti Gupta550e3e82023-08-16 13:20:11 +010033 return &guest_shared_data[read_mpidr_el1() & MPID_MASK];
nabkah01002e5692022-10-10 12:36:46 +010034}
35
36/*
37 * Return Host's data at index
38 */
Shruti Gupta550e3e82023-08-16 13:20:11 +010039u_register_t realm_shared_data_get_my_host_val(uint8_t index)
nabkah01002e5692022-10-10 12:36:46 +010040{
Shruti Gupta550e3e82023-08-16 13:20:11 +010041 assert(index < MAX_DATA_SIZE);
42 return guest_shared_data[read_mpidr_el1() & MPID_MASK].host_param_val[index];
nabkah01002e5692022-10-10 12:36:46 +010043}
44
45/*
Shruti Gupta550e3e82023-08-16 13:20:11 +010046 * Get command sent from Host to this rec
nabkah01002e5692022-10-10 12:36:46 +010047 */
Shruti Gupta550e3e82023-08-16 13:20:11 +010048uint8_t realm_shared_data_get_my_realm_cmd(void)
nabkah01002e5692022-10-10 12:36:46 +010049{
Shruti Gupta550e3e82023-08-16 13:20:11 +010050 return guest_shared_data[read_mpidr_el1() & MPID_MASK].realm_cmd;
nabkah01002e5692022-10-10 12:36:46 +010051}
Shruti Gupta550e3e82023-08-16 13:20:11 +010052
53/*
54 * Set data to be shared from this rec to Host
55 */
56void realm_shared_data_set_my_realm_val(uint8_t index, u_register_t val)
57{
58 assert(index < MAX_DATA_SIZE);
59 guest_shared_data[read_mpidr_el1() & MPID_MASK].realm_out_val[index] = val;
60}
61