hfcsusb.c (37952cfa3afdfa5cec39d9d76e80bc3a0e6a910c) hfcsusb.c (7206e659f689558b41aa058c3040b081cb281d03)
1/* hfcsusb.c
2 * mISDN driver for Colognechip HFC-S USB chip
3 *
4 * Copyright 2001 by Peter Sprenger (sprenger@moving-bytes.de)
5 * Copyright 2008 by Martin Bachem (info@bachem-it.com)
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by

--- 846 unchanged lines hidden (view full) ---

855
856 spin_lock(&hw->lock);
857 if (fifo->dch) {
858 rx_skb = fifo->dch->rx_skb;
859 maxlen = fifo->dch->maxlen;
860 hdlc = 1;
861 }
862 if (fifo->bch) {
1/* hfcsusb.c
2 * mISDN driver for Colognechip HFC-S USB chip
3 *
4 * Copyright 2001 by Peter Sprenger (sprenger@moving-bytes.de)
5 * Copyright 2008 by Martin Bachem (info@bachem-it.com)
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by

--- 846 unchanged lines hidden (view full) ---

855
856 spin_lock(&hw->lock);
857 if (fifo->dch) {
858 rx_skb = fifo->dch->rx_skb;
859 maxlen = fifo->dch->maxlen;
860 hdlc = 1;
861 }
862 if (fifo->bch) {
863 maxlen = bchannel_get_rxbuf(fifo->bch, len);
863 rx_skb = fifo->bch->rx_skb;
864 rx_skb = fifo->bch->rx_skb;
865 if (maxlen < 0) {
866 if (rx_skb)
867 skb_trim(rx_skb, 0);
868 pr_warning("%s.B%d: No bufferspace for %d bytes\n",
869 hw->name, fifo->bch->nr, len);
870 spin_unlock(&hw->lock);
871 return;
872 }
864 maxlen = fifo->bch->maxlen;
865 hdlc = test_bit(FLG_HDLC, &fifo->bch->Flags);
866 }
867 if (fifo->ech) {
868 rx_skb = fifo->ech->rx_skb;
869 maxlen = fifo->ech->maxlen;
870 hdlc = 1;
871 }
872
873 maxlen = fifo->bch->maxlen;
874 hdlc = test_bit(FLG_HDLC, &fifo->bch->Flags);
875 }
876 if (fifo->ech) {
877 rx_skb = fifo->ech->rx_skb;
878 maxlen = fifo->ech->maxlen;
879 hdlc = 1;
880 }
881
873 if (!rx_skb) {
874 rx_skb = mI_alloc_skb(maxlen, GFP_ATOMIC);
875 if (rx_skb) {
876 if (fifo->dch)
877 fifo->dch->rx_skb = rx_skb;
878 if (fifo->bch)
879 fifo->bch->rx_skb = rx_skb;
880 if (fifo->ech)
881 fifo->ech->rx_skb = rx_skb;
882 skb_trim(rx_skb, 0);
883 } else {
884 printk(KERN_DEBUG "%s: %s: No mem for rx_skb\n",
885 hw->name, __func__);
886 spin_unlock(&hw->lock);
887 return;
888 }
889 }
890
891 if (fifo->dch || fifo->ech) {
882 if (fifo->dch || fifo->ech) {
883 if (!rx_skb) {
884 rx_skb = mI_alloc_skb(maxlen, GFP_ATOMIC);
885 if (rx_skb) {
886 if (fifo->dch)
887 fifo->dch->rx_skb = rx_skb;
888 if (fifo->ech)
889 fifo->ech->rx_skb = rx_skb;
890 skb_trim(rx_skb, 0);
891 } else {
892 printk(KERN_DEBUG "%s: %s: No mem for rx_skb\n",
893 hw->name, __func__);
894 spin_unlock(&hw->lock);
895 return;
896 }
897 }
892 /* D/E-Channel SKB range check */
893 if ((rx_skb->len + len) >= MAX_DFRAME_LEN_L1) {
894 printk(KERN_DEBUG "%s: %s: sbk mem exceeded "
895 "for fifo(%d) HFCUSB_D_RX\n",
896 hw->name, __func__, fifon);
897 skb_trim(rx_skb, 0);
898 spin_unlock(&hw->lock);
899 return;
900 }
898 /* D/E-Channel SKB range check */
899 if ((rx_skb->len + len) >= MAX_DFRAME_LEN_L1) {
900 printk(KERN_DEBUG "%s: %s: sbk mem exceeded "
901 "for fifo(%d) HFCUSB_D_RX\n",
902 hw->name, __func__, fifon);
903 skb_trim(rx_skb, 0);
904 spin_unlock(&hw->lock);
905 return;
906 }
901 } else if (fifo->bch) {
902 /* B-Channel SKB range check */
903 if ((rx_skb->len + len) >= (MAX_BCH_SIZE + 3)) {
904 printk(KERN_DEBUG "%s: %s: sbk mem exceeded "
905 "for fifo(%d) HFCUSB_B_RX\n",
906 hw->name, __func__, fifon);
907 skb_trim(rx_skb, 0);
908 spin_unlock(&hw->lock);
909 return;
910 }
911 }
912
913 memcpy(skb_put(rx_skb, len), data, len);
914
915 if (hdlc) {
916 /* we have a complete hdlc packet */
917 if (finish) {
918 if ((rx_skb->len > 3) &&

--- 1220 unchanged lines hidden ---
907 }
908
909 memcpy(skb_put(rx_skb, len), data, len);
910
911 if (hdlc) {
912 /* we have a complete hdlc packet */
913 if (finish) {
914 if ((rx_skb->len > 3) &&

--- 1220 unchanged lines hidden ---