xref: /rk3399_ARM-atf/drivers/arm/sfcp/sfcp_core/sfcp_helpers.h (revision 2801427972c4b0d4c0165edb509f21186103f21f)
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