version 1.2, 2007/03/04 05:59:46 |
version 1.3, 2008/01/19 22:10:14 |
Line 205 static void temac_start(struct ifnet *) |
|
Line 205 static void temac_start(struct ifnet *) |
|
static void temac_stop(struct ifnet *, int); |
static void temac_stop(struct ifnet *, int); |
|
|
/* Media management. */ |
/* Media management. */ |
static int temac_mediachange(struct ifnet *); |
|
static void temac_mediastatus(struct ifnet *, struct ifmediareq *); |
|
static int temac_mii_readreg(struct device *, int, int); |
static int temac_mii_readreg(struct device *, int, int); |
static void temac_mii_statchg(struct device *); |
static void temac_mii_statchg(struct device *); |
static void temac_mii_tick(void *); |
static void temac_mii_tick(void *); |
Line 500 temac_attach(struct device *parent, stru |
|
Line 498 temac_attach(struct device *parent, stru |
|
mii->mii_readreg = temac_mii_readreg; |
mii->mii_readreg = temac_mii_readreg; |
mii->mii_writereg = temac_mii_writereg; |
mii->mii_writereg = temac_mii_writereg; |
mii->mii_statchg = temac_mii_statchg; |
mii->mii_statchg = temac_mii_statchg; |
ifmedia_init(&mii->mii_media, 0, temac_mediachange, |
sc->sc_ec.ec_mii = mii; |
temac_mediastatus); |
ifmedia_init(&mii->mii_media, 0, ether_mediachange, ether_mediastatus); |
|
|
mii_attach(&sc->sc_dev, mii, 0xffffffff, MII_PHY_ANY, |
mii_attach(&sc->sc_dev, mii, 0xffffffff, MII_PHY_ANY, |
MII_OFFSET_ANY, 0); |
MII_OFFSET_ANY, 0); |
Line 593 temac_init(struct ifnet *ifp) |
|
Line 591 temac_init(struct ifnet *ifp) |
|
cdmac_rx_reset(sc); |
cdmac_rx_reset(sc); |
|
|
/* Set current media. */ |
/* Set current media. */ |
mii_mediachg(&sc->sc_mii); |
if ((error = ether_mediachange(ifp)) != 0) |
|
return error; |
|
|
callout_schedule(&sc->sc_mii_tick, hz); |
callout_schedule(&sc->sc_mii_tick, hz); |
|
|
/* Enable EMAC engine. */ |
/* Enable EMAC engine. */ |
Line 653 temac_ioctl(struct ifnet *ifp, u_long cm |
|
Line 653 temac_ioctl(struct ifnet *ifp, u_long cm |
|
int s, ret; |
int s, ret; |
|
|
s = splnet(); |
s = splnet(); |
if (sc->sc_dead) { |
if (sc->sc_dead) |
ret = EIO; |
ret = EIO; |
} else |
else |
switch (cmd) { |
ret = ether_ioctl(ifp, cmd, data); |
case SIOCSIFMEDIA: |
|
case SIOCGIFMEDIA: |
|
ret = ifmedia_ioctl(ifp, ifr, &sc->sc_mii.mii_media, |
|
cmd); |
|
break; |
|
|
|
default: |
|
ret = ether_ioctl(ifp, cmd, data); |
|
break; |
|
} |
|
|
|
splx(s); |
splx(s); |
return (ret); |
return (ret); |
} |
} |
Line 839 temac_stop(struct ifnet *ifp, int disabl |
|
Line 828 temac_stop(struct ifnet *ifp, int disabl |
|
ifp->if_flags &= ~(IFF_RUNNING|IFF_OACTIVE); |
ifp->if_flags &= ~(IFF_RUNNING|IFF_OACTIVE); |
} |
} |
|
|
/* |
|
* Media management. |
|
*/ |
|
static int |
|
temac_mediachange(struct ifnet *ifp) |
|
{ |
|
struct temac_softc *sc = (struct temac_softc *)ifp->if_softc; |
|
|
|
if (ifp->if_flags & IFF_UP) |
|
mii_mediachg(&sc->sc_mii); |
|
return (0); |
|
} |
|
|
|
static void |
|
temac_mediastatus(struct ifnet *ifp, struct ifmediareq *imr) |
|
{ |
|
struct temac_softc *sc = (struct temac_softc *)ifp->if_softc; |
|
|
|
mii_pollstat(&sc->sc_mii); |
|
|
|
imr->ifm_status = sc->sc_mii.mii_media_status; |
|
imr->ifm_active = sc->sc_mii.mii_media_active; |
|
} |
|
|
|
static int |
static int |
temac_mii_readreg(struct device *self, int phy, int reg) |
temac_mii_readreg(struct device *self, int phy, int reg) |
{ |
{ |