From bk-commits-head-owner@vger.kernel.org  Mon Sep  1 00:28:24 2003
Return-Path: <bk-commits-head-owner@vger.kernel.org>
Received: from vger.kernel.org (vger.kernel.org [67.72.78.212])
	by fr.zoreil.com (8.12.8/8.12.1) with ESMTP id h7VMLpxb029080
	for <romieu@fr.zoreil.com>; Mon, 1 Sep 2003 00:22:10 +0200
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
	id S263052AbTHaWVo (ORCPT <rfc822;romieu@fr.zoreil.com>);
	Sun, 31 Aug 2003 18:21:44 -0400
Received: (majordomo@vger.kernel.org) by vger.kernel.org id S263021AbTHaWV3
	(ORCPT <rfc822;bk-commits-head-outgoing>);
	Sun, 31 Aug 2003 18:21:29 -0400
Received: from hera.kernel.org ([63.209.29.2]:56737 "EHLO hera.kernel.org")
	by vger.kernel.org with ESMTP id S262854AbTHaWOB (ORCPT
	<rfc822;bk-commits-head@vger.kernel.org>);
	Sun, 31 Aug 2003 18:14:01 -0400
Received: from hera.kernel.org (dwmw2@localhost [127.0.0.1])
	by hera.kernel.org (8.12.8/8.12.8) with ESMTP id h7VME1Uk007377
	for <bk-commits-head@vger.kernel.org>; Sun, 31 Aug 2003 15:14:01 -0700
Received: (from dwmw2@localhost)
	by hera.kernel.org (8.12.8/8.12.8/Submit) id h7VMDusA007327
	for bk-commits-head@vger.kernel.org; Sun, 31 Aug 2003 15:13:56 -0700
Message-Id: <200308312213.h7VMDusA007327@hera.kernel.org>
Subject: [netdrvr sis190] convert TX path to use PCI DMA API
Date: Tue, 26 Aug 2003 20:00:16 +0000
From: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
To: bk-commits-head@vger.kernel.org
X-BK-Repository: hera.kernel.org:/home/dwmw2/BK/linus-2.5
X-BK-ChangeSetKey: jgarzik@redhat.com|ChangeSet|20030826200016|55519
Sender: bk-commits-head-owner@vger.kernel.org
Precedence: bulk
X-Mailing-List: bk-commits-head@vger.kernel.org
X-Spam-Status: No, hits=-4.0 required=4.0
	tests=DATE_IN_PAST_96_XX,PATCH_UNIFIED_DIFF,X_MAILING_LIST
	version=2.53-fr_1
X-Spam-Level: 
X-Spam-Checker-Version: SpamAssassin 2.53-fr_1 (1.174.2.15-2003-03-30-exp)
Status: RO
Content-Length: 4231
Lines: 153

ChangeSet 1.1276.25.6, 2003/08/26 16:00:16-04:00, jgarzik@redhat.com

	[netdrvr sis190] convert TX path to use PCI DMA API
	
	Also, minor changes:
	* mark ->hard_start_xmit ETH_ZLEN test as unlikely()
	* use cpu_to_le32() and le32_to_cpu() in TX path
	* fix two leak in error path, in ->hard_start_xmit
	* don't test netif_queue_stopped() in TX completion path,
	  netif_wake_queue() already does that.


# This patch includes the following deltas:
#	           ChangeSet	1.1276.25.5 -> 1.1276.25.6
#	drivers/net/sis190.c	1.7     -> 1.8    
#

 sis190.c |   74 ++++++++++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 50 insertions(+), 24 deletions(-)


diff -Nru a/drivers/net/sis190.c b/drivers/net/sis190.c
--- a/drivers/net/sis190.c	Sun Aug 31 15:14:00 2003
+++ b/drivers/net/sis190.c	Sun Aug 31 15:14:00 2003
@@ -856,7 +856,14 @@
 	tp->cur_tx = 0;
 	for (i = 0; i < NUM_TX_DESC; i++) {
 		if (tp->Tx_skbuff[i] != NULL) {
-			dev_kfree_skb(tp->Tx_skbuff[i]);
+			struct sk_buff *skb;
+
+			skb = tp->Tx_skbuff[i];
+			pci_unmap_single(tp->pci_dev,
+				le32_to_cpu(tp->TxDescArray[i].buf_addr),
+				skb->len < ETH_ZLEN ? ETH_ZLEN : skb->len,
+				PCI_DMA_TODEVICE);
+			dev_kfree_skb(skb);
 			tp->Tx_skbuff[i] = NULL;
 			tp->stats.tx_dropped++;
 		}
@@ -895,46 +902,58 @@
 	struct sis190_private *tp = dev->priv;
 	void *ioaddr = tp->mmio_addr;
 	int entry = tp->cur_tx % NUM_TX_DESC;
+	u32 len;
 
-	if (skb->len < ETH_ZLEN) {
+	if (unlikely(skb->len < ETH_ZLEN)) {
 		skb = skb_padto(skb, ETH_ZLEN);
 		if (skb == NULL)
-			return 0;
+			goto drop_tx;
+		len = ETH_ZLEN;
+	} else {
+		len = skb->len;
 	}
 
 	spin_lock_irq(&tp->lock);
 
-	if ((tp->TxDescArray[entry].status & OWNbit) == 0) {
-#warning Replace virt_to_bus with DMA mapping
+	if ((le32_to_cpu(tp->TxDescArray[entry].status) & OWNbit) == 0) {
+		dma_addr_t mapping;
+
+		mapping = pci_map_single(tp->pci_dev, skb->data, len,
+					 PCI_DMA_TODEVICE);
+
 		tp->Tx_skbuff[entry] = skb;
-		tp->TxDescArray[entry].buf_addr = virt_to_bus(skb->data);
-		tp->TxDescArray[entry].PSize =
-		    ((skb->len > ETH_ZLEN) ? skb->len : ETH_ZLEN);
+		tp->TxDescArray[entry].buf_addr = cpu_to_le32(mapping);
+		tp->TxDescArray[entry].PSize = cpu_to_le32(len);
 
-		if (entry != (NUM_TX_DESC - 1)) {
-			tp->TxDescArray[entry].buf_Len =
-			    tp->TxDescArray[entry].PSize;
-		} else {
+		if (entry != (NUM_TX_DESC - 1))
+			tp->TxDescArray[entry].buf_Len = cpu_to_le32(len);
+		else
 			tp->TxDescArray[entry].buf_Len =
-			    tp->TxDescArray[entry].PSize | ENDbit;
-		}
+				cpu_to_le32(len | ENDbit);
 
 		tp->TxDescArray[entry].status |=
-		    (OWNbit | INTbit | DEFbit | CRCbit | PADbit);
+		    cpu_to_le32(OWNbit | INTbit | DEFbit | CRCbit | PADbit);
 
 		SiS_W32(TxControl, 0x1a11);	//Start Send
 
 		dev->trans_start = jiffies;
 
 		tp->cur_tx++;
+	} else {
+		spin_unlock_irq(&tp->lock);
+		goto drop_tx;
 	}
 
+	if ((tp->cur_tx - NUM_TX_DESC) == tp->dirty_tx)
+		netif_stop_queue(dev);
+
 	spin_unlock_irq(&tp->lock);
 
-	if ((tp->cur_tx - NUM_TX_DESC) == tp->dirty_tx) {
-		netif_stop_queue(dev);
-	}
+	return 0;
 
+drop_tx:
+	tp->stats.tx_dropped++;
+	dev_kfree_skb(skb);
 	return 0;
 }
 
@@ -953,10 +972,18 @@
 	tx_left = tp->cur_tx - dirty_tx;
 
 	while (tx_left > 0) {
-		if ((tp->TxDescArray[entry].status & OWNbit) == 0) {
-			dev_kfree_skb_irq(tp->
-					  Tx_skbuff[dirty_tx % NUM_TX_DESC]);
-			tp->Tx_skbuff[dirty_tx % NUM_TX_DESC] = NULL;
+		if ((le32_to_cpu(tp->TxDescArray[entry].status) & OWNbit) == 0) {
+			struct sk_buff *skb;
+
+			skb = tp->Tx_skbuff[entry];
+
+			pci_unmap_single(tp->pci_dev,
+				le32_to_cpu(tp->TxDescArray[entry].buf_addr),
+				skb->len < ETH_ZLEN ? ETH_ZLEN : skb->len,
+				PCI_DMA_TODEVICE);
+
+			dev_kfree_skb_irq(skb);
+			tp->Tx_skbuff[entry] = NULL;
 			tp->stats.tx_packets++;
 			dirty_tx++;
 			tx_left--;
@@ -966,8 +993,7 @@
 
 	if (tp->dirty_tx != dirty_tx) {
 		tp->dirty_tx = dirty_tx;
-		if (netif_queue_stopped(dev))
-			netif_wake_queue(dev);
+		netif_wake_queue(dev);
 	}
 }
 
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

From bk-commits-head-owner@vger.kernel.org  Mon Sep  1 00:28:26 2003
Return-Path: <bk-commits-head-owner@vger.kernel.org>
Received: from vger.kernel.org (vger.kernel.org [67.72.78.212])
	by fr.zoreil.com (8.12.8/8.12.1) with ESMTP id h7VMMKxH029081
	for <romieu@fr.zoreil.com>; Mon, 1 Sep 2003 00:22:54 +0200
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
	id S262878AbTHaWWx (ORCPT <rfc822;romieu@fr.zoreil.com>);
	Sun, 31 Aug 2003 18:22:53 -0400
Received: (majordomo@vger.kernel.org) by vger.kernel.org id S262857AbTHaWWx
	(ORCPT <rfc822;bk-commits-head-outgoing>);
	Sun, 31 Aug 2003 18:22:53 -0400
Received: from hera.kernel.org ([63.209.29.2]:1186 "EHLO hera.kernel.org")
	by vger.kernel.org with ESMTP id S262878AbTHaWOv (ORCPT
	<rfc822;bk-commits-head@vger.kernel.org>);
	Sun, 31 Aug 2003 18:14:51 -0400
Received: from hera.kernel.org (dwmw2@localhost [127.0.0.1])
	by hera.kernel.org (8.12.8/8.12.8) with ESMTP id h7VMEoUk007771
	for <bk-commits-head@vger.kernel.org>; Sun, 31 Aug 2003 15:14:50 -0700
Received: (from dwmw2@localhost)
	by hera.kernel.org (8.12.8/8.12.8/Submit) id h7VMEkIN007746
	for bk-commits-head@vger.kernel.org; Sun, 31 Aug 2003 15:14:46 -0700
Message-Id: <200308312214.h7VMEkIN007746@hera.kernel.org>
Subject: [netdrvr sis190] remove unneeded alignment code, other small fixes
Date: Tue, 26 Aug 2003 22:24:15 +0000
From: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
To: bk-commits-head@vger.kernel.org
X-BK-Repository: hera.kernel.org:/home/dwmw2/BK/linus-2.5
X-BK-ChangeSetKey: romieu@fr.zoreil.com|ChangeSet|20030826222415|54031
Sender: bk-commits-head-owner@vger.kernel.org
Precedence: bulk
X-Mailing-List: bk-commits-head@vger.kernel.org
X-Spam-Status: No, hits=-4.0 required=4.0
	tests=DATE_IN_PAST_96_XX,PATCH_UNIFIED_DIFF,X_MAILING_LIST
	version=2.53-fr_1
X-Spam-Level: 
X-Spam-Checker-Version: SpamAssassin 2.53-fr_1 (1.174.2.15-2003-03-30-exp)
Status: RO
Content-Length: 5557
Lines: 168

ChangeSet 1.1276.25.15, 2003/08/26 18:24:15-04:00, romieu@fr.zoreil.com

	[netdrvr sis190] remove unneeded alignment code, other small fixes
	
	Driver does not need to enforce 256 byte alignment for data returned
	from pci_alloc_consistent().
	- {rx/tx}_dma_aligned and {rx/td}_dma_raw are both replaced by {rx/tx}_dma;
	- {rx/tx}_desc_raw is replaced by direct use of {Rx/Tx}DescArray;
	- SiS190_open()
	  + fixup for a lack of kmalloc() failure handling;
	  + (return status) there is no need for both retval/rc: merge them;
	  + anonymous printk() fixup: the name of the guilty device is printed;
	- define {RX/TX}_DESC_TOTAL_SIZE because I am too lazy to read twice the
	  same lengthy arithmetic expression.
	
	


# This patch includes the following deltas:
#	           ChangeSet	1.1276.25.14 -> 1.1276.25.15
#	drivers/net/sis190.c	1.8     -> 1.9    
#

 sis190.c |   78 ++++++++++++++++++++++++++++-----------------------------------
 1 files changed, 35 insertions(+), 43 deletions(-)


diff -Nru a/drivers/net/sis190.c b/drivers/net/sis190.c
--- a/drivers/net/sis190.c	Sun Aug 31 15:14:50 2003
+++ b/drivers/net/sis190.c	Sun Aug 31 15:14:50 2003
@@ -76,6 +76,8 @@
 
 #define NUM_TX_DESC	64	/* Number of Tx descriptor registers */
 #define NUM_RX_DESC	64	/* Number of Rx descriptor registers */
+#define TX_DESC_TOTAL_SIZE	(NUM_TX_DESC * sizeof (struct TxDesc))
+#define RX_DESC_TOTAL_SIZE	(NUM_RX_DESC * sizeof (struct RxDesc))
 #define RX_BUF_SIZE	1536	/* Rx Buffer size */
 
 #define SiS190_MIN_IO_SIZE 0x80
@@ -311,12 +313,8 @@
 	unsigned long cur_rx;	/* Index into the Rx descriptor buffer of next Rx pkt. */
 	unsigned long cur_tx;	/* Index into the Tx descriptor buffer of next Rx pkt. */
 	unsigned long dirty_tx;
-	void *tx_desc_raw;		/* Tx descriptor buffer */
-	dma_addr_t tx_dma_raw;
-	dma_addr_t tx_dma_aligned;
-	void *rx_desc_raw;		/* Rx descriptor buffer */
-	dma_addr_t rx_dma_raw;
-	dma_addr_t rx_dma_aligned;
+	dma_addr_t tx_dma;
+	dma_addr_t rx_dma;
 	struct TxDesc *TxDescArray;	/* Index of 256-alignment Tx Descriptor buffer */
 	struct RxDesc *RxDescArray;	/* Index of 256-alignment Rx Descriptor buffer */
 	unsigned char *RxBufferRings;	/* Index of Rx Buffer  */
@@ -715,54 +713,50 @@
 SiS190_open(struct net_device *dev)
 {
 	struct sis190_private *tp = dev->priv;
-	int retval;
-	u8 diff;
 	int rc;
 
-	retval =
-	    request_irq(dev->irq, SiS190_interrupt, SA_SHIRQ, dev->name, dev);
-	if (retval) {
-		return retval;
-	}
+	rc = request_irq(dev->irq, SiS190_interrupt, SA_SHIRQ, dev->name, dev);
+	if (rc)
+		goto out;
 
-	tp->tx_desc_raw = pci_alloc_consistent(tp->pci_dev,
-		(NUM_TX_DESC * sizeof (struct TxDesc)) + 256,
-		&tp->tx_dma_raw);
-	if (!tp->tx_desc_raw) {
+	/*
+	 * Rx and Tx descriptors need 256 bytes alignment.
+	 * pci_alloc_consistent() guarantees a stronger alignment.
+	 */
+	tp->TxDescArray = pci_alloc_consistent(tp->pci_dev, TX_DESC_TOTAL_SIZE,
+		&tp->tx_dma);
+	if (!tp->TxDescArray) {
 		rc = -ENOMEM;
 		goto err_out;
 	}
-	// Tx Desscriptor needs 256 bytes alignment;
-	diff = 256 - (tp->tx_dma_raw - ((tp->tx_dma_raw >> 8) << 8));
-	tp->tx_dma_aligned = tp->tx_dma_raw + diff;
-	tp->TxDescArray = (struct TxDesc *) (tp->tx_desc_raw + diff);
-
-	tp->rx_desc_raw = pci_alloc_consistent(tp->pci_dev,
-		(NUM_RX_DESC * sizeof (struct RxDesc)) + 256,
-		&tp->rx_dma_raw);
-	if (!tp->rx_desc_raw) {
+
+	tp->RxDescArray = pci_alloc_consistent(tp->pci_dev, RX_DESC_TOTAL_SIZE,
+		&tp->rx_dma);
+	if (!tp->RxDescArray) {
 		rc = -ENOMEM;
 		goto err_out_free_tx;
 	}
-	// Rx Desscriptor needs 256 bytes alignment;
-	diff = 256 - (tp->rx_dma_raw - ((tp->rx_dma_raw >> 8) << 8));
-	tp->rx_dma_aligned = tp->rx_dma_raw + diff;
-	tp->RxDescArray = (struct RxDesc *) (tp->rx_desc_raw + diff);
 
 	tp->RxBufferRings = kmalloc(RX_BUF_SIZE * NUM_RX_DESC, GFP_KERNEL);
 	if (tp->RxBufferRings == NULL) {
-		printk(KERN_INFO "Allocate RxBufferRing failed\n");
+		printk(KERN_INFO "%s: allocate RxBufferRing failed\n",
+			dev->name);
+		rc = -ENOMEM;
+		goto err_out_free_rx;
 	}
 
 	SiS190_init_ring(dev);
 	SiS190_hw_start(dev);
 
-	return 0;
+out:
+	return rc;
 
+err_out_free_rx:
+	pci_free_consistent(tp->pci_dev, RX_DESC_TOTAL_SIZE, tp->RxDescArray,
+		tp->rx_dma);
 err_out_free_tx:
-	pci_free_consistent(tp->pci_dev,
-		(NUM_TX_DESC * sizeof (struct TxDesc)) + 256,
-		tp->tx_desc_raw, tp->tx_dma_raw);
+	pci_free_consistent(tp->pci_dev, TX_DESC_TOTAL_SIZE, tp->TxDescArray,
+		tp->tx_dma);
 err_out:
 	free_irq(dev->irq, dev);
 	return rc;
@@ -781,10 +775,10 @@
 	SiS_W32(IntrControl, 0x0);
 
 	SiS_W32(0x0, 0x01a00);
-	SiS_W32(0x4, tp->tx_dma_aligned);
+	SiS_W32(0x4, tp->tx_dma);
 
 	SiS_W32(0x10, 0x1a00);
-	SiS_W32(0x14, tp->rx_dma_aligned);
+	SiS_W32(0x14, tp->rx_dma);
 
 	SiS_W32(0x20, 0xffffffff);
 	SiS_W32(0x24, 0x0);
@@ -1142,12 +1136,10 @@
 	free_irq(dev->irq, dev);
 
 	SiS190_tx_clear(tp);
-	pci_free_consistent(tp->pci_dev,
-		(NUM_TX_DESC * sizeof (struct TxDesc)) + 256,
-		tp->tx_desc_raw, tp->tx_dma_raw);
-	pci_free_consistent(tp->pci_dev,
-		(NUM_RX_DESC * sizeof (struct RxDesc)) + 256,
-		tp->rx_desc_raw, tp->rx_dma_raw);
+	pci_free_consistent(tp->pci_dev, TX_DESC_TOTAL_SIZE, tp->TxDescArray,
+		tp->tx_dma);
+	pci_free_consistent(tp->pci_dev, RX_DESC_TOTAL_SIZE, tp->RxDescArray,
+		tp->rx_dma);
 	tp->TxDescArray = NULL;
 	tp->RxDescArray = NULL;
 	kfree(tp->RxBufferRings);
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

From bk-commits-head-owner@vger.kernel.org  Mon Sep  1 00:28:27 2003
Return-Path: <bk-commits-head-owner@vger.kernel.org>
Received: from vger.kernel.org (vger.kernel.org [67.72.78.212])
	by fr.zoreil.com (8.12.8/8.12.1) with ESMTP id h7VMMKxO029081
	for <romieu@fr.zoreil.com>; Mon, 1 Sep 2003 00:23:51 +0200
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
	id S262891AbTHaWXu (ORCPT <rfc822;romieu@fr.zoreil.com>);
	Sun, 31 Aug 2003 18:23:50 -0400
Received: (majordomo@vger.kernel.org) by vger.kernel.org id S262857AbTHaWXu
	(ORCPT <rfc822;bk-commits-head-outgoing>);
	Sun, 31 Aug 2003 18:23:50 -0400
Received: from hera.kernel.org ([63.209.29.2]:7842 "EHLO hera.kernel.org")
	by vger.kernel.org with ESMTP id S262891AbTHaWPj (ORCPT
	<rfc822;bk-commits-head@vger.kernel.org>);
	Sun, 31 Aug 2003 18:15:39 -0400
Received: from hera.kernel.org (dwmw2@localhost [127.0.0.1])
	by hera.kernel.org (8.12.8/8.12.8) with ESMTP id h7VMFcUk008263
	for <bk-commits-head@vger.kernel.org>; Sun, 31 Aug 2003 15:15:38 -0700
Received: (from dwmw2@localhost)
	by hera.kernel.org (8.12.8/8.12.8/Submit) id h7VMFJ35008227
	for bk-commits-head@vger.kernel.org; Sun, 31 Aug 2003 15:15:19 -0700
Message-Id: <200308312215.h7VMFJ35008227@hera.kernel.org>
Subject: [netdrvr sis190] small bug fixes
Date: Tue, 26 Aug 2003 23:57:43 +0000
From: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
To: bk-commits-head@vger.kernel.org
X-BK-Repository: hera.kernel.org:/home/dwmw2/BK/linus-2.5
X-BK-ChangeSetKey: jgarzik@redhat.com|ChangeSet|20030826235743|53976
Sender: bk-commits-head-owner@vger.kernel.org
Precedence: bulk
X-Mailing-List: bk-commits-head@vger.kernel.org
X-Spam-Status: No, hits=-4.0 required=4.0
	tests=DATE_IN_PAST_96_XX,PATCH_UNIFIED_DIFF,X_MAILING_LIST
	version=2.53-fr_1
X-Spam-Level: 
X-Spam-Checker-Version: SpamAssassin 2.53-fr_1 (1.174.2.15-2003-03-30-exp)
Status: RO
Content-Length: 1139
Lines: 43

ChangeSet 1.1276.25.22, 2003/08/26 19:57:43-04:00, jgarzik@redhat.com

	[netdrvr sis190] small bug fixes
	
	* call pci_set_dma_mask
	* remove erroneous call to unregister_netdev in _init_board()


# This patch includes the following deltas:
#	           ChangeSet	1.1276.25.21 -> 1.1276.25.22
#	drivers/net/sis190.c	1.9     -> 1.10   
#

 sis190.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletion(-)


diff -Nru a/drivers/net/sis190.c b/drivers/net/sis190.c
--- a/drivers/net/sis190.c	Sun Aug 31 15:15:36 2003
+++ b/drivers/net/sis190.c	Sun Aug 31 15:15:36 2003
@@ -468,6 +468,10 @@
 	if (rc)
 		goto err_out;
 
+	rc = pci_set_dma_mask(pdev, 0xffffffffULL);
+	if (rc)
+		goto err_out;
+
 	mmio_start = pci_resource_start(pdev, 0);
 	mmio_end = pci_resource_end(pdev, 0);
 	mmio_flags = pci_resource_flags(pdev, 0);
@@ -519,7 +523,6 @@
 
 err_out:
 	pci_disable_device(pdev);
-	unregister_netdev(dev);
 	kfree(dev);
 	return rc;
 }
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

From bk-commits-head-owner@vger.kernel.org  Mon Sep  1 00:28:28 2003
Return-Path: <bk-commits-head-owner@vger.kernel.org>
Received: from vger.kernel.org (vger.kernel.org [67.72.78.212])
	by fr.zoreil.com (8.12.8/8.12.1) with ESMTP id h7VMMKxS029081
	for <romieu@fr.zoreil.com>; Mon, 1 Sep 2003 00:24:36 +0200
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
	id S262898AbTHaWYf (ORCPT <rfc822;romieu@fr.zoreil.com>);
	Sun, 31 Aug 2003 18:24:35 -0400
Received: (majordomo@vger.kernel.org) by vger.kernel.org id S263021AbTHaWYf
	(ORCPT <rfc822;bk-commits-head-outgoing>);
	Sun, 31 Aug 2003 18:24:35 -0400
Received: from hera.kernel.org ([63.209.29.2]:12450 "EHLO hera.kernel.org")
	by vger.kernel.org with ESMTP id S262898AbTHaWQS (ORCPT
	<rfc822;bk-commits-head@vger.kernel.org>);
	Sun, 31 Aug 2003 18:16:18 -0400
Received: from hera.kernel.org (dwmw2@localhost [127.0.0.1])
	by hera.kernel.org (8.12.8/8.12.8) with ESMTP id h7VMG8Uk008790
	for <bk-commits-head@vger.kernel.org>; Sun, 31 Aug 2003 15:16:08 -0700
Received: (from dwmw2@localhost)
	by hera.kernel.org (8.12.8/8.12.8/Submit) id h7VMFxMc008690
	for bk-commits-head@vger.kernel.org; Sun, 31 Aug 2003 15:15:59 -0700
Message-Id: <200308312215.h7VMFxMc008690@hera.kernel.org>
Subject: [netdrvr sis190] use PCI DMA API for RX buffers
Date: Wed, 27 Aug 2003 22:09:50 +0000
From: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
To: bk-commits-head@vger.kernel.org
X-BK-Repository: hera.kernel.org:/home/dwmw2/BK/linus-2.5
X-BK-ChangeSetKey: romieu@fr.zoreil.com|ChangeSet|20030827220950|53118
Sender: bk-commits-head-owner@vger.kernel.org
Precedence: bulk
X-Mailing-List: bk-commits-head@vger.kernel.org
X-Spam-Status: No, hits=-4.0 required=4.0
	tests=DATE_IN_PAST_96_XX,PATCH_UNIFIED_DIFF,X_MAILING_LIST
	version=2.53-fr_1
X-Spam-Level: 
X-Spam-Checker-Version: SpamAssassin 2.53-fr_1 (1.174.2.15-2003-03-30-exp)
Status: RO
Content-Length: 5304
Lines: 168

ChangeSet 1.1276.25.25, 2003/08/27 18:09:50-04:00, romieu@fr.zoreil.com

	[netdrvr sis190] use PCI DMA API for RX buffers
	
	Missing pieces for DMA-API on the Rx side:
	- SiS190_init_ring: the global area for the received data is mapped.
	  This area is persistent during the whole driver's life.
	  It only needs to be unmapped in SiS190_close() as no other exit/error
	  path exists.
	- SiS190_rx_interrupt: no map/unmap for received data buffer. A single
	  sync operation is done. Btw, there is no need to store the same value
	  in RxDescArray[cur_rx].buf_addr over and over again.
	- Remove driver dependancy on CONFIG_BROKEN.


# This patch includes the following deltas:
#	           ChangeSet	1.1276.25.24 -> 1.1276.25.25
#	 drivers/net/Kconfig	1.41    -> 1.42   
#	drivers/net/sis190.c	1.10    -> 1.11   
#

 Kconfig  |    2 +-
 sis190.c |   59 ++++++++++++++++++++++++++++-------------------------------
 2 files changed, 29 insertions(+), 32 deletions(-)


diff -Nru a/drivers/net/Kconfig b/drivers/net/Kconfig
--- a/drivers/net/Kconfig	Sun Aug 31 15:16:04 2003
+++ b/drivers/net/Kconfig	Sun Aug 31 15:16:04 2003
@@ -2044,7 +2044,7 @@
 
 config SIS190
 	tristate "SiS190 gigabit ethernet support (EXPERIMENTAL)"
-	depends on PCI && EXPERIMENTAL && BROKEN
+	depends on PCI && EXPERIMENTAL
 	---help---
 	  Say Y here if you have a SiS 190 PCI Gigabit Ethernet adapter.
 
diff -Nru a/drivers/net/sis190.c b/drivers/net/sis190.c
--- a/drivers/net/sis190.c	Sun Aug 31 15:16:04 2003
+++ b/drivers/net/sis190.c	Sun Aug 31 15:16:04 2003
@@ -828,19 +828,19 @@
 		tp->Tx_skbuff[i] = NULL;
 	}
 	for (i = 0; i < NUM_RX_DESC; i++) {
+		struct RxDesc *desc = tp->RxDescArray + i;
 
-		tp->RxDescArray[i].PSize = 0x0;
+		desc->PSize = 0x0;
 
 		if (i == (NUM_RX_DESC - 1))
-			tp->RxDescArray[i].buf_Len = BIT_31 + RX_BUF_SIZE;	//bit 31 is End bit
+			desc->buf_Len = BIT_31 + RX_BUF_SIZE;	//bit 31 is End bit
 		else
-			tp->RxDescArray[i].buf_Len = RX_BUF_SIZE;
-
-#warning Replace virt_to_bus with DMA mapping
-		tp->RxBufferRing[i] = &(tp->RxBufferRings[i * RX_BUF_SIZE]);
-		tp->RxDescArray[i].buf_addr = virt_to_bus(tp->RxBufferRing[i]);
-		tp->RxDescArray[i].status = OWNbit | INTbit;
+			desc->buf_Len = RX_BUF_SIZE;
 
+		tp->RxBufferRing[i] = tp->RxBufferRings + i * RX_BUF_SIZE;
+		desc->buf_addr = pci_map_single(tp->pci_dev,
+			tp->RxBufferRing[i], RX_BUF_SIZE, PCI_DMA_FROMDEVICE);
+		desc->status = OWNbit | INTbit;
 	}
 
 }
@@ -998,29 +998,30 @@
 SiS190_rx_interrupt(struct net_device *dev, struct sis190_private *tp,
 		    void *ioaddr)
 {
-	int cur_rx;
-	struct sk_buff *skb;
-	int pkt_size = 0;
+	int cur_rx = tp->cur_rx;
+	struct RxDesc *desc = tp->RxDescArray + cur_rx;
 
 	assert(dev != NULL);
 	assert(tp != NULL);
 	assert(ioaddr != NULL);
 
-	cur_rx = tp->cur_rx;
-	while ((tp->RxDescArray[cur_rx].status & OWNbit) == 0) {
+	while ((desc->status & OWNbit) == 0) {
 
-		if (tp->RxDescArray[cur_rx].PSize & 0x0080000) {
+		if (desc->PSize & 0x0080000) {
 			printk(KERN_INFO "%s: Rx ERROR!!!\n", dev->name);
 			tp->stats.rx_errors++;
 			tp->stats.rx_length_errors++;
-		} else if (!(tp->RxDescArray[cur_rx].PSize & 0x0010000)) {
+		} else if (!(desc->PSize & 0x0010000)) {
 			printk(KERN_INFO "%s: Rx ERROR!!!\n", dev->name);
 			tp->stats.rx_errors++;
 			tp->stats.rx_crc_errors++;
 		} else {
-			pkt_size =
-			    (int) (tp->RxDescArray[cur_rx].
-				   PSize & 0x0000FFFF) - 4;
+			struct sk_buff *skb;
+			int pkt_size;
+
+			pkt_size = (int) (desc->PSize & 0x0000FFFF) - 4;
+			pci_dma_sync_single(tp->pci_dev, desc->buf_addr,
+				RX_BUF_SIZE, PCI_DMA_FROMDEVICE);
 			skb = dev_alloc_skb(pkt_size + 2);
 			if (skb != NULL) {
 				skb->dev = dev;
@@ -1031,24 +1032,18 @@
 				skb->protocol = eth_type_trans(skb, dev);
 				netif_rx(skb);
 
-				tp->RxDescArray[cur_rx].PSize = 0x0;
+				desc->PSize = 0x0;
 
 				if (cur_rx == (NUM_RX_DESC - 1))
-					tp->RxDescArray[cur_rx].buf_Len =
-					    ENDbit + RX_BUF_SIZE;
+					desc->buf_Len = ENDbit + RX_BUF_SIZE;
 				else
-					tp->RxDescArray[cur_rx].buf_Len =
-					    RX_BUF_SIZE;
+					desc->buf_Len = RX_BUF_SIZE;
 
-#warning Replace virt_to_bus with DMA mapping
-				tp->RxDescArray[cur_rx].buf_addr =
-				    virt_to_bus(tp->RxBufferRing[cur_rx]);
 				dev->last_rx = jiffies;
 				tp->stats.rx_bytes += pkt_size;
 				tp->stats.rx_packets++;
 
-				tp->RxDescArray[cur_rx].status =
-				    OWNbit | INTbit;
+				desc->status = OWNbit | INTbit;
 			} else {
 				printk(KERN_WARNING
 				       "%s: Memory squeeze, deferring packet.\n",
@@ -1060,7 +1055,7 @@
 		}
 
 		cur_rx = (cur_rx + 1) % NUM_RX_DESC;
-
+		desc = tp->RxDescArray + cur_rx;
 	}
 
 	tp->cur_rx = cur_rx;
@@ -1144,11 +1139,13 @@
 	pci_free_consistent(tp->pci_dev, RX_DESC_TOTAL_SIZE, tp->RxDescArray,
 		tp->rx_dma);
 	tp->TxDescArray = NULL;
-	tp->RxDescArray = NULL;
-	kfree(tp->RxBufferRings);
 	for (i = 0; i < NUM_RX_DESC; i++) {
+		pci_unmap_single(tp->pci_dev, tp->RxDescArray[i].buf_addr,
+			RX_BUF_SIZE, PCI_DMA_FROMDEVICE);
 		tp->RxBufferRing[i] = NULL;
 	}
+	tp->RxDescArray = NULL;
+	kfree(tp->RxBufferRings);
 
 	return 0;
 }
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

From bk-commits-head-owner@vger.kernel.org  Sun Aug 31 22:18:23 2003
Return-Path: <bk-commits-head-owner@vger.kernel.org>
Received: from vger.kernel.org (vger.kernel.org [67.72.78.212])
	by fr.zoreil.com (8.12.8/8.12.1) with ESMTP id h7VKCNxS026900
	for <romieu@fr.zoreil.com>; Sun, 31 Aug 2003 22:12:35 +0200
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
	id S262590AbTHaULf (ORCPT <rfc822;romieu@fr.zoreil.com>);
	Sun, 31 Aug 2003 16:11:35 -0400
Received: (majordomo@vger.kernel.org) by vger.kernel.org id S262575AbTHaULZ
	(ORCPT <rfc822;bk-commits-head-outgoing>);
	Sun, 31 Aug 2003 16:11:25 -0400
Received: from hera.kernel.org ([63.209.29.2]:6554 "EHLO hera.kernel.org")
	by vger.kernel.org with ESMTP id S262567AbTHaULY (ORCPT
	<rfc822;bk-commits-head@vger.kernel.org>);
	Sun, 31 Aug 2003 16:11:24 -0400
Received: from hera.kernel.org (dwmw2@localhost [127.0.0.1])
	by hera.kernel.org (8.12.8/8.12.8) with ESMTP id h7VKBNUk012871
	for <bk-commits-head@vger.kernel.org>; Sun, 31 Aug 2003 13:11:23 -0700
Received: (from dwmw2@localhost)
	by hera.kernel.org (8.12.8/8.12.8/Submit) id h7VKBJcI012828
	for bk-commits-head@vger.kernel.org; Sun, 31 Aug 2003 13:11:19 -0700
Message-Id: <200308312011.h7VKBJcI012828@hera.kernel.org>
Subject: [PATCH] sis190 driver fix
Date: Sun, 31 Aug 2003 19:32:04 +0000
From: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
To: bk-commits-head@vger.kernel.org
X-BK-Repository: hera.kernel.org:/home/dwmw2/BK/linus-2.5
X-BK-ChangeSetKey: romieu@fr.zoreil.com[torvalds]|ChangeSet|20030831193204|55520
Sender: bk-commits-head-owner@vger.kernel.org
Precedence: bulk
X-Mailing-List: bk-commits-head@vger.kernel.org
X-Spam-Status: No, hits=-6.0 required=4.0
	tests=PATCH_UNIFIED_DIFF,X_MAILING_LIST
	version=2.53-fr_1
X-Spam-Level: 
X-Spam-Checker-Version: SpamAssassin 2.53-fr_1 (1.174.2.15-2003-03-30-exp)
Status: RO
Content-Length: 883
Lines: 32

ChangeSet 1.1307, 2003/08/31 12:32:04-07:00, romieu@fr.zoreil.com

	[PATCH] sis190 driver fix
	
	synchronize_irq() requires an argument when built with CONFIG_SMP.


# This patch includes the following deltas:
#	           ChangeSet	1.1306  -> 1.1307 
#	drivers/net/sis190.c	1.5     -> 1.6    
#

 sis190.c |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


diff -Nru a/drivers/net/sis190.c b/drivers/net/sis190.c
--- a/drivers/net/sis190.c	Sun Aug 31 13:11:22 2003
+++ b/drivers/net/sis190.c	Sun Aug 31 13:11:22 2003
@@ -1111,7 +1111,7 @@
 
 	spin_unlock_irq(&tp->lock);
 
-	synchronize_irq();
+	synchronize_irq(dev->irq);
 	free_irq(dev->irq, dev);
 
 	SiS190_tx_clear(tp);
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

