ethtool: update to 3.7
[packages.git] / net / ethtool / patches / 100-ixp4xx.patch
1 --- a/Makefile.am
2 +++ b/Makefile.am
3 @@ -10,7 +10,7 @@ ethtool_SOURCES = ethtool.c ethtool-copy
4                   fec_8xx.c ibm_emac.c ixgb.c ixgbe.c natsemi.c \
5                   pcnet32.c realtek.c tg3.c marvell.c vioc.c    \
6                   smsc911x.c at76c50x-usb.c sfc.c stmmac.c      \
7 -                 rxclass.c sfpid.c sfpdiag.c
8 +                 rxclass.c sfpid.c sfpdiag.c ixp4xx.c
9  
10  TESTS = test-cmdline test-features
11  check_PROGRAMS = test-cmdline test-features
12 --- a/Makefile.in
13 +++ b/Makefile.in
14 @@ -78,7 +78,7 @@ am_ethtool_OBJECTS = ethtool.$(OBJEXT) a
15         tg3.$(OBJEXT) marvell.$(OBJEXT) vioc.$(OBJEXT) \
16         smsc911x.$(OBJEXT) at76c50x-usb.$(OBJEXT) sfc.$(OBJEXT) \
17         stmmac.$(OBJEXT) rxclass.$(OBJEXT) sfpid.$(OBJEXT) \
18 -       sfpdiag.$(OBJEXT)
19 +       sfpdiag.$(OBJEXT) ixp4xx.$(OBJEXT)
20  ethtool_OBJECTS = $(am_ethtool_OBJECTS)
21  ethtool_LDADD = $(LDADD)
22  ethtool_DEPENDENCIES =
23 @@ -286,7 +286,7 @@ ethtool_SOURCES = ethtool.c ethtool-copy
24                   fec_8xx.c ibm_emac.c ixgb.c ixgbe.c natsemi.c \
25                   pcnet32.c realtek.c tg3.c marvell.c vioc.c    \
26                   smsc911x.c at76c50x-usb.c sfc.c stmmac.c      \
27 -                 rxclass.c sfpid.c sfpdiag.c
28 +                 rxclass.c sfpid.c sfpdiag.c ixp4xx.c
29  
30  test_cmdline_SOURCES = test-cmdline.c test-common.c $(ethtool_SOURCES) 
31  test_cmdline_CFLAGS = -DTEST_ETHTOOL
32 @@ -431,6 +431,7 @@ distclean-compile:
33  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sfpid.Po@am__quote@
34  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smsc911x.Po@am__quote@
35  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stmmac.Po@am__quote@
36 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ixp4xx.Po@am__quote@
37  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_cmdline-amd8111e.Po@am__quote@
38  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_cmdline-at76c50x-usb.Po@am__quote@
39  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_cmdline-de2104x.Po@am__quote@
40 --- a/ethtool.c
41 +++ b/ethtool.c
42 @@ -873,6 +873,7 @@ static const struct {
43         { "igb", igb_dump_regs },
44         { "ixgb", ixgb_dump_regs },
45         { "ixgbe", ixgbe_dump_regs },
46 +       { "ixp4xx", ixp4xx_dump_regs },
47         { "natsemi", natsemi_dump_regs },
48         { "e100", e100_dump_regs },
49         { "amd8111e", amd8111e_dump_regs },
50 --- a/internal.h
51 +++ b/internal.h
52 @@ -241,6 +241,9 @@ int st_gmac_dump_regs(struct ethtool_drv
53  /* Et131x ethernet controller */
54  int et131x_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
55  
56 +/* Intel IXP4xx internal MAC */
57 +int ixp4xx_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
58 +
59  /* Rx flow classification */
60  int rxclass_parse_ruleopts(struct cmd_context *ctx,
61                            struct ethtool_rx_flow_spec *fsp);
62 --- /dev/null
63 +++ b/ixp4xx.c
64 @@ -0,0 +1,130 @@
65 +/*
66 + * Copyright (c) 2006 Christian Hohnstaed <chohnstaedt@innominate.com>
67 + * This file is released under the GPLv2
68 + */
69 +
70 +#include <stdio.h>
71 +#include "internal.h"
72 +
73 +#ifndef BIT
74 +#define BIT(x) (1<<x)
75 +#endif
76 +
77 +#define TX_CNTRL1_TX_EN         BIT(0)
78 +#define TX_CNTRL1_DUPLEX        BIT(1)
79 +#define TX_CNTRL1_RETRY         BIT(2)
80 +#define TX_CNTRL1_PAD_EN        BIT(3)
81 +#define TX_CNTRL1_FCS_EN        BIT(4)
82 +#define TX_CNTRL1_2DEFER        BIT(5)
83 +#define TX_CNTRL1_RMII          BIT(6)
84 +
85 +/* TX Control Register 2 */
86 +#define TX_CNTRL2_RETRIES_MASK  0xf
87 +
88 +/* RX Control Register 1 */
89 +#define RX_CNTRL1_RX_EN         BIT(0)
90 +#define RX_CNTRL1_PADSTRIP_EN   BIT(1)
91 +#define RX_CNTRL1_CRC_EN        BIT(2)
92 +#define RX_CNTRL1_PAUSE_EN      BIT(3)
93 +#define RX_CNTRL1_LOOP_EN       BIT(4)
94 +#define RX_CNTRL1_ADDR_FLTR_EN  BIT(5)
95 +#define RX_CNTRL1_RX_RUNT_EN    BIT(6)
96 +#define RX_CNTRL1_BCAST_DIS     BIT(7)
97 +
98 +/* Core Control Register */
99 +#define CORE_RESET              BIT(0)
100 +#define CORE_RX_FIFO_FLUSH      BIT(1)
101 +#define CORE_TX_FIFO_FLUSH      BIT(2)
102 +#define CORE_SEND_JAM           BIT(3)
103 +#define CORE_MDC_EN             BIT(4)
104 +
105 +#define MAC "%02x:%02x:%02x:%02x:%02x:%02x"
106 +#define MAC_DATA(d) (d)[0], (d)[1], (d)[2], (d)[3], (d)[4], (d)[5]
107 +
108 +int ixp4xx_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
109 +{
110 +       u8 *data = regs->data;
111 +
112 +       fprintf(stdout,
113 +               "TXctrl:          0x%02x:0x%02x\n"
114 +               "    Enable:      %s\n"
115 +               "    Duplex:      %s\n"
116 +               "    Retry:       %s (%d)\n"
117 +               "    Padding:     %s\n"
118 +               "    Frame check: %s\n"
119 +               "    TX deferral: %s\n"
120 +               "    Connection:  %s\n"
121 +               "\n",
122 +               data[0], data[1],
123 +               data[0] & TX_CNTRL1_TX_EN   ? "yes"      : "no",
124 +               data[0] & TX_CNTRL1_DUPLEX  ? "half"     : "full",
125 +               data[0] & TX_CNTRL1_RETRY   ? "enabled"  : "disabled",
126 +               data[1] & TX_CNTRL2_RETRIES_MASK,
127 +               data[0] & TX_CNTRL1_PAD_EN  ? "enabled"  : "disabled",
128 +               data[0] & TX_CNTRL1_FCS_EN  ? "enabled"  : "disabled",
129 +               data[0] & TX_CNTRL1_2DEFER  ? "two-part" : "one-part",
130 +               data[0] & TX_CNTRL1_RMII    ? "RMII"     : "Full MII"
131 +       );
132 +
133 +       fprintf(stdout,
134 +               "RXctrl:          0x%02x\n"
135 +               "    Enable:      %s\n"
136 +               "    Pad strip:   %s\n"
137 +               "    CRC check:   %s\n"
138 +               "    Pause:       %s\n"
139 +               "    Loop:        %s\n"
140 +               "    Promiscous:  %s\n"
141 +               "    Runt frames: %s\n"
142 +               "    Broadcast:   %s\n"
143 +               "\n",
144 +               data[2],
145 +               data[2] & RX_CNTRL1_RX_EN        ? "yes"      : "no",
146 +               data[2] & RX_CNTRL1_PADSTRIP_EN  ? "enabled"  : "disabled",
147 +               data[2] & RX_CNTRL1_CRC_EN       ? "enabled"  : "disabled",
148 +               data[2] & RX_CNTRL1_PAUSE_EN     ? "enabled"  : "disabled",
149 +               data[2] & RX_CNTRL1_LOOP_EN      ? "enabled"  : "disabled",
150 +               data[2] & RX_CNTRL1_ADDR_FLTR_EN ? "disabled" : "enabled",
151 +               data[2] & RX_CNTRL1_RX_RUNT_EN   ? "forward"  : "discard",
152 +               data[2] & RX_CNTRL1_BCAST_DIS    ? "disabled" : "enabled"
153 +       );
154 +       fprintf(stdout,
155 +               "Core control:    0x%02x\n"
156 +               "    Core state:  %s\n"
157 +               "    RX fifo:     %s\n"
158 +               "    TX fifo:     %s\n"
159 +               "    Send jam:    %s\n"
160 +               "    MDC clock    %s\n"
161 +               "\n",
162 +               data[32],
163 +               data[32] & CORE_RESET          ? "reset"  : "normal operation",
164 +               data[32] & CORE_RX_FIFO_FLUSH  ? "flush"  : "ok",
165 +               data[32] & CORE_TX_FIFO_FLUSH  ? "flush"  : "ok",
166 +               data[32] & CORE_SEND_JAM       ? "yes"    : "no",
167 +               data[32] & CORE_MDC_EN         ? "output" : "input"
168 +       );
169 +       fprintf(stdout,
170 +               "MAC addresses: \n"
171 +               "  Multicast mask:     " MAC "\n"
172 +               "  Multicast address:  " MAC "\n"
173 +               "  Unicast address:    " MAC "\n"
174 +               "\n",
175 +               MAC_DATA(data+13), MAC_DATA(data+19), MAC_DATA(data+26)
176 +       );
177 +       fprintf(stdout,
178 +               "Random seed:      0x%02x\n"
179 +               "Threshold empty:   %3d\n"
180 +               "Threshold full:    %3d\n"
181 +               "TX buffer size:    %3d\n"
182 +               "TX deferral:       %3d\n"
183 +               "RX deferral:       %3d\n"
184 +               "TX two deferral 1: %3d\n"
185 +               "TX two deferral 2: %3d\n"
186 +               "Slot time:         %3d\n"
187 +               "Internal clock:    %3d\n"
188 +               "\n",
189 +               data[4], data[5], data[6], data[7], data[8], data[9],
190 +               data[10], data[11], data[12], data[25]
191 +       );
192 +
193 +       return 0;
194 +}