Author: adrian
Date: Wed Feb 19 05:35:41 2014
New Revision: 262203
URL: http://svnweb.freebsd.org/changeset/base/262203

Log:
  Change arswitch_ports_init() to arswitch_port_init(), and teach it to take
  a single port to setup.
  
  This may end up later being used as part of some logic to program
  the PHY for a single port, rather than having to reinitialise them
  all at once.
  
  Tested:
  
  * DB120

Modified:
  head/sys/dev/etherswitch/arswitch/arswitch.c

Modified: head/sys/dev/etherswitch/arswitch/arswitch.c
==============================================================================
--- head/sys/dev/etherswitch/arswitch/arswitch.c        Wed Feb 19 05:09:47 
2014        (r262202)
+++ head/sys/dev/etherswitch/arswitch/arswitch.c        Wed Feb 19 05:35:41 
2014        (r262203)
@@ -224,24 +224,23 @@ arswitch_set_vlan_mode(struct arswitch_s
 }
 
 static void
-arswitch_ports_init(struct arswitch_softc *sc)
+arswitch_port_init(struct arswitch_softc *sc, int port)
 {
-       int port;
 
        /* Port0 - CPU */
-       arswitch_writereg(sc->sc_dev, AR8X16_REG_PORT_STS(0),
-           (AR8X16_IS_SWITCH(sc, AR8216) ?
-           AR8X16_PORT_STS_SPEED_100 : AR8X16_PORT_STS_SPEED_1000) |
-           (AR8X16_IS_SWITCH(sc, AR8216) ? 0 : AR8X16_PORT_STS_RXFLOW) |
-           (AR8X16_IS_SWITCH(sc, AR8216) ? 0 : AR8X16_PORT_STS_TXFLOW) |
-           AR8X16_PORT_STS_RXMAC |
-           AR8X16_PORT_STS_TXMAC |
-           AR8X16_PORT_STS_DUPLEX);
-       arswitch_writereg(sc->sc_dev, AR8X16_REG_PORT_CTRL(0),
-           arswitch_readreg(sc->sc_dev, AR8X16_REG_PORT_CTRL(0)) &
-           ~AR8X16_PORT_CTRL_HEADER);
-
-       for (port = 1; port <= sc->numphys; port++) { 
+       if (port == AR8X16_PORT_CPU) {
+               arswitch_writereg(sc->sc_dev, AR8X16_REG_PORT_STS(0),
+                   (AR8X16_IS_SWITCH(sc, AR8216) ?
+                   AR8X16_PORT_STS_SPEED_100 : AR8X16_PORT_STS_SPEED_1000) |
+                   (AR8X16_IS_SWITCH(sc, AR8216) ? 0 : AR8X16_PORT_STS_RXFLOW) 
|
+                   (AR8X16_IS_SWITCH(sc, AR8216) ? 0 : AR8X16_PORT_STS_TXFLOW) 
|
+                   AR8X16_PORT_STS_RXMAC |
+                   AR8X16_PORT_STS_TXMAC |
+                   AR8X16_PORT_STS_DUPLEX);
+               arswitch_writereg(sc->sc_dev, AR8X16_REG_PORT_CTRL(0),
+                   arswitch_readreg(sc->sc_dev, AR8X16_REG_PORT_CTRL(0)) &
+                   ~AR8X16_PORT_CTRL_HEADER);
+       } else {
                /* Set ports to auto negotiation. */
                arswitch_writereg(sc->sc_dev, AR8X16_REG_PORT_STS(port),
                    AR8X16_PORT_STS_LINK_AUTO);
@@ -256,6 +255,7 @@ arswitch_attach(device_t dev)
 {
        struct arswitch_softc *sc;
        int err = 0;
+       int port;
 
        sc = device_get_softc(dev);
 
@@ -319,7 +319,9 @@ arswitch_attach(device_t dev)
                return (err);
 
        /* Initialize the switch ports. */
-       arswitch_ports_init(sc);
+       for (port = 0; port <= sc->numphys; port++) {
+               arswitch_port_init(sc, port);
+       }
 
        /*
         * Attach the PHYs and complete the bus enumeration.
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to