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