diff options
author | cvs2git <rtems-devel@rtems.org> | 2010-03-07 17:11:24 +0000 |
---|---|---|
committer | cvs2git <rtems-devel@rtems.org> | 2010-03-07 17:11:24 +0000 |
commit | a9f34b79757de68cdd3f951077be0dd65da6354c (patch) | |
tree | f60c55f42307a08ebee35449d53e450e7f4a3321 /bsd_eth_drivers/libbsdport/miistuff.c | |
parent | - importing updated version from SLAC as of 20090422 (diff) | |
download | libbsdport-a9f34b79757de68cdd3f951077be0dd65da6354c.tar.bz2 |
This commit was manufactured by cvs2svn to create tag 'R_20100307_p0'.R_20100307_p0
Sprout from base 2009-04-22 22:06:58 UTC Till Straumann <strauman@slac.stanford.edu> ' - importing updated version from SLAC as of 20090422'
Cherrypick from master 2010-03-07 17:11:23 UTC Till Straumann <strauman@slac.stanford.edu> '2010-03-07 Till Straumann <Till.Straumann@TU-Berlin.de>':
bsd_eth_drivers/.cvsignore
bsd_eth_drivers/ChangeLog
bsd_eth_drivers/Makefile.am
bsd_eth_drivers/if_bge/.cvsignore
bsd_eth_drivers/if_bge/Makefile.am
bsd_eth_drivers/if_bge/if_bge.c
bsd_eth_drivers/if_bge/if_bgereg.h
bsd_eth_drivers/if_em/.cvsignore
bsd_eth_drivers/if_em/Makefile.am
bsd_eth_drivers/if_em/e1000_manage.c
bsd_eth_drivers/if_em/e1000_manage.h
bsd_eth_drivers/if_em/e1000_osdep.h
bsd_eth_drivers/if_em/if_em.c
bsd_eth_drivers/if_fxp/.cvsignore
bsd_eth_drivers/if_fxp/Makefile.am
bsd_eth_drivers/if_fxp/if_fxp.c
bsd_eth_drivers/if_fxp/if_fxpvar.h
bsd_eth_drivers/if_le/.cvsignore
bsd_eth_drivers/if_pcn/.cvsignore
bsd_eth_drivers/if_pcn/if_pcn.c
bsd_eth_drivers/if_re/.cvsignore
bsd_eth_drivers/if_re/Makefile.am
bsd_eth_drivers/if_re/if_re.c
bsd_eth_drivers/if_re/if_rl.c
bsd_eth_drivers/if_re/if_rlreg.h
bsd_eth_drivers/libbsdport/.cvsignore
bsd_eth_drivers/libbsdport/Makefile.am
bsd_eth_drivers/libbsdport/alldrv.c
bsd_eth_drivers/libbsdport/bus.h
bsd_eth_drivers/libbsdport/callout.h
bsd_eth_drivers/libbsdport/devicet.c
bsd_eth_drivers/libbsdport/ifmedia.c
bsd_eth_drivers/libbsdport/libbsdport.h
bsd_eth_drivers/libbsdport/libbsdport_api.h
bsd_eth_drivers/libbsdport/libbsdport_post.h
bsd_eth_drivers/libbsdport/miistuff.c
bsd_eth_drivers/libbsdport/misc.c
bsd_eth_drivers/libbsdport/mutex.h
bsd_eth_drivers/libbsdport/rtems_callout.c
bsd_eth_drivers/libbsdport/sysbus.c
bsd_eth_drivers/libbsdport/taskqueue.h
bsd_eth_drivers/links.am
Cherrypick from freebsd_orig 2009-04-23 04:52:05 UTC Till Straumann <strauman@slac.stanford.edu> ' - importing original 'releng_7_1' version of FXP driver from FreeBSD.':
bsd_eth_drivers/if_fxp/if_fxpreg.h
bsd_eth_drivers/if_fxp/rcvbundl.h
Delete:
INSTALL
Makefile.am
bootstrap
config.h.in
configure.ac
m4/acinclude.m4
m4/config-if-present.m4
m4/cvstag.m4
m4/multilib-fix.m4
m4/multilib-installdir.m4
m4/rtems-bsp-postlink.m4
m4/rtems-bsplist.m4
m4/rtems-check-libargs.m4
m4/rtems-checkprog.m4
m4/rtems-checktool.m4
m4/rtems-checktop.m4
m4/rtems-fixup-prefix.m4
m4/rtems-isml.m4
m4/rtems-ismultibsp.m4
m4/rtems-isrtems.m4
m4/rtems-makevars.m4
m4/rtems-multilib.m4
m4/rtems-options.m4
m4/rtems-setup-recurse.m4
m4/rtems-tools.m4
m4/rtems-trim-builddir.m4
m4/rtems-verscheck.m4
makefile.top.am
makefile.top.in
rtems-pre.am
rtems.am
ssrlApps.components.in
Diffstat (limited to 'bsd_eth_drivers/libbsdport/miistuff.c')
-rw-r--r-- | bsd_eth_drivers/libbsdport/miistuff.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/bsd_eth_drivers/libbsdport/miistuff.c b/bsd_eth_drivers/libbsdport/miistuff.c new file mode 100644 index 0000000..b15545f --- /dev/null +++ b/bsd_eth_drivers/libbsdport/miistuff.c @@ -0,0 +1,58 @@ +#include <rtems.h> +#define _KERNEL +#include <rtems/rtems_bsdnet.h> +#include <rtems/rtems_bsdnet_internal.h> + +#include <bsp/rtems_verscheck.h> + +#include <sys/malloc.h> +#include <sys/errno.h> +#include <sys/socket.h> +#include <sys/sockio.h> +#include <net/if.h> +#include <net/if_media.h> +#include <rtems/rtems_mii_ioctl.h> + +#define PHY_MAX 32 + +#undef DEBUG + +/* A helper to find the active PHY. We really should port + * the entire BSD miibus/phy support but that's a bigger + * project... + */ +int +rtems_mii_phy_probe(struct rtems_mdio_info *mdio, void *softc) +{ +int phy; +uint32_t bmsr, bmcr; + for ( phy = 0; phy<PHY_MAX; phy++ ) { + if ( mdio->mdio_r(phy, softc, MII_BMSR, &bmsr) ) + continue; + + bmsr &= 0xffff; + + if ( 0 == bmsr || 0xffff == bmsr ) + continue; /* nothing here */ + + /* no media supported ? */ + if ( 0 == ((BMSR_EXTSTAT | 0xfe00) & bmsr ) ) + continue; /* probably nothing there */ + + if ( mdio->mdio_r(phy, softc, MII_BMCR, &bmcr) ) + continue; + + /* skip isolated or powered-down phys */ + if ( (BMCR_PDOWN | BMCR_ISO) & bmcr ) + continue; + +#ifdef DEBUG + printk("PHY #%u seems active; link status is %s\n", phy, BMSR_LINK & bmsr ? "UP" : "DOWN"); +#endif + + /* seems we found one */ + return phy; + } + + return -1; +} |