xref: /linux/drivers/net/ethernet/alibaba/eea/eea_desc.h (revision 039ce329dfe6fb74f6394dcb59607425af8d0601)
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