dpdk/drivers/net/dpaa2/dpaa2_sparser.h
<<
>>
Prefs
   1/* * SPDX-License-Identifier: BSD-3-Clause
   2 *   Copyright 2018-2019 NXP
   3 */
   4
   5/**
   6 * @file        dpaa2_sparser.h
   7 *
   8 * @brief       Soft parser related macros & functions support for DPAA2 device
   9 *      framework based applications.
  10 *
  11 */
  12
  13#ifndef _DPAA2_SPARSER_H
  14#define _DPAA2_SPARSER_H
  15
  16#ifdef __cplusplus
  17extern "C" {
  18#endif
  19
  20#define WRIOP_SS_INITIALIZER(priv)                              \
  21do {                                                            \
  22        /* Base offset of parse profile memory in WRIOP */      \
  23        (priv)->ss_offset = 0x20;                               \
  24        (priv)->ss_iova = (size_t)NULL;                 \
  25        (priv)->ss_param_iova = (size_t)NULL;                   \
  26} while (0)
  27
  28/**************************************************************************/
  29/*
  30 * @enum   parser_starting_hxs_code
  31 * @Description PARSER Starting HXS code
  32 */
  33/***************************************************************************/
  34enum parser_starting_hxs_code {
  35        /** Ethernet Starting HXS coding */
  36        PARSER_ETH_STARTING_HXS = 0x0000,
  37        /** LLC+SNAP Starting HXS coding */
  38        PARSER_LLC_SNAP_STARTING_HXS = 0x0001,
  39        /** VLAN Starting HXS coding */
  40        PARSER_VLAN_STARTING_HXS = 0x0002,
  41        /** PPPoE+PPP Starting HXS coding */
  42        PARSER_PPPOE_PPP_STARTING_HXS = 0x0003,
  43        /** MPLS Starting HXS coding */
  44        PARSER_MPLS_STARTING_HXS = 0x0004,
  45        /** ARP Starting HXS coding */
  46        PARSER_ARP_STARTING_HXS = 0x0005,
  47        /** IP Starting HXS coding */
  48        PARSER_IP_STARTING_HXS  = 0x0006,
  49        /** IPv4 Starting HXS coding */
  50        PARSER_IPV4_STARTING_HXS = 0x0007,
  51        /** IPv6 Starting HXS coding */
  52        PARSER_IPV6_STARTING_HXS = 0x0008,
  53        /** GRE Starting HXS coding */
  54        PARSER_GRE_STARTING_HXS = 0x0009,
  55        /** MinEncap Starting HXS coding */
  56        PARSER_MINENCAP_STARTING_HXS = 0x000A,
  57        /** Other L3 Shell Starting HXS coding */
  58        PARSER_OTHER_L3_SHELL_STARTING_HXS = 0x000B,
  59        /** TCP Starting HXS coding */
  60        PARSER_TCP_STARTING_HXS = 0x000C,
  61        /** UDP Starting HXS coding */
  62        PARSER_UDP_STARTING_HXS = 0x000D,
  63        /** IPSec Starting HXS coding */
  64        PARSER_IPSEC_STARTING_HXS = 0x000E,
  65        /** SCTP Starting HXS coding */
  66        PARSER_SCTP_STARTING_HXS = 0x000F,
  67        /** DCCP Starting HXS coding */
  68        PARSER_DCCP_STARTING_HXS = 0x0010,
  69        /** Other L4 Shell Starting HXS coding */
  70        PARSER_OTHER_L4_SHELL_STARTING_HXS = 0x0011,
  71        /** GTP Starting HXS coding */
  72        PARSER_GTP_STARTING_HXS = 0x0012,
  73        /** ESP Starting HXS coding */
  74        PARSER_ESP_STARTING_HXS = 0x0013,
  75        /** VXLAN Starting HXS coding */
  76        PARSER_VXLAN_STARTING_HXS = 0x0014,
  77        /** L5 (and above) Shell Starting HXS coding */
  78        PARSER_L5_SHELL_STARTING_HXS = 0x001E,
  79        /** Final Shell Starting HXS coding */
  80        PARSER_FINAL_SHELL_STARTING_HXS = 0x001F
  81};
  82
  83/**************************************************************************/
  84/*
  85 * @Description    struct dpni_drv_sparser_param - Structure representing the
  86 *                      information needed to activate(enable) a Soft Parser.
  87 */
  88/***************************************************************************/
  89
  90struct dpni_drv_sparser_param {
  91        /* The "custom_header_first" must be set if the custom header to parse
  92         * is the first header in the packet, otherwise "custom_header_first"
  93         * must be cleared.
  94         */
  95        uint8_t             custom_header_first;
  96        /* Hard HXS on which a soft parser is activated. This must be
  97         * configured.
  98         * if the header to parse is not the first header in the packet.
  99         */
 100        enum parser_starting_hxs_code   link_to_hard_hxs;
 101        /* Soft Sequence Start PC */
 102        uint16_t            start_pc;
 103        /* Soft Sequence byte-code */
 104        uint8_t             *byte_code;
 105        /* Soft Sequence size */
 106        uint16_t            size;
 107        /* Pointer to the Parameters Array of the SP */
 108        uint8_t             *param_array;
 109        /* Parameters offset */
 110        uint8_t             param_offset;
 111        /* Parameters size */
 112        uint8_t             param_size;
 113};
 114
 115struct sp_parse_result {
 116        /* Next header */
 117        uint16_t    nxt_hdr;
 118        /* Frame Attribute Flags Extension */
 119        uint16_t    frame_attribute_flags_extension;
 120        /* Frame Attribute Flags (part 1) */
 121        uint32_t    frame_attribute_flags_1;
 122        /* Frame Attribute Flags (part 2) */
 123        uint32_t    frame_attribute_flags_2;
 124        /* Frame Attribute Flags (part 3) */
 125        uint32_t    frame_attribute_flags_3;
 126        /* Shim Offset 1 */
 127        uint8_t     shim_offset_1;
 128        /* Shim Offset 2 */
 129        uint8_t     shim_offset_2;
 130        /* Outer IP protocol field offset */
 131        uint8_t     ip_1_pid_offset;
 132        /* Ethernet offset */
 133        uint8_t     eth_offset;
 134        /* LLC+SNAP offset */
 135        uint8_t     llc_snap_offset;
 136        /* First VLAN's TCI field offset*/
 137        uint8_t     vlan_tci1_offset;
 138        /* Last VLAN's TCI field offset*/
 139        uint8_t     vlan_tcin_offset;
 140        /* Last Ethertype offset*/
 141        uint8_t     last_etype_offset;
 142        /* PPPoE offset */
 143        uint8_t     pppoe_offset;
 144        /* First MPLS offset */
 145        uint8_t     mpls_offset_1;
 146        /* Last MPLS offset */
 147        uint8_t     mpls_offset_n;
 148        /* Layer 3 (Outer IP, ARP, FCoE or FIP) offset */
 149        uint8_t     l3_offset;
 150        /* Inner IP or MinEncap offset*/
 151        uint8_t     ipn_or_minencap_offset;
 152        /* GRE offset */
 153        uint8_t     gre_offset;
 154        /* Layer 4 offset*/
 155        uint8_t     l4_offset;
 156        /* Layer 5 offset */
 157        uint8_t     l5_offset;
 158        /* Routing header offset of 1st IPv6 header */
 159        uint8_t     routing_hdr_offset1;
 160        /* Routing header offset of 2nd IPv6 header */
 161        uint8_t     routing_hdr_offset2;
 162        /* Next header offset */
 163        uint8_t     nxt_hdr_offset;
 164        /* IPv6 fragmentable part offset */
 165        uint8_t     ipv6_frag_offset;
 166        /* Frame's untouched running sum, input to parser */
 167        uint16_t    gross_running_sum;
 168        /* Running Sum */
 169        uint16_t    running_sum;
 170        /* Parse Error code */
 171        uint8_t     parse_error_code;
 172        /* Offset to the next header field before IPv6 fragment extension */
 173        uint8_t     nxt_hdr_before_ipv6_frag_ext;
 174        /* Inner IP Protocol field offset */
 175        uint8_t     ip_n_pid_offset;
 176        /* Reserved for Soft parsing context*/
 177        uint8_t     soft_parsing_context[21];
 178};
 179
 180struct frame_attr {
 181        const char *fld_name;
 182        uint8_t     faf_offset;
 183        uint32_t    fld_mask;
 184};
 185
 186struct frame_attr_ext {
 187        const char *fld_name;
 188        uint8_t     faf_ext_offset;
 189        uint16_t    fld_mask;
 190};
 191
 192
 193struct parse_err {
 194        uint16_t    code;
 195        const char *err_name;
 196};
 197
 198/* Macro definitions */
 199#define IS_ONE_BIT_FIELD(_mask)                 \
 200(!((_mask) & ((_mask) - 1)) || (_mask == 1))
 201
 202int dpaa2_eth_load_wriop_soft_parser(struct dpaa2_dev_priv *priv,
 203                enum dpni_soft_sequence_dest dest);
 204int dpaa2_eth_enable_wriop_soft_parser(struct dpaa2_dev_priv *priv,
 205                enum dpni_soft_sequence_dest dest);
 206#endif /* _DPAA2_SPARSER_H_ */
 207