1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2019 Intel Corporation 3 */ 4 5 #include <sys/queue.h> 6 #include <stdio.h> 7 #include <errno.h> 8 #include <stdint.h> 9 #include <string.h> 10 #include <unistd.h> 11 #include <stdarg.h> 12 13 #include <rte_debug.h> 14 #include <rte_ether.h> 15 #include <rte_ethdev_driver.h> 16 #include <rte_log.h> 17 #include <rte_malloc.h> 18 #include <rte_eth_ctrl.h> 19 #include <rte_tailq.h> 20 #include <rte_flow_driver.h> 21 22 #include "ice_logs.h" 23 #include "base/ice_type.h" 24 #include "base/ice_flow.h" 25 #include "ice_ethdev.h" 26 #include "ice_generic_flow.h" 27 28 #define ICE_GTPU_EH_DWNLINK 0 29 #define ICE_GTPU_EH_UPLINK 1 30 31 struct rss_type_match_hdr { 32 uint32_t hdr_mask; 33 uint64_t eth_rss_hint; 34 }; 35 36 struct ice_hash_match_type { 37 uint64_t hash_type; 38 uint64_t hash_flds; 39 }; 40 41 struct rss_meta { 42 uint32_t pkt_hdr; 43 uint64_t hash_flds; 44 uint8_t hash_function; 45 }; 46 47 struct ice_hash_flow_cfg { 48 bool simple_xor; 49 struct ice_rss_cfg rss_cfg; 50 }; 51 52 static int 53 ice_hash_init(struct ice_adapter *ad); 54 55 static int 56 ice_hash_create(struct ice_adapter *ad, 57 struct rte_flow *flow, 58 void *meta, 59 struct rte_flow_error *error); 60 61 static int 62 ice_hash_destroy(struct ice_adapter *ad, 63 struct rte_flow *flow, 64 struct rte_flow_error *error); 65 66 static void 67 ice_hash_uninit(struct ice_adapter *ad); 68 69 static void 70 ice_hash_free(struct rte_flow *flow); 71 72 static int 73 ice_hash_parse_pattern_action(struct ice_adapter *ad, 74 struct ice_pattern_match_item *array, 75 uint32_t array_len, 76 const struct rte_flow_item pattern[], 77 const struct rte_flow_action actions[], 78 void **meta, 79 struct rte_flow_error *error); 80 81 /* The first member is protocol header, the second member is ETH_RSS_*. */ 82 struct rss_type_match_hdr hint_empty = { 83 ICE_FLOW_SEG_HDR_NONE, 0}; 84 struct rss_type_match_hdr hint_eth_ipv4 = { 85 ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER, 86 ETH_RSS_ETH | ETH_RSS_IPV4}; 87 struct rss_type_match_hdr hint_eth_ipv4_udp = { 88 ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER | 89 ICE_FLOW_SEG_HDR_UDP, 90 ETH_RSS_ETH | ETH_RSS_NONFRAG_IPV4_UDP}; 91 struct rss_type_match_hdr hint_eth_ipv4_tcp = { 92 ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER | 93 ICE_FLOW_SEG_HDR_TCP, 94 ETH_RSS_ETH | ETH_RSS_NONFRAG_IPV4_TCP}; 95 struct rss_type_match_hdr hint_eth_ipv4_sctp = { 96 ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER | 97 ICE_FLOW_SEG_HDR_SCTP, 98 ETH_RSS_ETH | ETH_RSS_NONFRAG_IPV4_SCTP}; 99 struct rss_type_match_hdr hint_eth_ipv4_gtpu_ipv4 = { 100 ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV4 | 101 ICE_FLOW_SEG_HDR_IPV_OTHER, 102 ETH_RSS_GTPU | ETH_RSS_IPV4}; 103 struct rss_type_match_hdr hint_eth_ipv4_gtpu_ipv4_udp = { 104 ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV4 | 105 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_UDP, 106 ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV4_UDP}; 107 struct rss_type_match_hdr hint_eth_ipv4_gtpu_ipv4_tcp = { 108 ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV4 | 109 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_TCP, 110 ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV4_TCP}; 111 struct rss_type_match_hdr hint_eth_ipv4_gtpu_ipv6 = { 112 ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV6 | 113 ICE_FLOW_SEG_HDR_IPV_OTHER, 114 ETH_RSS_GTPU | ETH_RSS_IPV6}; 115 struct rss_type_match_hdr hint_eth_ipv4_gtpu_ipv6_udp = { 116 ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV6 | 117 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_UDP, 118 ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV6_UDP}; 119 struct rss_type_match_hdr hint_eth_ipv4_gtpu_ipv6_tcp = { 120 ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV6 | 121 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_TCP, 122 ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV6_TCP}; 123 struct rss_type_match_hdr hint_eth_ipv6_gtpu_ipv4 = { 124 ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV4 | 125 ICE_FLOW_SEG_HDR_IPV_OTHER, 126 ETH_RSS_GTPU | ETH_RSS_IPV4}; 127 struct rss_type_match_hdr hint_eth_ipv6_gtpu_ipv4_udp = { 128 ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV4 | 129 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_UDP, 130 ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV4_UDP}; 131 struct rss_type_match_hdr hint_eth_ipv6_gtpu_ipv4_tcp = { 132 ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV4 | 133 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_TCP, 134 ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV4_TCP}; 135 struct rss_type_match_hdr hint_eth_ipv6_gtpu_ipv6 = { 136 ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV6 | 137 ICE_FLOW_SEG_HDR_IPV_OTHER, 138 ETH_RSS_GTPU | ETH_RSS_IPV6}; 139 struct rss_type_match_hdr hint_eth_ipv6_gtpu_ipv6_udp = { 140 ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV6 | 141 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_UDP, 142 ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV6_UDP}; 143 struct rss_type_match_hdr hint_eth_ipv6_gtpu_ipv6_tcp = { 144 ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV6 | 145 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_TCP, 146 ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV6_TCP}; 147 struct rss_type_match_hdr hint_eth_ipv4_gtpu_eh_ipv4 = { 148 ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_IPV4 | 149 ICE_FLOW_SEG_HDR_IPV_OTHER, 150 ETH_RSS_GTPU | ETH_RSS_IPV4}; 151 struct rss_type_match_hdr hint_eth_ipv4_gtpu_eh_ipv4_udp = { 152 ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_IPV4 | 153 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_UDP, 154 ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV4_UDP}; 155 struct rss_type_match_hdr hint_eth_ipv4_gtpu_eh_ipv4_tcp = { 156 ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_IPV4 | 157 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_TCP, 158 ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV4_TCP}; 159 struct rss_type_match_hdr hint_eth_ipv4_gtpu_eh_ipv6 = { 160 ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_IPV6 | 161 ICE_FLOW_SEG_HDR_IPV_OTHER, 162 ETH_RSS_GTPU | ETH_RSS_IPV6}; 163 struct rss_type_match_hdr hint_eth_ipv4_gtpu_eh_ipv6_udp = { 164 ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_IPV6 | 165 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_UDP, 166 ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV6_UDP}; 167 struct rss_type_match_hdr hint_eth_ipv4_gtpu_eh_ipv6_tcp = { 168 ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_IPV6 | 169 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_TCP, 170 ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV6_TCP}; 171 struct rss_type_match_hdr hint_eth_ipv6_gtpu_eh_ipv4 = { 172 ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_IPV4 | 173 ICE_FLOW_SEG_HDR_IPV_OTHER, 174 ETH_RSS_GTPU | ETH_RSS_IPV4}; 175 struct rss_type_match_hdr hint_eth_ipv6_gtpu_eh_ipv4_udp = { 176 ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_IPV4 | 177 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_UDP, 178 ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV4_UDP}; 179 struct rss_type_match_hdr hint_eth_ipv6_gtpu_eh_ipv4_tcp = { 180 ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_IPV4 | 181 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_TCP, 182 ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV4_TCP}; 183 struct rss_type_match_hdr hint_eth_ipv6_gtpu_eh_ipv6 = { 184 ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_IPV6 | 185 ICE_FLOW_SEG_HDR_IPV_OTHER, 186 ETH_RSS_GTPU | ETH_RSS_IPV6}; 187 struct rss_type_match_hdr hint_eth_ipv6_gtpu_eh_ipv6_udp = { 188 ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_IPV6 | 189 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_UDP, 190 ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV6_UDP}; 191 struct rss_type_match_hdr hint_eth_ipv6_gtpu_eh_ipv6_tcp = { 192 ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_IPV6 | 193 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_TCP, 194 ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV6_TCP}; 195 struct rss_type_match_hdr hint_eth_pppoes_ipv4 = { 196 ICE_FLOW_SEG_HDR_PPPOE | ICE_FLOW_SEG_HDR_IPV4 | 197 ICE_FLOW_SEG_HDR_IPV_OTHER, 198 ETH_RSS_ETH | ETH_RSS_PPPOE | ETH_RSS_IPV4}; 199 struct rss_type_match_hdr hint_eth_pppoes_ipv4_udp = { 200 ICE_FLOW_SEG_HDR_PPPOE | ICE_FLOW_SEG_HDR_IPV4 | 201 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_UDP, 202 ETH_RSS_ETH | ETH_RSS_PPPOE | ETH_RSS_NONFRAG_IPV4_UDP}; 203 struct rss_type_match_hdr hint_eth_pppoes_ipv4_tcp = { 204 ICE_FLOW_SEG_HDR_PPPOE | ICE_FLOW_SEG_HDR_IPV4 | 205 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_TCP, 206 ETH_RSS_ETH | ETH_RSS_PPPOE | ETH_RSS_NONFRAG_IPV4_TCP}; 207 struct rss_type_match_hdr hint_eth_pppoes_ipv4_sctp = { 208 ICE_FLOW_SEG_HDR_PPPOE | ICE_FLOW_SEG_HDR_IPV4 | 209 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_SCTP, 210 ETH_RSS_ETH | ETH_RSS_PPPOE | ETH_RSS_NONFRAG_IPV4_SCTP}; 211 struct rss_type_match_hdr hint_eth_ipv4_esp = { 212 ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER | 213 ICE_FLOW_SEG_HDR_ESP, 214 ETH_RSS_ETH | ETH_RSS_IPV4 | ETH_RSS_ESP}; 215 struct rss_type_match_hdr hint_eth_ipv4_udp_esp = { 216 ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER | 217 ICE_FLOW_SEG_HDR_NAT_T_ESP, 218 ETH_RSS_ETH | ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_ESP}; 219 struct rss_type_match_hdr hint_eth_ipv4_ah = { 220 ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER | 221 ICE_FLOW_SEG_HDR_AH, 222 ETH_RSS_ETH | ETH_RSS_IPV4 | ETH_RSS_AH}; 223 struct rss_type_match_hdr hint_eth_ipv4_l2tpv3 = { 224 ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER | 225 ICE_FLOW_SEG_HDR_L2TPV3, 226 ETH_RSS_ETH | ETH_RSS_IPV4 | ETH_RSS_L2TPV3}; 227 struct rss_type_match_hdr hint_eth_ipv4_pfcp = { 228 ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER | 229 ICE_FLOW_SEG_HDR_PFCP_SESSION, 230 ETH_RSS_ETH | ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_PFCP}; 231 struct rss_type_match_hdr hint_eth_vlan_ipv4 = { 232 ICE_FLOW_SEG_HDR_VLAN | ICE_FLOW_SEG_HDR_IPV4 | 233 ICE_FLOW_SEG_HDR_IPV_OTHER, 234 ETH_RSS_ETH | ETH_RSS_IPV4 | ETH_RSS_C_VLAN}; 235 struct rss_type_match_hdr hint_eth_vlan_ipv4_udp = { 236 ICE_FLOW_SEG_HDR_VLAN | ICE_FLOW_SEG_HDR_IPV4 | 237 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_UDP, 238 ETH_RSS_ETH | ETH_RSS_C_VLAN | 239 ETH_RSS_NONFRAG_IPV4_UDP}; 240 struct rss_type_match_hdr hint_eth_vlan_ipv4_tcp = { 241 ICE_FLOW_SEG_HDR_VLAN | ICE_FLOW_SEG_HDR_IPV4 | 242 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_TCP, 243 ETH_RSS_ETH | ETH_RSS_C_VLAN | 244 ETH_RSS_NONFRAG_IPV4_TCP}; 245 struct rss_type_match_hdr hint_eth_vlan_ipv4_sctp = { 246 ICE_FLOW_SEG_HDR_VLAN | ICE_FLOW_SEG_HDR_IPV4 | 247 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_SCTP, 248 ETH_RSS_ETH | ETH_RSS_C_VLAN | 249 ETH_RSS_NONFRAG_IPV4_SCTP}; 250 struct rss_type_match_hdr hint_eth_ipv6 = { 251 ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER, 252 ETH_RSS_ETH | ETH_RSS_IPV6}; 253 struct rss_type_match_hdr hint_eth_ipv6_udp = { 254 ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER | 255 ICE_FLOW_SEG_HDR_UDP, 256 ETH_RSS_ETH | ETH_RSS_NONFRAG_IPV6_UDP}; 257 struct rss_type_match_hdr hint_eth_ipv6_tcp = { 258 ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER | 259 ICE_FLOW_SEG_HDR_TCP, 260 ETH_RSS_ETH | ETH_RSS_NONFRAG_IPV6_TCP}; 261 struct rss_type_match_hdr hint_eth_ipv6_sctp = { 262 ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER | 263 ICE_FLOW_SEG_HDR_SCTP, 264 ETH_RSS_ETH | ETH_RSS_NONFRAG_IPV6_SCTP}; 265 struct rss_type_match_hdr hint_eth_ipv6_esp = { 266 ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER | 267 ICE_FLOW_SEG_HDR_ESP, 268 ETH_RSS_ETH | ETH_RSS_IPV6 | ETH_RSS_ESP}; 269 struct rss_type_match_hdr hint_eth_ipv6_udp_esp = { 270 ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER | 271 ICE_FLOW_SEG_HDR_NAT_T_ESP, 272 ETH_RSS_ETH | ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_ESP}; 273 struct rss_type_match_hdr hint_eth_ipv6_ah = { 274 ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER | 275 ICE_FLOW_SEG_HDR_AH, 276 ETH_RSS_ETH | ETH_RSS_IPV6 | ETH_RSS_AH}; 277 struct rss_type_match_hdr hint_eth_ipv6_l2tpv3 = { 278 ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER | 279 ICE_FLOW_SEG_HDR_L2TPV3, 280 ETH_RSS_ETH | ETH_RSS_IPV6 | ETH_RSS_L2TPV3}; 281 struct rss_type_match_hdr hint_eth_ipv6_pfcp = { 282 ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER | 283 ICE_FLOW_SEG_HDR_PFCP_SESSION, 284 ETH_RSS_ETH | ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_PFCP}; 285 struct rss_type_match_hdr hint_eth_vlan_ipv6 = { 286 ICE_FLOW_SEG_HDR_VLAN | ICE_FLOW_SEG_HDR_IPV6 | 287 ICE_FLOW_SEG_HDR_IPV_OTHER, 288 ETH_RSS_ETH | ETH_RSS_IPV6 | ETH_RSS_C_VLAN}; 289 struct rss_type_match_hdr hint_eth_vlan_ipv6_udp = { 290 ICE_FLOW_SEG_HDR_VLAN | ICE_FLOW_SEG_HDR_IPV6 | 291 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_UDP, 292 ETH_RSS_ETH | ETH_RSS_C_VLAN | 293 ETH_RSS_NONFRAG_IPV6_UDP}; 294 struct rss_type_match_hdr hint_eth_vlan_ipv6_tcp = { 295 ICE_FLOW_SEG_HDR_VLAN | ICE_FLOW_SEG_HDR_IPV6 | 296 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_TCP, 297 ETH_RSS_ETH | ETH_RSS_C_VLAN | 298 ETH_RSS_NONFRAG_IPV6_TCP}; 299 struct rss_type_match_hdr hint_eth_vlan_ipv6_sctp = { 300 ICE_FLOW_SEG_HDR_VLAN | ICE_FLOW_SEG_HDR_IPV6 | 301 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_SCTP, 302 ETH_RSS_ETH | ETH_RSS_C_VLAN | 303 ETH_RSS_NONFRAG_IPV6_SCTP}; 304 struct rss_type_match_hdr hint_eth_pppoes_ipv6 = { 305 ICE_FLOW_SEG_HDR_PPPOE | ICE_FLOW_SEG_HDR_IPV6 | 306 ICE_FLOW_SEG_HDR_IPV_OTHER, 307 ETH_RSS_ETH | ETH_RSS_PPPOE | ETH_RSS_IPV6}; 308 struct rss_type_match_hdr hint_eth_pppoes_ipv6_udp = { 309 ICE_FLOW_SEG_HDR_PPPOE | ICE_FLOW_SEG_HDR_IPV6 | 310 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_UDP, 311 ETH_RSS_ETH | ETH_RSS_PPPOE | ETH_RSS_NONFRAG_IPV6_UDP}; 312 struct rss_type_match_hdr hint_eth_pppoes_ipv6_tcp = { 313 ICE_FLOW_SEG_HDR_PPPOE | ICE_FLOW_SEG_HDR_IPV6 | 314 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_TCP, 315 ETH_RSS_ETH | ETH_RSS_PPPOE | ETH_RSS_NONFRAG_IPV6_TCP}; 316 struct rss_type_match_hdr hint_eth_pppoes_ipv6_sctp = { 317 ICE_FLOW_SEG_HDR_PPPOE | ICE_FLOW_SEG_HDR_IPV6 | 318 ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_SCTP, 319 ETH_RSS_ETH | ETH_RSS_PPPOE | ETH_RSS_NONFRAG_IPV6_SCTP}; 320 struct rss_type_match_hdr hint_eth_pppoes = { 321 ICE_FLOW_SEG_HDR_PPPOE, 322 ETH_RSS_ETH | ETH_RSS_PPPOE}; 323 324 /* Supported pattern for os default package. */ 325 static struct ice_pattern_match_item ice_hash_pattern_list_os[] = { 326 {pattern_eth_ipv4, ICE_INSET_NONE, &hint_eth_ipv4}, 327 {pattern_eth_ipv4_udp, ICE_INSET_NONE, &hint_eth_ipv4_udp}, 328 {pattern_eth_ipv4_tcp, ICE_INSET_NONE, &hint_eth_ipv4_tcp}, 329 {pattern_eth_ipv4_sctp, ICE_INSET_NONE, &hint_eth_ipv4_sctp}, 330 {pattern_eth_ipv6, ICE_INSET_NONE, &hint_eth_ipv6}, 331 {pattern_eth_ipv6_udp, ICE_INSET_NONE, &hint_eth_ipv6_udp}, 332 {pattern_eth_ipv6_tcp, ICE_INSET_NONE, &hint_eth_ipv6_tcp}, 333 {pattern_eth_ipv6_sctp, ICE_INSET_NONE, &hint_eth_ipv6_sctp}, 334 {pattern_empty, ICE_INSET_NONE, &hint_empty}, 335 }; 336 337 /* Supported pattern for comms package. */ 338 static struct ice_pattern_match_item ice_hash_pattern_list_comms[] = { 339 {pattern_empty, ICE_INSET_NONE, 340 &hint_empty}, 341 {pattern_eth_ipv4, ICE_INSET_NONE, 342 &hint_eth_ipv4}, 343 {pattern_eth_ipv4_udp, ICE_INSET_NONE, 344 &hint_eth_ipv4_udp}, 345 {pattern_eth_ipv4_tcp, ICE_INSET_NONE, 346 &hint_eth_ipv4_tcp}, 347 {pattern_eth_ipv4_sctp, ICE_INSET_NONE, 348 &hint_eth_ipv4_sctp}, 349 {pattern_eth_ipv4_gtpu_ipv4, ICE_INSET_NONE, 350 &hint_eth_ipv4_gtpu_ipv4}, 351 {pattern_eth_ipv4_gtpu_ipv4_udp, ICE_INSET_NONE, 352 &hint_eth_ipv4_gtpu_ipv4_udp}, 353 {pattern_eth_ipv4_gtpu_ipv4_tcp, ICE_INSET_NONE, 354 &hint_eth_ipv4_gtpu_ipv4_tcp}, 355 {pattern_eth_ipv4_gtpu_ipv6, ICE_INSET_NONE, 356 &hint_eth_ipv4_gtpu_ipv6}, 357 {pattern_eth_ipv4_gtpu_ipv6_udp, ICE_INSET_NONE, 358 &hint_eth_ipv4_gtpu_ipv6_udp}, 359 {pattern_eth_ipv4_gtpu_ipv6_tcp, ICE_INSET_NONE, 360 &hint_eth_ipv4_gtpu_ipv6_tcp}, 361 {pattern_eth_ipv6_gtpu_ipv4, ICE_INSET_NONE, 362 &hint_eth_ipv6_gtpu_ipv4}, 363 {pattern_eth_ipv6_gtpu_ipv4_udp, ICE_INSET_NONE, 364 &hint_eth_ipv6_gtpu_ipv4_udp}, 365 {pattern_eth_ipv6_gtpu_ipv4_tcp, ICE_INSET_NONE, 366 &hint_eth_ipv6_gtpu_ipv4_tcp}, 367 {pattern_eth_ipv6_gtpu_ipv6, ICE_INSET_NONE, 368 &hint_eth_ipv6_gtpu_ipv6}, 369 {pattern_eth_ipv6_gtpu_ipv6_udp, ICE_INSET_NONE, 370 &hint_eth_ipv6_gtpu_ipv6_udp}, 371 {pattern_eth_ipv6_gtpu_ipv6_tcp, ICE_INSET_NONE, 372 &hint_eth_ipv6_gtpu_ipv6_tcp}, 373 {pattern_eth_ipv4_gtpu_eh_ipv4, ICE_INSET_NONE, 374 &hint_eth_ipv4_gtpu_eh_ipv4}, 375 {pattern_eth_ipv4_gtpu_eh_ipv4_udp, ICE_INSET_NONE, 376 &hint_eth_ipv4_gtpu_eh_ipv4_udp}, 377 {pattern_eth_ipv4_gtpu_eh_ipv4_tcp, ICE_INSET_NONE, 378 &hint_eth_ipv4_gtpu_eh_ipv4_tcp}, 379 {pattern_eth_ipv4_gtpu_eh_ipv6, ICE_INSET_NONE, 380 &hint_eth_ipv4_gtpu_eh_ipv6}, 381 {pattern_eth_ipv4_gtpu_eh_ipv6_udp, ICE_INSET_NONE, 382 &hint_eth_ipv4_gtpu_eh_ipv6_udp}, 383 {pattern_eth_ipv4_gtpu_eh_ipv6_tcp, ICE_INSET_NONE, 384 &hint_eth_ipv4_gtpu_eh_ipv6_tcp}, 385 {pattern_eth_ipv6_gtpu_eh_ipv4, ICE_INSET_NONE, 386 &hint_eth_ipv6_gtpu_eh_ipv4}, 387 {pattern_eth_ipv6_gtpu_eh_ipv4_udp, ICE_INSET_NONE, 388 &hint_eth_ipv6_gtpu_eh_ipv4_udp}, 389 {pattern_eth_ipv6_gtpu_eh_ipv4_tcp, ICE_INSET_NONE, 390 &hint_eth_ipv6_gtpu_eh_ipv4_tcp}, 391 {pattern_eth_ipv6_gtpu_eh_ipv6, ICE_INSET_NONE, 392 &hint_eth_ipv6_gtpu_eh_ipv6}, 393 {pattern_eth_ipv6_gtpu_eh_ipv6_udp, ICE_INSET_NONE, 394 &hint_eth_ipv6_gtpu_eh_ipv6_udp}, 395 {pattern_eth_ipv6_gtpu_eh_ipv6_tcp, ICE_INSET_NONE, 396 &hint_eth_ipv6_gtpu_eh_ipv6_tcp}, 397 {pattern_eth_pppoes_ipv4, ICE_INSET_NONE, 398 &hint_eth_pppoes_ipv4}, 399 {pattern_eth_pppoes_ipv4_udp, ICE_INSET_NONE, 400 &hint_eth_pppoes_ipv4_udp}, 401 {pattern_eth_pppoes_ipv4_tcp, ICE_INSET_NONE, 402 &hint_eth_pppoes_ipv4_tcp}, 403 {pattern_eth_pppoes_ipv4_sctp, ICE_INSET_NONE, 404 &hint_eth_pppoes_ipv4_sctp}, 405 {pattern_eth_ipv4_esp, ICE_INSET_NONE, 406 &hint_eth_ipv4_esp}, 407 {pattern_eth_ipv4_udp_esp, ICE_INSET_NONE, 408 &hint_eth_ipv4_udp_esp}, 409 {pattern_eth_ipv4_ah, ICE_INSET_NONE, 410 &hint_eth_ipv4_ah}, 411 {pattern_eth_ipv4_l2tp, ICE_INSET_NONE, 412 &hint_eth_ipv4_l2tpv3}, 413 {pattern_eth_ipv4_pfcp, ICE_INSET_NONE, 414 &hint_eth_ipv4_pfcp}, 415 {pattern_eth_vlan_ipv4, ICE_INSET_NONE, 416 &hint_eth_vlan_ipv4}, 417 {pattern_eth_vlan_ipv4_udp, ICE_INSET_NONE, 418 &hint_eth_vlan_ipv4_udp}, 419 {pattern_eth_vlan_ipv4_tcp, ICE_INSET_NONE, 420 &hint_eth_vlan_ipv4_tcp}, 421 {pattern_eth_vlan_ipv4_sctp, ICE_INSET_NONE, 422 &hint_eth_vlan_ipv4_sctp}, 423 {pattern_eth_ipv6, ICE_INSET_NONE, 424 &hint_eth_ipv6}, 425 {pattern_eth_ipv6_udp, ICE_INSET_NONE, 426 &hint_eth_ipv6_udp}, 427 {pattern_eth_ipv6_tcp, ICE_INSET_NONE, 428 &hint_eth_ipv6_tcp}, 429 {pattern_eth_ipv6_sctp, ICE_INSET_NONE, 430 &hint_eth_ipv6_sctp}, 431 {pattern_eth_ipv6_esp, ICE_INSET_NONE, 432 &hint_eth_ipv6_esp}, 433 {pattern_eth_ipv6_udp_esp, ICE_INSET_NONE, 434 &hint_eth_ipv6_udp_esp}, 435 {pattern_eth_ipv6_ah, ICE_INSET_NONE, 436 &hint_eth_ipv6_ah}, 437 {pattern_eth_ipv6_l2tp, ICE_INSET_NONE, 438 &hint_eth_ipv6_l2tpv3}, 439 {pattern_eth_ipv6_pfcp, ICE_INSET_NONE, 440 &hint_eth_ipv6_pfcp}, 441 {pattern_eth_vlan_ipv6, ICE_INSET_NONE, 442 &hint_eth_vlan_ipv6}, 443 {pattern_eth_vlan_ipv6_udp, ICE_INSET_NONE, 444 &hint_eth_vlan_ipv6_udp}, 445 {pattern_eth_vlan_ipv6_tcp, ICE_INSET_NONE, 446 &hint_eth_vlan_ipv6_tcp}, 447 {pattern_eth_vlan_ipv6_sctp, ICE_INSET_NONE, 448 &hint_eth_vlan_ipv6_sctp}, 449 {pattern_eth_pppoes_ipv6, ICE_INSET_NONE, 450 &hint_eth_pppoes_ipv6}, 451 {pattern_eth_pppoes_ipv6_udp, ICE_INSET_NONE, 452 &hint_eth_pppoes_ipv6_udp}, 453 {pattern_eth_pppoes_ipv6_tcp, ICE_INSET_NONE, 454 &hint_eth_pppoes_ipv6_tcp}, 455 {pattern_eth_pppoes_ipv6_sctp, ICE_INSET_NONE, 456 &hint_eth_pppoes_ipv6_sctp}, 457 {pattern_eth_pppoes, ICE_INSET_NONE, 458 &hint_eth_pppoes}, 459 }; 460 461 /** 462 * The first member is input set combination, 463 * the second member is hash fields. 464 */ 465 struct ice_hash_match_type ice_hash_type_list[] = { 466 {ETH_RSS_L2_SRC_ONLY, 467 BIT_ULL(ICE_FLOW_FIELD_IDX_ETH_SA)}, 468 {ETH_RSS_L2_DST_ONLY, 469 BIT_ULL(ICE_FLOW_FIELD_IDX_ETH_DA)}, 470 {ETH_RSS_ETH | ETH_RSS_L2_SRC_ONLY, 471 BIT_ULL(ICE_FLOW_FIELD_IDX_ETH_SA)}, 472 {ETH_RSS_ETH | ETH_RSS_L2_DST_ONLY, 473 BIT_ULL(ICE_FLOW_FIELD_IDX_ETH_DA)}, 474 {ETH_RSS_ETH, 475 BIT_ULL(ICE_FLOW_FIELD_IDX_ETH_SA) | 476 BIT_ULL(ICE_FLOW_FIELD_IDX_ETH_DA)}, 477 {ETH_RSS_PPPOE, 478 ICE_FLOW_HASH_PPPOE_SESS_ID}, 479 {ETH_RSS_ETH | ETH_RSS_PPPOE | ETH_RSS_L2_SRC_ONLY, 480 ICE_FLOW_HASH_PPPOE_SESS_ID | 481 BIT_ULL(ICE_FLOW_FIELD_IDX_ETH_SA)}, 482 {ETH_RSS_C_VLAN, 483 BIT_ULL(ICE_FLOW_FIELD_IDX_C_VLAN)}, 484 {ETH_RSS_S_VLAN, 485 BIT_ULL(ICE_FLOW_FIELD_IDX_S_VLAN)}, 486 {ETH_RSS_ESP, 487 BIT_ULL(ICE_FLOW_FIELD_IDX_ESP_SPI)}, 488 {ETH_RSS_AH, 489 BIT_ULL(ICE_FLOW_FIELD_IDX_AH_SPI)}, 490 {ETH_RSS_L2TPV3, 491 BIT_ULL(ICE_FLOW_FIELD_IDX_L2TPV3_SESS_ID)}, 492 {ETH_RSS_PFCP, 493 BIT_ULL(ICE_FLOW_FIELD_IDX_PFCP_SEID)}, 494 /* IPV4 */ 495 {ETH_RSS_IPV4 | ETH_RSS_L3_SRC_ONLY, 496 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA)}, 497 {ETH_RSS_IPV4 | ETH_RSS_L3_DST_ONLY, 498 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA)}, 499 {ETH_RSS_IPV4, ICE_FLOW_HASH_IPV4}, 500 {ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, 501 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA) | 502 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) | 503 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT)}, 504 {ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, 505 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA) | 506 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) | 507 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT)}, 508 {ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_L3_SRC_ONLY, 509 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA)}, 510 {ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, 511 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA) | 512 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) | 513 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT)}, 514 {ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, 515 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA) | 516 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) | 517 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT)}, 518 {ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_L3_DST_ONLY, 519 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA)}, 520 {ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_L4_SRC_ONLY, 521 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT) | 522 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT)}, 523 {ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_L4_DST_ONLY, 524 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT) | 525 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT)}, 526 {ETH_RSS_NONFRAG_IPV4_UDP, 527 ICE_HASH_UDP_IPV4 | 528 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT)}, 529 {ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, 530 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA) | 531 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) | 532 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT)}, 533 {ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, 534 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA) | 535 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) | 536 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT)}, 537 {ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_L3_SRC_ONLY, 538 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA)}, 539 {ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, 540 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA) | 541 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) | 542 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT)}, 543 {ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, 544 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA) | 545 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) | 546 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT)}, 547 {ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_L3_DST_ONLY, 548 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA)}, 549 {ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_L4_SRC_ONLY, 550 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT) | 551 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT)}, 552 {ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_L4_DST_ONLY, 553 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT) | 554 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT)}, 555 {ETH_RSS_NONFRAG_IPV4_TCP, 556 ICE_HASH_TCP_IPV4 | 557 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT)}, 558 {ETH_RSS_NONFRAG_IPV4_SCTP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, 559 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA) | 560 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) | 561 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT)}, 562 {ETH_RSS_NONFRAG_IPV4_SCTP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, 563 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA) | 564 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) | 565 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT)}, 566 {ETH_RSS_NONFRAG_IPV4_SCTP | ETH_RSS_L3_SRC_ONLY, 567 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA)}, 568 {ETH_RSS_NONFRAG_IPV4_SCTP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, 569 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA) | 570 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) | 571 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT)}, 572 {ETH_RSS_NONFRAG_IPV4_SCTP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, 573 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA) | 574 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) | 575 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT)}, 576 {ETH_RSS_NONFRAG_IPV4_SCTP | ETH_RSS_L3_DST_ONLY, 577 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA)}, 578 {ETH_RSS_NONFRAG_IPV4_SCTP | ETH_RSS_L4_SRC_ONLY, 579 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT) | 580 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT)}, 581 {ETH_RSS_NONFRAG_IPV4_SCTP | ETH_RSS_L4_DST_ONLY, 582 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT) | 583 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT)}, 584 {ETH_RSS_NONFRAG_IPV4_SCTP, 585 ICE_HASH_SCTP_IPV4 | 586 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT)}, 587 /* IPV6 */ 588 {ETH_RSS_IPV6 | ETH_RSS_L3_SRC_ONLY, 589 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_SA)}, 590 {ETH_RSS_IPV6 | ETH_RSS_L3_DST_ONLY, 591 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_DA)}, 592 {ETH_RSS_IPV6, ICE_FLOW_HASH_IPV6}, 593 {ETH_RSS_IPV6_PRE32 | ETH_RSS_L3_SRC_ONLY, 594 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_SA)}, 595 {ETH_RSS_IPV6_PRE32 | ETH_RSS_L3_DST_ONLY, 596 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_DA)}, 597 {ETH_RSS_IPV6_PRE32, ICE_FLOW_HASH_IPV6_PRE32}, 598 {ETH_RSS_IPV6_PRE48 | ETH_RSS_L3_SRC_ONLY, 599 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_SA)}, 600 {ETH_RSS_IPV6_PRE48 | ETH_RSS_L3_DST_ONLY, 601 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_DA)}, 602 {ETH_RSS_IPV6_PRE48, ICE_FLOW_HASH_IPV6_PRE48}, 603 {ETH_RSS_IPV6_PRE64 | ETH_RSS_L3_SRC_ONLY, 604 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_SA)}, 605 {ETH_RSS_IPV6_PRE64 | ETH_RSS_L3_DST_ONLY, 606 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_DA)}, 607 {ETH_RSS_IPV6_PRE64, ICE_FLOW_HASH_IPV6_PRE64}, 608 {ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, 609 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_SA) | 610 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT) | 611 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT)}, 612 {ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, 613 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_SA) | 614 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT) | 615 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT)}, 616 {ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_L3_SRC_ONLY, 617 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_SA)}, 618 {ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, 619 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_DA) | 620 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT) | 621 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT)}, 622 {ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, 623 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_DA) | 624 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT) | 625 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT)}, 626 {ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_L3_DST_ONLY, 627 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_DA)}, 628 {ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_L4_SRC_ONLY, 629 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT) | 630 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT)}, 631 {ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_L4_DST_ONLY, 632 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT) | 633 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT)}, 634 {ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_PFCP, 635 BIT_ULL(ICE_FLOW_FIELD_IDX_PFCP_SEID)}, 636 {ETH_RSS_NONFRAG_IPV6_UDP, 637 ICE_HASH_UDP_IPV6 | 638 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT)}, 639 {ETH_RSS_IPV6_PRE32_UDP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, 640 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_SA) | 641 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT)}, 642 {ETH_RSS_IPV6_PRE32_UDP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, 643 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_SA) | 644 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT)}, 645 {ETH_RSS_IPV6_PRE32_UDP | ETH_RSS_L3_SRC_ONLY, 646 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_SA)}, 647 {ETH_RSS_IPV6_PRE32_UDP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, 648 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_DA) | 649 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT)}, 650 {ETH_RSS_IPV6_PRE32_UDP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, 651 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_DA) | 652 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT)}, 653 {ETH_RSS_IPV6_PRE32_UDP | ETH_RSS_L3_DST_ONLY, 654 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_DA)}, 655 {ETH_RSS_IPV6_PRE32_UDP | ETH_RSS_L4_SRC_ONLY, 656 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT)}, 657 {ETH_RSS_IPV6_PRE32_UDP | ETH_RSS_L4_DST_ONLY, 658 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT)}, 659 {ETH_RSS_IPV6_PRE32_UDP, ICE_HASH_UDP_IPV6_PRE32}, 660 {ETH_RSS_IPV6_PRE48_UDP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, 661 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_SA) | 662 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT)}, 663 {ETH_RSS_IPV6_PRE48_UDP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, 664 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_SA) | 665 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT)}, 666 {ETH_RSS_IPV6_PRE48_UDP | ETH_RSS_L3_SRC_ONLY, 667 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_SA)}, 668 {ETH_RSS_IPV6_PRE48_UDP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, 669 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_DA) | 670 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT)}, 671 {ETH_RSS_IPV6_PRE48_UDP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, 672 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_DA) | 673 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT)}, 674 {ETH_RSS_IPV6_PRE48_UDP | ETH_RSS_L3_DST_ONLY, 675 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_DA)}, 676 {ETH_RSS_IPV6_PRE48_UDP | ETH_RSS_L4_SRC_ONLY, 677 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT)}, 678 {ETH_RSS_IPV6_PRE48_UDP | ETH_RSS_L4_DST_ONLY, 679 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT)}, 680 {ETH_RSS_IPV6_PRE48_UDP, ICE_HASH_UDP_IPV6_PRE48}, 681 {ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, 682 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_SA) | 683 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT)}, 684 {ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, 685 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_SA) | 686 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT)}, 687 {ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L3_SRC_ONLY, 688 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_SA)}, 689 {ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, 690 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_DA) | 691 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT)}, 692 {ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, 693 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_DA) | 694 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT)}, 695 {ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L3_DST_ONLY, 696 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_DA)}, 697 {ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L4_SRC_ONLY, 698 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT)}, 699 {ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L4_DST_ONLY, 700 BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT)}, 701 {ETH_RSS_IPV6_PRE64_UDP, ICE_HASH_UDP_IPV6_PRE64}, 702 {ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, 703 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_SA) | 704 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT) | 705 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT)}, 706 {ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, 707 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_SA) | 708 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT) | 709 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT)}, 710 {ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_L3_SRC_ONLY, 711 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_SA)}, 712 {ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, 713 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_DA) | 714 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT) | 715 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT)}, 716 {ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, 717 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_DA) | 718 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT) | 719 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT)}, 720 {ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_L3_DST_ONLY, 721 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_DA)}, 722 {ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_L4_SRC_ONLY, 723 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT) | 724 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT)}, 725 {ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_L4_DST_ONLY, 726 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT) | 727 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT)}, 728 {ETH_RSS_NONFRAG_IPV6_TCP, 729 ICE_HASH_TCP_IPV6 | 730 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT)}, 731 {ETH_RSS_IPV6_PRE32_TCP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, 732 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_SA) | 733 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT)}, 734 {ETH_RSS_IPV6_PRE32_TCP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, 735 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_SA) | 736 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT)}, 737 {ETH_RSS_IPV6_PRE32_TCP | ETH_RSS_L3_SRC_ONLY, 738 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_SA)}, 739 {ETH_RSS_IPV6_PRE32_TCP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, 740 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_DA) | 741 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT)}, 742 {ETH_RSS_IPV6_PRE32_TCP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, 743 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_DA) | 744 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT)}, 745 {ETH_RSS_IPV6_PRE32_TCP | ETH_RSS_L3_DST_ONLY, 746 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_DA)}, 747 {ETH_RSS_IPV6_PRE32_TCP | ETH_RSS_L4_SRC_ONLY, 748 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT)}, 749 {ETH_RSS_IPV6_PRE32_TCP | ETH_RSS_L4_DST_ONLY, 750 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT)}, 751 {ETH_RSS_IPV6_PRE32_TCP, ICE_HASH_TCP_IPV6_PRE32}, 752 {ETH_RSS_IPV6_PRE48_TCP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, 753 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_SA) | 754 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT)}, 755 {ETH_RSS_IPV6_PRE48_TCP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, 756 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_SA) | 757 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT)}, 758 {ETH_RSS_IPV6_PRE48_TCP | ETH_RSS_L3_SRC_ONLY, 759 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_SA)}, 760 {ETH_RSS_IPV6_PRE48_TCP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, 761 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_DA) | 762 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT)}, 763 {ETH_RSS_IPV6_PRE48_TCP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, 764 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_DA) | 765 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT)}, 766 {ETH_RSS_IPV6_PRE48_TCP | ETH_RSS_L3_DST_ONLY, 767 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_DA)}, 768 {ETH_RSS_IPV6_PRE48_TCP | ETH_RSS_L4_SRC_ONLY, 769 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT)}, 770 {ETH_RSS_IPV6_PRE48_TCP | ETH_RSS_L4_DST_ONLY, 771 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT)}, 772 {ETH_RSS_IPV6_PRE48_TCP, ICE_HASH_TCP_IPV6_PRE48}, 773 {ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, 774 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_SA) | 775 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT)}, 776 {ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, 777 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_SA) | 778 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT)}, 779 {ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L3_SRC_ONLY, 780 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_SA)}, 781 {ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, 782 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_DA) | 783 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT)}, 784 {ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, 785 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_DA) | 786 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT)}, 787 {ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L3_DST_ONLY, 788 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_DA)}, 789 {ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L4_SRC_ONLY, 790 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT)}, 791 {ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L4_DST_ONLY, 792 BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT)}, 793 {ETH_RSS_IPV6_PRE64_TCP, ICE_HASH_TCP_IPV6_PRE64}, 794 {ETH_RSS_NONFRAG_IPV6_SCTP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, 795 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_SA) | 796 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT) | 797 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT)}, 798 {ETH_RSS_NONFRAG_IPV6_SCTP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, 799 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_SA) | 800 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT) | 801 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT)}, 802 {ETH_RSS_NONFRAG_IPV6_SCTP | ETH_RSS_L3_SRC_ONLY, 803 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_SA)}, 804 {ETH_RSS_NONFRAG_IPV6_SCTP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, 805 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_DA) | 806 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT) | 807 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT)}, 808 {ETH_RSS_NONFRAG_IPV6_SCTP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, 809 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_DA) | 810 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT) | 811 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT)}, 812 {ETH_RSS_NONFRAG_IPV6_SCTP | ETH_RSS_L3_DST_ONLY, 813 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_DA)}, 814 {ETH_RSS_NONFRAG_IPV6_SCTP | ETH_RSS_L4_SRC_ONLY, 815 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT) | 816 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT)}, 817 {ETH_RSS_NONFRAG_IPV6_SCTP | ETH_RSS_L4_DST_ONLY, 818 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT) | 819 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT)}, 820 {ETH_RSS_NONFRAG_IPV6_SCTP, 821 ICE_HASH_SCTP_IPV6 | 822 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT)}, 823 {ETH_RSS_IPV6_PRE32_SCTP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, 824 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_SA) | 825 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT)}, 826 {ETH_RSS_IPV6_PRE32_SCTP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, 827 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_SA) | 828 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT)}, 829 {ETH_RSS_IPV6_PRE32_SCTP | ETH_RSS_L3_SRC_ONLY, 830 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_SA)}, 831 {ETH_RSS_IPV6_PRE32_SCTP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, 832 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_DA) | 833 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT)}, 834 {ETH_RSS_IPV6_PRE32_SCTP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, 835 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_DA) | 836 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT)}, 837 {ETH_RSS_IPV6_PRE32_SCTP | ETH_RSS_L3_DST_ONLY, 838 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_DA)}, 839 {ETH_RSS_IPV6_PRE32_SCTP | ETH_RSS_L4_SRC_ONLY, 840 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT)}, 841 {ETH_RSS_IPV6_PRE32_SCTP | ETH_RSS_L4_DST_ONLY, 842 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT)}, 843 {ETH_RSS_IPV6_PRE32_SCTP, ICE_HASH_SCTP_IPV6_PRE32}, 844 {ETH_RSS_IPV6_PRE48_SCTP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, 845 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_SA) | 846 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT)}, 847 {ETH_RSS_IPV6_PRE48_SCTP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, 848 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_SA) | 849 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT)}, 850 {ETH_RSS_IPV6_PRE48_SCTP | ETH_RSS_L3_SRC_ONLY, 851 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_SA)}, 852 {ETH_RSS_IPV6_PRE48_SCTP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, 853 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_DA) | 854 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT)}, 855 {ETH_RSS_IPV6_PRE48_SCTP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, 856 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_DA) | 857 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT)}, 858 {ETH_RSS_IPV6_PRE48_SCTP | ETH_RSS_L3_DST_ONLY, 859 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_DA)}, 860 {ETH_RSS_IPV6_PRE48_SCTP | ETH_RSS_L4_SRC_ONLY, 861 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT)}, 862 {ETH_RSS_IPV6_PRE48_SCTP | ETH_RSS_L4_DST_ONLY, 863 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT)}, 864 {ETH_RSS_IPV6_PRE48_SCTP, ICE_HASH_SCTP_IPV6_PRE48}, 865 {ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, 866 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_SA) | 867 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT)}, 868 {ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, 869 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_SA) | 870 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT)}, 871 {ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L3_SRC_ONLY, 872 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_SA)}, 873 {ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, 874 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_DA) | 875 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT)}, 876 {ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, 877 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_DA) | 878 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT)}, 879 {ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L3_DST_ONLY, 880 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_DA)}, 881 {ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L4_SRC_ONLY, 882 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT)}, 883 {ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L4_DST_ONLY, 884 BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT)}, 885 {ETH_RSS_IPV6_PRE64_SCTP, ICE_HASH_SCTP_IPV6_PRE64}, 886 }; 887 888 static struct ice_flow_engine ice_hash_engine = { 889 .init = ice_hash_init, 890 .create = ice_hash_create, 891 .destroy = ice_hash_destroy, 892 .uninit = ice_hash_uninit, 893 .free = ice_hash_free, 894 .type = ICE_FLOW_ENGINE_HASH, 895 }; 896 897 /* Register parser for os package. */ 898 static struct ice_flow_parser ice_hash_parser_os = { 899 .engine = &ice_hash_engine, 900 .array = ice_hash_pattern_list_os, 901 .array_len = RTE_DIM(ice_hash_pattern_list_os), 902 .parse_pattern_action = ice_hash_parse_pattern_action, 903 .stage = ICE_FLOW_STAGE_RSS, 904 }; 905 906 /* Register parser for comms package. */ 907 static struct ice_flow_parser ice_hash_parser_comms = { 908 .engine = &ice_hash_engine, 909 .array = ice_hash_pattern_list_comms, 910 .array_len = RTE_DIM(ice_hash_pattern_list_comms), 911 .parse_pattern_action = ice_hash_parse_pattern_action, 912 .stage = ICE_FLOW_STAGE_RSS, 913 }; 914 915 RTE_INIT(ice_hash_engine_init) 916 { 917 struct ice_flow_engine *engine = &ice_hash_engine; 918 ice_register_flow_engine(engine); 919 } 920 921 static int 922 ice_hash_init(struct ice_adapter *ad) 923 { 924 struct ice_flow_parser *parser = NULL; 925 926 if (ad->hw.dcf_enabled) 927 return 0; 928 929 if (ad->active_pkg_type == ICE_PKG_TYPE_OS_DEFAULT) 930 parser = &ice_hash_parser_os; 931 else if (ad->active_pkg_type == ICE_PKG_TYPE_COMMS) 932 parser = &ice_hash_parser_comms; 933 else 934 return -EINVAL; 935 936 return ice_register_parser(parser, ad); 937 } 938 939 static int 940 ice_hash_parse_pattern(struct ice_pattern_match_item *pattern_match_item, 941 const struct rte_flow_item pattern[], void **meta, 942 struct rte_flow_error *error) 943 { 944 uint32_t hdr_mask = ((struct rss_type_match_hdr *) 945 (pattern_match_item->meta))->hdr_mask; 946 const struct rte_flow_item *item = pattern; 947 const struct rte_flow_item_gtp_psc *psc; 948 uint32_t hdrs = 0; 949 950 for (item = pattern; item->type != RTE_FLOW_ITEM_TYPE_END; item++) { 951 if (item->last) { 952 rte_flow_error_set(error, EINVAL, 953 RTE_FLOW_ERROR_TYPE_ITEM, item, 954 "Not support range"); 955 return -rte_errno; 956 } 957 958 switch (item->type) { 959 case RTE_FLOW_ITEM_TYPE_GTPU: 960 hdrs |= ICE_FLOW_SEG_HDR_GTPU_IP; 961 break; 962 case RTE_FLOW_ITEM_TYPE_GTP_PSC: 963 psc = item->spec; 964 hdr_mask &= ~ICE_FLOW_SEG_HDR_GTPU_EH; 965 hdrs &= ~ICE_FLOW_SEG_HDR_GTPU_IP; 966 if (!psc) 967 hdrs |= ICE_FLOW_SEG_HDR_GTPU_EH; 968 else if (psc->pdu_type == ICE_GTPU_EH_UPLINK) 969 hdrs |= ICE_FLOW_SEG_HDR_GTPU_UP; 970 else if (psc->pdu_type == ICE_GTPU_EH_DWNLINK) 971 hdrs |= ICE_FLOW_SEG_HDR_GTPU_DWN; 972 break; 973 default: 974 break; 975 } 976 } 977 978 /* Save protocol header to rss_meta. */ 979 ((struct rss_meta *)*meta)->pkt_hdr |= hdr_mask | hdrs; 980 981 return 0; 982 } 983 984 static int 985 ice_hash_parse_action(struct ice_pattern_match_item *pattern_match_item, 986 const struct rte_flow_action actions[], 987 void **meta, 988 struct rte_flow_error *error) 989 { 990 struct rss_type_match_hdr *m = (struct rss_type_match_hdr *) 991 (pattern_match_item->meta); 992 struct rss_meta *hash_meta = (struct rss_meta *)*meta; 993 uint32_t type_list_len = RTE_DIM(ice_hash_type_list); 994 enum rte_flow_action_type action_type; 995 const struct rte_flow_action_rss *rss; 996 const struct rte_flow_action *action; 997 uint64_t rss_attr_src_dst; 998 uint64_t rss_attr_l3_pre; 999 uint64_t rss_attr_all; 1000 uint64_t rss_type; 1001 uint16_t i; 1002 1003 /* Supported action is RSS. */ 1004 for (action = actions; action->type != 1005 RTE_FLOW_ACTION_TYPE_END; action++) { 1006 action_type = action->type; 1007 switch (action_type) { 1008 case RTE_FLOW_ACTION_TYPE_RSS: 1009 rss = action->conf; 1010 rss_type = rss->types; 1011 1012 /* Check hash function and save it to rss_meta. */ 1013 if (pattern_match_item->pattern_list != 1014 pattern_empty && rss->func == 1015 RTE_ETH_HASH_FUNCTION_SIMPLE_XOR) { 1016 return rte_flow_error_set(error, ENOTSUP, 1017 RTE_FLOW_ERROR_TYPE_ACTION, action, 1018 "Not supported flow"); 1019 } else if (rss->func == 1020 RTE_ETH_HASH_FUNCTION_SIMPLE_XOR){ 1021 ((struct rss_meta *)*meta)->hash_function = 1022 RTE_ETH_HASH_FUNCTION_SIMPLE_XOR; 1023 return 0; 1024 } else if (rss->func == 1025 RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ) { 1026 ((struct rss_meta *)*meta)->hash_function = 1027 RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ; 1028 } 1029 1030 if (rss->level) 1031 return rte_flow_error_set(error, ENOTSUP, 1032 RTE_FLOW_ERROR_TYPE_ACTION, action, 1033 "a nonzero RSS encapsulation level is not supported"); 1034 1035 if (rss->key_len) 1036 return rte_flow_error_set(error, ENOTSUP, 1037 RTE_FLOW_ERROR_TYPE_ACTION, action, 1038 "a nonzero RSS key_len is not supported"); 1039 1040 if (rss->queue) 1041 return rte_flow_error_set(error, ENOTSUP, 1042 RTE_FLOW_ERROR_TYPE_ACTION, action, 1043 "a non-NULL RSS queue is not supported"); 1044 1045 /** 1046 * Check simultaneous use of SRC_ONLY and DST_ONLY 1047 * of the same level. 1048 */ 1049 rss_type = rte_eth_rss_hf_refine(rss_type); 1050 1051 rss_attr_src_dst = ETH_RSS_L2_SRC_ONLY | 1052 ETH_RSS_L2_DST_ONLY | 1053 ETH_RSS_L3_SRC_ONLY | 1054 ETH_RSS_L3_DST_ONLY | 1055 ETH_RSS_L4_SRC_ONLY | 1056 ETH_RSS_L4_DST_ONLY; 1057 1058 rss_attr_l3_pre = RTE_ETH_RSS_L3_PRE32 | 1059 RTE_ETH_RSS_L3_PRE48 | 1060 RTE_ETH_RSS_L3_PRE64; 1061 1062 rss_attr_all = rss_attr_src_dst | rss_attr_l3_pre; 1063 1064 /* Check if only SRC/DST_ONLY or ipv6 prefix exists. */ 1065 if ((rss_type & ~rss_attr_all) == 0) 1066 return rte_flow_error_set(error, ENOTSUP, 1067 RTE_FLOW_ERROR_TYPE_ACTION, action, 1068 "invalid rss types"); 1069 1070 /** 1071 * Check if SRC/DST_ONLY is set for SYMMETRIC_TOEPLITZ 1072 * hash function. 1073 */ 1074 if (rss->func == 1075 RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ) { 1076 if (rss_type & rss_attr_src_dst) 1077 return rte_flow_error_set(error, 1078 ENOTSUP, 1079 RTE_FLOW_ERROR_TYPE_ACTION, 1080 action, 1081 "invalid rss types"); 1082 } 1083 1084 /* Check if rss types match pattern. */ 1085 if (rss_type & ~rss_attr_all & ~m->eth_rss_hint) { 1086 return rte_flow_error_set(error, 1087 ENOTSUP, RTE_FLOW_ERROR_TYPE_ACTION, 1088 action, "Not supported RSS types"); 1089 } 1090 1091 /* Find matched hash fields according to hash type. */ 1092 for (i = 0; i < type_list_len; i++) { 1093 struct ice_hash_match_type *ht_map = 1094 &ice_hash_type_list[i]; 1095 1096 if (rss_type == ht_map->hash_type) { 1097 hash_meta->hash_flds = 1098 ht_map->hash_flds; 1099 break; 1100 } 1101 } 1102 1103 /* update hash field for nat-t esp. */ 1104 if (rss_type == ETH_RSS_ESP && 1105 (m->eth_rss_hint & ETH_RSS_NONFRAG_IPV4_UDP || 1106 m->eth_rss_hint & ETH_RSS_NONFRAG_IPV6_UDP)) { 1107 hash_meta->hash_flds &= 1108 ~(BIT_ULL(ICE_FLOW_FIELD_IDX_ESP_SPI)); 1109 hash_meta->hash_flds |= 1110 BIT_ULL(ICE_FLOW_FIELD_IDX_NAT_T_ESP_SPI); 1111 } 1112 1113 /* update hash field for gtpu-ip and gtpu-eh. */ 1114 if (rss_type != ETH_RSS_GTPU) 1115 break; 1116 else if (hash_meta->pkt_hdr & ICE_FLOW_SEG_HDR_GTPU_IP) 1117 hash_meta->hash_flds |= 1118 BIT_ULL(ICE_FLOW_FIELD_IDX_GTPU_IP_TEID); 1119 else if (hash_meta->pkt_hdr & ICE_FLOW_SEG_HDR_GTPU_EH) 1120 hash_meta->hash_flds |= 1121 BIT_ULL(ICE_FLOW_FIELD_IDX_GTPU_EH_TEID); 1122 else if (hash_meta->pkt_hdr & ICE_FLOW_SEG_HDR_GTPU_DWN) 1123 hash_meta->hash_flds |= 1124 BIT_ULL(ICE_FLOW_FIELD_IDX_GTPU_DWN_TEID); 1125 else if (hash_meta->pkt_hdr & ICE_FLOW_SEG_HDR_GTPU_UP) 1126 hash_meta->hash_flds |= 1127 BIT_ULL(ICE_FLOW_FIELD_IDX_GTPU_UP_TEID); 1128 1129 break; 1130 1131 case RTE_FLOW_ACTION_TYPE_END: 1132 break; 1133 1134 default: 1135 rte_flow_error_set(error, EINVAL, 1136 RTE_FLOW_ERROR_TYPE_ACTION, action, 1137 "Invalid action."); 1138 return -rte_errno; 1139 } 1140 } 1141 1142 return 0; 1143 } 1144 1145 static int 1146 ice_hash_parse_pattern_action(__rte_unused struct ice_adapter *ad, 1147 struct ice_pattern_match_item *array, 1148 uint32_t array_len, 1149 const struct rte_flow_item pattern[], 1150 const struct rte_flow_action actions[], 1151 void **meta, 1152 struct rte_flow_error *error) 1153 { 1154 int ret = 0; 1155 struct ice_pattern_match_item *pattern_match_item; 1156 struct rss_meta *rss_meta_ptr; 1157 1158 rss_meta_ptr = rte_zmalloc(NULL, sizeof(*rss_meta_ptr), 0); 1159 if (!rss_meta_ptr) { 1160 rte_flow_error_set(error, EINVAL, 1161 RTE_FLOW_ERROR_TYPE_HANDLE, NULL, 1162 "No memory for rss_meta_ptr"); 1163 return -ENOMEM; 1164 } 1165 1166 /* Check rss supported pattern and find matched pattern. */ 1167 pattern_match_item = ice_search_pattern_match_item(pattern, 1168 array, array_len, error); 1169 if (!pattern_match_item) { 1170 ret = -rte_errno; 1171 goto error; 1172 } 1173 1174 ret = ice_hash_parse_pattern(pattern_match_item, pattern, 1175 (void **)&rss_meta_ptr, error); 1176 if (ret) 1177 goto error; 1178 1179 /* Check rss action. */ 1180 ret = ice_hash_parse_action(pattern_match_item, actions, 1181 (void **)&rss_meta_ptr, error); 1182 1183 error: 1184 if (!ret && meta) 1185 *meta = rss_meta_ptr; 1186 else 1187 rte_free(rss_meta_ptr); 1188 rte_free(pattern_match_item); 1189 1190 return ret; 1191 } 1192 1193 static int 1194 ice_hash_create(struct ice_adapter *ad, 1195 struct rte_flow *flow, 1196 void *meta, 1197 struct rte_flow_error *error) 1198 { 1199 struct ice_pf *pf = &ad->pf; 1200 struct ice_hw *hw = ICE_PF_TO_HW(pf); 1201 struct ice_vsi *vsi = pf->main_vsi; 1202 int ret; 1203 uint32_t reg; 1204 struct ice_hash_flow_cfg *filter_ptr; 1205 1206 uint32_t headermask = ((struct rss_meta *)meta)->pkt_hdr; 1207 uint64_t hash_field = ((struct rss_meta *)meta)->hash_flds; 1208 uint8_t hash_function = ((struct rss_meta *)meta)->hash_function; 1209 1210 filter_ptr = rte_zmalloc("ice_rss_filter", 1211 sizeof(struct ice_hash_flow_cfg), 0); 1212 if (!filter_ptr) { 1213 rte_flow_error_set(error, EINVAL, 1214 RTE_FLOW_ERROR_TYPE_HANDLE, NULL, 1215 "No memory for filter_ptr"); 1216 return -ENOMEM; 1217 } 1218 1219 if (hash_function == RTE_ETH_HASH_FUNCTION_SIMPLE_XOR) { 1220 /* Enable registers for simple_xor hash function. */ 1221 reg = ICE_READ_REG(hw, VSIQF_HASH_CTL(vsi->vsi_id)); 1222 reg = (reg & (~VSIQF_HASH_CTL_HASH_SCHEME_M)) | 1223 (2 << VSIQF_HASH_CTL_HASH_SCHEME_S); 1224 ICE_WRITE_REG(hw, VSIQF_HASH_CTL(vsi->vsi_id), reg); 1225 1226 filter_ptr->simple_xor = 1; 1227 1228 goto out; 1229 } else { 1230 filter_ptr->rss_cfg.packet_hdr = headermask; 1231 filter_ptr->rss_cfg.hashed_flds = hash_field; 1232 filter_ptr->rss_cfg.symm = 1233 (hash_function == 1234 RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ); 1235 1236 ret = ice_add_rss_cfg(hw, vsi->idx, 1237 filter_ptr->rss_cfg.hashed_flds, 1238 filter_ptr->rss_cfg.packet_hdr, 1239 filter_ptr->rss_cfg.symm); 1240 if (ret) { 1241 rte_flow_error_set(error, EINVAL, 1242 RTE_FLOW_ERROR_TYPE_HANDLE, NULL, 1243 "rss flow create fail"); 1244 goto error; 1245 } 1246 } 1247 1248 out: 1249 flow->rule = filter_ptr; 1250 rte_free(meta); 1251 return 0; 1252 1253 error: 1254 rte_free(filter_ptr); 1255 rte_free(meta); 1256 return -rte_errno; 1257 } 1258 1259 static int 1260 ice_hash_destroy(struct ice_adapter *ad, 1261 struct rte_flow *flow, 1262 struct rte_flow_error *error) 1263 { 1264 struct ice_pf *pf = ICE_DEV_PRIVATE_TO_PF(ad); 1265 struct ice_hw *hw = ICE_PF_TO_HW(pf); 1266 struct ice_vsi *vsi = pf->main_vsi; 1267 int ret; 1268 uint32_t reg; 1269 struct ice_hash_flow_cfg *filter_ptr; 1270 1271 filter_ptr = (struct ice_hash_flow_cfg *)flow->rule; 1272 1273 if (filter_ptr->simple_xor == 1) { 1274 /* Return to symmetric_toeplitz state. */ 1275 reg = ICE_READ_REG(hw, VSIQF_HASH_CTL(vsi->vsi_id)); 1276 reg = (reg & (~VSIQF_HASH_CTL_HASH_SCHEME_M)) | 1277 (1 << VSIQF_HASH_CTL_HASH_SCHEME_S); 1278 ICE_WRITE_REG(hw, VSIQF_HASH_CTL(vsi->vsi_id), reg); 1279 } else { 1280 ret = ice_rem_rss_cfg(hw, vsi->idx, 1281 filter_ptr->rss_cfg.hashed_flds, 1282 filter_ptr->rss_cfg.packet_hdr); 1283 /* Fixme: Ignore the error if a rule does not exist. 1284 * Currently a rule for inputset change or symm turn on/off 1285 * will overwrite an exist rule, while application still 1286 * have 2 rte_flow handles. 1287 **/ 1288 if (ret && ret != ICE_ERR_DOES_NOT_EXIST) { 1289 rte_flow_error_set(error, EINVAL, 1290 RTE_FLOW_ERROR_TYPE_HANDLE, NULL, 1291 "rss flow destroy fail"); 1292 goto error; 1293 } 1294 } 1295 1296 rte_free(filter_ptr); 1297 return 0; 1298 1299 error: 1300 rte_free(filter_ptr); 1301 return -rte_errno; 1302 } 1303 1304 static void 1305 ice_hash_uninit(struct ice_adapter *ad) 1306 { 1307 if (ad->hw.dcf_enabled) 1308 return; 1309 1310 if (ad->active_pkg_type == ICE_PKG_TYPE_OS_DEFAULT) 1311 ice_unregister_parser(&ice_hash_parser_os, ad); 1312 else if (ad->active_pkg_type == ICE_PKG_TYPE_COMMS) 1313 ice_unregister_parser(&ice_hash_parser_comms, ad); 1314 } 1315 1316 static void 1317 ice_hash_free(struct rte_flow *flow) 1318 { 1319 rte_free(flow->rule); 1320 } 1321