diff options
Diffstat (limited to 'drivers/net/ethernet/intel/ice/ice_flow.h')
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_flow.h | 166 | 
1 files changed, 165 insertions, 1 deletions
| diff --git a/drivers/net/ethernet/intel/ice/ice_flow.h b/drivers/net/ethernet/intel/ice/ice_flow.h index 829f90b1e998..2a2d8c1536cb 100644 --- a/drivers/net/ethernet/intel/ice/ice_flow.h +++ b/drivers/net/ethernet/intel/ice/ice_flow.h @@ -8,6 +8,9 @@  #define ICE_FLOW_FLD_OFF_INVAL		0xffff  /* Generate flow hash field from flow field type(s) */ +#define ICE_FLOW_HASH_ETH	\ +	(BIT_ULL(ICE_FLOW_FIELD_IDX_ETH_DA) | \ +	 BIT_ULL(ICE_FLOW_FIELD_IDX_ETH_SA))  #define ICE_FLOW_HASH_IPV4	\  	(BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA) | \  	 BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA)) @@ -30,6 +33,80 @@  #define ICE_HASH_UDP_IPV4	(ICE_FLOW_HASH_IPV4 | ICE_FLOW_HASH_UDP_PORT)  #define ICE_HASH_UDP_IPV6	(ICE_FLOW_HASH_IPV6 | ICE_FLOW_HASH_UDP_PORT) +#define ICE_FLOW_HASH_GTP_TEID \ +	(BIT_ULL(ICE_FLOW_FIELD_IDX_GTPC_TEID)) + +#define ICE_FLOW_HASH_GTP_IPV4_TEID \ +	(ICE_FLOW_HASH_IPV4 | ICE_FLOW_HASH_GTP_TEID) +#define ICE_FLOW_HASH_GTP_IPV6_TEID \ +	(ICE_FLOW_HASH_IPV6 | ICE_FLOW_HASH_GTP_TEID) + +#define ICE_FLOW_HASH_GTP_U_TEID \ +	(BIT_ULL(ICE_FLOW_FIELD_IDX_GTPU_IP_TEID)) + +#define ICE_FLOW_HASH_GTP_U_IPV4_TEID \ +	(ICE_FLOW_HASH_IPV4 | ICE_FLOW_HASH_GTP_U_TEID) +#define ICE_FLOW_HASH_GTP_U_IPV6_TEID \ +	(ICE_FLOW_HASH_IPV6 | ICE_FLOW_HASH_GTP_U_TEID) + +#define ICE_FLOW_HASH_GTP_U_EH_TEID \ +	(BIT_ULL(ICE_FLOW_FIELD_IDX_GTPU_EH_TEID)) + +#define ICE_FLOW_HASH_GTP_U_EH_QFI \ +	(BIT_ULL(ICE_FLOW_FIELD_IDX_GTPU_EH_QFI)) + +#define ICE_FLOW_HASH_GTP_U_IPV4_EH \ +	(ICE_FLOW_HASH_IPV4 | ICE_FLOW_HASH_GTP_U_EH_TEID | \ +	 ICE_FLOW_HASH_GTP_U_EH_QFI) +#define ICE_FLOW_HASH_GTP_U_IPV6_EH \ +	(ICE_FLOW_HASH_IPV6 | ICE_FLOW_HASH_GTP_U_EH_TEID | \ +	 ICE_FLOW_HASH_GTP_U_EH_QFI) + +#define ICE_FLOW_HASH_PPPOE_SESS_ID \ +	(BIT_ULL(ICE_FLOW_FIELD_IDX_PPPOE_SESS_ID)) + +#define ICE_FLOW_HASH_PPPOE_SESS_ID_ETH \ +	(ICE_FLOW_HASH_ETH | ICE_FLOW_HASH_PPPOE_SESS_ID) +#define ICE_FLOW_HASH_PPPOE_TCP_ID \ +	(ICE_FLOW_HASH_TCP_PORT | ICE_FLOW_HASH_PPPOE_SESS_ID) +#define ICE_FLOW_HASH_PPPOE_UDP_ID \ +	(ICE_FLOW_HASH_UDP_PORT | ICE_FLOW_HASH_PPPOE_SESS_ID) + +#define ICE_FLOW_HASH_PFCP_SEID \ +	(BIT_ULL(ICE_FLOW_FIELD_IDX_PFCP_SEID)) +#define ICE_FLOW_HASH_PFCP_IPV4_SEID \ +	(ICE_FLOW_HASH_IPV4 | ICE_FLOW_HASH_PFCP_SEID) +#define ICE_FLOW_HASH_PFCP_IPV6_SEID \ +	(ICE_FLOW_HASH_IPV6 | ICE_FLOW_HASH_PFCP_SEID) + +#define ICE_FLOW_HASH_L2TPV3_SESS_ID \ +	(BIT_ULL(ICE_FLOW_FIELD_IDX_L2TPV3_SESS_ID)) +#define ICE_FLOW_HASH_L2TPV3_IPV4_SESS_ID \ +	(ICE_FLOW_HASH_IPV4 | ICE_FLOW_HASH_L2TPV3_SESS_ID) +#define ICE_FLOW_HASH_L2TPV3_IPV6_SESS_ID \ +	(ICE_FLOW_HASH_IPV6 | ICE_FLOW_HASH_L2TPV3_SESS_ID) + +#define ICE_FLOW_HASH_ESP_SPI \ +	(BIT_ULL(ICE_FLOW_FIELD_IDX_ESP_SPI)) +#define ICE_FLOW_HASH_ESP_IPV4_SPI \ +	(ICE_FLOW_HASH_IPV4 | ICE_FLOW_HASH_ESP_SPI) +#define ICE_FLOW_HASH_ESP_IPV6_SPI \ +	(ICE_FLOW_HASH_IPV6 | ICE_FLOW_HASH_ESP_SPI) + +#define ICE_FLOW_HASH_AH_SPI \ +	(BIT_ULL(ICE_FLOW_FIELD_IDX_AH_SPI)) +#define ICE_FLOW_HASH_AH_IPV4_SPI \ +	(ICE_FLOW_HASH_IPV4 | ICE_FLOW_HASH_AH_SPI) +#define ICE_FLOW_HASH_AH_IPV6_SPI \ +	(ICE_FLOW_HASH_IPV6 | ICE_FLOW_HASH_AH_SPI) + +#define ICE_FLOW_HASH_NAT_T_ESP_SPI \ +	(BIT_ULL(ICE_FLOW_FIELD_IDX_NAT_T_ESP_SPI)) +#define ICE_FLOW_HASH_NAT_T_ESP_IPV4_SPI \ +	(ICE_FLOW_HASH_IPV4 | ICE_FLOW_HASH_NAT_T_ESP_SPI) +#define ICE_FLOW_HASH_NAT_T_ESP_IPV6_SPI \ +	(ICE_FLOW_HASH_IPV6 | ICE_FLOW_HASH_NAT_T_ESP_SPI) +  /* Protocol header fields within a packet segment. A segment consists of one or   * more protocol headers that make up a logical group of protocol headers. Each   * logical group of protocol headers encapsulates or is encapsulated using/by @@ -38,16 +115,66 @@   */  enum ice_flow_seg_hdr {  	ICE_FLOW_SEG_HDR_NONE		= 0x00000000, +	ICE_FLOW_SEG_HDR_ETH		= 0x00000001, +	ICE_FLOW_SEG_HDR_VLAN		= 0x00000002,  	ICE_FLOW_SEG_HDR_IPV4		= 0x00000004,  	ICE_FLOW_SEG_HDR_IPV6		= 0x00000008, +	ICE_FLOW_SEG_HDR_ARP		= 0x00000010, +	ICE_FLOW_SEG_HDR_ICMP		= 0x00000020,  	ICE_FLOW_SEG_HDR_TCP		= 0x00000040,  	ICE_FLOW_SEG_HDR_UDP		= 0x00000080,  	ICE_FLOW_SEG_HDR_SCTP		= 0x00000100,  	ICE_FLOW_SEG_HDR_GRE		= 0x00000200, +	ICE_FLOW_SEG_HDR_GTPC		= 0x00000400, +	ICE_FLOW_SEG_HDR_GTPC_TEID	= 0x00000800, +	ICE_FLOW_SEG_HDR_GTPU_IP	= 0x00001000, +	ICE_FLOW_SEG_HDR_GTPU_EH	= 0x00002000, +	ICE_FLOW_SEG_HDR_GTPU_DWN	= 0x00004000, +	ICE_FLOW_SEG_HDR_GTPU_UP	= 0x00008000, +	ICE_FLOW_SEG_HDR_PPPOE		= 0x00010000, +	ICE_FLOW_SEG_HDR_PFCP_NODE	= 0x00020000, +	ICE_FLOW_SEG_HDR_PFCP_SESSION	= 0x00040000, +	ICE_FLOW_SEG_HDR_L2TPV3		= 0x00080000, +	ICE_FLOW_SEG_HDR_ESP		= 0x00100000, +	ICE_FLOW_SEG_HDR_AH		= 0x00200000, +	ICE_FLOW_SEG_HDR_NAT_T_ESP	= 0x00400000, +	ICE_FLOW_SEG_HDR_ETH_NON_IP	= 0x00800000, +	/* The following is an additive bit for ICE_FLOW_SEG_HDR_IPV4 and +	 * ICE_FLOW_SEG_HDR_IPV6 which include the IPV4 other PTYPEs +	 */ +	ICE_FLOW_SEG_HDR_IPV_OTHER      = 0x20000000,  }; +/* These segments all have the same PTYPES, but are otherwise distinguished by + * the value of the gtp_eh_pdu and gtp_eh_pdu_link flags: + * + *                                gtp_eh_pdu     gtp_eh_pdu_link + * ICE_FLOW_SEG_HDR_GTPU_IP           0              0 + * ICE_FLOW_SEG_HDR_GTPU_EH           1              don't care + * ICE_FLOW_SEG_HDR_GTPU_DWN          1              0 + * ICE_FLOW_SEG_HDR_GTPU_UP           1              1 + */ +#define ICE_FLOW_SEG_HDR_GTPU (ICE_FLOW_SEG_HDR_GTPU_IP | \ +			       ICE_FLOW_SEG_HDR_GTPU_EH | \ +			       ICE_FLOW_SEG_HDR_GTPU_DWN | \ +			       ICE_FLOW_SEG_HDR_GTPU_UP) +#define ICE_FLOW_SEG_HDR_PFCP (ICE_FLOW_SEG_HDR_PFCP_NODE | \ +			       ICE_FLOW_SEG_HDR_PFCP_SESSION) +  enum ice_flow_field { +	/* L2 */ +	ICE_FLOW_FIELD_IDX_ETH_DA, +	ICE_FLOW_FIELD_IDX_ETH_SA, +	ICE_FLOW_FIELD_IDX_S_VLAN, +	ICE_FLOW_FIELD_IDX_C_VLAN, +	ICE_FLOW_FIELD_IDX_ETH_TYPE,  	/* L3 */ +	ICE_FLOW_FIELD_IDX_IPV4_DSCP, +	ICE_FLOW_FIELD_IDX_IPV6_DSCP, +	ICE_FLOW_FIELD_IDX_IPV4_TTL, +	ICE_FLOW_FIELD_IDX_IPV4_PROT, +	ICE_FLOW_FIELD_IDX_IPV6_TTL, +	ICE_FLOW_FIELD_IDX_IPV6_PROT,  	ICE_FLOW_FIELD_IDX_IPV4_SA,  	ICE_FLOW_FIELD_IDX_IPV4_DA,  	ICE_FLOW_FIELD_IDX_IPV6_SA, @@ -59,9 +186,42 @@ enum ice_flow_field {  	ICE_FLOW_FIELD_IDX_UDP_DST_PORT,  	ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT,  	ICE_FLOW_FIELD_IDX_SCTP_DST_PORT, +	ICE_FLOW_FIELD_IDX_TCP_FLAGS, +	/* ARP */ +	ICE_FLOW_FIELD_IDX_ARP_SIP, +	ICE_FLOW_FIELD_IDX_ARP_DIP, +	ICE_FLOW_FIELD_IDX_ARP_SHA, +	ICE_FLOW_FIELD_IDX_ARP_DHA, +	ICE_FLOW_FIELD_IDX_ARP_OP, +	/* ICMP */ +	ICE_FLOW_FIELD_IDX_ICMP_TYPE, +	ICE_FLOW_FIELD_IDX_ICMP_CODE,  	/* GRE */  	ICE_FLOW_FIELD_IDX_GRE_KEYID, -	/* The total number of enums must not exceed 64 */ +	/* GTPC_TEID */ +	ICE_FLOW_FIELD_IDX_GTPC_TEID, +	/* GTPU_IP */ +	ICE_FLOW_FIELD_IDX_GTPU_IP_TEID, +	/* GTPU_EH */ +	ICE_FLOW_FIELD_IDX_GTPU_EH_TEID, +	ICE_FLOW_FIELD_IDX_GTPU_EH_QFI, +	/* GTPU_UP */ +	ICE_FLOW_FIELD_IDX_GTPU_UP_TEID, +	/* GTPU_DWN */ +	ICE_FLOW_FIELD_IDX_GTPU_DWN_TEID, +	/* PPPoE */ +	ICE_FLOW_FIELD_IDX_PPPOE_SESS_ID, +	/* PFCP */ +	ICE_FLOW_FIELD_IDX_PFCP_SEID, +	/* L2TPv3 */ +	ICE_FLOW_FIELD_IDX_L2TPV3_SESS_ID, +	/* ESP */ +	ICE_FLOW_FIELD_IDX_ESP_SPI, +	/* AH */ +	ICE_FLOW_FIELD_IDX_AH_SPI, +	/* NAT_T ESP */ +	ICE_FLOW_FIELD_IDX_NAT_T_ESP_SPI, +	 /* The total number of enums must not exceed 64 */  	ICE_FLOW_FIELD_IDX_MAX  }; @@ -138,6 +298,7 @@ struct ice_flow_seg_xtrct {  	u16 off;	/* Starting offset of the field in header in bytes */  	u8 idx;		/* Index of FV entry used */  	u8 disp;	/* Displacement of field in bits fr. FV entry's start */ +	u16 mask;	/* Mask for field */  };  enum ice_flow_fld_match_type { @@ -248,5 +409,8 @@ enum ice_status ice_rem_vsi_rss_cfg(struct ice_hw *hw, u16 vsi_handle);  enum ice_status  ice_add_rss_cfg(struct ice_hw *hw, u16 vsi_handle, u64 hashed_flds,  		u32 addl_hdrs); +enum ice_status +ice_rem_rss_cfg(struct ice_hw *hw, u16 vsi_handle, u64 hashed_flds, +		u32 addl_hdrs);  u64 ice_get_rss_cfg(struct ice_hw *hw, u16 vsi_handle, u32 hdrs);  #endif /* _ICE_FLOW_H_ */ | 
