Re: Pull request for 'r6040' branch
Francois Romieu wrote: Please pull from branch 'r6040' in repository git://git.kernel.org/pub/scm/linux/kernel/git/romieu/netdev-2.6.git r6040 to get the changes below. I have simply rebased the r6040 branch from december on top of Linus's latest head and given each patch a compile test. The content is identical to Florian's initial work (minus the removal of the unused TIMER_WUT and a duplicate update of an error counter). Distance from 'master' (21511abd0a248a3f225d3b611cfabb93124605a7) - ec6d2d453a932fd50c5fd95d5aac633b4e5f241d 106adf3c84d081776a1d1fbb8a047cad12af2bb9 b4f1255d6839bd970d5ff20a9c3d73f73c9adaa3 d248fd77902fcf33b0bc49ab521930877d94890f Diffstat drivers/net/r6040.c | 233 +- 1 files changed, 135 insertions(+), 98 deletions(-) Shortlog Florian Fainelli (4): r6040: do not use a private stats structure to store statistics r6040: add helpers to allocate and free the Tx/Rx buffers r6040: recover from transmit timeout r6040: cleanups pulled -- To unsubscribe from this list: send the line unsubscribe netdev in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: Pull request for 'r6040' branch
Hi Francois, Jeff, Le mardi 5 février 2008, Francois Romieu a écrit : Please pull from branch 'r6040' in repository git://git.kernel.org/pub/scm/linux/kernel/git/romieu/netdev-2.6.git r6040 to get the changes below. I have simply rebased the r6040 branch from december on top of Linus's latest head and given each patch a compile test. The content is identical to Florian's initial work (minus the removal of the unused TIMER_WUT and a duplicate update of an error counter). Thank you very much Francois. Jeff, any news on this ? -- Cordialement, Florian Fainelli -- -- To unsubscribe from this list: send the line unsubscribe netdev in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Pull request for 'r6040' branch
Please pull from branch 'r6040' in repository git://git.kernel.org/pub/scm/linux/kernel/git/romieu/netdev-2.6.git r6040 to get the changes below. I have simply rebased the r6040 branch from december on top of Linus's latest head and given each patch a compile test. The content is identical to Florian's initial work (minus the removal of the unused TIMER_WUT and a duplicate update of an error counter). Distance from 'master' (21511abd0a248a3f225d3b611cfabb93124605a7) - ec6d2d453a932fd50c5fd95d5aac633b4e5f241d 106adf3c84d081776a1d1fbb8a047cad12af2bb9 b4f1255d6839bd970d5ff20a9c3d73f73c9adaa3 d248fd77902fcf33b0bc49ab521930877d94890f Diffstat drivers/net/r6040.c | 233 +- 1 files changed, 135 insertions(+), 98 deletions(-) Shortlog Florian Fainelli (4): r6040: do not use a private stats structure to store statistics r6040: add helpers to allocate and free the Tx/Rx buffers r6040: recover from transmit timeout r6040: cleanups Patch - diff --git a/drivers/net/r6040.c b/drivers/net/r6040.c index 2334f4e..19184e4 100644 --- a/drivers/net/r6040.c +++ b/drivers/net/r6040.c @@ -61,7 +61,6 @@ /* Time in jiffies before concluding the transmitter is hung. */ #define TX_TIMEOUT (6000 * HZ / 1000) -#define TIMER_WUT (jiffies + HZ * 1)/* timer wakeup time : 1 second */ /* RDC MAC I/O Size */ #define R6040_IO_SIZE 256 @@ -174,8 +173,6 @@ struct r6040_private { struct net_device *dev; struct mii_if_info mii_if; struct napi_struct napi; - struct net_device_stats stats; - u16 napi_rx_running; void __iomem *base; }; @@ -235,17 +232,53 @@ static void mdio_write(struct net_device *dev, int mii_id, int reg, int val) phy_write(ioaddr, lp-phy_addr, reg, val); } -static void r6040_tx_timeout(struct net_device *dev) +static void r6040_free_txbufs(struct net_device *dev) { - struct r6040_private *priv = netdev_priv(dev); + struct r6040_private *lp = netdev_priv(dev); + int i; - disable_irq(dev-irq); - napi_disable(priv-napi); - spin_lock(priv-lock); - dev-stats.tx_errors++; - spin_unlock(priv-lock); + for (i = 0; i TX_DCNT; i++) { + if (lp-tx_insert_ptr-skb_ptr) { + pci_unmap_single(lp-pdev, lp-tx_insert_ptr-buf, + MAX_BUF_SIZE, PCI_DMA_TODEVICE); + dev_kfree_skb(lp-tx_insert_ptr-skb_ptr); + lp-rx_insert_ptr-skb_ptr = NULL; + } + lp-tx_insert_ptr = lp-tx_insert_ptr-vndescp; + } +} - netif_stop_queue(dev); +static void r6040_free_rxbufs(struct net_device *dev) +{ + struct r6040_private *lp = netdev_priv(dev); + int i; + + for (i = 0; i RX_DCNT; i++) { + if (lp-rx_insert_ptr-skb_ptr) { + pci_unmap_single(lp-pdev, lp-rx_insert_ptr-buf, + MAX_BUF_SIZE, PCI_DMA_FROMDEVICE); + dev_kfree_skb(lp-rx_insert_ptr-skb_ptr); + lp-rx_insert_ptr-skb_ptr = NULL; + } + lp-rx_insert_ptr = lp-rx_insert_ptr-vndescp; + } +} + +static void r6040_init_ring_desc(struct r6040_descriptor *desc_ring, +dma_addr_t desc_dma, int size) +{ + struct r6040_descriptor *desc = desc_ring; + dma_addr_t mapping = desc_dma; + + while (size-- 0) { + mapping += sizeof(sizeof(*desc)); + desc-ndesc = cpu_to_le32(mapping); + desc-vndescp = desc + 1; + desc++; + } + desc--; + desc-ndesc = cpu_to_le32(desc_dma); + desc-vndescp = desc_ring; } /* Allocate skb buffer for rx descriptor */ @@ -256,7 +289,7 @@ static void rx_buf_alloc(struct r6040_private *lp, struct net_device *dev) descptr = lp-rx_insert_ptr; while (lp-rx_free_desc RX_DCNT) { - descptr-skb_ptr = dev_alloc_skb(MAX_BUF_SIZE); + descptr-skb_ptr = netdev_alloc_skb(dev, MAX_BUF_SIZE); if (!descptr-skb_ptr) break; @@ -272,6 +305,63 @@ static void rx_buf_alloc(struct r6040_private *lp, struct net_device *dev) lp-rx_insert_ptr = descptr; } +static void r6040_alloc_txbufs(struct net_device *dev) +{ + struct r6040_private *lp = netdev_priv(dev); + void __iomem *ioaddr = lp-base; + + lp-tx_free_desc = TX_DCNT; + + lp-tx_remove_ptr = lp-tx_insert_ptr = lp-tx_ring; + r6040_init_ring_desc(lp-tx_ring, lp-tx_ring_dma, TX_DCNT); + + iowrite16(lp-tx_ring_dma, ioaddr + MTD_SA0); + iowrite16(lp-tx_ring_dma 16, ioaddr + MTD_SA1); +} + +static void r6040_alloc_rxbufs(struct net_device *dev) +{ + struct r6040_private *lp = netdev_priv(dev); +
Re: Pull request for 'r6040' branch
Francois Romieu wrote: Please pull from branch 'r6040' in repository git://git.kernel.org/pub/scm/linux/kernel/git/romieu/netdev-2.6.git r6040 to get the changes below. Distance from 'netdev-2.6-upstream' (02e063b58b7c7084bae3d599c54dcf26c8efa9b7) -- 8dd657d2d82657c1d70219a704ccfe4fecfc55be f00c12227fe587b6c1bbb6b459394db29dc5fac0 c7eaa9bde00c778b53f778d49617353d3b9b0c21 cc27eeb9474a87b2073488f37d9e90e6a3557664 Diffstat drivers/net/r6040.c | 138 ++- include/linux/pci_ids.h |1 - 2 files changed, 64 insertions(+), 75 deletions(-) Shortlog Francois Romieu (4): r6040: compile error r6040: remove virt_to_bus r6040: erroneous dev-priv r6040: cleanups changes pulled, thanks for helping to clean this up! -- To unsubscribe from this list: send the line unsubscribe netdev in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Pull request for 'r6040' branch
Please pull from branch 'r6040' in repository git://git.kernel.org/pub/scm/linux/kernel/git/romieu/netdev-2.6.git r6040 to get the changes below. Distance from 'netdev-2.6-upstream' (02e063b58b7c7084bae3d599c54dcf26c8efa9b7) -- 8dd657d2d82657c1d70219a704ccfe4fecfc55be f00c12227fe587b6c1bbb6b459394db29dc5fac0 c7eaa9bde00c778b53f778d49617353d3b9b0c21 cc27eeb9474a87b2073488f37d9e90e6a3557664 Diffstat drivers/net/r6040.c | 138 ++- include/linux/pci_ids.h |1 - 2 files changed, 64 insertions(+), 75 deletions(-) Shortlog Francois Romieu (4): r6040: compile error r6040: remove virt_to_bus r6040: erroneous dev-priv r6040: cleanups Patch - diff --git a/drivers/net/r6040.c b/drivers/net/r6040.c index 1d7efa2..2334f4e 100644 --- a/drivers/net/r6040.c +++ b/drivers/net/r6040.c @@ -3,7 +3,7 @@ * * Copyright (C) 2004 Sten Wang [EMAIL PROTECTED] * Copyright (C) 2007 - * Daniel Gimpelevich [EMAIL PROTECTED] + * Daniel Gimpelevich [EMAIL PROTECTED] * Florian Fainelli [EMAIL PROTECTED] * * This program is free software; you can redistribute it and/or @@ -60,7 +60,7 @@ #define PHY_CAP0x01E1 /* PHY CHIP Register 4 */ /* Time in jiffies before concluding the transmitter is hung. */ -#define TX_TIMEOUT (6000 * HZ / 1000) +#define TX_TIMEOUT (6000 * HZ / 1000) #define TIMER_WUT (jiffies + HZ * 1)/* timer wakeup time : 1 second */ /* RDC MAC I/O Size */ @@ -126,8 +126,8 @@ #define TX_DCNT0x80/* TX descriptor count */ #define RX_DCNT0x80/* RX descriptor count */ #define MAX_BUF_SIZE 0x600 -#define ALLOC_DESC_SIZE((TX_DCNT+RX_DCNT) * \ - sizeof(struct r6040_descriptor) + 0x10) +#define RX_DESC_SIZE (RX_DCNT * sizeof(struct r6040_descriptor)) +#define TX_DESC_SIZE (TX_DCNT * sizeof(struct r6040_descriptor)) #define MBCR_DEFAULT 0x012A /* MAC Bus Control Register */ #define MCAST_MAX 4 /* Max number multicast addresses to filter */ @@ -164,10 +164,12 @@ struct r6040_private { struct r6040_descriptor *rx_remove_ptr; struct r6040_descriptor *tx_insert_ptr; struct r6040_descriptor *tx_remove_ptr; + struct r6040_descriptor *rx_ring; + struct r6040_descriptor *tx_ring; + dma_addr_t rx_ring_dma; + dma_addr_t tx_ring_dma; u16 tx_free_desc, rx_free_desc, phy_addr, phy_mode; u16 mcr0, mcr1; - dma_addr_t desc_dma; - char*desc_pool; u16 switch_sig; struct net_device *dev; struct mii_if_info mii_if; @@ -233,8 +235,7 @@ static void mdio_write(struct net_device *dev, int mii_id, int reg, int val) phy_write(ioaddr, lp-phy_addr, reg, val); } -static void -r6040_tx_timeout(struct net_device *dev) +static void r6040_tx_timeout(struct net_device *dev) { struct r6040_private *priv = netdev_priv(dev); @@ -260,7 +261,7 @@ static void rx_buf_alloc(struct r6040_private *lp, struct net_device *dev) if (!descptr-skb_ptr) break; descptr-buf = cpu_to_le32(pci_map_single(lp-pdev, - descptr-skb_ptr-tail, + descptr-skb_ptr-data, MAX_BUF_SIZE, PCI_DMA_FROMDEVICE)); descptr-status = 0x8000; descptr = descptr-vndescp; @@ -291,6 +292,7 @@ static void r6040_down(struct net_device *dev) { struct r6040_private *lp = netdev_priv(dev); void __iomem *ioaddr = lp-base; + struct pci_dev *pdev = lp-pdev; int i; int limit = 2048; u16 *adrp; @@ -334,12 +336,11 @@ static void r6040_down(struct net_device *dev) } /* Free Descriptor memory */ - pci_free_consistent(lp-pdev, ALLOC_DESC_SIZE, - lp-desc_pool, lp-desc_dma); + pci_free_consistent(pdev, RX_DESC_SIZE, lp-rx_ring, lp-rx_ring_dma); + pci_free_consistent(pdev, TX_DESC_SIZE, lp-tx_ring, lp-tx_ring_dma); } -static int -r6040_close(struct net_device *dev) +static int r6040_close(struct net_device *dev) { struct r6040_private *lp = netdev_priv(dev); @@ -402,7 +403,7 @@ static void r6040_set_carrier(struct mii_if_info *mii) static int r6040_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { struct r6040_private *lp = netdev_priv(dev); - struct mii_ioctl_data *data = (struct mii_ioctl_data *) rq-ifr_data; + struct mii_ioctl_data *data = if_mii(rq); int rc; if (!netif_running(dev)) @@ -571,73 +572,58 @@ static irqreturn_t r6040_interrupt(int irq, void *dev_id) static void r6040_poll_controller(struct net_device *dev) { disable_irq(dev-irq); - r6040_interrupt(dev-irq, (void *)dev); + r6040_interrupt(dev-irq, dev);