mISDNipac.c (8bfddfbe2100862fd39b97001d0559ccd4c77f19) mISDNipac.c (7206e659f689558b41aa058c3040b081cb281d03)
1/*
2 * isac.c ISAC specific routines
3 *
4 * Author Karsten Keil <keil@isdn4linux.de>
5 *
6 * Copyright 2009 by Karsten Keil <keil@isdn4linux.de>
7 *
8 * This program is free software; you can redistribute it and/or modify

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

928 WriteHSCX(hx, IPAC_CMDRB, cmd);
929 }
930}
931
932static void
933hscx_empty_fifo(struct hscx_hw *hscx, u8 count)
934{
935 u8 *p;
1/*
2 * isac.c ISAC specific routines
3 *
4 * Author Karsten Keil <keil@isdn4linux.de>
5 *
6 * Copyright 2009 by Karsten Keil <keil@isdn4linux.de>
7 *
8 * This program is free software; you can redistribute it and/or modify

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

928 WriteHSCX(hx, IPAC_CMDRB, cmd);
929 }
930}
931
932static void
933hscx_empty_fifo(struct hscx_hw *hscx, u8 count)
934{
935 u8 *p;
936 int maxlen;
936
937 pr_debug("%s: B%1d %d\n", hscx->ip->name, hscx->bch.nr, count);
937
938 pr_debug("%s: B%1d %d\n", hscx->ip->name, hscx->bch.nr, count);
938 if (!hscx->bch.rx_skb) {
939 hscx->bch.rx_skb = mI_alloc_skb(hscx->bch.maxlen, GFP_ATOMIC);
940 if (!hscx->bch.rx_skb) {
941 pr_info("%s: B receive out of memory\n",
942 hscx->ip->name);
943 hscx_cmdr(hscx, 0x80); /* RMC */
944 return;
945 }
946 }
947 if ((hscx->bch.rx_skb->len + count) > hscx->bch.maxlen) {
948 pr_debug("%s: overrun %d\n", hscx->ip->name,
949 hscx->bch.rx_skb->len + count);
950 skb_trim(hscx->bch.rx_skb, 0);
939 maxlen = bchannel_get_rxbuf(&hscx->bch, count);
940 if (maxlen < 0) {
951 hscx_cmdr(hscx, 0x80); /* RMC */
941 hscx_cmdr(hscx, 0x80); /* RMC */
942 if (hscx->bch.rx_skb)
943 skb_trim(hscx->bch.rx_skb, 0);
944 pr_warning("%s.B%d: No bufferspace for %d bytes\n",
945 hscx->ip->name, hscx->bch.nr, count);
952 return;
953 }
954 p = skb_put(hscx->bch.rx_skb, count);
955
956 if (hscx->ip->type & IPAC_TYPE_IPACX)
957 hscx->ip->read_fifo(hscx->ip->hw,
958 hscx->off + IPACX_RFIFOB, p, count);
959 else

--- 691 unchanged lines hidden ---
946 return;
947 }
948 p = skb_put(hscx->bch.rx_skb, count);
949
950 if (hscx->ip->type & IPAC_TYPE_IPACX)
951 hscx->ip->read_fifo(hscx->ip->hw,
952 hscx->off + IPACX_RFIFOB, p, count);
953 else

--- 691 unchanged lines hidden ---