[dpdk-dev] [v2 08/15] bnxt: Update buffer descriptor definitions per 1.5.1 API

Ajit Khaparde ajit.khaparde at broadcom.com
Mon Sep 26 18:19:07 CEST 2016


Update the PMD to use the 1.5.1 HWRM API.
Most of the changes in the patch are white spaces and rearrangement of the
lines - hopefully a onetime change owing to the usage of a different
autogenerated file.

Structures updated in this patch:
tx_bd_short, tx_bd_long, tx_bd_long_hi, rx_prod_pkt_bd

v1->v2: split into smaller patches for easier review.

Signed-off-by: Ajit Khaparde <ajit.khaparde at broadcom.com>
---
 drivers/net/bnxt/hsi_struct_def_dpdk.h | 640 +++++++++++++++++----------------
 1 file changed, 330 insertions(+), 310 deletions(-)

diff --git a/drivers/net/bnxt/hsi_struct_def_dpdk.h b/drivers/net/bnxt/hsi_struct_def_dpdk.h
index b880dfd..36e264a 100644
--- a/drivers/net/bnxt/hsi_struct_def_dpdk.h
+++ b/drivers/net/bnxt/hsi_struct_def_dpdk.h
@@ -118,422 +118,442 @@ struct ctx_hw_stats64 {
 
 /* Short TX BD (16 bytes) */
 struct tx_bd_short {
+	uint16_t flags_type;
 	/*
-	 * All bits in this field must be valid on the first BD of a packet.
-	 * Only the packet_end bit must be valid for the remaining BDs of a
-	 * packet.
+	 * All bits in this field must be valid on the first BD of a
+	 * packet. Only the packet_end bit must be valid for the
+	 * remaining BDs of a packet.
 	 */
 	/* This value identifies the type of buffer descriptor. */
-	#define TX_BD_SHORT_TYPE_MASK			UINT32_C(0x3f)
-	#define TX_BD_SHORT_TYPE_SFT			0
-		/*
-		 * Indicates that this BD is 16B long and is used for normal L2
-		 * packet transmission.
-		 */
-	#define TX_BD_SHORT_TYPE_TX_BD_SHORT		(UINT32_C(0x0) << 0)
-	/*
-	 * If set to 1, the packet ends with the data in the buffer pointed to
-	 * by this descriptor. This flag must be valid on every BD.
-	 */
-	#define TX_BD_SHORT_FLAGS_PACKET_END		UINT32_C(0x40)
-	/*
-	 * If set to 1, the device will not generate a completion for this
-	 * transmit packet unless there is an error in it's processing. If this
-	 * bit is set to 0, then the packet will be completed normally. This bit
-	 * must be valid only on the first BD of a packet.
-	 */
-	#define TX_BD_SHORT_FLAGS_NO_CMPL		UINT32_C(0x80)
-	/*
-	 * This value indicates how many 16B BD locations are consumed in the
-	 * ring by this packet. A value of 1 indicates that this BD is the only
-	 * BD (and that the it is a short BD). A value of 3 indicates either 3
-	 * short BDs or 1 long BD and one short BD in the packet. A value of 0
-	 * indicates that there are 32 BD locations in the packet (the maximum).
-	 * This field is valid only on the first BD of a packet.
-	 */
-	#define TX_BD_SHORT_FLAGS_BD_CNT_MASK		UINT32_C(0x1f00)
-	#define TX_BD_SHORT_FLAGS_BD_CNT_SFT		8
-	/*
-	 * This value is a hint for the length of the entire packet. It is used
-	 * by the chip to optimize internal processing. The packet will be
-	 * dropped if the hint is too short. This field is valid only on the
-	 * first BD of a packet.
-	 */
-	#define TX_BD_SHORT_FLAGS_LHINT_MASK		UINT32_C(0x6000)
-	#define TX_BD_SHORT_FLAGS_LHINT_SFT		13
-		/* indicates packet length < 512B */
-	#define TX_BD_SHORT_FLAGS_LHINT_LT512		(UINT32_C(0x0) << 13)
-		/* indicates 512 <= packet length < 1KB */
-	#define TX_BD_SHORT_FLAGS_LHINT_LT1K		(UINT32_C(0x1) << 13)
-		/* indicates 1KB <= packet length < 2KB */
-	#define TX_BD_SHORT_FLAGS_LHINT_LT2K		(UINT32_C(0x2) << 13)
-		/* indicates packet length >= 2KB */
-	#define TX_BD_SHORT_FLAGS_LHINT_GTE2K		(UINT32_C(0x3) << 13)
-	#define TX_BD_SHORT_FLAGS_LHINT_LAST	TX_BD_SHORT_FLAGS_LHINT_GTE2K
+	#define TX_BD_SHORT_TYPE_MASK	UINT32_C(0x3f)
+	#define TX_BD_SHORT_TYPE_SFT	0
 	/*
-	 * If set to 1, the device immediately updates the Send Consumer Index
-	 * after the buffer associated with this descriptor has been transferred
-	 * via DMA to NIC memory from host memory. An interrupt may or may not
-	 * be generated according to the state of the interrupt avoidance
-	 * mechanisms. If this bit is set to 0, then the Consumer Index is only
-	 * updated as soon as one of the host interrupt coalescing conditions
-	 * has been met. This bit must be valid on the first BD of a packet.
+	 * Indicates that this BD is 16B long and is
+	 * used for normal L2 packet transmission.
 	 */
-	#define TX_BD_SHORT_FLAGS_COAL_NOW		UINT32_C(0x8000)
+	#define TX_BD_SHORT_TYPE_TX_BD_SHORT	UINT32_C(0x0)
 	/*
-	 * All bits in this field must be valid on the first BD of a packet.
-	 * Only the packet_end bit must be valid for the remaining BDs of a
-	 * packet.
+	 * If set to 1, the packet ends with the data in the buffer
+	 * pointed to by this descriptor. This flag must be valid on
+	 * every BD.
 	 */
-	#define TX_BD_SHORT_FLAGS_MASK			UINT32_C(0xffc0)
-	#define TX_BD_SHORT_FLAGS_SFT			6
-	uint16_t flags_type;
-
+	#define TX_BD_SHORT_FLAGS_PACKET_END	UINT32_C(0x40)
+	/*
+	 * If set to 1, the device will not generate a completion for
+	 * this transmit packet unless there is an error in it's
+	 * processing. If this bit is set to 0, then the packet will be
+	 * completed normally. This bit must be valid only on the first
+	 * BD of a packet.
+	 */
+	#define TX_BD_SHORT_FLAGS_NO_CMPL	UINT32_C(0x80)
+	/*
+	 * This value indicates how many 16B BD locations are consumed
+	 * in the ring by this packet. A value of 1 indicates that this
+	 * BD is the only BD (and that the it is a short BD). A value of
+	 * 3 indicates either 3 short BDs or 1 long BD and one short BD
+	 * in the packet. A value of 0 indicates that there are 32 BD
+	 * locations in the packet (the maximum). This field is valid
+	 * only on the first BD of a packet.
+	 */
+	#define TX_BD_SHORT_FLAGS_BD_CNT_MASK	UINT32_C(0x1f00)
+	#define TX_BD_SHORT_FLAGS_BD_CNT_SFT	8
+	/*
+	 * This value is a hint for the length of the entire packet. It
+	 * is used by the chip to optimize internal processing. The
+	 * packet will be dropped if the hint is too short. This field
+	 * is valid only on the first BD of a packet.
+	 */
+	#define TX_BD_SHORT_FLAGS_LHINT_MASK	UINT32_C(0x6000)
+	#define TX_BD_SHORT_FLAGS_LHINT_SFT	13
+	/* indicates packet length < 512B */
+	#define TX_BD_SHORT_FLAGS_LHINT_LT512	(UINT32_C(0x0) << 13)
+	/* indicates 512 <= packet length < 1KB */
+	#define TX_BD_SHORT_FLAGS_LHINT_LT1K	(UINT32_C(0x1) << 13)
+	/* indicates 1KB <= packet length < 2KB */
+	#define TX_BD_SHORT_FLAGS_LHINT_LT2K	(UINT32_C(0x2) << 13)
+	/* indicates packet length >= 2KB */
+	#define TX_BD_SHORT_FLAGS_LHINT_GTE2K	(UINT32_C(0x3) << 13)
+	#define TX_BD_SHORT_FLAGS_LHINT_LAST	TX_BD_SHORT_FLAGS_LHINT_GTE2K
 	/*
-	 * This is the length of the host physical buffer this BD describes in
-	 * bytes. This field must be valid on all BDs of a packet.
+	 * If set to 1, the device immediately updates the Send Consumer
+	 * Index after the buffer associated with this descriptor has
+	 * been transferred via DMA to NIC memory from host memory. An
+	 * interrupt may or may not be generated according to the state
+	 * of the interrupt avoidance mechanisms. If this bit is set to
+	 * 0, then the Consumer Index is only updated as soon as one of
+	 * the host interrupt coalescing conditions has been met. This
+	 * bit must be valid on the first BD of a packet.
 	 */
+	#define TX_BD_SHORT_FLAGS_COAL_NOW	UINT32_C(0x8000)
+	/*
+	 * All bits in this field must be valid on the first BD of a
+	 * packet. Only the packet_end bit must be valid for the
+	 * remaining BDs of a packet.
+	 */
+	#define TX_BD_SHORT_FLAGS_MASK	UINT32_C(0xffc0)
+	#define TX_BD_SHORT_FLAGS_SFT	6
 	uint16_t len;
 	/*
-	 * The opaque data field is pass through to the completion and can be
-	 * used for any data that the driver wants to associate with the
-	 * transmit BD. This field must be valid on the first BD of a packet.
+	 * This is the length of the host physical buffer this BD
+	 * describes in bytes. This field must be valid on all BDs of a
+	 * packet.
 	 */
 	uint32_t opaque;
-
 	/*
-	 * This is the host physical address for the portion of the packet
-	 * described by this TX BD. This value must be valid on all BDs of a
-	 * packet.
+	 * The opaque data field is pass through to the completion and
+	 * can be used for any data that the driver wants to associate
+	 * with the transmit BD. This field must be valid on the first
+	 * BD of a packet.
 	 */
 	uint64_t addr;
+	/*
+	 * This is the host physical address for the portion of the
+	 * packet described by this TX BD. This value must be valid on
+	 * all BDs of a packet.
+	 */
 } __attribute__((packed));
 
 /* Long TX BD (32 bytes split to 2 16-byte struct) */
 struct tx_bd_long {
+	uint16_t flags_type;
 	/*
-	 * All bits in this field must be valid on the first BD of a packet.
-	 * Only the packet_end bit must be valid for the remaining BDs of a
-	 * packet.
+	 * All bits in this field must be valid on the first BD of a
+	 * packet. Only the packet_end bit must be valid for the
+	 * remaining BDs of a packet.
 	 */
 	/* This value identifies the type of buffer descriptor. */
-	#define TX_BD_LONG_TYPE_MASK			UINT32_C(0x3f)
-	#define TX_BD_LONG_TYPE_SFT			0
-		/*
-		 * Indicates that this BD is 32B long and is used for normal L2
-		 * packet transmission.
-		 */
-	#define TX_BD_LONG_TYPE_TX_BD_LONG		(UINT32_C(0x10) << 0)
-	/*
-	 * If set to 1, the packet ends with the data in the buffer pointed to
-	 * by this descriptor. This flag must be valid on every BD.
-	 */
-	#define TX_BD_LONG_FLAGS_PACKET_END		UINT32_C(0x40)
-	/*
-	 * If set to 1, the device will not generate a completion for this
-	 * transmit packet unless there is an error in it's processing. If this
-	 * bit is set to 0, then the packet will be completed normally. This bit
-	 * must be valid only on the first BD of a packet.
-	 */
-	#define TX_BD_LONG_FLAGS_NO_CMPL		UINT32_C(0x80)
-	/*
-	 * This value indicates how many 16B BD locations are consumed in the
-	 * ring by this packet. A value of 1 indicates that this BD is the only
-	 * BD (and that the it is a short BD). A value of 3 indicates either 3
-	 * short BDs or 1 long BD and one short BD in the packet. A value of 0
-	 * indicates that there are 32 BD locations in the packet (the maximum).
-	 * This field is valid only on the first BD of a packet.
-	 */
-	#define TX_BD_LONG_FLAGS_BD_CNT_MASK		UINT32_C(0x1f00)
-	#define TX_BD_LONG_FLAGS_BD_CNT_SFT		8
-	/*
-	 * This value is a hint for the length of the entire packet. It is used
-	 * by the chip to optimize internal processing. The packet will be
-	 * dropped if the hint is too short. This field is valid only on the
-	 * first BD of a packet.
-	 */
-	#define TX_BD_LONG_FLAGS_LHINT_MASK		UINT32_C(0x6000)
-	#define TX_BD_LONG_FLAGS_LHINT_SFT		13
-		/* indicates packet length < 512B */
-	#define TX_BD_LONG_FLAGS_LHINT_LT512		(UINT32_C(0x0) << 13)
-		/* indicates 512 <= packet length < 1KB */
-	#define TX_BD_LONG_FLAGS_LHINT_LT1K		(UINT32_C(0x1) << 13)
-		/* indicates 1KB <= packet length < 2KB */
-	#define TX_BD_LONG_FLAGS_LHINT_LT2K		(UINT32_C(0x2) << 13)
-		/* indicates packet length >= 2KB */
-	#define TX_BD_LONG_FLAGS_LHINT_GTE2K		(UINT32_C(0x3) << 13)
-	#define TX_BD_LONG_FLAGS_LHINT_LAST	TX_BD_LONG_FLAGS_LHINT_GTE2K
+	#define TX_BD_LONG_TYPE_MASK	UINT32_C(0x3f)
+	#define TX_BD_LONG_TYPE_SFT	0
 	/*
-	 * If set to 1, the device immediately updates the Send Consumer Index
-	 * after the buffer associated with this descriptor has been transferred
-	 * via DMA to NIC memory from host memory. An interrupt may or may not
-	 * be generated according to the state of the interrupt avoidance
-	 * mechanisms. If this bit is set to 0, then the Consumer Index is only
-	 * updated as soon as one of the host interrupt coalescing conditions
-	 * has been met. This bit must be valid on the first BD of a packet.
+	 * Indicates that this BD is 32B long and is
+	 * used for normal L2 packet transmission.
 	 */
-	#define TX_BD_LONG_FLAGS_COAL_NOW		UINT32_C(0x8000)
+	#define TX_BD_LONG_TYPE_TX_BD_LONG	UINT32_C(0x10)
 	/*
-	 * All bits in this field must be valid on the first BD of a packet.
-	 * Only the packet_end bit must be valid for the remaining BDs of a
-	 * packet.
+	 * If set to 1, the packet ends with the data in the buffer
+	 * pointed to by this descriptor. This flag must be valid on
+	 * every BD.
 	 */
-	#define TX_BD_LONG_FLAGS_MASK			UINT32_C(0xffc0)
-	#define TX_BD_LONG_FLAGS_SFT			6
-	uint16_t flags_type;
-
+	#define TX_BD_LONG_FLAGS_PACKET_END	UINT32_C(0x40)
+	/*
+	 * If set to 1, the device will not generate a completion for
+	 * this transmit packet unless there is an error in it's
+	 * processing. If this bit is set to 0, then the packet will be
+	 * completed normally. This bit must be valid only on the first
+	 * BD of a packet.
+	 */
+	#define TX_BD_LONG_FLAGS_NO_CMPL	UINT32_C(0x80)
+	/*
+	 * This value indicates how many 16B BD locations are consumed
+	 * in the ring by this packet. A value of 1 indicates that this
+	 * BD is the only BD (and that the it is a short BD). A value of
+	 * 3 indicates either 3 short BDs or 1 long BD and one short BD
+	 * in the packet. A value of 0 indicates that there are 32 BD
+	 * locations in the packet (the maximum). This field is valid
+	 * only on the first BD of a packet.
+	 */
+	#define TX_BD_LONG_FLAGS_BD_CNT_MASK	UINT32_C(0x1f00)
+	#define TX_BD_LONG_FLAGS_BD_CNT_SFT	8
+	/*
+	 * This value is a hint for the length of the entire packet. It
+	 * is used by the chip to optimize internal processing. The
+	 * packet will be dropped if the hint is too short. This field
+	 * is valid only on the first BD of a packet.
+	 */
+	#define TX_BD_LONG_FLAGS_LHINT_MASK	UINT32_C(0x6000)
+	#define TX_BD_LONG_FLAGS_LHINT_SFT	13
+	/* indicates packet length < 512B */
+	#define TX_BD_LONG_FLAGS_LHINT_LT512	(UINT32_C(0x0) << 13)
+	/* indicates 512 <= packet length < 1KB */
+	#define TX_BD_LONG_FLAGS_LHINT_LT1K	(UINT32_C(0x1) << 13)
+	/* indicates 1KB <= packet length < 2KB */
+	#define TX_BD_LONG_FLAGS_LHINT_LT2K	(UINT32_C(0x2) << 13)
+	/* indicates packet length >= 2KB */
+	#define TX_BD_LONG_FLAGS_LHINT_GTE2K	(UINT32_C(0x3) << 13)
+	#define TX_BD_LONG_FLAGS_LHINT_LAST	TX_BD_LONG_FLAGS_LHINT_GTE2K
+	/*
+	 * If set to 1, the device immediately updates the Send Consumer
+	 * Index after the buffer associated with this descriptor has
+	 * been transferred via DMA to NIC memory from host memory. An
+	 * interrupt may or may not be generated according to the state
+	 * of the interrupt avoidance mechanisms. If this bit is set to
+	 * 0, then the Consumer Index is only updated as soon as one of
+	 * the host interrupt coalescing conditions has been met. This
+	 * bit must be valid on the first BD of a packet.
+	 */
+	#define TX_BD_LONG_FLAGS_COAL_NOW	UINT32_C(0x8000)
 	/*
-	 * This is the length of the host physical buffer this BD describes in
-	 * bytes. This field must be valid on all BDs of a packet.
+	 * All bits in this field must be valid on the first BD of a
+	 * packet. Only the packet_end bit must be valid for the
+	 * remaining BDs of a packet.
 	 */
+	#define TX_BD_LONG_FLAGS_MASK	UINT32_C(0xffc0)
+	#define TX_BD_LONG_FLAGS_SFT	6
 	uint16_t len;
-
 	/*
-	 * The opaque data field is pass through to the completion and can be
-	 * used for any data that the driver wants to associate with the
-	 * transmit BD. This field must be valid on the first BD of a packet.
+	 * This is the length of the host physical buffer this BD
+	 * describes in bytes. This field must be valid on all BDs of a
+	 * packet.
 	 */
 	uint32_t opaque;
-
 	/*
-	 * This is the host physical address for the portion of the packet
-	 * described by this TX BD. This value must be valid on all BDs of a
-	 * packet.
+	 * The opaque data field is pass through to the completion and
+	 * can be used for any data that the driver wants to associate
+	 * with the transmit BD. This field must be valid on the first
+	 * BD of a packet.
 	 */
 	uint64_t addr;
+	/*
+	 * This is the host physical address for the portion of the
+	 * packet described by this TX BD. This value must be valid on
+	 * all BDs of a packet.
+	 */
 } __attribute__((packed));
 
 /* last 16 bytes of Long TX BD */
-
 struct tx_bd_long_hi {
+	uint16_t lflags;
 	/*
-	 * All bits in this field must be valid on the first BD of a packet.
-	 * Their value on other BDs of the packet will be ignored.
+	 * All bits in this field must be valid on the first BD of a
+	 * packet. Their value on other BDs of the packet will be
+	 * ignored.
 	 */
 	/*
-	 * If set to 1, the controller replaces the TCP/UPD checksum fields of
-	 * normal TCP/UPD checksum, or the inner TCP/UDP checksum field of the
-	 * encapsulated TCP/UDP packets with the hardware calculated TCP/UDP
-	 * checksum for the packet associated with this descriptor. This bit
-	 * must be valid on the first BD of a packet.
+	 * If set to 1, the controller replaces the TCP/UPD checksum
+	 * fields of normal TCP/UPD checksum, or the inner TCP/UDP
+	 * checksum field of the encapsulated TCP/UDP packets with the
+	 * hardware calculated TCP/UDP checksum for the packet
+	 * associated with this descriptor. The flag is ignored if the
+	 * LSO flag is set. This bit must be valid on the first BD of a
+	 * packet.
 	 */
 	#define TX_BD_LONG_LFLAGS_TCP_UDP_CHKSUM	UINT32_C(0x1)
 	/*
-	 * If set to 1, the controller replaces the IP checksum of the normal
-	 * packets, or the inner IP checksum of the encapsulated packets with
-	 * the hardware calculated IP checksum for the packet associated with
-	 * this descriptor. This bit must be valid on the first BD of a packet.
-	 */
-	#define TX_BD_LONG_LFLAGS_IP_CHKSUM		UINT32_C(0x2)
-	/*
-	 * If set to 1, the controller will not append an Ethernet CRC to the
-	 * end of the frame. This bit must be valid on the first BD of a packet.
-	 * Packet must be 64B or longer when this flag is set. It is not useful
-	 * to use this bit with any form of TX offload such as CSO or LSO. The
-	 * intent is that the packet from the host already has a valid Ethernet
-	 * CRC on the packet.
-	 */
-	#define TX_BD_LONG_LFLAGS_NOCRC			UINT32_C(0x4)
-	/*
-	 * If set to 1, the device will record the time at which the packet was
-	 * actually transmitted at the TX MAC. This bit must be valid on the
-	 * first BD of a packet.
-	 */
-	#define TX_BD_LONG_LFLAGS_STAMP			UINT32_C(0x8)
-	/*
-	 * If set to 1, The controller replaces the tunnel IP checksum field
-	 * with hardware calculated IP checksum for the IP header of the packet
-	 * associated with this descriptor. In case of VXLAN, the controller
-	 * also replaces the outer header UDP checksum with hardware calculated
-	 * UDP checksum for the packet associated with this descriptor.
-	 */
-	#define TX_BD_LONG_LFLAGS_T_IP_CHKSUM		UINT32_C(0x10)
-	/*
-	 * If set to 1, the device will treat this packet with LSO(Large Send
-	 * Offload) processing for both normal or encapsulated packets, which is
-	 * a form of TCP segmentation. When this bit is 1, the hdr_size and mss
-	 * fields must be valid. The driver doesn't need to set t_ip_chksum,
-	 * ip_chksum, and tcp_udp_chksum flags since the controller will replace
-	 * the appropriate checksum fields for segmented packets. When this bit
-	 * is 1, the hdr_size and mss fields must be valid.
-	 */
-	#define TX_BD_LONG_LFLAGS_LSO			UINT32_C(0x20)
-	/*
-	 * If set to zero when LSO is '1', then the IPID will be treated as a
-	 * 16b number and will be wrapped if it exceeds a value of 0xffff. If
-	 * set to one when LSO is '1', then the IPID will be treated as a 15b
-	 * number and will be wrapped if it exceeds a value 0f 0x7fff.
-	 */
-	#define TX_BD_LONG_LFLAGS_IPID_FMT		UINT32_C(0x40)
-	/*
-	 * If set to zero when LSO is '1', then the IPID of the tunnel IP header
-	 * will not be modified during LSO operations. If set to one when LSO is
-	 * '1', then the IPID of the tunnel IP header will be incremented for
-	 * each subsequent segment of an LSO operation.
-	 */
-	#define TX_BD_LONG_LFLAGS_T_IPID		UINT32_C(0x80)
-	/*
-	 * If set to '1', then the RoCE ICRC will be appended to the packet.
-	 * Packet must be a valid RoCE format packet.
-	 */
-	#define TX_BD_LONG_LFLAGS_ROCE_CRC		UINT32_C(0x100)
-	/*
-	 * If set to '1', then the FCoE CRC will be appended to the packet.
-	 * Packet must be a valid FCoE format packet.
-	 */
-	#define TX_BD_LONG_LFLAGS_FCOE_CRC		UINT32_C(0x200)
-	uint16_t lflags;
-
-	/*
-	 * When LSO is '1', this field must contain the offset of the TCP
-	 * payload from the beginning of the packet in as 16b words. In case of
-	 * encapsulated/tunneling packet, this field contains the offset of the
-	 * inner TCP payload from beginning of the packet as 16-bit words. This
-	 * value must be valid on the first BD of a packet.
-	 */
-	#define TX_BD_LONG_HDR_SIZE_MASK		UINT32_C(0x1ff)
-	#define TX_BD_LONG_HDR_SIZE_SFT			0
+	 * If set to 1, the controller replaces the IP checksum of the
+	 * normal packets, or the inner IP checksum of the encapsulated
+	 * packets with the hardware calculated IP checksum for the
+	 * packet associated with this descriptor. This bit must be
+	 * valid on the first BD of a packet.
+	 */
+	#define TX_BD_LONG_LFLAGS_IP_CHKSUM	UINT32_C(0x2)
+	/*
+	 * If set to 1, the controller will not append an Ethernet CRC
+	 * to the end of the frame. This bit must be valid on the first
+	 * BD of a packet. Packet must be 64B or longer when this flag
+	 * is set. It is not useful to use this bit with any form of TX
+	 * offload such as CSO or LSO. The intent is that the packet
+	 * from the host already has a valid Ethernet CRC on the packet.
+	 */
+	#define TX_BD_LONG_LFLAGS_NOCRC	UINT32_C(0x4)
+	/*
+	 * If set to 1, the device will record the time at which the
+	 * packet was actually transmitted at the TX MAC. This bit must
+	 * be valid on the first BD of a packet.
+	 */
+	#define TX_BD_LONG_LFLAGS_STAMP	UINT32_C(0x8)
+	/*
+	 * If set to 1, The controller replaces the tunnel IP checksum
+	 * field with hardware calculated IP checksum for the IP header
+	 * of the packet associated with this descriptor. For outer UDP
+	 * checksum, global outer UDP checksum TE_NIC register needs to
+	 * be enabled. If the global outer UDP checksum TE_NIC register
+	 * bit is set, outer UDP checksum will be calculated for the
+	 * following cases: 1. Packets with tcp_udp_chksum flag set to
+	 * offload checksum for inner packet AND the inner packet is
+	 * TCP/UDP. If the inner packet is ICMP for example (non-
+	 * TCP/UDP), even if the tcp_udp_chksum is set, the outer UDP
+	 * checksum will not be calculated. 2. Packets with lso flag set
+	 * which implies inner TCP checksum calculation as part of LSO
+	 * operation.
+	 */
+	#define TX_BD_LONG_LFLAGS_T_IP_CHKSUM	UINT32_C(0x10)
+	/*
+	 * If set to 1, the device will treat this packet with LSO(Large
+	 * Send Offload) processing for both normal or encapsulated
+	 * packets, which is a form of TCP segmentation. When this bit
+	 * is 1, the hdr_size and mss fields must be valid. The driver
+	 * doesn't need to set t_ip_chksum, ip_chksum, and
+	 * tcp_udp_chksum flags since the controller will replace the
+	 * appropriate checksum fields for segmented packets. When this
+	 * bit is 1, the hdr_size and mss fields must be valid.
+	 */
+	#define TX_BD_LONG_LFLAGS_LSO	UINT32_C(0x20)
+	/*
+	 * If set to zero when LSO is '1', then the IPID will be treated
+	 * as a 16b number and will be wrapped if it exceeds a value of
+	 * 0xffff. If set to one when LSO is '1', then the IPID will be
+	 * treated as a 15b number and will be wrapped if it exceeds a
+	 * value 0f 0x7fff.
+	 */
+	#define TX_BD_LONG_LFLAGS_IPID_FMT	UINT32_C(0x40)
+	/*
+	 * If set to zero when LSO is '1', then the IPID of the tunnel
+	 * IP header will not be modified during LSO operations. If set
+	 * to one when LSO is '1', then the IPID of the tunnel IP header
+	 * will be incremented for each subsequent segment of an LSO
+	 * operation. The flag is ignored if the LSO packet is a normal
+	 * (non-tunneled) TCP packet.
+	 */
+	#define TX_BD_LONG_LFLAGS_T_IPID	UINT32_C(0x80)
+	/*
+	 * If set to '1', then the RoCE ICRC will be appended to the
+	 * packet. Packet must be a valid RoCE format packet.
+	 */
+	#define TX_BD_LONG_LFLAGS_ROCE_CRC	UINT32_C(0x100)
+	/*
+	 * If set to '1', then the FCoE CRC will be appended to the
+	 * packet. Packet must be a valid FCoE format packet.
+	 */
+	#define TX_BD_LONG_LFLAGS_FCOE_CRC	UINT32_C(0x200)
 	uint16_t hdr_size;
-
 	/*
-	 * This is the MSS value that will be used to do the LSO processing. The
-	 * value is the length in bytes of the TCP payload for each segment
-	 * generated by the LSO operation. This value must be valid on the first
+	 * When LSO is '1', this field must contain the offset of the
+	 * TCP payload from the beginning of the packet in as 16b words.
+	 * In case of encapsulated/tunneling packet, this field contains
+	 * the offset of the inner TCP payload from beginning of the
+	 * packet as 16-bit words. This value must be valid on the first
 	 * BD of a packet.
 	 */
-	#define TX_BD_LONG_MSS_MASK			UINT32_C(0x7fff)
-	#define TX_BD_LONG_MSS_SFT			0
+	#define TX_BD_LONG_HDR_SIZE_MASK	UINT32_C(0x1ff)
+	#define TX_BD_LONG_HDR_SIZE_SFT	0
 	uint32_t mss;
-
-	uint16_t unused_2;
-
 	/*
-	 * This value selects a CFA action to perform on the packet. Set this
-	 * value to zero if no CFA action is desired. This value must be valid
-	 * on the first BD of a packet.
+	 * This is the MSS value that will be used to do the LSO
+	 * processing. The value is the length in bytes of the TCP
+	 * payload for each segment generated by the LSO operation. This
+	 * value must be valid on the first BD of a packet.
 	 */
+	#define TX_BD_LONG_MSS_MASK	UINT32_C(0x7fff)
+	#define TX_BD_LONG_MSS_SFT	0
+	uint16_t unused_2;
 	uint16_t cfa_action;
-
 	/*
-	 * This value is action meta-data that defines CFA edit operations that
-	 * are done in addition to any action editing.
+	 * This value selects a CFA action to perform on the packet. Set
+	 * this value to zero if no CFA action is desired. This value
+	 * must be valid on the first BD of a packet.
+	 */
+	uint32_t cfa_meta;
+	/*
+	 * This value is action meta-data that defines CFA edit
+	 * operations that are done in addition to any action editing.
 	 */
 	/* When key=1, This is the VLAN tag VID value. */
 	#define TX_BD_LONG_CFA_META_VLAN_VID_MASK	UINT32_C(0xfff)
 	#define TX_BD_LONG_CFA_META_VLAN_VID_SFT	0
 	/* When key=1, This is the VLAN tag DE value. */
-	#define TX_BD_LONG_CFA_META_VLAN_DE		UINT32_C(0x1000)
+	#define TX_BD_LONG_CFA_META_VLAN_DE	UINT32_C(0x1000)
 	/* When key=1, This is the VLAN tag PRI value. */
 	#define TX_BD_LONG_CFA_META_VLAN_PRI_MASK	UINT32_C(0xe000)
 	#define TX_BD_LONG_CFA_META_VLAN_PRI_SFT	13
 	/* When key=1, This is the VLAN tag TPID select value. */
 	#define TX_BD_LONG_CFA_META_VLAN_TPID_MASK	UINT32_C(0x70000)
 	#define TX_BD_LONG_CFA_META_VLAN_TPID_SFT	16
-		/* 0x88a8 */
+	/* 0x88a8 */
 	#define TX_BD_LONG_CFA_META_VLAN_TPID_TPID88A8	(UINT32_C(0x0) << 16)
-		/* 0x8100 */
+	/* 0x8100 */
 	#define TX_BD_LONG_CFA_META_VLAN_TPID_TPID8100	(UINT32_C(0x1) << 16)
-		/* 0x9100 */
+	/* 0x9100 */
 	#define TX_BD_LONG_CFA_META_VLAN_TPID_TPID9100	(UINT32_C(0x2) << 16)
-		/* 0x9200 */
+	/* 0x9200 */
 	#define TX_BD_LONG_CFA_META_VLAN_TPID_TPID9200	(UINT32_C(0x3) << 16)
-		/* 0x9300 */
+	/* 0x9300 */
 	#define TX_BD_LONG_CFA_META_VLAN_TPID_TPID9300	(UINT32_C(0x4) << 16)
-		/* Value programmed in CFA VLANTPID register. */
+	/* Value programmed in CFA VLANTPID register. */
 	#define TX_BD_LONG_CFA_META_VLAN_TPID_TPIDCFG	(UINT32_C(0x5) << 16)
-	#define TX_BD_LONG_CFA_META_VLAN_TPID_LAST \
-					TX_BD_LONG_CFA_META_VLAN_TPID_TPIDCFG
+	#define TX_BD_LONG_CFA_META_VLAN_TPID_LAST	\
+		TX_BD_LONG_CFA_META_VLAN_TPID_TPIDCFG
 	/* When key=1, This is the VLAN tag TPID select value. */
 	#define TX_BD_LONG_CFA_META_VLAN_RESERVED_MASK	UINT32_C(0xff80000)
 	#define TX_BD_LONG_CFA_META_VLAN_RESERVED_SFT	19
 	/*
-	 * This field identifies the type of edit to be performed on the packet.
-	 * This value must be valid on the first BD of a packet.
+	 * This field identifies the type of edit to be performed on the
+	 * packet. This value must be valid on the first BD of a packet.
+	 */
+	#define TX_BD_LONG_CFA_META_KEY_MASK	UINT32_C(0xf0000000)
+	#define TX_BD_LONG_CFA_META_KEY_SFT	28
+	/* No editing */
+	#define TX_BD_LONG_CFA_META_KEY_NONE	(UINT32_C(0x0) << 28)
+	/*
+	 * - meta[17:16] - TPID select value (0 =
+	 * 0x8100). - meta[15:12] - PRI/DE value. -
+	 * meta[11:0] - VID value.
 	 */
-	#define TX_BD_LONG_CFA_META_KEY_MASK		UINT32_C(0xf0000000)
-	#define TX_BD_LONG_CFA_META_KEY_SFT		28
-		/* No editing */
-	#define TX_BD_LONG_CFA_META_KEY_NONE		(UINT32_C(0x0) << 28)
-		/*
-		 * - meta[17:16] - TPID select value (0 = 0x8100). - meta[15:12]
-		 * - PRI/DE value. - meta[11:0] - VID value.
-		 */
 	#define TX_BD_LONG_CFA_META_KEY_VLAN_TAG	(UINT32_C(0x1) << 28)
 	#define TX_BD_LONG_CFA_META_KEY_LAST	TX_BD_LONG_CFA_META_KEY_VLAN_TAG
-	uint32_t cfa_meta;
 } __attribute__((packed));
 
 /* RX Producer Packet BD (16 bytes) */
 struct rx_prod_pkt_bd {
+	uint16_t flags_type;
 	/* This value identifies the type of buffer descriptor. */
-	#define RX_PROD_PKT_BD_TYPE_MASK		UINT32_C(0x3f)
-	#define RX_PROD_PKT_BD_TYPE_SFT			0
-		/*
-		 * Indicates that this BD is 16B long and is an RX Producer (ie.
-		 * empty) buffer descriptor.
-		 */
-	#define RX_PROD_PKT_BD_TYPE_RX_PROD_PKT		(UINT32_C(0x4) << 0)
+	#define RX_PROD_PKT_BD_TYPE_MASK	UINT32_C(0x3f)
+	#define RX_PROD_PKT_BD_TYPE_SFT	0
 	/*
-	 * If set to 1, the packet will be placed at the address plus 2B. The 2
-	 * Bytes of padding will be written as zero.
+	 * Indicates that this BD is 16B long and is an
+	 * RX Producer (ie. empty) buffer descriptor.
 	 */
+	#define RX_PROD_PKT_BD_TYPE_RX_PROD_PKT	UINT32_C(0x4)
 	/*
-	 * This is intended to be used when the host buffer is cache-line
-	 * aligned to produce packets that are easy to parse in host memory
-	 * while still allowing writes to be cache line aligned.
+	 * If set to 1, the packet will be placed at the address plus
+	 * 2B. The 2 Bytes of padding will be written as zero.
 	 */
-	#define RX_PROD_PKT_BD_FLAGS_SOP_PAD		UINT32_C(0x40)
 	/*
-	 * If set to 1, the packet write will be padded out to the nearest
-	 * cache-line with zero value padding.
+	 * This is intended to be used when the host buffer is cache-
+	 * line aligned to produce packets that are easy to parse in
+	 * host memory while still allowing writes to be cache line
+	 * aligned.
 	 */
+	#define RX_PROD_PKT_BD_FLAGS_SOP_PAD	UINT32_C(0x40)
 	/*
-	 * If receive buffers start/end on cache-line boundaries, this feature
-	 * will ensure that all data writes on the PCI bus start/end on cache
-	 * line boundaries.
+	 * If set to 1, the packet write will be padded out to the
+	 * nearest cache-line with zero value padding.
 	 */
-	#define RX_PROD_PKT_BD_FLAGS_EOP_PAD		UINT32_C(0x80)
 	/*
-	 * This value is the number of additional buffers in the ring that
-	 * describe the buffer space to be consumed for the this packet. If the
-	 * value is zero, then the packet must fit within the space described by
-	 * this BD. If this value is 1 or more, it indicates how many additional
-	 * "buffer" BDs are in the ring immediately following this BD to be used
-	 * for the same network packet. Even if the packet to be placed does not
-	 * need all the additional buffers, they will be consumed anyway.
+	 * If receive buffers start/end on cache-line boundaries, this
+	 * feature will ensure that all data writes on the PCI bus
+	 * start/end on cache line boundaries.
+	 */
+	#define RX_PROD_PKT_BD_FLAGS_EOP_PAD	UINT32_C(0x80)
+	/*
+	 * This value is the number of additional buffers in the ring
+	 * that describe the buffer space to be consumed for the this
+	 * packet. If the value is zero, then the packet must fit within
+	 * the space described by this BD. If this value is 1 or more,
+	 * it indicates how many additional "buffer" BDs are in the ring
+	 * immediately following this BD to be used for the same network
+	 * packet. Even if the packet to be placed does not need all the
+	 * additional buffers, they will be consumed anyway.
 	 */
 	#define RX_PROD_PKT_BD_FLAGS_BUFFERS_MASK	UINT32_C(0x300)
 	#define RX_PROD_PKT_BD_FLAGS_BUFFERS_SFT	8
-	#define RX_PROD_PKT_BD_FLAGS_MASK		UINT32_C(0xffc0)
-	#define RX_PROD_PKT_BD_FLAGS_SFT		6
-	uint16_t flags_type;
-
+	#define RX_PROD_PKT_BD_FLAGS_MASK	UINT32_C(0xffc0)
+	#define RX_PROD_PKT_BD_FLAGS_SFT	6
+	uint16_t len;
 	/*
-	 * This is the length in Bytes of the host physical buffer where data
-	 * for the packet may be placed in host memory.
+	 * This is the length in Bytes of the host physical buffer where
+	 * data for the packet may be placed in host memory.
 	 */
 	/*
-	 * While this is a Byte resolution value, it is often advantageous to
-	 * ensure that the buffers provided end on a host cache line.
+	 * While this is a Byte resolution value, it is often
+	 * advantageous to ensure that the buffers provided end on a
+	 * host cache line.
 	 */
-	uint16_t len;
-
+	uint32_t opaque;
 	/*
-	 * The opaque data field is pass through to the completion and can be
-	 * used for any data that the driver wants to associate with this
-	 * receive buffer set.
+	 * The opaque data field is pass through to the completion and
+	 * can be used for any data that the driver wants to associate
+	 * with this receive buffer set.
 	 */
-	uint32_t opaque;
-
+	uint64_t addr;
 	/*
-	 * This is the host physical address where data for the packet may by
-	 * placed in host memory.
+	 * This is the host physical address where data for the packet
+	 * may by placed in host memory.
 	 */
 	/*
-	 * While this is a Byte resolution value, it is often advantageous to
-	 * ensure that the buffers provide start on a host cache line.
+	 * While this is a Byte resolution value, it is often
+	 * advantageous to ensure that the buffers provide start on a
+	 * host cache line.
 	 */
-	uint64_t addr;
 } __attribute__((packed));
 
 /* Completion Ring Structures */
-- 
2.4.3



More information about the dev mailing list