xref: /OK3568_Linux_fs/kernel/drivers/net/ethernet/stmicro/stmmac/descs.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /*******************************************************************************
3*4882a593Smuzhiyun   Header File to describe the DMA descriptors and related definitions.
4*4882a593Smuzhiyun   This is for DWMAC100 and 1000 cores.
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun   Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>
8*4882a593Smuzhiyun *******************************************************************************/
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #ifndef __DESCS_H__
11*4882a593Smuzhiyun #define __DESCS_H__
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #include <linux/bitops.h>
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun /* Normal receive descriptor defines */
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun /* RDES0 */
18*4882a593Smuzhiyun #define	RDES0_PAYLOAD_CSUM_ERR	BIT(0)
19*4882a593Smuzhiyun #define	RDES0_CRC_ERROR		BIT(1)
20*4882a593Smuzhiyun #define	RDES0_DRIBBLING		BIT(2)
21*4882a593Smuzhiyun #define	RDES0_MII_ERROR		BIT(3)
22*4882a593Smuzhiyun #define	RDES0_RECEIVE_WATCHDOG	BIT(4)
23*4882a593Smuzhiyun #define	RDES0_FRAME_TYPE	BIT(5)
24*4882a593Smuzhiyun #define	RDES0_COLLISION		BIT(6)
25*4882a593Smuzhiyun #define	RDES0_IPC_CSUM_ERROR	BIT(7)
26*4882a593Smuzhiyun #define	RDES0_LAST_DESCRIPTOR	BIT(8)
27*4882a593Smuzhiyun #define	RDES0_FIRST_DESCRIPTOR	BIT(9)
28*4882a593Smuzhiyun #define	RDES0_VLAN_TAG		BIT(10)
29*4882a593Smuzhiyun #define	RDES0_OVERFLOW_ERROR	BIT(11)
30*4882a593Smuzhiyun #define	RDES0_LENGTH_ERROR	BIT(12)
31*4882a593Smuzhiyun #define	RDES0_SA_FILTER_FAIL	BIT(13)
32*4882a593Smuzhiyun #define	RDES0_DESCRIPTOR_ERROR	BIT(14)
33*4882a593Smuzhiyun #define	RDES0_ERROR_SUMMARY	BIT(15)
34*4882a593Smuzhiyun #define	RDES0_FRAME_LEN_MASK	GENMASK(29, 16)
35*4882a593Smuzhiyun #define RDES0_FRAME_LEN_SHIFT	16
36*4882a593Smuzhiyun #define	RDES0_DA_FILTER_FAIL	BIT(30)
37*4882a593Smuzhiyun #define	RDES0_OWN		BIT(31)
38*4882a593Smuzhiyun 			/* RDES1 */
39*4882a593Smuzhiyun #define	RDES1_BUFFER1_SIZE_MASK		GENMASK(10, 0)
40*4882a593Smuzhiyun #define	RDES1_BUFFER2_SIZE_MASK		GENMASK(21, 11)
41*4882a593Smuzhiyun #define	RDES1_BUFFER2_SIZE_SHIFT	11
42*4882a593Smuzhiyun #define	RDES1_SECOND_ADDRESS_CHAINED	BIT(24)
43*4882a593Smuzhiyun #define	RDES1_END_RING			BIT(25)
44*4882a593Smuzhiyun #define	RDES1_DISABLE_IC		BIT(31)
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun /* Enhanced receive descriptor defines */
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun /* RDES0 (similar to normal RDES) */
49*4882a593Smuzhiyun #define	 ERDES0_RX_MAC_ADDR	BIT(0)
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun /* RDES1: completely differ from normal desc definitions */
52*4882a593Smuzhiyun #define	ERDES1_BUFFER1_SIZE_MASK	GENMASK(12, 0)
53*4882a593Smuzhiyun #define	ERDES1_SECOND_ADDRESS_CHAINED	BIT(14)
54*4882a593Smuzhiyun #define	ERDES1_END_RING			BIT(15)
55*4882a593Smuzhiyun #define	ERDES1_BUFFER2_SIZE_MASK	GENMASK(28, 16)
56*4882a593Smuzhiyun #define ERDES1_BUFFER2_SIZE_SHIFT	16
57*4882a593Smuzhiyun #define	ERDES1_DISABLE_IC		BIT(31)
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun /* Normal transmit descriptor defines */
60*4882a593Smuzhiyun /* TDES0 */
61*4882a593Smuzhiyun #define	TDES0_DEFERRED			BIT(0)
62*4882a593Smuzhiyun #define	TDES0_UNDERFLOW_ERROR		BIT(1)
63*4882a593Smuzhiyun #define	TDES0_EXCESSIVE_DEFERRAL	BIT(2)
64*4882a593Smuzhiyun #define	TDES0_COLLISION_COUNT_MASK	GENMASK(6, 3)
65*4882a593Smuzhiyun #define	TDES0_VLAN_FRAME		BIT(7)
66*4882a593Smuzhiyun #define	TDES0_EXCESSIVE_COLLISIONS	BIT(8)
67*4882a593Smuzhiyun #define	TDES0_LATE_COLLISION		BIT(9)
68*4882a593Smuzhiyun #define	TDES0_NO_CARRIER		BIT(10)
69*4882a593Smuzhiyun #define	TDES0_LOSS_CARRIER		BIT(11)
70*4882a593Smuzhiyun #define	TDES0_PAYLOAD_ERROR		BIT(12)
71*4882a593Smuzhiyun #define	TDES0_FRAME_FLUSHED		BIT(13)
72*4882a593Smuzhiyun #define	TDES0_JABBER_TIMEOUT		BIT(14)
73*4882a593Smuzhiyun #define	TDES0_ERROR_SUMMARY		BIT(15)
74*4882a593Smuzhiyun #define	TDES0_IP_HEADER_ERROR		BIT(16)
75*4882a593Smuzhiyun #define	TDES0_TIME_STAMP_STATUS		BIT(17)
76*4882a593Smuzhiyun #define	TDES0_OWN			((u32)BIT(31))	/* silence sparse */
77*4882a593Smuzhiyun /* TDES1 */
78*4882a593Smuzhiyun #define	TDES1_BUFFER1_SIZE_MASK		GENMASK(10, 0)
79*4882a593Smuzhiyun #define	TDES1_BUFFER2_SIZE_MASK		GENMASK(21, 11)
80*4882a593Smuzhiyun #define	TDES1_BUFFER2_SIZE_SHIFT	11
81*4882a593Smuzhiyun #define	TDES1_TIME_STAMP_ENABLE		BIT(22)
82*4882a593Smuzhiyun #define	TDES1_DISABLE_PADDING		BIT(23)
83*4882a593Smuzhiyun #define	TDES1_SECOND_ADDRESS_CHAINED	BIT(24)
84*4882a593Smuzhiyun #define	TDES1_END_RING			BIT(25)
85*4882a593Smuzhiyun #define	TDES1_CRC_DISABLE		BIT(26)
86*4882a593Smuzhiyun #define	TDES1_CHECKSUM_INSERTION_MASK	GENMASK(28, 27)
87*4882a593Smuzhiyun #define	TDES1_CHECKSUM_INSERTION_SHIFT	27
88*4882a593Smuzhiyun #define	TDES1_FIRST_SEGMENT		BIT(29)
89*4882a593Smuzhiyun #define	TDES1_LAST_SEGMENT		BIT(30)
90*4882a593Smuzhiyun #define	TDES1_INTERRUPT			BIT(31)
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun /* Enhanced transmit descriptor defines */
93*4882a593Smuzhiyun /* TDES0 */
94*4882a593Smuzhiyun #define	ETDES0_DEFERRED			BIT(0)
95*4882a593Smuzhiyun #define	ETDES0_UNDERFLOW_ERROR		BIT(1)
96*4882a593Smuzhiyun #define	ETDES0_EXCESSIVE_DEFERRAL	BIT(2)
97*4882a593Smuzhiyun #define	ETDES0_COLLISION_COUNT_MASK	GENMASK(6, 3)
98*4882a593Smuzhiyun #define	ETDES0_VLAN_FRAME		BIT(7)
99*4882a593Smuzhiyun #define	ETDES0_EXCESSIVE_COLLISIONS	BIT(8)
100*4882a593Smuzhiyun #define	ETDES0_LATE_COLLISION		BIT(9)
101*4882a593Smuzhiyun #define	ETDES0_NO_CARRIER		BIT(10)
102*4882a593Smuzhiyun #define	ETDES0_LOSS_CARRIER		BIT(11)
103*4882a593Smuzhiyun #define	ETDES0_PAYLOAD_ERROR		BIT(12)
104*4882a593Smuzhiyun #define	ETDES0_FRAME_FLUSHED		BIT(13)
105*4882a593Smuzhiyun #define	ETDES0_JABBER_TIMEOUT		BIT(14)
106*4882a593Smuzhiyun #define	ETDES0_ERROR_SUMMARY		BIT(15)
107*4882a593Smuzhiyun #define	ETDES0_IP_HEADER_ERROR		BIT(16)
108*4882a593Smuzhiyun #define	ETDES0_TIME_STAMP_STATUS	BIT(17)
109*4882a593Smuzhiyun #define	ETDES0_SECOND_ADDRESS_CHAINED	BIT(20)
110*4882a593Smuzhiyun #define	ETDES0_END_RING			BIT(21)
111*4882a593Smuzhiyun #define	ETDES0_CHECKSUM_INSERTION_MASK	GENMASK(23, 22)
112*4882a593Smuzhiyun #define	ETDES0_CHECKSUM_INSERTION_SHIFT	22
113*4882a593Smuzhiyun #define	ETDES0_TIME_STAMP_ENABLE	BIT(25)
114*4882a593Smuzhiyun #define	ETDES0_DISABLE_PADDING		BIT(26)
115*4882a593Smuzhiyun #define	ETDES0_CRC_DISABLE		BIT(27)
116*4882a593Smuzhiyun #define	ETDES0_FIRST_SEGMENT		BIT(28)
117*4882a593Smuzhiyun #define	ETDES0_LAST_SEGMENT		BIT(29)
118*4882a593Smuzhiyun #define	ETDES0_INTERRUPT		BIT(30)
119*4882a593Smuzhiyun #define	ETDES0_OWN			((u32)BIT(31))	/* silence sparse */
120*4882a593Smuzhiyun /* TDES1 */
121*4882a593Smuzhiyun #define	ETDES1_BUFFER1_SIZE_MASK	GENMASK(12, 0)
122*4882a593Smuzhiyun #define	ETDES1_BUFFER2_SIZE_MASK	GENMASK(28, 16)
123*4882a593Smuzhiyun #define	ETDES1_BUFFER2_SIZE_SHIFT	16
124*4882a593Smuzhiyun 
125*4882a593Smuzhiyun /* Extended Receive descriptor definitions */
126*4882a593Smuzhiyun #define	ERDES4_IP_PAYLOAD_TYPE_MASK	GENMASK(6, 2)
127*4882a593Smuzhiyun #define	ERDES4_IP_HDR_ERR		BIT(3)
128*4882a593Smuzhiyun #define	ERDES4_IP_PAYLOAD_ERR		BIT(4)
129*4882a593Smuzhiyun #define	ERDES4_IP_CSUM_BYPASSED		BIT(5)
130*4882a593Smuzhiyun #define	ERDES4_IPV4_PKT_RCVD		BIT(6)
131*4882a593Smuzhiyun #define	ERDES4_IPV6_PKT_RCVD		BIT(7)
132*4882a593Smuzhiyun #define	ERDES4_MSG_TYPE_MASK		GENMASK(11, 8)
133*4882a593Smuzhiyun #define	ERDES4_PTP_FRAME_TYPE		BIT(12)
134*4882a593Smuzhiyun #define	ERDES4_PTP_VER			BIT(13)
135*4882a593Smuzhiyun #define	ERDES4_TIMESTAMP_DROPPED	BIT(14)
136*4882a593Smuzhiyun #define	ERDES4_AV_PKT_RCVD		BIT(16)
137*4882a593Smuzhiyun #define	ERDES4_AV_TAGGED_PKT_RCVD	BIT(17)
138*4882a593Smuzhiyun #define	ERDES4_VLAN_TAG_PRI_VAL_MASK	GENMASK(20, 18)
139*4882a593Smuzhiyun #define	ERDES4_L3_FILTER_MATCH		BIT(24)
140*4882a593Smuzhiyun #define	ERDES4_L4_FILTER_MATCH		BIT(25)
141*4882a593Smuzhiyun #define	ERDES4_L3_L4_FILT_NO_MATCH_MASK	GENMASK(27, 26)
142*4882a593Smuzhiyun 
143*4882a593Smuzhiyun /* Extended RDES4 message type definitions */
144*4882a593Smuzhiyun #define RDES_EXT_NO_PTP			0x0
145*4882a593Smuzhiyun #define RDES_EXT_SYNC			0x1
146*4882a593Smuzhiyun #define RDES_EXT_FOLLOW_UP		0x2
147*4882a593Smuzhiyun #define RDES_EXT_DELAY_REQ		0x3
148*4882a593Smuzhiyun #define RDES_EXT_DELAY_RESP		0x4
149*4882a593Smuzhiyun #define RDES_EXT_PDELAY_REQ		0x5
150*4882a593Smuzhiyun #define RDES_EXT_PDELAY_RESP		0x6
151*4882a593Smuzhiyun #define RDES_EXT_PDELAY_FOLLOW_UP	0x7
152*4882a593Smuzhiyun #define RDES_PTP_ANNOUNCE		0x8
153*4882a593Smuzhiyun #define RDES_PTP_MANAGEMENT		0x9
154*4882a593Smuzhiyun #define RDES_PTP_SIGNALING		0xa
155*4882a593Smuzhiyun #define RDES_PTP_PKT_RESERVED_TYPE	0xf
156*4882a593Smuzhiyun 
157*4882a593Smuzhiyun /* Basic descriptor structure for normal and alternate descriptors */
158*4882a593Smuzhiyun struct dma_desc {
159*4882a593Smuzhiyun 	__le32 des0;
160*4882a593Smuzhiyun 	__le32 des1;
161*4882a593Smuzhiyun 	__le32 des2;
162*4882a593Smuzhiyun 	__le32 des3;
163*4882a593Smuzhiyun };
164*4882a593Smuzhiyun 
165*4882a593Smuzhiyun /* Extended descriptor structure (e.g. >= databook 3.50a) */
166*4882a593Smuzhiyun struct dma_extended_desc {
167*4882a593Smuzhiyun 	struct dma_desc basic;	/* Basic descriptors */
168*4882a593Smuzhiyun 	__le32 des4;	/* Extended Status */
169*4882a593Smuzhiyun 	__le32 des5;	/* Reserved */
170*4882a593Smuzhiyun 	__le32 des6;	/* Tx/Rx Timestamp Low */
171*4882a593Smuzhiyun 	__le32 des7;	/* Tx/Rx Timestamp High */
172*4882a593Smuzhiyun };
173*4882a593Smuzhiyun 
174*4882a593Smuzhiyun /* Enhanced descriptor for TBS */
175*4882a593Smuzhiyun struct dma_edesc {
176*4882a593Smuzhiyun 	__le32 des4;
177*4882a593Smuzhiyun 	__le32 des5;
178*4882a593Smuzhiyun 	__le32 des6;
179*4882a593Smuzhiyun 	__le32 des7;
180*4882a593Smuzhiyun 	struct dma_desc basic;
181*4882a593Smuzhiyun };
182*4882a593Smuzhiyun 
183*4882a593Smuzhiyun /* Transmit checksum insertion control */
184*4882a593Smuzhiyun #define	TX_CIC_FULL	3	/* Include IP header and pseudoheader */
185*4882a593Smuzhiyun 
186*4882a593Smuzhiyun #endif /* __DESCS_H__ */
187