net/ice/base: specify global RSS LUT id in get/set RSS LUT
[dpdk.git] / drivers / net / ice / base / ice_fdir.c
index a62e6ee..aeff7af 100644 (file)
@@ -89,6 +89,37 @@ static const u8 ice_fdir_icmp4_gtpu4_pkt[] = {
 };
 
 static const u8 ice_fdir_ipv4_gtpu4_pkt[] = {
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
+       0x00, 0x44, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x08, 0x68, 0x08, 0x68, 0x00, 0x00,
+       0x00, 0x00, 0x33, 0xff, 0x00, 0x20, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x45, 0x00,
+       0x00, 0x14, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00,
+};
+
+static const u8 ice_fdir_ipv6_gtpu6_pkt[] = {
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x86, 0xdd, 0x60, 0x00,
+       0x00, 0x00, 0x00, 0x44, 0x11, 0x40, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x68,
+       0x08, 0x68, 0x00, 0x44, 0x7f, 0xed, 0x33, 0xff,
+       0x00, 0x34, 0x12, 0x34, 0x56, 0x78, 0x00, 0x00,
+       0x00, 0x85, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x3b, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00,
+};
+
+static const u8 ice_fdir_ipv4_gtpu4_eh_pkt[] = {
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
        0x00, 0x44, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
@@ -102,6 +133,25 @@ static const u8 ice_fdir_ipv4_gtpu4_pkt[] = {
        0x00, 0x00,
 };
 
+static const u8 ice_fdir_ipv6_gtpu6_eh_pkt[] = {
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x86, 0xdd, 0x60, 0x00,
+       0x00, 0x00, 0x00, 0x44, 0x11, 0x40, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x68,
+       0x08, 0x68, 0x00, 0x44, 0x7f, 0xed, 0x34, 0xff,
+       0x00, 0x34, 0x12, 0x34, 0x56, 0x78, 0x00, 0x00,
+       0x00, 0x85, 0x02, 0x00, 0x33, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x3b, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00,
+};
+
 static const u8 ice_fdir_ipv4_l2tpv3_pkt[] = {
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
@@ -466,6 +516,27 @@ static const struct ice_fdir_base_pkt ice_fdir_pkt[] = {
                sizeof(ice_fdir_ipv4_gtpu4_pkt),
                ice_fdir_ipv4_gtpu4_pkt,
        },
+       {
+               ICE_FLTR_PTYPE_NONF_IPV6_GTPU_IPV6_OTHER,
+               sizeof(ice_fdir_ipv6_gtpu6_pkt),
+               ice_fdir_ipv6_gtpu6_pkt,
+               sizeof(ice_fdir_ipv6_gtpu6_pkt),
+               ice_fdir_ipv6_gtpu6_pkt,
+       },
+       {
+               ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_OTHER,
+               sizeof(ice_fdir_ipv4_gtpu4_eh_pkt),
+               ice_fdir_ipv4_gtpu4_eh_pkt,
+               sizeof(ice_fdir_ipv4_gtpu4_eh_pkt),
+               ice_fdir_ipv4_gtpu4_eh_pkt,
+       },
+       {
+               ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_IPV6_OTHER,
+               sizeof(ice_fdir_ipv6_gtpu6_eh_pkt),
+               ice_fdir_ipv6_gtpu6_eh_pkt,
+               sizeof(ice_fdir_ipv6_gtpu6_eh_pkt),
+               ice_fdir_ipv6_gtpu6_eh_pkt,
+       },
        {
                ICE_FLTR_PTYPE_NONF_IPV4_L2TPV3,
                sizeof(ice_fdir_ipv4_l2tpv3_pkt), ice_fdir_ipv4_l2tpv3_pkt,
@@ -571,8 +642,7 @@ static const struct ice_fdir_base_pkt ice_fdir_pkt[] = {
  * ice_set_dflt_val_fd_desc
  * @fd_fltr_ctx: pointer to fd filter descriptor
  */
-void
-ice_set_dflt_val_fd_desc(struct ice_fd_fltr_desc_ctx *fd_fltr_ctx)
+static void ice_set_dflt_val_fd_desc(struct ice_fd_fltr_desc_ctx *fd_fltr_ctx)
 {
        fd_fltr_ctx->comp_q = ICE_FXD_FLTR_QW0_COMP_Q_ZERO;
        fd_fltr_ctx->comp_report = ICE_FXD_FLTR_QW0_COMP_REPORT_SW_FAIL;
@@ -681,7 +751,7 @@ ice_fdir_get_prgm_desc(struct ice_hw *hw, struct ice_fdir_fltr *input,
                fdir_fltr_ctx.drop = ICE_FXD_FLTR_QW0_DROP_YES;
                fdir_fltr_ctx.qindex = 0;
        } else if (input->dest_ctl ==
-                       ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_OTHER) {
+                  ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_OTHER) {
                fdir_fltr_ctx.drop = ICE_FXD_FLTR_QW0_DROP_NO;
                fdir_fltr_ctx.qindex = 0;
        } else {
@@ -987,6 +1057,14 @@ ice_fdir_get_gen_prgm_pkt(struct ice_hw *hw, struct ice_fdir_fltr *input,
                        loc[20] = ICE_FDIR_IPV4_PKT_FLAG_DF;
                break;
        case ICE_FLTR_PTYPE_NONF_IPV4_UDP:
+               ice_pkt_insert_mac_addr(pkt, input->ext_data_outer.dst_mac);
+               ice_pkt_insert_mac_addr(pkt + ETH_ALEN,
+                                       input->ext_data_outer.src_mac);
+               ice_pkt_insert_u32(pkt, ICE_IPV4_SRC_ADDR_OFFSET,
+                                  input->ip_outer.v4.dst_ip);
+               ice_pkt_insert_u32(pkt, ICE_IPV4_DST_ADDR_OFFSET,
+                                  input->ip_outer.v4.src_ip);
+               ice_pkt_insert_u8(pkt, ICE_IPV4_TOS_OFFSET, input->ip_outer.v4.tos);
                ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
                                   input->ip.v4.src_ip);
                ice_pkt_insert_u16(loc, ICE_IPV4_UDP_DST_PORT_OFFSET,
@@ -998,6 +1076,7 @@ ice_fdir_get_gen_prgm_pkt(struct ice_hw *hw, struct ice_fdir_fltr *input,
                ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
                ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
                ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
+               ice_pkt_insert_mac_addr(loc + ETH_ALEN, input->ext_data.src_mac);
                break;
        case ICE_FLTR_PTYPE_NONF_IPV4_SCTP:
                ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
@@ -1023,19 +1102,45 @@ ice_fdir_get_gen_prgm_pkt(struct ice_hw *hw, struct ice_fdir_fltr *input,
                                  input->ip.v4.proto);
                ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
                break;
+       case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_OTHER:
+               ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
+                                  input->ip.v4.src_ip);
+               ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
+                                  input->ip.v4.dst_ip);
+               ice_pkt_insert_u32(loc, ICE_IPV4_GTPU_TEID_OFFSET,
+                                  input->gtpu_data.teid);
+               break;
        case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_UDP:
        case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_TCP:
        case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_ICMP:
-       case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_OTHER:
-               ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
-                                       input->ip.v4.src_ip);
+       case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_OTHER:
                ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
-                                       input->ip.v4.dst_ip);
+                                  input->ip.v4.src_ip);
+               ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
+                                  input->ip.v4.dst_ip);
                ice_pkt_insert_u32(loc, ICE_IPV4_GTPU_TEID_OFFSET,
                                   input->gtpu_data.teid);
                ice_pkt_insert_u6_qfi(loc, ICE_IPV4_GTPU_QFI_OFFSET,
                                      input->gtpu_data.qfi);
                break;
+       case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_IPV6_OTHER:
+               ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
+                                        input->ip.v6.src_ip);
+               ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
+                                        input->ip.v6.dst_ip);
+               ice_pkt_insert_u32(loc, ICE_IPV6_GTPU_TEID_OFFSET,
+                                  input->gtpu_data.teid);
+               break;
+       case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_IPV6_OTHER:
+               ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
+                                        input->ip.v6.src_ip);
+               ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
+                                        input->ip.v6.dst_ip);
+               ice_pkt_insert_u32(loc, ICE_IPV6_GTPU_TEID_OFFSET,
+                                  input->gtpu_data.teid);
+               ice_pkt_insert_u6_qfi(loc, ICE_IPV6_GTPU_QFI_OFFSET,
+                                     input->gtpu_data.qfi);
+               break;
        case ICE_FLTR_PTYPE_NONF_IPV4_L2TPV3:
                ice_pkt_insert_u32(loc, ICE_IPV4_L2TPV3_SESS_ID_OFFSET,
                                   input->l2tpv3_data.session_id);
@@ -1353,27 +1458,6 @@ bool ice_fdir_is_dup_fltr(struct ice_hw *hw, struct ice_fdir_fltr *input)
        return ret;
 }
 
-/**
- * ice_clear_vsi_fd_table - admin command to clear FD table for a VSI
- * @hw: hardware data structure
- * @vsi_num: vsi_num (HW VSI num)
- *
- * Clears FD table entries by issuing admin command (direct, 0x0B06)
- * Must to pass valid vsi_num as returned by "AddVSI".
- */
-enum ice_status ice_clear_vsi_fd_table(struct ice_hw *hw, u16 vsi_num)
-{
-       struct ice_aqc_clear_fd_table *cmd;
-       struct ice_aq_desc desc;
-
-       cmd = &desc.params.clear_fd_table;
-       ice_fill_dflt_direct_cmd_desc(&desc, ice_aqc_opc_clear_fd_table);
-       cmd->clear_type = CL_FD_VM_VF_TYPE_VSI_IDX;
-
-       cmd->vsi_index = CPU_TO_LE16(vsi_num);
-       return ice_aq_send_cmd(hw, &desc, NULL, 0, NULL);
-}
-
 /**
  * ice_clear_pf_fd_table - admin command to clear FD table for PF
  * @hw: hardware data structure