xref: /aosp_15_r20/external/ethtool/amd8111e.c (revision 1b481fc3bb1b45d4cf28d1ec12969dc1055f555d)
1*1b481fc3SMaciej Żenczykowski 
2*1b481fc3SMaciej Żenczykowski /* Copyright (C) 2003  Advanced Micro Devices Inc. */
3*1b481fc3SMaciej Żenczykowski #include <stdio.h>
4*1b481fc3SMaciej Żenczykowski #include "internal.h"
5*1b481fc3SMaciej Żenczykowski 
6*1b481fc3SMaciej Żenczykowski typedef enum {
7*1b481fc3SMaciej Żenczykowski 	/* VAL2 */
8*1b481fc3SMaciej Żenczykowski 	RDMD0			= (1 << 16),
9*1b481fc3SMaciej Żenczykowski 	/* VAL1 */
10*1b481fc3SMaciej Żenczykowski 	TDMD3			= (1 << 11),
11*1b481fc3SMaciej Żenczykowski 	TDMD2			= (1 << 10),
12*1b481fc3SMaciej Żenczykowski 	TDMD1			= (1 << 9),
13*1b481fc3SMaciej Żenczykowski 	TDMD0			= (1 << 8),
14*1b481fc3SMaciej Żenczykowski 	/* VAL0 */
15*1b481fc3SMaciej Żenczykowski 	UINTCMD			= (1 << 6),
16*1b481fc3SMaciej Żenczykowski 	RX_FAST_SPND		= (1 << 5),
17*1b481fc3SMaciej Żenczykowski 	TX_FAST_SPND		= (1 << 4),
18*1b481fc3SMaciej Żenczykowski 	RX_SPND			= (1 << 3),
19*1b481fc3SMaciej Żenczykowski 	TX_SPND			= (1 << 2),
20*1b481fc3SMaciej Żenczykowski 	INTREN			= (1 << 1),
21*1b481fc3SMaciej Żenczykowski 	RUN			= (1 << 0),
22*1b481fc3SMaciej Żenczykowski 
23*1b481fc3SMaciej Żenczykowski 	CMD0_CLEAR 		= 0x000F0F7F,   /* Command style register */
24*1b481fc3SMaciej Żenczykowski 
25*1b481fc3SMaciej Żenczykowski }CMD0_BITS;
26*1b481fc3SMaciej Żenczykowski typedef enum {
27*1b481fc3SMaciej Żenczykowski 
28*1b481fc3SMaciej Żenczykowski 	/* VAL3 */
29*1b481fc3SMaciej Żenczykowski 	CONDUIT_MODE		= (1 << 29),
30*1b481fc3SMaciej Żenczykowski 	/* VAL2 */
31*1b481fc3SMaciej Żenczykowski 	RPA			= (1 << 19),
32*1b481fc3SMaciej Żenczykowski 	DRCVPA			= (1 << 18),
33*1b481fc3SMaciej Żenczykowski 	DRCVBC			= (1 << 17),
34*1b481fc3SMaciej Żenczykowski 	PROM			= (1 << 16),
35*1b481fc3SMaciej Żenczykowski 	/* VAL1 */
36*1b481fc3SMaciej Żenczykowski 	ASTRP_RCV		= (1 << 13),
37*1b481fc3SMaciej Żenczykowski 	RCV_DROP0	  	= (1 << 12),
38*1b481fc3SMaciej Żenczykowski 	EMBA			= (1 << 11),
39*1b481fc3SMaciej Żenczykowski 	DXMT2PD			= (1 << 10),
40*1b481fc3SMaciej Żenczykowski 	LTINTEN			= (1 << 9),
41*1b481fc3SMaciej Żenczykowski 	DXMTFCS			= (1 << 8),
42*1b481fc3SMaciej Żenczykowski 	/* VAL0 */
43*1b481fc3SMaciej Żenczykowski 	APAD_XMT		= (1 << 6),
44*1b481fc3SMaciej Żenczykowski 	DRTY			= (1 << 5),
45*1b481fc3SMaciej Żenczykowski 	INLOOP			= (1 << 4),
46*1b481fc3SMaciej Żenczykowski 	EXLOOP			= (1 << 3),
47*1b481fc3SMaciej Żenczykowski 	REX_RTRY		= (1 << 2),
48*1b481fc3SMaciej Żenczykowski 	REX_UFLO		= (1 << 1),
49*1b481fc3SMaciej Żenczykowski 	REX_LCOL		= (1 << 0),
50*1b481fc3SMaciej Żenczykowski 
51*1b481fc3SMaciej Żenczykowski 	CMD2_CLEAR 		= 0x3F7F3F7F,   /* Command style register */
52*1b481fc3SMaciej Żenczykowski 
53*1b481fc3SMaciej Żenczykowski }CMD2_BITS;
54*1b481fc3SMaciej Żenczykowski typedef enum {
55*1b481fc3SMaciej Żenczykowski 
56*1b481fc3SMaciej Żenczykowski 	/* VAL3 */
57*1b481fc3SMaciej Żenczykowski 	ASF_INIT_DONE_ALIAS	= (1 << 29),
58*1b481fc3SMaciej Żenczykowski 	/* VAL2 */
59*1b481fc3SMaciej Żenczykowski 	JUMBO			= (1 << 21),
60*1b481fc3SMaciej Żenczykowski 	VSIZE			= (1 << 20),
61*1b481fc3SMaciej Żenczykowski 	VLONLY			= (1 << 19),
62*1b481fc3SMaciej Żenczykowski 	VL_TAG_DEL		= (1 << 18),
63*1b481fc3SMaciej Żenczykowski 	/* VAL1 */
64*1b481fc3SMaciej Żenczykowski 	EN_PMGR			= (1 << 14),
65*1b481fc3SMaciej Żenczykowski 	INTLEVEL		= (1 << 13),
66*1b481fc3SMaciej Żenczykowski 	FORCE_FULL_DUPLEX	= (1 << 12),
67*1b481fc3SMaciej Żenczykowski 	FORCE_LINK_STATUS	= (1 << 11),
68*1b481fc3SMaciej Żenczykowski 	APEP			= (1 << 10),
69*1b481fc3SMaciej Żenczykowski 	MPPLBA			= (1 << 9),
70*1b481fc3SMaciej Żenczykowski 	/* VAL0 */
71*1b481fc3SMaciej Żenczykowski 	RESET_PHY_PULSE		= (1 << 2),
72*1b481fc3SMaciej Żenczykowski 	RESET_PHY		= (1 << 1),
73*1b481fc3SMaciej Żenczykowski 	PHY_RST_POL		= (1 << 0),
74*1b481fc3SMaciej Żenczykowski 
75*1b481fc3SMaciej Żenczykowski }CMD3_BITS;
76*1b481fc3SMaciej Żenczykowski typedef enum {
77*1b481fc3SMaciej Żenczykowski 
78*1b481fc3SMaciej Żenczykowski 	INTR			= (1 << 31),
79*1b481fc3SMaciej Żenczykowski 	PCSINT			= (1 << 28),
80*1b481fc3SMaciej Żenczykowski 	LCINT			= (1 << 27),
81*1b481fc3SMaciej Żenczykowski 	APINT5			= (1 << 26),
82*1b481fc3SMaciej Żenczykowski 	APINT4			= (1 << 25),
83*1b481fc3SMaciej Żenczykowski 	APINT3			= (1 << 24),
84*1b481fc3SMaciej Żenczykowski 	TINT_SUM		= (1 << 23),
85*1b481fc3SMaciej Żenczykowski 	APINT2			= (1 << 22),
86*1b481fc3SMaciej Żenczykowski 	APINT1			= (1 << 21),
87*1b481fc3SMaciej Żenczykowski 	APINT0			= (1 << 20),
88*1b481fc3SMaciej Żenczykowski 	MIIPDTINT		= (1 << 19),
89*1b481fc3SMaciej Żenczykowski 	MCCINT			= (1 << 17),
90*1b481fc3SMaciej Żenczykowski 	MREINT			= (1 << 16),
91*1b481fc3SMaciej Żenczykowski 	RINT_SUM		= (1 << 15),
92*1b481fc3SMaciej Żenczykowski 	SPNDINT			= (1 << 14),
93*1b481fc3SMaciej Żenczykowski 	MPINT			= (1 << 13),
94*1b481fc3SMaciej Żenczykowski 	SINT			= (1 << 12),
95*1b481fc3SMaciej Żenczykowski 	TINT3			= (1 << 11),
96*1b481fc3SMaciej Żenczykowski 	TINT2			= (1 << 10),
97*1b481fc3SMaciej Żenczykowski 	TINT1			= (1 << 9),
98*1b481fc3SMaciej Żenczykowski 	TINT0			= (1 << 8),
99*1b481fc3SMaciej Żenczykowski 	UINT			= (1 << 7),
100*1b481fc3SMaciej Żenczykowski 	STINT			= (1 << 4),
101*1b481fc3SMaciej Żenczykowski 	RINT0			= (1 << 0),
102*1b481fc3SMaciej Żenczykowski 
103*1b481fc3SMaciej Żenczykowski }INT0_BITS;
104*1b481fc3SMaciej Żenczykowski typedef enum {
105*1b481fc3SMaciej Żenczykowski 
106*1b481fc3SMaciej Żenczykowski 	/* VAL3 */
107*1b481fc3SMaciej Żenczykowski 	LCINTEN			= (1 << 27),
108*1b481fc3SMaciej Żenczykowski 	APINT5EN		= (1 << 26),
109*1b481fc3SMaciej Żenczykowski 	APINT4EN		= (1 << 25),
110*1b481fc3SMaciej Żenczykowski 	APINT3EN		= (1 << 24),
111*1b481fc3SMaciej Żenczykowski 	/* VAL2 */
112*1b481fc3SMaciej Żenczykowski 	APINT2EN		= (1 << 22),
113*1b481fc3SMaciej Żenczykowski 	APINT1EN		= (1 << 21),
114*1b481fc3SMaciej Żenczykowski 	APINT0EN		= (1 << 20),
115*1b481fc3SMaciej Żenczykowski 	MIIPDTINTEN		= (1 << 19),
116*1b481fc3SMaciej Żenczykowski 	MCCIINTEN		= (1 << 18),
117*1b481fc3SMaciej Żenczykowski 	MCCINTEN		= (1 << 17),
118*1b481fc3SMaciej Żenczykowski 	MREINTEN		= (1 << 16),
119*1b481fc3SMaciej Żenczykowski 	/* VAL1 */
120*1b481fc3SMaciej Żenczykowski 	SPNDINTEN		= (1 << 14),
121*1b481fc3SMaciej Żenczykowski 	MPINTEN			= (1 << 13),
122*1b481fc3SMaciej Żenczykowski 	TINTEN3			= (1 << 11),
123*1b481fc3SMaciej Żenczykowski 	SINTEN			= (1 << 12),
124*1b481fc3SMaciej Żenczykowski 	TINTEN2			= (1 << 10),
125*1b481fc3SMaciej Żenczykowski 	TINTEN1			= (1 << 9),
126*1b481fc3SMaciej Żenczykowski 	TINTEN0			= (1 << 8),
127*1b481fc3SMaciej Żenczykowski 	/* VAL0 */
128*1b481fc3SMaciej Żenczykowski 	STINTEN			= (1 << 4),
129*1b481fc3SMaciej Żenczykowski 	RINTEN0			= (1 << 0),
130*1b481fc3SMaciej Żenczykowski 
131*1b481fc3SMaciej Żenczykowski 	INTEN0_CLEAR 		= 0x1F7F7F1F, /* Command style register */
132*1b481fc3SMaciej Żenczykowski 
133*1b481fc3SMaciej Żenczykowski }INTEN0_BITS;
134*1b481fc3SMaciej Żenczykowski 
135*1b481fc3SMaciej Żenczykowski typedef enum {
136*1b481fc3SMaciej Żenczykowski 
137*1b481fc3SMaciej Żenczykowski 	PMAT_DET		= (1 << 12),
138*1b481fc3SMaciej Żenczykowski 	MP_DET		        = (1 << 11),
139*1b481fc3SMaciej Żenczykowski 	LC_DET			= (1 << 10),
140*1b481fc3SMaciej Żenczykowski 	SPEED_MASK		= (1 << 9)|(1 << 8)|(1 << 7),
141*1b481fc3SMaciej Żenczykowski 	FULL_DPLX		= (1 << 6),
142*1b481fc3SMaciej Żenczykowski 	LINK_STATS		= (1 << 5),
143*1b481fc3SMaciej Żenczykowski 	AUTONEG_COMPLETE	= (1 << 4),
144*1b481fc3SMaciej Żenczykowski 	MIIPD			= (1 << 3),
145*1b481fc3SMaciej Żenczykowski 	RX_SUSPENDED		= (1 << 2),
146*1b481fc3SMaciej Żenczykowski 	TX_SUSPENDED		= (1 << 1),
147*1b481fc3SMaciej Żenczykowski 	RUNNING			= (1 << 0),
148*1b481fc3SMaciej Żenczykowski 
149*1b481fc3SMaciej Żenczykowski }STAT0_BITS;
150*1b481fc3SMaciej Żenczykowski 
151*1b481fc3SMaciej Żenczykowski #define PHY_SPEED_10		0x2
152*1b481fc3SMaciej Żenczykowski #define PHY_SPEED_100		0x3
153*1b481fc3SMaciej Żenczykowski 
154*1b481fc3SMaciej Żenczykowski 
amd8111e_dump_regs(struct ethtool_drvinfo * info __maybe_unused,struct ethtool_regs * regs)155*1b481fc3SMaciej Żenczykowski int amd8111e_dump_regs(struct ethtool_drvinfo *info __maybe_unused,
156*1b481fc3SMaciej Żenczykowski 		       struct ethtool_regs *regs)
157*1b481fc3SMaciej Żenczykowski {
158*1b481fc3SMaciej Żenczykowski 
159*1b481fc3SMaciej Żenczykowski 	u32 *reg_buff = (u32 *)regs->data;
160*1b481fc3SMaciej Żenczykowski 	u32 reg;
161*1b481fc3SMaciej Żenczykowski 
162*1b481fc3SMaciej Żenczykowski 	fprintf(stdout, "Descriptor Registers\n");
163*1b481fc3SMaciej Żenczykowski 	fprintf(stdout, "---------------------\n");
164*1b481fc3SMaciej Żenczykowski 
165*1b481fc3SMaciej Żenczykowski 	/* Transmit descriptor base address register */
166*1b481fc3SMaciej Żenczykowski 	reg = reg_buff[0];
167*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
168*1b481fc3SMaciej Żenczykowski 		"0x00100: Transmit descriptor base address register %08X\n",reg);
169*1b481fc3SMaciej Żenczykowski 
170*1b481fc3SMaciej Żenczykowski 	/* Transmit descriptor length register */
171*1b481fc3SMaciej Żenczykowski 	reg = reg_buff[1];
172*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
173*1b481fc3SMaciej Żenczykowski 		"0x00140: Transmit descriptor length register 0x%08X\n",reg);
174*1b481fc3SMaciej Żenczykowski 
175*1b481fc3SMaciej Żenczykowski 	/* Receive descriptor base address register */
176*1b481fc3SMaciej Żenczykowski 	reg = reg_buff[2];
177*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
178*1b481fc3SMaciej Żenczykowski 		"0x00120: Receive descriptor base address register %08X\n",reg);
179*1b481fc3SMaciej Żenczykowski 
180*1b481fc3SMaciej Żenczykowski 	/* Receive descriptor length register */
181*1b481fc3SMaciej Żenczykowski 	reg = reg_buff[3];
182*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
183*1b481fc3SMaciej Żenczykowski 		"0x00150: Receive descriptor length register 0x%08X\n",reg);
184*1b481fc3SMaciej Żenczykowski 
185*1b481fc3SMaciej Żenczykowski 	fprintf(stdout, "\n");
186*1b481fc3SMaciej Żenczykowski 
187*1b481fc3SMaciej Żenczykowski 
188*1b481fc3SMaciej Żenczykowski 	fprintf(stdout, "Command Registers\n");
189*1b481fc3SMaciej Żenczykowski 	fprintf(stdout, "-------------------\n");
190*1b481fc3SMaciej Żenczykowski 
191*1b481fc3SMaciej Żenczykowski 	/* Command 0 Register */
192*1b481fc3SMaciej Żenczykowski 	reg = reg_buff[4];
193*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
194*1b481fc3SMaciej Żenczykowski 		"0x00048: Command 0 register  0x%08X\n"
195*1b481fc3SMaciej Żenczykowski 		"	Interrupts:				%s\n"
196*1b481fc3SMaciej Żenczykowski 		"	Device:					%s\n",
197*1b481fc3SMaciej Żenczykowski 		reg,
198*1b481fc3SMaciej Żenczykowski 		reg & INTREN   		? "Enabled"     : "Disabled",
199*1b481fc3SMaciej Żenczykowski 		reg & RUN    		? "Running"     : "Stopped");
200*1b481fc3SMaciej Żenczykowski 
201*1b481fc3SMaciej Żenczykowski 	/* Command 2 Register */
202*1b481fc3SMaciej Żenczykowski 	reg = reg_buff[5];
203*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
204*1b481fc3SMaciej Żenczykowski 		"0x00050: Command 2 register  0x%08X\n"
205*1b481fc3SMaciej Żenczykowski 		"	Promiscuous mode:			%s\n"
206*1b481fc3SMaciej Żenczykowski 		"	Retransmit on underflow:		%s\n",
207*1b481fc3SMaciej Żenczykowski 		reg,
208*1b481fc3SMaciej Żenczykowski 		reg & PROM   		? "Enabled"     : "Disabled",
209*1b481fc3SMaciej Żenczykowski 		reg & REX_UFLO   	? "Enabled"     : "Disabled");
210*1b481fc3SMaciej Żenczykowski 	/* Command 3 Register */
211*1b481fc3SMaciej Żenczykowski 	reg = reg_buff[6];
212*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
213*1b481fc3SMaciej Żenczykowski 		"0x00054: Command 3 register  0x%08X\n"
214*1b481fc3SMaciej Żenczykowski 		"	Jumbo frame:				%s\n"
215*1b481fc3SMaciej Żenczykowski 		"	Admit only VLAN frame:	 		%s\n"
216*1b481fc3SMaciej Żenczykowski 		"	Delete VLAN tag:			%s\n",
217*1b481fc3SMaciej Żenczykowski 		reg,
218*1b481fc3SMaciej Żenczykowski 		reg & JUMBO  		? "Enabled"     : "Disabled",
219*1b481fc3SMaciej Żenczykowski 		reg &  VLONLY 		? "Yes"     : "No",
220*1b481fc3SMaciej Żenczykowski 		reg &  VL_TAG_DEL 		? "Yes"     : "No");
221*1b481fc3SMaciej Żenczykowski 
222*1b481fc3SMaciej Żenczykowski 	/* Command 7 Register */
223*1b481fc3SMaciej Żenczykowski 	reg = reg_buff[7];
224*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
225*1b481fc3SMaciej Żenczykowski 		"0x00064: Command 7 register  0x%08X\n",
226*1b481fc3SMaciej Żenczykowski 		 reg);
227*1b481fc3SMaciej Żenczykowski 
228*1b481fc3SMaciej Żenczykowski 	fprintf(stdout, "\n");
229*1b481fc3SMaciej Żenczykowski 	fprintf(stdout, "Interrupt Registers\n");
230*1b481fc3SMaciej Żenczykowski 	fprintf(stdout, "-------------------\n");
231*1b481fc3SMaciej Żenczykowski 
232*1b481fc3SMaciej Żenczykowski 	/* Interrupt 0 Register */
233*1b481fc3SMaciej Żenczykowski 	reg = reg_buff[8];
234*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
235*1b481fc3SMaciej Żenczykowski 		"0x00038: Interrupt register  0x%08X\n"
236*1b481fc3SMaciej Żenczykowski 		"	Any interrupt is set: 			%s\n"
237*1b481fc3SMaciej Żenczykowski 		"	Link change interrupt:	  		%s\n"
238*1b481fc3SMaciej Żenczykowski 		"	Register 0 auto-poll interrupt:		%s\n"
239*1b481fc3SMaciej Żenczykowski 		"	Transmit interrupt:			%s\n"
240*1b481fc3SMaciej Żenczykowski 		"	Software timer interrupt:		%s\n"
241*1b481fc3SMaciej Żenczykowski 		"	Receive interrupt:			%s\n",
242*1b481fc3SMaciej Żenczykowski 		 reg,
243*1b481fc3SMaciej Żenczykowski 		 reg &   INTR		? "Yes"     : "No",
244*1b481fc3SMaciej Żenczykowski 		 reg &   LCINT		? "Yes"     : "No",
245*1b481fc3SMaciej Żenczykowski 		 reg &   APINT0		? "Yes"     : "No",
246*1b481fc3SMaciej Żenczykowski 		 reg &   TINT0		? "Yes"     : "No",
247*1b481fc3SMaciej Żenczykowski 		 reg &   STINT		? "Yes"     : "No",
248*1b481fc3SMaciej Żenczykowski 		 reg &   RINT0		? "Yes"     : "No"
249*1b481fc3SMaciej Żenczykowski 		 );
250*1b481fc3SMaciej Żenczykowski 	/* Interrupt 0 enable Register */
251*1b481fc3SMaciej Żenczykowski 	reg = reg_buff[9];
252*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
253*1b481fc3SMaciej Żenczykowski 		"0x00040: Interrupt enable register  0x%08X\n"
254*1b481fc3SMaciej Żenczykowski 		"	Link change interrupt:	  		%s\n"
255*1b481fc3SMaciej Żenczykowski 		"	Register 0 auto-poll interrupt:		%s\n"
256*1b481fc3SMaciej Żenczykowski 		"	Transmit interrupt:			%s\n"
257*1b481fc3SMaciej Żenczykowski 		"	Software timer interrupt:		%s\n"
258*1b481fc3SMaciej Żenczykowski 		"	Receive interrupt:			%s\n",
259*1b481fc3SMaciej Żenczykowski 		 reg,
260*1b481fc3SMaciej Żenczykowski 		 reg &   LCINTEN		? "Enabled"     : "Disabled",
261*1b481fc3SMaciej Żenczykowski 		 reg &   APINT0EN		? "Enabled"     : "Disabled",
262*1b481fc3SMaciej Żenczykowski 		 reg &   TINTEN0		? "Enabled"     : "Disabled",
263*1b481fc3SMaciej Żenczykowski 		 reg &   STINTEN		? "Enabled"     : "Disabled",
264*1b481fc3SMaciej Żenczykowski 		 reg &   RINTEN0		? "Enabled"     : "Disabled"
265*1b481fc3SMaciej Żenczykowski 		);
266*1b481fc3SMaciej Żenczykowski 
267*1b481fc3SMaciej Żenczykowski 	fprintf(stdout, "\n");
268*1b481fc3SMaciej Żenczykowski 	fprintf(stdout, "Logical Address Filter Register\n");
269*1b481fc3SMaciej Żenczykowski 	fprintf(stdout, "-------------------\n");
270*1b481fc3SMaciej Żenczykowski 
271*1b481fc3SMaciej Żenczykowski 	/* Logical Address Filter Register */
272*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
273*1b481fc3SMaciej Żenczykowski 		"0x00168: Logical address filter register  0x%08X%08X\n",
274*1b481fc3SMaciej Żenczykowski 		 reg_buff[11],reg_buff[10]);
275*1b481fc3SMaciej Żenczykowski 
276*1b481fc3SMaciej Żenczykowski 	fprintf(stdout, "\n");
277*1b481fc3SMaciej Żenczykowski 	fprintf(stdout, "Link status Register\n");
278*1b481fc3SMaciej Żenczykowski 	fprintf(stdout, "-------------------\n");
279*1b481fc3SMaciej Żenczykowski 
280*1b481fc3SMaciej Żenczykowski 	/* Status 0  Register */
281*1b481fc3SMaciej Żenczykowski 	reg = reg_buff[12];
282*1b481fc3SMaciej Żenczykowski 	if(reg & LINK_STATS){
283*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
284*1b481fc3SMaciej Żenczykowski 		"0x00030: Link status register  0x%08X\n"
285*1b481fc3SMaciej Żenczykowski 		"	Link status:	  		%s\n"
286*1b481fc3SMaciej Żenczykowski 		"	Auto negotiation complete	%s\n"
287*1b481fc3SMaciej Żenczykowski 		"	Duplex				%s\n"
288*1b481fc3SMaciej Żenczykowski 		"	Speed				%s\n",
289*1b481fc3SMaciej Żenczykowski 		reg,
290*1b481fc3SMaciej Żenczykowski 		reg &  LINK_STATS 		? "Valid"     : "Invalid",
291*1b481fc3SMaciej Żenczykowski 		reg &  AUTONEG_COMPLETE		? "Yes"	      : "No",
292*1b481fc3SMaciej Żenczykowski 		reg &  FULL_DPLX 		? "Full"      : "Half",
293*1b481fc3SMaciej Żenczykowski 		((reg & SPEED_MASK) >> 7 == PHY_SPEED_10) ? "10Mbits/ Sec":
294*1b481fc3SMaciej Żenczykowski 							"100Mbits/Sec");
295*1b481fc3SMaciej Żenczykowski 
296*1b481fc3SMaciej Żenczykowski 	}
297*1b481fc3SMaciej Żenczykowski 	else{
298*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
299*1b481fc3SMaciej Żenczykowski 		"0x00030: Link status register  0x%08X\n"
300*1b481fc3SMaciej Żenczykowski 		"	Link status:	  		%s\n",
301*1b481fc3SMaciej Żenczykowski 		reg,
302*1b481fc3SMaciej Żenczykowski 		reg &  LINK_STATS 		? "Valid"     : "Invalid");
303*1b481fc3SMaciej Żenczykowski 	}
304*1b481fc3SMaciej Żenczykowski 	return 0;
305*1b481fc3SMaciej Żenczykowski 
306*1b481fc3SMaciej Żenczykowski }
307