OSDN Git Service

Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
authorDavid S. Miller <davem@davemloft.net>
Fri, 22 Jul 2011 03:21:27 +0000 (20:21 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 22 Jul 2011 03:21:27 +0000 (20:21 -0700)
1  2 
drivers/net/jme.c

diff --combined drivers/net/jme.c
@@@ -271,7 -271,9 +271,7 @@@ jme_reset_mac_processor(struct jme_adap
  static inline void
  jme_clear_pm(struct jme_adapter *jme)
  {
 -      jwrite32(jme, JME_PMCS, 0xFFFF0000 | jme->reg_pmcs);
 -      pci_set_power_state(jme->pdev, PCI_D0);
 -      device_set_wakeup_enable(&jme->pdev->dev, false);
 +      jwrite32(jme, JME_PMCS, PMCS_STMASK | jme->reg_pmcs);
  }
  
  static int
@@@ -751,20 -753,28 +751,28 @@@ jme_make_new_rx_buf(struct jme_adapter 
        struct jme_ring *rxring = &(jme->rxring[0]);
        struct jme_buffer_info *rxbi = rxring->bufinf + i;
        struct sk_buff *skb;
+       dma_addr_t mapping;
  
        skb = netdev_alloc_skb(jme->dev,
                jme->dev->mtu + RX_EXTRA_LEN);
        if (unlikely(!skb))
                return -ENOMEM;
  
+       mapping = pci_map_page(jme->pdev, virt_to_page(skb->data),
+                              offset_in_page(skb->data), skb_tailroom(skb),
+                              PCI_DMA_FROMDEVICE);
+       if (unlikely(pci_dma_mapping_error(jme->pdev, mapping))) {
+               dev_kfree_skb(skb);
+               return -ENOMEM;
+       }
+       if (likely(rxbi->mapping))
+               pci_unmap_page(jme->pdev, rxbi->mapping,
+                              rxbi->len, PCI_DMA_FROMDEVICE);
        rxbi->skb = skb;
        rxbi->len = skb_tailroom(skb);
-       rxbi->mapping = pci_map_page(jme->pdev,
-                                       virt_to_page(skb->data),
-                                       offset_in_page(skb->data),
-                                       rxbi->len,
-                                       PCI_DMA_FROMDEVICE);
+       rxbi->mapping = mapping;
        return 0;
  }
  
@@@ -1048,12 -1058,16 +1056,12 @@@ jme_alloc_and_feed_skb(struct jme_adapt
                        skb_checksum_none_assert(skb);
  
                if (rxdesc->descwb.flags & cpu_to_le16(RXWBFLAG_TAGON)) {
 -                      if (jme->vlgrp) {
 -                              jme->jme_vlan_rx(skb, jme->vlgrp,
 -                                      le16_to_cpu(rxdesc->descwb.vlan));
 -                              NET_STAT(jme).rx_bytes += 4;
 -                      } else {
 -                              dev_kfree_skb(skb);
 -                      }
 -              } else {
 -                      jme->jme_rx(skb);
 +                      u16 vid = le16_to_cpu(rxdesc->descwb.vlan);
 +
 +                      __vlan_hwaccel_put_tag(skb, vid);
 +                      NET_STAT(jme).rx_bytes += 4;
                }
 +              jme->jme_rx(skb);
  
                if ((rxdesc->descwb.flags & cpu_to_le16(RXWBFLAG_DEST)) ==
                    cpu_to_le16(RXWBFLAG_DEST_MUL))
@@@ -1811,9 -1825,11 +1819,9 @@@ jme_powersave_phy(struct jme_adapter *j
  {
        if (jme->reg_pmcs) {
                jme_set_100m_half(jme);
 -
                if (jme->reg_pmcs & (PMCS_LFEN | PMCS_LREN))
                        jme_wait_link(jme);
 -
 -              jwrite32(jme, JME_PMCS, jme->reg_pmcs);
 +              jme_clear_pm(jme);
        } else {
                jme_phy_off(jme);
        }
@@@ -2278,6 -2294,16 +2286,6 @@@ static inline void jme_resume_rx(struc
  }
  
  static void
 -jme_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp)
 -{
 -      struct jme_adapter *jme = netdev_priv(netdev);
 -
 -      jme_pause_rx(jme);
 -      jme->vlgrp = grp;
 -      jme_resume_rx(jme);
 -}
 -
 -static void
  jme_get_drvinfo(struct net_device *netdev,
                     struct ethtool_drvinfo *info)
  {
@@@ -2387,6 -2413,7 +2395,6 @@@ jme_set_coalesce(struct net_device *net
            test_bit(JME_FLAG_POLL, &jme->flags)) {
                clear_bit(JME_FLAG_POLL, &jme->flags);
                jme->jme_rx = netif_rx;
 -              jme->jme_vlan_rx = vlan_hwaccel_rx;
                dpi->cur                = PCC_P1;
                dpi->attempt            = PCC_P1;
                dpi->cnt                = 0;
                   !(test_bit(JME_FLAG_POLL, &jme->flags))) {
                set_bit(JME_FLAG_POLL, &jme->flags);
                jme->jme_rx = netif_receive_skb;
 -              jme->jme_vlan_rx = vlan_hwaccel_receive_skb;
                jme_interrupt_mode(jme);
        }
  
@@@ -2509,7 -2537,8 +2517,7 @@@ jme_set_wol(struct net_device *netdev
                jme->reg_pmcs |= PMCS_MFEN;
  
        jwrite32(jme, JME_PMCS, jme->reg_pmcs);
 -
 -      device_set_wakeup_enable(&jme->pdev->dev, jme->reg_pmcs);
 +      device_set_wakeup_enable(&jme->pdev->dev, !!(jme->reg_pmcs));
  
        return 0;
  }
@@@ -2834,6 -2863,7 +2842,6 @@@ static const struct net_device_ops jme_
        .ndo_set_multicast_list = jme_set_multi,
        .ndo_change_mtu         = jme_change_mtu,
        .ndo_tx_timeout         = jme_tx_timeout,
 -      .ndo_vlan_rx_register   = jme_vlan_rx_register,
        .ndo_fix_features       = jme_fix_features,
        .ndo_set_features       = jme_set_features,
  };
@@@ -2916,6 -2946,7 +2924,6 @@@ jme_init_one(struct pci_dev *pdev
        jme->pdev = pdev;
        jme->dev = netdev;
        jme->jme_rx = netif_rx;
 -      jme->jme_vlan_rx = vlan_hwaccel_rx;
        jme->old_mtu = netdev->mtu = 1500;
        jme->phylink = 0;
        jme->tx_ring_size = 1 << 10;
        jme->mii_if.mdio_write = jme_mdio_write;
  
        jme_clear_pm(jme);
 +      pci_set_power_state(jme->pdev, PCI_D0);
 +      device_set_wakeup_enable(&pdev->dev, true);
 +
        jme_set_phyfifo_5level(jme);
        jme->pcirev = pdev->revision;
        if (!jme->fpgaver)
@@@ -3115,9 -3143,8 +3123,9 @@@ jme_shutdown(struct pci_dev *pdev
        pci_pme_active(pdev, true);
  }
  
 -#ifdef CONFIG_PM
 -static int jme_suspend(struct device *dev)
 +#ifdef CONFIG_PM_SLEEP
 +static int
 +jme_suspend(struct device *dev)
  {
        struct pci_dev *pdev = to_pci_dev(dev);
        struct net_device *netdev = pci_get_drvdata(pdev);
        return 0;
  }
  
 -static int jme_resume(struct device *dev)
 +static int
 +jme_resume(struct device *dev)
  {
        struct pci_dev *pdev = to_pci_dev(dev);
        struct net_device *netdev = pci_get_drvdata(pdev);
        struct jme_adapter *jme = netdev_priv(netdev);
  
 -      jwrite32(jme, JME_PMCS, 0xFFFF0000 | jme->reg_pmcs);
 -
 +      jme_clear_pm(jme);
        jme_phy_on(jme);
        if (test_bit(JME_FLAG_SSET, &jme->flags))
                jme_set_settings(netdev, &jme->old_ecmd);