LCOV - code coverage report
Current view: top level - drivers/common/cnxk - roc_npc_priv.h (source / functions) Hit Total Coverage
Test: Code coverage Lines: 0 1 0.0 %
Date: 2024-12-01 18:57:19 Functions: 0 0 -
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 6 0.0 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: BSD-3-Clause
       2                 :            :  * Copyright(C) 2021 Marvell.
       3                 :            :  */
       4                 :            : 
       5                 :            : #ifndef _ROC_NPC_PRIV_H_
       6                 :            : #define _ROC_NPC_PRIV_H_
       7                 :            : 
       8                 :            : #define NPC_IH_LENGTH        8
       9                 :            : #define NPC_TPID_LENGTH      2
      10                 :            : #define NPC_HIGIG2_LENGTH    16
      11                 :            : #define NPC_MAX_RAW_ITEM_LEN 16
      12                 :            : #define NPC_COUNTER_NONE     (-1)
      13                 :            : 
      14                 :            : #define NPC_RSS_GRPS 8
      15                 :            : 
      16                 :            : #define NPC_ACTION_FLAG_DEFAULT 0xffff
      17                 :            : 
      18                 :            : #define NPC_PFVF_FUNC_MASK 0x3FF
      19                 :            : 
      20                 :            : /* 32 bytes from LDATA_CFG & 32 bytes from FLAGS_CFG */
      21                 :            : #define NPC_MAX_EXTRACT_DATA_LEN (64)
      22                 :            : #define NPC_MAX_EXTRACT_HW_LEN   (4 * NPC_MAX_EXTRACT_DATA_LEN)
      23                 :            : #define NPC_LDATA_LFLAG_LEN      (16)
      24                 :            : #define NPC_MAX_KEY_NIBBLES      (31)
      25                 :            : 
      26                 :            : /* Nibble offsets */
      27                 :            : #define NPC_LAYER_KEYX_SZ         (3)
      28                 :            : #define NPC_PARSE_KEX_S_LA_OFFSET (7)
      29                 :            : #define NPC_PARSE_KEX_S_LID_OFFSET(lid)                                        \
      30                 :            :         ((((lid) - (NPC_LID_LA)) * NPC_LAYER_KEYX_SZ) +                        \
      31                 :            :          NPC_PARSE_KEX_S_LA_OFFSET)
      32                 :            : 
      33                 :            : /* This mark value indicates flag action */
      34                 :            : #define NPC_FLOW_FLAG_VAL (0xffff)
      35                 :            : 
      36                 :            : #define NPC_RX_ACT_MATCH_OFFSET (40)
      37                 :            : #define NPC_RX_ACT_MATCH_MASK   (0xFFFF)
      38                 :            : 
      39                 :            : #define NPC_RSS_ACT_GRP_OFFSET (20)
      40                 :            : #define NPC_RSS_ACT_ALG_OFFSET (56)
      41                 :            : #define NPC_RSS_ACT_GRP_MASK   (0xFFFFF)
      42                 :            : #define NPC_RSS_ACT_ALG_MASK   (0x1F)
      43                 :            : 
      44                 :            : #define NPC_MCAM_KEX_FIELD_MAX    23
      45                 :            : #define NPC_MCAM_MAX_PROTO_FIELDS (NPC_MCAM_KEX_FIELD_MAX + 1)
      46                 :            : #define NPC_MCAM_KEY_X4_WORDS     7 /* Number of 64-bit words */
      47                 :            : 
      48                 :            : #define NPC_RVUPF_MAX_9XXX 0x10 /* HRM: RVU_PRIV_CONST */
      49                 :            : #define NPC_RVUPF_MAX_98XX 0x18 /* HRM: RVU_PRIV_CONST */
      50                 :            : #define NPC_RVUPF_MAX_10XX 0x20 /* HRM: RVU_PRIV_CONST */
      51                 :            : #define NPC_NIXLF_MAX      0x80 /* HRM: NIX_AF_CONST2 */
      52                 :            : #define NPC_MCAME_PER_PF   3    /* DRV: RSVD_MCAM_ENTRIES_PER_PF */
      53                 :            : #define NPC_MCAME_PER_LF   1    /* DRV: RSVD_MCAM_ENTRIES_PER_NIXLF */
      54                 :            : #define NPC_NIXLF_MAX_98XX (2 * NPC_NIXLF_MAX) /*2 NIXLFs */
      55                 :            : #define NPC_MCAME_RESVD_9XXX                                                   \
      56                 :            :         (NPC_NIXLF_MAX * NPC_MCAME_PER_LF +                                    \
      57                 :            :          (NPC_RVUPF_MAX_9XXX - 1) * NPC_MCAME_PER_PF)
      58                 :            : 
      59                 :            : #define NPC_MCAME_RESVD_10XX                                                   \
      60                 :            :         (NPC_NIXLF_MAX * NPC_MCAME_PER_LF +                                    \
      61                 :            :          (NPC_RVUPF_MAX_10XX - 1) * NPC_MCAME_PER_PF)
      62                 :            : 
      63                 :            : #define NPC_MCAME_RESVD_98XX                                                   \
      64                 :            :         (NPC_NIXLF_MAX_98XX * NPC_MCAME_PER_LF +                               \
      65                 :            :          (NPC_RVUPF_MAX_98XX - 1) * NPC_MCAME_PER_PF)
      66                 :            : 
      67                 :            : #define NPC_ACTION_MAX_VLAN_PARAMS    3
      68                 :            : #define NPC_ACTION_MAX_VLANS_STRIPPED 2
      69                 :            : 
      70                 :            : #define NPC_LTYPE_OFFSET_START 7
      71                 :            : /* LB OFFSET : START + LA (2b flags + 1b ltype) + LB (2b flags) */
      72                 :            : #define NPC_LTYPE_LB_OFFSET (NPC_LTYPE_OFFSET_START + 5)
      73                 :            : #define NPC_LFLAG_LB_OFFSET (NPC_LTYPE_OFFSET_START + 3)
      74                 :            : /* LC OFFSET : START + LA (2b flags + 1b ltype) + LB (2b flags + 1b ltype) + LC
      75                 :            :  * (2b flags)
      76                 :            :  */
      77                 :            : #define NPC_LFLAG_LC_OFFSET (NPC_LTYPE_OFFSET_START + 6)
      78                 :            : #define NPC_LTYPE_LC_OFFSET (NPC_LTYPE_OFFSET_START + 8)
      79                 :            : 
      80                 :            : #define CN10K_SDP_CH_START 0x80
      81                 :            : #define CN10K_SDP_CH_MASK  0xF80
      82                 :            : 
      83                 :            : struct npc_action_vtag_info {
      84                 :            :         uint16_t vlan_id;
      85                 :            :         uint16_t vlan_ethtype;
      86                 :            :         uint8_t vlan_pcp;
      87                 :            : };
      88                 :            : 
      89                 :            : enum npc_err_status {
      90                 :            :         NPC_ERR_PARAM = -1024,
      91                 :            :         NPC_ERR_NO_MEM,
      92                 :            :         NPC_ERR_INVALID_SPEC,
      93                 :            :         NPC_ERR_INVALID_MASK,
      94                 :            :         NPC_ERR_INVALID_RANGE,
      95                 :            :         NPC_ERR_INVALID_KEX,
      96                 :            :         NPC_ERR_INVALID_SIZE,
      97                 :            :         NPC_ERR_INTERNAL,
      98                 :            :         NPC_ERR_MCAM_ALLOC,
      99                 :            :         NPC_ERR_ACTION_NOTSUP,
     100                 :            :         NPC_ERR_PATTERN_NOTSUP,
     101                 :            : };
     102                 :            : 
     103                 :            : enum npc_mcam_intf { NPC_MCAM_RX, NPC_MCAM_TX };
     104                 :            : 
     105                 :            : typedef union npc_kex_cap_terms_t {
     106                 :            :         /** Packet Matching Rule term fields */
     107                 :            :         struct {
     108                 :            :                 /** Total length of received packet */
     109                 :            :                 uint64_t len : 1;
     110                 :            :                 /** Initial (outer) Ethertype only */
     111                 :            :                 uint64_t ethtype_0 : 1;
     112                 :            :                 /** Ethertype of most inner VLAN tag */
     113                 :            :                 uint64_t ethtype_x : 1;
     114                 :            :                 /** First VLAN ID (outer) */
     115                 :            :                 uint64_t vlan_id_0 : 1;
     116                 :            :                 /** Last VLAN ID (inner) */
     117                 :            :                 uint64_t vlan_id_x : 1;
     118                 :            :                 /** PCP in the first VLAN header */
     119                 :            :                 uint64_t vlan_pcp_0 : 1;
     120                 :            :                 /** destination MAC address */
     121                 :            :                 uint64_t dmac : 1;
     122                 :            :                 /** IP Protocol or IPv6 Next Header */
     123                 :            :                 uint64_t ip_proto : 1;
     124                 :            :                 /** DSCP in IP header */
     125                 :            :                 uint64_t ip_dscp : 1;
     126                 :            :                 /** Destination UDP port, implies IPPROTO=17 */
     127                 :            :                 uint64_t udp_dport : 1;
     128                 :            :                 /** Destination TCP port implies IPPROTO=6 */
     129                 :            :                 uint64_t tcp_dport : 1;
     130                 :            :                 /** Source UDP Port */
     131                 :            :                 uint64_t udp_sport : 1;
     132                 :            :                 /** Source TCP port */
     133                 :            :                 uint64_t tcp_sport : 1;
     134                 :            :                 /** Source IP address */
     135                 :            :                 uint64_t sip_addr : 1;
     136                 :            :                 /** Destination IP address */
     137                 :            :                 uint64_t dip_addr : 1;
     138                 :            :                 /** Source IP address */
     139                 :            :                 uint64_t sip6_addr : 1;
     140                 :            :                 /** Destination IP address */
     141                 :            :                 uint64_t dip6_addr : 1;
     142                 :            :                 /** IPsec session identifier */
     143                 :            :                 uint64_t ipsec_spi : 1;
     144                 :            :                 /** NVGRE/VXLAN network identifier */
     145                 :            :                 uint64_t ld_vni : 1;
     146                 :            :                 /** Custom frame match rule. PMR offset is counted from
     147                 :            :                  *  the start of the packet.
     148                 :            :                  */
     149                 :            :                 uint64_t custom_frame : 1;
     150                 :            :                 /** Custom layer 3 match rule. PMR offset is counted from
     151                 :            :                  *  the start of layer 3 in the packet.
     152                 :            :                  */
     153                 :            :                 uint64_t custom_l3 : 1;
     154                 :            :                 /** IGMP Group address */
     155                 :            :                 uint64_t igmp_grp_addr : 1;
     156                 :            :                 /** ICMP identifier */
     157                 :            :                 uint64_t icmp_id : 1;
     158                 :            :                 /** ICMP type */
     159                 :            :                 uint64_t icmp_type : 1;
     160                 :            :                 /** ICMP code */
     161                 :            :                 uint64_t icmp_code : 1;
     162                 :            :                 /** Source SCTP port */
     163                 :            :                 uint64_t sctp_sport : 1;
     164                 :            :                 /** Destination SCTP port */
     165                 :            :                 uint64_t sctp_dport : 1;
     166                 :            :                 /** GTPv1 tunnel endpoint identifier */
     167                 :            :                 uint64_t gtpv1_teid : 1;
     168                 :            :         } bit;
     169                 :            : 
     170                 :            :         /** All bits of the bit field structure */
     171                 :            :         uint64_t all_bits;
     172                 :            : 
     173                 :            : } npc_kex_cap_terms_t;
     174                 :            : 
     175                 :            : struct npc_parse_item_info {
     176                 :            :         const void *def_mask; /* default mask */
     177                 :            :         void *hw_mask;        /* hardware supported mask */
     178                 :            :         int len;              /* length of item */
     179                 :            :         const void *spec;     /* spec to use, NULL implies match any */
     180                 :            :         const void *mask;     /* mask to use */
     181                 :            :         uint8_t hw_hdr_len;   /* Extra data len at each layer*/
     182                 :            : };
     183                 :            : 
     184                 :            : struct npc_parse_state {
     185                 :            :         struct npc *npc;
     186                 :            :         const struct roc_npc_item_info *pattern;
     187                 :            :         const struct roc_npc_item_info *last_pattern;
     188                 :            :         struct roc_npc_flow *flow;
     189                 :            :         uint8_t nix_intf;
     190                 :            :         uint8_t tunnel;
     191                 :            :         uint8_t terminate;
     192                 :            :         uint8_t layer_mask;
     193                 :            :         uint8_t lt[NPC_MAX_LID];
     194                 :            :         uint8_t flags[NPC_MAX_LID];
     195                 :            :         uint8_t *mcam_data; /* point to flow->mcam_data + key_len */
     196                 :            :         uint8_t *mcam_mask; /* point to flow->mcam_mask + key_len */
     197                 :            :         bool is_vf;
     198                 :            :         /* adjust ltype in MCAM to match at least one vlan */
     199                 :            :         bool set_vlan_ltype_mask;
     200                 :            :         bool set_ipv6ext_ltype_mask;
     201                 :            :         bool is_second_pass_rule;
     202                 :            :         bool has_eth_type;
     203                 :            :         uint16_t nb_tx_queues;
     204                 :            :         uint16_t dst_pf_func;
     205                 :            : };
     206                 :            : 
     207                 :            : enum npc_kpu_parser_flag {
     208                 :            :         NPC_F_NA = 0,
     209                 :            :         NPC_F_PKI,
     210                 :            :         NPC_F_PKI_VLAN,
     211                 :            :         NPC_F_PKI_ETAG,
     212                 :            :         NPC_F_PKI_ITAG,
     213                 :            :         NPC_F_PKI_MPLS,
     214                 :            :         NPC_F_PKI_NSH,
     215                 :            :         NPC_F_ETYPE_UNK,
     216                 :            :         NPC_F_ETHER_VLAN,
     217                 :            :         NPC_F_ETHER_ETAG,
     218                 :            :         NPC_F_ETHER_ITAG,
     219                 :            :         NPC_F_ETHER_MPLS,
     220                 :            :         NPC_F_ETHER_NSH,
     221                 :            :         NPC_F_STAG_CTAG,
     222                 :            :         NPC_F_STAG_CTAG_UNK,
     223                 :            :         NPC_F_STAG_STAG_CTAG,
     224                 :            :         NPC_F_STAG_STAG_STAG,
     225                 :            :         NPC_F_QINQ_CTAG,
     226                 :            :         NPC_F_QINQ_CTAG_UNK,
     227                 :            :         NPC_F_QINQ_QINQ_CTAG,
     228                 :            :         NPC_F_QINQ_QINQ_QINQ,
     229                 :            :         NPC_F_BTAG_ITAG,
     230                 :            :         NPC_F_BTAG_ITAG_STAG,
     231                 :            :         NPC_F_BTAG_ITAG_CTAG,
     232                 :            :         NPC_F_BTAG_ITAG_UNK,
     233                 :            :         NPC_F_ETAG_CTAG,
     234                 :            :         NPC_F_ETAG_BTAG_ITAG,
     235                 :            :         NPC_F_ETAG_STAG,
     236                 :            :         NPC_F_ETAG_QINQ,
     237                 :            :         NPC_F_ETAG_ITAG,
     238                 :            :         NPC_F_ETAG_ITAG_STAG,
     239                 :            :         NPC_F_ETAG_ITAG_CTAG,
     240                 :            :         NPC_F_ETAG_ITAG_UNK,
     241                 :            :         NPC_F_ITAG_STAG_CTAG,
     242                 :            :         NPC_F_ITAG_STAG,
     243                 :            :         NPC_F_ITAG_CTAG,
     244                 :            :         NPC_F_MPLS_4_LABELS,
     245                 :            :         NPC_F_MPLS_3_LABELS,
     246                 :            :         NPC_F_MPLS_2_LABELS,
     247                 :            :         NPC_F_IP_HAS_OPTIONS,
     248                 :            :         NPC_F_IP_IP_IN_IP,
     249                 :            :         NPC_F_IP_6TO4,
     250                 :            :         NPC_F_IP_MPLS_IN_IP,
     251                 :            :         NPC_F_IP_UNK_PROTO,
     252                 :            :         NPC_F_IP_IP_IN_IP_HAS_OPTIONS,
     253                 :            :         NPC_F_IP_6TO4_HAS_OPTIONS,
     254                 :            :         NPC_F_IP_MPLS_IN_IP_HAS_OPTIONS,
     255                 :            :         NPC_F_IP_UNK_PROTO_HAS_OPTIONS,
     256                 :            :         NPC_F_IP6_HAS_EXT,
     257                 :            :         NPC_F_IP6_TUN_IP6,
     258                 :            :         NPC_F_IP6_MPLS_IN_IP,
     259                 :            :         NPC_F_TCP_HAS_OPTIONS,
     260                 :            :         NPC_F_TCP_HTTP,
     261                 :            :         NPC_F_TCP_HTTPS,
     262                 :            :         NPC_F_TCP_PPTP,
     263                 :            :         NPC_F_TCP_UNK_PORT,
     264                 :            :         NPC_F_TCP_HTTP_HAS_OPTIONS,
     265                 :            :         NPC_F_TCP_HTTPS_HAS_OPTIONS,
     266                 :            :         NPC_F_TCP_PPTP_HAS_OPTIONS,
     267                 :            :         NPC_F_TCP_UNK_PORT_HAS_OPTIONS,
     268                 :            :         NPC_F_UDP_VXLAN,
     269                 :            :         NPC_F_UDP_VXLAN_NOVNI,
     270                 :            :         NPC_F_UDP_VXLAN_NOVNI_NSH,
     271                 :            :         NPC_F_UDP_VXLANGPE,
     272                 :            :         NPC_F_UDP_VXLANGPE_NSH,
     273                 :            :         NPC_F_UDP_VXLANGPE_MPLS,
     274                 :            :         NPC_F_UDP_VXLANGPE_NOVNI,
     275                 :            :         NPC_F_UDP_VXLANGPE_NOVNI_NSH,
     276                 :            :         NPC_F_UDP_VXLANGPE_NOVNI_MPLS,
     277                 :            :         NPC_F_UDP_VXLANGPE_UNK,
     278                 :            :         NPC_F_UDP_VXLANGPE_NONP,
     279                 :            :         NPC_F_UDP_GTP_GTPC,
     280                 :            :         NPC_F_UDP_GTP_GTPU_G_PDU,
     281                 :            :         NPC_F_UDP_GTP_GTPU_UNK,
     282                 :            :         NPC_F_UDP_UNK_PORT,
     283                 :            :         NPC_F_UDP_GENEVE,
     284                 :            :         NPC_F_UDP_GENEVE_OAM,
     285                 :            :         NPC_F_UDP_GENEVE_CRI_OPT,
     286                 :            :         NPC_F_UDP_GENEVE_OAM_CRI_OPT,
     287                 :            :         NPC_F_GRE_NVGRE,
     288                 :            :         NPC_F_GRE_HAS_SRE,
     289                 :            :         NPC_F_GRE_HAS_CSUM,
     290                 :            :         NPC_F_GRE_HAS_KEY,
     291                 :            :         NPC_F_GRE_HAS_SEQ,
     292                 :            :         NPC_F_GRE_HAS_CSUM_KEY,
     293                 :            :         NPC_F_GRE_HAS_CSUM_SEQ,
     294                 :            :         NPC_F_GRE_HAS_KEY_SEQ,
     295                 :            :         NPC_F_GRE_HAS_CSUM_KEY_SEQ,
     296                 :            :         NPC_F_GRE_HAS_ROUTE,
     297                 :            :         NPC_F_GRE_UNK_PROTO,
     298                 :            :         NPC_F_GRE_VER1,
     299                 :            :         NPC_F_GRE_VER1_HAS_SEQ,
     300                 :            :         NPC_F_GRE_VER1_HAS_ACK,
     301                 :            :         NPC_F_GRE_VER1_HAS_SEQ_ACK,
     302                 :            :         NPC_F_GRE_VER1_UNK_PROTO,
     303                 :            :         NPC_F_TU_ETHER_UNK,
     304                 :            :         NPC_F_TU_ETHER_CTAG,
     305                 :            :         NPC_F_TU_ETHER_CTAG_UNK,
     306                 :            :         NPC_F_TU_ETHER_STAG_CTAG,
     307                 :            :         NPC_F_TU_ETHER_STAG_CTAG_UNK,
     308                 :            :         NPC_F_TU_ETHER_STAG,
     309                 :            :         NPC_F_TU_ETHER_STAG_UNK,
     310                 :            :         NPC_F_TU_ETHER_QINQ_CTAG,
     311                 :            :         NPC_F_TU_ETHER_QINQ_CTAG_UNK,
     312                 :            :         NPC_F_TU_ETHER_QINQ,
     313                 :            :         NPC_F_TU_ETHER_QINQ_UNK,
     314                 :            :         NPC_F_LAST /* has to be the last item */
     315                 :            : };
     316                 :            : 
     317                 :            : #define NPC_ACTION_TERM                                                        \
     318                 :            :         (ROC_NPC_ACTION_TYPE_DROP | ROC_NPC_ACTION_TYPE_QUEUE |                \
     319                 :            :          ROC_NPC_ACTION_TYPE_RSS | ROC_NPC_ACTION_TYPE_DUP |                   \
     320                 :            :          ROC_NPC_ACTION_TYPE_SEC)
     321                 :            : 
     322                 :            : struct npc_xtract_info {
     323                 :            :         /* Length in bytes of pkt data extracted. len = 0
     324                 :            :          * indicates that extraction is disabled.
     325                 :            :          */
     326                 :            :         uint8_t len;
     327                 :            :         uint8_t hdr_off;      /* Byte offset of proto hdr: extract_src */
     328                 :            :         uint8_t key_off;      /* Byte offset in MCAM key where data is placed */
     329                 :            :         uint8_t enable;       /* Extraction enabled or disabled */
     330                 :            :         uint8_t flags_enable; /* Flags extraction enabled */
     331                 :            :         uint8_t use_hash;     /* Use field hash */
     332                 :            : };
     333                 :            : 
     334                 :            : /* Information for a given {LAYER, LTYPE} */
     335                 :            : struct npc_lid_lt_xtract_info {
     336                 :            :         /* Info derived from parser configuration */
     337                 :            :         uint16_t npc_proto;         /* Network protocol identified */
     338                 :            :         uint8_t valid_flags_mask;   /* Flags applicable */
     339                 :            :         uint8_t is_terminating : 1; /* No more parsing */
     340                 :            :         struct npc_xtract_info xtract[NPC_MAX_LD];
     341                 :            : };
     342                 :            : 
     343                 :            : union npc_kex_ldata_flags_cfg {
     344                 :            :         struct {
     345                 :            :                 uint64_t lid : 3;
     346                 :            :                 uint64_t rvsd_62_1 : 61;
     347                 :            :         } s;
     348                 :            : 
     349                 :            :         uint64_t i;
     350                 :            : };
     351                 :            : 
     352                 :            : typedef struct npc_lid_lt_xtract_info npc_dxcfg_t[NPC_MAX_INTF][NPC_MAX_LID]
     353                 :            :                                                  [NPC_MAX_LT];
     354                 :            : typedef struct npc_lid_lt_xtract_info npc_fxcfg_t[NPC_MAX_INTF][NPC_MAX_LD]
     355                 :            :                                                  [NPC_MAX_LFL];
     356                 :            : typedef union npc_kex_ldata_flags_cfg npc_ld_flags_t[NPC_MAX_LD];
     357                 :            : 
     358                 :            : /* MBOX_MSG_NPC_GET_DATAX_CFG Response */
     359                 :            : struct npc_get_datax_cfg {
     360                 :            :         /* NPC_AF_KEX_LDATA(0..1)_FLAGS_CFG */
     361                 :            :         union npc_kex_ldata_flags_cfg ld_flags[NPC_MAX_LD];
     362                 :            :         /* Extract information indexed with [LID][LTYPE] */
     363                 :            :         struct npc_lid_lt_xtract_info lid_lt_xtract[NPC_MAX_LID][NPC_MAX_LT];
     364                 :            :         /* Flags based extract indexed with [LDATA][FLAGS_LOWER_NIBBLE]
     365                 :            :          * Fields flags_ena_ld0, flags_ena_ld1 in
     366                 :            :          * struct npc_lid_lt_xtract_info indicate if this is applicable
     367                 :            :          * for a given {LAYER, LTYPE}
     368                 :            :          */
     369                 :            :         struct npc_xtract_info flag_xtract[NPC_MAX_LD][NPC_MAX_LT];
     370                 :            : };
     371                 :            : 
     372                 :            : TAILQ_HEAD(npc_flow_list, roc_npc_flow);
     373                 :            : 
     374                 :            : struct npc_prio_flow_entry {
     375                 :            :         struct roc_npc_flow *flow;
     376                 :            :         TAILQ_ENTRY(npc_prio_flow_entry) next;
     377                 :            : };
     378                 :            : 
     379                 :            : TAILQ_HEAD(npc_prio_flow_list_head, npc_prio_flow_entry);
     380                 :            : 
     381                 :            : struct npc_age_flow_entry {
     382                 :            :         struct roc_npc_flow *flow;
     383                 :            :         TAILQ_ENTRY(npc_age_flow_entry) next;
     384                 :            : };
     385                 :            : 
     386                 :            : TAILQ_HEAD(npc_age_flow_list_head, npc_age_flow_entry);
     387                 :            : 
     388                 :            : struct npc {
     389                 :            :         struct mbox *mbox;                      /* Mbox */
     390                 :            :         uint32_t keyx_supp_nmask[NPC_MAX_INTF]; /* nibble mask */
     391                 :            :         uint8_t hash_extract_cap;               /* hash extract support */
     392                 :            :         uint8_t profile_name[MKEX_NAME_LEN];    /* KEX profile name */
     393                 :            :         uint32_t keyx_len[NPC_MAX_INTF];        /* per intf key len in bits */
     394                 :            :         uint32_t datax_len[NPC_MAX_INTF];       /* per intf data len in bits */
     395                 :            :         uint32_t keyw[NPC_MAX_INTF];            /* max key + data len bits */
     396                 :            :         uint32_t mcam_entries;                  /* mcam entries supported */
     397                 :            :         uint16_t channel;                       /* RX Channel number */
     398                 :            :         bool is_sdp_link;
     399                 :            :         uint16_t sdp_channel;
     400                 :            :         uint16_t sdp_channel_mask;
     401                 :            :         uint32_t rss_grps;                      /* rss groups supported */
     402                 :            :         uint16_t flow_prealloc_size;            /* Pre allocated mcam size */
     403                 :            :         uint16_t flow_max_priority;             /* Max priority for flow */
     404                 :            :         uint16_t switch_header_type; /* Supported switch header type */
     405                 :            :         uint32_t mark_actions;
     406                 :            :         uint32_t vtag_strip_actions; /* vtag insert/strip actions */
     407                 :            :         uint16_t pf_func;            /* pf_func of device */
     408                 :            :         npc_dxcfg_t prx_dxcfg;       /* intf, lid, lt, extract */
     409                 :            :         npc_fxcfg_t prx_fxcfg;       /* Flag extract */
     410                 :            :         npc_ld_flags_t prx_lfcfg;    /* KEX LD_Flags CFG */
     411                 :            :         struct npc_flow_list *flow_list;
     412                 :            :         struct npc_prio_flow_list_head *prio_flow_list;
     413                 :            :         struct npc_age_flow_list_head age_flow_list;
     414                 :            :         struct plt_bitmap *rss_grp_entries;
     415                 :            :         struct npc_flow_list ipsec_list;
     416                 :            :         uint8_t exact_match_ena;
     417                 :            : };
     418                 :            : 
     419                 :            : #define NPC_HASH_FIELD_LEN 16
     420                 :            : 
     421                 :            : struct npc_hash_cfg {
     422                 :            :         uint64_t secret_key[3];
     423                 :            :         /* NPC_AF_INTF(0..1)_HASH(0..1)_MASK(0..1) */
     424                 :            :         uint64_t hash_mask[NPC_MAX_INTF][NPC_MAX_HASH][NPC_MAX_HASH_MASK];
     425                 :            :         /* NPC_AF_INTF(0..1)_HASH(0..1)_RESULT_CTRL */
     426                 :            :         uint64_t hash_ctrl[NPC_MAX_INTF][NPC_MAX_HASH];
     427                 :            : };
     428                 :            : 
     429                 :            : static inline struct npc *
     430                 :            : roc_npc_to_npc_priv(struct roc_npc *npc)
     431                 :            : {
     432   [ #  #  #  #  :          0 :         return (struct npc *)npc->reserved;
                   #  # ]
     433                 :            : }
     434                 :            : 
     435                 :            : int npc_mcam_alloc_counter(struct mbox *mbox, uint16_t *ctr);
     436                 :            : int npc_mcam_free_counter(struct mbox *mbox, uint16_t ctr_id);
     437                 :            : int npc_mcam_read_counter(struct mbox *mbox, uint32_t ctr_id, uint64_t *count);
     438                 :            : int npc_mcam_clear_counter(struct mbox *mbox, uint32_t ctr_id);
     439                 :            : int npc_mcam_free_entry(struct mbox *mbox, uint32_t entry);
     440                 :            : int npc_mcam_free_all_entries(struct npc *npc);
     441                 :            : int npc_mcam_alloc_and_write(struct npc *npc, struct roc_npc_flow *flow,
     442                 :            :                              struct npc_parse_state *pst);
     443                 :            : int npc_mcam_alloc_entry(struct npc *npc, struct roc_npc_flow *mcam,
     444                 :            :                          struct roc_npc_flow *ref_mcam, int prio,
     445                 :            :                          int *resp_count);
     446                 :            : int npc_mcam_alloc_entries(struct mbox *mbox, int ref_mcam, int *alloc_entry, int req_count,
     447                 :            :                            int prio, int *resp_count, bool is_conti);
     448                 :            : 
     449                 :            : int npc_mcam_ena_dis_entry(struct npc *npc, struct roc_npc_flow *mcam, bool enable);
     450                 :            : int npc_mcam_write_entry(struct mbox *mbox, struct roc_npc_flow *mcam);
     451                 :            : int npc_flow_enable_all_entries(struct npc *npc, bool enable);
     452                 :            : int npc_update_parse_state(struct npc_parse_state *pst, struct npc_parse_item_info *info, int lid,
     453                 :            :                            int lt, uint8_t flags);
     454                 :            : void npc_get_hw_supp_mask(struct npc_parse_state *pst, struct npc_parse_item_info *info, int lid,
     455                 :            :                           int lt);
     456                 :            : int npc_mask_is_supported(const char *mask, const char *hw_mask, int len);
     457                 :            : int npc_parse_item_basic(const struct roc_npc_item_info *item, struct npc_parse_item_info *info);
     458                 :            : int npc_parse_meta_items(struct npc_parse_state *pst);
     459                 :            : int npc_parse_mark_item(struct npc_parse_state *pst);
     460                 :            : int npc_parse_port_representor_id(struct npc_parse_state *pst);
     461                 :            : int npc_parse_represented_port_id(struct npc_parse_state *pst);
     462                 :            : int npc_parse_pre_l2(struct npc_parse_state *pst);
     463                 :            : int npc_parse_higig2_hdr(struct npc_parse_state *pst);
     464                 :            : int npc_parse_cpt_hdr(struct npc_parse_state *pst);
     465                 :            : int npc_parse_tx_queue(struct npc_parse_state *pst);
     466                 :            : int npc_parse_la(struct npc_parse_state *pst);
     467                 :            : int npc_parse_lb(struct npc_parse_state *pst);
     468                 :            : int npc_parse_lc(struct npc_parse_state *pst);
     469                 :            : int npc_parse_ld(struct npc_parse_state *pst);
     470                 :            : int npc_parse_le(struct npc_parse_state *pst);
     471                 :            : int npc_parse_lf(struct npc_parse_state *pst);
     472                 :            : int npc_parse_lg(struct npc_parse_state *pst);
     473                 :            : int npc_parse_lh(struct npc_parse_state *pst);
     474                 :            : int npc_mcam_fetch_kex_cfg(struct npc *npc);
     475                 :            : int npc_mcam_fetch_hw_cap(struct npc *npc, uint8_t *npc_hw_cap);
     476                 :            : int npc_get_free_mcam_entry(struct mbox *mbox, struct roc_npc_flow *flow, struct npc *npc);
     477                 :            : void npc_delete_prio_list_entry(struct npc *npc, struct roc_npc_flow *flow);
     478                 :            : int npc_flow_free_all_resources(struct npc *npc);
     479                 :            : const struct roc_npc_item_info *
     480                 :            : npc_parse_skip_void_and_any_items(const struct roc_npc_item_info *pattern);
     481                 :            : int npc_program_mcam(struct npc *npc, struct npc_parse_state *pst, bool mcam_alloc);
     482                 :            : uint64_t npc_get_kex_capability(struct npc *npc);
     483                 :            : int npc_process_ipv6_field_hash(const struct roc_npc_flow_item_ipv6 *ipv6_spec,
     484                 :            :                                 const struct roc_npc_flow_item_ipv6 *ipv6_mask,
     485                 :            :                                 struct npc_parse_state *pst, uint8_t type);
     486                 :            : int npc_rss_action_configure(struct roc_npc *roc_npc, const struct roc_npc_action_rss *rss,
     487                 :            :                              uint8_t *alg_idx, uint32_t *rss_grp, uint32_t mcam_id,
     488                 :            :                              uint16_t rss_repte_pf_func);
     489                 :            : int npc_rss_action_program(struct roc_npc *roc_npc, const struct roc_npc_action actions[],
     490                 :            :                            struct roc_npc_flow *flow);
     491                 :            : int npc_rss_group_free(struct npc *npc, struct roc_npc_flow *flow);
     492                 :            : int npc_mcam_init(struct npc *npc, struct roc_npc_flow *flow, int mcam_id);
     493                 :            : int npc_mcam_move(struct mbox *mbox, uint16_t old_ent, uint16_t new_ent);
     494                 :            : void npc_age_flow_list_entry_add(struct roc_npc *npc, struct roc_npc_flow *flow);
     495                 :            : void npc_age_flow_list_entry_delete(struct roc_npc *npc, struct roc_npc_flow *flow);
     496                 :            : uint32_t npc_aged_flows_get(void *args);
     497                 :            : int npc_aged_flows_bitmap_alloc(struct roc_npc *roc_npc);
     498                 :            : void npc_aged_flows_bitmap_free(struct roc_npc *roc_npc);
     499                 :            : int npc_aging_ctrl_thread_create(struct roc_npc *roc_npc, const struct roc_npc_action_age *age,
     500                 :            :                                  struct roc_npc_flow *flow);
     501                 :            : void npc_aging_ctrl_thread_destroy(struct roc_npc *roc_npc);
     502                 :            : int npc_rss_free_grp_get(struct npc *npc, uint32_t *pos);
     503                 :            : #endif /* _ROC_NPC_PRIV_H_ */

Generated by: LCOV version 1.14