| /* SPDX-License-Identifier: GPL-2.0-or-later */ |
| /* |
| * Copyright (C) 2024 PHYTEC Messtechnik GmbH |
| * Author: Daniel Schultz <d.schultz@phytec.de> |
| */ |
| |
| #ifndef _PHYTEC_SOM_DETECTION_BLOCKS_H |
| #define _PHYTEC_SOM_DETECTION_BLOCKS_H |
| |
| #define PHYTEC_API3_DATA_HEADER_LEN 8 |
| #define PHYTEC_API3_BLOCK_HEADER_LEN 4 |
| #define PHYTEC_API3_PAYLOAD_START \ |
| (PHYTEC_API2_DATA_LEN + PHYTEC_API3_DATA_HEADER_LEN) |
| |
| #define PHYTEC_API3_ELEMENT_HEADER_SIZE \ |
| (sizeof(struct phytec_api3_element *) + \ |
| sizeof(enum phytec_api3_block_types)) |
| |
| #define PHYTEC_API3_FOREACH_BLOCK(elem, data) \ |
| for (elem = phytec_get_block_head(data); elem; elem = elem->next) |
| |
| struct phytec_api3_header { |
| u16 data_length; /* Total length in Bytes of all blocks */ |
| u8 block_count; /* Number of blocks */ |
| u8 sub_version; /* Block specification version */ |
| u8 reserved[3]; /* Reserved */ |
| u8 crc8; /* checksum */ |
| } __packed; |
| |
| struct phytec_api3_block_header { |
| u8 block_type; /* Block payload identifier */ |
| u16 next_block; /* Address of the next block */ |
| u8 crc8; /* checksum */ |
| } __packed; |
| |
| enum phytec_api3_block_types { |
| PHYTEC_API3_BLOCK_MAC = 0, |
| }; |
| |
| struct phytec_api3_block_mac { |
| u8 interface; /* Ethernet interface number */ |
| u8 address[6]; /* MAC-Address */ |
| u8 crc8; /* checksum */ |
| } __packed; |
| |
| struct phytec_api3_element { |
| struct phytec_api3_element *next; |
| enum phytec_api3_block_types block_type; |
| union { |
| struct phytec_api3_block_mac mac; |
| } block; |
| } __packed; |
| |
| struct phytec_api3_element * |
| phytec_blocks_init_mac(struct phytec_api3_block_header *header, |
| uint8_t *payload); |
| |
| int __maybe_unused |
| phytec_blocks_add_mac_to_env(struct phytec_api3_element *element); |
| |
| #endif /* _PHYTEC_SOM_DETECTION_BLOCKS_H */ |