e1000e: allow tx of pre-formatted vlan tagged packets
[safe/jmp/linux-2.6] / drivers / net / sb1250-mac.c
index ce10cfa..88dd2e0 100644 (file)
@@ -256,7 +256,7 @@ struct sbmac_softc {
        struct net_device       *sbm_dev;       /* pointer to linux device */
        struct napi_struct      napi;
        struct phy_device       *phy_dev;       /* the associated PHY device */
-       struct mii_bus          mii_bus;        /* the MII bus */
+       struct mii_bus          *mii_bus;       /* the MII bus */
        int                     phy_irq[PHY_MAX_ADDR];
        spinlock_t              sbm_lock;       /* spin lock */
        int                     sbm_devflags;   /* current device flags */
@@ -2039,9 +2039,9 @@ static irqreturn_t sbmac_intr(int irq,void *dev_instance)
                sbdma_tx_process(sc,&(sc->sbm_txdma), 0);
 
        if (isr & (M_MAC_INT_CHANNEL << S_MAC_RX_CH0)) {
-               if (netif_rx_schedule_prep(dev, &sc->napi)) {
+               if (napi_schedule_prep(&sc->napi)) {
                        __raw_writeq(0, sc->sbm_imr);
-                       __netif_rx_schedule(dev, &sc->napi);
+                       __napi_schedule(&sc->napi);
                        /* Depend on the exit from poll to reenable intr */
                }
                else {
@@ -2292,7 +2292,6 @@ static int sbmac_init(struct platform_device *pldev, long long base)
        uint64_t ea_reg;
        int i;
        int err;
-       DECLARE_MAC_BUF(mac);
 
        sc->sbm_dev = dev;
        sc->sbe_idx = idx;
@@ -2348,10 +2347,17 @@ static int sbmac_init(struct platform_device *pldev, long long base)
        /* This is needed for PASS2 for Rx H/W checksum feature */
        sbmac_set_iphdr_offset(sc);
 
+       sc->mii_bus = mdiobus_alloc();
+       if (sc->mii_bus == NULL) {
+               sbmac_uninitctx(sc);
+               return -ENOMEM;
+       }
+
        err = register_netdev(dev);
        if (err) {
                printk(KERN_ERR "%s.%d: unable to register netdev\n",
                       sbmac_string, idx);
+               mdiobus_free(sc->mii_bus);
                sbmac_uninitctx(sc);
                return err;
        }
@@ -2366,20 +2372,20 @@ static int sbmac_init(struct platform_device *pldev, long long base)
         * process so we need to finish off the config message that
         * was being displayed)
         */
-       pr_info("%s: SiByte Ethernet at 0x%08Lx, address: %s\n",
-              dev->name, base, print_mac(mac, eaddr));
+       pr_info("%s: SiByte Ethernet at 0x%08Lx, address: %pM\n",
+              dev->name, base, eaddr);
 
-       sc->mii_bus.name = sbmac_mdio_string;
-       snprintf(sc->mii_bus.id, MII_BUS_ID_SIZE, "%x", idx);
-       sc->mii_bus.priv = sc;
-       sc->mii_bus.read = sbmac_mii_read;
-       sc->mii_bus.write = sbmac_mii_write;
-       sc->mii_bus.irq = sc->phy_irq;
+       sc->mii_bus->name = sbmac_mdio_string;
+       snprintf(sc->mii_bus->id, MII_BUS_ID_SIZE, "%x", idx);
+       sc->mii_bus->priv = sc;
+       sc->mii_bus->read = sbmac_mii_read;
+       sc->mii_bus->write = sbmac_mii_write;
+       sc->mii_bus->irq = sc->phy_irq;
        for (i = 0; i < PHY_MAX_ADDR; ++i)
-               sc->mii_bus.irq[i] = SBMAC_PHY_INT;
+               sc->mii_bus->irq[i] = SBMAC_PHY_INT;
 
-       sc->mii_bus.dev = &pldev->dev;
-       dev_set_drvdata(&pldev->dev, &sc->mii_bus);
+       sc->mii_bus->parent = &pldev->dev;
+       dev_set_drvdata(&pldev->dev, sc->mii_bus);
 
        return 0;
 }
@@ -2410,7 +2416,7 @@ static int sbmac_open(struct net_device *dev)
        /*
         * Probe PHY address
         */
-       err = mdiobus_register(&sc->mii_bus);
+       err = mdiobus_register(sc->mii_bus);
        if (err) {
                printk(KERN_ERR "%s: unable to register MDIO bus\n",
                       dev->name);
@@ -2447,7 +2453,7 @@ static int sbmac_open(struct net_device *dev)
        return 0;
 
 out_unregister:
-       mdiobus_unregister(&sc->mii_bus);
+       mdiobus_unregister(sc->mii_bus);
 
 out_unirq:
        free_irq(dev->irq, dev);
@@ -2463,7 +2469,7 @@ static int sbmac_mii_probe(struct net_device *dev)
        int i;
 
        for (i = 0; i < PHY_MAX_ADDR; i++) {
-               phy_dev = sc->mii_bus.phy_map[i];
+               phy_dev = sc->mii_bus->phy_map[i];
                if (phy_dev)
                        break;
        }
@@ -2472,7 +2478,7 @@ static int sbmac_mii_probe(struct net_device *dev)
                return -ENXIO;
        }
 
-       phy_dev = phy_connect(dev, phy_dev->dev.bus_id, &sbmac_mii_poll, 0,
+       phy_dev = phy_connect(dev, dev_name(&phy_dev->dev), &sbmac_mii_poll, 0,
                              PHY_INTERFACE_MODE_GMII);
        if (IS_ERR(phy_dev)) {
                printk(KERN_ERR "%s: could not attach to PHY\n", dev->name);
@@ -2494,7 +2500,7 @@ static int sbmac_mii_probe(struct net_device *dev)
 
        pr_info("%s: attached PHY driver [%s] (mii_bus:phy_addr=%s, irq=%d)\n",
                dev->name, phy_dev->drv->name,
-               phy_dev->dev.bus_id, phy_dev->irq);
+               dev_name(&phy_dev->dev), phy_dev->irq);
 
        sc->phy_dev = phy_dev;
 
@@ -2641,7 +2647,7 @@ static int sbmac_close(struct net_device *dev)
        phy_disconnect(sc->phy_dev);
        sc->phy_dev = NULL;
 
-       mdiobus_unregister(&sc->mii_bus);
+       mdiobus_unregister(sc->mii_bus);
 
        free_irq(dev->irq, dev);
 
@@ -2661,7 +2667,7 @@ static int sbmac_poll(struct napi_struct *napi, int budget)
        sbdma_tx_process(sc, &(sc->sbm_txdma), 1);
 
        if (work_done < budget) {
-               netif_rx_complete(dev, napi);
+               napi_complete(napi);
 
 #ifdef CONFIG_SBMAC_COALESCE
                __raw_writeq(((M_MAC_INT_EOP_COUNT | M_MAC_INT_EOP_TIMER) << S_MAC_TX_CH0) |
@@ -2691,7 +2697,7 @@ static int __init sbmac_probe(struct platform_device *pldev)
        sbm_base = ioremap_nocache(res->start, res->end - res->start + 1);
        if (!sbm_base) {
                printk(KERN_ERR "%s: unable to map device registers\n",
-                      pldev->dev.bus_id);
+                      dev_name(&pldev->dev));
                err = -ENOMEM;
                goto out_out;
        }
@@ -2702,7 +2708,7 @@ static int __init sbmac_probe(struct platform_device *pldev)
         * If we find a zero, skip this MAC.
         */
        sbmac_orig_hwaddr = __raw_readq(sbm_base + R_MAC_ETHERNET_ADDR);
-       pr_debug("%s: %sconfiguring MAC at 0x%08Lx\n", pldev->dev.bus_id,
+       pr_debug("%s: %sconfiguring MAC at 0x%08Lx\n", dev_name(&pldev->dev),
                 sbmac_orig_hwaddr ? "" : "not ", (long long)res->start);
        if (sbmac_orig_hwaddr == 0) {
                err = 0;
@@ -2715,7 +2721,7 @@ static int __init sbmac_probe(struct platform_device *pldev)
        dev = alloc_etherdev(sizeof(struct sbmac_softc));
        if (!dev) {
                printk(KERN_ERR "%s: unable to allocate etherdev\n",
-                      pldev->dev.bus_id);
+                      dev_name(&pldev->dev));
                err = -ENOMEM;
                goto out_unmap;
        }
@@ -2750,6 +2756,7 @@ static int __exit sbmac_remove(struct platform_device *pldev)
 
        unregister_netdev(dev);
        sbmac_uninitctx(sc);
+       mdiobus_free(sc->mii_bus);
        iounmap(sc->sbm_base);
        free_netdev(dev);