37 #ifndef __ALT_ETHERNET_H__
38 #define __ALT_ETHERNET_H__
41 #include "socal/hps.h"
42 #include "socal/alt_emac.h"
43 #include "alt_interrupt.h"
50 #define ETH_RESET_DELAY ((uint32_t)0x000FFFFF)
51 #define NUMBER_OF_TX_DESCRIPTORS 32
52 #define NUMBER_OF_RX_DESCRIPTORS 32
53 #define ETH_BUFFER_SIZE 1536
59 } alt_eth_set_reset_state_t;
64 } alt_eth_enable_disable_state_t;
67 #define USE_ALTERNATE_DESCRIPTOR_SIZE
74 #define USE_ENHANCED_DMA_DESCRIPTORS
90 #ifdef USE_ALTERNATE_DESCRIPTOR_SIZE
91 uint32_t extended_status;
93 uint32_t time_stamp_low;
94 uint32_t time_stamp_high;
98 #ifdef USE_ENHANCED_DMA_DESCRIPTORS
119 #define ETH_DMATXDESC_OWN ((uint32_t)0x80000000)
120 #define ETH_DMATXDESC_IC ((uint32_t)0x40000000)
121 #define ETH_DMATXDESC_LS ((uint32_t)0x20000000)
122 #define ETH_DMATXDESC_FS ((uint32_t)0x10000000)
123 #define ETH_DMATXDESC_DC ((uint32_t)0x08000000)
124 #define ETH_DMATXDESC_DP ((uint32_t)0x04000000)
125 #define ETH_DMATXDESC_TTSE ((uint32_t)0x02000000)
126 #define ETH_DMATXDESC_CIC ((uint32_t)0x00C00000)
127 #define ETH_DMATXDESC_CIC_BYPASS ((uint32_t)0x00000000)
128 #define ETH_DMATXDESC_CIC_IPV4HEADER ((uint32_t)0x00400000)
129 #define ETH_DMATXDESC_CIC_TCPUDPICMP_SEGMENT ((uint32_t)0x00800000)
130 #define ETH_DMATXDESC_CIC_TCPUDPICMP_FULL ((uint32_t)0x00C00000)
131 #define ETH_DMATXDESC_TER ((uint32_t)0x00200000)
132 #define ETH_DMATXDESC_TCH ((uint32_t)0x00100000)
133 #define ETH_DMATXDESC_TTSS ((uint32_t)0x00020000)
134 #define ETH_DMATXDESC_IHE ((uint32_t)0x00010000)
135 #define ETH_DMATXDESC_ES ((uint32_t)0x00008000)
136 #define ETH_DMATXDESC_JT ((uint32_t)0x00004000)
137 #define ETH_DMATXDESC_FF ((uint32_t)0x00002000)
138 #define ETH_DMATXDESC_PCE ((uint32_t)0x00001000)
139 #define ETH_DMATXDESC_LCA ((uint32_t)0x00000800)
140 #define ETH_DMATXDESC_NC ((uint32_t)0x00000400)
141 #define ETH_DMATXDESC_LCO ((uint32_t)0x00000200)
142 #define ETH_DMATXDESC_EC ((uint32_t)0x00000100)
143 #define ETH_DMATXDESC_VF ((uint32_t)0x00000080)
144 #define ETH_DMATXDESC_CC ((uint32_t)0x00000078)
145 #define ETH_DMATXDESC_ED ((uint32_t)0x00000004)
146 #define ETH_DMATXDESC_UF ((uint32_t)0x00000002)
147 #define ETH_DMATXDESC_DB ((uint32_t)0x00000001)
151 #define ETH_DMATXDESC_TBS2 ((uint32_t)0x1FFF0000)
152 #define ETH_DMATXDESC_TBS1 ((uint32_t)0x00001FFF)
155 #define ETH_DMATXDESC_B1AP ((uint32_t)0xFFFFFFFF)
158 #define ETH_DMATXDESC_B2AP ((uint32_t)0xFFFFFFFF)
167 #define ETH_DMAPTPTXDESC_TTSL ((uint32_t)0xFFFFFFFF)
170 #define ETH_DMAPTPTXDESC_TTSH ((uint32_t)0xFFFFFFFF)
186 #define ETH_DMARXDESC_OWN ((uint32_t)0x80000000)
187 #define ETH_DMARXDESC_AFM ((uint32_t)0x40000000)
188 #define ETH_DMARXDESC_FL ((uint32_t)0x3FFF0000)
189 #define ETH_DMARXDESC_ES ((uint32_t)0x00008000)
190 #define ETH_DMARXDESC_DE ((uint32_t)0x00004000)
191 #define ETH_DMARXDESC_SAF ((uint32_t)0x00002000)
192 #define ETH_DMARXDESC_LE ((uint32_t)0x00001000)
193 #define ETH_DMARXDESC_OE ((uint32_t)0x00000800)
194 #define ETH_DMARXDESC_VLAN ((uint32_t)0x00000400)
195 #define ETH_DMARXDESC_FS ((uint32_t)0x00000200)
196 #define ETH_DMARXDESC_LS ((uint32_t)0x00000100)
197 #define ETH_DMARXDESC_IPV4HCE ((uint32_t)0x00000080)
198 #define ETH_DMARXDESC_LC ((uint32_t)0x00000040)
199 #define ETH_DMARXDESC_FT ((uint32_t)0x00000020)
200 #define ETH_DMARXDESC_RWT ((uint32_t)0x00000010)
201 #define ETH_DMARXDESC_RE ((uint32_t)0x00000008)
202 #define ETH_DMARXDESC_DBE ((uint32_t)0x00000004)
203 #define ETH_DMARXDESC_CE ((uint32_t)0x00000002)
204 #define ETH_DMARXDESC_MAMPCE ((uint32_t)0x00000001)
207 #define ETH_DMARXDESC_DIC ((uint32_t)0x80000000)
208 #define ETH_DMARXDESC_RBS2 ((uint32_t)0x1FFF0000)
209 #define ETH_DMARXDESC_RER ((uint32_t)0x00008000)
210 #define ETH_DMARXDESC_RCH ((uint32_t)0x00004000)
211 #define ETH_DMARXDESC_RBS1 ((uint32_t)0x00001FFF)
214 #define ETH_DMARXDESC_B1AP ((uint32_t)0xFFFFFFFF)
217 #define ETH_DMARXDESC_B2AP ((uint32_t)0xFFFFFFFF)
230 #define ETH_DMAPTPRXDESC_PTPV ((uint32_t)0x00002000)
231 #define ETH_DMAPTPRXDESC_PTPFT ((uint32_t)0x00001000)
232 #define ETH_DMAPTPRXDESC_PTPMT ((uint32_t)0x00000F00)
233 #define ETH_DMAPTPRXDESC_PTPMT_SYNC ((uint32_t)0x00000100)
234 #define ETH_DMAPTPRXDESC_PTPMT_FOLLOWUP ((uint32_t)0x00000200)
235 #define ETH_DMAPTPRXDESC_PTPMT_DELAYREQ ((uint32_t)0x00000300)
236 #define ETH_DMAPTPRXDESC_PTPMT_DELAYRESP ((uint32_t)0x00000400)
237 #define ETH_DMAPTPRXDESC_PTPMT_PDELAYREQ_ANNOUNCE ((uint32_t)0x00000500)
238 #define ETH_DMAPTPRXDESC_PTPMT_PDELAYREQ_MANAGE ((uint32_t)0x00000600)
239 #define ETH_DMAPTPRXDESC_PTPMT_PDELAYRESPFOLLOWUP_SIGNAL ((uint32_t)0x00000700)
240 #define ETH_DMAPTPRXDESC_IPV6PR ((uint32_t)0x00000040)
241 #define ETH_DMAPTPRXDESC_IPCB ((uint32_t)0x00000020)
242 #define ETH_DMAPTPRXDESC_IPPE ((uint32_t)0x00000010)
243 #define ETH_DMAPTPRXDESC_IPHE ((uint32_t)0x00000008)
244 #define ETH_DMAPTPRXDESC_IPPT ((uint32_t)0x00000007)
245 #define ETH_DMAPTPRXDESC_IPPT_UDP ((uint32_t)0x00000001)
246 #define ETH_DMAPTPRXDESC_IPPT_TCP ((uint32_t)0x00000002)
247 #define ETH_DMAPTPRXDESC_IPPT_ICMP ((uint32_t)0x00000003)
250 #define ETH_DMAPTPRXDESC_RTSL ((uint32_t)0xFFFFFFFF)
253 #define ETH_DMAPTPRXDESC_RTSH ((uint32_t)0xFFFFFFFF)
276 #define ETH_DMATXDESC_OWN ((uint32_t)0x80000000)
277 #define ETH_DMATXDESC_TTSS ((uint32_t)0x00020000)
278 #define ETH_DMATXDESC_IHE ((uint32_t)0x00010000)
279 #define ETH_DMATXDESC_ES ((uint32_t)0x00008000)
280 #define ETH_DMATXDESC_JT ((uint32_t)0x00004000)
281 #define ETH_DMATXDESC_FF ((uint32_t)0x00002000)
282 #define ETH_DMATXDESC_PCE ((uint32_t)0x00001000)
283 #define ETH_DMATXDESC_LCA ((uint32_t)0x00000800)
284 #define ETH_DMATXDESC_NC ((uint32_t)0x00000400)
285 #define ETH_DMATXDESC_LCO ((uint32_t)0x00000200)
286 #define ETH_DMATXDESC_EC ((uint32_t)0x00000100)
287 #define ETH_DMATXDESC_VF ((uint32_t)0x00000080)
288 #define ETH_DMATXDESC_CC ((uint32_t)0x00000078)
289 #define ETH_DMATXDESC_ED ((uint32_t)0x00000004)
290 #define ETH_DMATXDESC_UF ((uint32_t)0x00000002)
291 #define ETH_DMATXDESC_DB ((uint32_t)0x00000001)
294 #define ETH_DMATXDESC_IC ((uint32_t)0x80000000)
295 #define ETH_DMATXDESC_LS ((uint32_t)0x40000000)
296 #define ETH_DMATXDESC_FS ((uint32_t)0x20000000)
297 #define ETH_DMATXDESC_CIC ((uint32_t)0x18000000)
298 #define ETH_DMATXDESC_CIC_BYPASS ((uint32_t)0x00000000)
299 #define ETH_DMATXDESC_CIC_IPV4HEADER ((uint32_t)0x08000000)
300 #define ETH_DMATXDESC_CIC_TCPUDPICMP_SEGMENT ((uint32_t)0x10000000)
301 #define ETH_DMATXDESC_CIC_TCPUDPICMP_FULL ((uint32_t)0x18000000)
302 #define ETH_DMATXDESC_DC ((uint32_t)0x04000000)
303 #define ETH_DMATXDESC_TER ((uint32_t)0x02000000)
304 #define ETH_DMATXDESC_TCH ((uint32_t)0x01000000)
305 #define ETH_DMATXDESC_DP ((uint32_t)0x00800000)
306 #define ETH_DMATXDESC_TTSE ((uint32_t)0x00400000)
307 #define ETH_DMATXDESC_TBS2 ((uint32_t)0x003FF800)
308 #define ETH_DMATXDESC_TBS1 ((uint32_t)0x000007FF)
311 #define ETH_DMATXDESC_B1AP ((uint32_t)0xFFFFFFFF)
314 #define ETH_DMATXDESC_B2AP ((uint32_t)0xFFFFFFFF)
330 #define ETH_DMARXDESC_OWN ((uint32_t)0x80000000)
331 #define ETH_DMARXDESC_AFM ((uint32_t)0x40000000)
332 #define ETH_DMARXDESC_FL ((uint32_t)0x3FFF0000)
333 #define ETH_DMARXDESC_ES ((uint32_t)0x00008000)
334 #define ETH_DMARXDESC_DE ((uint32_t)0x00004000)
335 #define ETH_DMARXDESC_SAF ((uint32_t)0x00002000)
336 #define ETH_DMARXDESC_LE ((uint32_t)0x00001000)
337 #define ETH_DMARXDESC_OE ((uint32_t)0x00000800)
338 #define ETH_DMARXDESC_VLAN ((uint32_t)0x00000400)
339 #define ETH_DMARXDESC_FS ((uint32_t)0x00000200)
340 #define ETH_DMARXDESC_LS ((uint32_t)0x00000100)
341 #define ETH_DMARXDESC_IPV4HCE ((uint32_t)0x00000080)
342 #define ETH_DMARXDESC_LC ((uint32_t)0x00000040)
343 #define ETH_DMARXDESC_FT ((uint32_t)0x00000020)
344 #define ETH_DMARXDESC_RWT ((uint32_t)0x00000010)
345 #define ETH_DMARXDESC_RE ((uint32_t)0x00000008)
346 #define ETH_DMARXDESC_DBE ((uint32_t)0x00000004)
347 #define ETH_DMARXDESC_CE ((uint32_t)0x00000002)
348 #define ETH_DMARXDESC_MAMPCE ((uint32_t)0x00000001)
351 #define ETH_DMARXDESC_DIC ((uint32_t)0x80000000)
352 #define ETH_DMARXDESC_RER ((uint32_t)0x02000000)
353 #define ETH_DMARXDESC_RCH ((uint32_t)0x01000000)
354 #define ETH_DMARXDESC_RBS2 ((uint32_t)0x003FF800)
355 #define ETH_DMARXDESC_RBS1 ((uint32_t)0x000007FF)
358 #define ETH_DMARXDESC_B1AP ((uint32_t)0xFFFFFFFF)
361 #define ETH_DMARXDESC_B2AP ((uint32_t)0xFFFFFFFF)
367 #ifdef USE_ENHANCED_DMA_DESCRIPTORS
370 #define ETH_DMATXDESC_BUFFER2_SIZESHIFT 16
373 #define ETH_DMARXDESC_FRAME_LENGTHSHIFT 16
376 #define ETH_DMARXDESC_BUFFER2_SIZESHIFT 16
381 #define ETH_DMATXDESC_BUFFER2_SIZESHIFT 11
384 #define ETH_DMARXDESC_FRAME_LENGTHSHIFT 16
387 #define ETH_DMARXDESC_BUFFER2_SIZESHIFT 11
405 uint32_t tx_current_desc_number;
406 uint32_t rx_current_desc_number;
407 uint32_t rx_processed_desc_number;
409 ALT_INT_INTERRUPT_t irqnum;
410 uint32_t interrupt_mask;
415 uint8_t rx_buf[ETH_BUFFER_SIZE * NUMBER_OF_RX_DESCRIPTORS];
416 uint8_t tx_buf[ETH_BUFFER_SIZE * NUMBER_OF_TX_DESCRIPTORS];
661 void alt_eth_mac_set_irq_reg(uint32_t mac_irq_mask, alt_eth_enable_disable_state_t new_state, uint32_t instance);
867 void alt_eth_dma_set_irq_reg(uint32_t dma_irq_mask, alt_eth_enable_disable_state_t new_state, uint32_t instance);