blob: 2a5a83c90392806a0679b0892af62801ca05c7f2 [file] [log] [blame]
Daniel Schultz03e619d2024-05-21 23:18:25 -07001/* SPDX-License-Identifier: GPL-2.0-or-later */
2/*
3 * Copyright (C) 2024 PHYTEC Messtechnik GmbH
4 * Author: Daniel Schultz <d.schultz@phytec.de>
5 */
6
7#ifndef _PHYTEC_SOM_DETECTION_BLOCKS_H
8#define _PHYTEC_SOM_DETECTION_BLOCKS_H
9
10#define PHYTEC_API3_DATA_HEADER_LEN 8
11#define PHYTEC_API3_BLOCK_HEADER_LEN 4
12#define PHYTEC_API3_PAYLOAD_START \
13 (PHYTEC_API2_DATA_LEN + PHYTEC_API3_DATA_HEADER_LEN)
14
15#define PHYTEC_API3_ELEMENT_HEADER_SIZE \
16 (sizeof(struct phytec_api3_element *) + \
17 sizeof(enum phytec_api3_block_types))
18
19#define PHYTEC_API3_FOREACH_BLOCK(elem, data) \
20 for (elem = phytec_get_block_head(data); elem; elem = elem->next)
21
22struct phytec_api3_header {
23 u16 data_length; /* Total length in Bytes of all blocks */
24 u8 block_count; /* Number of blocks */
25 u8 sub_version; /* Block specification version */
26 u8 reserved[3]; /* Reserved */
27 u8 crc8; /* checksum */
28} __packed;
29
30struct phytec_api3_block_header {
31 u8 block_type; /* Block payload identifier */
32 u16 next_block; /* Address of the next block */
33 u8 crc8; /* checksum */
34} __packed;
35
36enum phytec_api3_block_types {
37 PHYTEC_API3_BLOCK_MAC = 0,
38};
39
40struct phytec_api3_block_mac {
41 u8 interface; /* Ethernet interface number */
42 u8 address[6]; /* MAC-Address */
43 u8 crc8; /* checksum */
44} __packed;
45
46struct phytec_api3_element {
47 struct phytec_api3_element *next;
48 enum phytec_api3_block_types block_type;
49 union {
50 struct phytec_api3_block_mac mac;
51 } block;
52} __packed;
53
54struct phytec_api3_element *
55 phytec_blocks_init_mac(struct phytec_api3_block_header *header,
56 uint8_t *payload);
57
58int __maybe_unused
59phytec_blocks_add_mac_to_env(struct phytec_api3_element *element);
60
61#endif /* _PHYTEC_SOM_DETECTION_BLOCKS_H */