xref: /aosp_15_r20/external/ethtool/pcnet32.c (revision 1b481fc3bb1b45d4cf28d1ec12969dc1055f555d)
1*1b481fc3SMaciej Żenczykowski /* Copyright 2004 IBM Corporation ([email protected]) */
2*1b481fc3SMaciej Żenczykowski 
3*1b481fc3SMaciej Żenczykowski #include <stdio.h>
4*1b481fc3SMaciej Żenczykowski #include <stdlib.h>
5*1b481fc3SMaciej Żenczykowski #include "internal.h"
6*1b481fc3SMaciej Żenczykowski 
7*1b481fc3SMaciej Żenczykowski #define BIT0  0x0001
8*1b481fc3SMaciej Żenczykowski #define BIT1  0x0002
9*1b481fc3SMaciej Żenczykowski #define BIT2  0x0004
10*1b481fc3SMaciej Żenczykowski #define BIT3  0x0008
11*1b481fc3SMaciej Żenczykowski #define BIT4  0x0010
12*1b481fc3SMaciej Żenczykowski #define BIT5  0x0020
13*1b481fc3SMaciej Żenczykowski #define BIT6  0x0040
14*1b481fc3SMaciej Żenczykowski #define BIT7  0x0080
15*1b481fc3SMaciej Żenczykowski #define BIT8  0x0100
16*1b481fc3SMaciej Żenczykowski #define BIT9  0x0200
17*1b481fc3SMaciej Żenczykowski #define BIT10 0x0400
18*1b481fc3SMaciej Żenczykowski #define BIT11 0x0800
19*1b481fc3SMaciej Żenczykowski #define BIT12 0x1000
20*1b481fc3SMaciej Żenczykowski #define BIT13 0x2000
21*1b481fc3SMaciej Żenczykowski #define BIT14 0x4000
22*1b481fc3SMaciej Żenczykowski #define BIT15 0x8000
23*1b481fc3SMaciej Żenczykowski 
pcnet32_dump_regs(struct ethtool_drvinfo * info,struct ethtool_regs * regs)24*1b481fc3SMaciej Żenczykowski int pcnet32_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
25*1b481fc3SMaciej Żenczykowski {
26*1b481fc3SMaciej Żenczykowski 	int i, csr;
27*1b481fc3SMaciej Żenczykowski 	u16 *data = (u16 *) regs->data;
28*1b481fc3SMaciej Żenczykowski 	int len = regs->len / 2;
29*1b481fc3SMaciej Żenczykowski 	u16 temp,*ptr;
30*1b481fc3SMaciej Żenczykowski 
31*1b481fc3SMaciej Żenczykowski 	printf("Driver:  %s\n",info->driver);
32*1b481fc3SMaciej Żenczykowski 	printf("Version: %s\n",info->version);
33*1b481fc3SMaciej Żenczykowski 
34*1b481fc3SMaciej Żenczykowski 	printf("APROM:  ");
35*1b481fc3SMaciej Żenczykowski 	for (i=0; i<8; i++)
36*1b481fc3SMaciej Żenczykowski 		printf(" %04x ", data[i]);
37*1b481fc3SMaciej Żenczykowski 	printf("\n");
38*1b481fc3SMaciej Żenczykowski 
39*1b481fc3SMaciej Żenczykowski 	csr = i;
40*1b481fc3SMaciej Żenczykowski 	for (; i<100; i++)
41*1b481fc3SMaciej Żenczykowski 	 {
42*1b481fc3SMaciej Żenczykowski 		if (((i-csr) & 7) == 0) printf("CSR%02d:  ", i-csr);
43*1b481fc3SMaciej Żenczykowski 		printf(" %04x ", data[i]);
44*1b481fc3SMaciej Żenczykowski 		if (((i-csr) & 7) == 7) printf("\n");
45*1b481fc3SMaciej Żenczykowski 	 }
46*1b481fc3SMaciej Żenczykowski 	if (((i-csr) & 7) != 7) printf("\n");
47*1b481fc3SMaciej Żenczykowski 
48*1b481fc3SMaciej Żenczykowski 	csr = i;
49*1b481fc3SMaciej Żenczykowski 	for (; i<136; i++)
50*1b481fc3SMaciej Żenczykowski 	 {
51*1b481fc3SMaciej Żenczykowski 		if (((i-csr) & 7) == 0) printf("BCR%02d:  ", i-csr);
52*1b481fc3SMaciej Żenczykowski 		printf(" %04x ", data[i]);
53*1b481fc3SMaciej Żenczykowski 		if (((i-csr) & 7) == 7) printf("\n");
54*1b481fc3SMaciej Żenczykowski 	 }
55*1b481fc3SMaciej Żenczykowski 	if (((i-csr) & 7) != 7) printf("\n");
56*1b481fc3SMaciej Żenczykowski 
57*1b481fc3SMaciej Żenczykowski 	csr = i;
58*1b481fc3SMaciej Żenczykowski 	for (; i<len; i++)
59*1b481fc3SMaciej Żenczykowski 	 {
60*1b481fc3SMaciej Żenczykowski 	  if (((i-csr) & 7) == 0) printf("MII%02d:  ", (i-csr) & 0x1f);
61*1b481fc3SMaciej Żenczykowski 		printf(" %04x ", data[i]);
62*1b481fc3SMaciej Żenczykowski 	  if (((i-csr) & 7) == 7) printf("\n");
63*1b481fc3SMaciej Żenczykowski 	 }
64*1b481fc3SMaciej Żenczykowski 	if (((i-csr) & 7) != 7) printf("\n");
65*1b481fc3SMaciej Żenczykowski 	printf("\n");
66*1b481fc3SMaciej Żenczykowski 
67*1b481fc3SMaciej Żenczykowski 	ptr=&data[8];            /* start of the CSRs */
68*1b481fc3SMaciej Żenczykowski 
69*1b481fc3SMaciej Żenczykowski 	printf("CSR0:   Status and Control         0x%04x\n  ",ptr[0]);
70*1b481fc3SMaciej Żenczykowski 	temp=ptr[0];
71*1b481fc3SMaciej Żenczykowski 
72*1b481fc3SMaciej Żenczykowski 	if(temp & BIT15) printf("ERR ");
73*1b481fc3SMaciej Żenczykowski 	if(temp & BIT14) printf("BABL ");
74*1b481fc3SMaciej Żenczykowski 	if(temp & BIT13) printf("CERR ");
75*1b481fc3SMaciej Żenczykowski 	if(temp & BIT12) printf("MISS ");
76*1b481fc3SMaciej Żenczykowski 	if(temp & BIT11) printf("MERR ");
77*1b481fc3SMaciej Żenczykowski 	if(temp & BIT10) printf("RINT ");
78*1b481fc3SMaciej Żenczykowski 	if(temp & BIT9)  printf("TINT ");
79*1b481fc3SMaciej Żenczykowski 	if(temp & BIT8)  printf("IDON ");
80*1b481fc3SMaciej Żenczykowski 	if(temp & BIT7)  printf("INTR ");
81*1b481fc3SMaciej Żenczykowski 	if(temp & BIT6)  printf("INT ");
82*1b481fc3SMaciej Żenczykowski 	if(temp & BIT5)  printf("RXON ");
83*1b481fc3SMaciej Żenczykowski 	if(temp & BIT4)  printf("TXON ");
84*1b481fc3SMaciej Żenczykowski 	if(temp & BIT3)  printf("TDMD ");
85*1b481fc3SMaciej Żenczykowski 	if(temp & BIT2)  printf("STOP ");
86*1b481fc3SMaciej Żenczykowski 	if(temp & BIT1)  printf("STRT ");
87*1b481fc3SMaciej Żenczykowski 	if(temp & BIT0)  printf("INIT ");
88*1b481fc3SMaciej Żenczykowski 
89*1b481fc3SMaciej Żenczykowski 	printf("\n");
90*1b481fc3SMaciej Żenczykowski 
91*1b481fc3SMaciej Żenczykowski 	printf("CSR3:   Interrupt Mask             0x%04x\n  ",ptr[3]);
92*1b481fc3SMaciej Żenczykowski 	temp=ptr[3];
93*1b481fc3SMaciej Żenczykowski 
94*1b481fc3SMaciej Żenczykowski 	if(temp & BIT14) printf("BABLM ");
95*1b481fc3SMaciej Żenczykowski 	if(temp & BIT12) printf("MISSM ");
96*1b481fc3SMaciej Żenczykowski 	if(temp & BIT11) printf("MERRM ");
97*1b481fc3SMaciej Żenczykowski 	if(temp & BIT10) printf("RINTM ");
98*1b481fc3SMaciej Żenczykowski 	if(temp & BIT9)  printf("TINTM ");
99*1b481fc3SMaciej Żenczykowski 	if(temp & BIT8)  printf("IDONM ");
100*1b481fc3SMaciej Żenczykowski 	if(temp & BIT6)  printf("DXSUFLO ");
101*1b481fc3SMaciej Żenczykowski 	if(temp & BIT5)  printf("LAPPEN ");
102*1b481fc3SMaciej Żenczykowski 	if(temp & BIT4)  printf("DXMT2PD ");
103*1b481fc3SMaciej Żenczykowski 	if(temp & BIT3)  printf("EMBA ");
104*1b481fc3SMaciej Żenczykowski 	if(temp & BIT2)  printf("BSWP ");
105*1b481fc3SMaciej Żenczykowski 
106*1b481fc3SMaciej Żenczykowski 	printf("\n");
107*1b481fc3SMaciej Żenczykowski 
108*1b481fc3SMaciej Żenczykowski 	printf("CSR4:   Test and Features          0x%04x\n  ",ptr[4]);
109*1b481fc3SMaciej Żenczykowski 	temp=ptr[4];
110*1b481fc3SMaciej Żenczykowski 
111*1b481fc3SMaciej Żenczykowski 	if(temp & BIT15) printf("EN124 ");
112*1b481fc3SMaciej Żenczykowski 	if(temp & BIT14) printf("DMAPLUS ");
113*1b481fc3SMaciej Żenczykowski 	if(temp & BIT12) printf("TXDPOLL ");
114*1b481fc3SMaciej Żenczykowski 	if(temp & BIT11) printf("APAD_XMT ");
115*1b481fc3SMaciej Żenczykowski 	if(temp & BIT10) printf("ASTRP_RCV ");
116*1b481fc3SMaciej Żenczykowski 	if(temp & BIT9)  printf("MFCO ");
117*1b481fc3SMaciej Żenczykowski 	if(temp & BIT8)  printf("MFCON ");
118*1b481fc3SMaciej Żenczykowski 	if(temp & BIT7)  printf("UINTCMD ");
119*1b481fc3SMaciej Żenczykowski 	if(temp & BIT6)  printf("UINT ");
120*1b481fc3SMaciej Żenczykowski 	if(temp & BIT5)  printf("RCVCCO ");
121*1b481fc3SMaciej Żenczykowski 	if(temp & BIT4)  printf("RCVCCOM ");
122*1b481fc3SMaciej Żenczykowski 	if(temp & BIT3)  printf("TXSTRT ");
123*1b481fc3SMaciej Żenczykowski 	if(temp & BIT2)  printf("TXSTRTM ");
124*1b481fc3SMaciej Żenczykowski 	if(temp & BIT1)  printf("JAB ");
125*1b481fc3SMaciej Żenczykowski 	if(temp & BIT0)  printf("JABM ");
126*1b481fc3SMaciej Żenczykowski 
127*1b481fc3SMaciej Żenczykowski 	printf("\n");
128*1b481fc3SMaciej Żenczykowski 
129*1b481fc3SMaciej Żenczykowski 	printf("CSR5:   Ext Control and Int 1      0x%04x\n  ",ptr[5]);
130*1b481fc3SMaciej Żenczykowski 	temp=ptr[5];
131*1b481fc3SMaciej Żenczykowski 
132*1b481fc3SMaciej Żenczykowski 	if(temp & BIT15) printf("TOKINTD ");
133*1b481fc3SMaciej Żenczykowski 	if(temp & BIT14) printf("LTINTEN ");
134*1b481fc3SMaciej Żenczykowski 	if(temp & BIT11) printf("SINT ");
135*1b481fc3SMaciej Żenczykowski 	if(temp & BIT10) printf("SINTE ");
136*1b481fc3SMaciej Żenczykowski 	if(temp & BIT9)  printf("SLPINT ");
137*1b481fc3SMaciej Żenczykowski 	if(temp & BIT8)  printf("SLPINTE ");
138*1b481fc3SMaciej Żenczykowski 	if(temp & BIT7)  printf("EXDINT ");
139*1b481fc3SMaciej Żenczykowski 	if(temp & BIT6)  printf("EXDINTE ");
140*1b481fc3SMaciej Żenczykowski 	if(temp & BIT5)  printf("MPPLBA ");
141*1b481fc3SMaciej Żenczykowski 	if(temp & BIT4)  printf("MPINT ");
142*1b481fc3SMaciej Żenczykowski 	if(temp & BIT3)  printf("MPINTE ");
143*1b481fc3SMaciej Żenczykowski 	if(temp & BIT2)  printf("MPEN ");
144*1b481fc3SMaciej Żenczykowski 	if(temp & BIT1)  printf("MPMODE ");
145*1b481fc3SMaciej Żenczykowski 	if(temp & BIT0)  printf("SPND ");
146*1b481fc3SMaciej Żenczykowski 
147*1b481fc3SMaciej Żenczykowski 	printf("\n");
148*1b481fc3SMaciej Żenczykowski 
149*1b481fc3SMaciej Żenczykowski 	printf("CSR7:   Ext Control and Int 2      0x%04x\n  ",ptr[7]);
150*1b481fc3SMaciej Żenczykowski 	temp=ptr[7];
151*1b481fc3SMaciej Żenczykowski 
152*1b481fc3SMaciej Żenczykowski 	if(temp & BIT15) printf("FASTSPNDE ");
153*1b481fc3SMaciej Żenczykowski 	if(temp & BIT14) printf("RXFRTG ");
154*1b481fc3SMaciej Żenczykowski 	if(temp & BIT13) printf("RDMD ");
155*1b481fc3SMaciej Żenczykowski 	if(temp & BIT12) printf("RXDPOLL ");
156*1b481fc3SMaciej Żenczykowski 	if(temp & BIT11) printf("STINT ");
157*1b481fc3SMaciej Żenczykowski 	if(temp & BIT10) printf("STINTE ");
158*1b481fc3SMaciej Żenczykowski 	if(temp & BIT9)  printf("MREINT ");
159*1b481fc3SMaciej Żenczykowski 	if(temp & BIT8)  printf("MREINTE ");
160*1b481fc3SMaciej Żenczykowski 	if(temp & BIT7)  printf("MAPINT ");
161*1b481fc3SMaciej Żenczykowski 	if(temp & BIT6)  printf("MAPINTE ");
162*1b481fc3SMaciej Żenczykowski 	if(temp & BIT5)  printf("MCCINT ");
163*1b481fc3SMaciej Żenczykowski 	if(temp & BIT4)  printf("MCCINTE ");
164*1b481fc3SMaciej Żenczykowski 	if(temp & BIT3)  printf("MCCIINT ");
165*1b481fc3SMaciej Żenczykowski 	if(temp & BIT2)  printf("MCCIINTE ");
166*1b481fc3SMaciej Żenczykowski 	if(temp & BIT1)  printf("MIIPDTINT ");
167*1b481fc3SMaciej Żenczykowski 	if(temp & BIT0)  printf("MIIPDTINTE ");
168*1b481fc3SMaciej Żenczykowski 
169*1b481fc3SMaciej Żenczykowski 	printf("\n");
170*1b481fc3SMaciej Żenczykowski 
171*1b481fc3SMaciej Żenczykowski 	printf("CSR15:  Mode                       0x%04x\n",ptr[15]);
172*1b481fc3SMaciej Żenczykowski 	printf("CSR40:  Current RX Byte Count      0x%04x\n",ptr[40]);
173*1b481fc3SMaciej Żenczykowski 	printf("CSR41:  Current RX Status          0x%04x\n",ptr[41]);
174*1b481fc3SMaciej Żenczykowski 	printf("CSR42:  Current TX Byte Count      0x%04x\n",ptr[42]);
175*1b481fc3SMaciej Żenczykowski 	printf("CSR43:  Current TX Status          0x%04x\n",ptr[43]);
176*1b481fc3SMaciej Żenczykowski 	printf("CSR88:  Chip ID Lower              0x%04x\n",ptr[88]);
177*1b481fc3SMaciej Żenczykowski 	temp = (((ptr[89] << 16) | ptr[88]) >> 12) & 0xffff;
178*1b481fc3SMaciej Żenczykowski 	switch (temp) {
179*1b481fc3SMaciej Żenczykowski 		case 0x2420:
180*1b481fc3SMaciej Żenczykowski 			printf("  PCnet/PCI 79C970\n");
181*1b481fc3SMaciej Żenczykowski 			break;
182*1b481fc3SMaciej Żenczykowski 		case 0x2621:
183*1b481fc3SMaciej Żenczykowski 			printf("  PCnet/PCI II 79C970A\n");
184*1b481fc3SMaciej Żenczykowski 			break;
185*1b481fc3SMaciej Żenczykowski 		case 0x2623:
186*1b481fc3SMaciej Żenczykowski 			printf("  PCnet/FAST 79C971\n");
187*1b481fc3SMaciej Żenczykowski 			break;
188*1b481fc3SMaciej Żenczykowski 		case 0x2624:
189*1b481fc3SMaciej Żenczykowski 			printf("  PCnet/FAST+ 79C972\n");
190*1b481fc3SMaciej Żenczykowski 			break;
191*1b481fc3SMaciej Żenczykowski 		case 0x2625:
192*1b481fc3SMaciej Żenczykowski 			printf("  PCnet/FAST III 79C973\n");
193*1b481fc3SMaciej Żenczykowski 			break;
194*1b481fc3SMaciej Żenczykowski 		case 0x2626:
195*1b481fc3SMaciej Żenczykowski 			printf("  PCnet/Home 79C978\n");
196*1b481fc3SMaciej Żenczykowski 			break;
197*1b481fc3SMaciej Żenczykowski 		case 0x2627:
198*1b481fc3SMaciej Żenczykowski 			printf("  PCnet/FAST III 79C975\n");
199*1b481fc3SMaciej Żenczykowski 			break;
200*1b481fc3SMaciej Żenczykowski 		case 0x2628:
201*1b481fc3SMaciej Żenczykowski 			printf("  PCnet/PRO 79C976\n");
202*1b481fc3SMaciej Żenczykowski 			break;
203*1b481fc3SMaciej Żenczykowski 	}
204*1b481fc3SMaciej Żenczykowski 
205*1b481fc3SMaciej Żenczykowski 	printf("CSR89:  Chip ID Upper              0x%04x\n  ",ptr[89]);
206*1b481fc3SMaciej Żenczykowski 	temp=ptr[89];
207*1b481fc3SMaciej Żenczykowski 	printf("VER: %04x  PARTIDU: %04x\n",temp >> 12,temp & 0x00000fff);
208*1b481fc3SMaciej Żenczykowski 
209*1b481fc3SMaciej Żenczykowski 	printf("CSR112: Missed Frame Count         0x%04x\n",ptr[90]);    /* 90 is 112 */
210*1b481fc3SMaciej Żenczykowski 	printf("CSR114: RX Collision Count         0x%04x\n",ptr[91]);
211*1b481fc3SMaciej Żenczykowski 
212*1b481fc3SMaciej Żenczykowski 	printf("\n");
213*1b481fc3SMaciej Żenczykowski 
214*1b481fc3SMaciej Żenczykowski 	ptr=&data[100];        /* point to BCR 0 */
215*1b481fc3SMaciej Żenczykowski 
216*1b481fc3SMaciej Żenczykowski 	printf("BCR2:   Misc. Configuration        0x%04x\n  ",ptr[2]);
217*1b481fc3SMaciej Żenczykowski 	temp=ptr[2];
218*1b481fc3SMaciej Żenczykowski 
219*1b481fc3SMaciej Żenczykowski 	if(temp & BIT14) printf("TMAULOOP ");
220*1b481fc3SMaciej Żenczykowski 	if(temp & BIT12) printf("LEDPE ");
221*1b481fc3SMaciej Żenczykowski 
222*1b481fc3SMaciej Żenczykowski 	if(temp & BIT8)  printf("APROMWE ");
223*1b481fc3SMaciej Żenczykowski 	if(temp & BIT7)  printf("INTLEVEL ");
224*1b481fc3SMaciej Żenczykowski 
225*1b481fc3SMaciej Żenczykowski 	if(temp & BIT3)  printf("EADISEL ");
226*1b481fc3SMaciej Żenczykowski 	if(temp & BIT2)  printf("AWAKE ");
227*1b481fc3SMaciej Żenczykowski 	if(temp & BIT1)  printf("ASEL ");
228*1b481fc3SMaciej Żenczykowski 	if(temp & BIT0)  printf("XMAUSEL ");
229*1b481fc3SMaciej Żenczykowski 
230*1b481fc3SMaciej Żenczykowski 	printf("\n");
231*1b481fc3SMaciej Żenczykowski 
232*1b481fc3SMaciej Żenczykowski 	printf("BCR9:   Full-Duplex Control        0x%04x\n",ptr[9]);
233*1b481fc3SMaciej Żenczykowski 	printf("BCR18:  Burst and Bus Control      0x%04x\n",ptr[18]);
234*1b481fc3SMaciej Żenczykowski 
235*1b481fc3SMaciej Żenczykowski 	printf("BCR19:  EEPROM Control and Status  0x%04x\n  ",ptr[19]);
236*1b481fc3SMaciej Żenczykowski 	temp=ptr[19];
237*1b481fc3SMaciej Żenczykowski 	if(temp & BIT15) printf("PVALID ");
238*1b481fc3SMaciej Żenczykowski 	if(temp & BIT13) printf("EEDET ");
239*1b481fc3SMaciej Żenczykowski 	printf("\n");
240*1b481fc3SMaciej Żenczykowski 
241*1b481fc3SMaciej Żenczykowski 	printf("BCR23:  PCI Subsystem Vendor ID    0x%04x\n",ptr[23]);
242*1b481fc3SMaciej Żenczykowski 	printf("BCR24:  PCI Subsystem ID           0x%04x\n",ptr[24]);
243*1b481fc3SMaciej Żenczykowski 	printf("BCR31:  Software Timer             0x%04x\n",ptr[31]);
244*1b481fc3SMaciej Żenczykowski 	printf("BCR32:  MII Control and Status     0x%04x\n",ptr[32]);
245*1b481fc3SMaciej Żenczykowski 	printf("BCR35:  PCI Vendor ID              0x%04x\n",ptr[35]);
246*1b481fc3SMaciej Żenczykowski 
247*1b481fc3SMaciej Żenczykowski 	return(0);
248*1b481fc3SMaciej Żenczykowski }
249*1b481fc3SMaciej Żenczykowski 
250