X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fqede%2Fbase%2Feth_common.h;h=4611d86d963a7aa4712c70830f1826b2721bae8f;hb=34d5e97e8dca3c60f72d6328fe20b8fad35ad586;hp=32130709c525597603873ac8dd27b716ee1b694d;hpb=610ccd98a40c567671e870b6c0b891b3cb381015;p=dpdk.git diff --git a/drivers/net/qede/base/eth_common.h b/drivers/net/qede/base/eth_common.h index 32130709c5..4611d86d96 100644 --- a/drivers/net/qede/base/eth_common.h +++ b/drivers/net/qede/base/eth_common.h @@ -1,9 +1,7 @@ -/* - * Copyright (c) 2016 QLogic Corporation. +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright (c) 2016 - 2018 Cavium Inc. * All rights reserved. - * www.qlogic.com - * - * See LICENSE.qede_pmd for copyright and licensing details. + * www.cavium.com */ #ifndef __ETH_COMMON__ @@ -18,7 +16,7 @@ /* ETH FP HSI Major version */ #define ETH_HSI_VER_MAJOR 3 /* ETH FP HSI Minor version */ -#define ETH_HSI_VER_MINOR 10 +#define ETH_HSI_VER_MINOR 11 /* ETH FP HSI Minor version */ /* Alias for 8.7.x.x/8.8.x.x ETH FP HSI MINOR version. In this version driver * is not required to set pkt_len field in eth_tx_1st_bd struct, and tunneling @@ -26,6 +24,9 @@ */ #define ETH_HSI_VER_NO_PKT_LEN_TUNN 5 +/* Maximum number of pinned L2 connections (CIDs)*/ +#define ETH_PINNED_CONN_MAX_NUM 32 + #define ETH_CACHE_LINE_SIZE 64 #define ETH_RX_CQE_GAP 32 #define ETH_MAX_RAMROD_PER_CON 8 @@ -34,6 +35,14 @@ #define ETH_RX_CQE_PAGE_SIZE_BYTES 4096 #define ETH_RX_NUM_NEXT_PAGE_BDS 2 +/* Limitation for Tunneled LSO Packets on the offset (in bytes) of the inner IP + * header (relevant to LSO for tunneled packet): + */ +/* Offset is limited to 253 bytes (inclusive). */ +#define ETH_MAX_TUNN_LSO_INNER_IPV4_OFFSET 253 +/* Offset is limited to 251 bytes (inclusive). */ +#define ETH_MAX_TUNN_LSO_INNER_IPV6_OFFSET 251 + #define ETH_TX_MIN_BDS_PER_NON_LSO_PKT 1 #define ETH_TX_MAX_BDS_PER_NON_LSO_PACKET 18 #define ETH_TX_MAX_BDS_PER_LSO_PACKET 255 @@ -42,6 +51,7 @@ #define ETH_TX_MIN_BDS_PER_TUNN_IPV6_WITH_EXT_PKT 3 #define ETH_TX_MIN_BDS_PER_IPV6_WITH_EXT_PKT 2 #define ETH_TX_MIN_BDS_PER_PKT_W_LOOPBACK_MODE 2 +#define ETH_TX_MIN_BDS_PER_PKT_W_VPORT_FORWARDING 4 /* (QM_REG_TASKBYTECRDCOST_0, QM_VOQ_BYTE_CRD_TASK_COST) - * (VLAN-TAG + CRC + IPG + PREAMBLE) */ @@ -71,6 +81,10 @@ /* Maximum number of buffers, used for RX packet placement */ #define ETH_RX_MAX_BUFF_PER_PKT 5 +/* Minimum number of free BDs in RX ring, that guarantee receiving of at least + * one RX packet. + */ +#define ETH_RX_BD_THRESHOLD 16 /* num of MAC/VLAN filters */ #define ETH_NUM_MAC_FILTERS 512 @@ -88,36 +102,39 @@ #define ETH_RSS_IND_TABLE_ENTRIES_NUM 128 /* Length of RSS key (in regs) */ #define ETH_RSS_KEY_SIZE_REGS 10 -/* number of available RSS engines in K2 */ +/* number of available RSS engines in AH */ #define ETH_RSS_ENGINE_NUM_K2 207 /* number of available RSS engines in BB */ #define ETH_RSS_ENGINE_NUM_BB 127 /* TPA constants */ /* Maximum number of open TPA aggregations */ -#define ETH_TPA_MAX_AGGS_NUM 64 -/* Maximum number of additional buffers, reported by TPA-start CQE */ -#define ETH_TPA_CQE_START_LEN_LIST_SIZE ETH_RX_MAX_BUFF_PER_PKT +#define ETH_TPA_MAX_AGGS_NUM 64 +/* TPA-start CQE additional BD list length. Used for backward compatible */ +#define ETH_TPA_CQE_START_BW_LEN_LIST_SIZE 2 /* Maximum number of buffers, reported by TPA-continue CQE */ -#define ETH_TPA_CQE_CONT_LEN_LIST_SIZE 6 +#define ETH_TPA_CQE_CONT_LEN_LIST_SIZE 6 /* Maximum number of buffers, reported by TPA-end CQE */ -#define ETH_TPA_CQE_END_LEN_LIST_SIZE 4 +#define ETH_TPA_CQE_END_LEN_LIST_SIZE 4 /* Control frame check constants */ /* Number of etherType values configured by driver for control frame check */ #define ETH_CTL_FRAME_ETH_TYPE_NUM 4 +/* GFS constants */ +#define ETH_GFT_TRASHCAN_VPORT 0x1FF /* GFT drop flow vport number */ + /* * Destination port mode */ -enum dest_port_mode { - DEST_PORT_PHY /* Send to physical port. */, - DEST_PORT_LOOPBACK /* Send to loopback port. */, - DEST_PORT_PHY_LOOPBACK /* Send to physical and loopback port. */, - DEST_PORT_DROP /* Drop the packet in PBF. */, - MAX_DEST_PORT_MODE +enum dst_port_mode { + DST_PORT_PHY /* Send to physical port. */, + DST_PORT_LOOPBACK /* Send to loopback port. */, + DST_PORT_PHY_LOOPBACK /* Send to physical and loopback port. */, + DST_PORT_DROP /* Drop the packet in PBF. */, + MAX_DST_PORT_MODE }; @@ -141,16 +158,23 @@ struct eth_tx_1st_bd_flags { /* Do not allow additional VLAN manipulations on this packet. */ #define ETH_TX_1ST_BD_FLAGS_FORCE_VLAN_MODE_MASK 0x1 #define ETH_TX_1ST_BD_FLAGS_FORCE_VLAN_MODE_SHIFT 1 -/* IP checksum recalculation in needed */ +/* Recalculate IP checksum. For tunneled packet - relevant to inner header. */ #define ETH_TX_1ST_BD_FLAGS_IP_CSUM_MASK 0x1 #define ETH_TX_1ST_BD_FLAGS_IP_CSUM_SHIFT 2 -/* TCP/UDP checksum recalculation in needed */ +/* Recalculate TCP/UDP checksum. + * For tunneled packet - relevant to inner header. + */ #define ETH_TX_1ST_BD_FLAGS_L4_CSUM_MASK 0x1 #define ETH_TX_1ST_BD_FLAGS_L4_CSUM_SHIFT 3 -/* If set, need to add the VLAN in vlan field to the packet. */ +/* If set, insert VLAN tag from vlan field to the packet. + * For tunneled packet - relevant to outer header. + */ #define ETH_TX_1ST_BD_FLAGS_VLAN_INSERTION_MASK 0x1 #define ETH_TX_1ST_BD_FLAGS_VLAN_INSERTION_SHIFT 4 -/* If set, this is an LSO packet. */ +/* If set, this is an LSO packet. Note: For Tunneled LSO packets, the offset of + * the inner IPV4 (and IPV6) header is limited to 253 (and 251 respectively) + * bytes, inclusive. + */ #define ETH_TX_1ST_BD_FLAGS_LSO_MASK 0x1 #define ETH_TX_1ST_BD_FLAGS_LSO_SHIFT 5 /* Recalculate Tunnel IP Checksum (if Tunnel IP Header is IPv4) */ @@ -158,6 +182,11 @@ struct eth_tx_1st_bd_flags { #define ETH_TX_1ST_BD_FLAGS_TUNN_IP_CSUM_SHIFT 6 /* Recalculate Tunnel UDP/GRE Checksum (Depending on Tunnel Type) */ #define ETH_TX_1ST_BD_FLAGS_TUNN_L4_CSUM_MASK 0x1 +/* Recalculate Tunnel UDP/GRE Checksum (Depending on Tunnel Type). In case of + * GRE tunnel, this flag means GRE CSO, and in this case GRE checksum field + * Must be present. + */ +#define ETH_TX_1ST_BD_FLAGS_TUNN_L4_CSUM_MASK 0x1 #define ETH_TX_1ST_BD_FLAGS_TUNN_L4_CSUM_SHIFT 7 }; @@ -165,8 +194,9 @@ struct eth_tx_1st_bd_flags { * The parsing information data for the first tx bd of a given packet. */ struct eth_tx_data_1st_bd { - __le16 vlan /* VLAN tag to insert to packet (if needed). */; -/* Number of BDs in packet. Should be at least 2 in non-LSO packet and at least +/* VLAN tag to insert to packet (if enabled by vlan_insertion flag). */ + __le16 vlan; +/* Number of BDs in packet. Should be at least 1 in non-LSO packet and at least * 3 in LSO (or Tunnel with IPv6+ext) packet. */ u8 nbds; @@ -209,10 +239,14 @@ struct eth_tx_data_2nd_bd { /* For LSO / Tunnel header with IPv6+ext - Set if inner header is IPv6 */ #define ETH_TX_DATA_2ND_BD_TUNN_INNER_IPV6_MASK 0x1 #define ETH_TX_DATA_2ND_BD_TUNN_INNER_IPV6_SHIFT 11 -/* For LSO / Tunnel header with IPv6+ext - Set if outer header has IPv6+ext */ +/* In tunneling mode - Set to 1 when the Inner header is IPv6 with extension. + * Otherwise set to 1 if the header is IPv6 with extension. + */ #define ETH_TX_DATA_2ND_BD_IPV6_EXT_MASK 0x1 #define ETH_TX_DATA_2ND_BD_IPV6_EXT_SHIFT 12 -/* Set if Tunnel header has IPv6 ext. (3rd BD is required) */ +/* Set to 1 if Tunnel (outer = encapsulating) header has IPv6 ext. (Note: 3rd BD + * is required, hence EDPM does not support Tunnel [outer] header with Ipv6Ext) + */ #define ETH_TX_DATA_2ND_BD_TUNN_IPV6_EXT_MASK 0x1 #define ETH_TX_DATA_2ND_BD_TUNN_IPV6_EXT_SHIFT 13 /* Set if (inner) L4 protocol is UDP. (Required when IPv6+ext (or tunnel with @@ -323,9 +357,13 @@ struct eth_fast_path_rx_reg_cqe { /* Tunnel Parsing Flags */ struct eth_tunnel_parsing_flags tunnel_pars_flags; u8 bd_num /* Number of BDs, used for packet */; - u8 reserved[9]; - struct eth_fast_path_cqe_fw_debug fw_debug /* FW reserved. */; - u8 reserved1[3]; + u8 reserved; + __le16 reserved2; +/* aRFS flow ID or Resource ID - Indicates a Vport ID from which packet was + * sent, used when sending from VF to VF Representor. + */ + __le32 flow_id_or_resource_id; + u8 reserved1[7]; struct eth_pmd_flow_flags pmd_flags /* CQE valid and toggle bits */; }; @@ -392,10 +430,14 @@ struct eth_fast_path_rx_tpa_start_cqe { struct eth_tunnel_parsing_flags tunnel_pars_flags; u8 tpa_agg_index /* TPA aggregation index */; u8 header_len /* Packet L2+L3+L4 header length */; -/* Additional BDs length list. */ - __le16 ext_bd_len_list[ETH_TPA_CQE_START_LEN_LIST_SIZE]; - struct eth_fast_path_cqe_fw_debug fw_debug /* FW reserved. */; - u8 reserved; +/* Additional BDs length list. Used for backward compatible. */ + __le16 bw_ext_bd_len_list[ETH_TPA_CQE_START_BW_LEN_LIST_SIZE]; + __le16 reserved2; +/* aRFS or GFS flow ID or Resource ID - Indicates a Vport ID from which packet + * was sent, used when sending from VF to VF Representor + */ + __le32 flow_id_or_resource_id; + u8 reserved[3]; struct eth_pmd_flow_flags pmd_flags /* CQE valid and toggle bits */; }; @@ -572,6 +614,41 @@ struct eth_tx_3rd_bd { }; +/* + * The parsing information data for the forth tx bd of a given packet. + */ +struct eth_tx_data_4th_bd { +/* Destination Vport ID to forward the packet, applicable only when + * tx_dst_port_mode_config == ETH_TX_DST_MODE_CONFIG_FORWARD_DATA_IN_BD and + * dst_port_mode == DST_PORT_LOOPBACK, used to route the packet from VF + * Representor to VF + */ + u8 dst_vport_id; + u8 reserved4; + __le16 bitfields; +/* if set, dst_vport_id has a valid value and will be used in FW */ +#define ETH_TX_DATA_4TH_BD_DST_VPORT_ID_VALID_MASK 0x1 +#define ETH_TX_DATA_4TH_BD_DST_VPORT_ID_VALID_SHIFT 0 +#define ETH_TX_DATA_4TH_BD_RESERVED1_MASK 0x7F +#define ETH_TX_DATA_4TH_BD_RESERVED1_SHIFT 1 +/* Should be 0 in all the BDs, except the first one. (for debug) */ +#define ETH_TX_DATA_4TH_BD_START_BD_MASK 0x1 +#define ETH_TX_DATA_4TH_BD_START_BD_SHIFT 8 +#define ETH_TX_DATA_4TH_BD_RESERVED2_MASK 0x7F +#define ETH_TX_DATA_4TH_BD_RESERVED2_SHIFT 9 + __le16 reserved3; +}; + +/* + * The forth tx bd of a given packet + */ +struct eth_tx_4th_bd { + struct regpair addr /* Single continuous buffer */; + __le16 nbytes /* Number of bytes in this BD. */; + struct eth_tx_data_4th_bd data /* Parsing information data. */; +}; + + /* * Complementary information for the regular tx bd of a given packet. */ @@ -603,7 +680,8 @@ union eth_tx_bd_types { /* The second tx bd of a given packet */ struct eth_tx_2nd_bd second_bd; struct eth_tx_3rd_bd third_bd /* The third tx bd of a given packet */; - struct eth_tx_bd reg_bd /* The common non-special bd */; + struct eth_tx_4th_bd fourth_bd /* The fourth tx bd of a given packet */; + struct eth_tx_bd reg_bd /* The common regular bd */; }; @@ -623,6 +701,15 @@ enum eth_tx_tunn_type { }; +/* + * Mstorm Queue Zone + */ +struct mstorm_eth_queue_zone { + struct eth_rx_prod_data rx_producers /* ETH Rx producers data */; + __le32 reserved[3]; +}; + + /* * Ystorm Queue Zone */