svn commit: r207149 - user/jmallett/octeon/sys/mips/cavium/octe

Juli Mallett jmallett at FreeBSD.org
Sat Apr 24 09:57:20 UTC 2010


Author: jmallett
Date: Sat Apr 24 09:57:18 2010
New Revision: 207149
URL: http://svn.freebsd.org/changeset/base/207149

Log:
  Add a stub ioctl, enough to call our not-quite-right medstat function.

Modified:
  user/jmallett/octeon/sys/mips/cavium/octe/octe.c

Modified: user/jmallett/octeon/sys/mips/cavium/octe/octe.c
==============================================================================
--- user/jmallett/octeon/sys/mips/cavium/octe/octe.c	Sat Apr 24 09:43:10 2010	(r207148)
+++ user/jmallett/octeon/sys/mips/cavium/octe/octe.c	Sat Apr 24 09:57:18 2010	(r207149)
@@ -46,19 +46,22 @@
 #include <sys/sockio.h>
 #include <sys/sysctl.h>
 
+#include <net/ethernet.h>
 #include <net/if.h>
 #include <net/if_types.h>
 
 #include "wrapper-cvmx-includes.h"
 #include "cavium-ethernet.h"
 
-static int		octe_probe(device_t dev);
-static int		octe_attach(device_t dev);
-static int		octe_detach(device_t dev);
-static int		octe_shutdown(device_t dev);
+static int		octe_probe(device_t);
+static int		octe_attach(device_t);
+static int		octe_detach(device_t);
+static int		octe_shutdown(device_t);
 
-static int		octe_medchange(struct ifnet *ifp);
-static void		octe_medstat(struct ifnet *ifp, struct ifmediareq *ifm);
+static int		octe_medchange(struct ifnet *);
+static void		octe_medstat(struct ifnet *, struct ifmediareq *);
+
+static int		octe_ioctl(struct ifnet *, u_long, caddr_t);
 
 static device_method_t octe_methods[] = {
 	/* Device interface */
@@ -111,6 +114,8 @@ octe_attach(device_t dev)
 	ifmedia_add(&priv->media, IFM_ETHER | IFM_AUTO, 0, NULL);
 	ifmedia_set(&priv->media, IFM_ETHER | IFM_AUTO);
 
+	ifp->if_ioctl = octe_ioctl;
+
 	return (0);
 }
 
@@ -138,10 +143,13 @@ octe_medstat(struct ifnet *ifp, struct i
 	cvm_oct_private_t *priv;
 	cvmx_helper_link_info_t link_info;
 
+	priv = ifp->if_softc;
+
 	ifm->ifm_status = IFM_AVALID;
 	ifm->ifm_active = IFT_ETHER;
 
-	priv = ifp->if_softc;
+	if (priv->poll == NULL)
+		return;
 	priv->poll(ifp);
 
 	link_info.u64 = priv->link_info;
@@ -171,3 +179,29 @@ octe_medstat(struct ifnet *ifp, struct i
 	else
 		ifm->ifm_active |= IFM_HDX;
 }
+
+static int
+octe_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
+{
+	cvm_oct_private_t *priv;
+	struct ifreq *ifr;
+	int error;
+
+	priv = ifp->if_softc;
+	ifr = (struct ifreq *)data;
+
+	switch (cmd) {
+	case SIOCSIFMEDIA:
+	case SIOCGIFMEDIA:
+		error = ifmedia_ioctl(ifp, ifr, &priv->media, cmd);
+		if (error != 0)
+			return (error);
+		return (0);
+	
+	default:
+		error = ether_ioctl(ifp, cmd, data);
+		if (error != 0)
+			return (error);
+		return (0);
+	}
+}


More information about the svn-src-user mailing list