w6692.c (396665e8320987ff43b20a62a6a1cdae57aa1cc1) w6692.c (e4dca7b7aa08b22893c45485d222b5807c1375ae)
1/*
2 * w6692.c mISDN driver for Winbond w6692 based cards
3 *
4 * Author Karsten Keil <kkeil@suse.de>
5 * based on the w6692 I4L driver from Petr Novak <petr.novak@i.cz>
6 *
7 * Copyright 2009 by Karsten Keil <keil@isdn4linux.de>
8 *

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

96_set_debug(struct w6692_hw *card)
97{
98 card->dch.debug = debug;
99 card->bc[0].bch.debug = debug;
100 card->bc[1].bch.debug = debug;
101}
102
103static int
1/*
2 * w6692.c mISDN driver for Winbond w6692 based cards
3 *
4 * Author Karsten Keil <kkeil@suse.de>
5 * based on the w6692 I4L driver from Petr Novak <petr.novak@i.cz>
6 *
7 * Copyright 2009 by Karsten Keil <keil@isdn4linux.de>
8 *

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

96_set_debug(struct w6692_hw *card)
97{
98 card->dch.debug = debug;
99 card->bc[0].bch.debug = debug;
100 card->bc[1].bch.debug = debug;
101}
102
103static int
104set_debug(const char *val, struct kernel_param *kp)
104set_debug(const char *val, const struct kernel_param *kp)
105{
106 int ret;
107 struct w6692_hw *card;
108
109 ret = param_set_uint(val, kp);
110 if (!ret) {
111 read_lock(&card_lock);
112 list_for_each_entry(card, &Cards, list)

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

306 ptr = dch->tx_skb->data + dch->tx_idx;
307 dch->tx_idx += count;
308 outsb(card->addr + W_D_XFIFO, ptr, count);
309 WriteW6692(card, W_D_CMDR, cmd);
310 if (test_and_set_bit(FLG_BUSY_TIMER, &dch->Flags)) {
311 pr_debug("%s: fill_Dfifo dbusytimer running\n", card->name);
312 del_timer(&dch->timer);
313 }
105{
106 int ret;
107 struct w6692_hw *card;
108
109 ret = param_set_uint(val, kp);
110 if (!ret) {
111 read_lock(&card_lock);
112 list_for_each_entry(card, &Cards, list)

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

306 ptr = dch->tx_skb->data + dch->tx_idx;
307 dch->tx_idx += count;
308 outsb(card->addr + W_D_XFIFO, ptr, count);
309 WriteW6692(card, W_D_CMDR, cmd);
310 if (test_and_set_bit(FLG_BUSY_TIMER, &dch->Flags)) {
311 pr_debug("%s: fill_Dfifo dbusytimer running\n", card->name);
312 del_timer(&dch->timer);
313 }
314 init_timer(&dch->timer);
314 dch->timer.expires = jiffies + ((DBUSY_TIMER_VALUE * HZ) / 1000);
315 add_timer(&dch->timer);
316 if (debug & DEBUG_HW_DFIFO) {
317 snprintf(card->log, 63, "D-send %s %d ",
318 card->name, count);
319 print_hex_dump_bytes(card->log, DUMP_PREFIX_OFFSET, ptr, count);
320 }
321}

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

813 if (ista & (W_INT_XINT0 | W_INT_XINT1)) /* XINT0/1 - never */
814 pr_debug("%s: W6692 spurious XINT!\n", card->name);
815/* End IRQ Handler */
816 spin_unlock(&card->lock);
817 return IRQ_HANDLED;
818}
819
820static void
315 dch->timer.expires = jiffies + ((DBUSY_TIMER_VALUE * HZ) / 1000);
316 add_timer(&dch->timer);
317 if (debug & DEBUG_HW_DFIFO) {
318 snprintf(card->log, 63, "D-send %s %d ",
319 card->name, count);
320 print_hex_dump_bytes(card->log, DUMP_PREFIX_OFFSET, ptr, count);
321 }
322}

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

814 if (ista & (W_INT_XINT0 | W_INT_XINT1)) /* XINT0/1 - never */
815 pr_debug("%s: W6692 spurious XINT!\n", card->name);
816/* End IRQ Handler */
817 spin_unlock(&card->lock);
818 return IRQ_HANDLED;
819}
820
821static void
821dbusy_timer_handler(struct timer_list *t)
822dbusy_timer_handler(struct dchannel *dch)
822{
823{
823 struct dchannel *dch = from_timer(dch, t, timer);
824 struct w6692_hw *card = dch->hw;
825 int rbch, star;
826 u_long flags;
827
828 if (test_bit(FLG_BUSY_TIMER, &dch->Flags)) {
829 spin_lock_irqsave(&card->lock, flags);
830 rbch = ReadW6692(card, W_D_RBCH);
831 star = ReadW6692(card, W_D_STAR);

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

847 spin_unlock_irqrestore(&card->lock, flags);
848 }
849}
850
851static void initW6692(struct w6692_hw *card)
852{
853 u8 val;
854
824 struct w6692_hw *card = dch->hw;
825 int rbch, star;
826 u_long flags;
827
828 if (test_bit(FLG_BUSY_TIMER, &dch->Flags)) {
829 spin_lock_irqsave(&card->lock, flags);
830 rbch = ReadW6692(card, W_D_RBCH);
831 star = ReadW6692(card, W_D_STAR);

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

847 spin_unlock_irqrestore(&card->lock, flags);
848 }
849}
850
851static void initW6692(struct w6692_hw *card)
852{
853 u8 val;
854
855 timer_setup(&card->dch.timer, dbusy_timer_handler, 0);
855 setup_timer(&card->dch.timer, (void *)dbusy_timer_handler,
856 (u_long)&card->dch);
856 w6692_mode(&card->bc[0], ISDN_P_NONE);
857 w6692_mode(&card->bc[1], ISDN_P_NONE);
858 WriteW6692(card, W_D_CTL, 0x00);
859 disable_hwirq(card);
860 WriteW6692(card, W_D_SAM, 0xff);
861 WriteW6692(card, W_D_TAM, 0xff);
862 WriteW6692(card, W_D_MODE, W_D_MODE_RACT);
863 card->state = W_L1CMD_RST;

--- 572 unchanged lines hidden ---
857 w6692_mode(&card->bc[0], ISDN_P_NONE);
858 w6692_mode(&card->bc[1], ISDN_P_NONE);
859 WriteW6692(card, W_D_CTL, 0x00);
860 disable_hwirq(card);
861 WriteW6692(card, W_D_SAM, 0xff);
862 WriteW6692(card, W_D_TAM, 0xff);
863 WriteW6692(card, W_D_MODE, W_D_MODE_RACT);
864 card->state = W_L1CMD_RST;

--- 572 unchanged lines hidden ---