]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/net/macb.c
ucc_geth: Fix MODULE_DEVICE_TABLE() duplication
[linux-2.6-omap-h63xx.git] / drivers / net / macb.c
index 2af20459814424736c589bbc64a90973c53e3e41..0e04f7ac3f2ec36a90c7e15b62fa9b86b9da09eb 100644 (file)
@@ -357,7 +357,6 @@ static int macb_rx_frame(struct macb *bp, unsigned int first_frag,
        }
 
        skb_reserve(skb, RX_OFFSET);
-       skb->dev = bp->dev;
        skb->ip_summed = CHECKSUM_NONE;
        skb_put(skb, len);
 
@@ -368,9 +367,10 @@ static int macb_rx_frame(struct macb *bp, unsigned int first_frag,
                        BUG_ON(frag != last_frag);
                        frag_len = len - offset;
                }
-               memcpy(skb->data + offset,
-                      bp->rx_buffers + (RX_BUFFER_SIZE * frag),
-                      frag_len);
+               skb_copy_to_linear_data_offset(skb, offset,
+                                              (bp->rx_buffers +
+                                               (RX_BUFFER_SIZE * frag)),
+                                              frag_len);
                offset += RX_BUFFER_SIZE;
                bp->rx_ring[frag].addr &= ~MACB_BIT(RX_USED);
                wmb();
@@ -576,7 +576,8 @@ static int macb_start_xmit(struct sk_buff *skb, struct net_device *dev)
        int i;
        dev_dbg(&bp->pdev->dev,
                "start_xmit: len %u head %p data %p tail %p end %p\n",
-               skb->len, skb->head, skb->data, skb->tail, skb->end);
+               skb->len, skb->head, skb->data,
+               skb_tail_pointer(skb), skb_end_pointer(skb));
        dev_dbg(&bp->pdev->dev,
                "data:");
        for (i = 0; i < 16; i++)
@@ -881,27 +882,15 @@ static struct net_device_stats *macb_get_stats(struct net_device *dev)
 static int macb_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
 {
        struct macb *bp = netdev_priv(dev);
-       int ret;
-       unsigned long flags;
-
-       spin_lock_irqsave(&bp->lock, flags);
-       ret = mii_ethtool_gset(&bp->mii, cmd);
-       spin_unlock_irqrestore(&bp->lock, flags);
 
-       return ret;
+       return mii_ethtool_gset(&bp->mii, cmd);
 }
 
 static int macb_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
 {
        struct macb *bp = netdev_priv(dev);
-       int ret;
-       unsigned long flags;
 
-       spin_lock_irqsave(&bp->lock, flags);
-       ret = mii_ethtool_sset(&bp->mii, cmd);
-       spin_unlock_irqrestore(&bp->lock, flags);
-
-       return ret;
+       return mii_ethtool_sset(&bp->mii, cmd);
 }
 
 static void macb_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
@@ -930,17 +919,11 @@ static struct ethtool_ops macb_ethtool_ops = {
 static int macb_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
 {
        struct macb *bp = netdev_priv(dev);
-       int ret;
-       unsigned long flags;
 
        if (!netif_running(dev))
                return -EINVAL;
 
-       spin_lock_irqsave(&bp->lock, flags);
-       ret = generic_mii_ioctl(&bp->mii, if_mii(rq), cmd, NULL);
-       spin_unlock_irqrestore(&bp->lock, flags);
-
-       return ret;
+       return generic_mii_ioctl(&bp->mii, if_mii(rq), cmd, NULL);
 }
 
 static ssize_t macb_mii_show(const struct device *_dev, char *buf,
@@ -1046,6 +1029,14 @@ static int __devinit macb_probe(struct platform_device *pdev)
 
        spin_lock_init(&bp->lock);
 
+#if defined(CONFIG_ARCH_AT91)
+       bp->pclk = clk_get(&pdev->dev, "macb_clk");
+       if (IS_ERR(bp->pclk)) {
+               dev_err(&pdev->dev, "failed to get macb_clk\n");
+               goto err_out_free_dev;
+       }
+       clk_enable(bp->pclk);
+#else
        bp->pclk = clk_get(&pdev->dev, "pclk");
        if (IS_ERR(bp->pclk)) {
                dev_err(&pdev->dev, "failed to get pclk\n");
@@ -1059,6 +1050,7 @@ static int __devinit macb_probe(struct platform_device *pdev)
 
        clk_enable(bp->pclk);
        clk_enable(bp->hclk);
+#endif
 
        bp->regs = ioremap(regs->start, regs->end - regs->start + 1);
        if (!bp->regs) {
@@ -1068,7 +1060,7 @@ static int __devinit macb_probe(struct platform_device *pdev)
        }
 
        dev->irq = platform_get_irq(pdev, 0);
-       err = request_irq(dev->irq, macb_interrupt, SA_SAMPLE_RANDOM,
+       err = request_irq(dev->irq, macb_interrupt, IRQF_SAMPLE_RANDOM,
                          dev->name, dev);
        if (err) {
                printk(KERN_ERR
@@ -1119,9 +1111,17 @@ static int __devinit macb_probe(struct platform_device *pdev)
 
        pdata = pdev->dev.platform_data;
        if (pdata && pdata->is_rmii)
+#if defined(CONFIG_ARCH_AT91)
+               macb_writel(bp, USRIO, (MACB_BIT(RMII) | MACB_BIT(CLKEN)) );
+#else
                macb_writel(bp, USRIO, 0);
+#endif
        else
+#if defined(CONFIG_ARCH_AT91)
+               macb_writel(bp, USRIO, MACB_BIT(CLKEN));
+#else
                macb_writel(bp, USRIO, MACB_BIT(MII));
+#endif
 
        bp->tx_pending = DEF_TX_RING_PENDING;
 
@@ -1148,9 +1148,11 @@ err_out_free_irq:
 err_out_iounmap:
        iounmap(bp->regs);
 err_out_disable_clocks:
+#ifndef CONFIG_ARCH_AT91
        clk_disable(bp->hclk);
-       clk_disable(bp->pclk);
        clk_put(bp->hclk);
+#endif
+       clk_disable(bp->pclk);
 err_out_put_pclk:
        clk_put(bp->pclk);
 err_out_free_dev:
@@ -1173,9 +1175,11 @@ static int __devexit macb_remove(struct platform_device *pdev)
                unregister_netdev(dev);
                free_irq(dev->irq, dev);
                iounmap(bp->regs);
+#ifndef CONFIG_ARCH_AT91
                clk_disable(bp->hclk);
-               clk_disable(bp->pclk);
                clk_put(bp->hclk);
+#endif
+               clk_disable(bp->pclk);
                clk_put(bp->pclk);
                free_netdev(dev);
                platform_set_drvdata(pdev, NULL);