Deleted Added
full compact
ukphy.c (213229) ukphy.c (213364)
1/* $NetBSD: ukphy.c,v 1.2 1999/04/23 04:24:32 thorpej Exp $ */
2
3/*-
4 * Copyright (c) 1998, 1999 The NetBSD Foundation, Inc.
5 * All rights reserved.
6 *
7 * This code is derived from software contributed to The NetBSD Foundation
8 * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,

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

50 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
51 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
52 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
53 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
54 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
55 */
56
57#include <sys/cdefs.h>
1/* $NetBSD: ukphy.c,v 1.2 1999/04/23 04:24:32 thorpej Exp $ */
2
3/*-
4 * Copyright (c) 1998, 1999 The NetBSD Foundation, Inc.
5 * All rights reserved.
6 *
7 * This code is derived from software contributed to The NetBSD Foundation
8 * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,

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

50 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
51 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
52 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
53 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
54 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
55 */
56
57#include <sys/cdefs.h>
58__FBSDID("$FreeBSD: head/sys/dev/mii/ukphy.c 213229 2010-09-27 20:31:03Z marius $");
58__FBSDID("$FreeBSD: head/sys/dev/mii/ukphy.c 213364 2010-10-02 18:53:12Z marius $");
59
60/*
61 * driver for generic unknown PHYs
62 */
63
64#include <sys/param.h>
65#include <sys/systm.h>
66#include <sys/kernel.h>

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

125 mii = ma->mii_data;
126 LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
127
128 if (bootverbose)
129 device_printf(dev, "OUI 0x%06x, model 0x%04x, rev. %d\n",
130 MII_OUI(ma->mii_id1, ma->mii_id2),
131 MII_MODEL(ma->mii_id2), MII_REV(ma->mii_id2));
132
59
60/*
61 * driver for generic unknown PHYs
62 */
63
64#include <sys/param.h>
65#include <sys/systm.h>
66#include <sys/kernel.h>

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

125 mii = ma->mii_data;
126 LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
127
128 if (bootverbose)
129 device_printf(dev, "OUI 0x%06x, model 0x%04x, rev. %d\n",
130 MII_OUI(ma->mii_id1, ma->mii_id2),
131 MII_MODEL(ma->mii_id2), MII_REV(ma->mii_id2));
132
133 sc->mii_inst = mii->mii_instance;
133 sc->mii_inst = mii->mii_instance++;
134 sc->mii_phy = ma->mii_phyno;
135 sc->mii_service = ukphy_service;
136 sc->mii_pdata = mii;
137
134 sc->mii_phy = ma->mii_phyno;
135 sc->mii_service = ukphy_service;
136 sc->mii_pdata = mii;
137
138 mii->mii_instance++;
139
140 mii_phy_reset(sc);
141
138 mii_phy_reset(sc);
139
142 sc->mii_capabilities =
143 PHY_READ(sc, MII_BMSR) & ma->mii_capmask;
140 sc->mii_capabilities = PHY_READ(sc, MII_BMSR) & ma->mii_capmask;
144 if (sc->mii_capabilities & BMSR_EXTSTAT)
145 sc->mii_extcapabilities = PHY_READ(sc, MII_EXTSR);
146 device_printf(dev, " ");
147 mii_phy_add_media(sc);
148 printf("\n");
149
150 MIIBUS_MEDIAINIT(sc->mii_dev);
151 mii_phy_setmedia(sc);
152
153 return (0);
154}
155
156static int
157ukphy_service(struct mii_softc *sc, struct mii_data *mii, int cmd)
158{
141 if (sc->mii_capabilities & BMSR_EXTSTAT)
142 sc->mii_extcapabilities = PHY_READ(sc, MII_EXTSR);
143 device_printf(dev, " ");
144 mii_phy_add_media(sc);
145 printf("\n");
146
147 MIIBUS_MEDIAINIT(sc->mii_dev);
148 mii_phy_setmedia(sc);
149
150 return (0);
151}
152
153static int
154ukphy_service(struct mii_softc *sc, struct mii_data *mii, int cmd)
155{
159 struct ifmedia_entry *ife = mii->mii_media.ifm_cur;
160 int reg;
161
162 switch (cmd) {
163 case MII_POLLSTAT:
156
157 switch (cmd) {
158 case MII_POLLSTAT:
164 /*
165 * If we're not polling our PHY instance, just return.
166 */
167 if (IFM_INST(ife->ifm_media) != sc->mii_inst)
168 return (0);
169 break;
170
171 case MII_MEDIACHG:
172 /*
159 break;
160
161 case MII_MEDIACHG:
162 /*
173 * If the media indicates a different PHY instance,
174 * isolate ourselves.
175 */
176 if (IFM_INST(ife->ifm_media) != sc->mii_inst) {
177 reg = PHY_READ(sc, MII_BMCR);
178 PHY_WRITE(sc, MII_BMCR, reg | BMCR_ISO);
179 return (0);
180 }
181
182 /*
183 * If the interface is not up, don't do anything.
184 */
185 if ((mii->mii_ifp->if_flags & IFF_UP) == 0)
186 break;
187
188 mii_phy_setmedia(sc);
189 break;
190
191 case MII_TICK:
163 * If the interface is not up, don't do anything.
164 */
165 if ((mii->mii_ifp->if_flags & IFF_UP) == 0)
166 break;
167
168 mii_phy_setmedia(sc);
169 break;
170
171 case MII_TICK:
192 /*
193 * If we're not currently selected, just return.
194 */
195 if (IFM_INST(ife->ifm_media) != sc->mii_inst)
196 return (0);
197 if (mii_phy_tick(sc) == EJUSTRETURN)
198 return (0);
199 break;
200 }
201
202 /* Update the media status. */
203 ukphy_status(sc);
204
205 /* Callback if something changed. */
206 mii_phy_update(sc, cmd);
207 return (0);
208}
172 if (mii_phy_tick(sc) == EJUSTRETURN)
173 return (0);
174 break;
175 }
176
177 /* Update the media status. */
178 ukphy_status(sc);
179
180 /* Callback if something changed. */
181 mii_phy_update(sc, cmd);
182 return (0);
183}