Date: Tue, 24 May 2016 17:01:50 GMT From: vincenzo@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r303799 - soc2016/vincenzo/head/sys/dev/netmap Message-ID: <201605241701.u4OH1oe2064335@socsvn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: vincenzo Date: Tue May 24 17:01:49 2016 New Revision: 303799 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=303799 Log: ptnet_attach: initialize ifmedia struct Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c ============================================================================== --- soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Tue May 24 16:41:37 2016 (r303798) +++ soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Tue May 24 17:01:49 2016 (r303799) @@ -87,6 +87,7 @@ struct ptnet_softc { device_t dev; struct ifnet *ifp; + struct ifmedia media; }; static int ptnet_probe(device_t); @@ -96,6 +97,12 @@ static int ptnet_resume(device_t); static int ptnet_shutdown(device_t); +static void ptnet_init(void *opaque); +static void ptnet_start(struct ifnet *ifp); + +static int ptnet_media_change(struct ifnet *ifp); +static void ptnet_media_status(struct ifnet *ifp, struct ifmediareq *ifmr); + static device_method_t ptnet_methods[] = { DEVMETHOD(device_probe, ptnet_probe), DEVMETHOD(device_attach, ptnet_attach), @@ -152,13 +159,18 @@ if_initbaudrate(ifp, IF_Gbps(10)); ifp->if_softc = sc; ifp->if_flags = IFF_BROADCAST | IFF_MULTICAST | IFF_SIMPLEX; - ifp->if_init = NULL; - ifp->if_start = NULL; + ifp->if_init = ptnet_init; + ifp->if_start = ptnet_start; IFQ_SET_MAXLEN(&ifp->if_snd, 255); ifp->if_snd.ifq_drv_maxlen = 255; IFQ_SET_READY(&ifp->if_snd); + ifmedia_init(&sc->media, IFM_IMASK, ptnet_media_change, + ptnet_media_status); + ifmedia_add(&sc->media, IFM_ETHER | IFM_10G_T | IFM_FDX, 0, NULL); + ifmedia_set(&sc->media, IFM_ETHER | IFM_10G_T | IFM_FDX); + return (0); } @@ -201,3 +213,45 @@ */ return (ptnet_suspend(dev)); } + +static void +ptnet_init(void *opaque) +{ + struct ptnet_softc *sc = opaque; + (void)sc; +} + +static void +ptnet_start(struct ifnet *ifp) +{ +} + +static int +ptnet_media_change(struct ifnet *ifp) +{ + struct ptnet_softc *sc = ifp->if_softc; + struct ifmedia *ifm = &sc->media; + + if (IFM_TYPE(ifm->ifm_media) != IFM_ETHER) { + return (EINVAL); + } + + return (0); +} + + +static void +ptnet_media_status(struct ifnet *ifp, struct ifmediareq *ifmr) +{ + ifmr->ifm_status = IFM_AVALID; + ifmr->ifm_active = IFM_ETHER; + + //lock + if (1) { + ifmr->ifm_status |= IFM_ACTIVE; + ifmr->ifm_active |= IFM_10G_T | IFM_FDX; + } else { + ifmr->ifm_active |= IFM_NONE; + } + //unlock +}
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201605241701.u4OH1oe2064335>