socsvn commit: r303799 - soc2016/vincenzo/head/sys/dev/netmap

vincenzo at FreeBSD.org vincenzo at FreeBSD.org
Tue May 24 17:01:51 UTC 2016


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
+}


More information about the svn-soc-all mailing list