]> bbs.cooldavid.org Git - jme.git/blobdiff - jme.c
Fix compile error for udp header parse
[jme.git] / jme.c
diff --git a/jme.c b/jme.c
index 8d27f2730bcebcec5119db6b76e66c969ee1b032..4e4613a3dc2ffd80c765ee3d13d56dcc78cda5fd 100644 (file)
--- a/jme.c
+++ b/jme.c
@@ -59,6 +59,7 @@ module_param(no_extplug, int, 0);
 MODULE_PARM_DESC(no_extplug,
        "Do not use external plug signal for pseudo hot-plug.");
 
+#ifndef JME_NEW_PM_API
 static void
 jme_pci_wakeup_enable(struct jme_adapter *jme, int enable)
 {
@@ -71,6 +72,7 @@ jme_pci_wakeup_enable(struct jme_adapter *jme, int enable)
        pci_pme_active(jme->pdev, enable);
 #endif
 }
+#endif
 
 static int
 jme_mdio_read(struct net_device *netdev, int phy, int reg)
@@ -977,11 +979,29 @@ static u16
 jme_udpsum(struct sk_buff *skb)
 {
        u16 csum = 0xFFFFu;
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,21)
+       struct iphdr *iph;
+       int iphlen;
+       struct udphdr *udph;
+#endif
 
        if (skb->len < (ETH_HLEN + sizeof(struct iphdr)))
                return csum;
        if (skb->protocol != htons(ETH_P_IP))
                return csum;
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,21)
+       iph = (struct iphdr *)skb_pull(skb, ETH_HLEN);
+       iphlen = (iph->ihl << 2);
+       if ((iph->protocol != IPPROTO_UDP) ||
+           (skb->len < (iphlen + sizeof(struct udphdr)))) {
+               skb_push(skb, ETH_HLEN);
+               return csum;
+       }
+       udph = (struct udphdr *)skb_pull(skb, iphlen);
+       csum = udph->check;
+       skb_push(skb, iphlen);
+       skb_push(skb, ETH_HLEN);
+#else
        skb_set_network_header(skb, ETH_HLEN);
        if ((ip_hdr(skb)->protocol != IPPROTO_UDP) ||
            (skb->len < (ETH_HLEN +
@@ -995,6 +1015,7 @@ jme_udpsum(struct sk_buff *skb)
        csum = udp_hdr(skb)->check;
        skb_reset_transport_header(skb);
        skb_reset_network_header(skb);
+#endif
 
        return csum;
 }
@@ -2155,7 +2176,8 @@ jme_stop_queue_if_full(struct jme_adapter *jme)
                        (jiffies - txbi->start_xmit) >= TX_TIMEOUT &&
                        txbi->skb)) {
                netif_stop_queue(jme->dev);
-               netif_info(jme, tx_queued, jme->dev, "TX Queue Stopped %d@%lu\n", idx, jiffies);
+               netif_info(jme, tx_queued, jme->dev,
+                          "TX Queue Stopped %d@%lu\n", idx, jiffies);
        }
 }
 
@@ -2638,13 +2660,13 @@ jme_set_wol(struct net_device *netdev,
                jme->reg_pmcs |= PMCS_MFEN;
 
        jwrite32(jme, JME_PMCS, jme->reg_pmcs);
-
 #ifndef JME_NEW_PM_API
        jme_pci_wakeup_enable(jme, !!(jme->reg_pmcs));
 #endif
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
        device_set_wakeup_enable(&jme->pdev->dev, !!(jme->reg_pmcs));
 #endif
+
        return 0;
 }
 
@@ -3252,7 +3274,7 @@ jme_init_one(struct pci_dev *pdev,
        jme_pci_wakeup_enable(jme, true);
 #endif
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
-       device_set_wakeup_enable(&jme->pdev->dev, true);
+       device_set_wakeup_enable(&pdev->dev, true);
 #endif
 
        jme_set_phyfifo_5level(jme);
@@ -3445,14 +3467,14 @@ jme_resume(struct pci_dev *pdev)
        return 0;
 }
 
-#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,38)
+#ifdef JME_NEW_PM_API
 static SIMPLE_DEV_PM_OPS(jme_pm_ops, jme_suspend, jme_resume);
 #define JME_PM_OPS (&jme_pm_ops)
 #endif
 
 #else
 
-#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,38)
+#ifdef JME_NEW_PM_API
 #define JME_PM_OPS NULL
 #endif
 #endif
@@ -3473,7 +3495,7 @@ static struct pci_driver jme_driver = {
        .probe          = jme_init_one,
        .remove         = __devexit_p(jme_remove_one),
        .shutdown       = jme_shutdown,
-#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,38)
+#ifndef JME_NEW_PM_API
        .suspend        = jme_suspend,
        .resume         = jme_resume
 #else