1aaf4363eSJerin Jacob /* SPDX-License-Identifier: BSD-3-Clause 2aaf4363eSJerin Jacob * Copyright(c) 2017 Cavium, Inc 39e747589SJerin Jacob */ 49e747589SJerin Jacob 59e747589SJerin Jacob #ifndef __OCTEONTX_RXTX_H__ 69e747589SJerin Jacob #define __OCTEONTX_RXTX_H__ 79e747589SJerin Jacob 8ffc905f3SFerruh Yigit #include <rte_ethdev_driver.h> 99e747589SJerin Jacob 109e747589SJerin Jacob #ifndef __hot 119e747589SJerin Jacob #define __hot __attribute__((hot)) 129e747589SJerin Jacob #endif 139e747589SJerin Jacob 14d0d65498SPavan Nikhilesh /* Packet type table */ 15d0d65498SPavan Nikhilesh #define PTYPE_SIZE OCCTX_PKI_LTYPE_LAST 16d0d65498SPavan Nikhilesh 17d0d65498SPavan Nikhilesh static const uint32_t __rte_cache_aligned 18d0d65498SPavan Nikhilesh ptype_table[PTYPE_SIZE][PTYPE_SIZE][PTYPE_SIZE] = { 19d0d65498SPavan Nikhilesh [LC_NONE][LE_NONE][LF_NONE] = RTE_PTYPE_UNKNOWN, 20d0d65498SPavan Nikhilesh [LC_NONE][LE_NONE][LF_IPSEC_ESP] = RTE_PTYPE_UNKNOWN, 21d0d65498SPavan Nikhilesh [LC_NONE][LE_NONE][LF_IPFRAG] = RTE_PTYPE_L4_FRAG, 22d0d65498SPavan Nikhilesh [LC_NONE][LE_NONE][LF_IPCOMP] = RTE_PTYPE_UNKNOWN, 23d0d65498SPavan Nikhilesh [LC_NONE][LE_NONE][LF_TCP] = RTE_PTYPE_L4_TCP, 24d0d65498SPavan Nikhilesh [LC_NONE][LE_NONE][LF_UDP] = RTE_PTYPE_L4_UDP, 25d0d65498SPavan Nikhilesh [LC_NONE][LE_NONE][LF_GRE] = RTE_PTYPE_TUNNEL_GRE, 26d0d65498SPavan Nikhilesh [LC_NONE][LE_NONE][LF_UDP_GENEVE] = RTE_PTYPE_TUNNEL_GENEVE, 27d0d65498SPavan Nikhilesh [LC_NONE][LE_NONE][LF_UDP_VXLAN] = RTE_PTYPE_TUNNEL_VXLAN, 28d0d65498SPavan Nikhilesh [LC_NONE][LE_NONE][LF_NVGRE] = RTE_PTYPE_TUNNEL_NVGRE, 29d0d65498SPavan Nikhilesh 30d0d65498SPavan Nikhilesh [LC_IPV4][LE_NONE][LF_NONE] = RTE_PTYPE_L3_IPV4 | RTE_PTYPE_UNKNOWN, 31d0d65498SPavan Nikhilesh [LC_IPV4][LE_NONE][LF_IPSEC_ESP] = 32d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L3_IPV4, 33d0d65498SPavan Nikhilesh [LC_IPV4][LE_NONE][LF_IPFRAG] = RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_FRAG, 34d0d65498SPavan Nikhilesh [LC_IPV4][LE_NONE][LF_IPCOMP] = RTE_PTYPE_L3_IPV4 | RTE_PTYPE_UNKNOWN, 35d0d65498SPavan Nikhilesh [LC_IPV4][LE_NONE][LF_TCP] = RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_TCP, 36d0d65498SPavan Nikhilesh [LC_IPV4][LE_NONE][LF_UDP] = RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_UDP, 37d0d65498SPavan Nikhilesh [LC_IPV4][LE_NONE][LF_GRE] = RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_GRE, 38d0d65498SPavan Nikhilesh [LC_IPV4][LE_NONE][LF_UDP_GENEVE] = 39d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_GENEVE, 40d0d65498SPavan Nikhilesh [LC_IPV4][LE_NONE][LF_UDP_VXLAN] = 41d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_VXLAN, 42d0d65498SPavan Nikhilesh [LC_IPV4][LE_NONE][LF_NVGRE] = 43d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_NVGRE, 44d0d65498SPavan Nikhilesh 45d0d65498SPavan Nikhilesh [LC_IPV4_OPT][LE_NONE][LF_NONE] = 46d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_UNKNOWN, 47d0d65498SPavan Nikhilesh [LC_IPV4_OPT][LE_NONE][LF_IPSEC_ESP] = 48d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L3_IPV4, 49d0d65498SPavan Nikhilesh [LC_IPV4_OPT][LE_NONE][LF_IPFRAG] = 50d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L4_FRAG, 51d0d65498SPavan Nikhilesh [LC_IPV4_OPT][LE_NONE][LF_IPCOMP] = 52d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_UNKNOWN, 53d0d65498SPavan Nikhilesh [LC_IPV4_OPT][LE_NONE][LF_TCP] = 54d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L4_TCP, 55d0d65498SPavan Nikhilesh [LC_IPV4_OPT][LE_NONE][LF_UDP] = 56d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L4_UDP, 57d0d65498SPavan Nikhilesh [LC_IPV4_OPT][LE_NONE][LF_GRE] = 58d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_GRE, 59d0d65498SPavan Nikhilesh [LC_IPV4_OPT][LE_NONE][LF_UDP_GENEVE] = 60d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_GENEVE, 61d0d65498SPavan Nikhilesh [LC_IPV4_OPT][LE_NONE][LF_UDP_VXLAN] = 62d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_VXLAN, 63d0d65498SPavan Nikhilesh [LC_IPV4_OPT][LE_NONE][LF_NVGRE] = 64d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_NVGRE, 65d0d65498SPavan Nikhilesh 66d0d65498SPavan Nikhilesh [LC_IPV6][LE_NONE][LF_NONE] = RTE_PTYPE_L3_IPV6 | RTE_PTYPE_UNKNOWN, 67d0d65498SPavan Nikhilesh [LC_IPV6][LE_NONE][LF_IPSEC_ESP] = 68d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L3_IPV4, 69d0d65498SPavan Nikhilesh [LC_IPV6][LE_NONE][LF_IPFRAG] = RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_FRAG, 70d0d65498SPavan Nikhilesh [LC_IPV6][LE_NONE][LF_IPCOMP] = RTE_PTYPE_L3_IPV6 | RTE_PTYPE_UNKNOWN, 71d0d65498SPavan Nikhilesh [LC_IPV6][LE_NONE][LF_TCP] = RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_TCP, 72d0d65498SPavan Nikhilesh [LC_IPV6][LE_NONE][LF_UDP] = RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_UDP, 73d0d65498SPavan Nikhilesh [LC_IPV6][LE_NONE][LF_GRE] = RTE_PTYPE_L3_IPV6 | RTE_PTYPE_TUNNEL_GRE, 74d0d65498SPavan Nikhilesh [LC_IPV6][LE_NONE][LF_UDP_GENEVE] = 75d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV6 | RTE_PTYPE_TUNNEL_GENEVE, 76d0d65498SPavan Nikhilesh [LC_IPV6][LE_NONE][LF_UDP_VXLAN] = 77d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV6 | RTE_PTYPE_TUNNEL_VXLAN, 78d0d65498SPavan Nikhilesh [LC_IPV6][LE_NONE][LF_NVGRE] = 79d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_NVGRE, 80d0d65498SPavan Nikhilesh [LC_IPV6_OPT][LE_NONE][LF_NONE] = 81d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_UNKNOWN, 82d0d65498SPavan Nikhilesh [LC_IPV6_OPT][LE_NONE][LF_IPSEC_ESP] = 83d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L3_IPV4, 84d0d65498SPavan Nikhilesh [LC_IPV6_OPT][LE_NONE][LF_IPFRAG] = 85d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L4_FRAG, 86d0d65498SPavan Nikhilesh [LC_IPV6_OPT][LE_NONE][LF_IPCOMP] = 87d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_UNKNOWN, 88d0d65498SPavan Nikhilesh [LC_IPV6_OPT][LE_NONE][LF_TCP] = 89d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L4_TCP, 90d0d65498SPavan Nikhilesh [LC_IPV6_OPT][LE_NONE][LF_UDP] = 91d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L4_UDP, 92d0d65498SPavan Nikhilesh [LC_IPV6_OPT][LE_NONE][LF_GRE] = 93d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_TUNNEL_GRE, 94d0d65498SPavan Nikhilesh [LC_IPV6_OPT][LE_NONE][LF_UDP_GENEVE] = 95d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_TUNNEL_GENEVE, 96d0d65498SPavan Nikhilesh [LC_IPV6_OPT][LE_NONE][LF_UDP_VXLAN] = 97d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_TUNNEL_VXLAN, 98d0d65498SPavan Nikhilesh [LC_IPV6_OPT][LE_NONE][LF_NVGRE] = 99d0d65498SPavan Nikhilesh RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_TUNNEL_NVGRE, 100d0d65498SPavan Nikhilesh 101d0d65498SPavan Nikhilesh }; 102d0d65498SPavan Nikhilesh 103*1dedffebSPavan Nikhilesh static __rte_always_inline int 104*1dedffebSPavan Nikhilesh __octeontx_xmit_pkts(void *lmtline_va, void *ioreg_va, int64_t *fc_status_va, 105*1dedffebSPavan Nikhilesh struct rte_mbuf *tx_pkt) 106*1dedffebSPavan Nikhilesh { 107*1dedffebSPavan Nikhilesh uint64_t cmd_buf[4] __rte_cache_aligned; 108*1dedffebSPavan Nikhilesh uint16_t gaura_id; 109*1dedffebSPavan Nikhilesh 110*1dedffebSPavan Nikhilesh if (unlikely(*((volatile int64_t *)fc_status_va) < 0)) 111*1dedffebSPavan Nikhilesh return -ENOSPC; 112*1dedffebSPavan Nikhilesh 113*1dedffebSPavan Nikhilesh /* Get the gaura Id */ 114*1dedffebSPavan Nikhilesh gaura_id = octeontx_fpa_bufpool_gpool((uintptr_t)tx_pkt->pool->pool_id); 115*1dedffebSPavan Nikhilesh 116*1dedffebSPavan Nikhilesh /* Setup PKO_SEND_HDR_S */ 117*1dedffebSPavan Nikhilesh cmd_buf[0] = tx_pkt->data_len & 0xffff; 118*1dedffebSPavan Nikhilesh cmd_buf[1] = 0x0; 119*1dedffebSPavan Nikhilesh 120*1dedffebSPavan Nikhilesh /* Set don't free bit if reference count > 1 */ 121*1dedffebSPavan Nikhilesh if (rte_mbuf_refcnt_read(tx_pkt) > 1) 122*1dedffebSPavan Nikhilesh cmd_buf[0] |= (1ULL << 58); /* SET DF */ 123*1dedffebSPavan Nikhilesh 124*1dedffebSPavan Nikhilesh /* Setup PKO_SEND_GATHER_S */ 125*1dedffebSPavan Nikhilesh cmd_buf[(1 << 1) | 1] = rte_mbuf_data_iova(tx_pkt); 126*1dedffebSPavan Nikhilesh cmd_buf[(1 << 1) | 0] = PKO_SEND_GATHER_SUBDC | 127*1dedffebSPavan Nikhilesh PKO_SEND_GATHER_LDTYPE(0x1ull) | 128*1dedffebSPavan Nikhilesh PKO_SEND_GATHER_GAUAR((long)gaura_id) | 129*1dedffebSPavan Nikhilesh tx_pkt->data_len; 130*1dedffebSPavan Nikhilesh 131*1dedffebSPavan Nikhilesh octeontx_reg_lmtst(lmtline_va, ioreg_va, cmd_buf, PKO_CMD_SZ); 132*1dedffebSPavan Nikhilesh 133*1dedffebSPavan Nikhilesh return 0; 134*1dedffebSPavan Nikhilesh } 135*1dedffebSPavan Nikhilesh 1369e747589SJerin Jacob uint16_t 1379e747589SJerin Jacob octeontx_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts); 1389e747589SJerin Jacob 1392d2c7918SJerin Jacob uint16_t 1402d2c7918SJerin Jacob octeontx_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts); 1419e747589SJerin Jacob 1429e747589SJerin Jacob #endif /* __OCTEONTX_RXTX_H__ */ 143