1*039ce329SXuan Zhuo /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*039ce329SXuan Zhuo /* 3*039ce329SXuan Zhuo * Driver for Alibaba Elastic Ethernet Adapter. 4*039ce329SXuan Zhuo * 5*039ce329SXuan Zhuo * Copyright (C) 2025 Alibaba Inc. 6*039ce329SXuan Zhuo */ 7*039ce329SXuan Zhuo 8*039ce329SXuan Zhuo #ifndef __EEA_DESC_H__ 9*039ce329SXuan Zhuo #define __EEA_DESC_H__ 10*039ce329SXuan Zhuo 11*039ce329SXuan Zhuo #define EEA_DESC_TS_MASK GENMASK_ULL(47, 0) 12*039ce329SXuan Zhuo #define EEA_DESC_TS(desc) (le64_to_cpu((desc)->ts) & EEA_DESC_TS_MASK) 13*039ce329SXuan Zhuo 14*039ce329SXuan Zhuo struct eea_aq_desc { 15*039ce329SXuan Zhuo __le16 flags; 16*039ce329SXuan Zhuo __le16 id; 17*039ce329SXuan Zhuo __le16 reserved; 18*039ce329SXuan Zhuo u8 classid; 19*039ce329SXuan Zhuo u8 command; 20*039ce329SXuan Zhuo __le64 data_addr; 21*039ce329SXuan Zhuo __le64 reply_addr; 22*039ce329SXuan Zhuo __le32 data_len; 23*039ce329SXuan Zhuo __le32 reply_len; 24*039ce329SXuan Zhuo }; 25*039ce329SXuan Zhuo 26*039ce329SXuan Zhuo struct eea_aq_cdesc { 27*039ce329SXuan Zhuo __le16 flags; 28*039ce329SXuan Zhuo __le16 id; 29*039ce329SXuan Zhuo #define EEA_OK 0 30*039ce329SXuan Zhuo #define EEA_ERR 0xffffffff 31*039ce329SXuan Zhuo __le32 status; 32*039ce329SXuan Zhuo __le32 reply_len; 33*039ce329SXuan Zhuo __le32 reserved1; 34*039ce329SXuan Zhuo 35*039ce329SXuan Zhuo __le64 reserved2; 36*039ce329SXuan Zhuo __le64 reserved3; 37*039ce329SXuan Zhuo }; 38*039ce329SXuan Zhuo 39*039ce329SXuan Zhuo struct eea_rx_desc_no_hdr { 40*039ce329SXuan Zhuo __le16 flags; 41*039ce329SXuan Zhuo __le16 id; 42*039ce329SXuan Zhuo __le16 len; 43*039ce329SXuan Zhuo __le16 reserved1; 44*039ce329SXuan Zhuo 45*039ce329SXuan Zhuo __le64 addr; 46*039ce329SXuan Zhuo }; 47*039ce329SXuan Zhuo 48*039ce329SXuan Zhuo struct eea_rx_desc { 49*039ce329SXuan Zhuo __le16 flags; 50*039ce329SXuan Zhuo __le16 id; 51*039ce329SXuan Zhuo __le16 len; 52*039ce329SXuan Zhuo __le16 reserved1; 53*039ce329SXuan Zhuo 54*039ce329SXuan Zhuo __le64 addr; 55*039ce329SXuan Zhuo 56*039ce329SXuan Zhuo __le64 hdr_addr; 57*039ce329SXuan Zhuo __le32 reserved2; 58*039ce329SXuan Zhuo __le32 reserved3; 59*039ce329SXuan Zhuo }; 60*039ce329SXuan Zhuo 61*039ce329SXuan Zhuo #define EEA_RX_CDESC_HDR_LEN_MASK GENMASK_ULL(9, 0) 62*039ce329SXuan Zhuo 63*039ce329SXuan Zhuo struct eea_rx_cdesc { 64*039ce329SXuan Zhuo #define EEA_DESC_F_DATA_VALID BIT(6) 65*039ce329SXuan Zhuo #define EEA_DESC_F_SPLIT_HDR BIT(5) 66*039ce329SXuan Zhuo __le16 flags; 67*039ce329SXuan Zhuo __le16 id; 68*039ce329SXuan Zhuo __le16 len; 69*039ce329SXuan Zhuo #define EEA_NET_PT_NONE 0 70*039ce329SXuan Zhuo #define EEA_NET_PT_IPv4 1 71*039ce329SXuan Zhuo #define EEA_NET_PT_TCPv4 2 72*039ce329SXuan Zhuo #define EEA_NET_PT_UDPv4 3 73*039ce329SXuan Zhuo #define EEA_NET_PT_IPv6 4 74*039ce329SXuan Zhuo #define EEA_NET_PT_TCPv6 5 75*039ce329SXuan Zhuo #define EEA_NET_PT_UDPv6 6 76*039ce329SXuan Zhuo #define EEA_NET_PT_IPv6_EX 7 77*039ce329SXuan Zhuo #define EEA_NET_PT_TCPv6_EX 8 78*039ce329SXuan Zhuo #define EEA_NET_PT_UDPv6_EX 9 79*039ce329SXuan Zhuo /* [9:0] is packet type. */ 80*039ce329SXuan Zhuo __le16 type; 81*039ce329SXuan Zhuo 82*039ce329SXuan Zhuo /* hw timestamp [0:47]: ts */ 83*039ce329SXuan Zhuo __le64 ts; 84*039ce329SXuan Zhuo 85*039ce329SXuan Zhuo __le32 hash; 86*039ce329SXuan Zhuo 87*039ce329SXuan Zhuo /* 0-9: hdr_len split header 88*039ce329SXuan Zhuo * 10-15: reserved1 89*039ce329SXuan Zhuo */ 90*039ce329SXuan Zhuo __le16 len_ex; 91*039ce329SXuan Zhuo __le16 reserved2; 92*039ce329SXuan Zhuo 93*039ce329SXuan Zhuo __le32 reserved3; 94*039ce329SXuan Zhuo __le32 reserved4; 95*039ce329SXuan Zhuo }; 96*039ce329SXuan Zhuo 97*039ce329SXuan Zhuo #define EEA_TX_GSO_NONE 0 98*039ce329SXuan Zhuo #define EEA_TX_GSO_TCPV4 1 99*039ce329SXuan Zhuo #define EEA_TX_GSO_TCPV6 4 100*039ce329SXuan Zhuo #define EEA_TX_GSO_UDP_L4 5 101*039ce329SXuan Zhuo #define EEA_TX_GSO_ECN 0x80 102*039ce329SXuan Zhuo 103*039ce329SXuan Zhuo struct eea_tx_desc { 104*039ce329SXuan Zhuo #define EEA_DESC_F_DO_CSUM BIT(6) 105*039ce329SXuan Zhuo __le16 flags; 106*039ce329SXuan Zhuo __le16 id; 107*039ce329SXuan Zhuo __le16 len; 108*039ce329SXuan Zhuo __le16 reserved1; 109*039ce329SXuan Zhuo 110*039ce329SXuan Zhuo __le64 addr; 111*039ce329SXuan Zhuo 112*039ce329SXuan Zhuo __le16 csum_start; 113*039ce329SXuan Zhuo __le16 csum_offset; 114*039ce329SXuan Zhuo u8 gso_type; 115*039ce329SXuan Zhuo u8 reserved2; 116*039ce329SXuan Zhuo __le16 gso_size; 117*039ce329SXuan Zhuo __le64 reserved3; 118*039ce329SXuan Zhuo }; 119*039ce329SXuan Zhuo 120*039ce329SXuan Zhuo struct eea_tx_cdesc { 121*039ce329SXuan Zhuo __le16 flags; 122*039ce329SXuan Zhuo __le16 id; 123*039ce329SXuan Zhuo __le16 len; 124*039ce329SXuan Zhuo __le16 reserved1; 125*039ce329SXuan Zhuo 126*039ce329SXuan Zhuo /* hw timestamp [0:47]: ts */ 127*039ce329SXuan Zhuo __le64 ts; 128*039ce329SXuan Zhuo }; 129*039ce329SXuan Zhuo 130*039ce329SXuan Zhuo #define EEA_DB_FLAGS_OFF 0 131*039ce329SXuan Zhuo #define EEA_DB_IDX_OFF (2 * 8) 132*039ce329SXuan Zhuo #define EEA_DB_TX_CQ_HEAD_OFF (4 * 8) 133*039ce329SXuan Zhuo #define EEA_DB_RX_CQ_HEAD_OFF (6 * 8) 134*039ce329SXuan Zhuo 135*039ce329SXuan Zhuo #define EEA_IDX_PRESENT BIT(0) 136*039ce329SXuan Zhuo #define EEA_IRQ_MASK BIT(1) 137*039ce329SXuan Zhuo #define EEA_IRQ_UNMASK BIT(2) 138*039ce329SXuan Zhuo #endif 139