Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause 2 : : * Copyright(C) 2023 Marvell. 3 : : */ 4 : : 5 : : #ifndef PDCP_REORDER_H 6 : : #define PDCP_REORDER_H 7 : : 8 : : #include <rte_reorder.h> 9 : : 10 : : struct pdcp_reorder { 11 : : struct rte_reorder_buffer *buf; 12 : : bool is_active; 13 : : }; 14 : : 15 : : int pdcp_reorder_create(struct pdcp_reorder *reorder, size_t nb_elem, void *mem, size_t mem_size); 16 : : 17 : : /* NOTE: replace with `rte_reorder_memory_footprint_get` after DPDK 23.07 */ 18 : : #define SIZE_OF_REORDER_BUFFER (4 * RTE_CACHE_LINE_SIZE) 19 : : static inline size_t 20 : : pdcp_reorder_memory_footprint_get(size_t nb_elem) 21 : : { 22 : 0 : return SIZE_OF_REORDER_BUFFER + (2 * nb_elem * sizeof(struct rte_mbuf *)); 23 : : } 24 : : 25 : : static inline uint32_t 26 : : pdcp_reorder_get_sequential(struct pdcp_reorder *reorder, struct rte_mbuf **mbufs, 27 : : uint32_t max_mbufs) 28 : : { 29 : 0 : return rte_reorder_drain(reorder->buf, mbufs, max_mbufs); 30 : : } 31 : : 32 : : static inline uint32_t 33 : : pdcp_reorder_up_to_get(struct pdcp_reorder *reorder, struct rte_mbuf **mbufs, 34 : : uint32_t max_mbufs, uint32_t seqn) 35 : : { 36 : 0 : return rte_reorder_drain_up_to_seqn(reorder->buf, mbufs, max_mbufs, seqn); 37 : : } 38 : : 39 : : static inline void 40 : 0 : pdcp_reorder_start(struct pdcp_reorder *reorder, uint32_t min_seqn) 41 : : { 42 : : int ret; 43 : : 44 : 0 : reorder->is_active = true; 45 : : 46 : 0 : ret = rte_reorder_min_seqn_set(reorder->buf, min_seqn); 47 [ # # ]: 0 : RTE_VERIFY(ret == 0); 48 : 0 : } 49 : : 50 : : static inline void 51 : : pdcp_reorder_stop(struct pdcp_reorder *reorder) 52 : : { 53 : 0 : reorder->is_active = false; 54 : 0 : } 55 : : 56 : : static inline void 57 : 0 : pdcp_reorder_insert(struct pdcp_reorder *reorder, struct rte_mbuf *mbuf, 58 : : rte_reorder_seqn_t pkt_count) 59 : : { 60 : : int ret; 61 : : 62 : 0 : *rte_reorder_seqn(mbuf) = pkt_count; 63 : : 64 : 0 : ret = rte_reorder_insert(reorder->buf, mbuf); 65 [ # # ]: 0 : RTE_VERIFY(ret == 0); 66 : 0 : } 67 : : 68 : : #endif /* PDCP_REORDER_H */