fec: Add FEC support for MX25 processor
[safe/jmp/linux-2.6] / drivers / net / ppp_generic.c
index 639d11b..9bf2a6b 100644 (file)
@@ -951,7 +951,7 @@ out:
 /*
  * Network interface unit routines.
  */
-static int
+static netdev_tx_t
 ppp_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
        struct ppp *ppp = netdev_priv(dev);
@@ -988,12 +988,12 @@ ppp_start_xmit(struct sk_buff *skb, struct net_device *dev)
        netif_stop_queue(dev);
        skb_queue_tail(&ppp->file.xq, skb);
        ppp_xmit_process(ppp);
-       return 0;
+       return NETDEV_TX_OK;
 
  outf:
        kfree_skb(skb);
        ++dev->stats.tx_dropped;
-       return 0;
+       return NETDEV_TX_OK;
 }
 
 static int
@@ -1384,7 +1384,7 @@ static int ppp_mp_explode(struct ppp *ppp, struct sk_buff *skb)
 
        /* create a     fragment for each channel */
        bits = B;
-       while (nfree > 0 &&     len     > 0) {
+       while (len      > 0) {
                list = list->next;
                if (list ==     &ppp->channels) {
                        i =     0;
@@ -1431,29 +1431,32 @@ static int ppp_mp_explode(struct ppp *ppp, struct sk_buff *skb)
                *otherwise divide it according to the speed
                *of the channel we are going to transmit on
                */
-               if (pch->speed == 0) {
-                       flen = totlen/nfree     ;
-                       if (nbigger > 0) {
-                               flen++;
-                               nbigger--;
-                       }
-               } else {
-                       flen = (((totfree - nzero)*(totlen + hdrlen*totfree)) /
-                               ((totspeed*totfree)/pch->speed)) - hdrlen;
-                       if (nbigger > 0) {
-                               flen += ((totfree - nzero)*pch->speed)/totspeed;
-                               nbigger -= ((totfree - nzero)*pch->speed)/
+               flen = len;
+               if (nfree > 0) {
+                       if (pch->speed == 0) {
+                               flen = totlen/nfree     ;
+                               if (nbigger > 0) {
+                                       flen++;
+                                       nbigger--;
+                               }
+                       } else {
+                               flen = (((totfree - nzero)*(totlen + hdrlen*totfree)) /
+                                       ((totspeed*totfree)/pch->speed)) - hdrlen;
+                               if (nbigger > 0) {
+                                       flen += ((totfree - nzero)*pch->speed)/totspeed;
+                                       nbigger -= ((totfree - nzero)*pch->speed)/
                                                        totspeed;
+                               }
                        }
+                       nfree--;
                }
-               nfree--;
 
                /*
                 *check if we are on the last channel or
                 *we exceded the lenght of the data     to
                 *fragment
                 */
-               if ((nfree == 0) || (flen > len))
+               if ((nfree <= 0) || (flen > len))
                        flen = len;
                /*
                 *it is not worth to tx on slow channels:
@@ -1467,7 +1470,7 @@ static int ppp_mp_explode(struct ppp *ppp, struct sk_buff *skb)
                        continue;
                }
 
-               mtu     = pch->chan->mtu + 2 - hdrlen;
+               mtu     = pch->chan->mtu - hdrlen;
                if (mtu < 4)
                        mtu     = 4;
                if (flen > mtu)