1fa8f86a1SJerin Jacob /* SPDX-License-Identifier: BSD-3-Clause 2fa8f86a1SJerin Jacob * Copyright(C) 2021 Marvell. 3fa8f86a1SJerin Jacob */ 4fa8f86a1SJerin Jacob 5fa8f86a1SJerin Jacob #ifndef __NPC_HW_H__ 6fa8f86a1SJerin Jacob #define __NPC_HW_H__ 7fa8f86a1SJerin Jacob 8fa8f86a1SJerin Jacob /* Register offsets */ 9fa8f86a1SJerin Jacob 10fa8f86a1SJerin Jacob #define NPC_AF_CFG (0x0ull) 11fa8f86a1SJerin Jacob #define NPC_AF_ACTIVE_PC (0x10ull) 12fa8f86a1SJerin Jacob #define NPC_AF_CONST (0x20ull) 13fa8f86a1SJerin Jacob #define NPC_AF_CONST1 (0x30ull) 14fa8f86a1SJerin Jacob #define NPC_AF_BLK_RST (0x40ull) 15fa8f86a1SJerin Jacob #define NPC_AF_MCAM_SCRUB_CTL (0xa0ull) 16fa8f86a1SJerin Jacob #define NPC_AF_KCAM_SCRUB_CTL (0xb0ull) 17fa8f86a1SJerin Jacob #define NPC_AF_KPUX_CFG(a) (0x500ull | (uint64_t)(a) << 3) 18fa8f86a1SJerin Jacob #define NPC_AF_PCK_CFG (0x600ull) 19fa8f86a1SJerin Jacob #define NPC_AF_PCK_DEF_OL2 (0x610ull) 20fa8f86a1SJerin Jacob #define NPC_AF_PCK_DEF_OIP4 (0x620ull) 21fa8f86a1SJerin Jacob #define NPC_AF_PCK_DEF_OIP6 (0x630ull) 22fa8f86a1SJerin Jacob #define NPC_AF_PCK_DEF_IIP4 (0x640ull) 23fa8f86a1SJerin Jacob #define NPC_AF_KEX_LDATAX_FLAGS_CFG(a) (0x800ull | (uint64_t)(a) << 3) 24fa8f86a1SJerin Jacob #define NPC_AF_INTFX_KEX_CFG(a) (0x1010ull | (uint64_t)(a) << 8) 25fa8f86a1SJerin Jacob #define NPC_AF_PKINDX_ACTION0(a) (0x80000ull | (uint64_t)(a) << 6) 26fa8f86a1SJerin Jacob #define NPC_AF_PKINDX_ACTION1(a) (0x80008ull | (uint64_t)(a) << 6) 27fa8f86a1SJerin Jacob #define NPC_AF_PKINDX_CPI_DEFX(a, b) \ 28fa8f86a1SJerin Jacob (0x80020ull | (uint64_t)(a) << 6 | (uint64_t)(b) << 3) 29fa8f86a1SJerin Jacob #define NPC_AF_CHLEN90B_PKIND (0x3bull) 30fa8f86a1SJerin Jacob #define NPC_AF_KPUX_ENTRYX_CAMX(a, b, c) \ 31fa8f86a1SJerin Jacob (0x100000ull | (uint64_t)(a) << 14 | (uint64_t)(b) << 6 | \ 32fa8f86a1SJerin Jacob (uint64_t)(c) << 3) 33fa8f86a1SJerin Jacob #define NPC_AF_KPUX_ENTRYX_ACTION0(a, b) \ 34fa8f86a1SJerin Jacob (0x100020ull | (uint64_t)(a) << 14 | (uint64_t)(b) << 6) 35fa8f86a1SJerin Jacob #define NPC_AF_KPUX_ENTRYX_ACTION1(a, b) \ 36fa8f86a1SJerin Jacob (0x100028ull | (uint64_t)(a) << 14 | (uint64_t)(b) << 6) 37fa8f86a1SJerin Jacob #define NPC_AF_KPUX_ENTRY_DISX(a, b) \ 38fa8f86a1SJerin Jacob (0x180000ull | (uint64_t)(a) << 6 | (uint64_t)(b) << 3) 39fa8f86a1SJerin Jacob #define NPC_AF_CPIX_CFG(a) (0x200000ull | (uint64_t)(a) << 3) 40fa8f86a1SJerin Jacob #define NPC_AF_INTFX_LIDX_LTX_LDX_CFG(a, b, c, d) \ 41fa8f86a1SJerin Jacob (0x900000ull | (uint64_t)(a) << 16 | (uint64_t)(b) << 12 | \ 42fa8f86a1SJerin Jacob (uint64_t)(c) << 5 | (uint64_t)(d) << 3) 43fa8f86a1SJerin Jacob #define NPC_AF_INTFX_LDATAX_FLAGSX_CFG(a, b, c) \ 44fa8f86a1SJerin Jacob (0x980000ull | (uint64_t)(a) << 16 | (uint64_t)(b) << 12 | \ 45fa8f86a1SJerin Jacob (uint64_t)(c) << 3) 46fa8f86a1SJerin Jacob #define NPC_AF_MCAMEX_BANKX_CAMX_INTF(a, b, c) \ 47fa8f86a1SJerin Jacob (0x1000000ull | (uint64_t)(a) << 10 | (uint64_t)(b) << 6 | \ 48fa8f86a1SJerin Jacob (uint64_t)(c) << 3) 49fa8f86a1SJerin Jacob #define NPC_AF_MCAMEX_BANKX_CAMX_W0(a, b, c) \ 50fa8f86a1SJerin Jacob (0x1000010ull | (uint64_t)(a) << 10 | (uint64_t)(b) << 6 | \ 51fa8f86a1SJerin Jacob (uint64_t)(c) << 3) 52fa8f86a1SJerin Jacob #define NPC_AF_MCAMEX_BANKX_CAMX_W1(a, b, c) \ 53fa8f86a1SJerin Jacob (0x1000020ull | (uint64_t)(a) << 10 | (uint64_t)(b) << 6 | \ 54fa8f86a1SJerin Jacob (uint64_t)(c) << 3) 55fa8f86a1SJerin Jacob #define NPC_AF_MCAMEX_BANKX_CFG(a, b) \ 56fa8f86a1SJerin Jacob (0x1800000ull | (uint64_t)(a) << 8 | (uint64_t)(b) << 4) 57fa8f86a1SJerin Jacob #define NPC_AF_MCAMEX_BANKX_STAT_ACT(a, b) \ 58fa8f86a1SJerin Jacob (0x1880000ull | (uint64_t)(a) << 8 | (uint64_t)(b) << 4) 59fa8f86a1SJerin Jacob #define NPC_AF_MATCH_STATX(a) (0x1880008ull | (uint64_t)(a) << 8) 60fa8f86a1SJerin Jacob #define NPC_AF_INTFX_MISS_STAT_ACT(a) (0x1880040ull + 0x8 * (uint64_t)(a)) 61fa8f86a1SJerin Jacob #define NPC_AF_MCAMEX_BANKX_ACTION(a, b) \ 62fa8f86a1SJerin Jacob (0x1900000ull | (uint64_t)(a) << 8 | (uint64_t)(b) << 4) 63fa8f86a1SJerin Jacob #define NPC_AF_MCAMEX_BANKX_TAG_ACT(a, b) \ 64fa8f86a1SJerin Jacob (0x1900008ull | (uint64_t)(a) << 8 | (uint64_t)(b) << 4) 65fa8f86a1SJerin Jacob #define NPC_AF_INTFX_MISS_ACT(a) (0x1a00000ull | (uint64_t)(a) << 4) 66fa8f86a1SJerin Jacob #define NPC_AF_INTFX_MISS_TAG_ACT(a) (0x1b00008ull | (uint64_t)(a) << 4) 67fa8f86a1SJerin Jacob #define NPC_AF_MCAM_BANKX_HITX(a, b) \ 68fa8f86a1SJerin Jacob (0x1c80000ull | (uint64_t)(a) << 8 | (uint64_t)(b) << 4) 69fa8f86a1SJerin Jacob #define NPC_AF_LKUP_CTL (0x2000000ull) 70fa8f86a1SJerin Jacob #define NPC_AF_LKUP_DATAX(a) (0x2000200ull | (uint64_t)(a) << 4) 71fa8f86a1SJerin Jacob #define NPC_AF_LKUP_RESULTX(a) (0x2000400ull | (uint64_t)(a) << 4) 72fa8f86a1SJerin Jacob #define NPC_AF_INTFX_STAT(a) (0x2000800ull | (uint64_t)(a) << 4) 73fa8f86a1SJerin Jacob #define NPC_AF_DBG_CTL (0x3000000ull) 74fa8f86a1SJerin Jacob #define NPC_AF_DBG_STATUS (0x3000010ull) 75fa8f86a1SJerin Jacob #define NPC_AF_KPUX_DBG(a) (0x3000020ull | (uint64_t)(a) << 8) 76fa8f86a1SJerin Jacob #define NPC_AF_IKPU_ERR_CTL (0x3000080ull) 77fa8f86a1SJerin Jacob #define NPC_AF_KPUX_ERR_CTL(a) (0x30000a0ull | (uint64_t)(a) << 8) 78fa8f86a1SJerin Jacob #define NPC_AF_MCAM_DBG (0x3001000ull) 79fa8f86a1SJerin Jacob #define NPC_AF_DBG_DATAX(a) (0x3001400ull | (uint64_t)(a) << 4) 80fa8f86a1SJerin Jacob #define NPC_AF_DBG_RESULTX(a) (0x3001800ull | (uint64_t)(a) << 4) 81fa8f86a1SJerin Jacob 82fa8f86a1SJerin Jacob /* Enum offsets */ 83fa8f86a1SJerin Jacob 84fa8f86a1SJerin Jacob #define NPC_INTF_NIX0_RX (0x0ull) 85fa8f86a1SJerin Jacob #define NPC_INTF_NIX0_TX (0x1ull) 86fa8f86a1SJerin Jacob 87fa8f86a1SJerin Jacob #define NPC_LKUPOP_PKT (0x0ull) 88fa8f86a1SJerin Jacob #define NPC_LKUPOP_KEY (0x1ull) 89fa8f86a1SJerin Jacob 90fa8f86a1SJerin Jacob #define NPC_MCAM_KEY_X1 (0x0ull) 91fa8f86a1SJerin Jacob #define NPC_MCAM_KEY_X2 (0x1ull) 92fa8f86a1SJerin Jacob #define NPC_MCAM_KEY_X4 (0x2ull) 93fa8f86a1SJerin Jacob 94fa8f86a1SJerin Jacob #ifndef __NPC_ERRLEVELS__ 95fa8f86a1SJerin Jacob #define __NPC_ERRLEVELS__ 96fa8f86a1SJerin Jacob 97fa8f86a1SJerin Jacob enum NPC_ERRLEV_E { 98fa8f86a1SJerin Jacob NPC_ERRLEV_RE = 0, 99fa8f86a1SJerin Jacob NPC_ERRLEV_LA = 1, 100fa8f86a1SJerin Jacob NPC_ERRLEV_LB = 2, 101fa8f86a1SJerin Jacob NPC_ERRLEV_LC = 3, 102fa8f86a1SJerin Jacob NPC_ERRLEV_LD = 4, 103fa8f86a1SJerin Jacob NPC_ERRLEV_LE = 5, 104fa8f86a1SJerin Jacob NPC_ERRLEV_LF = 6, 105fa8f86a1SJerin Jacob NPC_ERRLEV_LG = 7, 106fa8f86a1SJerin Jacob NPC_ERRLEV_LH = 8, 107fa8f86a1SJerin Jacob NPC_ERRLEV_R9 = 9, 108fa8f86a1SJerin Jacob NPC_ERRLEV_R10 = 10, 109fa8f86a1SJerin Jacob NPC_ERRLEV_R11 = 11, 110fa8f86a1SJerin Jacob NPC_ERRLEV_R12 = 12, 111fa8f86a1SJerin Jacob NPC_ERRLEV_R13 = 13, 112fa8f86a1SJerin Jacob NPC_ERRLEV_R14 = 14, 113fa8f86a1SJerin Jacob NPC_ERRLEV_NIX = 15, 114fa8f86a1SJerin Jacob NPC_ERRLEV_ENUM_LAST = 16, 115fa8f86a1SJerin Jacob }; 116fa8f86a1SJerin Jacob 117fa8f86a1SJerin Jacob #endif 118fa8f86a1SJerin Jacob 119fa8f86a1SJerin Jacob enum npc_kpu_err_code { 120fa8f86a1SJerin Jacob NPC_EC_NOERR = 0, /* has to be zero */ 121fa8f86a1SJerin Jacob NPC_EC_UNK, 122fa8f86a1SJerin Jacob NPC_EC_IH_LENGTH, 123fa8f86a1SJerin Jacob NPC_EC_EDSA_UNK, 124fa8f86a1SJerin Jacob NPC_EC_L2_K1, 125fa8f86a1SJerin Jacob NPC_EC_L2_K2, 126fa8f86a1SJerin Jacob NPC_EC_L2_K3, 127fa8f86a1SJerin Jacob NPC_EC_L2_K3_ETYPE_UNK, 128fa8f86a1SJerin Jacob NPC_EC_L2_K4, 129fa8f86a1SJerin Jacob NPC_EC_MPLS_2MANY, 130fa8f86a1SJerin Jacob NPC_EC_MPLS_UNK, 131fa8f86a1SJerin Jacob NPC_EC_NSH_UNK, 132fa8f86a1SJerin Jacob NPC_EC_IP_TTL_0, 133fa8f86a1SJerin Jacob NPC_EC_IP_FRAG_OFFSET_1, 134fa8f86a1SJerin Jacob NPC_EC_IP_VER, 135fa8f86a1SJerin Jacob NPC_EC_IP6_HOP_0, 136fa8f86a1SJerin Jacob NPC_EC_IP6_VER, 137fa8f86a1SJerin Jacob NPC_EC_TCP_FLAGS_FIN_ONLY, 138fa8f86a1SJerin Jacob NPC_EC_TCP_FLAGS_ZERO, 139fa8f86a1SJerin Jacob NPC_EC_TCP_FLAGS_RST_FIN, 140fa8f86a1SJerin Jacob NPC_EC_TCP_FLAGS_URG_SYN, 141fa8f86a1SJerin Jacob NPC_EC_TCP_FLAGS_RST_SYN, 142fa8f86a1SJerin Jacob NPC_EC_TCP_FLAGS_SYN_FIN, 143fa8f86a1SJerin Jacob NPC_EC_VXLAN, 144fa8f86a1SJerin Jacob NPC_EC_NVGRE, 145fa8f86a1SJerin Jacob NPC_EC_GRE, 146fa8f86a1SJerin Jacob NPC_EC_GRE_VER1, 147fa8f86a1SJerin Jacob NPC_EC_L4, 148fa8f86a1SJerin Jacob NPC_EC_OIP4_CSUM, 149fa8f86a1SJerin Jacob NPC_EC_IIP4_CSUM, 150fa8f86a1SJerin Jacob NPC_EC_LAST /* has to be the last item */ 151fa8f86a1SJerin Jacob }; 152fa8f86a1SJerin Jacob 153fa8f86a1SJerin Jacob enum NPC_LID_E { 154fa8f86a1SJerin Jacob NPC_LID_LA = 0, 155fa8f86a1SJerin Jacob NPC_LID_LB, 156fa8f86a1SJerin Jacob NPC_LID_LC, 157fa8f86a1SJerin Jacob NPC_LID_LD, 158fa8f86a1SJerin Jacob NPC_LID_LE, 159fa8f86a1SJerin Jacob NPC_LID_LF, 160fa8f86a1SJerin Jacob NPC_LID_LG, 161fa8f86a1SJerin Jacob NPC_LID_LH, 162fa8f86a1SJerin Jacob }; 163fa8f86a1SJerin Jacob 164fa8f86a1SJerin Jacob #ifndef __NPC_LT_TYPES__ 165fa8f86a1SJerin Jacob #define __NPC_LT_TYPES__ 166fa8f86a1SJerin Jacob #define NPC_LT_NA 0 167fa8f86a1SJerin Jacob 168fa8f86a1SJerin Jacob enum npc_kpu_la_ltype { 169fa8f86a1SJerin Jacob NPC_LT_LA_8023 = 1, 170fa8f86a1SJerin Jacob NPC_LT_LA_ETHER, 171fa8f86a1SJerin Jacob NPC_LT_LA_IH_NIX_ETHER, 1725bffab53SKiran Kumar K NPC_LT_LA_HIGIG2_ETHER = 7, 173fa8f86a1SJerin Jacob NPC_LT_LA_IH_NIX_HIGIG2_ETHER, 1745bffab53SKiran Kumar K NPC_LT_LA_CUSTOM_L2_90B_ETHER, 175fa8f86a1SJerin Jacob NPC_LT_LA_CPT_HDR, 1765bffab53SKiran Kumar K NPC_LT_LA_CUSTOM_L2_24B_ETHER, 1775bffab53SKiran Kumar K NPC_LT_LA_CUSTOM_PRE_L2_ETHER, 178fa8f86a1SJerin Jacob NPC_LT_LA_CUSTOM0 = 0xE, 179fa8f86a1SJerin Jacob NPC_LT_LA_CUSTOM1 = 0xF, 180fa8f86a1SJerin Jacob }; 181fa8f86a1SJerin Jacob 182fa8f86a1SJerin Jacob enum npc_kpu_lb_ltype { 183fa8f86a1SJerin Jacob NPC_LT_LB_ETAG = 1, 184fa8f86a1SJerin Jacob NPC_LT_LB_CTAG, 185fa8f86a1SJerin Jacob NPC_LT_LB_STAG_QINQ, 186fa8f86a1SJerin Jacob NPC_LT_LB_BTAG, 1875bffab53SKiran Kumar K NPC_LT_LB_PPPOE, 188fa8f86a1SJerin Jacob NPC_LT_LB_DSA, 189fa8f86a1SJerin Jacob NPC_LT_LB_DSA_VLAN, 190fa8f86a1SJerin Jacob NPC_LT_LB_EDSA, 191fa8f86a1SJerin Jacob NPC_LT_LB_EDSA_VLAN, 192fa8f86a1SJerin Jacob NPC_LT_LB_EXDSA, 193fa8f86a1SJerin Jacob NPC_LT_LB_EXDSA_VLAN, 194fa8f86a1SJerin Jacob NPC_LT_LB_FDSA, 1959869c399SSatheesh Paul NPC_LT_LB_VLAN_EXDSA, 196fa8f86a1SJerin Jacob NPC_LT_LB_CUSTOM0 = 0xE, 197fa8f86a1SJerin Jacob NPC_LT_LB_CUSTOM1 = 0xF, 198fa8f86a1SJerin Jacob }; 199fa8f86a1SJerin Jacob 200fa8f86a1SJerin Jacob enum npc_kpu_lc_ltype { 201fa8f86a1SJerin Jacob NPC_LT_LC_PTP = 1, 202fa8f86a1SJerin Jacob NPC_LT_LC_IP, 203fa8f86a1SJerin Jacob NPC_LT_LC_IP_OPT, 204fa8f86a1SJerin Jacob NPC_LT_LC_IP6, 205fa8f86a1SJerin Jacob NPC_LT_LC_IP6_EXT, 206fa8f86a1SJerin Jacob NPC_LT_LC_ARP, 207fa8f86a1SJerin Jacob NPC_LT_LC_RARP, 208fa8f86a1SJerin Jacob NPC_LT_LC_MPLS, 209fa8f86a1SJerin Jacob NPC_LT_LC_NSH, 210fa8f86a1SJerin Jacob NPC_LT_LC_FCOE, 2119869c399SSatheesh Paul NPC_LT_LC_NGIO, 212fa8f86a1SJerin Jacob NPC_LT_LC_CUSTOM0 = 0xE, 213fa8f86a1SJerin Jacob NPC_LT_LC_CUSTOM1 = 0xF, 214fa8f86a1SJerin Jacob }; 215fa8f86a1SJerin Jacob 216fa8f86a1SJerin Jacob /* Don't modify Ltypes up to SCTP, otherwise it will 217fa8f86a1SJerin Jacob * effect flow tag calculation and thus RSS. 218fa8f86a1SJerin Jacob */ 219fa8f86a1SJerin Jacob enum npc_kpu_ld_ltype { 220fa8f86a1SJerin Jacob NPC_LT_LD_TCP = 1, 221fa8f86a1SJerin Jacob NPC_LT_LD_UDP, 222*71c60cf8SKiran Kumar K NPC_LT_LD_SCTP = 4, 223fa8f86a1SJerin Jacob NPC_LT_LD_ICMP6, 224fa8f86a1SJerin Jacob NPC_LT_LD_CUSTOM0, 225fa8f86a1SJerin Jacob NPC_LT_LD_CUSTOM1, 226fa8f86a1SJerin Jacob NPC_LT_LD_IGMP = 8, 227fa8f86a1SJerin Jacob NPC_LT_LD_AH, 228fa8f86a1SJerin Jacob NPC_LT_LD_GRE, 229fa8f86a1SJerin Jacob NPC_LT_LD_NVGRE, 230fa8f86a1SJerin Jacob NPC_LT_LD_NSH, 231fa8f86a1SJerin Jacob NPC_LT_LD_TU_MPLS_IN_NSH, 232fa8f86a1SJerin Jacob NPC_LT_LD_TU_MPLS_IN_IP, 233*71c60cf8SKiran Kumar K NPC_LT_LD_ICMP, 234fa8f86a1SJerin Jacob }; 235fa8f86a1SJerin Jacob 236fa8f86a1SJerin Jacob enum npc_kpu_le_ltype { 237fa8f86a1SJerin Jacob NPC_LT_LE_VXLAN = 1, 238fa8f86a1SJerin Jacob NPC_LT_LE_GENEVE, 239fa8f86a1SJerin Jacob NPC_LT_LE_ESP, 240fa8f86a1SJerin Jacob NPC_LT_LE_GTPU = 4, 241fa8f86a1SJerin Jacob NPC_LT_LE_VXLANGPE, 242fa8f86a1SJerin Jacob NPC_LT_LE_GTPC, 243fa8f86a1SJerin Jacob NPC_LT_LE_NSH, 244fa8f86a1SJerin Jacob NPC_LT_LE_TU_MPLS_IN_GRE, 245fa8f86a1SJerin Jacob NPC_LT_LE_TU_NSH_IN_GRE, 246fa8f86a1SJerin Jacob NPC_LT_LE_TU_MPLS_IN_UDP, 247fa8f86a1SJerin Jacob NPC_LT_LE_CUSTOM0 = 0xE, 248fa8f86a1SJerin Jacob NPC_LT_LE_CUSTOM1 = 0xF, 249fa8f86a1SJerin Jacob }; 250fa8f86a1SJerin Jacob 251fa8f86a1SJerin Jacob #endif 252fa8f86a1SJerin Jacob 253fa8f86a1SJerin Jacob enum npc_kpu_lf_ltype { 254fa8f86a1SJerin Jacob NPC_LT_LF_TU_ETHER = 1, 255fa8f86a1SJerin Jacob NPC_LT_LF_TU_PPP, 256fa8f86a1SJerin Jacob NPC_LT_LF_TU_MPLS_IN_VXLANGPE, 257fa8f86a1SJerin Jacob NPC_LT_LF_TU_NSH_IN_VXLANGPE, 258fa8f86a1SJerin Jacob NPC_LT_LF_TU_MPLS_IN_NSH, 259fa8f86a1SJerin Jacob NPC_LT_LF_TU_3RD_NSH, 260fa8f86a1SJerin Jacob NPC_LT_LF_CUSTOM0 = 0xE, 261fa8f86a1SJerin Jacob NPC_LT_LF_CUSTOM1 = 0xF, 262fa8f86a1SJerin Jacob }; 263fa8f86a1SJerin Jacob 264fa8f86a1SJerin Jacob enum npc_kpu_lg_ltype { 265fa8f86a1SJerin Jacob NPC_LT_LG_TU_IP = 1, 266fa8f86a1SJerin Jacob NPC_LT_LG_TU_IP6, 267fa8f86a1SJerin Jacob NPC_LT_LG_TU_ARP, 268fa8f86a1SJerin Jacob NPC_LT_LG_TU_ETHER_IN_NSH, 269fa8f86a1SJerin Jacob NPC_LT_LG_CUSTOM0 = 0xE, 270fa8f86a1SJerin Jacob NPC_LT_LG_CUSTOM1 = 0xF, 271fa8f86a1SJerin Jacob }; 272fa8f86a1SJerin Jacob 273fa8f86a1SJerin Jacob /* Don't modify Ltypes up to SCTP, otherwise it will 274fa8f86a1SJerin Jacob * effect flow tag calculation and thus RSS. 275fa8f86a1SJerin Jacob */ 276fa8f86a1SJerin Jacob enum npc_kpu_lh_ltype { 277fa8f86a1SJerin Jacob NPC_LT_LH_TU_TCP = 1, 278fa8f86a1SJerin Jacob NPC_LT_LH_TU_UDP, 279*71c60cf8SKiran Kumar K NPC_LT_LH_TU_SCTP = 4, 280fa8f86a1SJerin Jacob NPC_LT_LH_TU_ICMP6, 281*71c60cf8SKiran Kumar K NPC_LT_LH_CUSTOM0, 282*71c60cf8SKiran Kumar K NPC_LT_LH_CUSTOM1, 283fa8f86a1SJerin Jacob NPC_LT_LH_TU_IGMP = 8, 284fa8f86a1SJerin Jacob NPC_LT_LH_TU_ESP, 285fa8f86a1SJerin Jacob NPC_LT_LH_TU_AH, 286*71c60cf8SKiran Kumar K NPC_LT_LH_TU_ICMP = 0xF, 287fa8f86a1SJerin Jacob }; 288fa8f86a1SJerin Jacob 289fa8f86a1SJerin Jacob enum npc_kpu_lb_uflag { 290fa8f86a1SJerin Jacob NPC_F_LB_U_UNK_ETYPE = 0x80, 291fa8f86a1SJerin Jacob NPC_F_LB_U_MORE_TAG = 0x40, 292fa8f86a1SJerin Jacob }; 293fa8f86a1SJerin Jacob 294fa8f86a1SJerin Jacob enum npc_kpu_lb_lflag { 295fa8f86a1SJerin Jacob NPC_F_LB_L_WITH_CTAG = 1, 296fa8f86a1SJerin Jacob NPC_F_LB_L_WITH_CTAG_UNK, 297fa8f86a1SJerin Jacob NPC_F_LB_L_WITH_STAG_CTAG, 298fa8f86a1SJerin Jacob NPC_F_LB_L_WITH_STAG_STAG, 299fa8f86a1SJerin Jacob NPC_F_LB_L_WITH_QINQ_CTAG, 300fa8f86a1SJerin Jacob NPC_F_LB_L_WITH_QINQ_QINQ, 301fa8f86a1SJerin Jacob NPC_F_LB_L_WITH_ITAG, 302fa8f86a1SJerin Jacob NPC_F_LB_L_WITH_ITAG_STAG, 303fa8f86a1SJerin Jacob NPC_F_LB_L_WITH_ITAG_CTAG, 304fa8f86a1SJerin Jacob NPC_F_LB_L_WITH_ITAG_UNK, 305fa8f86a1SJerin Jacob NPC_F_LB_L_WITH_BTAG_ITAG, 306fa8f86a1SJerin Jacob NPC_F_LB_L_WITH_STAG, 307fa8f86a1SJerin Jacob NPC_F_LB_L_WITH_QINQ, 308fa8f86a1SJerin Jacob NPC_F_LB_L_DSA, 309fa8f86a1SJerin Jacob NPC_F_LB_L_DSA_VLAN, 310fa8f86a1SJerin Jacob NPC_F_LB_L_EDSA, 311fa8f86a1SJerin Jacob NPC_F_LB_L_EDSA_VLAN, 312fa8f86a1SJerin Jacob NPC_F_LB_L_EXDSA, 313fa8f86a1SJerin Jacob NPC_F_LB_L_EXDSA_VLAN, 314fa8f86a1SJerin Jacob NPC_F_LB_L_FDSA, 315fa8f86a1SJerin Jacob }; 316fa8f86a1SJerin Jacob 317fa8f86a1SJerin Jacob enum npc_kpu_lc_uflag { 318fa8f86a1SJerin Jacob NPC_F_LC_U_UNK_PROTO = 0x10, 319fa8f86a1SJerin Jacob NPC_F_LC_U_IP_FRAG = 0x20, 320fa8f86a1SJerin Jacob NPC_F_LC_U_IP6_FRAG = 0x40, 321fa8f86a1SJerin Jacob }; 322fa8f86a1SJerin Jacob 323474e275bSSatheesh Paul enum npc_kpu_lc_lflag { 324474e275bSSatheesh Paul NPC_F_LC_L_IP_IN_IP = 1, 325474e275bSSatheesh Paul NPC_F_LC_L_6TO4, 326474e275bSSatheesh Paul NPC_F_LC_L_MPLS_IN_IP, 327474e275bSSatheesh Paul NPC_F_LC_L_IP6_TUN_IP6, 328474e275bSSatheesh Paul NPC_F_LC_L_IP6_MPLS_IN_IP, 329474e275bSSatheesh Paul NPC_F_LC_L_MPLS_4_LABELS, 330474e275bSSatheesh Paul NPC_F_LC_L_MPLS_3_LABELS, 331474e275bSSatheesh Paul NPC_F_LC_L_MPLS_2_LABELS, 332474e275bSSatheesh Paul NPC_F_LC_L_EXT_HOP, 333474e275bSSatheesh Paul NPC_F_LC_L_EXT_DEST, 334474e275bSSatheesh Paul NPC_F_LC_L_EXT_ROUT, 335474e275bSSatheesh Paul NPC_F_LC_L_EXT_MOBILITY, 336474e275bSSatheesh Paul NPC_F_LC_L_EXT_HOSTID, 337474e275bSSatheesh Paul NPC_F_LC_L_EXT_SHIM6, 338474e275bSSatheesh Paul }; 339474e275bSSatheesh Paul 340fa8f86a1SJerin Jacob /* Structures definitions */ 341fa8f86a1SJerin Jacob struct npc_kpu_profile_cam { 342fa8f86a1SJerin Jacob uint8_t state; 343fa8f86a1SJerin Jacob uint8_t state_mask; 344fa8f86a1SJerin Jacob uint16_t dp0; 345fa8f86a1SJerin Jacob uint16_t dp0_mask; 346fa8f86a1SJerin Jacob uint16_t dp1; 347fa8f86a1SJerin Jacob uint16_t dp1_mask; 348fa8f86a1SJerin Jacob uint16_t dp2; 349fa8f86a1SJerin Jacob uint16_t dp2_mask; 350fa8f86a1SJerin Jacob }; 351fa8f86a1SJerin Jacob 352fa8f86a1SJerin Jacob struct npc_kpu_profile_action { 353fa8f86a1SJerin Jacob uint8_t errlev; 354fa8f86a1SJerin Jacob uint8_t errcode; 355fa8f86a1SJerin Jacob uint8_t dp0_offset; 356fa8f86a1SJerin Jacob uint8_t dp1_offset; 357fa8f86a1SJerin Jacob uint8_t dp2_offset; 358fa8f86a1SJerin Jacob uint8_t bypass_count; 359fa8f86a1SJerin Jacob uint8_t parse_done; 360fa8f86a1SJerin Jacob uint8_t next_state; 361fa8f86a1SJerin Jacob uint8_t ptr_advance; 362fa8f86a1SJerin Jacob uint8_t cap_ena; 363fa8f86a1SJerin Jacob uint8_t lid; 364fa8f86a1SJerin Jacob uint8_t ltype; 365fa8f86a1SJerin Jacob uint8_t flags; 366fa8f86a1SJerin Jacob uint8_t offset; 367fa8f86a1SJerin Jacob uint8_t mask; 368fa8f86a1SJerin Jacob uint8_t right; 369fa8f86a1SJerin Jacob uint8_t shift; 370fa8f86a1SJerin Jacob }; 371fa8f86a1SJerin Jacob 372fa8f86a1SJerin Jacob struct npc_kpu_profile { 373fa8f86a1SJerin Jacob int cam_entries; 374fa8f86a1SJerin Jacob int action_entries; 375fa8f86a1SJerin Jacob struct npc_kpu_profile_cam *cam; 376fa8f86a1SJerin Jacob struct npc_kpu_profile_action *action; 377fa8f86a1SJerin Jacob }; 378fa8f86a1SJerin Jacob 379fa8f86a1SJerin Jacob /* NPC KPU register formats */ 380fa8f86a1SJerin Jacob struct npc_kpu_cam { 381fa8f86a1SJerin Jacob uint64_t dp0_data : 16; 382fa8f86a1SJerin Jacob uint64_t dp1_data : 16; 383fa8f86a1SJerin Jacob uint64_t dp2_data : 16; 384fa8f86a1SJerin Jacob uint64_t state : 8; 385fa8f86a1SJerin Jacob uint64_t rsvd_63_56 : 8; 386fa8f86a1SJerin Jacob }; 387fa8f86a1SJerin Jacob 388fa8f86a1SJerin Jacob struct npc_kpu_action0 { 389fa8f86a1SJerin Jacob uint64_t var_len_shift : 3; 390fa8f86a1SJerin Jacob uint64_t var_len_right : 1; 391fa8f86a1SJerin Jacob uint64_t var_len_mask : 8; 392fa8f86a1SJerin Jacob uint64_t var_len_offset : 8; 393fa8f86a1SJerin Jacob uint64_t ptr_advance : 8; 394fa8f86a1SJerin Jacob uint64_t capture_flags : 8; 395fa8f86a1SJerin Jacob uint64_t capture_ltype : 4; 396fa8f86a1SJerin Jacob uint64_t capture_lid : 3; 397fa8f86a1SJerin Jacob uint64_t rsvd_43 : 1; 398fa8f86a1SJerin Jacob uint64_t next_state : 8; 399fa8f86a1SJerin Jacob uint64_t parse_done : 1; 400fa8f86a1SJerin Jacob uint64_t capture_ena : 1; 401fa8f86a1SJerin Jacob uint64_t byp_count : 3; 402fa8f86a1SJerin Jacob uint64_t rsvd_63_57 : 7; 403fa8f86a1SJerin Jacob }; 404fa8f86a1SJerin Jacob 405fa8f86a1SJerin Jacob struct npc_kpu_action1 { 406fa8f86a1SJerin Jacob uint64_t dp0_offset : 8; 407fa8f86a1SJerin Jacob uint64_t dp1_offset : 8; 408fa8f86a1SJerin Jacob uint64_t dp2_offset : 8; 409fa8f86a1SJerin Jacob uint64_t errcode : 8; 410fa8f86a1SJerin Jacob uint64_t errlev : 4; 411fa8f86a1SJerin Jacob uint64_t rsvd_63_36 : 28; 412fa8f86a1SJerin Jacob }; 413fa8f86a1SJerin Jacob 414fa8f86a1SJerin Jacob struct npc_kpu_pkind_cpi_def { 415fa8f86a1SJerin Jacob uint64_t cpi_base : 10; 416fa8f86a1SJerin Jacob uint64_t rsvd_11_10 : 2; 417fa8f86a1SJerin Jacob uint64_t add_shift : 3; 418fa8f86a1SJerin Jacob uint64_t rsvd_15 : 1; 419fa8f86a1SJerin Jacob uint64_t add_mask : 8; 420fa8f86a1SJerin Jacob uint64_t add_offset : 8; 421fa8f86a1SJerin Jacob uint64_t flags_mask : 8; 422fa8f86a1SJerin Jacob uint64_t flags_match : 8; 423fa8f86a1SJerin Jacob uint64_t ltype_mask : 4; 424fa8f86a1SJerin Jacob uint64_t ltype_match : 4; 425fa8f86a1SJerin Jacob uint64_t lid : 3; 426fa8f86a1SJerin Jacob uint64_t rsvd_62_59 : 4; 427fa8f86a1SJerin Jacob uint64_t ena : 1; 428fa8f86a1SJerin Jacob }; 429fa8f86a1SJerin Jacob 430fa8f86a1SJerin Jacob struct nix_rx_action { 431fa8f86a1SJerin Jacob uint64_t op : 4; 432fa8f86a1SJerin Jacob uint64_t pf_func : 16; 433fa8f86a1SJerin Jacob uint64_t index : 20; 434fa8f86a1SJerin Jacob uint64_t match_id : 16; 435fa8f86a1SJerin Jacob uint64_t flow_key_alg : 5; 436fa8f86a1SJerin Jacob uint64_t rsvd_63_61 : 3; 437fa8f86a1SJerin Jacob }; 438fa8f86a1SJerin Jacob 439fa8f86a1SJerin Jacob struct nix_tx_action { 440fa8f86a1SJerin Jacob uint64_t op : 4; 441fa8f86a1SJerin Jacob uint64_t rsvd_11_4 : 8; 442fa8f86a1SJerin Jacob uint64_t index : 20; 443fa8f86a1SJerin Jacob uint64_t match_id : 16; 444fa8f86a1SJerin Jacob uint64_t rsvd_63_48 : 16; 445fa8f86a1SJerin Jacob }; 446fa8f86a1SJerin Jacob 447fa8f86a1SJerin Jacob /* NPC layer parse information structure */ 448fa8f86a1SJerin Jacob struct npc_layer_info_s { 449fa8f86a1SJerin Jacob uint32_t lptr : 8; 450fa8f86a1SJerin Jacob uint32_t flags : 8; 451fa8f86a1SJerin Jacob uint32_t ltype : 4; 452fa8f86a1SJerin Jacob uint32_t rsvd_31_20 : 12; 453fa8f86a1SJerin Jacob }; 454fa8f86a1SJerin Jacob 455fa8f86a1SJerin Jacob /* NPC layer mcam search key extract structure */ 456fa8f86a1SJerin Jacob struct npc_layer_kex_s { 457fa8f86a1SJerin Jacob uint16_t flags : 8; 458fa8f86a1SJerin Jacob uint16_t ltype : 4; 459fa8f86a1SJerin Jacob uint16_t rsvd_15_12 : 4; 460fa8f86a1SJerin Jacob }; 461fa8f86a1SJerin Jacob 462fa8f86a1SJerin Jacob /* NPC mcam search key x1 structure */ 463fa8f86a1SJerin Jacob struct npc_mcam_key_x1_s { 464fa8f86a1SJerin Jacob uint64_t intf : 2; 465fa8f86a1SJerin Jacob uint64_t rsvd_63_2 : 62; 466fa8f86a1SJerin Jacob uint64_t kw0 : 64; /* W1 */ 467fa8f86a1SJerin Jacob uint64_t kw1 : 48; 468fa8f86a1SJerin Jacob uint64_t rsvd_191_176 : 16; 469fa8f86a1SJerin Jacob }; 470fa8f86a1SJerin Jacob 471fa8f86a1SJerin Jacob /* NPC mcam search key x2 structure */ 472fa8f86a1SJerin Jacob struct npc_mcam_key_x2_s { 473fa8f86a1SJerin Jacob uint64_t intf : 2; 474fa8f86a1SJerin Jacob uint64_t rsvd_63_2 : 62; 475fa8f86a1SJerin Jacob uint64_t kw0 : 64; /* W1 */ 476fa8f86a1SJerin Jacob uint64_t kw1 : 64; /* W2 */ 477fa8f86a1SJerin Jacob uint64_t kw2 : 64; /* W3 */ 478fa8f86a1SJerin Jacob uint64_t kw3 : 32; 479fa8f86a1SJerin Jacob uint64_t rsvd_319_288 : 32; 480fa8f86a1SJerin Jacob }; 481fa8f86a1SJerin Jacob 482fa8f86a1SJerin Jacob /* NPC mcam search key x4 structure */ 483fa8f86a1SJerin Jacob struct npc_mcam_key_x4_s { 484fa8f86a1SJerin Jacob uint64_t intf : 2; 485fa8f86a1SJerin Jacob uint64_t rsvd_63_2 : 62; 486fa8f86a1SJerin Jacob uint64_t kw0 : 64; /* W1 */ 487fa8f86a1SJerin Jacob uint64_t kw1 : 64; /* W2 */ 488fa8f86a1SJerin Jacob uint64_t kw2 : 64; /* W3 */ 489fa8f86a1SJerin Jacob uint64_t kw3 : 64; /* W4 */ 490fa8f86a1SJerin Jacob uint64_t kw4 : 64; /* W5 */ 491fa8f86a1SJerin Jacob uint64_t kw5 : 64; /* W6 */ 492fa8f86a1SJerin Jacob uint64_t kw6 : 64; /* W7 */ 493fa8f86a1SJerin Jacob }; 494fa8f86a1SJerin Jacob 495fa8f86a1SJerin Jacob /* NPC parse key extract structure */ 496fa8f86a1SJerin Jacob struct npc_parse_kex_s { 497fa8f86a1SJerin Jacob uint64_t chan : 12; 498fa8f86a1SJerin Jacob uint64_t errlev : 4; 499fa8f86a1SJerin Jacob uint64_t errcode : 8; 500fa8f86a1SJerin Jacob uint64_t l2m : 1; 501fa8f86a1SJerin Jacob uint64_t l2b : 1; 502fa8f86a1SJerin Jacob uint64_t l3m : 1; 503fa8f86a1SJerin Jacob uint64_t l3b : 1; 504fa8f86a1SJerin Jacob uint64_t la : 12; 505fa8f86a1SJerin Jacob uint64_t lb : 12; 506fa8f86a1SJerin Jacob uint64_t lc : 12; 507fa8f86a1SJerin Jacob uint64_t ld : 12; 508fa8f86a1SJerin Jacob uint64_t le : 12; 509fa8f86a1SJerin Jacob uint64_t lf : 12; 510fa8f86a1SJerin Jacob uint64_t lg : 12; 511fa8f86a1SJerin Jacob uint64_t lh : 12; 512fa8f86a1SJerin Jacob uint64_t rsvd_127_124 : 4; 513fa8f86a1SJerin Jacob }; 514fa8f86a1SJerin Jacob 515fa8f86a1SJerin Jacob /* NPC result structure */ 516fa8f86a1SJerin Jacob struct npc_result_s { 517fa8f86a1SJerin Jacob uint64_t intf : 2; 518fa8f86a1SJerin Jacob uint64_t pkind : 6; 519fa8f86a1SJerin Jacob uint64_t chan : 12; 520fa8f86a1SJerin Jacob uint64_t errlev : 4; 521fa8f86a1SJerin Jacob uint64_t errcode : 8; 522fa8f86a1SJerin Jacob uint64_t l2m : 1; 523fa8f86a1SJerin Jacob uint64_t l2b : 1; 524fa8f86a1SJerin Jacob uint64_t l3m : 1; 525fa8f86a1SJerin Jacob uint64_t l3b : 1; 526fa8f86a1SJerin Jacob uint64_t eoh_ptr : 8; 527fa8f86a1SJerin Jacob uint64_t rsvd_63_44 : 20; 528fa8f86a1SJerin Jacob uint64_t action : 64; /* W1 */ 529fa8f86a1SJerin Jacob uint64_t vtag_action : 64; /* W2 */ 530fa8f86a1SJerin Jacob uint64_t la : 20; 531fa8f86a1SJerin Jacob uint64_t lb : 20; 532fa8f86a1SJerin Jacob uint64_t lc : 20; 533fa8f86a1SJerin Jacob uint64_t rsvd_255_252 : 4; 534fa8f86a1SJerin Jacob uint64_t ld : 20; 535fa8f86a1SJerin Jacob uint64_t le : 20; 536fa8f86a1SJerin Jacob uint64_t lf : 20; 537fa8f86a1SJerin Jacob uint64_t rsvd_319_316 : 4; 538fa8f86a1SJerin Jacob uint64_t lg : 20; 539fa8f86a1SJerin Jacob uint64_t lh : 20; 540fa8f86a1SJerin Jacob uint64_t rsvd_383_360 : 24; 541fa8f86a1SJerin Jacob }; 542fa8f86a1SJerin Jacob 543fa8f86a1SJerin Jacob #endif /* __NPC_HW_H__ */ 544