xref: /aosp_15_r20/external/ethtool/vmxnet3.c (revision 1b481fc3bb1b45d4cf28d1ec12969dc1055f555d)
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