0001
0002
0003
0004
0005
0006 #ifndef _TSNEP_HW_H
0007 #define _TSNEP_HW_H
0008
0009 #include <linux/types.h>
0010
0011
0012 #define ECM_TYPE 0x0000
0013 #define ECM_REVISION_MASK 0x000000FF
0014 #define ECM_REVISION_SHIFT 0
0015 #define ECM_VERSION_MASK 0x0000FF00
0016 #define ECM_VERSION_SHIFT 8
0017 #define ECM_QUEUE_COUNT_MASK 0x00070000
0018 #define ECM_QUEUE_COUNT_SHIFT 16
0019 #define ECM_GATE_CONTROL 0x02000000
0020
0021
0022 #define ECM_SYSTEM_TIME_LOW 0x0008
0023 #define ECM_SYSTEM_TIME_HIGH 0x000C
0024
0025
0026 #define ECM_CLOCK_RATE 0x0010
0027 #define ECM_CLOCK_RATE_OFFSET_MASK 0x7FFFFFFF
0028 #define ECM_CLOCK_RATE_OFFSET_SIGN 0x80000000
0029
0030
0031 #define ECM_INT_ENABLE 0x0018
0032 #define ECM_INT_ACTIVE 0x001C
0033 #define ECM_INT_ACKNOWLEDGE 0x001C
0034 #define ECM_INT_LINK 0x00000020
0035 #define ECM_INT_TX_0 0x00000100
0036 #define ECM_INT_RX_0 0x00000200
0037 #define ECM_INT_ALL 0x7FFFFFFF
0038 #define ECM_INT_DISABLE 0x80000000
0039
0040
0041 #define ECM_RESET 0x0020
0042 #define ECM_RESET_COMMON 0x00000001
0043 #define ECM_RESET_CHANNEL 0x00000100
0044 #define ECM_RESET_TXRX 0x00010000
0045
0046
0047 #define ECM_COUNTER_LOW 0x0028
0048 #define ECM_COUNTER_HIGH 0x002C
0049
0050
0051 #define ECM_STATUS 0x0080
0052 #define ECM_LINK_MODE_OFF 0x01000000
0053 #define ECM_LINK_MODE_100 0x02000000
0054 #define ECM_LINK_MODE_1000 0x04000000
0055 #define ECM_NO_LINK 0x01000000
0056 #define ECM_LINK_MODE_MASK 0x06000000
0057
0058
0059 #define ECM_MD_CONTROL 0x0084
0060 #define ECM_MD_STATUS 0x0084
0061 #define ECM_MD_PREAMBLE 0x00000001
0062 #define ECM_MD_READ 0x00000004
0063 #define ECM_MD_WRITE 0x00000002
0064 #define ECM_MD_ADDR_MASK 0x000000F8
0065 #define ECM_MD_ADDR_SHIFT 3
0066 #define ECM_MD_PHY_ADDR_MASK 0x00001F00
0067 #define ECM_MD_PHY_ADDR_SHIFT 8
0068 #define ECM_MD_BUSY 0x00000001
0069 #define ECM_MD_DATA_MASK 0xFFFF0000
0070 #define ECM_MD_DATA_SHIFT 16
0071
0072
0073 #define ECM_STAT 0x00B0
0074 #define ECM_STAT_RX_ERR_MASK 0x000000FF
0075 #define ECM_STAT_RX_ERR_SHIFT 0
0076 #define ECM_STAT_INV_FRM_MASK 0x0000FF00
0077 #define ECM_STAT_INV_FRM_SHIFT 8
0078 #define ECM_STAT_FWD_RX_ERR_MASK 0x00FF0000
0079 #define ECM_STAT_FWD_RX_ERR_SHIFT 16
0080
0081
0082 #define TSNEP_MAC_SIZE 0x4000
0083 #define TSNEP_QUEUE_SIZE 0x1000
0084 #define TSNEP_QUEUE(n) ({ typeof(n) __n = (n); \
0085 (__n) == 0 ? \
0086 0 : \
0087 TSNEP_MAC_SIZE + TSNEP_QUEUE_SIZE * ((__n) - 1); })
0088 #define TSNEP_MAX_QUEUES 8
0089 #define TSNEP_MAX_FRAME_SIZE (2 * 1024)
0090 #define TSNEP_DESC_SIZE 256
0091 #define TSNEP_DESC_OFFSET 128
0092
0093
0094 #define TSNEP_INFO 0x0100
0095 #define TSNEP_INFO_RX_ASSIGN 0x00010000
0096 #define TSNEP_INFO_TX_TIME 0x00020000
0097 #define TSNEP_CONTROL 0x0108
0098 #define TSNEP_CONTROL_TX_RESET 0x00000001
0099 #define TSNEP_CONTROL_TX_ENABLE 0x00000002
0100 #define TSNEP_CONTROL_TX_DMA_ERROR 0x00000010
0101 #define TSNEP_CONTROL_TX_DESC_ERROR 0x00000020
0102 #define TSNEP_CONTROL_RX_RESET 0x00000100
0103 #define TSNEP_CONTROL_RX_ENABLE 0x00000200
0104 #define TSNEP_CONTROL_RX_DISABLE 0x00000400
0105 #define TSNEP_CONTROL_RX_DMA_ERROR 0x00001000
0106 #define TSNEP_CONTROL_RX_DESC_ERROR 0x00002000
0107 #define TSNEP_TX_DESC_ADDR_LOW 0x0140
0108 #define TSNEP_TX_DESC_ADDR_HIGH 0x0144
0109 #define TSNEP_RX_DESC_ADDR_LOW 0x0180
0110 #define TSNEP_RX_DESC_ADDR_HIGH 0x0184
0111 #define TSNEP_RESET_OWNER_COUNTER 0x01
0112 #define TSNEP_RX_STATISTIC 0x0190
0113 #define TSNEP_RX_STATISTIC_NO_DESC_MASK 0x000000FF
0114 #define TSNEP_RX_STATISTIC_NO_DESC_SHIFT 0
0115 #define TSNEP_RX_STATISTIC_BUFFER_TOO_SMALL_MASK 0x0000FF00
0116 #define TSNEP_RX_STATISTIC_BUFFER_TOO_SMALL_SHIFT 8
0117 #define TSNEP_RX_STATISTIC_FIFO_OVERFLOW_MASK 0x00FF0000
0118 #define TSNEP_RX_STATISTIC_FIFO_OVERFLOW_SHIFT 16
0119 #define TSNEP_RX_STATISTIC_INVALID_FRAME_MASK 0xFF000000
0120 #define TSNEP_RX_STATISTIC_INVALID_FRAME_SHIFT 24
0121 #define TSNEP_RX_STATISTIC_NO_DESC 0x0190
0122 #define TSNEP_RX_STATISTIC_BUFFER_TOO_SMALL 0x0191
0123 #define TSNEP_RX_STATISTIC_FIFO_OVERFLOW 0x0192
0124 #define TSNEP_RX_STATISTIC_INVALID_FRAME 0x0193
0125 #define TSNEP_RX_ASSIGN 0x01A0
0126 #define TSNEP_RX_ASSIGN_ETHER_TYPE_ACTIVE 0x00000001
0127 #define TSNEP_RX_ASSIGN_ETHER_TYPE_MASK 0xFFFF0000
0128 #define TSNEP_RX_ASSIGN_ETHER_TYPE_SHIFT 16
0129 #define TSNEP_MAC_ADDRESS_LOW 0x0800
0130 #define TSNEP_MAC_ADDRESS_HIGH 0x0804
0131 #define TSNEP_RX_FILTER 0x0806
0132 #define TSNEP_RX_FILTER_ACCEPT_ALL_MULTICASTS 0x0001
0133 #define TSNEP_RX_FILTER_ACCEPT_ALL_UNICASTS 0x0002
0134 #define TSNEP_GC 0x0808
0135 #define TSNEP_GC_ENABLE_A 0x00000002
0136 #define TSNEP_GC_ENABLE_B 0x00000004
0137 #define TSNEP_GC_DISABLE 0x00000008
0138 #define TSNEP_GC_ENABLE_TIMEOUT 0x00000010
0139 #define TSNEP_GC_ACTIVE_A 0x00000002
0140 #define TSNEP_GC_ACTIVE_B 0x00000004
0141 #define TSNEP_GC_CHANGE_AB 0x00000008
0142 #define TSNEP_GC_TIMEOUT_ACTIVE 0x00000010
0143 #define TSNEP_GC_TIMEOUT_SIGNAL 0x00000020
0144 #define TSNEP_GC_LIST_ERROR 0x00000080
0145 #define TSNEP_GC_OPEN 0x00FF0000
0146 #define TSNEP_GC_OPEN_SHIFT 16
0147 #define TSNEP_GC_NEXT_OPEN 0xFF000000
0148 #define TSNEP_GC_NEXT_OPEN_SHIFT 24
0149 #define TSNEP_GC_TIMEOUT 131072
0150 #define TSNEP_GC_TIME 0x080C
0151 #define TSNEP_GC_CHANGE 0x0810
0152 #define TSNEP_GCL_A 0x2000
0153 #define TSNEP_GCL_B 0x2800
0154 #define TSNEP_GCL_SIZE SZ_2K
0155
0156
0157 struct tsnep_gcl_operation {
0158 u32 properties;
0159 u32 interval;
0160 };
0161
0162 #define TSNEP_GCL_COUNT (TSNEP_GCL_SIZE / sizeof(struct tsnep_gcl_operation))
0163 #define TSNEP_GCL_MASK 0x000000FF
0164 #define TSNEP_GCL_INSERT 0x20000000
0165 #define TSNEP_GCL_CHANGE 0x40000000
0166 #define TSNEP_GCL_LAST 0x80000000
0167 #define TSNEP_GCL_MIN_INTERVAL 32
0168
0169
0170 #define TSNEP_DESC_SIZE 256
0171 #define TSNEP_DESC_SIZE_DATA_AFTER 2048
0172 #define TSNEP_DESC_OFFSET 128
0173 #define TSNEP_DESC_OWNER_COUNTER_MASK 0xC0000000
0174 #define TSNEP_DESC_OWNER_COUNTER_SHIFT 30
0175 #define TSNEP_DESC_LENGTH_MASK 0x00003FFF
0176 #define TSNEP_DESC_INTERRUPT_FLAG 0x00040000
0177 #define TSNEP_DESC_EXTENDED_WRITEBACK_FLAG 0x00080000
0178 #define TSNEP_DESC_NO_LINK_FLAG 0x01000000
0179
0180
0181 struct tsnep_tx_desc {
0182 __le32 properties;
0183 __le32 more_properties;
0184 __le32 reserved[2];
0185 __le64 next;
0186 __le64 tx;
0187 };
0188
0189 #define TSNEP_TX_DESC_OWNER_MASK 0xE0000000
0190 #define TSNEP_TX_DESC_OWNER_USER_FLAG 0x20000000
0191 #define TSNEP_TX_DESC_LAST_FRAGMENT_FLAG 0x00010000
0192 #define TSNEP_TX_DESC_DATA_AFTER_DESC_FLAG 0x00020000
0193
0194
0195 struct tsnep_tx_desc_wb {
0196 __le32 properties;
0197 __le32 reserved1;
0198 __le64 counter;
0199 __le64 timestamp;
0200 __le32 dma_delay;
0201 __le32 reserved2;
0202 };
0203
0204 #define TSNEP_TX_DESC_UNDERRUN_ERROR_FLAG 0x00010000
0205 #define TSNEP_TX_DESC_DMA_DELAY_FIRST_DATA_MASK 0x0000FFFC
0206 #define TSNEP_TX_DESC_DMA_DELAY_FIRST_DATA_SHIFT 2
0207 #define TSNEP_TX_DESC_DMA_DELAY_LAST_DATA_MASK 0xFFFC0000
0208 #define TSNEP_TX_DESC_DMA_DELAY_LAST_DATA_SHIFT 18
0209 #define TSNEP_TX_DESC_DMA_DELAY_NS 64
0210
0211
0212 struct tsnep_rx_desc {
0213 __le32 properties;
0214 __le32 reserved[3];
0215 __le64 next;
0216 __le64 rx;
0217 };
0218
0219 #define TSNEP_RX_DESC_BUFFER_SIZE_MASK 0x00003FFC
0220
0221
0222 struct tsnep_rx_desc_wb {
0223 __le32 properties;
0224 __le32 reserved[7];
0225 };
0226
0227
0228 struct tsnep_rx_inline {
0229 __le64 counter;
0230 __le64 timestamp;
0231 };
0232
0233 #define TSNEP_RX_INLINE_METADATA_SIZE (sizeof(struct tsnep_rx_inline))
0234
0235 #endif