xref: /OK3568_Linux_fs/u-boot/drivers/net/xilinx_ll_temac.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Xilinx xps_ll_temac ethernet driver for u-boot
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * LL_TEMAC interface
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  * Copyright (C) 2011 - 2012 Stephan Linz <linz@li-pro.net>
7*4882a593Smuzhiyun  * Copyright (C) 2008 - 2011 Michal Simek <monstr@monstr.eu>
8*4882a593Smuzhiyun  * Copyright (C) 2008 - 2011 PetaLogix
9*4882a593Smuzhiyun  *
10*4882a593Smuzhiyun  * Based on Yoshio Kashiwagi kashiwagi@co-nss.co.jp driver
11*4882a593Smuzhiyun  * Copyright (C) 2008 Nissin Systems Co.,Ltd.
12*4882a593Smuzhiyun  * March 2008 created
13*4882a593Smuzhiyun  *
14*4882a593Smuzhiyun  * SPDX-License-Identifier:	GPL-2.0+
15*4882a593Smuzhiyun  *
16*4882a593Smuzhiyun  * [0]: http://www.xilinx.com/support/documentation
17*4882a593Smuzhiyun  *
18*4882a593Smuzhiyun  * [S]:	[0]/ip_documentation/xps_ll_temac.pdf
19*4882a593Smuzhiyun  * [A]:	[0]/application_notes/xapp1041.pdf
20*4882a593Smuzhiyun  */
21*4882a593Smuzhiyun #ifndef _XILINX_LL_TEMAC_
22*4882a593Smuzhiyun #define _XILINX_LL_TEMAC_
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun #include <config.h>
25*4882a593Smuzhiyun #include <net.h>
26*4882a593Smuzhiyun #include <phy.h>
27*4882a593Smuzhiyun #include <miiphy.h>
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun #include <asm/types.h>
30*4882a593Smuzhiyun #include <asm/byteorder.h>
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun #include "xilinx_ll_temac_sdma.h"
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun #if !defined(__BIG_ENDIAN)
35*4882a593Smuzhiyun # error LL_TEMAC requires big endianess
36*4882a593Smuzhiyun #endif
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun /*
39*4882a593Smuzhiyun  * TEMAC Memory and Register Definition
40*4882a593Smuzhiyun  *
41*4882a593Smuzhiyun  * [1]:	[0]/ip_documentation/xps_ll_temac.pdf
42*4882a593Smuzhiyun  *	page 19, Memory and Register Descriptions
43*4882a593Smuzhiyun  */
44*4882a593Smuzhiyun struct temac_reg {
45*4882a593Smuzhiyun 	/* direct soft registers (low part) */
46*4882a593Smuzhiyun 	u32 raf;	/* Reset and Address Filter */
47*4882a593Smuzhiyun 	u32 tpf;	/* Transmit Pause Frame */
48*4882a593Smuzhiyun 	u32 ifgp;	/* Transmit Inter Frame Gap Adjustment */
49*4882a593Smuzhiyun 	u32 is;		/* Interrupt Status */
50*4882a593Smuzhiyun 	u32 ip;		/* Interrupt Pending */
51*4882a593Smuzhiyun 	u32 ie;		/* Interrupt Enable */
52*4882a593Smuzhiyun 	u32 ttag;	/* Transmit VLAN Tag */
53*4882a593Smuzhiyun 	u32 rtag;	/* Receive VLAN Tag */
54*4882a593Smuzhiyun 	/* hard TEMAC registers */
55*4882a593Smuzhiyun 	u32 msw;	/* Most Significant Word Data */
56*4882a593Smuzhiyun 	u32 lsw;	/* Least Significant Word Data */
57*4882a593Smuzhiyun 	u32 ctl;	/* Control */
58*4882a593Smuzhiyun 	u32 rdy;	/* Ready Status */
59*4882a593Smuzhiyun 	/* direct soft registers (high part) */
60*4882a593Smuzhiyun 	u32 uawl;	/* Unicast Address Word Lower */
61*4882a593Smuzhiyun 	u32 uawu;	/* Unicast Address Word Upper */
62*4882a593Smuzhiyun 	u32 tpid0;	/* VLAN TPID Word 0 */
63*4882a593Smuzhiyun 	u32 tpid1;	/* VLAN TPID Word 1 */
64*4882a593Smuzhiyun };
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun /* Reset and Address Filter Registers (raf), [1] p25 */
67*4882a593Smuzhiyun #define RAF_SR			(1 << 13)
68*4882a593Smuzhiyun #define RAF_EMFE		(1 << 12)
69*4882a593Smuzhiyun #define RAF_NFE			(1 << 11)
70*4882a593Smuzhiyun #define RAF_RVSTM_POS		9
71*4882a593Smuzhiyun #define RAF_RVSTM_MASK		(3 << RAF_RVSTM_POS)
72*4882a593Smuzhiyun #define RAF_TVSTM_POS		7
73*4882a593Smuzhiyun #define RAF_TVSTM_MASK		(3 << RAF_TVSTM_POS)
74*4882a593Smuzhiyun #define RAF_RVTM_POS		5
75*4882a593Smuzhiyun #define RAF_RVTM_MASK		(3 << RAF_RVTM_POS)
76*4882a593Smuzhiyun #define RAF_TVTM_POS		3
77*4882a593Smuzhiyun #define RAF_TVTM_MASK		(3 << RAF_TVTM_POS)
78*4882a593Smuzhiyun #define RAF_BCREJ		(1 << 2)
79*4882a593Smuzhiyun #define RAF_MCREJ		(1 << 1)
80*4882a593Smuzhiyun #define RAF_HTRST		(1 << 0)
81*4882a593Smuzhiyun 
82*4882a593Smuzhiyun /* Transmit Pause Frame Registers (tpf), [1] p28 */
83*4882a593Smuzhiyun #define TPF_TPFV_POS		0
84*4882a593Smuzhiyun #define TPF_TPFV_MASK		(0xFFFF << TPF_TPFV_POS)
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun /* Transmit Inter Frame Gap Adjustment Registers (ifgp), [1] p28 */
87*4882a593Smuzhiyun #define IFGP_POS		0
88*4882a593Smuzhiyun #define IFGP_MASK		(0xFF << IFGP_POS)
89*4882a593Smuzhiyun 
90*4882a593Smuzhiyun /* Interrupt Status, Pending, Enable Registers (is, ip, ie), [1] p29-33 */
91*4882a593Smuzhiyun #define ISPE_MR			(1 << 7)
92*4882a593Smuzhiyun #define ISPE_RDL		(1 << 6)
93*4882a593Smuzhiyun #define ISPE_TC			(1 << 5)
94*4882a593Smuzhiyun #define ISPE_RFO		(1 << 4)
95*4882a593Smuzhiyun #define ISPE_RR			(1 << 3)
96*4882a593Smuzhiyun #define ISPE_RC			(1 << 2)
97*4882a593Smuzhiyun #define ISPE_AN			(1 << 1)
98*4882a593Smuzhiyun #define ISPE_HAC		(1 << 0)
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun /* Transmit, Receive VLAN Tag Registers (ttag, rtag), [1] p34-35 */
101*4882a593Smuzhiyun #define TRTAG_TPID_POS		16
102*4882a593Smuzhiyun #define TRTAG_TPID_MASK		(0xFFFF << TRTAG_TPID_POS)
103*4882a593Smuzhiyun #define TRTAG_PRIO_POS		13
104*4882a593Smuzhiyun #define TRTAG_PRIO_MASK		(7 << TRTAG_PRIO_POS)
105*4882a593Smuzhiyun #define TRTAG_CFI		(1 << 12)
106*4882a593Smuzhiyun #define TRTAG_VID_POS		0
107*4882a593Smuzhiyun #define TRTAG_VID_MASK		(0xFFF << TRTAG_VID_POS)
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun /* Most, Least Significant Word Data Register (msw, lsw), [1] p46 */
110*4882a593Smuzhiyun #define MLSW_POS		0
111*4882a593Smuzhiyun #define MLSW_MASK		(~0UL << MLSW_POS)
112*4882a593Smuzhiyun 
113*4882a593Smuzhiyun /* LSW Data Register for PHY addresses (lsw), [1] p66 */
114*4882a593Smuzhiyun #define LSW_REGAD_POS		0
115*4882a593Smuzhiyun #define LSW_REGAD_MASK		(0x1F << LSW_REGAD_POS)
116*4882a593Smuzhiyun #define LSW_PHYAD_POS		5
117*4882a593Smuzhiyun #define LSW_PHYAD_MASK		(0x1F << LSW_PHYAD_POS)
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun /* LSW Data Register for PHY data (lsw), [1] p66 */
120*4882a593Smuzhiyun #define LSW_REGDAT_POS		0
121*4882a593Smuzhiyun #define LSW_REGDAT_MASK		(0xFFFF << LSW_REGDAT_POS)
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun /* Control Register (ctl), [1] p47 */
124*4882a593Smuzhiyun #define CTL_WEN			(1 << 15)
125*4882a593Smuzhiyun #define CTL_ADDR_POS		0
126*4882a593Smuzhiyun #define CTL_ADDR_MASK		(0x3FF << CTL_ADDR_POS)
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun /* Ready Status Register Ethernet (rdy), [1] p48 */
129*4882a593Smuzhiyun #define RSE_HACS_RDY		(1 << 14)
130*4882a593Smuzhiyun #define RSE_CFG_WR		(1 << 6)
131*4882a593Smuzhiyun #define RSE_CFG_RR		(1 << 5)
132*4882a593Smuzhiyun #define RSE_AF_WR		(1 << 4)
133*4882a593Smuzhiyun #define RSE_AF_RR		(1 << 3)
134*4882a593Smuzhiyun #define RSE_MIIM_WR		(1 << 2)
135*4882a593Smuzhiyun #define RSE_MIIM_RR		(1 << 1)
136*4882a593Smuzhiyun #define RSE_FABR_RR		(1 << 0)
137*4882a593Smuzhiyun 
138*4882a593Smuzhiyun /* Unicast Address Word Lower, Upper Registers (uawl, uawu), [1] p35-36 */
139*4882a593Smuzhiyun #define UAWL_UADDR_POS		0
140*4882a593Smuzhiyun #define UAWL_UADDR_MASK		(~0UL << UAWL_UADDR_POS)
141*4882a593Smuzhiyun #define UAWU_UADDR_POS		0
142*4882a593Smuzhiyun #define UAWU_UADDR_MASK		(0xFFFF << UAWU_UADDR_POS)
143*4882a593Smuzhiyun 
144*4882a593Smuzhiyun /* VLAN TPID Word 0, 1 Registers (tpid0, tpid1), [1] p37 */
145*4882a593Smuzhiyun #define TPID0_V0_POS		0
146*4882a593Smuzhiyun #define TPID0_V0_MASK		(0xFFFF << TPID0_V0_POS)
147*4882a593Smuzhiyun #define TPID0_V1_POS		16
148*4882a593Smuzhiyun #define TPID0_V1_MASK		(0xFFFF << TPID0_V1_POS)
149*4882a593Smuzhiyun #define TPID1_V2_POS		0
150*4882a593Smuzhiyun #define TPID1_V2_MASK		(0xFFFF << TPID1_V2_POS)
151*4882a593Smuzhiyun #define TPID1_V3_POS		16
152*4882a593Smuzhiyun #define TPID1_V3_MASK		(0xFFFF << TPID1_V3_POS)
153*4882a593Smuzhiyun 
154*4882a593Smuzhiyun /*
155*4882a593Smuzhiyun  * TEMAC Indirectly Addressable Register Index Enumeration
156*4882a593Smuzhiyun  *
157*4882a593Smuzhiyun  * [0]: http://www.xilinx.com/support/documentation
158*4882a593Smuzhiyun  *
159*4882a593Smuzhiyun  * [1]:	[0]/ip_documentation/xps_ll_temac.pdf
160*4882a593Smuzhiyun  *	page 23, PLB Indirectly Addressable TEMAC Registers
161*4882a593Smuzhiyun  */
162*4882a593Smuzhiyun enum temac_ctrl {
163*4882a593Smuzhiyun 	TEMAC_RCW0	= 0x200,
164*4882a593Smuzhiyun 	TEMAC_RCW1	= 0x240,
165*4882a593Smuzhiyun 	TEMAC_TC	= 0x280,
166*4882a593Smuzhiyun 	TEMAC_FCC	= 0x2C0,
167*4882a593Smuzhiyun 	TEMAC_EMMC	= 0x300,
168*4882a593Smuzhiyun 	TEMAC_PHYC	= 0x320,
169*4882a593Smuzhiyun 	TEMAC_MC	= 0x340,
170*4882a593Smuzhiyun 	TEMAC_UAW0	= 0x380,
171*4882a593Smuzhiyun 	TEMAC_UAW1	= 0x384,
172*4882a593Smuzhiyun 	TEMAC_MAW0	= 0x388,
173*4882a593Smuzhiyun 	TEMAC_MAW1	= 0x38C,
174*4882a593Smuzhiyun 	TEMAC_AFM	= 0x390,
175*4882a593Smuzhiyun 	TEMAC_TIS	= 0x3A0,
176*4882a593Smuzhiyun 	TEMAC_TIE	= 0x3A4,
177*4882a593Smuzhiyun 	TEMAC_MIIMWD	= 0x3B0,
178*4882a593Smuzhiyun 	TEMAC_MIIMAI	= 0x3B4
179*4882a593Smuzhiyun };
180*4882a593Smuzhiyun 
181*4882a593Smuzhiyun /* Receive Configuration Word 0, 1 Registers (RCW0, RCW1), [1] p50-51 */
182*4882a593Smuzhiyun #define RCW0_PADDR_POS		0
183*4882a593Smuzhiyun #define RCW0_PADDR_MASK		(~0UL << RCW_PADDR_POS)
184*4882a593Smuzhiyun #define RCW1_RST		(1 << 31)
185*4882a593Smuzhiyun #define RCW1_JUM		(1 << 30)
186*4882a593Smuzhiyun #define RCW1_FCS		(1 << 29)
187*4882a593Smuzhiyun #define RCW1_RX			(1 << 28)
188*4882a593Smuzhiyun #define RCW1_VLAN		(1 << 27)
189*4882a593Smuzhiyun #define RCW1_HD			(1 << 26)
190*4882a593Smuzhiyun #define RCW1_LT_DIS		(1 << 25)
191*4882a593Smuzhiyun #define RCW1_PADDR_POS		0
192*4882a593Smuzhiyun #define RCW1_PADDR_MASK		(0xFFFF << RCW_PADDR_POS)
193*4882a593Smuzhiyun 
194*4882a593Smuzhiyun /* Transmit Configuration Registers (TC), [1] p52 */
195*4882a593Smuzhiyun #define TC_RST			(1 << 31)
196*4882a593Smuzhiyun #define TC_JUM			(1 << 30)
197*4882a593Smuzhiyun #define TC_FCS			(1 << 29)
198*4882a593Smuzhiyun #define TC_TX			(1 << 28)
199*4882a593Smuzhiyun #define TC_VLAN			(1 << 27)
200*4882a593Smuzhiyun #define TC_HD			(1 << 26)
201*4882a593Smuzhiyun #define TC_IFG			(1 << 25)
202*4882a593Smuzhiyun 
203*4882a593Smuzhiyun /* Flow Control Configuration Registers (FCC), [1] p54 */
204*4882a593Smuzhiyun #define FCC_FCTX		(1 << 30)
205*4882a593Smuzhiyun #define FCC_FCRX		(1 << 29)
206*4882a593Smuzhiyun 
207*4882a593Smuzhiyun /* Ethernet MAC Mode Configuration Registers (EMMC), [1] p54 */
208*4882a593Smuzhiyun #define EMMC_LSPD_POS		30
209*4882a593Smuzhiyun #define EMMC_LSPD_MASK		(3 << EMMC_LSPD_POS)
210*4882a593Smuzhiyun #define EMMC_LSPD_1000		(2 << EMMC_LSPD_POS)
211*4882a593Smuzhiyun #define EMMC_LSPD_100		(1 << EMMC_LSPD_POS)
212*4882a593Smuzhiyun #define EMMC_LSPD_10		0
213*4882a593Smuzhiyun #define EMMC_RGMII		(1 << 29)
214*4882a593Smuzhiyun #define EMMC_SGMII		(1 << 28)
215*4882a593Smuzhiyun #define EMMC_GPCS		(1 << 27)
216*4882a593Smuzhiyun #define EMMC_HOST		(1 << 26)
217*4882a593Smuzhiyun #define EMMC_TX16		(1 << 25)
218*4882a593Smuzhiyun #define EMMC_RX16		(1 << 24)
219*4882a593Smuzhiyun 
220*4882a593Smuzhiyun /* RGMII/SGMII Configuration Registers (PHYC), [1] p56 */
221*4882a593Smuzhiyun #define PHYC_SLSPD_POS		30
222*4882a593Smuzhiyun #define PHYC_SLSPD_MASK		(3 << EMMC_SLSPD_POS)
223*4882a593Smuzhiyun #define PHYC_SLSPD_1000		(2 << EMMC_SLSPD_POS)
224*4882a593Smuzhiyun #define PHYC_SLSPD_100		(1 << EMMC_SLSPD_POS)
225*4882a593Smuzhiyun #define PHYC_SLSPD_10		0
226*4882a593Smuzhiyun #define PHYC_RLSPD_POS		2
227*4882a593Smuzhiyun #define PHYC_RLSPD_MASK		(3 << EMMC_RLSPD_POS)
228*4882a593Smuzhiyun #define PHYC_RLSPD_1000		(2 << EMMC_RLSPD_POS)
229*4882a593Smuzhiyun #define PHYC_RLSPD_100		(1 << EMMC_RLSPD_POS)
230*4882a593Smuzhiyun #define PHYC_RLSPD_10		0
231*4882a593Smuzhiyun #define PHYC_RGMII_HD		(1 << 1)
232*4882a593Smuzhiyun #define PHYC_RGMII_LINK		(1 << 0)
233*4882a593Smuzhiyun 
234*4882a593Smuzhiyun /* Management Configuration Registers (MC), [1] p57 */
235*4882a593Smuzhiyun #define MC_MDIOEN		(1 << 6)
236*4882a593Smuzhiyun #define MC_CLKDIV_POS		0
237*4882a593Smuzhiyun #define MC_CLKDIV_MASK		(0x3F << MC_CLKDIV_POS)
238*4882a593Smuzhiyun 
239*4882a593Smuzhiyun /*
240*4882a593Smuzhiyun  *             fHOSTCLK          fMDC =                  fHOSTCLK
241*4882a593Smuzhiyun  * fMDC = -------------------   --------->   MC_CLKDIV = -------- - 1
242*4882a593Smuzhiyun  *        (1 + MC_CLKDIV) * 2    2.5 MHz                   5MHz
243*4882a593Smuzhiyun  */
244*4882a593Smuzhiyun #define MC_CLKDIV(f, m)		((f / (2 * m)) - 1)
245*4882a593Smuzhiyun #define MC_CLKDIV_25(f)		MC_CLKDIV(f, 2500000)
246*4882a593Smuzhiyun #define MC_CLKDIV_20(f)		MC_CLKDIV(f, 2000000)
247*4882a593Smuzhiyun #define MC_CLKDIV_15(f)		MC_CLKDIV(f, 1500000)
248*4882a593Smuzhiyun #define MC_CLKDIV_10(f)		MC_CLKDIV(f, 1000000)
249*4882a593Smuzhiyun 
250*4882a593Smuzhiyun /* Unicast Address Word 0, 1 Registers (UAW0, UAW1), [1] p58-59 */
251*4882a593Smuzhiyun #define UAW0_UADDR_POS		0
252*4882a593Smuzhiyun #define UAW0_UADDR_MASK		(~0UL << UAW0_UADDR_POS)
253*4882a593Smuzhiyun #define UAW1_UADDR_POS		0
254*4882a593Smuzhiyun #define UAW1_UADDR_MASK		(0xFFFF << UAW1_UADDR_POS)
255*4882a593Smuzhiyun 
256*4882a593Smuzhiyun /* Multicast Address Word 0, 1 Registers (MAW0, MAW1), [1] p60 */
257*4882a593Smuzhiyun #define MAW0_MADDR_POS		0
258*4882a593Smuzhiyun #define MAW0_MADDR_MASK		(~0UL << MAW0_MADDR_POS)
259*4882a593Smuzhiyun #define MAW1_RNW		(1 << 23)
260*4882a593Smuzhiyun #define MAW1_MAIDX_POS		16
261*4882a593Smuzhiyun #define MAW1_MAIDX_MASK		(3 << MAW1_MAIDX_POS)
262*4882a593Smuzhiyun #define MAW1_MADDR_POS		0
263*4882a593Smuzhiyun #define MAW1_MADDR_MASK		(0xFFFF << MAW1_MADDR_POS)
264*4882a593Smuzhiyun 
265*4882a593Smuzhiyun /* Address Filter Mode Registers (AFM), [1] p63 */
266*4882a593Smuzhiyun #define AFM_PM			(1 << 31)
267*4882a593Smuzhiyun 
268*4882a593Smuzhiyun /* Interrupt Status, Enable Registers (TIS, TIE), [1] p63-65 */
269*4882a593Smuzhiyun #define TISE_CFG_W		(1 << 6)
270*4882a593Smuzhiyun #define TISE_CFG_R		(1 << 5)
271*4882a593Smuzhiyun #define TISE_AF_W		(1 << 4)
272*4882a593Smuzhiyun #define TISE_AF_R		(1 << 3)
273*4882a593Smuzhiyun #define TISE_MIIM_W		(1 << 2)
274*4882a593Smuzhiyun #define TISE_MIIM_R		(1 << 1)
275*4882a593Smuzhiyun #define TISE_FABR_R		(1 << 0)
276*4882a593Smuzhiyun 
277*4882a593Smuzhiyun /* MII Management Write Data Registers (MIIMWD), [1] p66 */
278*4882a593Smuzhiyun #define MIIMWD_DATA_POS		0
279*4882a593Smuzhiyun #define MIIMWD_DATA_MASK	(0xFFFF << MIIMWD_DATA_POS)
280*4882a593Smuzhiyun 
281*4882a593Smuzhiyun /* Ethernet interface ready status */
282*4882a593Smuzhiyun int ll_temac_check_status(struct temac_reg *regs, u32 mask);
283*4882a593Smuzhiyun 
284*4882a593Smuzhiyun /* Indirect write to ll_temac. */
285*4882a593Smuzhiyun int ll_temac_indirect_set(struct temac_reg *regs, u16 regn, u32 reg_data);
286*4882a593Smuzhiyun 
287*4882a593Smuzhiyun /* Indirect read from ll_temac. */
288*4882a593Smuzhiyun int ll_temac_indirect_get(struct temac_reg *regs, u16 regn, u32* reg_data);
289*4882a593Smuzhiyun 
290*4882a593Smuzhiyun struct ll_temac {
291*4882a593Smuzhiyun 	phys_addr_t		ctrladdr;
292*4882a593Smuzhiyun 	phys_addr_t		sdma_reg_addr[SDMA_CTRL_REGNUMS];
293*4882a593Smuzhiyun 
294*4882a593Smuzhiyun 	unsigned		(*in32)(phys_addr_t);
295*4882a593Smuzhiyun 	void			(*out32)(phys_addr_t, unsigned);
296*4882a593Smuzhiyun 
297*4882a593Smuzhiyun 	int			(*ctrlinit) (struct eth_device *);
298*4882a593Smuzhiyun 	int			(*ctrlhalt) (struct eth_device *);
299*4882a593Smuzhiyun 	int			(*ctrlreset) (struct eth_device *);
300*4882a593Smuzhiyun 
301*4882a593Smuzhiyun 	int			phyaddr;
302*4882a593Smuzhiyun 	struct phy_device	*phydev;
303*4882a593Smuzhiyun 	struct mii_dev		*bus;
304*4882a593Smuzhiyun 	char			mdio_busname[MDIO_NAME_LEN];
305*4882a593Smuzhiyun };
306*4882a593Smuzhiyun 
307*4882a593Smuzhiyun #endif /* _XILINX_LL_TEMAC_ */
308