1 /*
2 * Copyright (c) 2026, Arm Limited. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 *
6 */
7
8 #ifndef __SFCP_HELPERS_H__
9 #define __SFCP_HELPERS_H__
10
11 #include <assert.h>
12
13 #include <drivers/arm/sfcp.h>
14 #include <drivers/arm/sfcp_link_defs.h>
15 #include "sfcp_defs.h"
16 #include "sfcp_link_hal.h"
17 #include "sfcp_protocol_error.h"
18
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22
23 enum sfcp_error_t
24 sfcp_helpers_parse_packet(struct sfcp_packet_t *packet, size_t packet_size,
25 sfcp_node_id_t *sender, sfcp_node_id_t *receiver,
26 uint8_t *message_id, bool *uses_cryptography,
27 bool *uses_id_extension, uint16_t *application_id,
28 uint16_t *client_id, uint8_t **payload,
29 size_t *payload_len, bool *needs_reply,
30 enum sfcp_packet_type_t *packet_type);
31
32 bool sfcp_helpers_packet_requires_forwarding_get_destination(
33 sfcp_node_id_t sender, sfcp_node_id_t receiver,
34 enum sfcp_packet_type_t packet_type, sfcp_node_id_t my_node_id,
35 sfcp_node_id_t *destination);
36
37 void sfcp_helpers_generate_protocol_error_packet(
38 struct sfcp_packet_t *packet, sfcp_node_id_t sender_id,
39 sfcp_node_id_t receiver_id, sfcp_link_id_t link_id, uint16_t client_id,
40 uint8_t message_id, enum sfcp_protocol_error_t error);
41
42 enum sfcp_error_t sfcp_helpers_drop_receive_message(sfcp_link_id_t link_id,
43 size_t message_size,
44 size_t already_received);
45
46 static inline enum sfcp_error_t
sfcp_hal_error_to_sfcp_error(enum sfcp_hal_error_t hal_error)47 sfcp_hal_error_to_sfcp_error(enum sfcp_hal_error_t hal_error)
48 {
49 if (hal_error == SFCP_HAL_ERROR_SUCCESS) {
50 return SFCP_ERROR_SUCCESS;
51 } else if (hal_error >= SFCP_HAL_ERROR_MAX) {
52 /* Could have error directly from HAL driver */
53 return (enum sfcp_error_t)hal_error;
54 } else {
55 return SFCP_ERROR_HAL_ERROR_BASE + hal_error;
56 }
57 }
58
59 #ifdef __cplusplus
60 }
61 #endif
62
63 #endif /* __SFCP_HELPERS_H__ */
64