xref: /aosp_15_r20/external/ethtool/de2104x.c (revision 1b481fc3bb1b45d4cf28d1ec12969dc1055f555d)
1*1b481fc3SMaciej Żenczykowski /* Copyright 2001 Sun Microsystems ([email protected]) */
2*1b481fc3SMaciej Żenczykowski #include <stdio.h>
3*1b481fc3SMaciej Żenczykowski #include "internal.h"
4*1b481fc3SMaciej Żenczykowski 
5*1b481fc3SMaciej Żenczykowski static const char * const csr0_tap[4] = {
6*1b481fc3SMaciej Żenczykowski 	"No transmit automatic polling",
7*1b481fc3SMaciej Żenczykowski 	"Transmit automatic polling every 200 seconds",
8*1b481fc3SMaciej Żenczykowski 	"Transmit automatic polling every 800 seconds",
9*1b481fc3SMaciej Żenczykowski 	"Transmit automatic polling every 1.6 milliseconds",
10*1b481fc3SMaciej Żenczykowski };
11*1b481fc3SMaciej Żenczykowski 
12*1b481fc3SMaciej Żenczykowski static const char * const csr0_cache_al[4] = {
13*1b481fc3SMaciej Żenczykowski 	"not used",
14*1b481fc3SMaciej Żenczykowski 	"8-longword boundary alignment",
15*1b481fc3SMaciej Żenczykowski 	"16-longword boundary alignment",
16*1b481fc3SMaciej Żenczykowski 	"32-longword boundary alignment",
17*1b481fc3SMaciej Żenczykowski };
18*1b481fc3SMaciej Żenczykowski 
19*1b481fc3SMaciej Żenczykowski static const char * const csr5_buserr[8] = {
20*1b481fc3SMaciej Żenczykowski 	"      Bus error: parity",
21*1b481fc3SMaciej Żenczykowski 	"      Bus error: master abort",
22*1b481fc3SMaciej Żenczykowski 	"      Bus error: target abort",
23*1b481fc3SMaciej Żenczykowski 	"      Bus error: (unknown code, reserved)",
24*1b481fc3SMaciej Żenczykowski 	"      Bus error: (unknown code, reserved)",
25*1b481fc3SMaciej Żenczykowski 	"      Bus error: (unknown code, reserved)",
26*1b481fc3SMaciej Żenczykowski 	"      Bus error: (unknown code, reserved)",
27*1b481fc3SMaciej Żenczykowski 	"      Bus error: (unknown code, reserved)",
28*1b481fc3SMaciej Żenczykowski };
29*1b481fc3SMaciej Żenczykowski 
30*1b481fc3SMaciej Żenczykowski static const int csr6_tx_thresh[4] = {
31*1b481fc3SMaciej Żenczykowski 	72,
32*1b481fc3SMaciej Żenczykowski 	96,
33*1b481fc3SMaciej Żenczykowski 	128,
34*1b481fc3SMaciej Żenczykowski 	160,
35*1b481fc3SMaciej Żenczykowski };
36*1b481fc3SMaciej Żenczykowski 
37*1b481fc3SMaciej Żenczykowski static const char * const csr6_om[4] = {
38*1b481fc3SMaciej Żenczykowski 	"normal",
39*1b481fc3SMaciej Żenczykowski 	"internal loopback",
40*1b481fc3SMaciej Żenczykowski 	"external loopback",
41*1b481fc3SMaciej Żenczykowski 	"unknown (not used)",
42*1b481fc3SMaciej Żenczykowski };
43*1b481fc3SMaciej Żenczykowski 
44*1b481fc3SMaciej Żenczykowski static const char * const csr5_tx_state[8] = {
45*1b481fc3SMaciej Żenczykowski 	"stopped",
46*1b481fc3SMaciej Żenczykowski 	"running: fetch desc",
47*1b481fc3SMaciej Żenczykowski 	"running: wait xmit end",
48*1b481fc3SMaciej Żenczykowski 	"running: read buf",
49*1b481fc3SMaciej Żenczykowski 	"unknown (reserved)",
50*1b481fc3SMaciej Żenczykowski 	"running: setup packet",
51*1b481fc3SMaciej Żenczykowski 	"suspended",
52*1b481fc3SMaciej Żenczykowski 	"running: close desc",
53*1b481fc3SMaciej Żenczykowski };
54*1b481fc3SMaciej Żenczykowski 
55*1b481fc3SMaciej Żenczykowski static const char * const csr5_rx_state[8] = {
56*1b481fc3SMaciej Żenczykowski 	"stopped",
57*1b481fc3SMaciej Żenczykowski 	"running: fetch desc",
58*1b481fc3SMaciej Żenczykowski 	"running: chk pkt end",
59*1b481fc3SMaciej Żenczykowski 	"running: wait for pkt",
60*1b481fc3SMaciej Żenczykowski 	"suspended",
61*1b481fc3SMaciej Żenczykowski 	"running: close",
62*1b481fc3SMaciej Żenczykowski 	"running: flush",
63*1b481fc3SMaciej Żenczykowski 	"running: queue",
64*1b481fc3SMaciej Żenczykowski };
65*1b481fc3SMaciej Żenczykowski 
66*1b481fc3SMaciej Żenczykowski static const char * const csr12_nway_state[8] = {
67*1b481fc3SMaciej Żenczykowski 	"Autonegotiation disable",
68*1b481fc3SMaciej Żenczykowski 	"Transmit disable",
69*1b481fc3SMaciej Żenczykowski 	"Ability detect",
70*1b481fc3SMaciej Żenczykowski 	"Acknowledge detect",
71*1b481fc3SMaciej Żenczykowski 	"Complete acknowledge",
72*1b481fc3SMaciej Żenczykowski 	"FLP link good, nway complete",
73*1b481fc3SMaciej Żenczykowski 	"Link check",
74*1b481fc3SMaciej Żenczykowski 	"unknown (reserved)",
75*1b481fc3SMaciej Żenczykowski };
76*1b481fc3SMaciej Żenczykowski 
77*1b481fc3SMaciej Żenczykowski static const char * const csr14_tp_comp[4] = {
78*1b481fc3SMaciej Żenczykowski 	"Compensation Disabled Mode",
79*1b481fc3SMaciej Żenczykowski 	"Compensation Disabled Mode",
80*1b481fc3SMaciej Żenczykowski 	"High Power Mode",
81*1b481fc3SMaciej Żenczykowski 	"Normal Compensation Mode",
82*1b481fc3SMaciej Żenczykowski };
83*1b481fc3SMaciej Żenczykowski 
84*1b481fc3SMaciej Żenczykowski static void
print_ring_addresses(u32 csr3,u32 csr4)85*1b481fc3SMaciej Żenczykowski print_ring_addresses(u32 csr3, u32 csr4)
86*1b481fc3SMaciej Żenczykowski {
87*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
88*1b481fc3SMaciej Żenczykowski 		"0x18: CSR3 (Rx Ring Base Address)        0x%08x\n"
89*1b481fc3SMaciej Żenczykowski 		"0x20: CSR4 (Tx Ring Base Address)        0x%08x\n"
90*1b481fc3SMaciej Żenczykowski 		,
91*1b481fc3SMaciej Żenczykowski 		csr3,
92*1b481fc3SMaciej Żenczykowski 		csr4);
93*1b481fc3SMaciej Żenczykowski }
94*1b481fc3SMaciej Żenczykowski 
95*1b481fc3SMaciej Żenczykowski static void
print_rx_missed(u32 csr8)96*1b481fc3SMaciej Żenczykowski print_rx_missed(u32 csr8)
97*1b481fc3SMaciej Żenczykowski {
98*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
99*1b481fc3SMaciej Żenczykowski 		"0x40: CSR8 (Missed Frames Counter)       0x%08x\n", csr8);
100*1b481fc3SMaciej Żenczykowski 	if (csr8 & (1 << 16))
101*1b481fc3SMaciej Żenczykowski 		fprintf(stdout,
102*1b481fc3SMaciej Żenczykowski 		"      Counter overflow\n");
103*1b481fc3SMaciej Żenczykowski 	else {
104*1b481fc3SMaciej Żenczykowski 		unsigned int rx_missed = csr8 & 0xffff;
105*1b481fc3SMaciej Żenczykowski 		if (!rx_missed)
106*1b481fc3SMaciej Żenczykowski 			fprintf(stdout,
107*1b481fc3SMaciej Żenczykowski 			"      No missed frames\n");
108*1b481fc3SMaciej Żenczykowski 		else
109*1b481fc3SMaciej Żenczykowski 			fprintf(stdout,
110*1b481fc3SMaciej Żenczykowski 			"      %u missed frames\n", rx_missed);
111*1b481fc3SMaciej Żenczykowski 	}
112*1b481fc3SMaciej Żenczykowski }
113*1b481fc3SMaciej Żenczykowski 
de21040_dump_regs(struct ethtool_drvinfo * info __maybe_unused,struct ethtool_regs * regs)114*1b481fc3SMaciej Żenczykowski static void de21040_dump_regs(struct ethtool_drvinfo *info __maybe_unused,
115*1b481fc3SMaciej Żenczykowski 			      struct ethtool_regs *regs)
116*1b481fc3SMaciej Żenczykowski {
117*1b481fc3SMaciej Żenczykowski 	u32 tmp, v, *data = (u32 *)regs->data;
118*1b481fc3SMaciej Żenczykowski 
119*1b481fc3SMaciej Żenczykowski 	fprintf(stdout, "21040 Registers\n");
120*1b481fc3SMaciej Żenczykowski 	fprintf(stdout, "---------------\n");
121*1b481fc3SMaciej Żenczykowski 
122*1b481fc3SMaciej Żenczykowski 	/*
123*1b481fc3SMaciej Żenczykowski 	 * CSR0
124*1b481fc3SMaciej Żenczykowski 	 */
125*1b481fc3SMaciej Żenczykowski 	v = data[0];
126*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
127*1b481fc3SMaciej Żenczykowski 		"0x00: CSR0 (Bus Mode)                    0x%08x\n"
128*1b481fc3SMaciej Żenczykowski 		"      %s\n"
129*1b481fc3SMaciej Żenczykowski 		"      %s address space\n"
130*1b481fc3SMaciej Żenczykowski 		"      Cache alignment: %s\n"
131*1b481fc3SMaciej Żenczykowski 		,
132*1b481fc3SMaciej Żenczykowski 		v,
133*1b481fc3SMaciej Żenczykowski 		csr0_tap[(v >> 17) & 3],
134*1b481fc3SMaciej Żenczykowski 		v & (1 << 16) ? "Diagnostic" : "Standard",
135*1b481fc3SMaciej Żenczykowski 		csr0_cache_al[(v >> 14) & 3]);
136*1b481fc3SMaciej Żenczykowski 	tmp = (v >> 8) & 0x3f;
137*1b481fc3SMaciej Żenczykowski 	if (tmp == 0)
138*1b481fc3SMaciej Żenczykowski 		fprintf(stdout, "      Programmable burst length unlimited\n");
139*1b481fc3SMaciej Żenczykowski 	else
140*1b481fc3SMaciej Żenczykowski 		fprintf(stdout,
141*1b481fc3SMaciej Żenczykowski 			"      Programmable burst length %d longwords\n",
142*1b481fc3SMaciej Żenczykowski 			tmp);
143*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
144*1b481fc3SMaciej Żenczykowski 		"      %s endian data buffers\n"
145*1b481fc3SMaciej Żenczykowski 		"      Descriptor skip length %d longwords\n"
146*1b481fc3SMaciej Żenczykowski 		"      %s bus arbitration scheme\n"
147*1b481fc3SMaciej Żenczykowski 		,
148*1b481fc3SMaciej Żenczykowski 		v & (1 << 7) ? "Big" : "Little",
149*1b481fc3SMaciej Żenczykowski 		(v >> 2) & 0x1f,
150*1b481fc3SMaciej Żenczykowski 		v & (1 << 1) ? "Round-robin" : "RX-has-priority");
151*1b481fc3SMaciej Żenczykowski 	if (v & (1 << 0))
152*1b481fc3SMaciej Żenczykowski 		fprintf(stdout, "      Software reset asserted\n");
153*1b481fc3SMaciej Żenczykowski 
154*1b481fc3SMaciej Żenczykowski 	/*
155*1b481fc3SMaciej Żenczykowski 	 * CSR3, 4
156*1b481fc3SMaciej Żenczykowski 	 */
157*1b481fc3SMaciej Żenczykowski 	print_ring_addresses(data[3], data[4]);
158*1b481fc3SMaciej Żenczykowski 
159*1b481fc3SMaciej Żenczykowski 	/*
160*1b481fc3SMaciej Żenczykowski 	 * CSR5
161*1b481fc3SMaciej Żenczykowski 	 */
162*1b481fc3SMaciej Żenczykowski 	v = data[5];
163*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
164*1b481fc3SMaciej Żenczykowski 		"0x28: CSR5 (Status)                      0x%08x\n"
165*1b481fc3SMaciej Żenczykowski 		"%s"
166*1b481fc3SMaciej Żenczykowski 		"      Transmit process %s\n"
167*1b481fc3SMaciej Żenczykowski 		"      Receive process %s\n"
168*1b481fc3SMaciej Żenczykowski 		"      Link %s\n"
169*1b481fc3SMaciej Żenczykowski 		,
170*1b481fc3SMaciej Żenczykowski 		v,
171*1b481fc3SMaciej Żenczykowski 		v & (1 << 13) ? csr5_buserr[(v >> 23) & 0x7] : "",
172*1b481fc3SMaciej Żenczykowski 		csr5_tx_state[(v >> 20) & 0x7],
173*1b481fc3SMaciej Żenczykowski 		csr5_rx_state[(v >> 17) & 0x7],
174*1b481fc3SMaciej Żenczykowski 		v & (1 << 12) ? "fail" : "OK");
175*1b481fc3SMaciej Żenczykowski 	if (v & (1 << 16))
176*1b481fc3SMaciej Żenczykowski 		fprintf(stdout,
177*1b481fc3SMaciej Żenczykowski 		"      Normal interrupts: %s%s%s\n"
178*1b481fc3SMaciej Żenczykowski 		,
179*1b481fc3SMaciej Żenczykowski 		v & (1 << 0) ? "TxOK " : "",
180*1b481fc3SMaciej Żenczykowski 		v & (1 << 2) ? "TxNoBufs " : "",
181*1b481fc3SMaciej Żenczykowski 		v & (1 << 6) ? "RxOK" : "");
182*1b481fc3SMaciej Żenczykowski 	if (v & (1 << 15))
183*1b481fc3SMaciej Żenczykowski 		fprintf(stdout,
184*1b481fc3SMaciej Żenczykowski 		"      Abnormal intr: %s%s%s%s%s%s%s%s\n"
185*1b481fc3SMaciej Żenczykowski 		,
186*1b481fc3SMaciej Żenczykowski 		v & (1 << 1) ? "TxStop " : "",
187*1b481fc3SMaciej Żenczykowski 		v & (1 << 3) ? "TxJabber " : "",
188*1b481fc3SMaciej Żenczykowski 		v & (1 << 5) ? "TxUnder " : "",
189*1b481fc3SMaciej Żenczykowski 		v & (1 << 7) ? "RxNoBufs " : "",
190*1b481fc3SMaciej Żenczykowski 		v & (1 << 8) ? "RxStopped " : "",
191*1b481fc3SMaciej Żenczykowski 		v & (1 << 9) ? "RxTimeout " : "",
192*1b481fc3SMaciej Żenczykowski 		v & (1 << 10) ? "AUI_TP " : "",
193*1b481fc3SMaciej Żenczykowski 		v & (1 << 11) ? "FD_Short " : "");
194*1b481fc3SMaciej Żenczykowski 
195*1b481fc3SMaciej Żenczykowski 	/*
196*1b481fc3SMaciej Żenczykowski 	 * CSR6
197*1b481fc3SMaciej Żenczykowski 	 */
198*1b481fc3SMaciej Żenczykowski 	v = data[6];
199*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
200*1b481fc3SMaciej Żenczykowski 		"0x30: CSR6 (Operating Mode)              0x%08x\n"
201*1b481fc3SMaciej Żenczykowski 		"%s"
202*1b481fc3SMaciej Żenczykowski 		"%s"
203*1b481fc3SMaciej Żenczykowski 		"      Transmit threshold %d bytes\n"
204*1b481fc3SMaciej Żenczykowski 		"      Transmit DMA %sabled\n"
205*1b481fc3SMaciej Żenczykowski 		"%s"
206*1b481fc3SMaciej Żenczykowski 		"      Operating mode: %s\n"
207*1b481fc3SMaciej Żenczykowski 		"      %s duplex\n"
208*1b481fc3SMaciej Żenczykowski 		"%s"
209*1b481fc3SMaciej Żenczykowski 		"%s"
210*1b481fc3SMaciej Żenczykowski 		"%s"
211*1b481fc3SMaciej Żenczykowski 		"%s"
212*1b481fc3SMaciej Żenczykowski 		"%s"
213*1b481fc3SMaciej Żenczykowski 		"%s"
214*1b481fc3SMaciej Żenczykowski 		"%s"
215*1b481fc3SMaciej Żenczykowski 		"      Receive DMA %sabled\n"
216*1b481fc3SMaciej Żenczykowski 		"      %s filtering mode\n"
217*1b481fc3SMaciej Żenczykowski 		,
218*1b481fc3SMaciej Żenczykowski 		v,
219*1b481fc3SMaciej Żenczykowski 		v & (1<<17) ? "      Capture effect enabled\n" : "",
220*1b481fc3SMaciej Żenczykowski 		v & (1<<16) ? "      Back pressure enabled\n" : "",
221*1b481fc3SMaciej Żenczykowski 		csr6_tx_thresh[(v >> 14) & 3],
222*1b481fc3SMaciej Żenczykowski 		v & (1<<13) ? "en" : "dis",
223*1b481fc3SMaciej Żenczykowski 		v & (1<<12) ? "      Forcing collisions\n" : "",
224*1b481fc3SMaciej Żenczykowski 		csr6_om[(v >> 10) & 3],
225*1b481fc3SMaciej Żenczykowski 		v & (1<<9) ? "Full" : "Half",
226*1b481fc3SMaciej Żenczykowski 		v & (1<<8) ? "      Flaky oscillator disable\n" : "",
227*1b481fc3SMaciej Żenczykowski 		v & (1<<7) ? "      Pass All Multicast\n" : "",
228*1b481fc3SMaciej Żenczykowski 		v & (1<<6) ? "      Promisc Mode\n" : "",
229*1b481fc3SMaciej Żenczykowski 		v & (1<<5) ? "      Start/Stop Backoff Counter\n" : "",
230*1b481fc3SMaciej Żenczykowski 		v & (1<<4) ? "      Inverse Filtering\n" : "",
231*1b481fc3SMaciej Żenczykowski 		v & (1<<3) ? "      Pass Bad Frames\n" : "",
232*1b481fc3SMaciej Żenczykowski 		v & (1<<2) ? "      Hash-only Filtering\n" : "",
233*1b481fc3SMaciej Żenczykowski 		v & (1<<1) ? "en" : "dis",
234*1b481fc3SMaciej Żenczykowski 		v & (1<<0) ? "Hash" : "Perfect");
235*1b481fc3SMaciej Żenczykowski 
236*1b481fc3SMaciej Żenczykowski 	/*
237*1b481fc3SMaciej Żenczykowski 	 * CSR7
238*1b481fc3SMaciej Żenczykowski 	 */
239*1b481fc3SMaciej Żenczykowski 	v = data[7];
240*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
241*1b481fc3SMaciej Żenczykowski 		"0x38: CSR7 (Interrupt Mask)              0x%08x\n"
242*1b481fc3SMaciej Żenczykowski 		"%s"
243*1b481fc3SMaciej Żenczykowski 		"%s"
244*1b481fc3SMaciej Żenczykowski 		"%s"
245*1b481fc3SMaciej Żenczykowski 		"%s"
246*1b481fc3SMaciej Żenczykowski 		"%s"
247*1b481fc3SMaciej Żenczykowski 		"%s"
248*1b481fc3SMaciej Żenczykowski 		"%s"
249*1b481fc3SMaciej Żenczykowski 		"%s"
250*1b481fc3SMaciej Żenczykowski 		"%s"
251*1b481fc3SMaciej Żenczykowski 		"%s"
252*1b481fc3SMaciej Żenczykowski 		"%s"
253*1b481fc3SMaciej Żenczykowski 		"%s"
254*1b481fc3SMaciej Żenczykowski 		"%s"
255*1b481fc3SMaciej Żenczykowski 		"%s"
256*1b481fc3SMaciej Żenczykowski 		"%s"
257*1b481fc3SMaciej Żenczykowski 		,
258*1b481fc3SMaciej Żenczykowski 		v,
259*1b481fc3SMaciej Żenczykowski 		v & (1<<16) ? "      Normal interrupt summary\n" : "",
260*1b481fc3SMaciej Żenczykowski 		v & (1<<15) ? "      Abnormal interrupt summary\n" : "",
261*1b481fc3SMaciej Żenczykowski 		v & (1<<13) ? "      System error\n" : "",
262*1b481fc3SMaciej Żenczykowski 		v & (1<<12) ? "      Link fail\n" : "",
263*1b481fc3SMaciej Żenczykowski 		v & (1<<11) ? "      Full duplex\n" : "",
264*1b481fc3SMaciej Żenczykowski 		v & (1<<10) ? "      AUI_TP pin\n" : "",
265*1b481fc3SMaciej Żenczykowski 		v & (1<<9) ? "      Receive watchdog timeout\n" : "",
266*1b481fc3SMaciej Żenczykowski 		v & (1<<8) ? "      Receive stopped\n" : "",
267*1b481fc3SMaciej Żenczykowski 		v & (1<<7) ? "      Receive buffer unavailable\n" : "",
268*1b481fc3SMaciej Żenczykowski 		v & (1<<6) ? "      Receive interrupt\n" : "",
269*1b481fc3SMaciej Żenczykowski 		v & (1<<5) ? "      Transmit underflow\n" : "",
270*1b481fc3SMaciej Żenczykowski 		v & (1<<3) ? "      Transmit jabber timeout\n" : "",
271*1b481fc3SMaciej Żenczykowski 		v & (1<<2) ? "      Transmit buffer unavailable\n" : "",
272*1b481fc3SMaciej Żenczykowski 		v & (1<<1) ? "      Transmit stopped\n" : "",
273*1b481fc3SMaciej Żenczykowski 		v & (1<<0) ? "      Transmit interrupt\n" : "");
274*1b481fc3SMaciej Żenczykowski 
275*1b481fc3SMaciej Żenczykowski 	/*
276*1b481fc3SMaciej Żenczykowski 	 * CSR8
277*1b481fc3SMaciej Żenczykowski 	 */
278*1b481fc3SMaciej Żenczykowski 	print_rx_missed(data[8]);
279*1b481fc3SMaciej Żenczykowski 
280*1b481fc3SMaciej Żenczykowski 	/*
281*1b481fc3SMaciej Żenczykowski 	 * CSR9
282*1b481fc3SMaciej Żenczykowski 	 */
283*1b481fc3SMaciej Żenczykowski 	v = data[9];
284*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
285*1b481fc3SMaciej Żenczykowski 		"0x48: CSR9 (Ethernet Address ROM)        0x%08x\n", v);
286*1b481fc3SMaciej Żenczykowski 
287*1b481fc3SMaciej Żenczykowski 	/*
288*1b481fc3SMaciej Żenczykowski 	 * CSR11
289*1b481fc3SMaciej Żenczykowski 	 */
290*1b481fc3SMaciej Żenczykowski 	v = data[11];
291*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
292*1b481fc3SMaciej Żenczykowski 		"0x58: CSR11 (Full Duplex Autoconfig)     0x%08x\n", v);
293*1b481fc3SMaciej Żenczykowski 
294*1b481fc3SMaciej Żenczykowski 	/*
295*1b481fc3SMaciej Żenczykowski 	 * CSR12
296*1b481fc3SMaciej Żenczykowski 	 */
297*1b481fc3SMaciej Żenczykowski 	v = data[12];
298*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
299*1b481fc3SMaciej Żenczykowski 		"0x60: CSR12 (SIA Status)                 0x%08x\n"
300*1b481fc3SMaciej Żenczykowski 		"%s"
301*1b481fc3SMaciej Żenczykowski 		"%s"
302*1b481fc3SMaciej Żenczykowski 		"%s"
303*1b481fc3SMaciej Żenczykowski 		"%s"
304*1b481fc3SMaciej Żenczykowski 		"%s"
305*1b481fc3SMaciej Żenczykowski 		"%s"
306*1b481fc3SMaciej Żenczykowski 		"%s"
307*1b481fc3SMaciej Żenczykowski 		"      AUI_TP pin: %s\n"
308*1b481fc3SMaciej Żenczykowski 		,
309*1b481fc3SMaciej Żenczykowski 		v,
310*1b481fc3SMaciej Żenczykowski 		v & (1<<7) ? "      PLL sampler high\n" : "",
311*1b481fc3SMaciej Żenczykowski 		v & (1<<6) ? "      PLL sampler low\n" : "",
312*1b481fc3SMaciej Żenczykowski 		v & (1<<5) ? "      PLL self-test pass\n" : "",
313*1b481fc3SMaciej Żenczykowski 		v & (1<<4) ? "      PLL self-test done\n" : "",
314*1b481fc3SMaciej Żenczykowski 		v & (1<<3) ? "      Autopolarity state\n" : "",
315*1b481fc3SMaciej Żenczykowski 		v & (1<<2) ? "      Link fail\n" : "",
316*1b481fc3SMaciej Żenczykowski 		v & (1<<1) ? "      Network connection error\n" : "",
317*1b481fc3SMaciej Żenczykowski 		v & (1<<0) ? "AUI" : "TP");
318*1b481fc3SMaciej Żenczykowski 
319*1b481fc3SMaciej Żenczykowski 	/*
320*1b481fc3SMaciej Żenczykowski 	 * CSR13
321*1b481fc3SMaciej Żenczykowski 	 */
322*1b481fc3SMaciej Żenczykowski 	v = data[13];
323*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
324*1b481fc3SMaciej Żenczykowski 		"0x68: CSR13 (SIA Connectivity)           0x%08x\n"
325*1b481fc3SMaciej Żenczykowski 		"%s"
326*1b481fc3SMaciej Żenczykowski 		"%s"
327*1b481fc3SMaciej Żenczykowski 		"%s"
328*1b481fc3SMaciej Żenczykowski 		"%s"
329*1b481fc3SMaciej Żenczykowski 		"      External port output multiplexer select: %u%u%u%u\n"
330*1b481fc3SMaciej Żenczykowski 		"%s"
331*1b481fc3SMaciej Żenczykowski 		"%s"
332*1b481fc3SMaciej Żenczykowski 		"%s"
333*1b481fc3SMaciej Żenczykowski 		"%s"
334*1b481fc3SMaciej Żenczykowski 		"      %s interface selected\n"
335*1b481fc3SMaciej Żenczykowski 		"%s"
336*1b481fc3SMaciej Żenczykowski 		"%s"
337*1b481fc3SMaciej Żenczykowski 		"%s"
338*1b481fc3SMaciej Żenczykowski 		,
339*1b481fc3SMaciej Żenczykowski 		v,
340*1b481fc3SMaciej Żenczykowski 		v & (1<<15) ? "      Enable pins 5, 6, 7\n" : "",
341*1b481fc3SMaciej Żenczykowski 		v & (1<<14) ? "      Enable pins 2, 4\n" : "",
342*1b481fc3SMaciej Żenczykowski 		v & (1<<13) ? "      Enable pins 1, 3\n" : "",
343*1b481fc3SMaciej Żenczykowski 		v & (1<<12) ? "      Input enable\n" : "",
344*1b481fc3SMaciej Żenczykowski 		v & (1<<11) ? 1 : 0,
345*1b481fc3SMaciej Żenczykowski 		v & (1<<10) ? 1 : 0,
346*1b481fc3SMaciej Żenczykowski 		v & (1<<9) ? 1 : 0,
347*1b481fc3SMaciej Żenczykowski 		v & (1<<8) ? 1 : 0,
348*1b481fc3SMaciej Żenczykowski 		v & (1<<7) ? "      APLL start\n" : "",
349*1b481fc3SMaciej Żenczykowski 		v & (1<<6) ? "      Serial interface input multiplexer\n" : "",
350*1b481fc3SMaciej Żenczykowski 		v & (1<<5) ? "      Encoder input multiplexer\n" : "",
351*1b481fc3SMaciej Żenczykowski 		v & (1<<4) ? "      SIA PLL external input enable\n" : "",
352*1b481fc3SMaciej Żenczykowski 		v & (1<<3) ? "AUI" : "10base-T",
353*1b481fc3SMaciej Żenczykowski 		v & (1<<2) ? "      CSR autoconfiguration\n" : "",
354*1b481fc3SMaciej Żenczykowski 		v & (1<<1) ? "      AUI_TP pin autoconfiguration\n" : "",
355*1b481fc3SMaciej Żenczykowski 		v & (1<<0) ? "      SIA reset\n" : "");
356*1b481fc3SMaciej Żenczykowski 
357*1b481fc3SMaciej Żenczykowski 	/*
358*1b481fc3SMaciej Żenczykowski 	 * CSR14
359*1b481fc3SMaciej Żenczykowski 	 */
360*1b481fc3SMaciej Żenczykowski 	v = data[14];
361*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
362*1b481fc3SMaciej Żenczykowski 		"0x70: CSR14 (SIA Transmit and Receive)   0x%08x\n"
363*1b481fc3SMaciej Żenczykowski 		"%s"
364*1b481fc3SMaciej Żenczykowski 		"%s"
365*1b481fc3SMaciej Żenczykowski 		"%s"
366*1b481fc3SMaciej Żenczykowski 		"%s"
367*1b481fc3SMaciej Żenczykowski 		"%s"
368*1b481fc3SMaciej Żenczykowski 		"%s"
369*1b481fc3SMaciej Żenczykowski 		"%s"
370*1b481fc3SMaciej Żenczykowski 		"      %s\n"
371*1b481fc3SMaciej Żenczykowski 		"%s"
372*1b481fc3SMaciej Żenczykowski 		"%s"
373*1b481fc3SMaciej Żenczykowski 		"%s"
374*1b481fc3SMaciej Żenczykowski 		"%s"
375*1b481fc3SMaciej Żenczykowski 		,
376*1b481fc3SMaciej Żenczykowski 		v,
377*1b481fc3SMaciej Żenczykowski 		v & (1<<14) ? "      Set polarity plus\n" : "",
378*1b481fc3SMaciej Żenczykowski 		v & (1<<13) ? "      Autopolarity enable\n" : "",
379*1b481fc3SMaciej Żenczykowski 		v & (1<<12) ? "      Link test enable\n" : "",
380*1b481fc3SMaciej Żenczykowski 		v & (1<<11) ? "      Heartbeat enable\n" : "",
381*1b481fc3SMaciej Żenczykowski 		v & (1<<10) ? "      Collision detect enable\n" : "",
382*1b481fc3SMaciej Żenczykowski 		v & (1<<9) ? "      Collision squelch enable\n" : "",
383*1b481fc3SMaciej Żenczykowski 		v & (1<<8) ? "      Receive squelch enable\n" : "",
384*1b481fc3SMaciej Żenczykowski 		csr14_tp_comp[(v >> 4) & 0x3],
385*1b481fc3SMaciej Żenczykowski 		v & (1<<3) ? "      Link pulse send enable\n" : "",
386*1b481fc3SMaciej Żenczykowski 		v & (1<<2) ? "      Driver enable\n" : "",
387*1b481fc3SMaciej Żenczykowski 		v & (1<<1) ? "      Loopback enable\n" : "",
388*1b481fc3SMaciej Żenczykowski 		v & (1<<0) ? "      Encoder enable\n" : "");
389*1b481fc3SMaciej Żenczykowski 
390*1b481fc3SMaciej Żenczykowski 	/*
391*1b481fc3SMaciej Żenczykowski 	 * CSR15
392*1b481fc3SMaciej Żenczykowski 	 */
393*1b481fc3SMaciej Żenczykowski 	v = data[15];
394*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
395*1b481fc3SMaciej Żenczykowski 		"0x78: CSR15 (SIA General)                0x%08x\n"
396*1b481fc3SMaciej Żenczykowski 		"%s"
397*1b481fc3SMaciej Żenczykowski 		"%s"
398*1b481fc3SMaciej Żenczykowski 		"%s"
399*1b481fc3SMaciej Żenczykowski 		"%s"
400*1b481fc3SMaciej Żenczykowski 		"%s"
401*1b481fc3SMaciej Żenczykowski 		"%s"
402*1b481fc3SMaciej Żenczykowski 		"%s"
403*1b481fc3SMaciej Żenczykowski 		"%s"
404*1b481fc3SMaciej Żenczykowski 		"%s"
405*1b481fc3SMaciej Żenczykowski 		"%s"
406*1b481fc3SMaciej Żenczykowski 		,
407*1b481fc3SMaciej Żenczykowski 		v,
408*1b481fc3SMaciej Żenczykowski 		v & (1<<13) ? "      Force receiver low\n" : "",
409*1b481fc3SMaciej Żenczykowski 		v & (1<<12) ? "      PLL self-test start\n" : "",
410*1b481fc3SMaciej Żenczykowski 		v & (1<<11) ? "      Force link fail\n" : "",
411*1b481fc3SMaciej Żenczykowski 		v & (1<<9) ? "      Force unsquelch\n" : "",
412*1b481fc3SMaciej Żenczykowski 		v & (1<<8) ? "      Test clock\n" : "",
413*1b481fc3SMaciej Żenczykowski 		v & (1<<5) ? "      Receive watchdog release\n" : "",
414*1b481fc3SMaciej Żenczykowski 		v & (1<<4) ? "      Receive watchdog disable\n" : "",
415*1b481fc3SMaciej Żenczykowski 		v & (1<<2) ? "      Jabber clock\n" : "",
416*1b481fc3SMaciej Żenczykowski 		v & (1<<1) ? "      Host unjab\n" : "",
417*1b481fc3SMaciej Żenczykowski 		v & (1<<0) ? "      Jabber disable\n" : "");
418*1b481fc3SMaciej Żenczykowski }
419*1b481fc3SMaciej Żenczykowski 
de21041_dump_regs(struct ethtool_drvinfo * info __maybe_unused,struct ethtool_regs * regs)420*1b481fc3SMaciej Żenczykowski static void de21041_dump_regs(struct ethtool_drvinfo *info __maybe_unused,
421*1b481fc3SMaciej Żenczykowski 			      struct ethtool_regs *regs)
422*1b481fc3SMaciej Żenczykowski {
423*1b481fc3SMaciej Żenczykowski 	u32 tmp, v, *data = (u32 *)regs->data;
424*1b481fc3SMaciej Żenczykowski 
425*1b481fc3SMaciej Żenczykowski 	fprintf(stdout, "21041 Registers\n");
426*1b481fc3SMaciej Żenczykowski 	fprintf(stdout, "---------------\n");
427*1b481fc3SMaciej Żenczykowski 
428*1b481fc3SMaciej Żenczykowski 	/*
429*1b481fc3SMaciej Żenczykowski 	 * CSR0
430*1b481fc3SMaciej Żenczykowski 	 */
431*1b481fc3SMaciej Żenczykowski 	v = data[0];
432*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
433*1b481fc3SMaciej Żenczykowski 		"0x00: CSR0 (Bus Mode)                    0x%08x\n"
434*1b481fc3SMaciej Żenczykowski 		"      %s endian descriptors\n"
435*1b481fc3SMaciej Żenczykowski 		"      %s\n"
436*1b481fc3SMaciej Żenczykowski 		"      %s address space\n"
437*1b481fc3SMaciej Żenczykowski 		"      Cache alignment: %s\n"
438*1b481fc3SMaciej Żenczykowski 		,
439*1b481fc3SMaciej Żenczykowski 		v,
440*1b481fc3SMaciej Żenczykowski 		v & (1 << 20) ? "Big" : "Little",
441*1b481fc3SMaciej Żenczykowski 		csr0_tap[(v >> 17) & 3],
442*1b481fc3SMaciej Żenczykowski 		v & (1 << 16) ? "Diagnostic" : "Standard",
443*1b481fc3SMaciej Żenczykowski 		csr0_cache_al[(v >> 14) & 3]);
444*1b481fc3SMaciej Żenczykowski 	tmp = (v >> 8) & 0x3f;
445*1b481fc3SMaciej Żenczykowski 	if (tmp == 0)
446*1b481fc3SMaciej Żenczykowski 		fprintf(stdout, "      Programmable burst length unlimited\n");
447*1b481fc3SMaciej Żenczykowski 	else
448*1b481fc3SMaciej Żenczykowski 		fprintf(stdout,
449*1b481fc3SMaciej Żenczykowski 			"      Programmable burst length %d longwords\n",
450*1b481fc3SMaciej Żenczykowski 			tmp);
451*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
452*1b481fc3SMaciej Żenczykowski 		"      %s endian data buffers\n"
453*1b481fc3SMaciej Żenczykowski 		"      Descriptor skip length %d longwords\n"
454*1b481fc3SMaciej Żenczykowski 		"      %s bus arbitration scheme\n"
455*1b481fc3SMaciej Żenczykowski 		,
456*1b481fc3SMaciej Żenczykowski 		v & (1 << 7) ? "Big" : "Little",
457*1b481fc3SMaciej Żenczykowski 		(v >> 2) & 0x1f,
458*1b481fc3SMaciej Żenczykowski 		v & (1 << 1) ? "Round-robin" : "RX-has-priority");
459*1b481fc3SMaciej Żenczykowski 	if (v & (1 << 0))
460*1b481fc3SMaciej Żenczykowski 		fprintf(stdout, "      Software reset asserted\n");
461*1b481fc3SMaciej Żenczykowski 
462*1b481fc3SMaciej Żenczykowski 	/*
463*1b481fc3SMaciej Żenczykowski 	 * CSR3, 4
464*1b481fc3SMaciej Żenczykowski 	 */
465*1b481fc3SMaciej Żenczykowski 	print_ring_addresses(data[3], data[4]);
466*1b481fc3SMaciej Żenczykowski 
467*1b481fc3SMaciej Żenczykowski 	/*
468*1b481fc3SMaciej Żenczykowski 	 * CSR5
469*1b481fc3SMaciej Żenczykowski 	 */
470*1b481fc3SMaciej Żenczykowski 	v = data[5];
471*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
472*1b481fc3SMaciej Żenczykowski 		"0x28: CSR5 (Status)                      0x%08x\n"
473*1b481fc3SMaciej Żenczykowski 		"%s"
474*1b481fc3SMaciej Żenczykowski 		"      Transmit process %s\n"
475*1b481fc3SMaciej Żenczykowski 		"      Receive process %s\n"
476*1b481fc3SMaciej Żenczykowski 		"      Link %s\n"
477*1b481fc3SMaciej Żenczykowski 		,
478*1b481fc3SMaciej Żenczykowski 		v,
479*1b481fc3SMaciej Żenczykowski 		v & (1 << 13) ? csr5_buserr[(v >> 23) & 0x7] : "",
480*1b481fc3SMaciej Żenczykowski 		csr5_tx_state[(v >> 20) & 0x7],
481*1b481fc3SMaciej Żenczykowski 		csr5_rx_state[(v >> 17) & 0x7],
482*1b481fc3SMaciej Żenczykowski 		v & (1 << 12) ? "fail" : "OK");
483*1b481fc3SMaciej Żenczykowski 	if (v & (1 << 16))
484*1b481fc3SMaciej Żenczykowski 		fprintf(stdout,
485*1b481fc3SMaciej Żenczykowski 		"      Normal interrupts: %s%s%s%s%s\n"
486*1b481fc3SMaciej Żenczykowski 		,
487*1b481fc3SMaciej Żenczykowski 		v & (1 << 0) ? "TxOK " : "",
488*1b481fc3SMaciej Żenczykowski 		v & (1 << 2) ? "TxNoBufs " : "",
489*1b481fc3SMaciej Żenczykowski 		v & (1 << 6) ? "RxOK" : "",
490*1b481fc3SMaciej Żenczykowski 		v & (1 << 11) ? "TimerExp " : "",
491*1b481fc3SMaciej Żenczykowski 		v & (1 << 14) ? "EarlyRx " : "");
492*1b481fc3SMaciej Żenczykowski 	if (v & (1 << 15))
493*1b481fc3SMaciej Żenczykowski 		fprintf(stdout,
494*1b481fc3SMaciej Żenczykowski 		"      Abnormal intr: %s%s%s%s%s%s%s\n"
495*1b481fc3SMaciej Żenczykowski 		,
496*1b481fc3SMaciej Żenczykowski 		v & (1 << 1) ? "TxStop " : "",
497*1b481fc3SMaciej Żenczykowski 		v & (1 << 3) ? "TxJabber " : "",
498*1b481fc3SMaciej Żenczykowski 		v & (1 << 4) ? "ANC " : "",
499*1b481fc3SMaciej Żenczykowski 		v & (1 << 5) ? "TxUnder " : "",
500*1b481fc3SMaciej Żenczykowski 		v & (1 << 7) ? "RxNoBufs " : "",
501*1b481fc3SMaciej Żenczykowski 		v & (1 << 8) ? "RxStopped " : "",
502*1b481fc3SMaciej Żenczykowski 		v & (1 << 9) ? "RxTimeout " : "");
503*1b481fc3SMaciej Żenczykowski 
504*1b481fc3SMaciej Żenczykowski 	/*
505*1b481fc3SMaciej Żenczykowski 	 * CSR6
506*1b481fc3SMaciej Żenczykowski 	 */
507*1b481fc3SMaciej Żenczykowski 	v = data[6];
508*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
509*1b481fc3SMaciej Żenczykowski 		"0x30: CSR6 (Operating Mode)              0x%08x\n"
510*1b481fc3SMaciej Żenczykowski 		"%s"
511*1b481fc3SMaciej Żenczykowski 		"%s"
512*1b481fc3SMaciej Żenczykowski 		"      Transmit threshold %d bytes\n"
513*1b481fc3SMaciej Żenczykowski 		"      Transmit DMA %sabled\n"
514*1b481fc3SMaciej Żenczykowski 		"%s"
515*1b481fc3SMaciej Żenczykowski 		"      Operating mode: %s\n"
516*1b481fc3SMaciej Żenczykowski 		"      %s duplex\n"
517*1b481fc3SMaciej Żenczykowski 		"%s"
518*1b481fc3SMaciej Żenczykowski 		"%s"
519*1b481fc3SMaciej Żenczykowski 		"%s"
520*1b481fc3SMaciej Żenczykowski 		"%s"
521*1b481fc3SMaciej Żenczykowski 		"%s"
522*1b481fc3SMaciej Żenczykowski 		"%s"
523*1b481fc3SMaciej Żenczykowski 		"%s"
524*1b481fc3SMaciej Żenczykowski 		"      Receive DMA %sabled\n"
525*1b481fc3SMaciej Żenczykowski 		"      %s filtering mode\n"
526*1b481fc3SMaciej Żenczykowski 		,
527*1b481fc3SMaciej Żenczykowski 		v,
528*1b481fc3SMaciej Żenczykowski 		v & (1<<31) ? "      Special capture effect enabled\n" : "",
529*1b481fc3SMaciej Żenczykowski 		v & (1<<17) ? "      Capture effect enabled\n" : "",
530*1b481fc3SMaciej Żenczykowski 		csr6_tx_thresh[(v >> 14) & 3],
531*1b481fc3SMaciej Żenczykowski 		v & (1<<13) ? "en" : "dis",
532*1b481fc3SMaciej Żenczykowski 		v & (1<<12) ? "      Forcing collisions\n" : "",
533*1b481fc3SMaciej Żenczykowski 		csr6_om[(v >> 10) & 3],
534*1b481fc3SMaciej Żenczykowski 		v & (1<<9) ? "Full" : "Half",
535*1b481fc3SMaciej Żenczykowski 		v & (1<<8) ? "      Flaky oscillator disable\n" : "",
536*1b481fc3SMaciej Żenczykowski 		v & (1<<7) ? "      Pass All Multicast\n" : "",
537*1b481fc3SMaciej Żenczykowski 		v & (1<<6) ? "      Promisc Mode\n" : "",
538*1b481fc3SMaciej Żenczykowski 		v & (1<<5) ? "      Start/Stop Backoff Counter\n" : "",
539*1b481fc3SMaciej Żenczykowski 		v & (1<<4) ? "      Inverse Filtering\n" : "",
540*1b481fc3SMaciej Żenczykowski 		v & (1<<3) ? "      Pass Bad Frames\n" : "",
541*1b481fc3SMaciej Żenczykowski 		v & (1<<2) ? "      Hash-only Filtering\n" : "",
542*1b481fc3SMaciej Żenczykowski 		v & (1<<1) ? "en" : "dis",
543*1b481fc3SMaciej Żenczykowski 		v & (1<<0) ? "Hash" : "Perfect");
544*1b481fc3SMaciej Żenczykowski 
545*1b481fc3SMaciej Żenczykowski 	/*
546*1b481fc3SMaciej Żenczykowski 	 * CSR7
547*1b481fc3SMaciej Żenczykowski 	 */
548*1b481fc3SMaciej Żenczykowski 	v = data[7];
549*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
550*1b481fc3SMaciej Żenczykowski 		"0x38: CSR7 (Interrupt Mask)              0x%08x\n"
551*1b481fc3SMaciej Żenczykowski 		"%s"
552*1b481fc3SMaciej Żenczykowski 		"%s"
553*1b481fc3SMaciej Żenczykowski 		"%s"
554*1b481fc3SMaciej Żenczykowski 		"%s"
555*1b481fc3SMaciej Żenczykowski 		"%s"
556*1b481fc3SMaciej Żenczykowski 		"%s"
557*1b481fc3SMaciej Żenczykowski 		"%s"
558*1b481fc3SMaciej Żenczykowski 		"%s"
559*1b481fc3SMaciej Żenczykowski 		"%s"
560*1b481fc3SMaciej Żenczykowski 		"%s"
561*1b481fc3SMaciej Żenczykowski 		"%s"
562*1b481fc3SMaciej Żenczykowski 		"%s"
563*1b481fc3SMaciej Żenczykowski 		"%s"
564*1b481fc3SMaciej Żenczykowski 		"%s"
565*1b481fc3SMaciej Żenczykowski 		"%s"
566*1b481fc3SMaciej Żenczykowski 		"%s"
567*1b481fc3SMaciej Żenczykowski 		,
568*1b481fc3SMaciej Żenczykowski 		v,
569*1b481fc3SMaciej Żenczykowski 		v & (1<<16) ? "      Normal interrupt summary\n" : "",
570*1b481fc3SMaciej Żenczykowski 		v & (1<<15) ? "      Abnormal interrupt summary\n" : "",
571*1b481fc3SMaciej Żenczykowski 		v & (1<<14) ? "      Early receive interrupt\n" : "",
572*1b481fc3SMaciej Żenczykowski 		v & (1<<13) ? "      System error\n" : "",
573*1b481fc3SMaciej Żenczykowski 		v & (1<<12) ? "      Link fail\n" : "",
574*1b481fc3SMaciej Żenczykowski 		v & (1<<11) ? "      Timer expired\n" : "",
575*1b481fc3SMaciej Żenczykowski 		v & (1<<9) ? "      Receive watchdog timeout\n" : "",
576*1b481fc3SMaciej Żenczykowski 		v & (1<<8) ? "      Receive stopped\n" : "",
577*1b481fc3SMaciej Żenczykowski 		v & (1<<7) ? "      Receive buffer unavailable\n" : "",
578*1b481fc3SMaciej Żenczykowski 		v & (1<<6) ? "      Receive interrupt\n" : "",
579*1b481fc3SMaciej Żenczykowski 		v & (1<<5) ? "      Transmit underflow\n" : "",
580*1b481fc3SMaciej Żenczykowski 		v & (1<<4) ? "      Link pass\n" : "",
581*1b481fc3SMaciej Żenczykowski 		v & (1<<3) ? "      Transmit jabber timeout\n" : "",
582*1b481fc3SMaciej Żenczykowski 		v & (1<<2) ? "      Transmit buffer unavailable\n" : "",
583*1b481fc3SMaciej Żenczykowski 		v & (1<<1) ? "      Transmit stopped\n" : "",
584*1b481fc3SMaciej Żenczykowski 		v & (1<<0) ? "      Transmit interrupt\n" : "");
585*1b481fc3SMaciej Żenczykowski 
586*1b481fc3SMaciej Żenczykowski 	/*
587*1b481fc3SMaciej Żenczykowski 	 * CSR8
588*1b481fc3SMaciej Żenczykowski 	 */
589*1b481fc3SMaciej Żenczykowski 	print_rx_missed(data[8]);
590*1b481fc3SMaciej Żenczykowski 
591*1b481fc3SMaciej Żenczykowski 	/*
592*1b481fc3SMaciej Żenczykowski 	 * CSR9
593*1b481fc3SMaciej Żenczykowski 	 */
594*1b481fc3SMaciej Żenczykowski 	v = data[9];
595*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
596*1b481fc3SMaciej Żenczykowski 		"0x48: CSR9 (Boot and Ethernet ROMs)      0x%08x\n"
597*1b481fc3SMaciej Żenczykowski 		"      Select bits: %s%s%s%s%s%s\n"
598*1b481fc3SMaciej Żenczykowski 		"      Data: %d%d%d%d%d%d%d%d\n"
599*1b481fc3SMaciej Żenczykowski 		,
600*1b481fc3SMaciej Żenczykowski 		v,
601*1b481fc3SMaciej Żenczykowski 		v & (1<<15) ? "Mode " : "",
602*1b481fc3SMaciej Żenczykowski 		v & (1<<14) ? "Read " : "",
603*1b481fc3SMaciej Żenczykowski 		v & (1<<13) ? "Write " : "",
604*1b481fc3SMaciej Żenczykowski 		v & (1<<12) ? "BootROM " : "",
605*1b481fc3SMaciej Żenczykowski 		v & (1<<11) ? "SROM " : "",
606*1b481fc3SMaciej Żenczykowski 		v & (1<<10) ? "ExtReg " : "",
607*1b481fc3SMaciej Żenczykowski 		v & (1<<7) ? 1 : 0,
608*1b481fc3SMaciej Żenczykowski 		v & (1<<6) ? 1 : 0,
609*1b481fc3SMaciej Żenczykowski 		v & (1<<5) ? 1 : 0,
610*1b481fc3SMaciej Żenczykowski 		v & (1<<4) ? 1 : 0,
611*1b481fc3SMaciej Żenczykowski 		v & (1<<3) ? 1 : 0,
612*1b481fc3SMaciej Żenczykowski 		v & (1<<2) ? 1 : 0,
613*1b481fc3SMaciej Żenczykowski 		v & (1<<1) ? 1 : 0,
614*1b481fc3SMaciej Żenczykowski 		v & (1<<0) ? 1 : 0);
615*1b481fc3SMaciej Żenczykowski 
616*1b481fc3SMaciej Żenczykowski 	/*
617*1b481fc3SMaciej Żenczykowski 	 * CSR10
618*1b481fc3SMaciej Żenczykowski 	 */
619*1b481fc3SMaciej Żenczykowski 	v = data[10];
620*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
621*1b481fc3SMaciej Żenczykowski 		"0x50: CSR10 (Boot ROM Address)           0x%08x\n", v);
622*1b481fc3SMaciej Żenczykowski 
623*1b481fc3SMaciej Żenczykowski 	/*
624*1b481fc3SMaciej Żenczykowski 	 * CSR11
625*1b481fc3SMaciej Żenczykowski 	 */
626*1b481fc3SMaciej Żenczykowski 	v = data[11];
627*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
628*1b481fc3SMaciej Żenczykowski 		"0x58: CSR11 (General Purpose Timer)      0x%08x\n"
629*1b481fc3SMaciej Żenczykowski 		"%s"
630*1b481fc3SMaciej Żenczykowski 		"      Timer value: %u cycles\n"
631*1b481fc3SMaciej Żenczykowski 		,
632*1b481fc3SMaciej Żenczykowski 		v,
633*1b481fc3SMaciej Żenczykowski 		v & (1<<16) ? "      Continuous mode\n" : "",
634*1b481fc3SMaciej Żenczykowski 		v & 0xffff);
635*1b481fc3SMaciej Żenczykowski 
636*1b481fc3SMaciej Żenczykowski 	/*
637*1b481fc3SMaciej Żenczykowski 	 * CSR12
638*1b481fc3SMaciej Żenczykowski 	 */
639*1b481fc3SMaciej Żenczykowski 	v = data[12];
640*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
641*1b481fc3SMaciej Żenczykowski 		"0x60: CSR12 (SIA Status)                 0x%08x\n"
642*1b481fc3SMaciej Żenczykowski 		"      Link partner code word 0x%04x\n"
643*1b481fc3SMaciej Żenczykowski 		"%s"
644*1b481fc3SMaciej Żenczykowski 		"      NWay state: %s\n"
645*1b481fc3SMaciej Żenczykowski 		"%s"
646*1b481fc3SMaciej Żenczykowski 		"%s"
647*1b481fc3SMaciej Żenczykowski 		"%s"
648*1b481fc3SMaciej Żenczykowski 		"%s"
649*1b481fc3SMaciej Żenczykowski 		"%s"
650*1b481fc3SMaciej Żenczykowski 		"%s"
651*1b481fc3SMaciej Żenczykowski 		"%s"
652*1b481fc3SMaciej Żenczykowski 		"%s"
653*1b481fc3SMaciej Żenczykowski 		"%s"
654*1b481fc3SMaciej Żenczykowski 		"%s"
655*1b481fc3SMaciej Żenczykowski 		"%s"
656*1b481fc3SMaciej Żenczykowski 		,
657*1b481fc3SMaciej Żenczykowski 		v,
658*1b481fc3SMaciej Żenczykowski 		v >> 16,
659*1b481fc3SMaciej Żenczykowski 		v & (1<<15) ? "      Link partner negotiable\n" : "",
660*1b481fc3SMaciej Żenczykowski 		csr12_nway_state[(v >> 12) & 0x7],
661*1b481fc3SMaciej Żenczykowski 		v & (1<<11) ? "      Transmit remote fault\n" : "",
662*1b481fc3SMaciej Żenczykowski 		v & (1<<10) ? "      Unstable NLP detected\n" : "",
663*1b481fc3SMaciej Żenczykowski 		v & (1<<9) ? "      Non-selected port receive activity\n" : "",
664*1b481fc3SMaciej Żenczykowski 		v & (1<<8) ? "      Selected port receive activity\n" : "",
665*1b481fc3SMaciej Żenczykowski 		v & (1<<7) ? "      PLL sampler high\n" : "",
666*1b481fc3SMaciej Żenczykowski 		v & (1<<6) ? "      PLL sampler low\n" : "",
667*1b481fc3SMaciej Żenczykowski 		v & (1<<5) ? "      PLL self-test pass\n" : "",
668*1b481fc3SMaciej Żenczykowski 		v & (1<<4) ? "      PLL self-test done\n" : "",
669*1b481fc3SMaciej Żenczykowski 		v & (1<<3) ? "      Autopolarity state\n" : "",
670*1b481fc3SMaciej Żenczykowski 		v & (1<<2) ? "      Link fail\n" : "",
671*1b481fc3SMaciej Żenczykowski 		v & (1<<1) ? "      Network connection error\n" : "");
672*1b481fc3SMaciej Żenczykowski 
673*1b481fc3SMaciej Żenczykowski 	/*
674*1b481fc3SMaciej Żenczykowski 	 * CSR13
675*1b481fc3SMaciej Żenczykowski 	 */
676*1b481fc3SMaciej Żenczykowski 	v = data[13];
677*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
678*1b481fc3SMaciej Żenczykowski 		"0x68: CSR13 (SIA Connectivity)           0x%08x\n"
679*1b481fc3SMaciej Żenczykowski 		"      SIA Diagnostic Mode 0x%04x\n"
680*1b481fc3SMaciej Żenczykowski 		"      %s\n"
681*1b481fc3SMaciej Żenczykowski 		"%s"
682*1b481fc3SMaciej Żenczykowski 		"%s"
683*1b481fc3SMaciej Żenczykowski 		,
684*1b481fc3SMaciej Żenczykowski 		v,
685*1b481fc3SMaciej Żenczykowski 		(v >> 4) & 0xfff,
686*1b481fc3SMaciej Żenczykowski 		v & (1<<3) ? "AUI/BNC port" : "10base-T port",
687*1b481fc3SMaciej Żenczykowski 		v & (1<<2) ? "      CSR autoconfiguration enabled\n" : "",
688*1b481fc3SMaciej Żenczykowski 		v & (1<<0) ? "      SIA register reset asserted\n" : "");
689*1b481fc3SMaciej Żenczykowski 
690*1b481fc3SMaciej Żenczykowski 	/*
691*1b481fc3SMaciej Żenczykowski 	 * CSR14
692*1b481fc3SMaciej Żenczykowski 	 */
693*1b481fc3SMaciej Żenczykowski 	v = data[14];
694*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
695*1b481fc3SMaciej Żenczykowski 		"0x70: CSR14 (SIA Transmit and Receive)   0x%08x\n"
696*1b481fc3SMaciej Żenczykowski 		"%s"
697*1b481fc3SMaciej Żenczykowski 		"%s"
698*1b481fc3SMaciej Żenczykowski 		"%s"
699*1b481fc3SMaciej Żenczykowski 		"%s"
700*1b481fc3SMaciej Żenczykowski 		"%s"
701*1b481fc3SMaciej Żenczykowski 		"%s"
702*1b481fc3SMaciej Żenczykowski 		"%s"
703*1b481fc3SMaciej Żenczykowski 		"%s"
704*1b481fc3SMaciej Żenczykowski 		"%s"
705*1b481fc3SMaciej Żenczykowski 		"%s"
706*1b481fc3SMaciej Żenczykowski 		"      %s\n"
707*1b481fc3SMaciej Żenczykowski 		"%s"
708*1b481fc3SMaciej Żenczykowski 		"%s"
709*1b481fc3SMaciej Żenczykowski 		"%s"
710*1b481fc3SMaciej Żenczykowski 		"%s"
711*1b481fc3SMaciej Żenczykowski 		,
712*1b481fc3SMaciej Żenczykowski 		v,
713*1b481fc3SMaciej Żenczykowski 		v & (1<<15) ? "      10base-T/AUI autosensing\n" : "",
714*1b481fc3SMaciej Żenczykowski 		v & (1<<14) ? "      Set polarity plus\n" : "",
715*1b481fc3SMaciej Żenczykowski 		v & (1<<13) ? "      Autopolarity enable\n" : "",
716*1b481fc3SMaciej Żenczykowski 		v & (1<<12) ? "      Link test enable\n" : "",
717*1b481fc3SMaciej Żenczykowski 		v & (1<<11) ? "      Heartbeat enable\n" : "",
718*1b481fc3SMaciej Żenczykowski 		v & (1<<10) ? "      Collision detect enable\n" : "",
719*1b481fc3SMaciej Żenczykowski 		v & (1<<9) ? "      Collision squelch enable\n" : "",
720*1b481fc3SMaciej Żenczykowski 		v & (1<<8) ? "      Receive squelch enable\n" : "",
721*1b481fc3SMaciej Żenczykowski 		v & (1<<7) ? "      Autonegotiation enable\n" : "",
722*1b481fc3SMaciej Żenczykowski 		v & (1<<6) ? "      Must Be One\n" : "",
723*1b481fc3SMaciej Żenczykowski 		csr14_tp_comp[(v >> 4) & 0x3],
724*1b481fc3SMaciej Żenczykowski 		v & (1<<3) ? "      Link pulse send enable\n" : "",
725*1b481fc3SMaciej Żenczykowski 		v & (1<<2) ? "      Driver enable\n" : "",
726*1b481fc3SMaciej Żenczykowski 		v & (1<<1) ? "      Loopback enable\n" : "",
727*1b481fc3SMaciej Żenczykowski 		v & (1<<0) ? "      Encoder enable\n" : "");
728*1b481fc3SMaciej Żenczykowski 
729*1b481fc3SMaciej Żenczykowski 	/*
730*1b481fc3SMaciej Żenczykowski 	 * CSR15
731*1b481fc3SMaciej Żenczykowski 	 */
732*1b481fc3SMaciej Żenczykowski 	v = data[15];
733*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
734*1b481fc3SMaciej Żenczykowski 		"0x78: CSR15 (SIA General)                0x%08x\n"
735*1b481fc3SMaciej Żenczykowski 		"%s"
736*1b481fc3SMaciej Żenczykowski 		"%s"
737*1b481fc3SMaciej Żenczykowski 		"%s"
738*1b481fc3SMaciej Żenczykowski 		"%s"
739*1b481fc3SMaciej Żenczykowski 		"%s"
740*1b481fc3SMaciej Żenczykowski 		"%s"
741*1b481fc3SMaciej Żenczykowski 		"%s"
742*1b481fc3SMaciej Żenczykowski 		"%s"
743*1b481fc3SMaciej Żenczykowski 		"%s"
744*1b481fc3SMaciej Żenczykowski 		"%s"
745*1b481fc3SMaciej Żenczykowski 		"%s"
746*1b481fc3SMaciej Żenczykowski 		"%s"
747*1b481fc3SMaciej Żenczykowski 		"      %s port selected\n"
748*1b481fc3SMaciej Żenczykowski 		"%s"
749*1b481fc3SMaciej Żenczykowski 		"%s"
750*1b481fc3SMaciej Żenczykowski 		"%s"
751*1b481fc3SMaciej Żenczykowski 		,
752*1b481fc3SMaciej Żenczykowski 		v,
753*1b481fc3SMaciej Żenczykowski 		v & (1<<15) ? "      GP LED2 on\n" : "",
754*1b481fc3SMaciej Żenczykowski 		v & (1<<14) ? "      GP LED2 enable\n" : "",
755*1b481fc3SMaciej Żenczykowski 		v & (1<<13) ? "      Force receiver low\n" : "",
756*1b481fc3SMaciej Żenczykowski 		v & (1<<12) ? "      PLL self-test start\n" : "",
757*1b481fc3SMaciej Żenczykowski 		v & (1<<11) ? "      LED stretch disable\n" : "",
758*1b481fc3SMaciej Żenczykowski 		v & (1<<10) ? "      Force link fail\n" : "",
759*1b481fc3SMaciej Żenczykowski 		v & (1<<9) ? "      Force unsquelch\n" : "",
760*1b481fc3SMaciej Żenczykowski 		v & (1<<8) ? "      Test clock\n" : "",
761*1b481fc3SMaciej Żenczykowski 		v & (1<<7) ? "      GP LED1 on\n" : "",
762*1b481fc3SMaciej Żenczykowski 		v & (1<<6) ? "      GP LED1 enable\n" : "",
763*1b481fc3SMaciej Żenczykowski 		v & (1<<5) ? "      Receive watchdog release\n" : "",
764*1b481fc3SMaciej Żenczykowski 		v & (1<<4) ? "      Receive watchdog disable\n" : "",
765*1b481fc3SMaciej Żenczykowski 		v & (1<<3) ? "AUI" : "BNC",
766*1b481fc3SMaciej Żenczykowski 		v & (1<<2) ? "      Jabber clock\n" : "",
767*1b481fc3SMaciej Żenczykowski 		v & (1<<1) ? "      Host unjab\n" : "",
768*1b481fc3SMaciej Żenczykowski 		v & (1<<0) ? "      Jabber disable\n" : "");
769*1b481fc3SMaciej Żenczykowski }
770*1b481fc3SMaciej Żenczykowski 
771*1b481fc3SMaciej Żenczykowski int
de2104x_dump_regs(struct ethtool_drvinfo * info,struct ethtool_regs * regs)772*1b481fc3SMaciej Żenczykowski de2104x_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
773*1b481fc3SMaciej Żenczykowski {
774*1b481fc3SMaciej Żenczykowski 	unsigned int de21040 = regs->version & 1;
775*1b481fc3SMaciej Żenczykowski 
776*1b481fc3SMaciej Żenczykowski 	if (de21040)
777*1b481fc3SMaciej Żenczykowski 		de21040_dump_regs(info, regs);
778*1b481fc3SMaciej Żenczykowski 	else
779*1b481fc3SMaciej Żenczykowski 		de21041_dump_regs(info, regs);
780*1b481fc3SMaciej Żenczykowski 
781*1b481fc3SMaciej Żenczykowski 	return 0;
782*1b481fc3SMaciej Żenczykowski }
783*1b481fc3SMaciej Żenczykowski 
784