summary refs log tree commit diff
path: root/drivers/net/wan/hd64572.c
diff options
context:
space:
mode:
authorKrzysztof Hałasa <khc@pm.waw.pl>2008-07-09 20:01:23 +0200
committerKrzysztof Hałasa <khc@pm.waw.pl>2008-11-22 02:49:47 +0100
commitb0942f78dd6493c5590cc80fedd5e3b357a15334 (patch)
tree386dfc7475e33452a145ea0567dc344c27e8b860 /drivers/net/wan/hd64572.c
parent09fd65aa8ac934ea4ce7e55945a687292731e9c9 (diff)
downloadlinux-b0942f78dd6493c5590cc80fedd5e3b357a15334.tar.gz
WAN: HD64572 already handles TX underruns with DMAC.
Signed-off-by: Krzysztof Hałasa <khc@pm.waw.pl>
Diffstat (limited to 'drivers/net/wan/hd64572.c')
-rw-r--r--drivers/net/wan/hd64572.c32
1 files changed, 15 insertions, 17 deletions
diff --git a/drivers/net/wan/hd64572.c b/drivers/net/wan/hd64572.c
index e332fe906aba..bdb625080a16 100644
--- a/drivers/net/wan/hd64572.c
+++ b/drivers/net/wan/hd64572.c
@@ -232,19 +232,12 @@ static inline void sca_msci_intr(port_t *port)
 {
 	u16 msci = get_msci(port);
 	card_t* card = port_to_card(port);
-	u8 stat = sca_in(msci + ST1, card); /* read MSCI ST1 status */
 
-	/* Reset MSCI TX underrun and CDCD status bit */
-	sca_out(stat & (ST1_UDRN | ST1_CDCD), msci + ST1, card);
-
-	if (stat & ST1_UDRN) {
-		/* TX Underrun error detected */
-		port_to_dev(port)->stats.tx_errors++;
-		port_to_dev(port)->stats.tx_fifo_errors++;
-	}
-
-	if (stat & ST1_CDCD)
+	if (sca_in(msci + ST1, card) & ST1_CDCD) {
+		/* Reset MSCI CDCD status bit */
+		sca_out(ST1_CDCD, msci + ST1, card);
 		sca_set_carrier(port);
+	}
 }
 
 
@@ -351,11 +344,17 @@ static inline void sca_tx_done(port_t *port)
 
 	while (1) {
 		pkt_desc __iomem *desc = desc_address(port, port->txlast, 1);
+		u8 stat = readb(&desc->stat);
 
-		if (!(readb(&desc->stat) & ST_TX_OWNRSHP))
+		if (!(stat & ST_TX_OWNRSHP))
 			break; /* not yet transmitted */
-		dev->stats.tx_packets++;
-		dev->stats.tx_bytes += readw(&desc->len);
+		if (stat & ST_TX_UNDRRUN) {
+			dev->stats.tx_errors++;
+			dev->stats.tx_fifo_errors++;
+		} else {
+			dev->stats.tx_packets++;
+			dev->stats.tx_bytes += readw(&desc->len);
+		}
 		writeb(0, &desc->stat);	/* Free descriptor */
 		port->txlast = next_desc(port, port->txlast, 1);
 	}
@@ -503,12 +502,11 @@ static void sca_open(struct net_device *dev)
 	sca_out(0x3F, msci + TNR1, card); /* +1=TX DMA deactivation condition*/
 
 /* We're using the following interrupts:
-   - TXINT (DMAC completed all transmissions, underrun or DCD change)
+   - TXINT (DMAC completed all transmissions and DCD changes)
    - all DMA interrupts
 */
 	/* MSCI TXINT and RXINTA interrupt enable */
-	sca_outl(IE0_TXINT | IE0_RXINTA | IE0_UDRN | IE0_CDCD, msci + IE0,
-		 card);
+	sca_outl(IE0_TXINT | IE0_RXINTA | IE0_CDCD, msci + IE0, card);
 
 	sca_out(port->tmc, msci + TMCR, card);
 	sca_out(port->tmc, msci + TMCT, card);