avmfritz.c (09e79a777a0c9c3de85abc395b5d984bd4bae19d) avmfritz.c (7206e659f689558b41aa058c3040b081cb281d03)
1/*
2 * avm_fritz.c low level stuff for AVM FRITZ!CARD PCI ISDN cards
3 * Thanks to AVM, Berlin for informations
4 *
5 * Author Karsten Keil <keil@isdn4linux.de>
6 *
7 * Copyright 2009 by Karsten Keil <keil@isdn4linux.de>
8 *

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

399}
400
401static void
402hdlc_empty_fifo(struct bchannel *bch, int count)
403{
404 u32 *ptr;
405 u8 *p;
406 u32 val, addr;
1/*
2 * avm_fritz.c low level stuff for AVM FRITZ!CARD PCI ISDN cards
3 * Thanks to AVM, Berlin for informations
4 *
5 * Author Karsten Keil <keil@isdn4linux.de>
6 *
7 * Copyright 2009 by Karsten Keil <keil@isdn4linux.de>
8 *

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

399}
400
401static void
402hdlc_empty_fifo(struct bchannel *bch, int count)
403{
404 u32 *ptr;
405 u8 *p;
406 u32 val, addr;
407 int cnt = 0;
407 int cnt;
408 struct fritzcard *fc = bch->hw;
409
410 pr_debug("%s: %s %d\n", fc->name, __func__, count);
408 struct fritzcard *fc = bch->hw;
409
410 pr_debug("%s: %s %d\n", fc->name, __func__, count);
411 if (!bch->rx_skb) {
412 bch->rx_skb = mI_alloc_skb(bch->maxlen, GFP_ATOMIC);
413 if (!bch->rx_skb) {
414 pr_info("%s: B receive out of memory\n",
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);
411 cnt = bchannel_get_rxbuf(bch, count);
412 if (cnt < 0) {
413 pr_warning("%s.B%d: No bufferspace for %d bytes\n",
414 fc->name, bch->nr, count);
422 return;
423 }
424 p = skb_put(bch->rx_skb, count);
425 ptr = (u32 *)p;
426 if (fc->type == AVM_FRITZ_PCIV2)
427 addr = fc->addr + (bch->nr == 2 ?
428 AVM_HDLC_FIFO_2 : AVM_HDLC_FIFO_1);
429 else {
430 addr = fc->addr + CHIP_WINDOW;
431 outl(bch->nr == 2 ? AVM_HDLC_2 : AVM_HDLC_1, fc->addr);
432 }
415 return;
416 }
417 p = skb_put(bch->rx_skb, count);
418 ptr = (u32 *)p;
419 if (fc->type == AVM_FRITZ_PCIV2)
420 addr = fc->addr + (bch->nr == 2 ?
421 AVM_HDLC_FIFO_2 : AVM_HDLC_FIFO_1);
422 else {
423 addr = fc->addr + CHIP_WINDOW;
424 outl(bch->nr == 2 ? AVM_HDLC_2 : AVM_HDLC_1, fc->addr);
425 }
426 cnt = 0;
433 while (cnt < count) {
434 val = le32_to_cpu(inl(addr));
435 put_unaligned(val, ptr);
436 ptr++;
437 cnt += 4;
438 }
439 if (debug & DEBUG_HW_BFIFO) {
440 snprintf(fc->log, LOG_SIZE, "B%1d-recv %s %d ",

--- 718 unchanged lines hidden ---
427 while (cnt < count) {
428 val = le32_to_cpu(inl(addr));
429 put_unaligned(val, ptr);
430 ptr++;
431 cnt += 4;
432 }
433 if (debug & DEBUG_HW_BFIFO) {
434 snprintf(fc->log, LOG_SIZE, "B%1d-recv %s %d ",

--- 718 unchanged lines hidden ---