xref: /aosp_15_r20/external/ethtool/ixgb.c (revision 1b481fc3bb1b45d4cf28d1ec12969dc1055f555d)
1*1b481fc3SMaciej Żenczykowski /* Copyright (c) 2006 Intel Corporation */
2*1b481fc3SMaciej Żenczykowski #include <stdio.h>
3*1b481fc3SMaciej Żenczykowski #include "internal.h"
4*1b481fc3SMaciej Żenczykowski 
5*1b481fc3SMaciej Żenczykowski /* CTRL0 Bit Masks */
6*1b481fc3SMaciej Żenczykowski #define IXGB_CTRL0_LRST           0x00000008
7*1b481fc3SMaciej Żenczykowski #define IXGB_CTRL0_VME            0x40000000
8*1b481fc3SMaciej Żenczykowski 
9*1b481fc3SMaciej Żenczykowski /* STATUS Bit Masks */
10*1b481fc3SMaciej Żenczykowski #define IXGB_STATUS_LU            0x00000002
11*1b481fc3SMaciej Żenczykowski #define IXGB_STATUS_BUS64         0x00001000
12*1b481fc3SMaciej Żenczykowski #define IXGB_STATUS_PCIX_MODE     0x00002000
13*1b481fc3SMaciej Żenczykowski #define IXGB_STATUS_PCIX_SPD_100  0x00004000
14*1b481fc3SMaciej Żenczykowski #define IXGB_STATUS_PCIX_SPD_133  0x00008000
15*1b481fc3SMaciej Żenczykowski 
16*1b481fc3SMaciej Żenczykowski /* RCTL Bit Masks */
17*1b481fc3SMaciej Żenczykowski #define IXGB_RCTL_RXEN            0x00000002
18*1b481fc3SMaciej Żenczykowski #define IXGB_RCTL_SBP             0x00000004
19*1b481fc3SMaciej Żenczykowski #define IXGB_RCTL_UPE             0x00000008
20*1b481fc3SMaciej Żenczykowski #define IXGB_RCTL_MPE             0x00000010
21*1b481fc3SMaciej Żenczykowski #define IXGB_RCTL_RDMTS_MASK      0x00000300
22*1b481fc3SMaciej Żenczykowski #define IXGB_RCTL_RDMTS_1_2       0x00000000
23*1b481fc3SMaciej Żenczykowski #define IXGB_RCTL_RDMTS_1_4       0x00000100
24*1b481fc3SMaciej Żenczykowski #define IXGB_RCTL_RDMTS_1_8       0x00000200
25*1b481fc3SMaciej Żenczykowski #define IXGB_RCTL_BAM             0x00008000
26*1b481fc3SMaciej Żenczykowski #define IXGB_RCTL_BSIZE_MASK      0x00030000
27*1b481fc3SMaciej Żenczykowski #define IXGB_RCTL_BSIZE_4096      0x00010000
28*1b481fc3SMaciej Żenczykowski #define IXGB_RCTL_BSIZE_8192      0x00020000
29*1b481fc3SMaciej Żenczykowski #define IXGB_RCTL_BSIZE_16384     0x00030000
30*1b481fc3SMaciej Żenczykowski #define IXGB_RCTL_VFE             0x00040000
31*1b481fc3SMaciej Żenczykowski #define IXGB_RCTL_CFIEN           0x00080000
32*1b481fc3SMaciej Żenczykowski 
33*1b481fc3SMaciej Żenczykowski /* TCTL Bit Masks */
34*1b481fc3SMaciej Żenczykowski #define IXGB_TCTL_TXEN            0x00000002
35*1b481fc3SMaciej Żenczykowski 
36*1b481fc3SMaciej Żenczykowski /* RAH Bit Masks */
37*1b481fc3SMaciej Żenczykowski #define IXGB_RAH_ASEL_DEST        0x00000000
38*1b481fc3SMaciej Żenczykowski #define IXGB_RAH_ASEL_SRC         0x00010000
39*1b481fc3SMaciej Żenczykowski #define IXGB_RAH_AV               0x80000000
40*1b481fc3SMaciej Żenczykowski 
ixgb_dump_regs(struct ethtool_drvinfo * info __maybe_unused,struct ethtool_regs * regs)41*1b481fc3SMaciej Żenczykowski int ixgb_dump_regs(struct ethtool_drvinfo *info __maybe_unused,
42*1b481fc3SMaciej Żenczykowski 		   struct ethtool_regs *regs)
43*1b481fc3SMaciej Żenczykowski {
44*1b481fc3SMaciej Żenczykowski 	u32 *regs_buff = (u32 *)regs->data;
45*1b481fc3SMaciej Żenczykowski 	u8 version = (u8)(regs->version >> 24);
46*1b481fc3SMaciej Żenczykowski 	u32 reg;
47*1b481fc3SMaciej Żenczykowski 
48*1b481fc3SMaciej Żenczykowski 	if (version != 1)
49*1b481fc3SMaciej Żenczykowski 		return -1;
50*1b481fc3SMaciej Żenczykowski 	fprintf(stdout, "MAC Registers\n");
51*1b481fc3SMaciej Żenczykowski 	fprintf(stdout, "-------------\n");
52*1b481fc3SMaciej Żenczykowski 
53*1b481fc3SMaciej Żenczykowski 	/* Device control register */
54*1b481fc3SMaciej Żenczykowski 	reg = regs_buff[0];
55*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
56*1b481fc3SMaciej Żenczykowski 		"0x00000: CTRL0 (Device control register) 0x%08X\n"
57*1b481fc3SMaciej Żenczykowski 		"      Link reset:                        %s\n"
58*1b481fc3SMaciej Żenczykowski 		"      VLAN mode:                         %s\n",
59*1b481fc3SMaciej Żenczykowski 		reg,
60*1b481fc3SMaciej Żenczykowski 		reg & IXGB_CTRL0_LRST   ? "reset"    : "normal",
61*1b481fc3SMaciej Żenczykowski 		reg & IXGB_CTRL0_VME    ? "enabled"  : "disabled");
62*1b481fc3SMaciej Żenczykowski 
63*1b481fc3SMaciej Żenczykowski 	/* Device status register */
64*1b481fc3SMaciej Żenczykowski 	reg = regs_buff[2];
65*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
66*1b481fc3SMaciej Żenczykowski 		"0x00010: STATUS (Device status register) 0x%08X\n"
67*1b481fc3SMaciej Żenczykowski 		"      Link up:                           %s\n"
68*1b481fc3SMaciej Żenczykowski 		"      Bus type:                          %s\n"
69*1b481fc3SMaciej Żenczykowski 		"      Bus speed:                         %s\n"
70*1b481fc3SMaciej Żenczykowski 		"      Bus width:                         %s\n",
71*1b481fc3SMaciej Żenczykowski 		reg,
72*1b481fc3SMaciej Żenczykowski 		(reg & IXGB_STATUS_LU)        ? "link config" : "no link config",
73*1b481fc3SMaciej Żenczykowski 		(reg & IXGB_STATUS_PCIX_MODE) ? "PCI-X" : "PCI",
74*1b481fc3SMaciej Żenczykowski 			((reg & IXGB_STATUS_PCIX_SPD_133) ? "133MHz" :
75*1b481fc3SMaciej Żenczykowski 			(reg & IXGB_STATUS_PCIX_SPD_100) ? "100MHz" :
76*1b481fc3SMaciej Żenczykowski 			"66MHz"),
77*1b481fc3SMaciej Żenczykowski 		(reg & IXGB_STATUS_BUS64) ? "64-bit" : "32-bit");
78*1b481fc3SMaciej Żenczykowski 	/* Receive control register */
79*1b481fc3SMaciej Żenczykowski 	reg = regs_buff[9];
80*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
81*1b481fc3SMaciej Żenczykowski 		"0x00100: RCTL (Receive control register) 0x%08X\n"
82*1b481fc3SMaciej Żenczykowski 		"      Receiver:                          %s\n"
83*1b481fc3SMaciej Żenczykowski 		"      Store bad packets:                 %s\n"
84*1b481fc3SMaciej Żenczykowski 		"      Unicast promiscuous:               %s\n"
85*1b481fc3SMaciej Żenczykowski 		"      Multicast promiscuous:             %s\n"
86*1b481fc3SMaciej Żenczykowski 		"      Descriptor minimum threshold size: %s\n"
87*1b481fc3SMaciej Żenczykowski 		"      Broadcast accept mode:             %s\n"
88*1b481fc3SMaciej Żenczykowski 		"      VLAN filter:                       %s\n"
89*1b481fc3SMaciej Żenczykowski 		"      Cononical form indicator:          %s\n",
90*1b481fc3SMaciej Żenczykowski 		reg,
91*1b481fc3SMaciej Żenczykowski 		reg & IXGB_RCTL_RXEN    ? "enabled"  : "disabled",
92*1b481fc3SMaciej Żenczykowski 		reg & IXGB_RCTL_SBP     ? "enabled"  : "disabled",
93*1b481fc3SMaciej Żenczykowski 		reg & IXGB_RCTL_UPE     ? "enabled"  : "disabled",
94*1b481fc3SMaciej Żenczykowski 		reg & IXGB_RCTL_MPE     ? "enabled"  : "disabled",
95*1b481fc3SMaciej Żenczykowski 		(reg & IXGB_RCTL_RDMTS_MASK) == IXGB_RCTL_RDMTS_1_2 ? "1/2" :
96*1b481fc3SMaciej Żenczykowski 		(reg & IXGB_RCTL_RDMTS_MASK) == IXGB_RCTL_RDMTS_1_4 ? "1/4" :
97*1b481fc3SMaciej Żenczykowski 		(reg & IXGB_RCTL_RDMTS_MASK) == IXGB_RCTL_RDMTS_1_8 ? "1/8" :
98*1b481fc3SMaciej Żenczykowski 		"reserved",
99*1b481fc3SMaciej Żenczykowski 		reg & IXGB_RCTL_BAM     ? "accept"   : "ignore",
100*1b481fc3SMaciej Żenczykowski 		reg & IXGB_RCTL_VFE     ? "enabled"  : "disabled",
101*1b481fc3SMaciej Żenczykowski 		reg & IXGB_RCTL_CFIEN   ? "enabled"  : "disabled");
102*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
103*1b481fc3SMaciej Żenczykowski 		"      Receive buffer size:               %s\n",
104*1b481fc3SMaciej Żenczykowski 		(reg & IXGB_RCTL_BSIZE_MASK) == IXGB_RCTL_BSIZE_16384 ? "16384" :
105*1b481fc3SMaciej Żenczykowski 		(reg & IXGB_RCTL_BSIZE_MASK) == IXGB_RCTL_BSIZE_8192 ? "8192" :
106*1b481fc3SMaciej Żenczykowski 		(reg & IXGB_RCTL_BSIZE_MASK) == IXGB_RCTL_BSIZE_4096 ? "4096" :
107*1b481fc3SMaciej Żenczykowski 		"2048");
108*1b481fc3SMaciej Żenczykowski 
109*1b481fc3SMaciej Żenczykowski 	/* Receive descriptor registers */
110*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
111*1b481fc3SMaciej Żenczykowski 		"0x00120: RDLEN (Receive desc length)     0x%08X\n",
112*1b481fc3SMaciej Żenczykowski 		regs_buff[14]);
113*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
114*1b481fc3SMaciej Żenczykowski 		"0x00128: RDH   (Receive desc head)       0x%08X\n",
115*1b481fc3SMaciej Żenczykowski 		regs_buff[15]);
116*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
117*1b481fc3SMaciej Żenczykowski 		"0x00130: RDT   (Receive desc tail)       0x%08X\n",
118*1b481fc3SMaciej Żenczykowski 		regs_buff[16]);
119*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
120*1b481fc3SMaciej Żenczykowski 		"0x00138: RDTR  (Receive delay timer)     0x%08X\n",
121*1b481fc3SMaciej Żenczykowski 		regs_buff[17]);
122*1b481fc3SMaciej Żenczykowski 
123*1b481fc3SMaciej Żenczykowski 	/* Transmit control register */
124*1b481fc3SMaciej Żenczykowski 	reg = regs_buff[53];
125*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
126*1b481fc3SMaciej Żenczykowski 		"0x00600: TCTL (Transmit ctrl register)   0x%08X\n"
127*1b481fc3SMaciej Żenczykowski 		"      Transmitter:                       %s\n",
128*1b481fc3SMaciej Żenczykowski 		reg,
129*1b481fc3SMaciej Żenczykowski 		reg & IXGB_TCTL_TXEN      ? "enabled"  : "disabled");
130*1b481fc3SMaciej Żenczykowski 
131*1b481fc3SMaciej Żenczykowski 	/* Transmit descriptor registers */
132*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
133*1b481fc3SMaciej Żenczykowski 		"0x00610: TDLEN (Transmit desc length)    0x%08X\n",
134*1b481fc3SMaciej Żenczykowski 		regs_buff[56]);
135*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
136*1b481fc3SMaciej Żenczykowski 		"0x00618: TDH   (Transmit desc head)      0x%08X\n",
137*1b481fc3SMaciej Żenczykowski 		regs_buff[57]);
138*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
139*1b481fc3SMaciej Żenczykowski 		"0x00620: TDT   (Transmit desc tail)      0x%08X\n",
140*1b481fc3SMaciej Żenczykowski 		regs_buff[58]);
141*1b481fc3SMaciej Żenczykowski 	fprintf(stdout,
142*1b481fc3SMaciej Żenczykowski 		"0x00628: TIDV  (Transmit delay timer)    0x%08X\n",
143*1b481fc3SMaciej Żenczykowski 		regs_buff[59]);
144*1b481fc3SMaciej Żenczykowski 
145*1b481fc3SMaciej Żenczykowski 	return 0;
146*1b481fc3SMaciej Żenczykowski }
147*1b481fc3SMaciej Żenczykowski 
148