1 /* * SPDX-License-Identifier: BSD-3-Clause
2 * Copyright 2018-2019 NXP
6 * @file dpaa2_sparser.h
8 * @brief Soft parser related macros & functions support for DPAA2 device
9 * framework based applications.
13 #ifndef _DPAA2_SPARSER_H
14 #define _DPAA2_SPARSER_H
20 #define WRIOP_SS_INITIALIZER(priv) \
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; \
28 /**************************************************************************/
30 * @enum parser_starting_hxs_code
31 * @Description PARSER Starting HXS code
33 /***************************************************************************/
34 enum 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
83 /**************************************************************************/
85 * @Description struct dpni_drv_sparser_param - Structure representing the
86 * information needed to activate(enable) a Soft Parser.
88 /***************************************************************************/
90 struct 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"
95 uint8_t custom_header_first;
96 /* Hard HXS on which a soft parser is activated. This must be
98 * if the header to parse is not the first header in the packet.
100 enum parser_starting_hxs_code link_to_hard_hxs;
101 /* Soft Sequence Start PC */
103 /* Soft Sequence byte-code */
105 /* Soft Sequence 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 */
115 struct sp_parse_result {
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;
127 uint8_t shim_offset_1;
129 uint8_t shim_offset_2;
130 /* Outer IP protocol field offset */
131 uint8_t ip_1_pid_offset;
132 /* Ethernet 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;
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 */
150 /* Inner IP or MinEncap offset*/
151 uint8_t ipn_or_minencap_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;
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];
181 const char *fld_name;
186 struct frame_attr_ext {
187 const char *fld_name;
188 uint8_t faf_ext_offset;
195 const char *err_name;
198 /* Macro definitions */
199 #define IS_ONE_BIT_FIELD(_mask) \
200 (!((_mask) & ((_mask) - 1)) || (_mask == 1))
202 int dpaa2_eth_load_wriop_soft_parser(struct dpaa2_dev_priv *priv,
203 enum dpni_soft_sequence_dest dest);
204 int dpaa2_eth_enable_wriop_soft_parser(struct dpaa2_dev_priv *priv,
205 enum dpni_soft_sequence_dest dest);
206 #endif /* _DPAA2_SPARSER_H_ */