Line data Source code
1 0 : /* 2 : * Copyright (c) 2021 Nordic Semiconductor ASA 3 : * 4 : * SPDX-License-Identifier: Apache-2.0 5 : */ 6 : #ifndef ZEPHYR_INCLUDE_SYS_MPSC_PACKET_H_ 7 : #define ZEPHYR_INCLUDE_SYS_MPSC_PACKET_H_ 8 : 9 : #include <string.h> 10 : #include <stdint.h> 11 : #include <stdbool.h> 12 : 13 : #ifdef __cplusplus 14 : extern "C" { 15 : #endif 16 : 17 : /** 18 : * @brief Multi producer, single consumer packet header 19 : * @defgroup mpsc_packet MPSC (Multi producer, single consumer) packet header 20 : * @ingroup mpsc_buf 21 : * @{ 22 : */ 23 : 24 : /** @brief Number of bits in the first word which are used by the buffer. */ 25 1 : #define MPSC_PBUF_HDR_BITS 2 26 : 27 : /** @brief Header that must be added to the first word in each packet. 28 : * 29 : * This fields are controlled by the packet buffer and unless specified must 30 : * not be used. Fields must be added at the top of the packet header structure. 31 : */ 32 1 : #define MPSC_PBUF_HDR \ 33 : uint32_t valid: 1; \ 34 : uint32_t busy: 1 35 : 36 : /** @brief Generic packet header. */ 37 1 : struct mpsc_pbuf_hdr { 38 0 : MPSC_PBUF_HDR; 39 0 : uint32_t data: 32 - MPSC_PBUF_HDR_BITS; 40 : }; 41 : 42 : /** @brief Skip packet used internally by the packet buffer. */ 43 1 : struct mpsc_pbuf_skip { 44 0 : MPSC_PBUF_HDR; 45 0 : uint32_t len: 32 - MPSC_PBUF_HDR_BITS; 46 : }; 47 : 48 : /** @brief Generic packet header. */ 49 1 : union mpsc_pbuf_generic { 50 0 : struct mpsc_pbuf_hdr hdr; 51 0 : struct mpsc_pbuf_skip skip; 52 0 : uint32_t raw; 53 : }; 54 : 55 : /** 56 : * @} 57 : */ 58 : 59 : #ifdef __cplusplus 60 : } 61 : #endif 62 : 63 : #endif /* ZEPHYR_INCLUDE_SYS_MPSC_PACKET_H_ */