aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/isdn/hardware/mISDN/avmfritz.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/isdn/hardware/mISDN/avmfritz.c')
-rw-r--r--drivers/isdn/hardware/mISDN/avmfritz.c18
1 files changed, 6 insertions, 12 deletions
diff --git a/drivers/isdn/hardware/mISDN/avmfritz.c b/drivers/isdn/hardware/mISDN/avmfritz.c
index cc782646886c..808136735f32 100644
--- a/drivers/isdn/hardware/mISDN/avmfritz.c
+++ b/drivers/isdn/hardware/mISDN/avmfritz.c
@@ -404,21 +404,14 @@ hdlc_empty_fifo(struct bchannel *bch, int count)
404 u32 *ptr; 404 u32 *ptr;
405 u8 *p; 405 u8 *p;
406 u32 val, addr; 406 u32 val, addr;
407 int cnt = 0; 407 int cnt;
408 struct fritzcard *fc = bch->hw; 408 struct fritzcard *fc = bch->hw;
409 409
410 pr_debug("%s: %s %d\n", fc->name, __func__, count); 410 pr_debug("%s: %s %d\n", fc->name, __func__, count);
411 if (!bch->rx_skb) { 411 cnt = bchannel_get_rxbuf(bch, count);
412 bch->rx_skb = mI_alloc_skb(bch->maxlen, GFP_ATOMIC); 412 if (cnt < 0) {
413 if (!bch->rx_skb) { 413 pr_warning("%s.B%d: No bufferspace for %d bytes\n",
414 pr_info("%s: B receive out of memory\n", 414 fc->name, bch->nr, count);
415 fc->name);
416 return;
417 }
418 }
419 if ((bch->rx_skb->len + count) > bch->maxlen) {
420 pr_debug("%s: overrun %d\n", fc->name,
421 bch->rx_skb->len + count);
422 return; 415 return;
423 } 416 }
424 p = skb_put(bch->rx_skb, count); 417 p = skb_put(bch->rx_skb, count);
@@ -430,6 +423,7 @@ hdlc_empty_fifo(struct bchannel *bch, int count)
430 addr = fc->addr + CHIP_WINDOW; 423 addr = fc->addr + CHIP_WINDOW;
431 outl(bch->nr == 2 ? AVM_HDLC_2 : AVM_HDLC_1, fc->addr); 424 outl(bch->nr == 2 ? AVM_HDLC_2 : AVM_HDLC_1, fc->addr);
432 } 425 }
426 cnt = 0;
433 while (cnt < count) { 427 while (cnt < count) {
434 val = le32_to_cpu(inl(addr)); 428 val = le32_to_cpu(inl(addr));
435 put_unaligned(val, ptr); 429 put_unaligned(val, ptr);