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