/* SPDX-License-Identifier: GPL-2.0 */ /* Marvell OcteonTx2 RVU Admin Function driver
* * Copyright (C) 2018 Marvell International Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ #ifndef NPC_PROFILE_H #define NPC_PROFILE_H #define NPC_ETYPE_IP 0x0800 #define NPC_ETYPE_IP6 0x86dd #define NPC_ETYPE_ARP 0x0806 #define NPC_ETYPE_RARP 0x8035 #define NPC_ETYPE_MPLSU 0x8847 #define NPC_ETYPE_MPLSM 0x8848 #define NPC_ETYPE_ETAG 0x893f #define NPC_ETYPE_CTAG 0x8100 #define NPC_ETYPE_SBTAG 0x88a8 #define NPC_ETYPE_ITAG 0x88e7 #define NPC_ETYPE_PTP 0x88f7 #define NPC_ETYPE_FCOE 0x8906 #define NPC_ETYPE_QINQ 0x9100 #define NPC_ETYPE_TRANS_ETH_BR 0x6558 #define NPC_ETYPE_PPP 0x880b #define NPC_ETYPE_NSH 0x894f #define NPC_IPNH_HOP 0 #define NPC_IPNH_ICMP 1 #define NPC_IPNH_IGMP 2 #define NPC_IPNH_IP 4 #define NPC_IPNH_TCP 6 #define NPC_IPNH_UDP 17 #define NPC_IPNH_IP6 41 #define NPC_IPNH_ROUT 43 #define NPC_IPNH_FRAG 44 #define NPC_IPNH_GRE 47 #define NPC_IPNH_ESP 50 #define NPC_IPNH_AH 51 #define NPC_IPNH_ICMP6 58 #define NPC_IPNH_NONH 59 #define NPC_IPNH_DEST 60 #define NPC_IPNH_SCTP 132 #define NPC_IPNH_MPLS 137 #define NPC_UDP_PORT_GTPC 2123 #define NPC_UDP_PORT_GTPU 2152 #define NPC_UDP_PORT_VXLAN 4789 #define NPC_UDP_PORT_VXLANGPE 4790 #define NPC_UDP_PORT_GENEVE 6081 #define NPC_VXLANGPE_NP_IP 0x1 #define NPC_VXLANGPE_NP_IP6 0x2 #define NPC_VXLANGPE_NP_ETH 0x3 #define NPC_VXLANGPE_NP_NSH 0x4 #define NPC_VXLANGPE_NP_MPLS 0x5 #define NPC_VXLANGPE_NP_GBP 0x6 #define NPC_VXLANGPE_NP_VBNG 0x7 #define NPC_NSH_NP_IP 0x1 #define NPC_NSH_NP_IP6 0x2 #define NPC_NSH_NP_ETH 0x3 #define NPC_NSH_NP_NSH 0x4 #define NPC_NSH_NP_MPLS 0x5 #define NPC_TCP_PORT_HTTP 80 #define NPC_TCP_PORT_HTTPS 443 #define NPC_TCP_PORT_PPTP 1723 #define NPC_MPLS_S 0x0100 #define NPC_IP_VER_4 0x4000 #define NPC_IP_VER_6 0x6000 #define NPC_IP_VER_MASK 0xf000 #define NPC_IP_HDR_LEN_5 0x0500 #define NPC_IP_HDR_LEN_MASK 0x0f00 #define NPC_GRE_F_CSUM (0x1 << 15) #define NPC_GRE_F_ROUTE (0x1 << 14) #define NPC_GRE_F_KEY (0x1 << 13) #define NPC_GRE_F_SEQ (0x1 << 12) #define NPC_GRE_F_ACK (0x1 << 7) #define NPC_GRE_FLAG_MASK (NPC_GRE_F_CSUM | NPC_GRE_F_ROUTE | \ NPC_GRE_F_KEY | NPC_GRE_F_SEQ | NPC_GRE_F_ACK) #define NPC_GRE_VER_MASK 0x0003 #define NPC_GRE_VER_1 0x0001 #define NPC_VXLAN_I 0x0800 #define NPC_VXLANGPE_VER (0x3 << 12) #define NPC_VXLANGPE_I (0x1 << 11) #define NPC_VXLANGPE_P (0x1 << 10) #define NPC_VXLANGPE_B (0x1 << 9) #define NPC_VXLANGPE_NP_MASK 0x00ff #define NPC_NSH_NP_MASK 0x00ff #define NPC_GENEVE_F_OAM (0x1 << 7) #define NPC_GENEVE_F_CRI_OPT (0x1 << 6) #define NPC_GTP_PT_GTP (0x1 << 12) #define NPC_GTP_PT_MASK (0x1 << 12) #define NPC_GTP_VER1 (0x1 << 13) #define NPC_GTP_VER_MASK (0x7 << 13) #define NPC_GTP_MT_G_PDU 0xff #define NPC_GTP_MT_MASK 0xff #define NPC_TCP_DATA_OFFSET_5 0x5000 #define NPC_TCP_DATA_OFFSET_MASK 0xf000 enum npc_kpu_parser_state { NPC_S_NA = 0, NPC_S_KPU1_ETHER, NPC_S_KPU1_PKI, NPC_S_KPU2_CTAG, NPC_S_KPU2_SBTAG, NPC_S_KPU2_QINQ, NPC_S_KPU2_ETAG, NPC_S_KPU2_ITAG, NPC_S_KPU3_CTAG, NPC_S_KPU3_STAG, NPC_S_KPU3_QINQ, NPC_S_KPU3_ITAG, NPC_S_KPU4_MPLS, NPC_S_KPU4_NSH, NPC_S_KPU5_IP, NPC_S_KPU5_IP6, NPC_S_KPU5_ARP, NPC_S_KPU5_RARP, NPC_S_KPU5_PTP, NPC_S_KPU5_FCOE, NPC_S_KPU5_MPLS, NPC_S_KPU5_MPLS_PL, NPC_S_KPU5_NSH, NPC_S_KPU6_IP6_EXT, NPC_S_KPU7_IP6_EXT, NPC_S_KPU8_TCP, NPC_S_KPU8_UDP, NPC_S_KPU8_SCTP, NPC_S_KPU8_ICMP, NPC_S_KPU8_IGMP, NPC_S_KPU8_ICMP6, NPC_S_KPU8_GRE, NPC_S_KPU8_ESP, NPC_S_KPU8_AH, NPC_S_KPU9_TU_MPLS_IN_GRE_VXLAN, NPC_S_KPU9_TU_MPLS, NPC_S_KPU9_TU_NSH, NPC_S_KPU10_TU_MPLS_PL, NPC_S_KPU10_TU_MPLS, NPC_S_KPU10_TU_NSH, NPC_S_KPU11_TU_ETHER, NPC_S_KPU11_TU_PPP, NPC_S_KPU11_TU_MPLS_IN_NSH, NPC_S_KPU11_TU_3RD_NSH, NPC_S_KPU12_TU_IP, NPC_S_KPU12_TU_IP6, NPC_S_KPU12_TU_ARP, NPC_S_KPU13_TU_IP6_EXT, NPC_S_KPU14_TU_IP6_EXT, NPC_S_KPU15_TU_TCP, NPC_S_KPU15_TU_UDP, NPC_S_KPU15_TU_SCTP, NPC_S_KPU15_TU_ICMP, NPC_S_KPU15_TU_IGMP, NPC_S_KPU15_TU_ICMP6, NPC_S_KPU15_TU_ESP, NPC_S_KPU15_TU_AH, NPC_S_KPU16_HTTP_DATA, NPC_S_KPU16_HTTPS_DATA, NPC_S_KPU16_PPTP_DATA, NPC_S_KPU16_TCP_DATA, NPC_S_KPU16_UDP_DATA, NPC_S_LAST /* has to be the last item */ }; enum npc_kpu_parser_flag { NPC_F_NA = 0, NPC_F_PKI, NPC_F_PKI_VLAN, NPC_F_PKI_ETAG, NPC_F_PKI_ITAG, NPC_F_PKI_MPLS, NPC_F_PKI_NSH, NPC_F_ETYPE_UNK, NPC_F_ETHER_VLAN, NPC_F_ETHER_ETAG, NPC_F_ETHER_ITAG, NPC_F_ETHER_MPLS, NPC_F_ETHER_NSH, NPC_F_STAG_CTAG, NPC_F_STAG_CTAG_UNK, NPC_F_STAG_STAG_CTAG, NPC_F_STAG_STAG_STAG, NPC_F_QINQ_CTAG, NPC_F_QINQ_CTAG_UNK, NPC_F_QINQ_QINQ_CTAG, NPC_F_QINQ_QINQ_QINQ, NPC_F_BTAG_ITAG, NPC_F_BTAG_ITAG_STAG, NPC_F_BTAG_ITAG_CTAG, NPC_F_BTAG_ITAG_UNK, NPC_F_ETAG_CTAG, NPC_F_ETAG_BTAG_ITAG, NPC_F_ETAG_STAG, NPC_F_ETAG_QINQ, NPC_F_ETAG_ITAG, NPC_F_ETAG_ITAG_STAG, NPC_F_ETAG_ITAG_CTAG, NPC_F_ETAG_ITAG_UNK, NPC_F_ITAG_STAG_CTAG, NPC_F_ITAG_STAG, NPC_F_ITAG_CTAG, NPC_F_MPLS_4_LABELS, NPC_F_MPLS_3_LABELS, NPC_F_MPLS_2_LABELS, NPC_F_IP_HAS_OPTIONS, NPC_F_IP_IP_IN_IP, NPC_F_IP_6TO4, NPC_F_IP_MPLS_IN_IP, NPC_F_IP_UNK_PROTO, NPC_F_IP_IP_IN_IP_HAS_OPTIONS, NPC_F_IP_6TO4_HAS_OPTIONS, NPC_F_IP_MPLS_IN_IP_HAS_OPTIONS, NPC_F_IP_UNK_PROTO_HAS_OPTIONS, NPC_F_IP6_HAS_EXT, NPC_F_IP6_TUN_IP6, NPC_F_IP6_MPLS_IN_IP, NPC_F_TCP_HAS_OPTIONS, NPC_F_TCP_HTTP, NPC_F_TCP_HTTPS, NPC_F_TCP_PPTP, NPC_F_TCP_UNK_PORT, NPC_F_TCP_HTTP_HAS_OPTIONS, NPC_F_TCP_HTTPS_HAS_OPTIONS, NPC_F_TCP_PPTP_HAS_OPTIONS, NPC_F_TCP_UNK_PORT_HAS_OPTIONS, NPC_F_UDP_VXLAN, NPC_F_UDP_VXLAN_NOVNI, NPC_F_UDP_VXLAN_NOVNI_NSH, NPC_F_UDP_VXLANGPE, NPC_F_UDP_VXLANGPE_NSH, NPC_F_UDP_VXLANGPE_MPLS, NPC_F_UDP_VXLANGPE_NOVNI, NPC_F_UDP_VXLANGPE_NOVNI_NSH, NPC_F_UDP_VXLANGPE_NOVNI_MPLS, NPC_F_UDP_VXLANGPE_UNK, NPC_F_UDP_VXLANGPE_NONP, NPC_F_UDP_GTP_GTPC, NPC_F_UDP_GTP_GTPU_G_PDU, NPC_F_UDP_GTP_GTPU_UNK, NPC_F_UDP_UNK_PORT, NPC_F_UDP_GENEVE, NPC_F_UDP_GENEVE_OAM, NPC_F_UDP_GENEVE_CRI_OPT, NPC_F_UDP_GENEVE_OAM_CRI_OPT, NPC_F_GRE_NVGRE, NPC_F_GRE_HAS_SRE, NPC_F_GRE_HAS_CSUM, NPC_F_GRE_HAS_KEY, NPC_F_GRE_HAS_SEQ, NPC_F_GRE_HAS_CSUM_KEY, NPC_F_GRE_HAS_CSUM_SEQ, NPC_F_GRE_HAS_KEY_SEQ, NPC_F_GRE_HAS_CSUM_KEY_SEQ, NPC_F_GRE_HAS_ROUTE, NPC_F_GRE_UNK_PROTO, NPC_F_GRE_VER1, NPC_F_GRE_VER1_HAS_SEQ, NPC_F_GRE_VER1_HAS_ACK, NPC_F_GRE_VER1_HAS_SEQ_ACK, NPC_F_GRE_VER1_UNK_PROTO, NPC_F_TU_ETHER_UNK, NPC_F_TU_ETHER_CTAG, NPC_F_TU_ETHER_CTAG_UNK, NPC_F_TU_ETHER_STAG_CTAG, NPC_F_TU_ETHER_STAG_CTAG_UNK, NPC_F_TU_ETHER_STAG, NPC_F_TU_ETHER_STAG_UNK, NPC_F_TU_ETHER_QINQ_CTAG, NPC_F_TU_ETHER_QINQ_CTAG_UNK, NPC_F_TU_ETHER_QINQ, NPC_F_TU_ETHER_QINQ_UNK, NPC_F_LAST /* has to be the last item */ }; enum npc_kpu_err_code { NPC_EC_NOERR = 0, /* has to be zero */ NPC_EC_UNK, NPC_EC_L2_K1, NPC_EC_L2_K2, NPC_EC_L2_K3, NPC_EC_L2_K3_ETYPE_UNK, NPC_EC_L2_MPLS_2MANY, NPC_EC_L2_K4, NPC_EC_IP_VER, NPC_EC_IP6_VER, NPC_EC_VXLAN, NPC_EC_NVGRE, NPC_EC_GRE, NPC_EC_GRE_VER1, NPC_EC_L4, NPC_EC_LAST /* has to be the last item */ }; enum NPC_ERRLEV_E { NPC_ERRLEV_RE = 0, NPC_ERRLEV_LA = 1, NPC_ERRLEV_LB = 2, NPC_ERRLEV_LC = 3, NPC_ERRLEV_LD = 4, NPC_ERRLEV_LE = 5, NPC_ERRLEV_LF = 6, NPC_ERRLEV_LG = 7, NPC_ERRLEV_LH = 8, NPC_ERRLEV_R9 = 9, NPC_ERRLEV_R10 = 10, NPC_ERRLEV_R11 = 11, NPC_ERRLEV_R12 = 12, NPC_ERRLEV_R13 = 13, NPC_ERRLEV_R14 = 14, NPC_ERRLEV_NIX = 15, NPC_ERRLEV_ENUM_LAST = 16, }; static struct npc_kpu_profile_action ikpu_action_entries[] = { { NPC_ERRLEV_RE, NPC_EC_NOERR, 12, 14, 16, 0, 0, NPC_S_KPU1_ETHER, 0, 0, NPC_LID_LA, NPC_LT_NA, 0, 0, 0, 0, 0, }, { NPC_ERRLEV_RE, NPC_EC_NOERR, 12, 14, 16, 0, 0, NPC_S_KPU1_ETHER, 0, 0, NPC_LID_LA, NPC_LT_NA, 0, 0, 0, 0, 0, }, { NPC_ERRLEV_RE, NPC_EC_NOERR, 12, 14, 16, 0, 0, NPC_S_KPU1_ETHER, 0, 0, NPC_LID_LA, NPC_LT_NA, 0, 0, 0, 0, 0, }, { NPC_ERRLEV_RE, NPC_EC_NOERR, 12, 14, 16, 0, 0, NPC_S_KPU1_ETHER, 0, 0, NPC_LID_LA, NPC_LT_NA, 0, 0, 0, 0, 0, }, { NPC_ERRLEV_RE, NPC_EC_NOERR, 12, 14, 16, 0, 0, NPC_S_KPU1_ETHER, 0, 0, NPC_LID_LA, NPC_LT_NA, 0, 0, 0, 0, 0, }, { NPC_ERRLEV_RE, NPC_EC_NOERR, 12, 14, 16, 0, 0, NPC_S_KPU1_ETHER, 0, 0, NPC_LID_LA, NPC_LT_NA, 0, 0, 0, 0, 0, }, { NPC_ERRLEV_RE, NPC_EC_NOERR, 12, 14, 16, 0, 0, NPC_S_KPU1_ETHER, 0, 0, NPC_LID_LA, NPC_LT_NA, 0, 0, 0, 0, 0, }, { NPC_ERRLEV_RE, NPC_EC_NOERR, 12, 14, 16, 0, 0, NPC_S_KPU1_ETHER, 0, 0, NPC_LID_LA, NPC_LT_NA, 0, 0, 0, 0, 0, }, { NPC_ERRLEV_RE, NPC_EC_NOERR, 12, 14, 16, 0, 0, NPC_S_KPU1_ETHER, 0, 0, NPC_LID_LA, NPC_LT_NA, 0, 0, 0, 0, 0, }, { NPC_ERRLEV_RE, NPC_EC_NOERR, 12, 14, 16, 0, 0, NPC_S_KPU1_ETHER, 0, 0, NPC_LID_LA, NPC_LT_NA, 0, 0, 0, 0, 0, }, { NPC_ERRLEV_RE, NPC_EC_NOERR, 12, 14, 16, 0, 0, NPC_S_KPU1_ETHER, 0, 0, NPC_LID_LA, NPC_LT_NA, 0, 0, 0, 0, 0,