diff options
author | Karsten Keil <kkeil@linux-pingi.de> | 2012-05-15 19:51:06 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-05-16 15:23:46 -0400 |
commit | 034005a0119b9c2aabe0ac3953eb9a65ca937a69 (patch) | |
tree | a7ee0735f2a9f87eb0207c27930a3e3c748bc1fe /drivers/isdn/hardware/mISDN/netjet.c | |
parent | 7206e659f689558b41aa058c3040b081cb281d03 (diff) |
mISDN: Allow to set a minimum length for transparent data
If the FIFO of the card is small, many short messages are queued up to
the upper layers and the userspace. This change allows the applications
to set a minimum datalen they want from the drivers.
Create a common control function to avoid code duplication in each
driver.
Signed-off-by: Karsten Keil <kkeil@linux-pingi.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/isdn/hardware/mISDN/netjet.c')
-rw-r--r-- | drivers/isdn/hardware/mISDN/netjet.c | 23 |
1 files changed, 5 insertions, 18 deletions
diff --git a/drivers/isdn/hardware/mISDN/netjet.c b/drivers/isdn/hardware/mISDN/netjet.c index 3f28057e725e..47d30749d8a7 100644 --- a/drivers/isdn/hardware/mISDN/netjet.c +++ b/drivers/isdn/hardware/mISDN/netjet.c | |||
@@ -408,7 +408,7 @@ read_dma(struct tiger_ch *bc, u32 idx, int cnt) | |||
408 | } | 408 | } |
409 | 409 | ||
410 | if (test_bit(FLG_TRANSPARENT, &bc->bch.Flags)) { | 410 | if (test_bit(FLG_TRANSPARENT, &bc->bch.Flags)) { |
411 | recv_Bchannel(&bc->bch, 0); | 411 | recv_Bchannel(&bc->bch, 0, false); |
412 | return; | 412 | return; |
413 | } | 413 | } |
414 | 414 | ||
@@ -426,7 +426,7 @@ read_dma(struct tiger_ch *bc, u32 idx, int cnt) | |||
426 | DUMP_PREFIX_OFFSET, p, | 426 | DUMP_PREFIX_OFFSET, p, |
427 | stat); | 427 | stat); |
428 | } | 428 | } |
429 | recv_Bchannel(&bc->bch, 0); | 429 | recv_Bchannel(&bc->bch, 0, false); |
430 | stat = bchannel_get_rxbuf(&bc->bch, bc->bch.maxlen); | 430 | stat = bchannel_get_rxbuf(&bc->bch, bc->bch.maxlen); |
431 | if (stat < 0) { | 431 | if (stat < 0) { |
432 | pr_warning("%s.B%d: No memory for %d bytes\n", | 432 | pr_warning("%s.B%d: No memory for %d bytes\n", |
@@ -758,21 +758,7 @@ nj_l2l1B(struct mISDNchannel *ch, struct sk_buff *skb) | |||
758 | static int | 758 | static int |
759 | channel_bctrl(struct tiger_ch *bc, struct mISDN_ctrl_req *cq) | 759 | channel_bctrl(struct tiger_ch *bc, struct mISDN_ctrl_req *cq) |
760 | { | 760 | { |
761 | int ret = 0; | 761 | return mISDN_ctrl_bchannel(&bc->bch, cq); |
762 | struct tiger_hw *card = bc->bch.hw; | ||
763 | |||
764 | switch (cq->op) { | ||
765 | case MISDN_CTRL_GETOP: | ||
766 | cq->op = 0; | ||
767 | break; | ||
768 | /* Nothing implemented yet */ | ||
769 | case MISDN_CTRL_FILL_EMPTY: | ||
770 | default: | ||
771 | pr_info("%s: %s unknown Op %x\n", card->name, __func__, cq->op); | ||
772 | ret = -EINVAL; | ||
773 | break; | ||
774 | } | ||
775 | return ret; | ||
776 | } | 762 | } |
777 | 763 | ||
778 | static int | 764 | static int |
@@ -1006,7 +992,8 @@ setup_instance(struct tiger_hw *card) | |||
1006 | for (i = 0; i < 2; i++) { | 992 | for (i = 0; i < 2; i++) { |
1007 | card->bc[i].bch.nr = i + 1; | 993 | card->bc[i].bch.nr = i + 1; |
1008 | set_channelmap(i + 1, card->isac.dch.dev.channelmap); | 994 | set_channelmap(i + 1, card->isac.dch.dev.channelmap); |
1009 | mISDN_initbchannel(&card->bc[i].bch, MAX_DATA_MEM); | 995 | mISDN_initbchannel(&card->bc[i].bch, MAX_DATA_MEM, |
996 | NJ_DMA_RXSIZE >> 1); | ||
1010 | card->bc[i].bch.hw = card; | 997 | card->bc[i].bch.hw = card; |
1011 | card->bc[i].bch.ch.send = nj_l2l1B; | 998 | card->bc[i].bch.ch.send = nj_l2l1B; |
1012 | card->bc[i].bch.ch.ctrl = nj_bctrl; | 999 | card->bc[i].bch.ch.ctrl = nj_bctrl; |