1*1b481fc3SMaciej Żenczykowski /* Copyright (c) 2015 VMware Inc.*/
2*1b481fc3SMaciej Żenczykowski #include <stdio.h>
3*1b481fc3SMaciej Żenczykowski #include "internal.h"
4*1b481fc3SMaciej Żenczykowski
5*1b481fc3SMaciej Żenczykowski int
vmxnet3_dump_regs(struct ethtool_drvinfo * info __maybe_unused,struct ethtool_regs * regs)6*1b481fc3SMaciej Żenczykowski vmxnet3_dump_regs(struct ethtool_drvinfo *info __maybe_unused,
7*1b481fc3SMaciej Żenczykowski struct ethtool_regs *regs)
8*1b481fc3SMaciej Żenczykowski {
9*1b481fc3SMaciej Żenczykowski u32 *regs_buff = (u32 *)regs->data;
10*1b481fc3SMaciej Żenczykowski u32 version = regs->version;
11*1b481fc3SMaciej Żenczykowski int i = 0, j = 0, cnt;
12*1b481fc3SMaciej Żenczykowski
13*1b481fc3SMaciej Żenczykowski if (version != 2)
14*1b481fc3SMaciej Żenczykowski return -1;
15*1b481fc3SMaciej Żenczykowski
16*1b481fc3SMaciej Żenczykowski fprintf(stdout, "Control Registers\n");
17*1b481fc3SMaciej Żenczykowski fprintf(stdout, "=================\n");
18*1b481fc3SMaciej Żenczykowski
19*1b481fc3SMaciej Żenczykowski fprintf(stdout,
20*1b481fc3SMaciej Żenczykowski " VRRS (Vmxnet3 Revision Report and Selection) 0x%x\n",
21*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
22*1b481fc3SMaciej Żenczykowski fprintf(stdout,
23*1b481fc3SMaciej Żenczykowski " UVRS (UPT Version Report and Selection) 0x%x\n",
24*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
25*1b481fc3SMaciej Żenczykowski fprintf(stdout,
26*1b481fc3SMaciej Żenczykowski " DSA (Driver Shared Address) 0x%08x%08x\n",
27*1b481fc3SMaciej Żenczykowski regs_buff[j+1], regs_buff[j]);
28*1b481fc3SMaciej Żenczykowski j += 2;
29*1b481fc3SMaciej Żenczykowski fprintf(stdout,
30*1b481fc3SMaciej Żenczykowski " CMD (Command Register) 0x%x\n",
31*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
32*1b481fc3SMaciej Żenczykowski fprintf(stdout,
33*1b481fc3SMaciej Żenczykowski " MAC (Media Access Control address) %02x:%02x:%02x:%02x:%02x:%02x\n",
34*1b481fc3SMaciej Żenczykowski regs_buff[j] & 0xff,
35*1b481fc3SMaciej Żenczykowski (regs_buff[j] >> 8) & 0xff,
36*1b481fc3SMaciej Żenczykowski (regs_buff[j] >> 16) & 0xff,
37*1b481fc3SMaciej Żenczykowski (regs_buff[j] >> 24) & 0xff,
38*1b481fc3SMaciej Żenczykowski regs_buff[j + 1] & 0xff,
39*1b481fc3SMaciej Żenczykowski (regs_buff[j + 1] >> 8) & 0xff);
40*1b481fc3SMaciej Żenczykowski j += 2;
41*1b481fc3SMaciej Żenczykowski fprintf(stdout,
42*1b481fc3SMaciej Żenczykowski " ICR (Interrupt Cause Register) 0x%x\n",
43*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
44*1b481fc3SMaciej Żenczykowski fprintf(stdout,
45*1b481fc3SMaciej Żenczykowski " ECR (Event Cause Register) 0x%x\n",
46*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
47*1b481fc3SMaciej Żenczykowski
48*1b481fc3SMaciej Żenczykowski fprintf(stdout, "Datapath Registers\n");
49*1b481fc3SMaciej Żenczykowski fprintf(stdout, "==================\n");
50*1b481fc3SMaciej Żenczykowski
51*1b481fc3SMaciej Żenczykowski /* Interrupt Mask Registers */
52*1b481fc3SMaciej Żenczykowski cnt = regs_buff[j++];
53*1b481fc3SMaciej Żenczykowski for (i = 0; i < cnt; i++) {
54*1b481fc3SMaciej Żenczykowski fprintf(stdout,
55*1b481fc3SMaciej Żenczykowski " IMR (Interrupt Mask Register) %d 0x%x\n",
56*1b481fc3SMaciej Żenczykowski i, regs_buff[j++]);
57*1b481fc3SMaciej Żenczykowski }
58*1b481fc3SMaciej Żenczykowski
59*1b481fc3SMaciej Żenczykowski /* Transmit Queue Registers */
60*1b481fc3SMaciej Żenczykowski cnt = regs_buff[j++];
61*1b481fc3SMaciej Żenczykowski for (i = 0; i < cnt; i++) {
62*1b481fc3SMaciej Żenczykowski fprintf(stdout, " Transmit Queue %d\n", i);
63*1b481fc3SMaciej Żenczykowski fprintf(stdout, " ----------------\n");
64*1b481fc3SMaciej Żenczykowski fprintf(stdout,
65*1b481fc3SMaciej Żenczykowski " TXPROD (Transmit Ring Producer Register) 0x%x\n",
66*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
67*1b481fc3SMaciej Żenczykowski fprintf(stdout,
68*1b481fc3SMaciej Żenczykowski " Transmit Ring\n");
69*1b481fc3SMaciej Żenczykowski fprintf(stdout,
70*1b481fc3SMaciej Żenczykowski " Base Address 0x%08x%08x\n",
71*1b481fc3SMaciej Żenczykowski regs_buff[j+1], regs_buff[j]);
72*1b481fc3SMaciej Żenczykowski j += 2;
73*1b481fc3SMaciej Żenczykowski fprintf(stdout,
74*1b481fc3SMaciej Żenczykowski " Size %u\n",
75*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
76*1b481fc3SMaciej Żenczykowski fprintf(stdout,
77*1b481fc3SMaciej Żenczykowski " next2fill %u\n",
78*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
79*1b481fc3SMaciej Żenczykowski fprintf(stdout,
80*1b481fc3SMaciej Żenczykowski " next2comp %u\n",
81*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
82*1b481fc3SMaciej Żenczykowski fprintf(stdout,
83*1b481fc3SMaciej Żenczykowski " gen %u\n",
84*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
85*1b481fc3SMaciej Żenczykowski
86*1b481fc3SMaciej Żenczykowski fprintf(stdout,
87*1b481fc3SMaciej Żenczykowski " Transmit Data Ring\n");
88*1b481fc3SMaciej Żenczykowski fprintf(stdout,
89*1b481fc3SMaciej Żenczykowski " Base Address 0x%08x%08x\n",
90*1b481fc3SMaciej Żenczykowski regs_buff[j+1], regs_buff[j]);
91*1b481fc3SMaciej Żenczykowski j += 2;
92*1b481fc3SMaciej Żenczykowski fprintf(stdout,
93*1b481fc3SMaciej Żenczykowski " Size %u\n",
94*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
95*1b481fc3SMaciej Żenczykowski fprintf(stdout,
96*1b481fc3SMaciej Żenczykowski " Buffer Size %u\n",
97*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
98*1b481fc3SMaciej Żenczykowski
99*1b481fc3SMaciej Żenczykowski fprintf(stdout,
100*1b481fc3SMaciej Żenczykowski " Transmit Completion Ring\n");
101*1b481fc3SMaciej Żenczykowski fprintf(stdout,
102*1b481fc3SMaciej Żenczykowski " Base Address 0x%08x%08x\n",
103*1b481fc3SMaciej Żenczykowski regs_buff[j+1], regs_buff[j]);
104*1b481fc3SMaciej Żenczykowski j += 2;
105*1b481fc3SMaciej Żenczykowski fprintf(stdout,
106*1b481fc3SMaciej Żenczykowski " size %u\n",
107*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
108*1b481fc3SMaciej Żenczykowski fprintf(stdout,
109*1b481fc3SMaciej Żenczykowski " next2proc %u\n",
110*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
111*1b481fc3SMaciej Żenczykowski fprintf(stdout,
112*1b481fc3SMaciej Żenczykowski " gen %u\n",
113*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
114*1b481fc3SMaciej Żenczykowski fprintf(stdout,
115*1b481fc3SMaciej Żenczykowski " stopped %u\n",
116*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
117*1b481fc3SMaciej Żenczykowski }
118*1b481fc3SMaciej Żenczykowski
119*1b481fc3SMaciej Żenczykowski /* Receive Queue Registers */
120*1b481fc3SMaciej Żenczykowski cnt = regs_buff[j++];
121*1b481fc3SMaciej Żenczykowski for (i = 0; i < cnt; i++) {
122*1b481fc3SMaciej Żenczykowski fprintf(stdout, " Receive Queue %d\n", i);
123*1b481fc3SMaciej Żenczykowski fprintf(stdout, " ----------------\n");
124*1b481fc3SMaciej Żenczykowski fprintf(stdout,
125*1b481fc3SMaciej Żenczykowski " RXPROD1 (Receive Ring Producer Register) 1 0x%x\n",
126*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
127*1b481fc3SMaciej Żenczykowski fprintf(stdout,
128*1b481fc3SMaciej Żenczykowski " RXPROD2 (Receive Ring Producer Register) 2 0x%x\n",
129*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
130*1b481fc3SMaciej Żenczykowski fprintf(stdout,
131*1b481fc3SMaciej Żenczykowski " Receive Ring 0\n");
132*1b481fc3SMaciej Żenczykowski fprintf(stdout,
133*1b481fc3SMaciej Żenczykowski " Base Address 0x%08x%08x\n",
134*1b481fc3SMaciej Żenczykowski regs_buff[j+1], regs_buff[j]);
135*1b481fc3SMaciej Żenczykowski j += 2;
136*1b481fc3SMaciej Żenczykowski fprintf(stdout,
137*1b481fc3SMaciej Żenczykowski " Size %u\n",
138*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
139*1b481fc3SMaciej Żenczykowski fprintf(stdout,
140*1b481fc3SMaciej Żenczykowski " next2fill %u\n",
141*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
142*1b481fc3SMaciej Żenczykowski fprintf(stdout,
143*1b481fc3SMaciej Żenczykowski " next2comp %u\n",
144*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
145*1b481fc3SMaciej Żenczykowski fprintf(stdout,
146*1b481fc3SMaciej Żenczykowski " gen %u\n",
147*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
148*1b481fc3SMaciej Żenczykowski
149*1b481fc3SMaciej Żenczykowski fprintf(stdout,
150*1b481fc3SMaciej Żenczykowski " Receive Ring 1\n");
151*1b481fc3SMaciej Żenczykowski fprintf(stdout,
152*1b481fc3SMaciej Żenczykowski " Base Address 0x%08x%08x\n",
153*1b481fc3SMaciej Żenczykowski regs_buff[j+1], regs_buff[j]);
154*1b481fc3SMaciej Żenczykowski j += 2;
155*1b481fc3SMaciej Żenczykowski fprintf(stdout,
156*1b481fc3SMaciej Żenczykowski " Size %u\n",
157*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
158*1b481fc3SMaciej Żenczykowski fprintf(stdout,
159*1b481fc3SMaciej Żenczykowski " next2fill %u\n",
160*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
161*1b481fc3SMaciej Żenczykowski fprintf(stdout,
162*1b481fc3SMaciej Żenczykowski " next2comp %u\n",
163*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
164*1b481fc3SMaciej Żenczykowski fprintf(stdout,
165*1b481fc3SMaciej Żenczykowski " gen %u\n",
166*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
167*1b481fc3SMaciej Żenczykowski
168*1b481fc3SMaciej Żenczykowski fprintf(stdout,
169*1b481fc3SMaciej Żenczykowski " Receive Data Ring\n");
170*1b481fc3SMaciej Żenczykowski fprintf(stdout,
171*1b481fc3SMaciej Żenczykowski " Base Address 0x%08x%08x\n",
172*1b481fc3SMaciej Żenczykowski regs_buff[j+1], regs_buff[j]);
173*1b481fc3SMaciej Żenczykowski j += 2;
174*1b481fc3SMaciej Żenczykowski fprintf(stdout,
175*1b481fc3SMaciej Żenczykowski " Size %u\n",
176*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
177*1b481fc3SMaciej Żenczykowski fprintf(stdout,
178*1b481fc3SMaciej Żenczykowski " Buffer Size %u\n",
179*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
180*1b481fc3SMaciej Żenczykowski
181*1b481fc3SMaciej Żenczykowski fprintf(stdout,
182*1b481fc3SMaciej Żenczykowski " Receive Completion Ring\n");
183*1b481fc3SMaciej Żenczykowski fprintf(stdout,
184*1b481fc3SMaciej Żenczykowski " Base Address 0x%08x%08x\n",
185*1b481fc3SMaciej Żenczykowski regs_buff[j+1], regs_buff[j]);
186*1b481fc3SMaciej Żenczykowski j += 2;
187*1b481fc3SMaciej Żenczykowski fprintf(stdout,
188*1b481fc3SMaciej Żenczykowski " size %u\n",
189*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
190*1b481fc3SMaciej Żenczykowski fprintf(stdout,
191*1b481fc3SMaciej Żenczykowski " next2proc %u\n",
192*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
193*1b481fc3SMaciej Żenczykowski fprintf(stdout,
194*1b481fc3SMaciej Żenczykowski " gen %u\n",
195*1b481fc3SMaciej Żenczykowski regs_buff[j++]);
196*1b481fc3SMaciej Żenczykowski }
197*1b481fc3SMaciej Żenczykowski
198*1b481fc3SMaciej Żenczykowski return 0;
199*1b481fc3SMaciej Żenczykowski }
200