Deleted Added
full compact
ciphy.c (213893) ciphy.c (215297)
1/*-
2 * Copyright (c) 2004
3 * Bill Paul <wpaul@windriver.com>. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 17 unchanged lines hidden (view full) ---

26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
30 * THE POSSIBILITY OF SUCH DAMAGE.
31 */
32
33#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2004
3 * Bill Paul <wpaul@windriver.com>. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 17 unchanged lines hidden (view full) ---

26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
30 * THE POSSIBILITY OF SUCH DAMAGE.
31 */
32
33#include <sys/cdefs.h>
34__FBSDID("$FreeBSD: head/sys/dev/mii/ciphy.c 213893 2010-10-15 14:52:11Z marius $");
34__FBSDID("$FreeBSD: head/sys/dev/mii/ciphy.c 215297 2010-11-14 13:26:10Z marius $");
35
36/*
37 * Driver for the Cicada/Vitesse CS/VSC8xxx 10/100/1000 copper PHY.
38 */
39
40#include <sys/param.h>
41#include <sys/systm.h>
42#include <sys/kernel.h>

--- 117 unchanged lines hidden (view full) ---

160 case IFM_AUTO:
161#ifdef foo
162 /*
163 * If we're already in auto mode, just return.
164 */
165 if (PHY_READ(sc, CIPHY_MII_BMCR) & CIPHY_BMCR_AUTOEN)
166 return (0);
167#endif
35
36/*
37 * Driver for the Cicada/Vitesse CS/VSC8xxx 10/100/1000 copper PHY.
38 */
39
40#include <sys/param.h>
41#include <sys/systm.h>
42#include <sys/kernel.h>

--- 117 unchanged lines hidden (view full) ---

160 case IFM_AUTO:
161#ifdef foo
162 /*
163 * If we're already in auto mode, just return.
164 */
165 if (PHY_READ(sc, CIPHY_MII_BMCR) & CIPHY_BMCR_AUTOEN)
166 return (0);
167#endif
168 (void) mii_phy_auto(sc);
168 (void)mii_phy_auto(sc);
169 break;
170 case IFM_1000_T:
171 speed = CIPHY_S1000;
172 goto setit;
173 case IFM_100_TX:
174 speed = CIPHY_S100;
175 goto setit;
176 case IFM_10_T:

--- 8 unchanged lines hidden (view full) ---

185
186 PHY_WRITE(sc, CIPHY_MII_1000CTL, 0);
187 PHY_WRITE(sc, CIPHY_MII_BMCR, speed);
188 PHY_WRITE(sc, CIPHY_MII_ANAR, CIPHY_SEL_TYPE);
189
190 if (IFM_SUBTYPE(ife->ifm_media) != IFM_1000_T)
191 break;
192
169 break;
170 case IFM_1000_T:
171 speed = CIPHY_S1000;
172 goto setit;
173 case IFM_100_TX:
174 speed = CIPHY_S100;
175 goto setit;
176 case IFM_10_T:

--- 8 unchanged lines hidden (view full) ---

185
186 PHY_WRITE(sc, CIPHY_MII_1000CTL, 0);
187 PHY_WRITE(sc, CIPHY_MII_BMCR, speed);
188 PHY_WRITE(sc, CIPHY_MII_ANAR, CIPHY_SEL_TYPE);
189
190 if (IFM_SUBTYPE(ife->ifm_media) != IFM_1000_T)
191 break;
192
193 gig |= CIPHY_1000CTL_MSE;
194 if ((ife->ifm_media & IFM_ETH_MASTER) != 0)
195 gig |= CIPHY_1000CTL_MSC;
193 PHY_WRITE(sc, CIPHY_MII_1000CTL, gig);
194 PHY_WRITE(sc, CIPHY_MII_BMCR,
196 PHY_WRITE(sc, CIPHY_MII_1000CTL, gig);
197 PHY_WRITE(sc, CIPHY_MII_BMCR,
195 speed|CIPHY_BMCR_AUTOEN|CIPHY_BMCR_STARTNEG);
196
197 /*
198 * When setting the link manually, one side must
199 * be the master and the other the slave. However
200 * ifmedia doesn't give us a good way to specify
201 * this, so we fake it by using one of the LINK
202 * flags. If LINK0 is set, we program the PHY to
203 * be a master, otherwise it's a slave.
204 */
205 if ((mii->mii_ifp->if_flags & IFF_LINK0)) {
206 PHY_WRITE(sc, CIPHY_MII_1000CTL,
207 gig|CIPHY_1000CTL_MSE|CIPHY_1000CTL_MSC);
208 } else {
209 PHY_WRITE(sc, CIPHY_MII_1000CTL,
210 gig|CIPHY_1000CTL_MSE);
211 }
198 speed | CIPHY_BMCR_AUTOEN | CIPHY_BMCR_STARTNEG);
212 break;
213 case IFM_NONE:
199 break;
200 case IFM_NONE:
214 PHY_WRITE(sc, MII_BMCR, BMCR_ISO|BMCR_PDOWN);
201 PHY_WRITE(sc, MII_BMCR, BMCR_ISO | BMCR_PDOWN);
215 break;
202 break;
216 case IFM_100_T4:
217 default:
218 return (EINVAL);
219 }
220 break;
221
222 case MII_TICK:
223 /*
224 * Is the interface even up?

--- 89 unchanged lines hidden (view full) ---

314 bmsr & CIPHY_AUXCSR_SPEED);
315 break;
316 }
317
318 if (bmsr & CIPHY_AUXCSR_FDX)
319 mii->mii_media_active |= IFM_FDX;
320 else
321 mii->mii_media_active |= IFM_HDX;
203 default:
204 return (EINVAL);
205 }
206 break;
207
208 case MII_TICK:
209 /*
210 * Is the interface even up?

--- 89 unchanged lines hidden (view full) ---

300 bmsr & CIPHY_AUXCSR_SPEED);
301 break;
302 }
303
304 if (bmsr & CIPHY_AUXCSR_FDX)
305 mii->mii_media_active |= IFM_FDX;
306 else
307 mii->mii_media_active |= IFM_HDX;
308
309 if ((IFM_SUBTYPE(mii->mii_media_active) == IFM_1000_T) &&
310 (PHY_READ(sc, CIPHY_MII_1000STS) & CIPHY_1000STS_MSR) != 0)
311 mii->mii_media_active |= IFM_ETH_MASTER;
322}
323
324static void
325ciphy_reset(struct mii_softc *sc)
326{
327
328 mii_phy_reset(sc);
329 DELAY(1000);

--- 82 unchanged lines hidden ---
312}
313
314static void
315ciphy_reset(struct mii_softc *sc)
316{
317
318 mii_phy_reset(sc);
319 DELAY(1000);

--- 82 unchanged lines hidden ---