Commit 3bf34bc3 authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://gkernel.bkbits.net/net-drivers-2.6

into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents 3d482f5a 308fd19d
...@@ -475,8 +475,9 @@ void emac_phy_write(struct net_device *dev, int mii_id, int reg, int data) ...@@ -475,8 +475,9 @@ void emac_phy_write(struct net_device *dev, int mii_id, int reg, int data)
out_be32(&emacp->em0stacr, stacr); out_be32(&emacp->em0stacr, stacr);
while (((stacr = in_be32(&emacp->em0stacr) & EMAC_STACR_OC) == 0) count = 0;
&& (count++ < 5000)) while ((((stacr = in_be32(&emacp->em0stacr)) & EMAC_STACR_OC) == 0)
&& (count++ < MDIO_DELAY))
udelay(1); udelay(1);
MDIO_DEBUG((" (count was %d)\n", count)); MDIO_DEBUG((" (count was %d)\n", count));
...@@ -912,7 +913,6 @@ static int emac_start_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -912,7 +913,6 @@ static int emac_start_xmit(struct sk_buff *skb, struct net_device *dev)
PKT_DEBUG(("emac_start_xmit() stopping queue\n")); PKT_DEBUG(("emac_start_xmit() stopping queue\n"));
netif_stop_queue(dev); netif_stop_queue(dev);
spin_unlock_irqrestore(&fep->lock, flags); spin_unlock_irqrestore(&fep->lock, flags);
restore_flags(flags);
return -EBUSY; return -EBUSY;
} }
...@@ -1281,7 +1281,7 @@ static void emac_init_rings(struct net_device *dev) ...@@ -1281,7 +1281,7 @@ static void emac_init_rings(struct net_device *dev)
/* Format the receive descriptor ring. */ /* Format the receive descriptor ring. */
ep->rx_slot = 0; ep->rx_slot = 0;
/* Default is MTU=1500 + Ethernet overhead */ /* Default is MTU=1500 + Ethernet overhead */
ep->rx_buffer_size = ENET_DEF_BUF_SIZE; ep->rx_buffer_size = dev->mtu + ENET_HEADER_SIZE + ENET_FCS_SIZE;
emac_rx_fill(dev, 0); emac_rx_fill(dev, 0);
if (ep->rx_slot != 0) { if (ep->rx_slot != 0) {
printk(KERN_ERR printk(KERN_ERR
......
...@@ -77,8 +77,6 @@ ...@@ -77,8 +77,6 @@
#define ENET_HEADER_SIZE 14 #define ENET_HEADER_SIZE 14
#define ENET_FCS_SIZE 4 #define ENET_FCS_SIZE 4
#define ENET_DEF_MTU_SIZE 1500
#define ENET_DEF_BUF_SIZE (ENET_DEF_MTU_SIZE + ENET_HEADER_SIZE + ENET_FCS_SIZE)
#define EMAC_MIN_FRAME 64 #define EMAC_MIN_FRAME 64
#define EMAC_MAX_FRAME 9018 #define EMAC_MAX_FRAME 9018
#define EMAC_MIN_MTU (EMAC_MIN_FRAME - ENET_HEADER_SIZE - ENET_FCS_SIZE) #define EMAC_MIN_MTU (EMAC_MIN_FRAME - ENET_HEADER_SIZE - ENET_FCS_SIZE)
......
...@@ -1960,8 +1960,6 @@ static int __devinit de_init_one (struct pci_dev *pdev, ...@@ -1960,8 +1960,6 @@ static int __devinit de_init_one (struct pci_dev *pdev,
dev->tx_timeout = de_tx_timeout; dev->tx_timeout = de_tx_timeout;
dev->watchdog_timeo = TX_TIMEOUT; dev->watchdog_timeo = TX_TIMEOUT;
dev->irq = pdev->irq;
de = dev->priv; de = dev->priv;
de->de21040 = ent->driver_data == 0 ? 1 : 0; de->de21040 = ent->driver_data == 0 ? 1 : 0;
de->pdev = pdev; de->pdev = pdev;
...@@ -1997,6 +1995,8 @@ static int __devinit de_init_one (struct pci_dev *pdev, ...@@ -1997,6 +1995,8 @@ static int __devinit de_init_one (struct pci_dev *pdev,
goto err_out_res; goto err_out_res;
} }
dev->irq = pdev->irq;
/* obtain and check validity of PCI I/O address */ /* obtain and check validity of PCI I/O address */
pciaddr = pci_resource_start(pdev, 1); pciaddr = pci_resource_start(pdev, 1);
if (!pciaddr) { if (!pciaddr) {
......
...@@ -691,7 +691,7 @@ static void dscc4_free1(struct pci_dev *pdev) ...@@ -691,7 +691,7 @@ static void dscc4_free1(struct pci_dev *pdev)
root = ppriv->root; root = ppriv->root;
for (i = 0; i < dev_per_card; i++) for (i = 0; i < dev_per_card; i++)
unregister_hdlc_device(dscc4_to_dev(&root[i])); unregister_hdlc_device(dscc4_to_dev(root + i));
pci_set_drvdata(pdev, NULL); pci_set_drvdata(pdev, NULL);
...@@ -706,33 +706,36 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev, ...@@ -706,33 +706,36 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev,
{ {
struct dscc4_pci_priv *priv; struct dscc4_pci_priv *priv;
struct dscc4_dev_priv *dpriv; struct dscc4_dev_priv *dpriv;
static int cards_found = 0;
void __iomem *ioaddr; void __iomem *ioaddr;
int i; int i, rc;
printk(KERN_DEBUG "%s", version); printk(KERN_DEBUG "%s", version);
if (pci_enable_device(pdev)) rc = pci_enable_device(pdev);
goto err_out; if (rc < 0)
if (!request_mem_region(pci_resource_start(pdev, 0), goto out;
pci_resource_len(pdev, 0), "registers")) {
rc = pci_request_region(pdev, 0, "registers");
if (rc < 0) {
printk(KERN_ERR "%s: can't reserve MMIO region (regs)\n", printk(KERN_ERR "%s: can't reserve MMIO region (regs)\n",
DRV_NAME); DRV_NAME);
goto err_out; goto err_disable_0;
} }
if (!request_mem_region(pci_resource_start(pdev, 1), rc = pci_request_region(pdev, 1, "LBI interface");
pci_resource_len(pdev, 1), "LBI interface")) { if (rc < 0) {
printk(KERN_ERR "%s: can't reserve MMIO region (lbi)\n", printk(KERN_ERR "%s: can't reserve MMIO region (lbi)\n",
DRV_NAME); DRV_NAME);
goto err_out_free_mmio_region0; goto err_free_mmio_region_1;
} }
ioaddr = ioremap(pci_resource_start(pdev, 0), ioaddr = ioremap(pci_resource_start(pdev, 0),
pci_resource_len(pdev, 0)); pci_resource_len(pdev, 0));
if (!ioaddr) { if (!ioaddr) {
printk(KERN_ERR "%s: cannot remap MMIO region %lx @ %lx\n", printk(KERN_ERR "%s: cannot remap MMIO region %lx @ %lx\n",
DRV_NAME, pci_resource_len(pdev, 0), DRV_NAME, pci_resource_len(pdev, 0),
pci_resource_start(pdev, 0)); pci_resource_start(pdev, 0));
goto err_out_free_mmio_region; rc = -EIO;
goto err_free_mmio_regions_2;
} }
printk(KERN_DEBUG "Siemens DSCC4, MMIO at %#lx (regs), %#lx (lbi), IRQ %d\n", printk(KERN_DEBUG "Siemens DSCC4, MMIO at %#lx (regs), %#lx (lbi), IRQ %d\n",
pci_resource_start(pdev, 0), pci_resource_start(pdev, 0),
...@@ -742,14 +745,16 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev, ...@@ -742,14 +745,16 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev,
pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0xf8); pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0xf8);
pci_set_master(pdev); pci_set_master(pdev);
if (dscc4_found1(pdev, ioaddr)) rc = dscc4_found1(pdev, ioaddr);
goto err_out_iounmap; if (rc < 0)
goto err_iounmap_3;
priv = (struct dscc4_pci_priv *)pci_get_drvdata(pdev); priv = pci_get_drvdata(pdev);
if (request_irq(pdev->irq, &dscc4_irq, SA_SHIRQ, DRV_NAME, priv->root)){ rc = request_irq(pdev->irq, dscc4_irq, SA_SHIRQ, DRV_NAME, priv->root);
if (rc < 0) {
printk(KERN_WARNING "%s: IRQ %d busy\n", DRV_NAME, pdev->irq); printk(KERN_WARNING "%s: IRQ %d busy\n", DRV_NAME, pdev->irq);
goto err_out_free1; goto err_release_4;
} }
/* power up/little endian/dma core controlled via lrda/ltda */ /* power up/little endian/dma core controlled via lrda/ltda */
...@@ -769,9 +774,11 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev, ...@@ -769,9 +774,11 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev,
priv->iqcfg = (u32 *) pci_alloc_consistent(pdev, priv->iqcfg = (u32 *) pci_alloc_consistent(pdev,
IRQ_RING_SIZE*sizeof(u32), &priv->iqcfg_dma); IRQ_RING_SIZE*sizeof(u32), &priv->iqcfg_dma);
if (!priv->iqcfg) if (!priv->iqcfg)
goto err_out_free_irq; goto err_free_irq_5;
writel(priv->iqcfg_dma, ioaddr + IQCFG); writel(priv->iqcfg_dma, ioaddr + IQCFG);
rc = -ENOMEM;
/* /*
* SCC 0-3 private rx/tx irq structures * SCC 0-3 private rx/tx irq structures
* IQRX/TXi needs to be set soon. Learned it the hard way... * IQRX/TXi needs to be set soon. Learned it the hard way...
...@@ -781,7 +788,7 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev, ...@@ -781,7 +788,7 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev,
dpriv->iqtx = (u32 *) pci_alloc_consistent(pdev, dpriv->iqtx = (u32 *) pci_alloc_consistent(pdev,
IRQ_RING_SIZE*sizeof(u32), &dpriv->iqtx_dma); IRQ_RING_SIZE*sizeof(u32), &dpriv->iqtx_dma);
if (!dpriv->iqtx) if (!dpriv->iqtx)
goto err_out_free_iqtx; goto err_free_iqtx_6;
writel(dpriv->iqtx_dma, ioaddr + IQTX0 + i*4); writel(dpriv->iqtx_dma, ioaddr + IQTX0 + i*4);
} }
for (i = 0; i < dev_per_card; i++) { for (i = 0; i < dev_per_card; i++) {
...@@ -789,7 +796,7 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev, ...@@ -789,7 +796,7 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev,
dpriv->iqrx = (u32 *) pci_alloc_consistent(pdev, dpriv->iqrx = (u32 *) pci_alloc_consistent(pdev,
IRQ_RING_SIZE*sizeof(u32), &dpriv->iqrx_dma); IRQ_RING_SIZE*sizeof(u32), &dpriv->iqrx_dma);
if (!dpriv->iqrx) if (!dpriv->iqrx)
goto err_out_free_iqrx; goto err_free_iqrx_7;
writel(dpriv->iqrx_dma, ioaddr + IQRX0 + i*4); writel(dpriv->iqrx_dma, ioaddr + IQRX0 + i*4);
} }
...@@ -804,17 +811,18 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev, ...@@ -804,17 +811,18 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev,
writel(0xff200001, ioaddr + GCMDR); writel(0xff200001, ioaddr + GCMDR);
cards_found++; rc = 0;
return 0; out:
return rc;
err_out_free_iqrx: err_free_iqrx_7:
while (--i >= 0) { while (--i >= 0) {
dpriv = priv->root + i; dpriv = priv->root + i;
pci_free_consistent(pdev, IRQ_RING_SIZE*sizeof(u32), pci_free_consistent(pdev, IRQ_RING_SIZE*sizeof(u32),
dpriv->iqrx, dpriv->iqrx_dma); dpriv->iqrx, dpriv->iqrx_dma);
} }
i = dev_per_card; i = dev_per_card;
err_out_free_iqtx: err_free_iqtx_6:
while (--i >= 0) { while (--i >= 0) {
dpriv = priv->root + i; dpriv = priv->root + i;
pci_free_consistent(pdev, IRQ_RING_SIZE*sizeof(u32), pci_free_consistent(pdev, IRQ_RING_SIZE*sizeof(u32),
...@@ -822,20 +830,19 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev, ...@@ -822,20 +830,19 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev,
} }
pci_free_consistent(pdev, IRQ_RING_SIZE*sizeof(u32), priv->iqcfg, pci_free_consistent(pdev, IRQ_RING_SIZE*sizeof(u32), priv->iqcfg,
priv->iqcfg_dma); priv->iqcfg_dma);
err_out_free_irq: err_free_irq_5:
free_irq(pdev->irq, priv->root); free_irq(pdev->irq, priv->root);
err_out_free1: err_release_4:
dscc4_free1(pdev); dscc4_free1(pdev);
err_out_iounmap: err_iounmap_3:
iounmap (ioaddr); iounmap (ioaddr);
err_out_free_mmio_region: err_free_mmio_regions_2:
release_mem_region(pci_resource_start(pdev, 1), pci_release_region(pdev, 1);
pci_resource_len(pdev, 1)); err_free_mmio_region_1:
err_out_free_mmio_region0: pci_release_region(pdev, 0);
release_mem_region(pci_resource_start(pdev, 0), err_disable_0:
pci_resource_len(pdev, 0)); pci_disable_device(pdev);
err_out: goto out;
return -ENODEV;
}; };
/* /*
...@@ -882,8 +889,7 @@ static int dscc4_found1(struct pci_dev *pdev, void __iomem *ioaddr) ...@@ -882,8 +889,7 @@ static int dscc4_found1(struct pci_dev *pdev, void __iomem *ioaddr)
struct dscc4_dev_priv *root; struct dscc4_dev_priv *root;
int i, ret = -ENOMEM; int i, ret = -ENOMEM;
root = (struct dscc4_dev_priv *) root = kmalloc(dev_per_card*sizeof(*root), GFP_KERNEL);
kmalloc(dev_per_card*sizeof(*root), GFP_KERNEL);
if (!root) { if (!root) {
printk(KERN_ERR "%s: can't allocate data\n", DRV_NAME); printk(KERN_ERR "%s: can't allocate data\n", DRV_NAME);
goto err_out; goto err_out;
...@@ -892,22 +898,17 @@ static int dscc4_found1(struct pci_dev *pdev, void __iomem *ioaddr) ...@@ -892,22 +898,17 @@ static int dscc4_found1(struct pci_dev *pdev, void __iomem *ioaddr)
for (i = 0; i < dev_per_card; i++) { for (i = 0; i < dev_per_card; i++) {
root[i].dev = alloc_hdlcdev(root + i); root[i].dev = alloc_hdlcdev(root + i);
if (!root[i].dev) { if (!root[i].dev)
while (i--)
free_netdev(root[i].dev);
goto err_free_dev; goto err_free_dev;
}
} }
ppriv = (struct dscc4_pci_priv *) kmalloc(sizeof(*ppriv), GFP_KERNEL); ppriv = kmalloc(sizeof(*ppriv), GFP_KERNEL);
if (!ppriv) { if (!ppriv) {
printk(KERN_ERR "%s: can't allocate private data\n", DRV_NAME); printk(KERN_ERR "%s: can't allocate private data\n", DRV_NAME);
goto err_free_dev2; goto err_free_dev;
} }
memset(ppriv, 0, sizeof(struct dscc4_pci_priv)); memset(ppriv, 0, sizeof(struct dscc4_pci_priv));
ret = dscc4_set_quartz(root, quartz);
if (ret < 0)
goto err_free_priv;
ppriv->root = root; ppriv->root = root;
spin_lock_init(&ppriv->lock); spin_lock_init(&ppriv->lock);
...@@ -951,20 +952,24 @@ static int dscc4_found1(struct pci_dev *pdev, void __iomem *ioaddr) ...@@ -951,20 +952,24 @@ static int dscc4_found1(struct pci_dev *pdev, void __iomem *ioaddr)
goto err_unregister; goto err_unregister;
} }
} }
ret = dscc4_set_quartz(root, quartz);
if (ret < 0)
goto err_unregister;
pci_set_drvdata(pdev, ppriv); pci_set_drvdata(pdev, ppriv);
return ret; return ret;
err_unregister: err_unregister:
while (--i >= 0) { while (i-- > 0) {
dscc4_release_ring(root + i); dscc4_release_ring(root + i);
unregister_hdlc_device(dscc4_to_dev(&root[i])); unregister_hdlc_device(dscc4_to_dev(root + i));
} }
err_free_priv:
kfree(ppriv); kfree(ppriv);
err_free_dev2: i = dev_per_card;
for (i = 0; i < dev_per_card; i++)
free_netdev(root[i].dev);
err_free_dev: err_free_dev:
while (i-- > 0)
free_netdev(root[i].dev);
kfree(root); kfree(root);
err_out: err_out:
return ret; return ret;
...@@ -1998,10 +2003,10 @@ static void __devexit dscc4_remove_one(struct pci_dev *pdev) ...@@ -1998,10 +2003,10 @@ static void __devexit dscc4_remove_one(struct pci_dev *pdev)
iounmap(ioaddr); iounmap(ioaddr);
release_mem_region(pci_resource_start(pdev, 1), pci_release_region(pdev, 1);
pci_resource_len(pdev, 1)); pci_release_region(pdev, 0);
release_mem_region(pci_resource_start(pdev, 0),
pci_resource_len(pdev, 0)); pci_disable_device(pdev);
} }
static int dscc4_hdlc_attach(struct net_device *dev, unsigned short encoding, static int dscc4_hdlc_attach(struct net_device *dev, unsigned short encoding,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment