diff options
author | Matias Elo <matias.elo@nokia.com> | 2023-06-28 13:43:04 +0300 |
---|---|---|
committer | Matias Elo <matias.elo@nokia.com> | 2023-08-08 09:54:40 +0300 |
commit | d7bc1c426dd6e545dffd134dd343460fa515d5d4 (patch) | |
tree | b122abc136940ebbe0499b040e1d1caab341e6c9 /platform/linux-dpdk | |
parent | 0fdb4448957a28ed8dc79c84125536aeb3b28d34 (diff) |
Port 1780ca316 "linux-gen: packet: implement free control functions"
Port original commit from linux-generic.
Signed-off-by: Matias Elo <matias.elo@nokia.com>
Reviewed-by: Tuomas Taipale <tuomas.taipale@nokia.com>
Diffstat (limited to 'platform/linux-dpdk')
-rw-r--r-- | platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h | 7 | ||||
-rw-r--r-- | platform/linux-dpdk/odp_packet.c | 20 |
2 files changed, 24 insertions, 3 deletions
diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h b/platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h index c6ede5d3a..5466ce58b 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h @@ -121,7 +121,7 @@ typedef union { uint32_t all_flags; struct { - uint32_t reserved1: 6; + uint32_t reserved1: 5; /* * Init flags @@ -140,6 +140,7 @@ typedef union { uint32_t l4_chksum: 1; /* L4 chksum override */ uint32_t ts_set: 1; /* Set Tx timestamp */ uint32_t tx_compl: 1; /* Tx completion event requested */ + uint32_t free_ctrl: 1; /* Don't free option */ uint32_t tx_aging: 1; /* Packet aging at Tx requested */ uint32_t shaper_len_adj: 8; /* Adjustment for traffic mgr */ @@ -157,8 +158,8 @@ typedef union { /* Flag groups */ struct { - uint32_t reserved2: 6; - uint32_t other: 19; /* All other flags */ + uint32_t reserved2: 5; + uint32_t other: 20; /* All other flags */ uint32_t error: 7; /* All error flags */ } all; diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index d802a4303..0a0b414fb 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -1809,6 +1809,26 @@ int odp_packet_tx_compl_done(odp_pktio_t pktio, uint32_t compl_id) return -1; } +void odp_packet_free_ctrl_set(odp_packet_t pkt, odp_packet_free_ctrl_t ctrl) +{ + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); + + if (ctrl == ODP_PACKET_FREE_CTRL_DONT_FREE) + pkt_hdr->p.flags.free_ctrl = 1; + else + pkt_hdr->p.flags.free_ctrl = 0; +} + +odp_packet_free_ctrl_t odp_packet_free_ctrl(odp_packet_t pkt) +{ + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); + + if (pkt_hdr->p.flags.free_ctrl) + return ODP_PACKET_FREE_CTRL_DONT_FREE; + + return ODP_PACKET_FREE_CTRL_DISABLED; +} + odp_packet_reass_status_t odp_packet_reass_status(odp_packet_t pkt) { (void)pkt; |