From owner-svn-src-user@FreeBSD.ORG  Sat Apr 24 09:57:20 2010
Return-Path: <owner-svn-src-user@FreeBSD.ORG>
Delivered-To: svn-src-user@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 0B0441065673;
	Sat, 24 Apr 2010 09:57:20 +0000 (UTC)
	(envelope-from jmallett@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id D5B2A8FC25;
	Sat, 24 Apr 2010 09:57:19 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o3O9vIvE093670;
	Sat, 24 Apr 2010 09:57:18 GMT
	(envelope-from jmallett@svn.freebsd.org)
Received: (from jmallett@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id o3O9vIfG093668;
	Sat, 24 Apr 2010 09:57:18 GMT
	(envelope-from jmallett@svn.freebsd.org)
Message-Id: <201004240957.o3O9vIfG093668@svn.freebsd.org>
From: Juli Mallett <jmallett@FreeBSD.org>
Date: Sat, 24 Apr 2010 09:57:18 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r207149 - user/jmallett/octeon/sys/mips/cavium/octe
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
	src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sat, 24 Apr 2010 09:57:20 -0000

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