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 --- |