aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/etherswitch/mdio_if.m
diff options
context:
space:
mode:
authorAdrian Chadd <adrian@FreeBSD.org>2012-05-01 06:11:38 +0000
committerAdrian Chadd <adrian@FreeBSD.org>2012-05-01 06:11:38 +0000
commit4574da7fee8c358cbae84e7030b6701b8cad0f59 (patch)
treed50a940ec073bc183416ae5258cbbf4502881f45 /sys/dev/etherswitch/mdio_if.m
parent803a5133e81487f572c137f9386b8b2918116dd0 (diff)
downloadsrc-4574da7fee8c358cbae84e7030b6701b8cad0f59.tar.gz
src-4574da7fee8c358cbae84e7030b6701b8cad0f59.zip
Bring over the first part of the etherswitch framework - an MDIO bus and
MDIO/MII rendezvous proxy. * Add an 'mdio' bus, which is the "IO" side of an MII bus (but by design can be anything which implements the underlying register access API.) * Add 'miiproxy' and 'mdioproxy', which provides a rendezvous mechanism for MII busses to appear hanging off arbitrary busses (ie, that aren't necessarily a traditional looking MII bus.) MII busses can now hang off anything that implements an mdiobus. For the AR71xx SoC, there's one MDIO bus but two MII busses. So to properly support two or more real PHYs, this can be done: # arge0 MDIO bus - there's no arge1 MDIO bus for AR71xx hint.argemdio.0.at="nexus0" hint.argemdio.0.maddr=0x19000000 hint.argemdio.0.msize=0x1000 hint.argemdio.0.order=0 # Create two mdioproxy instances hint.mdioproxy.0.at="mdio0" hint.mdioproxy.1.at="mdio0" # .. and with a follow-up patch hint.arge.0.mdio=mdioproxy0 hint.arge.1.mdio=mdioproxy0 TODO: * Do a sweep or two and add appropriate locking in mdio/mdioproxy/miiproxy. Submitted by: Stefan Bethke <stb@lassitu.de> Reviewed by: ray
Notes
Notes: svn path=/head/; revision=234861
Diffstat (limited to 'sys/dev/etherswitch/mdio_if.m')
-rw-r--r--sys/dev/etherswitch/mdio_if.m24
1 files changed, 24 insertions, 0 deletions
diff --git a/sys/dev/etherswitch/mdio_if.m b/sys/dev/etherswitch/mdio_if.m
new file mode 100644
index 000000000000..9aedd92d292b
--- /dev/null
+++ b/sys/dev/etherswitch/mdio_if.m
@@ -0,0 +1,24 @@
+# $FreeBSD$
+
+#include <sys/bus.h>
+
+INTERFACE mdio;
+
+#
+# Read register from device on MDIO bus
+#
+METHOD int readreg {
+ device_t dev;
+ int phy;
+ int reg;
+};
+
+#
+# Write register to device on MDIO bus
+#
+METHOD int writereg {
+ device_t dev;
+ int phy;
+ int reg;
+ int val;
+};