blob: cc74e27d7f4b28e2efbefb04521171fc5e5898af [file] [log] [blame]
Tamas Ban3331d892022-01-10 17:04:03 +01001/*
2 * Copyright (c) 2022, Arm Limited. All rights reserved.
Yann Gautierf92793a2024-09-23 14:00:01 +02003 * Copyright (c) 2025, Arm Limited and Contributors. All rights reserved.
Tamas Ban3331d892022-01-10 17:04:03 +01004 *
5 * SPDX-License-Identifier: BSD-3-Clause
6 */
7
8#ifndef MHU_H
9#define MHU_H
10
11#include <stddef.h>
12#include <stdint.h>
13
14/**
15 * Generic MHU error enumeration types.
16 */
17enum mhu_error_t {
18 MHU_ERR_NONE = 0,
19 MHU_ERR_NOT_INIT = -1,
20 MHU_ERR_ALREADY_INIT = -2,
21 MHU_ERR_UNSUPPORTED_VERSION = -3,
22 MHU_ERR_UNSUPPORTED = -4,
23 MHU_ERR_INVALID_ARG = -5,
24 MHU_ERR_BUFFER_TOO_SMALL = -6,
25 MHU_ERR_GENERAL = -7,
26};
27
28/**
Yann Gautierf92793a2024-09-23 14:00:01 +020029 * Structure used by RSE comms
30 */
31struct mhu_addr {
32 uintptr_t sender_base;
33 uintptr_t receiver_base;
34};
35
36/**
Tamas Ban3331d892022-01-10 17:04:03 +010037 * Initializes sender MHU.
38 *
39 * mhu_sender_base Base address of sender MHU.
40 *
41 * Returns mhu_error_t error code.
42 *
43 * This function must be called before mhu_send_data().
44 */
45enum mhu_error_t mhu_init_sender(uintptr_t mhu_sender_base);
46
47
48/**
49 * Initializes receiver MHU.
50 *
51 * mhu_receiver_base Base address of receiver MHU.
52 *
53 * Returns mhu_error_t error code.
54 *
55 * This function must be called before mhu_receive_data().
56 */
57enum mhu_error_t mhu_init_receiver(uintptr_t mhu_receiver_base);
58
59/**
60 * Sends data over MHU.
61 *
62 * send_buffer Pointer to buffer containing the data to be transmitted.
63 * size Size of the data to be transmitted in bytes.
64 *
65 * Returns mhu_error_t error code.
66 *
67 * The send_buffer must be 4-byte aligned and its length must be at least
68 * (4 - (size % 4)) bytes bigger than the data size to prevent buffer
69 * over-reading.
70 */
71enum mhu_error_t mhu_send_data(const uint8_t *send_buffer, size_t size);
72
73/**
74 * Receives data from MHU.
75 *
76 * receive_buffer Pointer the buffer where to store the received data.
77 * size As input the size of the receive_buffer, as output the
78 * number of bytes received. As a limitation,
79 * the size of the buffer must be a multiple of 4.
80 *
81 * Returns mhu_error_t error code.
82 *
83 * The receive_buffer must be 4-byte aligned and its length must be a
84 * multiple of 4.
85 */
86enum mhu_error_t mhu_receive_data(uint8_t *receive_buffer, size_t *size);
87
Raef Coles734aaac2022-06-15 14:37:22 +010088/**
89 * Gets the maximum amount of bytes that can be transmitted in a single send by MHU.
90 *
91 * Returns The amount of bytes that can be sent or received in a single message.
92 */
93size_t mhu_get_max_message_size(void);
94
Tamas Ban3331d892022-01-10 17:04:03 +010095#endif /* MHU_H */