2 * Copyright (c) 2010-2013 Xilinx, Inc. All rights reserved.
5 * XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A
6 * COURTESY TO YOU. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS
7 * ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION OR
8 * STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION
9 * IS FREE FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE
10 * FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION.
11 * XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO
12 * THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO
13 * ANY WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE
14 * FROM CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY
15 * AND FITNESS FOR A PARTICULAR PURPOSE.
19 #ifndef __NETIF_XEMACPSIF_H__
20 #define __NETIF_XEMACPSIF_H__
26 #include "xlwipconfig.h"
27 #include "lwip/netif.h"
28 #include "netif/etharp.h"
29 #include "netif/xadapter.h"
33 #include "xparameters.h"
34 #include "xparameters_ps.h" /* defines XPAR values */
35 #include "xil_types.h"
36 #include "xil_assert.h"
38 #include "xil_exception.h"
39 #include "xpseudo_asm.h"
40 #include "xil_cache.h"
41 #include "xil_printf.h"
44 #include "xemacps.h" /* defines XEmacPs API */
46 #include "netif/xpqueue.h"
47 #include "xlwipconfig.h"
49 void xemacpsif_setmac(u32_t index, u8_t *addr);
50 u8_t* xemacpsif_getmac(u32_t index);
51 err_t xemacpsif_init(struct netif *netif);
52 int xemacpsif_input(struct netif *netif);
54 unsigned get_IEEE_phy_speed(XLlTemac *xlltemacp);
58 void xemacps_error_handler(XEmacPs * Temac);
60 /* structure within each netif, encapsulating all information required for
61 * using a particular temac instance
66 /* queue to store overflow packets */
70 /* pointers to memory holding buffer descriptors (used only with SDMA) */
74 unsigned int last_rx_frms_cntr;
78 extern xemacpsif_s xemacpsif;
80 int is_tx_space_available(xemacpsif_s *emac);
82 /* xaxiemacif_dma.c */
84 XStatus init_axi_dma(struct xemac_s *xemac);
85 void process_sent_bds(XEmacPs_BdRing *txring);
86 unsigned Phy_Setup (XEmacPs *xemacpsp);
87 void emacps_send_handler(void *arg);
88 XStatus emacps_sgsend(xemacpsif_s *xemacpsif, struct pbuf *p);
89 void emacps_recv_handler(void *arg);
90 void emacps_error_handler(void *arg,u8 Direction, u32 ErrorWord);
91 void setup_rx_bds(XEmacPs_BdRing *rxring);
92 void HandleTxErrors(struct xemac_s *xemac);
93 void HandleEmacPsError(struct xemac_s *xemac);
94 XEmacPs_Config *xemacps_lookup_config(unsigned mac_base);
95 void init_emacps(xemacpsif_s *xemacps, struct netif *netif);
96 void setup_isr (struct xemac_s *xemac);
97 XStatus init_dma(struct xemac_s *xemac);
98 void start_emacps (xemacpsif_s *xemacps);
99 void FreeTxRxPBufs(void);
100 void FreeOnlyTxPBufs(void);
101 void init_emacps_on_error (xemacpsif_s *xemacps, struct netif *netif);
102 void clean_dma_txdescs(struct xemac_s *xemac);
103 void resetrx_on_no_rxdata(xemacpsif_s *xemacpsif);
109 #endif /* __NETIF_XAXIEMACIF_H__ */