#ifndef _SYS_HXGE_HXGE_TXDMA_HW_H
#define _SYS_HXGE_HXGE_TXDMA_HW_H
#ifdef __cplusplus
extern "C" {
#endif
#include <hxge_defs.h>
#include <hxge_tdc_hw.h>
typedef union _tx_desc_t {
uint64_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t sop:1;
uint32_t mark:1;
uint32_t num_ptr:4;
uint32_t rsvd:1;
uint32_t tr_len:13;
uint32_t sad:12;
uint32_t sad_l:32;
#else
uint32_t sad_l:32;
uint32_t sad:12;
uint32_t tr_len:13;
uint32_t rsvd:1;
uint32_t num_ptr:4;
uint32_t mark:1;
uint32_t sop:1;
#endif
} bits;
} tx_desc_t, *p_tx_desc_t;
#define TDC_TDR_CFG_STADDR_SHIFT 6
#define TDC_TDR_CFG_STADDR_MASK 0x000000000007FFC0ULL
#define TDC_TDR_CFG_ADDR_MASK 0x00000FFFFFFFFFC0ULL
#define TDC_TDR_CFG_STADDR_BASE_SHIFT 19
#define TDC_TDR_CFG_STADDR_BASE_MASK 0x00000FFFFFF80000ULL
#define TDC_TDR_CFG_LEN_SHIFT 53
#define TDC_TDR_CFG_LEN_MASK 0xFFE0000000000000ULL
#define TDC_TDR_RST_SHIFT 46
#define TDC_TDR_RST_MASK 0x0000400000000000ULL
#define TDC_INT_MASK_MK_MASK 0x0000000000008000ULL
#define TDC_MBH_SHIFT 0
#define TDC_MBH_ADDR_SHIFT 32
#define TDC_MBH_MASK 0x0000000000000FFFULL
#define TDC_MBL_SHIFT 6
#define TDC_MBL_MASK 0x00000000FFFFFFC0ULL
#define TXDMA_MAILBOX_BYTE_LENGTH 64
#define TXDMA_MAILBOX_UNUSED 24
typedef struct _txdma_mailbox_t {
tdc_stat_t tx_cs;
tdc_tdr_pre_head_t tx_dma_pre_st;
tdc_tdr_head_t tx_ring_hdl;
tdc_tdr_kick_t tx_ring_kick;
uint32_t tx_rng_err_logh;
uint32_t tx_rng_err_logl;
uint8_t resv[TXDMA_MAILBOX_UNUSED];
} txdma_mailbox_t, *p_txdma_mailbox_t;
#define TX_PKT_HEADER_SIZE 16
#define TX_MAX_GATHER_POINTERS 15
#define TX_GATHER_POINTERS_THRESHOLD 8
#define TX_MAX_TRANSFER_LENGTH 4076
#define TX_JUMBO_MTU 9216
#define TX_PKT_HEADER_PAD_SHIFT 0
#define TX_PKT_HEADER_PAD_MASK 0x0000000000000007ULL
#define TX_PKT_HEADER_TOT_XFER_LEN_SHIFT 16
#define TX_PKT_HEADER_TOT_XFER_LEN_MASK 0x000000000000FFF8ULL
#define TX_PKT_HEADER_L4STUFF_SHIFT 32
#define TX_PKT_HEADER_L4STUFF_MASK 0x0000003F00000000ULL
#define TX_PKT_HEADER_L4START_SHIFT 40
#define TX_PKT_HEADER_L4START_MASK 0x00003F0000000000ULL
#define TX_PKT_HEADER_L3START_SHIFT 48
#define TX_PKT_HEADER_IHL_SHIFT 52
#define TX_PKT_HEADER_VLAN__SHIFT 56
#define TX_PKT_HEADER_TCP_UDP_CRC32C_SHIFT 57
#define TX_PKT_HEADER_LLC_SHIFT 57
#define TX_PKT_HEADER_TCP_UDP_CRC32C_SET 0x0200000000000000ULL
#define TX_PKT_HEADER_TCP_UDP_CRC32C_MASK 0x0200000000000000ULL
#define TX_PKT_HEADER_L4_PROTO_OP_SHIFT 2
#define TX_PKT_HEADER_L4_PROTO_OP_MASK 0x0C00000000000000ULL
#define TX_PKT_HEADER_V4_HDR_CS_SHIFT 60
#define TX_PKT_HEADER_V4_HDR_CS_SET 0x1000000000000000ULL
#define TX_PKT_HEADER_V4_HDR_CS_MASK 0x1000000000000000ULL
#define TX_PKT_HEADER_IP_VER_SHIFT 61
#define TX_PKT_HEADER_IP_VER_MASK 0x2000000000000000ULL
#define TX_PKT_HEADER_PKT_TYPE_SHIFT 62
#define TX_PKT_HEADER_PKT_TYPE_MASK 0x4000000000000000ULL
#define TX_PKT_L4_PROTO_OP_NOP 0x00
#define TX_PKT_L4_PROTO_OP_FULL_L4_CSUM 0x01
#define TX_PKT_L4_PROTO_OP_L4_PAYLOAD_CSUM 0x02
#define TX_PKT_L4_PROTO_OP_SCTP_CRC32 0x04
#define TX_PKT_PKT_TYPE_NOP 0x00
#define TX_PKT_PKT_TYPE_TCP 0x01
#define TX_PKT_PKT_TYPE_UDP 0x02
#define TX_PKT_PKT_TYPE_SCTP 0x03
typedef union _tx_pkt_header_t {
uint64_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t cksum_en_pkt_type:2;
uint32_t ip_ver:1;
uint32_t rsrvd:4;
uint32_t vlan:1;
uint32_t ihl:4;
uint32_t l3start:4;
uint32_t rsvrvd1:2;
uint32_t l4start:6;
uint32_t rsvrvd2:2;
uint32_t l4stuff:6;
uint32_t rsvrvd3:2;
uint32_t tot_xfer_len:14;
uint32_t rsrrvd4:13;
uint32_t pad:3;
#else
uint32_t pad:3;
uint32_t rsrrvd4:13;
uint32_t tot_xfer_len:14;
uint32_t rsvrvd3:2;
uint32_t l4stuff:6;
uint32_t rsvrvd2:2;
uint32_t l4start:6;
uint32_t rsvrvd1:2;
uint32_t l3start:4;
uint32_t ihl:4;
uint32_t vlan:1;
uint32_t rsrvd:4;
uint32_t ip_ver:1;
uint32_t cksum_en_pkt_type:2;
#endif
} bits;
} tx_pkt_header_t, *p_tx_pkt_header_t;
typedef struct _tx_pkt_hdr_all_t {
tx_pkt_header_t pkthdr;
uint64_t reserved;
} tx_pkt_hdr_all_t, *p_tx_pkt_hdr_all_t;
#ifdef __cplusplus
}
#endif
#endif