svn commit: r187967 - user/thompsa/usb/sys/dev/usb2/ethernet
Andrew Thompson
thompsa at FreeBSD.org
Sat Jan 31 14:39:04 PST 2009
Author: thompsa
Date: Sat Jan 31 22:39:03 2009
New Revision: 187967
URL: http://svn.freebsd.org/changeset/base/187967
Log:
Add sysctl information for the parent device.
Suggested by: sam
Modified:
user/thompsa/usb/sys/dev/usb2/ethernet/usb2_ethernet.c
user/thompsa/usb/sys/dev/usb2/ethernet/usb2_ethernet.h
Modified: user/thompsa/usb/sys/dev/usb2/ethernet/usb2_ethernet.c
==============================================================================
--- user/thompsa/usb/sys/dev/usb2/ethernet/usb2_ethernet.c Sat Jan 31 21:40:27 2009 (r187966)
+++ user/thompsa/usb/sys/dev/usb2/ethernet/usb2_ethernet.c Sat Jan 31 22:39:03 2009 (r187967)
@@ -29,6 +29,8 @@
#include <dev/usb2/core/usb2_busdma.h>
#include <dev/usb2/ethernet/usb2_ethernet.h>
+SYSCTL_NODE(_net, OID_AUTO, ue, CTLFLAG_RD, 0, "USB Ethernet parameters");
+
#define UE_LOCK(_ue) mtx_lock((_ue)->ue_mtx)
#define UE_UNLOCK(_ue) mtx_unlock((_ue)->ue_mtx)
#define UE_LOCK_ASSERT(_ue, t) mtx_assert((_ue)->ue_mtx, t)
@@ -76,10 +78,21 @@ usb2_ether_getsc(struct usb2_ether *ue)
return (ue->ue_sc);
}
+static int
+ue_sysctl_parent(SYSCTL_HANDLER_ARGS)
+{
+ struct usb2_ether *ue = arg1;
+ const char *name;
+
+ name = device_get_nameunit(ue->ue_dev);
+ return SYSCTL_OUT(req, name, strlen(name));
+}
+
int
usb2_ether_ifattach(struct usb2_ether *ue, const u_int8_t *eaddr)
{
struct ifnet *ifp;
+ char num[14]; /* sufficient for 32 bits */
int error;
ue->ue_unit = alloc_unr(ueunit);
@@ -88,6 +101,7 @@ usb2_ether_ifattach(struct usb2_ether *u
USB_TASK_INIT(&ue->ue_media_task, ue_ifmedia_task, ue, ue->ue_mtx);
USB_TASK_INIT(&ue->ue_tick_task, ue_tick_task, ue, ue->ue_mtx);
usb2_callout_init_mtx(&ue->ue_watchdog, ue->ue_mtx, 0);
+ sysctl_ctx_init(&ue->ue_sysctl_ctx);
error = usb2_proc_create(&ue->ue_tq, USB_PRI_MED,
device_get_nameunit(ue->ue_dev));
@@ -126,6 +140,15 @@ usb2_ether_ifattach(struct usb2_ether *u
if_printf(ifp, "<USB Ethernet> on %s\n", device_get_nameunit(ue->ue_dev));
ether_ifattach(ifp, eaddr);
+
+ snprintf(num, sizeof(num), "%u", ue->ue_unit);
+ ue->ue_sysctl_oid = SYSCTL_ADD_NODE(&ue->ue_sysctl_ctx,
+ &SYSCTL_NODE_CHILDREN(_net, ue),
+ OID_AUTO, num, CTLFLAG_RD, NULL, "");
+ SYSCTL_ADD_PROC(&ue->ue_sysctl_ctx,
+ SYSCTL_CHILDREN(ue->ue_sysctl_oid), OID_AUTO,
+ "%parent", CTLFLAG_RD, ue, 0,
+ ue_sysctl_parent, "A", "parent device");
return (0);
error:
@@ -155,6 +178,7 @@ usb2_ether_ifdetach(struct usb2_ether *u
device_delete_child(ue->ue_dev, ue->ue_miibus);
ether_ifdetach(ifp);
if_free(ifp);
+ sysctl_ctx_free(&ue->ue_sysctl_ctx);
free_unr(ueunit, ue->ue_unit);
}
Modified: user/thompsa/usb/sys/dev/usb2/ethernet/usb2_ethernet.h
==============================================================================
--- user/thompsa/usb/sys/dev/usb2/ethernet/usb2_ethernet.h Sat Jan 31 21:40:27 2009 (r187966)
+++ user/thompsa/usb/sys/dev/usb2/ethernet/usb2_ethernet.h Sat Jan 31 22:39:03 2009 (r187967)
@@ -58,6 +58,8 @@ struct usb2_ether {
void *ue_sc;
int ue_unit;
+ struct sysctl_ctx_list ue_sysctl_ctx;
+ struct sysctl_oid *ue_sysctl_oid;
struct ifqueue ue_rxq;
More information about the svn-src-user
mailing list