[dpdk-dev,v2,09/15] bnxt: Update various completion descriptors as per the 1.5.1 HWRM API

Message ID 20160926161917.GA28165@C02PT1RBG8WP.aus.broadcom.com (mailing list archive)
State Accepted, archived
Delegated to: Bruce Richardson
Headers

Commit Message

Ajit Khaparde Sept. 26, 2016, 4:19 p.m. UTC
  Update the PMD to use structures as per 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:
cmpl_base, tx_cmpl, rx_pkt_cmpl, rx_pkt_cmpl_hi, hwrm_fwd_req_cmpl,
hwrm_async_event_cmpl

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

Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
---
 drivers/net/bnxt/hsi_struct_def_dpdk.h | 1056 ++++++++++++++++----------------
 1 file changed, 537 insertions(+), 519 deletions(-)
  

Patch

diff --git a/drivers/net/bnxt/hsi_struct_def_dpdk.h b/drivers/net/bnxt/hsi_struct_def_dpdk.h
index 36e264a..5a195ad 100644
--- a/drivers/net/bnxt/hsi_struct_def_dpdk.h
+++ b/drivers/net/bnxt/hsi_struct_def_dpdk.h
@@ -560,688 +560,706 @@  struct rx_prod_pkt_bd {
 /* Note: This structure is used by the HWRM to communicate HWRM Error. */
 /* Base Completion Record (16 bytes) */
 struct cmpl_base {
+	uint16_t type;
 	/* unused is 10 b */
 	/*
-	 * This field indicates the exact type of the completion. By convention,
-	 * the LSB identifies the length of the record in 16B units. Even values
-	 * indicate 16B records. Odd values indicate 32B records.
-	 */
-	#define CMPL_BASE_TYPE_MASK			UINT32_C(0x3f)
-	#define CMPL_BASE_TYPE_SFT			0
-		/* TX L2 completion: Completion of TX packet. Length = 16B */
-	#define CMPL_BASE_TYPE_TX_L2			(UINT32_C(0x0) << 0)
-		/*
-		 * RX L2 completion: Completion of and L2 RX packet.
-		 * Length = 32B
-		*/
-	#define CMPL_BASE_TYPE_RX_L2			(UINT32_C(0x11) << 0)
-		/*
-		 * RX Aggregation Buffer completion : Completion of an L2
-		 * aggregation buffer in support of TPA, HDS, or Jumbo packet
-		 * completion. Length = 16B
-		 */
-	#define CMPL_BASE_TYPE_RX_AGG			(UINT32_C(0x12) << 0)
-		/*
-		 * RX L2 TPA Start Completion: Completion at the beginning of a
-		 * TPA operation. Length = 32B
-		 */
-	#define CMPL_BASE_TYPE_RX_TPA_START		(UINT32_C(0x13) << 0)
-		/*
-		 * RX L2 TPA End Completion: Completion at the end of a TPA
-		 * operation. Length = 32B
-		 */
-	#define CMPL_BASE_TYPE_RX_TPA_END		(UINT32_C(0x15) << 0)
-		/*
-		 * Statistics Ejection Completion: Completion of statistics data
-		 * ejection buffer. Length = 16B
-		 */
-	#define CMPL_BASE_TYPE_STAT_EJECT		(UINT32_C(0x1a) << 0)
-		/* HWRM Command Completion: Completion of an HWRM command. */
-	#define CMPL_BASE_TYPE_HWRM_DONE		(UINT32_C(0x20) << 0)
-		/* Forwarded HWRM Request */
-	#define CMPL_BASE_TYPE_HWRM_FWD_REQ		(UINT32_C(0x22) << 0)
-		/* Forwarded HWRM Response */
-	#define CMPL_BASE_TYPE_HWRM_FWD_RESP		(UINT32_C(0x24) << 0)
-		/* HWRM Asynchronous Event Information */
-	#define CMPL_BASE_TYPE_HWRM_ASYNC_EVENT		(UINT32_C(0x2e) << 0)
-		/* CQ Notification */
-	#define CMPL_BASE_TYPE_CQ_NOTIFICATION		(UINT32_C(0x30) << 0)
-		/* SRQ Threshold Event */
-	#define CMPL_BASE_TYPE_SRQ_EVENT		(UINT32_C(0x32) << 0)
-		/* DBQ Threshold Event */
-	#define CMPL_BASE_TYPE_DBQ_EVENT		(UINT32_C(0x34) << 0)
-		/* QP Async Notification */
-	#define CMPL_BASE_TYPE_QP_EVENT			(UINT32_C(0x38) << 0)
-		/* Function Async Notification */
-	#define CMPL_BASE_TYPE_FUNC_EVENT		(UINT32_C(0x3a) << 0)
-	uint16_t type;
-
+	 * This field indicates the exact type of the completion. By
+	 * convention, the LSB identifies the length of the record in
+	 * 16B units. Even values indicate 16B records. Odd values
+	 * indicate 32B records.
+	 */
+	#define CMPL_BASE_TYPE_MASK	UINT32_C(0x3f)
+	#define CMPL_BASE_TYPE_SFT	0
+	/* TX L2 completion: Completion of TX packet. Length = 16B */
+	#define CMPL_BASE_TYPE_TX_L2	UINT32_C(0x0)
+	/*
+	 * RX L2 completion: Completion of and L2 RX
+	 * packet. Length = 32B
+	 */
+	#define CMPL_BASE_TYPE_RX_L2	UINT32_C(0x11)
+	/*
+	 * RX Aggregation Buffer completion : Completion
+	 * of an L2 aggregation buffer in support of
+	 * TPA, HDS, or Jumbo packet completion. Length
+	 * = 16B
+	 */
+	#define CMPL_BASE_TYPE_RX_AGG	UINT32_C(0x12)
+	/*
+	 * RX L2 TPA Start Completion: Completion at the
+	 * beginning of a TPA operation. Length = 32B
+	 */
+	#define CMPL_BASE_TYPE_RX_TPA_START	UINT32_C(0x13)
+	/*
+	 * RX L2 TPA End Completion: Completion at the
+	 * end of a TPA operation. Length = 32B
+	 */
+	#define CMPL_BASE_TYPE_RX_TPA_END	UINT32_C(0x15)
+	/*
+	 * Statistics Ejection Completion: Completion of
+	 * statistics data ejection buffer. Length = 16B
+	 */
+	#define CMPL_BASE_TYPE_STAT_EJECT	UINT32_C(0x1a)
+	/* HWRM Command Completion: Completion of an HWRM command. */
+	#define CMPL_BASE_TYPE_HWRM_DONE	UINT32_C(0x20)
+	/* Forwarded HWRM Request */
+	#define CMPL_BASE_TYPE_HWRM_FWD_REQ	UINT32_C(0x22)
+	/* Forwarded HWRM Response */
+	#define CMPL_BASE_TYPE_HWRM_FWD_RESP	UINT32_C(0x24)
+	/* HWRM Asynchronous Event Information */
+	#define CMPL_BASE_TYPE_HWRM_ASYNC_EVENT	UINT32_C(0x2e)
+	/* CQ Notification */
+	#define CMPL_BASE_TYPE_CQ_NOTIFICATION	UINT32_C(0x30)
+	/* SRQ Threshold Event */
+	#define CMPL_BASE_TYPE_SRQ_EVENT	UINT32_C(0x32)
+	/* DBQ Threshold Event */
+	#define CMPL_BASE_TYPE_DBQ_EVENT	UINT32_C(0x34)
+	/* QP Async Notification */
+	#define CMPL_BASE_TYPE_QP_EVENT	UINT32_C(0x38)
+	/* Function Async Notification */
+	#define CMPL_BASE_TYPE_FUNC_EVENT	UINT32_C(0x3a)
+	/* unused is 10 b */
 	uint16_t info1;
+	/* info1 is 16 b */
 	uint32_t info2;
-
+	/* info2 is 32 b */
+	uint32_t info3_v;
+	/* info3 is 31 b */
 	/*
-	 * This value is written by the NIC such that it will be different for
-	 * each pass through the completion queue. The even passes will write 1.
-	 * The odd passes will write 0.
+	 * This value is written by the NIC such that it will be
+	 * different for each pass through the completion queue. The
+	 * even passes will write 1. The odd passes will write 0.
 	 */
-	#define CMPL_BASE_V				UINT32_C(0x1)
+	#define CMPL_BASE_V	UINT32_C(0x1)
 	/* info3 is 31 b */
-	#define CMPL_BASE_INFO3_MASK			UINT32_C(0xfffffffe)
-	#define CMPL_BASE_INFO3_SFT			1
-	uint32_t info3_v;
-
+	#define CMPL_BASE_INFO3_MASK	UINT32_C(0xfffffffe)
+	#define CMPL_BASE_INFO3_SFT	1
 	uint32_t info4;
+	/* info4 is 32 b */
 } __attribute__((packed));
 
 /* TX Completion Record (16 bytes) */
 struct tx_cmpl {
+	uint16_t flags_type;
 	/*
-	 * This field indicates the exact type of the completion. By convention,
-	 * the LSB identifies the length of the record in 16B units. Even values
-	 * indicate 16B records. Odd values indicate 32B records.
+	 * This field indicates the exact type of the completion. By
+	 * convention, the LSB identifies the length of the record in
+	 * 16B units. Even values indicate 16B records. Odd values
+	 * indicate 32B records.
 	 */
-	#define TX_CMPL_TYPE_MASK			UINT32_C(0x3f)
-	#define TX_CMPL_TYPE_SFT			0
-		/* TX L2 completion: Completion of TX packet. Length = 16B */
-	#define TX_CMPL_TYPE_TX_L2			(UINT32_C(0x0) << 0)
+	#define TX_CMPL_TYPE_MASK	UINT32_C(0x3f)
+	#define TX_CMPL_TYPE_SFT	0
+	/* TX L2 completion: Completion of TX packet. Length = 16B */
+	#define TX_CMPL_TYPE_TX_L2	UINT32_C(0x0)
 	/*
-	 * When this bit is '1', it indicates a packet that has an error of some
-	 * type. Type of error is indicated in error_flags.
+	 * When this bit is '1', it indicates a packet that has an error
+	 * of some type. Type of error is indicated in error_flags.
 	 */
-	#define TX_CMPL_FLAGS_ERROR			UINT32_C(0x40)
+	#define TX_CMPL_FLAGS_ERROR	UINT32_C(0x40)
 	/*
-	 * When this bit is '1', it indicates that the packet completed was
-	 * transmitted using the push acceleration data provided by the driver.
-	 * When this bit is '0', it indicates that the packet had not push
-	 * acceleration data written or was executed as a normal packet even
-	 * though push data was provided.
+	 * When this bit is '1', it indicates that the packet completed
+	 * was transmitted using the push acceleration data provided by
+	 * the driver. When this bit is '0', it indicates that the
+	 * packet had not push acceleration data written or was executed
+	 * as a normal packet even though push data was provided.
 	 */
-	#define TX_CMPL_FLAGS_PUSH			UINT32_C(0x80)
-	#define TX_CMPL_FLAGS_MASK			UINT32_C(0xffc0)
-	#define TX_CMPL_FLAGS_SFT			6
-	uint16_t flags_type;
-
+	#define TX_CMPL_FLAGS_PUSH	UINT32_C(0x80)
+	#define TX_CMPL_FLAGS_MASK	UINT32_C(0xffc0)
+	#define TX_CMPL_FLAGS_SFT	6
 	uint16_t unused_0;
-
+	/* unused1 is 16 b */
+	uint32_t opaque;
 	/*
-	 * This is a copy of the opaque field from the first TX BD of this
-	 * transmitted packet.
+	 * This is a copy of the opaque field from the first TX BD of
+	 * this transmitted packet.
 	 */
-	uint32_t opaque;
-
+	uint16_t errors_v;
 	/*
-	 * This value is written by the NIC such that it will be different for
-	 * each pass through the completion queue. The even passes will write 1.
-	 * The odd passes will write 0.
+	 * This value is written by the NIC such that it will be
+	 * different for each pass through the completion queue. The
+	 * even passes will write 1. The odd passes will write 0.
 	 */
-	#define TX_CMPL_V				UINT32_C(0x1)
+	#define TX_CMPL_V	UINT32_C(0x1)
 	/*
-	 * This error indicates that there was some sort of problem with the BDs
-	 * for the packet.
+	 * This error indicates that there was some sort of problem with
+	 * the BDs for the packet.
 	 */
 	#define TX_CMPL_ERRORS_BUFFER_ERROR_MASK	UINT32_C(0xe)
-	#define TX_CMPL_ERRORS_BUFFER_ERROR_SFT		1
-		/* No error */
+	#define TX_CMPL_ERRORS_BUFFER_ERROR_SFT	1
+	/* No error */
 	#define TX_CMPL_ERRORS_BUFFER_ERROR_NO_ERROR	(UINT32_C(0x0) << 1)
-		/* Bad Format: BDs were not formatted correctly. */
+	/* Bad Format: BDs were not formatted correctly. */
 	#define TX_CMPL_ERRORS_BUFFER_ERROR_BAD_FMT	(UINT32_C(0x2) << 1)
-	#define TX_CMPL_ERRORS_BUFFER_ERROR_LAST \
-					TX_CMPL_ERRORS_BUFFER_ERROR_BAD_FMT
+	#define TX_CMPL_ERRORS_BUFFER_ERROR_LAST	\
+		TX_CMPL_ERRORS_BUFFER_ERROR_BAD_FMT
 	/*
-	 * When this bit is '1', it indicates that the length of the packet was
-	 * zero. No packet was transmitted.
+	 * When this bit is '1', it indicates that the length of the
+	 * packet was zero. No packet was transmitted.
 	 */
-	#define TX_CMPL_ERRORS_ZERO_LENGTH_PKT		UINT32_C(0x10)
+	#define TX_CMPL_ERRORS_ZERO_LENGTH_PKT	UINT32_C(0x10)
 	/*
-	 * When this bit is '1', it indicates that the packet was longer than
-	 * the programmed limit in TDI. No packet was transmitted.
+	 * When this bit is '1', it indicates that the packet was longer
+	 * than the programmed limit in TDI. No packet was transmitted.
 	 */
 	#define TX_CMPL_ERRORS_EXCESSIVE_BD_LENGTH	UINT32_C(0x20)
 	/*
-	 * When this bit is '1', it indicates that one or more of the BDs
-	 * associated with this packet generated a PCI error. This probably
-	 * means the address was not valid.
+	 * When this bit is '1', it indicates that one or more of the
+	 * BDs associated with this packet generated a PCI error. This
+	 * probably means the address was not valid.
 	 */
-	#define TX_CMPL_ERRORS_DMA_ERROR		UINT32_C(0x40)
+	#define TX_CMPL_ERRORS_DMA_ERROR	UINT32_C(0x40)
 	/*
-	 * When this bit is '1', it indicates that the packet was longer than
-	 * indicated by the hint. No packet was transmitted.
+	 * When this bit is '1', it indicates that the packet was longer
+	 * than indicated by the hint. No packet was transmitted.
 	 */
-	#define TX_CMPL_ERRORS_HINT_TOO_SHORT		UINT32_C(0x80)
+	#define TX_CMPL_ERRORS_HINT_TOO_SHORT	UINT32_C(0x80)
 	/*
-	 * When this bit is '1', it indicates that the packet was dropped due to
-	 * Poison TLP error on one or more of the TLPs in the PXP completion.
+	 * When this bit is '1', it indicates that the packet was
+	 * dropped due to Poison TLP error on one or more of the TLPs in
+	 * the PXP completion.
 	 */
-	#define TX_CMPL_ERRORS_POISON_TLP_ERROR		UINT32_C(0x100)
-	#define TX_CMPL_ERRORS_MASK			UINT32_C(0xfffe)
-	#define TX_CMPL_ERRORS_SFT			1
-	uint16_t errors_v;
-
+	#define TX_CMPL_ERRORS_POISON_TLP_ERROR	UINT32_C(0x100)
+	#define TX_CMPL_ERRORS_MASK	UINT32_C(0xfffe)
+	#define TX_CMPL_ERRORS_SFT	1
 	uint16_t unused_1;
+	/* unused2 is 16 b */
 	uint32_t unused_2;
-} __attribute__((packed)) tx_cmpl_t, *ptx_cmpl_t;
+	/* unused3 is 32 b */
+} __attribute__((packed));
 
 /* RX Packet Completion Record (32 bytes split to 2 16-byte struct) */
 struct rx_pkt_cmpl {
+	uint16_t flags_type;
 	/*
-	 * This field indicates the exact type of the completion. By convention,
-	 * the LSB identifies the length of the record in 16B units. Even values
-	 * indicate 16B records. Odd values indicate 32B records.
+	 * This field indicates the exact type of the completion. By
+	 * convention, the LSB identifies the length of the record in
+	 * 16B units. Even values indicate 16B records. Odd values
+	 * indicate 32B records.
 	 */
-	#define RX_PKT_CMPL_TYPE_MASK			UINT32_C(0x3f)
-	#define RX_PKT_CMPL_TYPE_SFT			0
-		/*
-		 * RX L2 completion: Completion of and L2 RX packet.
-		 * Length = 32B
-		 */
-	#define RX_PKT_CMPL_TYPE_RX_L2			(UINT32_C(0x11) << 0)
+	#define RX_PKT_CMPL_TYPE_MASK	UINT32_C(0x3f)
+	#define RX_PKT_CMPL_TYPE_SFT	0
 	/*
-	 * When this bit is '1', it indicates a packet that has an error of some
-	 * type. Type of error is indicated in error_flags.
+	 * RX L2 completion: Completion of and L2 RX
+	 * packet. Length = 32B
 	 */
-	#define RX_PKT_CMPL_FLAGS_ERROR			UINT32_C(0x40)
+	#define RX_PKT_CMPL_TYPE_RX_L2	UINT32_C(0x11)
+	/*
+	 * When this bit is '1', it indicates a packet that has an error
+	 * of some type. Type of error is indicated in error_flags.
+	 */
+	#define RX_PKT_CMPL_FLAGS_ERROR	UINT32_C(0x40)
 	/* This field indicates how the packet was placed in the buffer. */
 	#define RX_PKT_CMPL_FLAGS_PLACEMENT_MASK	UINT32_C(0x380)
-	#define RX_PKT_CMPL_FLAGS_PLACEMENT_SFT		7
-		/* Normal: Packet was placed using normal algorithm. */
+	#define RX_PKT_CMPL_FLAGS_PLACEMENT_SFT	7
+	/* Normal: Packet was placed using normal algorithm. */
 	#define RX_PKT_CMPL_FLAGS_PLACEMENT_NORMAL	(UINT32_C(0x0) << 7)
-		/* Jumbo: Packet was placed using jumbo algorithm. */
+	/* Jumbo: Packet was placed using jumbo algorithm. */
 	#define RX_PKT_CMPL_FLAGS_PLACEMENT_JUMBO	(UINT32_C(0x1) << 7)
-		/*
-		 * Header/Data Separation: Packet was placed using Header/Data
-		 * separation algorithm. The separation location is indicated by
-		 * the itype field.
-		 */
-	#define RX_PKT_CMPL_FLAGS_PLACEMENT_HDS		(UINT32_C(0x2) << 7)
-	#define RX_PKT_CMPL_FLAGS_PLACEMENT_LAST \
-						RX_PKT_CMPL_FLAGS_PLACEMENT_HDS
+	/*
+	 * Header/Data Separation: Packet was placed
+	 * using Header/Data separation algorithm. The
+	 * separation location is indicated by the itype
+	 * field.
+	 */
+	#define RX_PKT_CMPL_FLAGS_PLACEMENT_HDS	(UINT32_C(0x2) << 7)
+	#define RX_PKT_CMPL_FLAGS_PLACEMENT_LAST	RX_PKT_CMPL_FLAGS_PLACEMENT_HDS
 	/* This bit is '1' if the RSS field in this completion is valid. */
-	#define RX_PKT_CMPL_FLAGS_RSS_VALID		UINT32_C(0x400)
+	#define RX_PKT_CMPL_FLAGS_RSS_VALID	UINT32_C(0x400)
+	/* unused is 1 b */
 	/*
-	 * This value indicates what the inner packet determined for the packet
-	 * was.
+	 * This value indicates what the inner packet determined for the
+	 * packet was.
 	 */
-	#define RX_PKT_CMPL_FLAGS_ITYPE_MASK		UINT32_C(0xf000)
-	#define RX_PKT_CMPL_FLAGS_ITYPE_SFT		12
-		/* Not Known: Indicates that the packet type was not known. */
+	#define RX_PKT_CMPL_FLAGS_ITYPE_MASK	UINT32_C(0xf000)
+	#define RX_PKT_CMPL_FLAGS_ITYPE_SFT	12
+	/* Not Known: Indicates that the packet type was not known. */
 	#define RX_PKT_CMPL_FLAGS_ITYPE_NOT_KNOWN	(UINT32_C(0x0) << 12)
-		/*
-		 * IP Packet: Indicates that the packet was an IP packet, but
-		 * further classification was not possible.
-		 */
-	#define RX_PKT_CMPL_FLAGS_ITYPE_IP		(UINT32_C(0x1) << 12)
-		/*
-		 * TCP Packet: Indicates that the packet was IP and TCP. This
-		 * indicates that the payload_offset field is valid.
-		 */
-	#define RX_PKT_CMPL_FLAGS_ITYPE_TCP		(UINT32_C(0x2) << 12)
-		/*
-		 * UDP Packet: Indicates that the packet was IP and UDP. This
-		 * indicates that the payload_offset field is valid.
-		 */
-	#define RX_PKT_CMPL_FLAGS_ITYPE_UDP		(UINT32_C(0x3) << 12)
-		/*
-		 * FCoE Packet: Indicates that the packet was recognized as a
-		 * FCoE. This also indicates that the payload_offset field is
-		 * valid.
-		 */
-	#define RX_PKT_CMPL_FLAGS_ITYPE_FCOE		(UINT32_C(0x4) << 12)
-		/*
-		 * RoCE Packet: Indicates that the packet was recognized as a
-		 * RoCE. This also indicates that the payload_offset field is
-		 * valid.
-		 */
-	#define RX_PKT_CMPL_FLAGS_ITYPE_ROCE		(UINT32_C(0x5) << 12)
-		/*
-		 * ICMP Packet: Indicates that the packet was recognized as
-		 * ICMP. This indicates that the payload_offset field is valid.
-		 */
-	#define RX_PKT_CMPL_FLAGS_ITYPE_ICMP		(UINT32_C(0x7) << 12)
-		/*
-		 * PtP packet wo/timestamp: Indicates that the packet was
-		 * recognized as a PtP packet.
-		 */
-	#define RX_PKT_CMPL_FLAGS_ITYPE_PTP_WO_TIMESTAMP \
-							(UINT32_C(0x8) << 12)
-		/*
-		 * PtP packet w/timestamp: Indicates that the packet was
-		 * recognized as a PtP packet and that a timestamp was taken for
-		 * the packet.
-		 */
-	#define RX_PKT_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP	(UINT32_C(0x9) << 12)
-	#define RX_PKT_CMPL_FLAGS_ITYPE_LAST \
-					RX_PKT_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP
-	#define RX_PKT_CMPL_FLAGS_MASK			UINT32_C(0xffc0)
-	#define RX_PKT_CMPL_FLAGS_SFT			6
-	uint16_t flags_type;
-
 	/*
-	 * This is the length of the data for the packet stored in the buffer(s)
-	 * identified by the opaque value. This includes the packet BD and any
-	 * associated buffer BDs. This does not include the the length of any
-	 * data places in aggregation BDs.
+	 * IP Packet: Indicates that the packet was an
+	 * IP packet, but further classification was not
+	 * possible.
+	 */
+	#define RX_PKT_CMPL_FLAGS_ITYPE_IP	(UINT32_C(0x1) << 12)
+	/*
+	 * TCP Packet: Indicates that the packet was IP
+	 * and TCP. This indicates that the
+	 * payload_offset field is valid.
+	 */
+	#define RX_PKT_CMPL_FLAGS_ITYPE_TCP	(UINT32_C(0x2) << 12)
+	/*
+	 * UDP Packet: Indicates that the packet was IP
+	 * and UDP. This indicates that the
+	 * payload_offset field is valid.
+	 */
+	#define RX_PKT_CMPL_FLAGS_ITYPE_UDP	(UINT32_C(0x3) << 12)
+	/*
+	 * FCoE Packet: Indicates that the packet was
+	 * recognized as a FCoE. This also indicates
+	 * that the payload_offset field is valid.
 	 */
+	#define RX_PKT_CMPL_FLAGS_ITYPE_FCOE	(UINT32_C(0x4) << 12)
+	/*
+	 * RoCE Packet: Indicates that the packet was
+	 * recognized as a RoCE. This also indicates
+	 * that the payload_offset field is valid.
+	 */
+	#define RX_PKT_CMPL_FLAGS_ITYPE_ROCE	(UINT32_C(0x5) << 12)
+	/*
+	 * ICMP Packet: Indicates that the packet was
+	 * recognized as ICMP. This indicates that the
+	 * payload_offset field is valid.
+	 */
+	#define RX_PKT_CMPL_FLAGS_ITYPE_ICMP	(UINT32_C(0x7) << 12)
+	/*
+	 * PtP packet wo/timestamp: Indicates that the
+	 * packet was recognized as a PtP packet.
+	 */
+	#define RX_PKT_CMPL_FLAGS_ITYPE_PTP_WO_TIMESTAMP	(UINT32_C(0x8) << 12)
+	/*
+	 * PtP packet w/timestamp: Indicates that the
+	 * packet was recognized as a PtP packet and
+	 * that a timestamp was taken for the packet.
+	 */
+	#define RX_PKT_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP	(UINT32_C(0x9) << 12)
+	#define RX_PKT_CMPL_FLAGS_ITYPE_LAST	RX_PKT_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP
+	#define RX_PKT_CMPL_FLAGS_MASK	UINT32_C(0xffc0)
+	#define RX_PKT_CMPL_FLAGS_SFT	6
 	uint16_t len;
-
 	/*
-	 * This is a copy of the opaque field from the RX BD this completion
-	 * corresponds to.
+	 * This is the length of the data for the packet stored in the
+	 * buffer(s) identified by the opaque value. This includes the
+	 * packet BD and any associated buffer BDs. This does not
+	 * include the the length of any data places in aggregation BDs.
 	 */
 	uint32_t opaque;
-
 	/*
-	 * This value is written by the NIC such that it will be different for
-	 * each pass through the completion queue. The even passes will write 1.
-	 * The odd passes will write 0.
+	 * This is a copy of the opaque field from the RX BD this
+	 * completion corresponds to.
 	 */
-	#define RX_PKT_CMPL_V1				UINT32_C(0x1)
+	uint8_t agg_bufs_v1;
+	/* unused1 is 2 b */
 	/*
-	 * This value is the number of aggregation buffers that follow this
-	 * entry in the completion ring that are a part of this packet. If the
-	 * value is zero, then the packet is completely contained in the buffer
-	 * space provided for the packet in the RX ring.
+	 * This value is written by the NIC such that it will be
+	 * different for each pass through the completion queue. The
+	 * even passes will write 1. The odd passes will write 0.
 	 */
-	#define RX_PKT_CMPL_AGG_BUFS_MASK		UINT32_C(0x3e)
-	#define RX_PKT_CMPL_AGG_BUFS_SFT		1
-	uint8_t agg_bufs_v1;
-
+	#define RX_PKT_CMPL_V1	UINT32_C(0x1)
 	/*
-	 * This is the RSS hash type for the packet. The value is packed
-	 * {tuple_extrac_op[1:0],rss_profile_id[4:0],tuple_extrac_op[2]}.
+	 * This value is the number of aggregation buffers that follow
+	 * this entry in the completion ring that are a part of this
+	 * packet. If the value is zero, then the packet is completely
+	 * contained in the buffer space provided for the packet in the
+	 * RX ring.
 	 */
+	#define RX_PKT_CMPL_AGG_BUFS_MASK	UINT32_C(0x3e)
+	#define RX_PKT_CMPL_AGG_BUFS_SFT	1
+	/* unused1 is 2 b */
 	uint8_t rss_hash_type;
-
 	/*
-	 * This value indicates the offset from the beginning of the packet
-	 * where the inner payload starts. This value is valid for TCP, UDP,
-	 * FCoE, and RoCE packets.
+	 * This is the RSS hash type for the packet. The value is packed
+	 * {tuple_extrac_op[1:0],rss_profile_id[4:0],tuple_extrac_op[2]}
+	 * . The value of tuple_extrac_op provides the information about
+	 * what fields the hash was computed on. * 0: The RSS hash was
+	 * computed over source IP address, destination IP address,
+	 * source port, and destination port of inner IP and TCP or UDP
+	 * headers. Note: For non-tunneled packets, the packet headers
+	 * are considered inner packet headers for the RSS hash
+	 * computation purpose. * 1: The RSS hash was computed over
+	 * source IP address and destination IP address of inner IP
+	 * header. Note: For non-tunneled packets, the packet headers
+	 * are considered inner packet headers for the RSS hash
+	 * computation purpose. * 2: The RSS hash was computed over
+	 * source IP address, destination IP address, source port, and
+	 * destination port of IP and TCP or UDP headers of outer tunnel
+	 * headers. Note: For non-tunneled packets, this value is not
+	 * applicable. * 3: The RSS hash was computed over source IP
+	 * address and destination IP address of IP header of outer
+	 * tunnel headers. Note: For non-tunneled packets, this value is
+	 * not applicable. Note that 4-tuples values listed above are
+	 * applicable for layer 4 protocols supported and enabled for
+	 * RSS in the hardware, HWRM firmware, and drivers. For example,
+	 * if RSS hash is supported and enabled for TCP traffic only,
+	 * then the values of tuple_extract_op corresponding to 4-tuples
+	 * are only valid for TCP traffic.
 	 */
 	uint8_t payload_offset;
-
-	uint8_t unused_1;
-
 	/*
-	 * This value is the RSS hash value calculated for the packet based on
-	 * the mode bits and key value in the VNIC.
+	 * This value indicates the offset in bytes from the beginning
+	 * of the packet where the inner payload starts. This value is
+	 * valid for TCP, UDP, FCoE, and RoCE packets. A value of zero
+	 * indicates that header is 256B into the packet.
 	 */
+	uint8_t unused_1;
+	/* unused2 is 8 b */
 	uint32_t rss_hash;
+	/*
+	 * This value is the RSS hash value calculated for the packet
+	 * based on the mode bits and key value in the VNIC.
+	 */
 } __attribute__((packed));
 
 /* last 16 bytes of RX Packet Completion Record */
 struct rx_pkt_cmpl_hi {
+	uint32_t flags2;
 	/*
-	 * This indicates that the ip checksum was calculated for the inner
-	 * packet and that the ip_cs_error field indicates if there was an
-	 * error.
+	 * This indicates that the ip checksum was calculated for the
+	 * inner packet and that the ip_cs_error field indicates if
+	 * there was an error.
 	 */
-	#define RX_PKT_CMPL_FLAGS2_IP_CS_CALC		UINT32_C(0x1)
+	#define RX_PKT_CMPL_FLAGS2_IP_CS_CALC	UINT32_C(0x1)
 	/*
-	 * This indicates that the TCP, UDP or ICMP checksum was calculated for
-	 * the inner packet and that the l4_cs_error field indicates if there
-	 * was an error.
+	 * This indicates that the TCP, UDP or ICMP checksum was
+	 * calculated for the inner packet and that the l4_cs_error
+	 * field indicates if there was an error.
 	 */
-	#define RX_PKT_CMPL_FLAGS2_L4_CS_CALC		UINT32_C(0x2)
+	#define RX_PKT_CMPL_FLAGS2_L4_CS_CALC	UINT32_C(0x2)
 	/*
-	 * This indicates that the ip checksum was calculated for the tunnel
-	 * header and that the t_ip_cs_error field indicates if there was an
-	 * error.
+	 * This indicates that the ip checksum was calculated for the
+	 * tunnel header and that the t_ip_cs_error field indicates if
+	 * there was an error.
 	 */
-	#define RX_PKT_CMPL_FLAGS2_T_IP_CS_CALC		UINT32_C(0x4)
+	#define RX_PKT_CMPL_FLAGS2_T_IP_CS_CALC	UINT32_C(0x4)
 	/*
-	 * This indicates that the UDP checksum was calculated for the tunnel
-	 * packet and that the t_l4_cs_error field indicates if there was an
-	 * error.
+	 * This indicates that the UDP checksum was calculated for the
+	 * tunnel packet and that the t_l4_cs_error field indicates if
+	 * there was an error.
 	 */
-	#define RX_PKT_CMPL_FLAGS2_T_L4_CS_CALC		UINT32_C(0x8)
+	#define RX_PKT_CMPL_FLAGS2_T_L4_CS_CALC	UINT32_C(0x8)
 	/* This value indicates what format the metadata field is. */
 	#define RX_PKT_CMPL_FLAGS2_META_FORMAT_MASK	UINT32_C(0xf0)
 	#define RX_PKT_CMPL_FLAGS2_META_FORMAT_SFT	4
-		/* No metadata informtaion. Value is zero. */
+	/* No metadata informtaion. Value is zero. */
 	#define RX_PKT_CMPL_FLAGS2_META_FORMAT_NONE	(UINT32_C(0x0) << 4)
-		/*
-		 * The metadata field contains the VLAN tag and TPID value. -
-		 * metadata[11:0] contains the vlan VID value. - metadata[12]
-		 * contains the vlan DE value. - metadata[15:13] contains the
-		 * vlan PRI value. - metadata[31:16] contains the vlan TPID
-		 * value.
-		 */
+	/*
+	 * The metadata field contains the VLAN tag and
+	 * TPID value. - metadata[11:0] contains the
+	 * vlan VID value. - metadata[12] contains the
+	 * vlan DE value. - metadata[15:13] contains the
+	 * vlan PRI value. - metadata[31:16] contains
+	 * the vlan TPID value.
+	 */
 	#define RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN	(UINT32_C(0x1) << 4)
-	#define RX_PKT_CMPL_FLAGS2_META_FORMAT_LAST \
-					RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN
+	#define RX_PKT_CMPL_FLAGS2_META_FORMAT_LAST	\
+		RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN
 	/*
-	 * This field indicates the IP type for the inner-most IP header. A
-	 * value of '0' indicates IPv4. A value of '1' indicates IPv6. This
-	 * value is only valid if itype indicates a packet with an IP header.
+	 * This field indicates the IP type for the inner-most IP
+	 * header. A value of '0' indicates IPv4. A value of '1'
+	 * indicates IPv6. This value is only valid if itype indicates a
+	 * packet with an IP header.
 	 */
-	#define RX_PKT_CMPL_FLAGS2_IP_TYPE		UINT32_C(0x100)
-	uint32_t flags2;
-
+	#define RX_PKT_CMPL_FLAGS2_IP_TYPE	UINT32_C(0x100)
+	uint32_t metadata;
 	/*
-	 * This is data from the CFA block as indicated by the meta_format
-	 * field.
+	 * This is data from the CFA block as indicated by the
+	 * meta_format field.
 	 */
 	/* When meta_format=1, this value is the VLAN VID. */
-	#define RX_PKT_CMPL_METADATA_VID_MASK		UINT32_C(0xfff)
-	#define RX_PKT_CMPL_METADATA_VID_SFT		0
+	#define RX_PKT_CMPL_METADATA_VID_MASK	UINT32_C(0xfff)
+	#define RX_PKT_CMPL_METADATA_VID_SFT	0
 	/* When meta_format=1, this value is the VLAN DE. */
-	#define RX_PKT_CMPL_METADATA_DE			UINT32_C(0x1000)
+	#define RX_PKT_CMPL_METADATA_DE	UINT32_C(0x1000)
 	/* When meta_format=1, this value is the VLAN PRI. */
-	#define RX_PKT_CMPL_METADATA_PRI_MASK		UINT32_C(0xe000)
-	#define RX_PKT_CMPL_METADATA_PRI_SFT		13
+	#define RX_PKT_CMPL_METADATA_PRI_MASK	UINT32_C(0xe000)
+	#define RX_PKT_CMPL_METADATA_PRI_SFT	13
 	/* When meta_format=1, this value is the VLAN TPID. */
-	#define RX_PKT_CMPL_METADATA_TPID_MASK		UINT32_C(0xffff0000)
-	#define RX_PKT_CMPL_METADATA_TPID_SFT		16
-	uint32_t metadata;
-
+	#define RX_PKT_CMPL_METADATA_TPID_MASK	UINT32_C(0xffff0000)
+	#define RX_PKT_CMPL_METADATA_TPID_SFT	16
+	uint16_t errors_v2;
 	/*
-	 * This value is written by the NIC such that it will be different for
-	 * each pass through the completion queue. The even passes will write 1.
-	 * The odd passes will write 0.
+	 * This value is written by the NIC such that it will be
+	 * different for each pass through the completion queue. The
+	 * even passes will write 1. The odd passes will write 0.
 	 */
-	#define RX_PKT_CMPL_V2				UINT32_C(0x1)
+	#define RX_PKT_CMPL_V2	UINT32_C(0x1)
 	/*
-	 * This error indicates that there was some sort of problem with the BDs
-	 * for the packet that was found after part of the packet was already
-	 * placed. The packet should be treated as invalid.
+	 * This error indicates that there was some sort of problem with
+	 * the BDs for the packet that was found after part of the
+	 * packet was already placed. The packet should be treated as
+	 * invalid.
 	 */
 	#define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_MASK	UINT32_C(0xe)
 	#define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_SFT	1
-		/* No buffer error */
-	#define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_NO_BUFFER \
-							(UINT32_C(0x0) << 1)
-		/*
-		 * Did Not Fit: Packet did not fit into packet buffer provided.
-		 * For regular placement, this means the packet did not fit in
-		 * the buffer provided. For HDS and jumbo placement, this means
-		 * that the packet could not be placed into 7 physical buffers
-		 * or less.
-		 */
-	#define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_DID_NOT_FIT \
-							(UINT32_C(0x1) << 1)
-		/*
-		 * Not On Chip: All BDs needed for the packet were not on-chip
-		 * when the packet arrived.
-		 */
-	#define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_NOT_ON_CHIP \
-							(UINT32_C(0x2) << 1)
-		/* Bad Format: BDs were not formatted correctly. */
-	#define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_BAD_FORMAT \
-							(UINT32_C(0x3) << 1)
-	#define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_LAST \
-				RX_PKT_CMPL_ERRORS_BUFFER_ERROR_BAD_FORMAT
+	/* No buffer error */
+	#define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_NO_BUFFER	(UINT32_C(0x0) << 1)
+	/*
+	 * Did Not Fit: Packet did not fit into packet
+	 * buffer provided. For regular placement, this
+	 * means the packet did not fit in the buffer
+	 * provided. For HDS and jumbo placement, this
+	 * means that the packet could not be placed
+	 * into 7 physical buffers or less.
+	 */
+	#define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_DID_NOT_FIT	(UINT32_C(0x1) << 1)
+	/*
+	 * Not On Chip: All BDs needed for the packet
+	 * were not on-chip when the packet arrived.
+	 */
+	#define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_NOT_ON_CHIP	(UINT32_C(0x2) << 1)
+	/* Bad Format: BDs were not formatted correctly. */
+	#define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_BAD_FORMAT	(UINT32_C(0x3) << 1)
+	#define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_LAST	\
+		RX_PKT_CMPL_ERRORS_BUFFER_ERROR_BAD_FORMAT
 	/* This indicates that there was an error in the IP header checksum. */
-	#define RX_PKT_CMPL_ERRORS_IP_CS_ERROR		UINT32_C(0x10)
+	#define RX_PKT_CMPL_ERRORS_IP_CS_ERROR	UINT32_C(0x10)
 	/*
-	 * This indicates that there was an error in the TCP, UDP or ICMP
-	 * checksum.
+	 * This indicates that there was an error in the TCP, UDP or
+	 * ICMP checksum.
 	 */
-	#define RX_PKT_CMPL_ERRORS_L4_CS_ERROR		UINT32_C(0x20)
+	#define RX_PKT_CMPL_ERRORS_L4_CS_ERROR	UINT32_C(0x20)
 	/*
-	 * This indicates that there was an error in the tunnel IP header
-	 * checksum.
+	 * This indicates that there was an error in the tunnel IP
+	 * header checksum.
 	 */
 	#define RX_PKT_CMPL_ERRORS_T_IP_CS_ERROR	UINT32_C(0x40)
-	/* This indicates that there was an error in the tunnel UDP checksum. */
+	/*
+	 * This indicates that there was an error in the tunnel UDP
+	 * checksum.
+	 */
 	#define RX_PKT_CMPL_ERRORS_T_L4_CS_ERROR	UINT32_C(0x80)
 	/*
-	 * This indicates that there was a CRC error on either an FCoE or RoCE
-	 * packet. The itype indicates the packet type.
+	 * This indicates that there was a CRC error on either an FCoE
+	 * or RoCE packet. The itype indicates the packet type.
 	 */
-	#define RX_PKT_CMPL_ERRORS_CRC_ERROR		UINT32_C(0x100)
+	#define RX_PKT_CMPL_ERRORS_CRC_ERROR	UINT32_C(0x100)
 	/*
-	 * This indicates that there was an error in the tunnel portion of the
-	 * packet when this field is non-zero.
+	 * This indicates that there was an error in the tunnel portion
+	 * of the packet when this field is non-zero.
 	 */
 	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_MASK	UINT32_C(0xe00)
 	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_SFT	9
-		/*
-		 * No additional error occurred on the tunnel portion of the
-		 * packet of the packet does not have a tunnel.
-		 */
+	/*
+	 * No additional error occurred on the tunnel
+	 * portion of the packet of the packet does not
+	 * have a tunnel.
+	 */
 	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_NO_ERROR	(UINT32_C(0x0) << 9)
-		/*
-		 * Indicates that IP header version does not match expectation
-		 * from L2 Ethertype for IPv4 and IPv6 in the tunnel header.
-		 */
-	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_VERSION \
-							(UINT32_C(0x1) << 9)
-		/*
-		 * Indicates that header length is out of range in the tunnel
-		 * header. Valid for IPv4.
-		 */
-	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_HDR_LEN \
-							(UINT32_C(0x2) << 9)
-		/*
-		 * Indicates that the physical packet is shorter than that
-		 * claimed by the PPPoE header length for a tunnel PPPoE packet.
-		 */
-	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_TUNNEL_TOTAL_ERROR \
-							(UINT32_C(0x3) << 9)
-		/*
-		 * Indicates that physical packet is shorter than that claimed
-		 * by the tunnel l3 header length. Valid for IPv4, or IPv6
-		 * tunnel packet packets.
-		 */
-	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_IP_TOTAL_ERROR \
-							(UINT32_C(0x4) << 9)
-		/*
-		 * Indicates that the physical packet is shorter than that
-		 * claimed by the tunnel UDP header length for a tunnel UDP
-		 * packet that is not fragmented.
-		 */
-	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_UDP_TOTAL_ERROR \
-							(UINT32_C(0x5) << 9)
-		/*
-		 * indicates that the IPv4 TTL or IPv6 hop limit check have
-		 * failed (e.g. TTL = 0) in the tunnel header. Valid for IPv4,
-		 * and IPv6.
-		 */
-	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_TTL \
-							(UINT32_C(0x6) << 9)
-	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_LAST \
-				RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_TTL
 	/*
-	 * This indicates that there was an error in the inner portion of the
-	 * packet when this field is non-zero.
+	 * Indicates that IP header version does not
+	 * match expectation from L2 Ethertype for IPv4
+	 * and IPv6 in the tunnel header.
+	 */
+	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_VERSION   (UINT32_C(0x1) << 9)
+	/*
+	 * Indicates that header length is out of range
+	 * in the tunnel header. Valid for IPv4.
+	 */
+	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_HDR_LEN   (UINT32_C(0x2) << 9)
+	/*
+	 * Indicates that the physical packet is shorter
+	 * than that claimed by the PPPoE header length
+	 * for a tunnel PPPoE packet.
+	 */
+	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_TUNNEL_TOTAL_ERROR (UINT32_C(0x3) << 9)
+	/*
+	 * Indicates that physical packet is shorter
+	 * than that claimed by the tunnel l3 header
+	 * length. Valid for IPv4, or IPv6 tunnel packet
+	 * packets.
+	 */
+	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_IP_TOTAL_ERROR   (UINT32_C(0x4) << 9)
+	/*
+	 * Indicates that the physical packet is shorter
+	 * than that claimed by the tunnel UDP header
+	 * length for a tunnel UDP packet that is not
+	 * fragmented.
+	 */
+	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_UDP_TOTAL_ERROR  (UINT32_C(0x5) << 9)
+	/*
+	 * indicates that the IPv4 TTL or IPv6 hop limit
+	 * check have failed (e.g. TTL = 0) in the
+	 * tunnel header. Valid for IPv4, and IPv6.
+	 */
+	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_TTL	(UINT32_C(0x6) << 9)
+	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_LAST	\
+		RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_TTL
+	/*
+	 * This indicates that there was an error in the inner portion
+	 * of the packet when this field is non-zero.
 	 */
 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_MASK	UINT32_C(0xf000)
 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_SFT	12
-		/*
-		 * No additional error occurred on the tunnel portion of the
-		 * packet of the packet does not have a tunnel.
-		 */
+	/*
+	 * No additional error occurred on the tunnel
+	 * portion of the packet of the packet does not
+	 * have a tunnel.
+	 */
 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_NO_ERROR	(UINT32_C(0x0) << 12)
-		/*
-		 * Indicates that IP header version does not match expectation
-		 * from L2 Ethertype for IPv4 and IPv6 or that option other than
-		 * VFT was parsed on FCoE packet.
-		 */
-	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_L3_BAD_VERSION \
-							(UINT32_C(0x1) << 12)
-		/*
-		 * indicates that header length is out of range. Valid for IPv4
-		 * and RoCE
-		 */
-	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_L3_BAD_HDR_LEN \
-							(UINT32_C(0x2) << 12)
-		/*
-		 * indicates that the IPv4 TTL or IPv6 hop limit check have
-		 * failed (e.g. TTL = 0). Valid for IPv4, and IPv6
-		 */
+	/*
+	 * Indicates that IP header version does not
+	 * match expectation from L2 Ethertype for IPv4
+	 * and IPv6 or that option other than VFT was
+	 * parsed on FCoE packet.
+	 */
+	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_L3_BAD_VERSION	(UINT32_C(0x1) << 12)
+	/*
+	 * indicates that header length is out of range.
+	 * Valid for IPv4 and RoCE
+	 */
+	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_L3_BAD_HDR_LEN	(UINT32_C(0x2) << 12)
+	/*
+	 * indicates that the IPv4 TTL or IPv6 hop limit
+	 * check have failed (e.g. TTL = 0). Valid for
+	 * IPv4, and IPv6
+	 */
 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_L3_BAD_TTL	(UINT32_C(0x3) << 12)
-		/*
-		 * Indicates that physical packet is shorter than that claimed
-		 * by the l3 header length. Valid for IPv4, IPv6 packet or RoCE
-		 * packets.
-		 */
-	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_IP_TOTAL_ERROR \
-							(UINT32_C(0x4) << 12)
-		/*
-		 * Indicates that the physical packet is shorter than that
-		 * claimed by the UDP header length for a UDP packet that is not
-		 * fragmented.
-		 */
-	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_UDP_TOTAL_ERROR \
-							(UINT32_C(0x5) << 12)
-		/*
-		 * Indicates that TCP header length > IP payload. Valid for TCP
-		 * packets only.
-		 */
-	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_HDR_LEN \
-							(UINT32_C(0x6) << 12)
-		/* Indicates that TCP header length < 5. Valid for TCP. */
-	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_HDR_LEN_TOO_SMALL \
-							(UINT32_C(0x7) << 12)
-		/*
-		 * Indicates that TCP option headers result in a TCP header size
-		 * that does not match data offset in TCP header. Valid for TCP.
-		 */
-	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_OPT_LEN \
-							(UINT32_C(0x8) << 12)
-	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_LAST \
-				RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_OPT_LEN
-	#define RX_PKT_CMPL_ERRORS_MASK			UINT32_C(0xfffe)
-	#define RX_PKT_CMPL_ERRORS_SFT			1
-	uint16_t errors_v2;
-
 	/*
-	 * This field identifies the CFA action rule that was used for this
-	 * packet.
+	 * Indicates that physical packet is shorter
+	 * than that claimed by the l3 header length.
+	 * Valid for IPv4, IPv6 packet or RoCE packets.
+	 */
+	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_IP_TOTAL_ERROR	(UINT32_C(0x4) << 12)
+	/*
+	 * Indicates that the physical packet is shorter
+	 * than that claimed by the UDP header length
+	 * for a UDP packet that is not fragmented.
+	 */
+	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_UDP_TOTAL_ERROR	(UINT32_C(0x5) << 12)
+	/*
+	 * Indicates that TCP header length > IP
+	 * payload. Valid for TCP packets only.
 	 */
+	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_HDR_LEN	(UINT32_C(0x6) << 12)
+	/* Indicates that TCP header length < 5. Valid for TCP. */
+	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_HDR_LEN_TOO_SMALL \
+		(UINT32_C(0x7) << 12)
+	/*
+	 * Indicates that TCP option headers result in a
+	 * TCP header size that does not match data
+	 * offset in TCP header. Valid for TCP.
+	 */
+	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_OPT_LEN	\
+		(UINT32_C(0x8) << 12)
+	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_LAST	\
+		RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_OPT_LEN
+	#define RX_PKT_CMPL_ERRORS_MASK	UINT32_C(0xfffe)
+	#define RX_PKT_CMPL_ERRORS_SFT	1
 	uint16_t cfa_code;
-
 	/*
-	 * This value holds the reordering sequence number for the packet. If
-	 * the reordering sequence is not valid, then this value is zero. The
-	 * reordering domain for the packet is in the bottom 8 to 10b of the
-	 * rss_hash value. The bottom 20b of this value contain the ordering
-	 * domain value for the packet.
+	 * This field identifies the CFA action rule that was used for
+	 * this packet.
 	 */
-	#define RX_PKT_CMPL_REORDER_MASK		UINT32_C(0xffffff)
-	#define RX_PKT_CMPL_REORDER_SFT			0
 	uint32_t reorder;
+	/*
+	 * This value holds the reordering sequence number for the
+	 * packet. If the reordering sequence is not valid, then this
+	 * value is zero. The reordering domain for the packet is in the
+	 * bottom 8 to 10b of the rss_hash value. The bottom 20b of this
+	 * value contain the ordering domain value for the packet.
+	 */
+	#define RX_PKT_CMPL_REORDER_MASK	UINT32_C(0xffffff)
+	#define RX_PKT_CMPL_REORDER_SFT	0
 } __attribute__((packed));
 
 /* HWRM Forwarded Request (16 bytes) */
 struct hwrm_fwd_req_cmpl {
+	uint16_t req_len_type;
 	/* Length of forwarded request in bytes. */
 	/*
-	 * This field indicates the exact type of the completion. By convention,
-	 * the LSB identifies the length of the record in 16B units. Even values
-	 * indicate 16B records. Odd values indicate 32B records.
+	 * This field indicates the exact type of the completion. By
+	 * convention, the LSB identifies the length of the record in
+	 * 16B units. Even values indicate 16B records. Odd values
+	 * indicate 32B records.
 	 */
-	#define HWRM_FWD_REQ_CMPL_TYPE_MASK		UINT32_C(0x3f)
-	#define HWRM_FWD_REQ_CMPL_TYPE_SFT		0
-		/* Forwarded HWRM Request */
-	#define HWRM_FWD_REQ_CMPL_TYPE_HWRM_FWD_REQ	(UINT32_C(0x22) << 0)
+	#define HWRM_FWD_INPUT_CMPL_TYPE_MASK	UINT32_C(0x3f)
+	#define HWRM_FWD_INPUT_CMPL_TYPE_SFT	0
+	/* Forwarded HWRM Request */
+	#define HWRM_FWD_INPUT_CMPL_TYPE_HWRM_FWD_INPUT	UINT32_C(0x22)
 	/* Length of forwarded request in bytes. */
-	#define HWRM_FWD_REQ_CMPL_REQ_LEN_MASK		UINT32_C(0xffc0)
-	#define HWRM_FWD_REQ_CMPL_REQ_LEN_SFT		6
-	uint16_t req_len_type;
-
+	#define HWRM_FWD_REQ_CMPL_REQ_LEN_MASK	UINT32_C(0xffc0)
+	#define HWRM_FWD_REQ_CMPL_REQ_LEN_SFT	6
+	uint16_t source_id;
 	/*
-	 * Source ID of this request. Typically used in forwarding requests and
-	 * responses. 0x0 - 0xFFF8 - Used for function ids 0xFFF8 - 0xFFFE -
-	 * Reserved for internal processors 0xFFFF - HWRM
+	 * Source ID of this request. Typically used in forwarding
+	 * requests and responses. 0x0 - 0xFFF8 - Used for function ids
+	 * 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF -
+	 * HWRM
 	 */
-	uint16_t source_id;
-
 	uint32_t unused_0;
-
+	/* unused1 is 32 b */
+	uint32_t req_buf_addr_v[2];
 	/* Address of forwarded request. */
 	/*
-	 * This value is written by the NIC such that it will be different for
-	 * each pass through the completion queue. The even passes will write 1.
-	 * The odd passes will write 0.
+	 * This value is written by the NIC such that it will be
+	 * different for each pass through the completion queue. The
+	 * even passes will write 1. The odd passes will write 0.
 	 */
-	#define HWRM_FWD_REQ_CMPL_V			UINT32_C(0x1)
+	#define HWRM_FWD_INPUT_CMPL_V	UINT32_C(0x1)
 	/* Address of forwarded request. */
 	#define HWRM_FWD_REQ_CMPL_REQ_BUF_ADDR_MASK	UINT32_C(0xfffffffe)
 	#define HWRM_FWD_REQ_CMPL_REQ_BUF_ADDR_SFT	1
-	uint64_t req_buf_addr_v;
 } __attribute__((packed));
 
 /* HWRM Asynchronous Event Completion Record (16 bytes) */
 struct hwrm_async_event_cmpl {
-	/*
-	 * This field indicates the exact type of the completion. By convention,
-	 * the LSB identifies the length of the record in 16B units. Even values
-	 * indicate 16B records. Odd values indicate 32B records.
-	 */
-	#define HWRM_ASYNC_EVENT_CMPL_TYPE_MASK		UINT32_C(0x3f)
-	#define HWRM_ASYNC_EVENT_CMPL_TYPE_SFT		0
-		/* HWRM Asynchronous Event Information */
-	#define HWRM_ASYNC_EVENT_CMPL_TYPE_HWRM_ASYNC_EVENT \
-							(UINT32_C(0x2e) << 0)
 	uint16_t type;
-
-	/* Identifiers of events. */
-		/* Link status changed */
-	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_STATUS_CHANGE \
-							(UINT32_C(0x0) << 0)
-		/* Link MTU changed */
-	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_MTU_CHANGE \
-							(UINT32_C(0x1) << 0)
-		/* Link speed changed */
-	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_SPEED_CHANGE \
-							(UINT32_C(0x2) << 0)
-		/* DCB Configuration changed */
-	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_DCB_CONFIG_CHANGE \
-							(UINT32_C(0x3) << 0)
-		/* Port connection not allowed */
-	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PORT_CONN_NOT_ALLOWED \
-							(UINT32_C(0x4) << 0)
-		/* Link speed configuration was not allowed */
-	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_SPEED_CFG_NOT_ALLOWED \
-							(UINT32_C(0x5) << 0)
-		/* Function driver unloaded */
-	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_FUNC_DRVR_UNLOAD \
-							(UINT32_C(0x10) << 0)
-		/* Function driver loaded */
-	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_FUNC_DRVR_LOAD \
-							(UINT32_C(0x11) << 0)
-		/* PF driver unloaded */
-	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PF_DRVR_UNLOAD \
-							(UINT32_C(0x20) << 0)
-		/* PF driver loaded */
-	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PF_DRVR_LOAD \
-							(UINT32_C(0x21) << 0)
-		/* VF Function Level Reset (FLR) */
-	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_VF_FLR	(UINT32_C(0x30) << 0)
-		/* VF MAC Address Change */
-	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_VF_MAC_ADDR_CHANGE \
-							(UINT32_C(0x31) << 0)
-		/* PF-VF communication channel status change. */
-	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PF_VF_COMM_STATUS_CHANGE \
-							(UINT32_C(0x32) << 0)
-		/* HWRM Error */
-	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_HWRM_ERROR \
-							(UINT32_C(0xff) << 0)
+	/* unused1 is 10 b */
+	/*
+	 * This field indicates the exact type of the completion. By
+	 * convention, the LSB identifies the length of the record in
+	 * 16B units. Even values indicate 16B records. Odd values
+	 * indicate 32B records.
+	 */
+	#define HWRM_ASYNC_EVENT_CMPL_TYPE_MASK	UINT32_C(0x3f)
+	#define HWRM_ASYNC_EVENT_CMPL_TYPE_SFT	0
+	/* HWRM Asynchronous Event Information */
+	#define HWRM_ASYNC_EVENT_CMPL_TYPE_HWRM_ASYNC_EVENT	UINT32_C(0x2e)
+	/* unused1 is 10 b */
 	uint16_t event_id;
-
-	/* Event specific data */
+	/* Identifiers of events. */
+	/* Link status changed */
+	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_STATUS_CHANGE UINT32_C(0x0)
+	/* Link MTU changed */
+	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_MTU_CHANGE	UINT32_C(0x1)
+	/* Link speed changed */
+	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_SPEED_CHANGE  UINT32_C(0x2)
+	/* DCB Configuration changed */
+	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_DCB_CONFIG_CHANGE  UINT32_C(0x3)
+	/* Port connection not allowed */
+	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PORT_CONN_NOT_ALLOWED UINT32_C(0x4)
+	/* Link speed configuration was not allowed */
+	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_SPEED_CFG_NOT_ALLOWED UINT32_C(0x5)
+	/* Link speed configuration change */
+	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_SPEED_CFG_CHANGE UINT32_C(0x6)
+	/* Port PHY configuration change */
+	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PORT_PHY_CFG_CHANGE UINT32_C(0x7)
+	/* Function driver unloaded */
+	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_FUNC_DRVR_UNLOAD   UINT32_C(0x10)
+	/* Function driver loaded */
+	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_FUNC_DRVR_LOAD	UINT32_C(0x11)
+	/* Function FLR related processing has completed */
+	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_FUNC_FLR_PROC_CMPLT UINT32_C(0x12)
+	/* PF driver unloaded */
+	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PF_DRVR_UNLOAD	UINT32_C(0x20)
+	/* PF driver loaded */
+	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PF_DRVR_LOAD	UINT32_C(0x21)
+	/* VF Function Level Reset (FLR) */
+	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_VF_FLR	UINT32_C(0x30)
+	/* VF MAC Address Change */
+	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_VF_MAC_ADDR_CHANGE UINT32_C(0x31)
+	/* PF-VF communication channel status change. */
+	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PF_VF_COMM_STATUS_CHANGE UINT32_C(0x32)
+	/* VF Configuration Change */
+	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_VF_CFG_CHANGE	UINT32_C(0x33)
+	/* HWRM Error */
+	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_HWRM_ERROR	UINT32_C(0xff)
 	uint32_t event_data2;
-
+	/* Event specific data */
+	uint8_t opaque_v;
 	/* opaque is 7 b */
 	/*
-	 * This value is written by the NIC such that it will be different for
-	 * each pass through the completion queue. The even passes will write 1.
-	 * The odd passes will write 0.
+	 * This value is written by the NIC such that it will be
+	 * different for each pass through the completion queue. The
+	 * even passes will write 1. The odd passes will write 0.
 	 */
-	#define HWRM_ASYNC_EVENT_CMPL_V				UINT32_C(0x1)
+	#define HWRM_ASYNC_EVENT_CMPL_V	UINT32_C(0x1)
 	/* opaque is 7 b */
-	#define HWRM_ASYNC_EVENT_CMPL_OPAQUE_MASK		UINT32_C(0xfe)
-	#define HWRM_ASYNC_EVENT_CMPL_OPAQUE_SFT		1
-	uint8_t opaque_v;
-
-	/* 8-lsb timestamp from POR (100-msec resolution) */
+	#define HWRM_ASYNC_EVENT_CMPL_OPAQUE_MASK	UINT32_C(0xfe)
+	#define HWRM_ASYNC_EVENT_CMPL_OPAQUE_SFT	1
 	uint8_t timestamp_lo;
-
-	/* 16-lsb timestamp from POR (100-msec resolution) */
+	/* 8-lsb timestamp from POR (100-msec resolution) */
 	uint16_t timestamp_hi;
-
-	/* Event specific data */
+	/* 16-lsb timestamp from POR (100-msec resolution) */
 	uint32_t event_data1;
+	/* Event specific data */
 } __attribute__((packed));
 
 /*