Lines Matching full:hw
42 static void hfcsusb_ph_command(struct hfcsusb *hw, u_char command);
43 static void release_hw(struct hfcsusb *hw);
44 static void reset_hfcsusb(struct hfcsusb *hw);
45 static void setPortMode(struct hfcsusb *hw);
46 static void hfcsusb_start_endpoint(struct hfcsusb *hw, int channel);
47 static void hfcsusb_stop_endpoint(struct hfcsusb *hw, int channel);
50 static int hfcsusb_ph_info(struct hfcsusb *hw);
54 ctrl_start_transfer(struct hfcsusb *hw) in ctrl_start_transfer() argument
57 printk(KERN_DEBUG "%s: %s\n", hw->name, __func__); in ctrl_start_transfer()
59 if (hw->ctrl_cnt) { in ctrl_start_transfer()
60 hw->ctrl_urb->pipe = hw->ctrl_out_pipe; in ctrl_start_transfer()
61 hw->ctrl_urb->setup_packet = (u_char *)&hw->ctrl_write; in ctrl_start_transfer()
62 hw->ctrl_urb->transfer_buffer = NULL; in ctrl_start_transfer()
63 hw->ctrl_urb->transfer_buffer_length = 0; in ctrl_start_transfer()
64 hw->ctrl_write.wIndex = in ctrl_start_transfer()
65 cpu_to_le16(hw->ctrl_buff[hw->ctrl_out_idx].hfcs_reg); in ctrl_start_transfer()
66 hw->ctrl_write.wValue = in ctrl_start_transfer()
67 cpu_to_le16(hw->ctrl_buff[hw->ctrl_out_idx].reg_val); in ctrl_start_transfer()
69 usb_submit_urb(hw->ctrl_urb, GFP_ATOMIC); in ctrl_start_transfer()
77 static int write_reg(struct hfcsusb *hw, __u8 reg, __u8 val) in write_reg() argument
83 hw->name, __func__, reg, val); in write_reg()
85 spin_lock(&hw->ctrl_lock); in write_reg()
86 if (hw->ctrl_cnt >= HFC_CTRL_BUFSIZE) { in write_reg()
87 spin_unlock(&hw->ctrl_lock); in write_reg()
90 buf = &hw->ctrl_buff[hw->ctrl_in_idx]; in write_reg()
93 if (++hw->ctrl_in_idx >= HFC_CTRL_BUFSIZE) in write_reg()
94 hw->ctrl_in_idx = 0; in write_reg()
95 if (++hw->ctrl_cnt == 1) in write_reg()
96 ctrl_start_transfer(hw); in write_reg()
97 spin_unlock(&hw->ctrl_lock); in write_reg()
106 struct hfcsusb *hw = (struct hfcsusb *) urb->context; in ctrl_complete() local
109 printk(KERN_DEBUG "%s: %s\n", hw->name, __func__); in ctrl_complete()
111 urb->dev = hw->dev; in ctrl_complete()
112 if (hw->ctrl_cnt) { in ctrl_complete()
113 hw->ctrl_cnt--; /* decrement actual count */ in ctrl_complete()
114 if (++hw->ctrl_out_idx >= HFC_CTRL_BUFSIZE) in ctrl_complete()
115 hw->ctrl_out_idx = 0; /* pointer wrap */ in ctrl_complete()
117 ctrl_start_transfer(hw); /* start next transfer */ in ctrl_complete()
123 set_led_bit(struct hfcsusb *hw, signed short led_bits, int set_on) in set_led_bit() argument
127 hw->led_state &= ~abs(led_bits); in set_led_bit()
129 hw->led_state |= led_bits; in set_led_bit()
132 hw->led_state |= abs(led_bits); in set_led_bit()
134 hw->led_state &= ~led_bits; in set_led_bit()
140 handle_led(struct hfcsusb *hw, int event) in handle_led() argument
143 hfcsusb_idtab[hw->vend_idx].driver_info; in handle_led()
148 tmpled = hw->led_state; in handle_led()
152 set_led_bit(hw, driver_info->led_bits[0], 1); in handle_led()
153 set_led_bit(hw, driver_info->led_bits[1], 0); in handle_led()
154 set_led_bit(hw, driver_info->led_bits[2], 0); in handle_led()
155 set_led_bit(hw, driver_info->led_bits[3], 0); in handle_led()
158 set_led_bit(hw, driver_info->led_bits[0], 0); in handle_led()
159 set_led_bit(hw, driver_info->led_bits[1], 0); in handle_led()
160 set_led_bit(hw, driver_info->led_bits[2], 0); in handle_led()
161 set_led_bit(hw, driver_info->led_bits[3], 0); in handle_led()
164 set_led_bit(hw, driver_info->led_bits[1], 1); in handle_led()
167 set_led_bit(hw, driver_info->led_bits[1], 0); in handle_led()
170 set_led_bit(hw, driver_info->led_bits[2], 1); in handle_led()
173 set_led_bit(hw, driver_info->led_bits[2], 0); in handle_led()
176 set_led_bit(hw, driver_info->led_bits[3], 1); in handle_led()
179 set_led_bit(hw, driver_info->led_bits[3], 0); in handle_led()
183 if (hw->led_state != tmpled) { in handle_led()
186 hw->name, __func__, in handle_led()
187 HFCUSB_P_DATA, hw->led_state); in handle_led()
189 write_reg(hw, HFCUSB_P_DATA, hw->led_state); in handle_led()
200 struct hfcsusb *hw = bch->hw; in hfcusb_l2l1B() local
206 printk(KERN_DEBUG "%s: %s\n", hw->name, __func__); in hfcusb_l2l1B()
210 spin_lock_irqsave(&hw->lock, flags); in hfcusb_l2l1B()
212 spin_unlock_irqrestore(&hw->lock, flags); in hfcusb_l2l1B()
215 hw->name, __func__, ret); in hfcusb_l2l1B()
221 hfcsusb_start_endpoint(hw, bch->nr - 1); in hfcusb_l2l1B()
246 hfcsusb_ph_info(struct hfcsusb *hw) in hfcsusb_ph_info() argument
249 struct dchannel *dch = &hw->dch; in hfcsusb_ph_info()
256 phi->dch.ch.protocol = hw->protocol; in hfcsusb_ph_info()
261 phi->bch[i].protocol = hw->bch[i].ch.protocol; in hfcsusb_ph_info()
262 phi->bch[i].Flags = hw->bch[i].Flags; in hfcsusb_ph_info()
280 struct hfcsusb *hw = dch->hw; in hfcusb_l2l1D() local
288 hw->name, __func__); in hfcusb_l2l1D()
290 spin_lock_irqsave(&hw->lock, flags); in hfcusb_l2l1D()
292 spin_unlock_irqrestore(&hw->lock, flags); in hfcusb_l2l1D()
302 hw->name, __func__, in hfcusb_l2l1D()
303 (hw->protocol == ISDN_P_NT_S0) ? "NT" : "TE"); in hfcusb_l2l1D()
305 if (hw->protocol == ISDN_P_NT_S0) { in hfcusb_l2l1D()
312 hfcsusb_ph_command(hw, in hfcusb_l2l1D()
318 hfcsusb_ph_command(hw, HFC_L1_ACTIVATE_TE); in hfcusb_l2l1D()
326 hw->name, __func__); in hfcusb_l2l1D()
329 if (hw->protocol == ISDN_P_NT_S0) { in hfcusb_l2l1D()
333 hfcsusb_ph_command(hw, HFC_L1_DEACTIVATE_NT); in hfcusb_l2l1D()
334 spin_lock_irqsave(&hw->lock, flags); in hfcusb_l2l1D()
346 spin_unlock_irqrestore(&hw->lock, flags); in hfcusb_l2l1D()
357 ret = hfcsusb_ph_info(hw); in hfcusb_l2l1D()
370 struct hfcsusb *hw = dch->hw; in hfc_l1callback() local
374 hw->name, __func__, cmd); in hfc_l1callback()
409 hw->name, __func__, cmd); in hfc_l1callback()
412 return hfcsusb_ph_info(hw); in hfc_l1callback()
416 open_dchannel(struct hfcsusb *hw, struct mISDNchannel *ch, in open_dchannel() argument
423 hw->name, __func__, hw->dch.dev.id, rq->adr.channel, in open_dchannel()
428 test_and_clear_bit(FLG_ACTIVE, &hw->dch.Flags); in open_dchannel()
429 test_and_clear_bit(FLG_ACTIVE, &hw->ech.Flags); in open_dchannel()
430 hfcsusb_start_endpoint(hw, HFC_CHAN_D); in open_dchannel()
434 if (hw->fifos[HFCUSB_PCM_RX].pipe) { in open_dchannel()
435 hfcsusb_start_endpoint(hw, HFC_CHAN_E); in open_dchannel()
436 set_bit(FLG_ACTIVE, &hw->ech.Flags); in open_dchannel()
437 _queue_data(&hw->ech.dev.D, PH_ACTIVATE_IND, in open_dchannel()
443 if (!hw->initdone) { in open_dchannel()
444 hw->protocol = rq->protocol; in open_dchannel()
446 err = create_l1(&hw->dch, hfc_l1callback); in open_dchannel()
450 setPortMode(hw); in open_dchannel()
452 hw->initdone = 1; in open_dchannel()
458 if (((ch->protocol == ISDN_P_NT_S0) && (hw->dch.state == 3)) || in open_dchannel()
459 ((ch->protocol == ISDN_P_TE_S0) && (hw->dch.state == 7))) in open_dchannel()
465 hw->name, __func__); in open_dchannel()
470 open_bchannel(struct hfcsusb *hw, struct channel_req *rq) in open_bchannel() argument
481 hw->name, __func__, rq->adr.channel); in open_bchannel()
483 bch = &hw->bch[rq->adr.channel - 1]; in open_bchannel()
491 hw->name, __func__); in open_bchannel()
496 channel_ctrl(struct hfcsusb *hw, struct mISDN_ctrl_req *cq) in channel_ctrl() argument
502 hw->name, __func__, (cq->op), (cq->channel)); in channel_ctrl()
511 hw->name, __func__, cq->op); in channel_ctrl()
526 struct hfcsusb *hw = dch->hw; in hfc_dctrl() local
532 hw->name, __func__, cmd, arg); in hfc_dctrl()
538 err = open_dchannel(hw, ch, rq); in hfc_dctrl()
540 err = open_bchannel(hw, rq); in hfc_dctrl()
542 hw->open++; in hfc_dctrl()
545 hw->open--; in hfc_dctrl()
549 hw->name, __func__, hw->dch.dev.id, in hfc_dctrl()
550 __builtin_return_address(0), hw->open); in hfc_dctrl()
551 if (!hw->open) { in hfc_dctrl()
552 hfcsusb_stop_endpoint(hw, HFC_CHAN_D); in hfc_dctrl()
553 if (hw->fifos[HFCUSB_PCM_RX].pipe) in hfc_dctrl()
554 hfcsusb_stop_endpoint(hw, HFC_CHAN_E); in hfc_dctrl()
555 handle_led(hw, LED_POWER_ON); in hfc_dctrl()
560 err = channel_ctrl(hw, arg); in hfc_dctrl()
565 hw->name, __func__, cmd); in hfc_dctrl()
577 struct hfcsusb *hw = dch->hw; in ph_state_te() local
581 printk(KERN_DEBUG "%s: %s: %s\n", hw->name, __func__, in ph_state_te()
585 hw->name, __func__, dch->state); in ph_state_te()
607 handle_led(hw, LED_S0_ON); in ph_state_te()
609 handle_led(hw, LED_S0_OFF); in ph_state_te()
618 struct hfcsusb *hw = dch->hw; in ph_state_nt() local
623 hw->name, __func__, in ph_state_nt()
628 hw->name, __func__, dch->state); in ph_state_nt()
635 hw->nt_timer = 0; in ph_state_nt()
636 hw->timers &= ~NT_ACTIVATION_TIMER; in ph_state_nt()
637 handle_led(hw, LED_S0_OFF); in ph_state_nt()
641 if (hw->nt_timer < 0) { in ph_state_nt()
642 hw->nt_timer = 0; in ph_state_nt()
643 hw->timers &= ~NT_ACTIVATION_TIMER; in ph_state_nt()
644 hfcsusb_ph_command(dch->hw, HFC_L1_DEACTIVATE_NT); in ph_state_nt()
646 hw->timers |= NT_ACTIVATION_TIMER; in ph_state_nt()
647 hw->nt_timer = NT_T1_COUNT; in ph_state_nt()
649 write_reg(hw, HFCUSB_STATES, 2 | HFCUSB_NT_G2_G3); in ph_state_nt()
653 hw->nt_timer = 0; in ph_state_nt()
654 hw->timers &= ~NT_ACTIVATION_TIMER; in ph_state_nt()
658 handle_led(hw, LED_S0_ON); in ph_state_nt()
661 hw->nt_timer = 0; in ph_state_nt()
662 hw->timers &= ~NT_ACTIVATION_TIMER; in ph_state_nt()
667 hfcsusb_ph_info(hw); in ph_state_nt()
673 struct hfcsusb *hw = dch->hw; in ph_state() local
675 if (hw->protocol == ISDN_P_NT_S0) in ph_state()
677 else if (hw->protocol == ISDN_P_TE_S0) in ph_state()
687 struct hfcsusb *hw = bch->hw; in hfcsusb_setup_bch() local
692 hw->name, __func__, bch->state, protocol, in hfcsusb_setup_bch()
723 hw->name, __func__, protocol); in hfcsusb_setup_bch()
728 write_reg(hw, HFCUSB_FIFO, (bch->nr == 1) ? 0 : 2); in hfcsusb_setup_bch()
729 write_reg(hw, HFCUSB_CON_HDLC, conhdlc); in hfcsusb_setup_bch()
730 write_reg(hw, HFCUSB_INC_RES_F, 2); in hfcsusb_setup_bch()
731 write_reg(hw, HFCUSB_FIFO, (bch->nr == 1) ? 1 : 3); in hfcsusb_setup_bch()
732 write_reg(hw, HFCUSB_CON_HDLC, conhdlc); in hfcsusb_setup_bch()
733 write_reg(hw, HFCUSB_INC_RES_F, 2); in hfcsusb_setup_bch()
735 sctrl = 0x40 + ((hw->protocol == ISDN_P_TE_S0) ? 0x00 : 0x04); in hfcsusb_setup_bch()
737 if (test_bit(FLG_ACTIVE, &hw->bch[0].Flags)) { in hfcsusb_setup_bch()
741 if (test_bit(FLG_ACTIVE, &hw->bch[1].Flags)) { in hfcsusb_setup_bch()
745 write_reg(hw, HFCUSB_SCTRL, sctrl); in hfcsusb_setup_bch()
746 write_reg(hw, HFCUSB_SCTRL_R, sctrl_r); in hfcsusb_setup_bch()
749 handle_led(hw, (bch->nr == 1) ? LED_B1_ON : LED_B2_ON); in hfcsusb_setup_bch()
751 handle_led(hw, (bch->nr == 1) ? LED_B1_OFF : in hfcsusb_setup_bch()
754 return hfcsusb_ph_info(hw); in hfcsusb_setup_bch()
758 hfcsusb_ph_command(struct hfcsusb *hw, u_char command) in hfcsusb_ph_command() argument
762 hw->name, __func__, command); in hfcsusb_ph_command()
767 write_reg(hw, HFCUSB_STATES, 0x14); in hfcsusb_ph_command()
769 write_reg(hw, HFCUSB_STATES, 0x04); in hfcsusb_ph_command()
773 write_reg(hw, HFCUSB_STATES, 0x10); in hfcsusb_ph_command()
774 write_reg(hw, HFCUSB_STATES, 0x03); in hfcsusb_ph_command()
778 if (hw->dch.state == 3) in hfcsusb_ph_command()
779 _queue_data(&hw->dch.dev.D, PH_ACTIVATE_IND, in hfcsusb_ph_command()
782 write_reg(hw, HFCUSB_STATES, HFCUSB_ACTIVATE | in hfcsusb_ph_command()
787 write_reg(hw, HFCUSB_STATES, in hfcsusb_ph_command()
807 struct hfcsusb *hw = fifo->hw; in hfcsusb_rx_frame() local
818 hw->name, __func__, fifon, len, in hfcsusb_rx_frame()
826 hw->name, __func__); in hfcsusb_rx_frame()
830 spin_lock_irqsave(&hw->lock, flags); in hfcsusb_rx_frame()
839 spin_unlock_irqrestore(&hw->lock, flags); in hfcsusb_rx_frame()
848 hw->name, fifo->bch->nr, len); in hfcsusb_rx_frame()
849 spin_unlock_irqrestore(&hw->lock, flags); in hfcsusb_rx_frame()
872 hw->name, __func__); in hfcsusb_rx_frame()
873 spin_unlock_irqrestore(&hw->lock, flags); in hfcsusb_rx_frame()
881 hw->name, __func__, fifon); in hfcsusb_rx_frame()
883 spin_unlock_irqrestore(&hw->lock, flags); in hfcsusb_rx_frame()
898 hw->name, __func__, fifon, in hfcsusb_rx_frame()
917 &hw->dch); in hfcsusb_rx_frame()
923 hw->name, fifon, rx_skb->len); in hfcsusb_rx_frame()
937 spin_unlock_irqrestore(&hw->lock, flags); in hfcsusb_rx_frame()
968 struct hfcsusb *hw = fifo->hw; in rx_iso_complete() local
979 spin_lock_irqsave(&hw->lock, flags); in rx_iso_complete()
983 spin_unlock_irqrestore(&hw->lock, flags); in rx_iso_complete()
986 spin_unlock_irqrestore(&hw->lock, flags); in rx_iso_complete()
996 hw->name, __func__, status, fifon); in rx_iso_complete()
1016 hw->name, __func__, k, iso_status); in rx_iso_complete()
1024 hw->name, __func__, urb->start_frame, in rx_iso_complete()
1039 hw->threshold_mask = buf[1]; in rx_iso_complete()
1058 if ((s0_state) && (hw->initdone) && in rx_iso_complete()
1059 (s0_state != hw->dch.state)) { in rx_iso_complete()
1060 hw->dch.state = s0_state; in rx_iso_complete()
1061 schedule_event(&hw->dch, FLG_PHCHANGE); in rx_iso_complete()
1064 fill_isoc_urb(urb, fifo->hw->dev, fifo->pipe, in rx_iso_complete()
1073 hw->name, __func__, errcode); in rx_iso_complete()
1079 hw->name, __func__, status, fifon); in rx_iso_complete()
1090 struct hfcsusb *hw = fifo->hw; in rx_int_complete() local
1094 spin_lock_irqsave(&hw->lock, flags); in rx_int_complete()
1098 spin_unlock_irqrestore(&hw->lock, flags); in rx_int_complete()
1101 spin_unlock_irqrestore(&hw->lock, flags); in rx_int_complete()
1108 hw->name, __func__, fifon, urb->status); in rx_int_complete()
1120 hw->name, __func__, len); in rx_int_complete()
1128 hw->threshold_mask = buf[1]; in rx_int_complete()
1131 if (hw->initdone && ((buf[0] >> 4) != hw->dch.state)) { in rx_int_complete()
1132 hw->dch.state = (buf[0] >> 4); in rx_int_complete()
1133 schedule_event(&hw->dch, FLG_PHCHANGE); in rx_int_complete()
1152 hw->name, __func__); in rx_int_complete()
1162 struct hfcsusb *hw = fifo->hw; in tx_iso_complete() local
1171 spin_lock_irqsave(&hw->lock, flags); in tx_iso_complete()
1175 spin_unlock_irqrestore(&hw->lock, flags); in tx_iso_complete()
1192 hw->name, __func__); in tx_iso_complete()
1193 spin_unlock_irqrestore(&hw->lock, flags); in tx_iso_complete()
1210 hw->name, __func__, status, fifon); in tx_iso_complete()
1218 threshbit = (hw->threshold_mask & (1 << fifon)); in tx_iso_complete()
1226 fill_isoc_urb(urb, fifo->hw->dev, fifo->pipe, in tx_iso_complete()
1241 hw->name, __func__, k, errcode); in tx_iso_complete()
1297 hw->name, __func__, in tx_iso_complete()
1329 hw->name, __func__, in tx_iso_complete()
1352 hw->name, __func__, errcode); in tx_iso_complete()
1360 if ((fifon == HFCUSB_D_TX) && (hw->protocol == ISDN_P_NT_S0) in tx_iso_complete()
1361 && (hw->timers & NT_ACTIVATION_TIMER)) { in tx_iso_complete()
1362 if ((--hw->nt_timer) < 0) in tx_iso_complete()
1363 schedule_event(&hw->dch, FLG_PHCHANGE); in tx_iso_complete()
1370 hw->name, __func__, in tx_iso_complete()
1373 spin_unlock_irqrestore(&hw->lock, flags); in tx_iso_complete()
1384 struct hfcsusb *hw = fifo->hw; in start_isoc_chain() local
1389 hw->name, __func__, fifo->fifonum); in start_isoc_chain()
1399 hw->name, __func__, fifo->fifonum); in start_isoc_chain()
1410 fifo->hw->dev, fifo->pipe, in start_isoc_chain()
1430 hw->name, __func__); in start_isoc_chain()
1440 hw->name, __func__, in start_isoc_chain()
1450 struct hfcsusb *hw = fifo->hw; in stop_iso_gracefull() local
1455 spin_lock_irqsave(&hw->lock, flags); in stop_iso_gracefull()
1458 hw->name, __func__, fifo->fifonum, i); in stop_iso_gracefull()
1460 spin_unlock_irqrestore(&hw->lock, flags); in stop_iso_gracefull()
1469 hw->name, __func__, fifo->fifonum, i); in stop_iso_gracefull()
1476 struct hfcsusb *hw = fifo->hw; in stop_int_gracefull() local
1480 spin_lock_irqsave(&hw->lock, flags); in stop_int_gracefull()
1483 hw->name, __func__, fifo->fifonum); in stop_int_gracefull()
1485 spin_unlock_irqrestore(&hw->lock, flags); in stop_int_gracefull()
1492 hw->name, __func__, fifo->fifonum); in stop_int_gracefull()
1499 struct hfcsusb *hw = fifo->hw; in start_int_fifo() local
1504 hw->name, __func__, fifo->fifonum); in start_int_fifo()
1511 usb_fill_int_urb(fifo->urb, fifo->hw->dev, fifo->pipe, in start_int_fifo()
1519 hw->name, __func__, errcode); in start_int_fifo()
1525 setPortMode(struct hfcsusb *hw) in setPortMode() argument
1528 printk(KERN_DEBUG "%s: %s %s\n", hw->name, __func__, in setPortMode()
1529 (hw->protocol == ISDN_P_TE_S0) ? "TE" : "NT"); in setPortMode()
1531 if (hw->protocol == ISDN_P_TE_S0) { in setPortMode()
1532 write_reg(hw, HFCUSB_SCTRL, 0x40); in setPortMode()
1533 write_reg(hw, HFCUSB_SCTRL_E, 0x00); in setPortMode()
1534 write_reg(hw, HFCUSB_CLKDEL, CLKDEL_TE); in setPortMode()
1535 write_reg(hw, HFCUSB_STATES, 3 | 0x10); in setPortMode()
1536 write_reg(hw, HFCUSB_STATES, 3); in setPortMode()
1538 write_reg(hw, HFCUSB_SCTRL, 0x44); in setPortMode()
1539 write_reg(hw, HFCUSB_SCTRL_E, 0x09); in setPortMode()
1540 write_reg(hw, HFCUSB_CLKDEL, CLKDEL_NT); in setPortMode()
1541 write_reg(hw, HFCUSB_STATES, 1 | 0x10); in setPortMode()
1542 write_reg(hw, HFCUSB_STATES, 1); in setPortMode()
1547 reset_hfcsusb(struct hfcsusb *hw) in reset_hfcsusb() argument
1553 printk(KERN_DEBUG "%s: %s\n", hw->name, __func__); in reset_hfcsusb()
1556 write_reg(hw, HFCUSB_CIRM, 8); in reset_hfcsusb()
1559 write_reg(hw, HFCUSB_CIRM, 0x10); in reset_hfcsusb()
1562 write_reg(hw, HFCUSB_USB_SIZE, (hw->packet_size / 8) | in reset_hfcsusb()
1563 ((hw->packet_size / 8) << 4)); in reset_hfcsusb()
1566 write_reg(hw, HFCUSB_USB_SIZE_I, hw->iso_packet_size); in reset_hfcsusb()
1569 write_reg(hw, HFCUSB_MST_MODE1, 0); /* set default values */ in reset_hfcsusb()
1570 write_reg(hw, HFCUSB_MST_MODE0, 1); /* enable master mode */ in reset_hfcsusb()
1573 write_reg(hw, HFCUSB_F_THRES, in reset_hfcsusb()
1576 fifo = hw->fifos; in reset_hfcsusb()
1578 write_reg(hw, HFCUSB_FIFO, i); /* select the desired fifo */ in reset_hfcsusb()
1584 write_reg(hw, HFCUSB_HDLC_PAR, ((i <= HFCUSB_B2_RX) ? 0 : 2)); in reset_hfcsusb()
1588 write_reg(hw, HFCUSB_CON_HDLC, in reset_hfcsusb()
1589 (hw->protocol == ISDN_P_NT_S0) ? 0x08 : 0x09); in reset_hfcsusb()
1591 write_reg(hw, HFCUSB_CON_HDLC, 0x08); in reset_hfcsusb()
1592 write_reg(hw, HFCUSB_INC_RES_F, 2); /* reset the fifo */ in reset_hfcsusb()
1595 write_reg(hw, HFCUSB_SCTRL_R, 0); /* disable both B receivers */ in reset_hfcsusb()
1596 handle_led(hw, LED_POWER_ON); in reset_hfcsusb()
1601 hfcsusb_start_endpoint(struct hfcsusb *hw, int channel) in hfcsusb_start_endpoint() argument
1604 if ((channel == HFC_CHAN_D) && (hw->fifos[HFCUSB_D_RX].active)) in hfcsusb_start_endpoint()
1606 if ((channel == HFC_CHAN_B1) && (hw->fifos[HFCUSB_B1_RX].active)) in hfcsusb_start_endpoint()
1608 if ((channel == HFC_CHAN_B2) && (hw->fifos[HFCUSB_B2_RX].active)) in hfcsusb_start_endpoint()
1610 if ((channel == HFC_CHAN_E) && (hw->fifos[HFCUSB_PCM_RX].active)) in hfcsusb_start_endpoint()
1614 if (hw->cfg_used == CNF_3INT3ISO || hw->cfg_used == CNF_4INT3ISO) in hfcsusb_start_endpoint()
1615 start_int_fifo(hw->fifos + channel * 2 + 1); in hfcsusb_start_endpoint()
1618 if (hw->cfg_used == CNF_3ISO3ISO || hw->cfg_used == CNF_4ISO3ISO) { in hfcsusb_start_endpoint()
1621 start_isoc_chain(hw->fifos + HFCUSB_D_RX, in hfcsusb_start_endpoint()
1627 start_isoc_chain(hw->fifos + HFCUSB_PCM_RX, in hfcsusb_start_endpoint()
1633 start_isoc_chain(hw->fifos + HFCUSB_B1_RX, in hfcsusb_start_endpoint()
1639 start_isoc_chain(hw->fifos + HFCUSB_B2_RX, in hfcsusb_start_endpoint()
1650 start_isoc_chain(hw->fifos + HFCUSB_D_TX, in hfcsusb_start_endpoint()
1655 start_isoc_chain(hw->fifos + HFCUSB_B1_TX, in hfcsusb_start_endpoint()
1660 start_isoc_chain(hw->fifos + HFCUSB_B2_TX, in hfcsusb_start_endpoint()
1669 hfcsusb_stop_endpoint(struct hfcsusb *hw, int channel) in hfcsusb_stop_endpoint() argument
1672 if ((channel == HFC_CHAN_D) && (!hw->fifos[HFCUSB_D_RX].active)) in hfcsusb_stop_endpoint()
1674 if ((channel == HFC_CHAN_B1) && (!hw->fifos[HFCUSB_B1_RX].active)) in hfcsusb_stop_endpoint()
1676 if ((channel == HFC_CHAN_B2) && (!hw->fifos[HFCUSB_B2_RX].active)) in hfcsusb_stop_endpoint()
1678 if ((channel == HFC_CHAN_E) && (!hw->fifos[HFCUSB_PCM_RX].active)) in hfcsusb_stop_endpoint()
1682 if (hw->cfg_used == CNF_3INT3ISO || hw->cfg_used == CNF_4INT3ISO) in hfcsusb_stop_endpoint()
1683 stop_int_gracefull(hw->fifos + channel * 2 + 1); in hfcsusb_stop_endpoint()
1686 if (hw->cfg_used == CNF_3ISO3ISO || hw->cfg_used == CNF_4ISO3ISO) in hfcsusb_stop_endpoint()
1687 stop_iso_gracefull(hw->fifos + channel * 2 + 1); in hfcsusb_stop_endpoint()
1691 stop_iso_gracefull(hw->fifos + channel * 2); in hfcsusb_stop_endpoint()
1697 setup_hfcsusb(struct hfcsusb *hw) in setup_hfcsusb() argument
1704 printk(KERN_DEBUG "%s: %s\n", hw->name, __func__); in setup_hfcsusb()
1709 ret = read_reg_atomic(hw, HFCUSB_CHIP_ID, dmabuf); in setup_hfcsusb()
1717 hw->name, __func__); in setup_hfcsusb()
1722 hw->name, __func__, b); in setup_hfcsusb()
1727 (void) usb_set_interface(hw->dev, hw->if_used, hw->alt_used); in setup_hfcsusb()
1729 hw->led_state = 0; in setup_hfcsusb()
1732 hw->ctrl_read.bRequestType = 0xc0; in setup_hfcsusb()
1733 hw->ctrl_read.bRequest = 1; in setup_hfcsusb()
1734 hw->ctrl_read.wLength = cpu_to_le16(1); in setup_hfcsusb()
1735 hw->ctrl_write.bRequestType = 0x40; in setup_hfcsusb()
1736 hw->ctrl_write.bRequest = 0; in setup_hfcsusb()
1737 hw->ctrl_write.wLength = 0; in setup_hfcsusb()
1738 usb_fill_control_urb(hw->ctrl_urb, hw->dev, hw->ctrl_out_pipe, in setup_hfcsusb()
1739 (u_char *)&hw->ctrl_write, NULL, 0, in setup_hfcsusb()
1740 (usb_complete_t)ctrl_complete, hw); in setup_hfcsusb()
1742 reset_hfcsusb(hw); in setup_hfcsusb()
1747 release_hw(struct hfcsusb *hw) in release_hw() argument
1750 printk(KERN_DEBUG "%s: %s\n", hw->name, __func__); in release_hw()
1757 hfcsusb_stop_endpoint(hw, HFC_CHAN_D); in release_hw()
1758 hfcsusb_stop_endpoint(hw, HFC_CHAN_B1); in release_hw()
1759 hfcsusb_stop_endpoint(hw, HFC_CHAN_B2); in release_hw()
1760 if (hw->fifos[HFCUSB_PCM_RX].pipe) in release_hw()
1761 hfcsusb_stop_endpoint(hw, HFC_CHAN_E); in release_hw()
1762 if (hw->protocol == ISDN_P_TE_S0) in release_hw()
1763 l1_event(hw->dch.l1, CLOSE_CHANNEL); in release_hw()
1765 mISDN_unregister_device(&hw->dch.dev); in release_hw()
1766 mISDN_freebchannel(&hw->bch[1]); in release_hw()
1767 mISDN_freebchannel(&hw->bch[0]); in release_hw()
1768 mISDN_freedchannel(&hw->dch); in release_hw()
1770 if (hw->ctrl_urb) { in release_hw()
1771 usb_kill_urb(hw->ctrl_urb); in release_hw()
1772 usb_free_urb(hw->ctrl_urb); in release_hw()
1773 hw->ctrl_urb = NULL; in release_hw()
1776 if (hw->intf) in release_hw()
1777 usb_set_intfdata(hw->intf, NULL); in release_hw()
1778 list_del(&hw->list); in release_hw()
1779 kfree(hw); in release_hw()
1780 hw = NULL; in release_hw()
1786 struct hfcsusb *hw = bch->hw; in deactivate_bchannel() local
1791 hw->name, __func__, bch->nr); in deactivate_bchannel()
1793 spin_lock_irqsave(&hw->lock, flags); in deactivate_bchannel()
1795 spin_unlock_irqrestore(&hw->lock, flags); in deactivate_bchannel()
1797 hfcsusb_stop_endpoint(hw, bch->nr - 1); in deactivate_bchannel()
1838 setup_instance(struct hfcsusb *hw, struct device *parent) in setup_instance() argument
1844 printk(KERN_DEBUG "%s: %s\n", hw->name, __func__); in setup_instance()
1846 spin_lock_init(&hw->ctrl_lock); in setup_instance()
1847 spin_lock_init(&hw->lock); in setup_instance()
1849 mISDN_initdchannel(&hw->dch, MAX_DFRAME_LEN_L1, ph_state); in setup_instance()
1850 hw->dch.debug = debug & 0xFFFF; in setup_instance()
1851 hw->dch.hw = hw; in setup_instance()
1852 hw->dch.dev.Dprotocols = (1 << ISDN_P_TE_S0) | (1 << ISDN_P_NT_S0); in setup_instance()
1853 hw->dch.dev.D.send = hfcusb_l2l1D; in setup_instance()
1854 hw->dch.dev.D.ctrl = hfc_dctrl; in setup_instance()
1857 if (hw->fifos[HFCUSB_PCM_RX].pipe) in setup_instance()
1858 mISDN_initdchannel(&hw->ech, MAX_DFRAME_LEN_L1, NULL); in setup_instance()
1860 hw->dch.dev.Bprotocols = (1 << (ISDN_P_B_RAW & ISDN_P_B_MASK)) | in setup_instance()
1862 hw->dch.dev.nrbchan = 2; in setup_instance()
1864 hw->bch[i].nr = i + 1; in setup_instance()
1865 set_channelmap(i + 1, hw->dch.dev.channelmap); in setup_instance()
1866 hw->bch[i].debug = debug; in setup_instance()
1867 mISDN_initbchannel(&hw->bch[i], MAX_DATA_MEM, poll >> 1); in setup_instance()
1868 hw->bch[i].hw = hw; in setup_instance()
1869 hw->bch[i].ch.send = hfcusb_l2l1B; in setup_instance()
1870 hw->bch[i].ch.ctrl = hfc_bctrl; in setup_instance()
1871 hw->bch[i].ch.nr = i + 1; in setup_instance()
1872 list_add(&hw->bch[i].ch.list, &hw->dch.dev.bchannels); in setup_instance()
1875 hw->fifos[HFCUSB_B1_TX].bch = &hw->bch[0]; in setup_instance()
1876 hw->fifos[HFCUSB_B1_RX].bch = &hw->bch[0]; in setup_instance()
1877 hw->fifos[HFCUSB_B2_TX].bch = &hw->bch[1]; in setup_instance()
1878 hw->fifos[HFCUSB_B2_RX].bch = &hw->bch[1]; in setup_instance()
1879 hw->fifos[HFCUSB_D_TX].dch = &hw->dch; in setup_instance()
1880 hw->fifos[HFCUSB_D_RX].dch = &hw->dch; in setup_instance()
1881 hw->fifos[HFCUSB_PCM_RX].ech = &hw->ech; in setup_instance()
1882 hw->fifos[HFCUSB_PCM_TX].ech = &hw->ech; in setup_instance()
1884 err = setup_hfcsusb(hw); in setup_instance()
1888 snprintf(hw->name, MISDN_MAX_IDLEN - 1, "%s.%d", DRIVER_NAME, in setup_instance()
1891 DRIVER_NAME, hw->name); in setup_instance()
1893 err = mISDN_register_device(&hw->dch.dev, parent, hw->name); in setup_instance()
1899 list_add_tail(&hw->list, &HFClist); in setup_instance()
1904 mISDN_freebchannel(&hw->bch[1]); in setup_instance()
1905 mISDN_freebchannel(&hw->bch[0]); in setup_instance()
1906 mISDN_freedchannel(&hw->dch); in setup_instance()
1907 kfree(hw); in setup_instance()
1914 struct hfcsusb *hw; in hfcsusb_probe() local
2021 hw = kzalloc(sizeof(struct hfcsusb), GFP_KERNEL); in hfcsusb_probe()
2022 if (!hw) in hfcsusb_probe()
2024 snprintf(hw->name, MISDN_MAX_IDLEN - 1, "%s", DRIVER_NAME); in hfcsusb_probe()
2037 f = &hw->fifos[idx & 7]; in hfcsusb_probe()
2077 f->hw = hw; in hfcsusb_probe()
2084 hw->dev = dev; /* save device */ in hfcsusb_probe()
2085 hw->if_used = ifnum; /* save used interface */ in hfcsusb_probe()
2086 hw->alt_used = alt_used; /* and alternate config */ in hfcsusb_probe()
2087 hw->ctrl_paksize = dev->descriptor.bMaxPacketSize0; /* control size */ in hfcsusb_probe()
2088 hw->cfg_used = vcf[16]; /* store used config */ in hfcsusb_probe()
2089 hw->vend_idx = vend_idx; /* store found vendor */ in hfcsusb_probe()
2090 hw->packet_size = packet_size; in hfcsusb_probe()
2091 hw->iso_packet_size = iso_packet_size; in hfcsusb_probe()
2094 hw->ctrl_in_pipe = usb_rcvctrlpipe(hw->dev, 0); in hfcsusb_probe()
2095 hw->ctrl_out_pipe = usb_sndctrlpipe(hw->dev, 0); in hfcsusb_probe()
2100 hw->ctrl_urb = usb_alloc_urb(0, GFP_KERNEL); in hfcsusb_probe()
2101 if (!hw->ctrl_urb) { in hfcsusb_probe()
2104 kfree(hw); in hfcsusb_probe()
2109 hw->name, __func__, driver_info->vend_name, in hfcsusb_probe()
2112 if (setup_instance(hw, dev->dev.parent)) in hfcsusb_probe()
2115 hw->intf = intf; in hfcsusb_probe()
2116 usb_set_intfdata(hw->intf, hw); in hfcsusb_probe()
2124 struct hfcsusb *hw = usb_get_intfdata(intf); in hfcsusb_disconnect() local
2128 printk(KERN_INFO "%s: device disconnected\n", hw->name); in hfcsusb_disconnect()
2130 handle_led(hw, LED_POWER_OFF); in hfcsusb_disconnect()
2131 release_hw(hw); in hfcsusb_disconnect()
2133 list_for_each_entry_safe(hw, next, &HFClist, list) in hfcsusb_disconnect()