blob: 7745bd9d89d6541d593504b9cb11589b5b7a546b [file] [log] [blame]
Tamas Ban3331d892022-01-10 17:04:03 +01001/*
2 * Copyright (c) 2022, Arm Limited. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#ifndef MHU_H
8#define MHU_H
9
10#include <stddef.h>
11#include <stdint.h>
12
13/**
14 * Generic MHU error enumeration types.
15 */
16enum mhu_error_t {
17 MHU_ERR_NONE = 0,
18 MHU_ERR_NOT_INIT = -1,
19 MHU_ERR_ALREADY_INIT = -2,
20 MHU_ERR_UNSUPPORTED_VERSION = -3,
21 MHU_ERR_UNSUPPORTED = -4,
22 MHU_ERR_INVALID_ARG = -5,
23 MHU_ERR_BUFFER_TOO_SMALL = -6,
24 MHU_ERR_GENERAL = -7,
25};
26
27/**
28 * Initializes sender MHU.
29 *
30 * mhu_sender_base Base address of sender MHU.
31 *
32 * Returns mhu_error_t error code.
33 *
34 * This function must be called before mhu_send_data().
35 */
36enum mhu_error_t mhu_init_sender(uintptr_t mhu_sender_base);
37
38
39/**
40 * Initializes receiver MHU.
41 *
42 * mhu_receiver_base Base address of receiver MHU.
43 *
44 * Returns mhu_error_t error code.
45 *
46 * This function must be called before mhu_receive_data().
47 */
48enum mhu_error_t mhu_init_receiver(uintptr_t mhu_receiver_base);
49
50/**
51 * Sends data over MHU.
52 *
53 * send_buffer Pointer to buffer containing the data to be transmitted.
54 * size Size of the data to be transmitted in bytes.
55 *
56 * Returns mhu_error_t error code.
57 *
58 * The send_buffer must be 4-byte aligned and its length must be at least
59 * (4 - (size % 4)) bytes bigger than the data size to prevent buffer
60 * over-reading.
61 */
62enum mhu_error_t mhu_send_data(const uint8_t *send_buffer, size_t size);
63
64/**
65 * Receives data from MHU.
66 *
67 * receive_buffer Pointer the buffer where to store the received data.
68 * size As input the size of the receive_buffer, as output the
69 * number of bytes received. As a limitation,
70 * the size of the buffer must be a multiple of 4.
71 *
72 * Returns mhu_error_t error code.
73 *
74 * The receive_buffer must be 4-byte aligned and its length must be a
75 * multiple of 4.
76 */
77enum mhu_error_t mhu_receive_data(uint8_t *receive_buffer, size_t *size);
78
79#endif /* MHU_H */