From 3bf42a41a7675f4e14fc2eae274d5a46794531fd Mon Sep 17 00:00:00 2001 From: Karsten Keil Date: Wed, 25 Jun 2003 16:44:48 +0000 Subject: [PATCH] fix ISAC receive frame len fix transparent audio sending --- drivers/isdn/hardware/mISDN/avm_fritz.c | 8 +++++++- drivers/isdn/hardware/mISDN/hfc_pci.c | 1 + drivers/isdn/hardware/mISDN/isac.c | 2 -- drivers/isdn/hardware/mISDN/isar.c | 7 +++++++ 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/drivers/isdn/hardware/mISDN/avm_fritz.c b/drivers/isdn/hardware/mISDN/avm_fritz.c index db98224..16a5e9e 100644 --- a/drivers/isdn/hardware/mISDN/avm_fritz.c +++ b/drivers/isdn/hardware/mISDN/avm_fritz.c @@ -608,10 +608,12 @@ HDLC_irq(bchannel_t *bch, u_int stat) { hdlc_fill_fifo(bch); bch_sched_event(bch, B_XMTBUFREADY); } else { + bch->tx_len = 0; printk(KERN_WARNING "hdlc tx irq TX_NEXT without skb\n"); test_and_clear_bit(BC_FLG_TX_BUSY, &bch->Flag); } } else { + bch->tx_len = 0; test_and_clear_bit(BC_FLG_TX_BUSY, &bch->Flag); bch_sched_event(bch, B_XMTBUFREADY); } @@ -1030,6 +1032,7 @@ release_card(fritzpnppci *card) card->pdev->deactivate(card->pdev); } else pci_disable_device(card->pdev); + pci_set_drvdata(card->pdev, NULL); kfree(card); fritz.refcnt--; } @@ -1307,7 +1310,10 @@ static void __devexit fritz_remove(struct pci_dev *pdev) { fritzpnppci *card = pci_get_drvdata(pdev); - fritz.ctrl(card->dch.inst.st, MGR_DELSTACK | REQUEST, NULL); + if (card) + fritz.ctrl(card->dch.inst.st, MGR_DELSTACK | REQUEST, NULL); + else + printk(KERN_WARNING "%s: drvdata allready removed\n", __FUNCTION__); } static struct pci_driver fcpci_driver = { diff --git a/drivers/isdn/hardware/mISDN/hfc_pci.c b/drivers/isdn/hardware/mISDN/hfc_pci.c index bb494ba..a4b2a03 100644 --- a/drivers/isdn/hardware/mISDN/hfc_pci.c +++ b/drivers/isdn/hardware/mISDN/hfc_pci.c @@ -810,6 +810,7 @@ next_t_frame: } else printk(KERN_WARNING "hfcB tx irq TX_NEXT without skb\n"); } + bch->tx_len = 0; test_and_clear_bit(BC_FLG_TX_BUSY, &bch->Flag); bch->tx_idx = bch->tx_len; } diff --git a/drivers/isdn/hardware/mISDN/isac.c b/drivers/isdn/hardware/mISDN/isac.c index 4ee913c..8a3e7b2 100644 --- a/drivers/isdn/hardware/mISDN/isac.c +++ b/drivers/isdn/hardware/mISDN/isac.c @@ -228,7 +228,6 @@ isac_rme_irq(dchannel_t *dch) count = 32; isac_empty_fifo(dch, count); if (dch->rx_skb) { - skb_trim(dch->rx_skb, dch->rx_skb->len - 1); /* remove status byte */ skb_queue_tail(&dch->rqueue, dch->rx_skb); } } @@ -488,7 +487,6 @@ isacsx_rme_irq(dchannel_t *dch) count = 32; isac_empty_fifo(dch, count); if (dch->rx_skb) { - skb_trim(dch->rx_skb, dch->rx_skb->len - 1); /* remove status byte */ skb_queue_tail(&dch->rqueue, dch->rx_skb); } } diff --git a/drivers/isdn/hardware/mISDN/isar.c b/drivers/isdn/hardware/mISDN/isar.c index 2283e56..3d7e89d 100644 --- a/drivers/isdn/hardware/mISDN/isar.c +++ b/drivers/isdn/hardware/mISDN/isar.c @@ -237,6 +237,11 @@ isar_load_firmware(bchannel_t *bch, u_char *buf, int size) blk_head->sadr, blk_head->len, blk_head->d_key & 0xff); sadr = blk_head->sadr; left = blk_head->len; + if (cnt+left > size) { + printk(KERN_ERR"isar: firmware size error have %d need %d bytes\n", + size, cnt+left); + ret = 1;goto reterror; + } if (!sendmsg(bch, ISAR_HIS_DKEY, blk_head->d_key & 0xff, 0, NULL)) { printk(KERN_ERR"isar sendmsg dkey failed\n"); ret = 1;goto reterror; @@ -785,10 +790,12 @@ send_frames(bchannel_t *bch) isar_fill_fifo(bch); bch_sched_event(bch, B_XMTBUFREADY); } else { + bch->tx_len = 0; printk(KERN_WARNING "isar tx irq TX_NEXT without skb\n"); test_and_clear_bit(BC_FLG_TX_BUSY, &bch->Flag); } } else { + bch->tx_len = 0; if (test_and_clear_bit(BC_FLG_DLEETX, &bch->Flag)) { if (test_and_clear_bit(BC_FLG_LASTDATA, &bch->Flag)) { if (test_and_clear_bit(BC_FLG_NMD_DATA, &bch->Flag)) {