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