net/bnxt: update buffer descriptor definitions

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
auto generated file.

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

Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
This commit is contained in:
Ajit Khaparde 2016-09-26 11:19:07 -05:00 committed by Bruce Richardson
parent eba852e23e
commit 76fc6a5938

View File

@ -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)
#define TX_BD_SHORT_TYPE_MASK UINT32_C(0x3f)
#define TX_BD_SHORT_TYPE_SFT 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.
* Indicates that this BD is 16B long and is
* used for normal L2 packet transmission.
*/
#define TX_BD_SHORT_FLAGS_PACKET_END UINT32_C(0x40)
#define TX_BD_SHORT_TYPE_TX_BD_SHORT UINT32_C(0x0)
/*
* 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.
* 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_NO_CMPL UINT32_C(0x80)
#define TX_BD_SHORT_FLAGS_PACKET_END UINT32_C(0x40)
/*
* 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.
* 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_BD_CNT_MASK UINT32_C(0x1f00)
#define TX_BD_SHORT_FLAGS_BD_CNT_SFT 8
#define TX_BD_SHORT_FLAGS_NO_CMPL UINT32_C(0x80)
/*
* 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.
* 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_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_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
/*
* 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.
* 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)
#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 flags_type;
/*
* 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_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.
*/
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
* 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;
/*
* 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)
#define TX_BD_LONG_TYPE_MASK UINT32_C(0x3f)
#define TX_BD_LONG_TYPE_SFT 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.
* Indicates that this BD is 32B long and is
* used for normal L2 packet transmission.
*/
#define TX_BD_LONG_FLAGS_PACKET_END UINT32_C(0x40)
#define TX_BD_LONG_TYPE_TX_BD_LONG UINT32_C(0x10)
/*
* 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.
* 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_NO_CMPL UINT32_C(0x80)
#define TX_BD_LONG_FLAGS_PACKET_END UINT32_C(0x40)
/*
* 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.
* 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_BD_CNT_MASK UINT32_C(0x1f00)
#define TX_BD_LONG_FLAGS_BD_CNT_SFT 8
#define TX_BD_LONG_FLAGS_NO_CMPL UINT32_C(0x80)
/*
* 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.
* 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_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_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.
* 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)
#define TX_BD_LONG_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_LONG_FLAGS_MASK UINT32_C(0xffc0)
#define TX_BD_LONG_FLAGS_SFT 6
uint16_t flags_type;
/*
* 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.
* 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)
#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.
* 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)
#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.
* 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)
#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.
* 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)
#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.
* 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)
#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.
* 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)
#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.
* 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)
#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.
* 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)
#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.
* 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
#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)
/*
* If set to 1, the packet will be placed at the address plus
* 2B. The 2 Bytes of padding will be written as zero.
*/
/*
* 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.
* 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)
#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.
* If set to 1, the packet write will be padded out to the
* nearest cache-line with zero value padding.
*/
/*
* 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 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)
#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.
* 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;
/*
* 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.
*/
#define RX_PROD_PKT_BD_FLAGS_MASK UINT32_C(0xffc0)
#define RX_PROD_PKT_BD_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 this
* receive buffer set.
* 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.
*/
uint32_t opaque;
/*
* 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.
* 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.
*/
uint64_t addr;
/*
* 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.
*/
} __attribute__((packed));
/* Completion Ring Structures */