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