Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 4 Mar 2013 17:35:11 +0000 (UTC)
From:      John Baldwin <jhb@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org
Subject:   svn commit: r247805 - stable/8/sys/dev/an
Message-ID:  <201303041735.r24HZBof041106@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jhb
Date: Mon Mar  4 17:35:10 2013
New Revision: 247805
URL: http://svnweb.freebsd.org/changeset/base/247805

Log:
  MFC 199757:
  - For 350 chips, don't set various INTR bits in TX control word; turning INTR
    bits on seems to confuse hardware TX engine.
  - For 350 chips, set TX desc's buffer physical address before turning on the
    TX desc valid bit.
  
  PR:		kern/85886

Modified:
  stable/8/sys/dev/an/if_an.c
  stable/8/sys/dev/an/if_anreg.h
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/dev/   (props changed)
  stable/8/sys/dev/an/   (props changed)

Modified: stable/8/sys/dev/an/if_an.c
==============================================================================
--- stable/8/sys/dev/an/if_an.c	Mon Mar  4 16:55:16 2013	(r247804)
+++ stable/8/sys/dev/an/if_an.c	Mon Mar  4 17:35:10 2013	(r247805)
@@ -2803,7 +2803,7 @@ an_start(struct ifnet *ifp)
 				   tx_frame_802_3.an_tx_802_3_payload_len,
 				   (caddr_t)&sc->an_txbuf);
 
-			txcontrol = AN_TXCTL_8023;
+			txcontrol = AN_TXCTL_8023 | AN_TXCTL_HW(sc->mpi350);
 			/* write the txcontrol only */
 			an_write_data(sc, id, 0x08, (caddr_t)&txcontrol,
 				      sizeof(txcontrol));
@@ -2866,7 +2866,7 @@ an_start(struct ifnet *ifp)
 				   tx_frame_802_3.an_tx_802_3_payload_len,
 				   (caddr_t)&sc->an_txbuf);
 
-			txcontrol = AN_TXCTL_8023;
+			txcontrol = AN_TXCTL_8023 | AN_TXCTL_HW(sc->mpi350);
 			/* write the txcontrol only */
 			bcopy((caddr_t)&txcontrol, &buf[0x08],
 			      sizeof(txcontrol));
@@ -2888,7 +2888,7 @@ an_start(struct ifnet *ifp)
 			    tx_frame_802_3.an_tx_802_3_payload_len;
 			an_tx_desc.an_phys
 			    = sc->an_tx_buffer[idx].an_dma_paddr;
-			for (i = 0; i < sizeof(an_tx_desc) / 4 ; i++) {
+			for (i = sizeof(an_tx_desc) / 4 - 1; i >= 0; i--) {
 				CSR_MEM_AUX_WRITE_4(sc, AN_TX_DESC_OFFSET
 				    /* zero for now */
 				    + (0 * sizeof(an_tx_desc))

Modified: stable/8/sys/dev/an/if_anreg.h
==============================================================================
--- stable/8/sys/dev/an/if_anreg.h	Mon Mar  4 16:55:16 2013	(r247804)
+++ stable/8/sys/dev/an/if_anreg.h	Mon Mar  4 17:35:10 2013	(r247805)
@@ -394,13 +394,18 @@ struct an_txframe_802_3 {
 #define AN_PAYLOADTYPE_ETHER	0x0000
 #define AN_PAYLOADTYPE_LLC	0x0010
 
-#define AN_TXCTL_80211	\
-	(AN_TXCTL_TXOK_INTR|AN_TXCTL_TXERR_INTR|AN_HEADERTYPE_80211|	\
-	AN_PAYLOADTYPE_LLC|AN_TXCTL_NORELEASE)
-
-#define AN_TXCTL_8023	\
-	(AN_TXCTL_TXOK_INTR|AN_TXCTL_TXERR_INTR|AN_HEADERTYPE_8023|	\
-	AN_PAYLOADTYPE_ETHER|AN_TXCTL_NORELEASE)
+#define AN_TXCTL_80211		(AN_HEADERTYPE_80211|AN_PAYLOADTYPE_LLC)
+
+#define AN_TXCTL_8023		(AN_HEADERTYPE_8023|AN_PAYLOADTYPE_ETHER)
+
+/*
+ * Additions to transmit control bits for MPI350
+ */
+#define	AN_TXCTL_HW(x)	\
+	( x ? (AN_TXCTL_NORELEASE) \
+	  : \
+	      (AN_TXCTL_TXOK_INTR|AN_TXCTL_TXERR_INTR|AN_TXCTL_NORELEASE) \
+	      )
 
 #define AN_TXGAP_80211		0
 #define AN_TXGAP_8023		0



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