Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 20 Feb 2010 22:24:24 +0000 (UTC)
From:      Pyun YongHyeon <yongari@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r204146 - head/sys/dev/msk
Message-ID:  <201002202224.o1KMOOfb035656@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: yongari
Date: Sat Feb 20 22:24:24 2010
New Revision: 204146
URL: http://svn.freebsd.org/changeset/base/204146

Log:
  Correct inversed programming of ethernet hardware address on
  big-endian architecture.
  
  Submitted by:	C. Jayachandran <c.jayachandran at gmail dot com> (initial version)

Modified:
  head/sys/dev/msk/if_msk.c

Modified: head/sys/dev/msk/if_msk.c
==============================================================================
--- head/sys/dev/msk/if_msk.c	Sat Feb 20 22:09:48 2010	(r204145)
+++ head/sys/dev/msk/if_msk.c	Sat Feb 20 22:24:24 2010	(r204146)
@@ -3713,10 +3713,10 @@ msk_init_locked(struct msk_if_softc *sc_
 	struct msk_softc *sc;
 	struct ifnet *ifp;
 	struct mii_data	 *mii;
-	uint16_t eaddr[ETHER_ADDR_LEN / 2];
+	uint8_t *eaddr;
 	uint16_t gmac;
 	uint32_t reg;
-	int error, i;
+	int error;
 
 	MSK_IF_LOCK_ASSERT(sc_if);
 
@@ -3785,14 +3785,20 @@ msk_init_locked(struct msk_if_softc *sc_
 	GMAC_WRITE_2(sc, sc_if->msk_port, GM_SERIAL_MODE, gmac);
 
 	/* Set station address. */
-        bcopy(IF_LLADDR(ifp), eaddr, ETHER_ADDR_LEN);
-        for (i = 0; i < ETHER_ADDR_LEN /2; i++)
-		GMAC_WRITE_2(sc, sc_if->msk_port, GM_SRC_ADDR_1L + i * 4,
-		    eaddr[i]);
-        for (i = 0; i < ETHER_ADDR_LEN /2; i++)
-		GMAC_WRITE_2(sc, sc_if->msk_port, GM_SRC_ADDR_2L + i * 4,
-		    eaddr[i]);
-
+	eaddr = IF_LLADDR(ifp);
+	GMAC_WRITE_2(sc, sc_if->msk_port, GM_SRC_ADDR_1L,
+	    eaddr[0] | (eaddr[1] << 8));
+	GMAC_WRITE_2(sc, sc_if->msk_port, GM_SRC_ADDR_1M,
+	    eaddr[2] | (eaddr[3] << 8));
+	GMAC_WRITE_2(sc, sc_if->msk_port, GM_SRC_ADDR_1H,
+	    eaddr[4] | (eaddr[5] << 8));
+	GMAC_WRITE_2(sc, sc_if->msk_port, GM_SRC_ADDR_2L,
+	    eaddr[0] | (eaddr[1] << 8));
+	GMAC_WRITE_2(sc, sc_if->msk_port, GM_SRC_ADDR_2M,
+	    eaddr[2] | (eaddr[3] << 8));
+	GMAC_WRITE_2(sc, sc_if->msk_port, GM_SRC_ADDR_2H,
+	    eaddr[4] | (eaddr[5] << 8));
+	
 	/* Disable interrupts for counter overflows. */
 	GMAC_WRITE_2(sc, sc_if->msk_port, GM_TX_IRQ_MSK, 0);
 	GMAC_WRITE_2(sc, sc_if->msk_port, GM_RX_IRQ_MSK, 0);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201002202224.o1KMOOfb035656>