Lines Matching full:hw

41 static void hfcsusb_ph_command(struct hfcsusb *hw, u_char command);
42 static void release_hw(struct hfcsusb *hw);
43 static void reset_hfcsusb(struct hfcsusb *hw);
44 static void setPortMode(struct hfcsusb *hw);
45 static void hfcsusb_start_endpoint(struct hfcsusb *hw, int channel);
46 static void hfcsusb_stop_endpoint(struct hfcsusb *hw, int channel);
49 static int hfcsusb_ph_info(struct hfcsusb *hw);
53 ctrl_start_transfer(struct hfcsusb *hw) in ctrl_start_transfer() argument
56 printk(KERN_DEBUG "%s: %s\n", hw->name, __func__); in ctrl_start_transfer()
58 if (hw->ctrl_cnt) { in ctrl_start_transfer()
59 hw->ctrl_urb->pipe = hw->ctrl_out_pipe; in ctrl_start_transfer()
60 hw->ctrl_urb->setup_packet = (u_char *)&hw->ctrl_write; in ctrl_start_transfer()
61 hw->ctrl_urb->transfer_buffer = NULL; in ctrl_start_transfer()
62 hw->ctrl_urb->transfer_buffer_length = 0; in ctrl_start_transfer()
63 hw->ctrl_write.wIndex = in ctrl_start_transfer()
64 cpu_to_le16(hw->ctrl_buff[hw->ctrl_out_idx].hfcs_reg); in ctrl_start_transfer()
65 hw->ctrl_write.wValue = in ctrl_start_transfer()
66 cpu_to_le16(hw->ctrl_buff[hw->ctrl_out_idx].reg_val); in ctrl_start_transfer()
68 usb_submit_urb(hw->ctrl_urb, GFP_ATOMIC); in ctrl_start_transfer()
76 static int write_reg(struct hfcsusb *hw, __u8 reg, __u8 val) in write_reg() argument
82 hw->name, __func__, reg, val); in write_reg()
84 spin_lock(&hw->ctrl_lock); in write_reg()
85 if (hw->ctrl_cnt >= HFC_CTRL_BUFSIZE) { in write_reg()
86 spin_unlock(&hw->ctrl_lock); in write_reg()
89 buf = &hw->ctrl_buff[hw->ctrl_in_idx]; in write_reg()
92 if (++hw->ctrl_in_idx >= HFC_CTRL_BUFSIZE) in write_reg()
93 hw->ctrl_in_idx = 0; in write_reg()
94 if (++hw->ctrl_cnt == 1) in write_reg()
95 ctrl_start_transfer(hw); in write_reg()
96 spin_unlock(&hw->ctrl_lock); in write_reg()
105 struct hfcsusb *hw = (struct hfcsusb *) urb->context; in ctrl_complete() local
108 printk(KERN_DEBUG "%s: %s\n", hw->name, __func__); in ctrl_complete()
110 urb->dev = hw->dev; in ctrl_complete()
111 if (hw->ctrl_cnt) { in ctrl_complete()
112 hw->ctrl_cnt--; /* decrement actual count */ in ctrl_complete()
113 if (++hw->ctrl_out_idx >= HFC_CTRL_BUFSIZE) in ctrl_complete()
114 hw->ctrl_out_idx = 0; /* pointer wrap */ in ctrl_complete()
116 ctrl_start_transfer(hw); /* start next transfer */ in ctrl_complete()
122 set_led_bit(struct hfcsusb *hw, signed short led_bits, int set_on) in set_led_bit() argument
126 hw->led_state &= ~abs(led_bits); in set_led_bit()
128 hw->led_state |= led_bits; in set_led_bit()
131 hw->led_state |= abs(led_bits); in set_led_bit()
133 hw->led_state &= ~led_bits; in set_led_bit()
139 handle_led(struct hfcsusb *hw, int event) in handle_led() argument
142 hfcsusb_idtab[hw->vend_idx].driver_info; in handle_led()
147 tmpled = hw->led_state; in handle_led()
151 set_led_bit(hw, driver_info->led_bits[0], 1); in handle_led()
152 set_led_bit(hw, driver_info->led_bits[1], 0); in handle_led()
153 set_led_bit(hw, driver_info->led_bits[2], 0); in handle_led()
154 set_led_bit(hw, driver_info->led_bits[3], 0); in handle_led()
157 set_led_bit(hw, driver_info->led_bits[0], 0); in handle_led()
158 set_led_bit(hw, driver_info->led_bits[1], 0); in handle_led()
159 set_led_bit(hw, driver_info->led_bits[2], 0); in handle_led()
160 set_led_bit(hw, driver_info->led_bits[3], 0); in handle_led()
163 set_led_bit(hw, driver_info->led_bits[1], 1); in handle_led()
166 set_led_bit(hw, driver_info->led_bits[1], 0); in handle_led()
169 set_led_bit(hw, driver_info->led_bits[2], 1); in handle_led()
172 set_led_bit(hw, driver_info->led_bits[2], 0); in handle_led()
175 set_led_bit(hw, driver_info->led_bits[3], 1); in handle_led()
178 set_led_bit(hw, driver_info->led_bits[3], 0); in handle_led()
182 if (hw->led_state != tmpled) { in handle_led()
185 hw->name, __func__, in handle_led()
186 HFCUSB_P_DATA, hw->led_state); in handle_led()
188 write_reg(hw, HFCUSB_P_DATA, hw->led_state); in handle_led()
199 struct hfcsusb *hw = bch->hw; in hfcusb_l2l1B() local
205 printk(KERN_DEBUG "%s: %s\n", hw->name, __func__); in hfcusb_l2l1B()
209 spin_lock_irqsave(&hw->lock, flags); in hfcusb_l2l1B()
211 spin_unlock_irqrestore(&hw->lock, flags); in hfcusb_l2l1B()
214 hw->name, __func__, ret); in hfcusb_l2l1B()
220 hfcsusb_start_endpoint(hw, bch->nr - 1); in hfcusb_l2l1B()
245 hfcsusb_ph_info(struct hfcsusb *hw) in hfcsusb_ph_info() argument
248 struct dchannel *dch = &hw->dch; in hfcsusb_ph_info()
255 phi->dch.ch.protocol = hw->protocol; in hfcsusb_ph_info()
260 phi->bch[i].protocol = hw->bch[i].ch.protocol; in hfcsusb_ph_info()
261 phi->bch[i].Flags = hw->bch[i].Flags; in hfcsusb_ph_info()
279 struct hfcsusb *hw = dch->hw; in hfcusb_l2l1D() local
287 hw->name, __func__); in hfcusb_l2l1D()
289 spin_lock_irqsave(&hw->lock, flags); in hfcusb_l2l1D()
291 spin_unlock_irqrestore(&hw->lock, flags); in hfcusb_l2l1D()
301 hw->name, __func__, in hfcusb_l2l1D()
302 (hw->protocol == ISDN_P_NT_S0) ? "NT" : "TE"); in hfcusb_l2l1D()
304 if (hw->protocol == ISDN_P_NT_S0) { in hfcusb_l2l1D()
311 hfcsusb_ph_command(hw, in hfcusb_l2l1D()
317 hfcsusb_ph_command(hw, HFC_L1_ACTIVATE_TE); in hfcusb_l2l1D()
325 hw->name, __func__); in hfcusb_l2l1D()
328 if (hw->protocol == ISDN_P_NT_S0) { in hfcusb_l2l1D()
329 hfcsusb_ph_command(hw, HFC_L1_DEACTIVATE_NT); in hfcusb_l2l1D()
330 spin_lock_irqsave(&hw->lock, flags); in hfcusb_l2l1D()
342 spin_unlock_irqrestore(&hw->lock, flags); in hfcusb_l2l1D()
352 ret = hfcsusb_ph_info(hw); in hfcusb_l2l1D()
365 struct hfcsusb *hw = dch->hw; in hfc_l1callback() local
369 hw->name, __func__, cmd); in hfc_l1callback()
404 hw->name, __func__, cmd); in hfc_l1callback()
407 return hfcsusb_ph_info(hw); in hfc_l1callback()
411 open_dchannel(struct hfcsusb *hw, struct mISDNchannel *ch, in open_dchannel() argument
418 hw->name, __func__, hw->dch.dev.id, rq->adr.channel, in open_dchannel()
423 test_and_clear_bit(FLG_ACTIVE, &hw->dch.Flags); in open_dchannel()
424 test_and_clear_bit(FLG_ACTIVE, &hw->ech.Flags); in open_dchannel()
425 hfcsusb_start_endpoint(hw, HFC_CHAN_D); in open_dchannel()
429 if (hw->fifos[HFCUSB_PCM_RX].pipe) { in open_dchannel()
430 hfcsusb_start_endpoint(hw, HFC_CHAN_E); in open_dchannel()
431 set_bit(FLG_ACTIVE, &hw->ech.Flags); in open_dchannel()
432 _queue_data(&hw->ech.dev.D, PH_ACTIVATE_IND, in open_dchannel()
438 if (!hw->initdone) { in open_dchannel()
439 hw->protocol = rq->protocol; in open_dchannel()
441 err = create_l1(&hw->dch, hfc_l1callback); in open_dchannel()
445 setPortMode(hw); in open_dchannel()
447 hw->initdone = 1; in open_dchannel()
453 if (((ch->protocol == ISDN_P_NT_S0) && (hw->dch.state == 3)) || in open_dchannel()
454 ((ch->protocol == ISDN_P_TE_S0) && (hw->dch.state == 7))) in open_dchannel()
460 hw->name, __func__); in open_dchannel()
465 open_bchannel(struct hfcsusb *hw, struct channel_req *rq) in open_bchannel() argument
476 hw->name, __func__, rq->adr.channel); in open_bchannel()
478 bch = &hw->bch[rq->adr.channel - 1]; in open_bchannel()
486 hw->name, __func__); in open_bchannel()
491 channel_ctrl(struct hfcsusb *hw, struct mISDN_ctrl_req *cq) in channel_ctrl() argument
497 hw->name, __func__, (cq->op), (cq->channel)); in channel_ctrl()
506 hw->name, __func__, cq->op); in channel_ctrl()
521 struct hfcsusb *hw = dch->hw; in hfc_dctrl() local
527 hw->name, __func__, cmd, arg); in hfc_dctrl()
533 err = open_dchannel(hw, ch, rq); in hfc_dctrl()
535 err = open_bchannel(hw, rq); in hfc_dctrl()
537 hw->open++; in hfc_dctrl()
540 hw->open--; in hfc_dctrl()
544 hw->name, __func__, hw->dch.dev.id, in hfc_dctrl()
545 __builtin_return_address(0), hw->open); in hfc_dctrl()
546 if (!hw->open) { in hfc_dctrl()
547 hfcsusb_stop_endpoint(hw, HFC_CHAN_D); in hfc_dctrl()
548 if (hw->fifos[HFCUSB_PCM_RX].pipe) in hfc_dctrl()
549 hfcsusb_stop_endpoint(hw, HFC_CHAN_E); in hfc_dctrl()
550 handle_led(hw, LED_POWER_ON); in hfc_dctrl()
555 err = channel_ctrl(hw, arg); in hfc_dctrl()
560 hw->name, __func__, cmd); in hfc_dctrl()
572 struct hfcsusb *hw = dch->hw; in ph_state_te() local
576 printk(KERN_DEBUG "%s: %s: %s\n", hw->name, __func__, in ph_state_te()
580 hw->name, __func__, dch->state); in ph_state_te()
602 handle_led(hw, LED_S0_ON); in ph_state_te()
604 handle_led(hw, LED_S0_OFF); in ph_state_te()
613 struct hfcsusb *hw = dch->hw; in ph_state_nt() local
618 hw->name, __func__, in ph_state_nt()
623 hw->name, __func__, dch->state); in ph_state_nt()
630 hw->nt_timer = 0; in ph_state_nt()
631 hw->timers &= ~NT_ACTIVATION_TIMER; in ph_state_nt()
632 handle_led(hw, LED_S0_OFF); in ph_state_nt()
636 if (hw->nt_timer < 0) { in ph_state_nt()
637 hw->nt_timer = 0; in ph_state_nt()
638 hw->timers &= ~NT_ACTIVATION_TIMER; in ph_state_nt()
639 hfcsusb_ph_command(dch->hw, HFC_L1_DEACTIVATE_NT); in ph_state_nt()
641 hw->timers |= NT_ACTIVATION_TIMER; in ph_state_nt()
642 hw->nt_timer = NT_T1_COUNT; in ph_state_nt()
644 write_reg(hw, HFCUSB_STATES, 2 | HFCUSB_NT_G2_G3); in ph_state_nt()
648 hw->nt_timer = 0; in ph_state_nt()
649 hw->timers &= ~NT_ACTIVATION_TIMER; in ph_state_nt()
653 handle_led(hw, LED_S0_ON); in ph_state_nt()
656 hw->nt_timer = 0; in ph_state_nt()
657 hw->timers &= ~NT_ACTIVATION_TIMER; in ph_state_nt()
662 hfcsusb_ph_info(hw); in ph_state_nt()
668 struct hfcsusb *hw = dch->hw; in ph_state() local
670 if (hw->protocol == ISDN_P_NT_S0) in ph_state()
672 else if (hw->protocol == ISDN_P_TE_S0) in ph_state()
682 struct hfcsusb *hw = bch->hw; in hfcsusb_setup_bch() local
687 hw->name, __func__, bch->state, protocol, in hfcsusb_setup_bch()
718 hw->name, __func__, protocol); in hfcsusb_setup_bch()
723 write_reg(hw, HFCUSB_FIFO, (bch->nr == 1) ? 0 : 2); in hfcsusb_setup_bch()
724 write_reg(hw, HFCUSB_CON_HDLC, conhdlc); in hfcsusb_setup_bch()
725 write_reg(hw, HFCUSB_INC_RES_F, 2); in hfcsusb_setup_bch()
726 write_reg(hw, HFCUSB_FIFO, (bch->nr == 1) ? 1 : 3); in hfcsusb_setup_bch()
727 write_reg(hw, HFCUSB_CON_HDLC, conhdlc); in hfcsusb_setup_bch()
728 write_reg(hw, HFCUSB_INC_RES_F, 2); in hfcsusb_setup_bch()
730 sctrl = 0x40 + ((hw->protocol == ISDN_P_TE_S0) ? 0x00 : 0x04); in hfcsusb_setup_bch()
732 if (test_bit(FLG_ACTIVE, &hw->bch[0].Flags)) { in hfcsusb_setup_bch()
736 if (test_bit(FLG_ACTIVE, &hw->bch[1].Flags)) { in hfcsusb_setup_bch()
740 write_reg(hw, HFCUSB_SCTRL, sctrl); in hfcsusb_setup_bch()
741 write_reg(hw, HFCUSB_SCTRL_R, sctrl_r); in hfcsusb_setup_bch()
744 handle_led(hw, (bch->nr == 1) ? LED_B1_ON : LED_B2_ON); in hfcsusb_setup_bch()
746 handle_led(hw, (bch->nr == 1) ? LED_B1_OFF : in hfcsusb_setup_bch()
749 return hfcsusb_ph_info(hw); in hfcsusb_setup_bch()
753 hfcsusb_ph_command(struct hfcsusb *hw, u_char command) in hfcsusb_ph_command() argument
757 hw->name, __func__, command); in hfcsusb_ph_command()
762 write_reg(hw, HFCUSB_STATES, 0x14); in hfcsusb_ph_command()
764 write_reg(hw, HFCUSB_STATES, 0x04); in hfcsusb_ph_command()
768 write_reg(hw, HFCUSB_STATES, 0x10); in hfcsusb_ph_command()
769 write_reg(hw, HFCUSB_STATES, 0x03); in hfcsusb_ph_command()
773 if (hw->dch.state == 3) in hfcsusb_ph_command()
774 _queue_data(&hw->dch.dev.D, PH_ACTIVATE_IND, in hfcsusb_ph_command()
777 write_reg(hw, HFCUSB_STATES, HFCUSB_ACTIVATE | in hfcsusb_ph_command()
782 write_reg(hw, HFCUSB_STATES, in hfcsusb_ph_command()
802 struct hfcsusb *hw = fifo->hw; in hfcsusb_rx_frame() local
813 hw->name, __func__, fifon, len, in hfcsusb_rx_frame()
821 hw->name, __func__); in hfcsusb_rx_frame()
825 spin_lock_irqsave(&hw->lock, flags); in hfcsusb_rx_frame()
834 spin_unlock_irqrestore(&hw->lock, flags); in hfcsusb_rx_frame()
843 hw->name, fifo->bch->nr, len); in hfcsusb_rx_frame()
844 spin_unlock_irqrestore(&hw->lock, flags); in hfcsusb_rx_frame()
867 hw->name, __func__); in hfcsusb_rx_frame()
868 spin_unlock_irqrestore(&hw->lock, flags); in hfcsusb_rx_frame()
876 hw->name, __func__, fifon); in hfcsusb_rx_frame()
878 spin_unlock_irqrestore(&hw->lock, flags); in hfcsusb_rx_frame()
893 hw->name, __func__, fifon, in hfcsusb_rx_frame()
912 &hw->dch); in hfcsusb_rx_frame()
918 hw->name, fifon, rx_skb->len); in hfcsusb_rx_frame()
932 spin_unlock_irqrestore(&hw->lock, flags); in hfcsusb_rx_frame()
963 struct hfcsusb *hw = fifo->hw; in rx_iso_complete() local
974 spin_lock_irqsave(&hw->lock, flags); in rx_iso_complete()
978 spin_unlock_irqrestore(&hw->lock, flags); in rx_iso_complete()
981 spin_unlock_irqrestore(&hw->lock, flags); in rx_iso_complete()
991 hw->name, __func__, status, fifon); in rx_iso_complete()
1011 hw->name, __func__, k, iso_status); in rx_iso_complete()
1019 hw->name, __func__, urb->start_frame, in rx_iso_complete()
1034 hw->threshold_mask = buf[1]; in rx_iso_complete()
1053 if ((s0_state) && (hw->initdone) && in rx_iso_complete()
1054 (s0_state != hw->dch.state)) { in rx_iso_complete()
1055 hw->dch.state = s0_state; in rx_iso_complete()
1056 schedule_event(&hw->dch, FLG_PHCHANGE); in rx_iso_complete()
1059 fill_isoc_urb(urb, fifo->hw->dev, fifo->pipe, in rx_iso_complete()
1068 hw->name, __func__, errcode); in rx_iso_complete()
1074 hw->name, __func__, status, fifon); in rx_iso_complete()
1085 struct hfcsusb *hw = fifo->hw; in rx_int_complete() local
1089 spin_lock_irqsave(&hw->lock, flags); in rx_int_complete()
1093 spin_unlock_irqrestore(&hw->lock, flags); in rx_int_complete()
1096 spin_unlock_irqrestore(&hw->lock, flags); in rx_int_complete()
1103 hw->name, __func__, fifon, urb->status); in rx_int_complete()
1115 hw->name, __func__, len); in rx_int_complete()
1123 hw->threshold_mask = buf[1]; in rx_int_complete()
1126 if (hw->initdone && ((buf[0] >> 4) != hw->dch.state)) { in rx_int_complete()
1127 hw->dch.state = (buf[0] >> 4); in rx_int_complete()
1128 schedule_event(&hw->dch, FLG_PHCHANGE); in rx_int_complete()
1147 hw->name, __func__); in rx_int_complete()
1157 struct hfcsusb *hw = fifo->hw; in tx_iso_complete() local
1166 spin_lock_irqsave(&hw->lock, flags); in tx_iso_complete()
1170 spin_unlock_irqrestore(&hw->lock, flags); in tx_iso_complete()
1187 hw->name, __func__); in tx_iso_complete()
1188 spin_unlock_irqrestore(&hw->lock, flags); in tx_iso_complete()
1205 hw->name, __func__, status, fifon); in tx_iso_complete()
1213 threshbit = (hw->threshold_mask & (1 << fifon)); in tx_iso_complete()
1221 fill_isoc_urb(urb, fifo->hw->dev, fifo->pipe, in tx_iso_complete()
1236 hw->name, __func__, k, errcode); in tx_iso_complete()
1292 hw->name, __func__, in tx_iso_complete()
1324 hw->name, __func__, in tx_iso_complete()
1347 hw->name, __func__, errcode); in tx_iso_complete()
1355 if ((fifon == HFCUSB_D_TX) && (hw->protocol == ISDN_P_NT_S0) in tx_iso_complete()
1356 && (hw->timers & NT_ACTIVATION_TIMER)) { in tx_iso_complete()
1357 if ((--hw->nt_timer) < 0) in tx_iso_complete()
1358 schedule_event(&hw->dch, FLG_PHCHANGE); in tx_iso_complete()
1365 hw->name, __func__, in tx_iso_complete()
1368 spin_unlock_irqrestore(&hw->lock, flags); in tx_iso_complete()
1379 struct hfcsusb *hw = fifo->hw; in start_isoc_chain() local
1384 hw->name, __func__, fifo->fifonum); in start_isoc_chain()
1394 hw->name, __func__, fifo->fifonum); in start_isoc_chain()
1405 fifo->hw->dev, fifo->pipe, in start_isoc_chain()
1425 hw->name, __func__); in start_isoc_chain()
1435 hw->name, __func__, in start_isoc_chain()
1445 struct hfcsusb *hw = fifo->hw; in stop_iso_gracefull() local
1450 spin_lock_irqsave(&hw->lock, flags); in stop_iso_gracefull()
1453 hw->name, __func__, fifo->fifonum, i); in stop_iso_gracefull()
1455 spin_unlock_irqrestore(&hw->lock, flags); in stop_iso_gracefull()
1464 hw->name, __func__, fifo->fifonum, i); in stop_iso_gracefull()
1471 struct hfcsusb *hw = fifo->hw; in stop_int_gracefull() local
1475 spin_lock_irqsave(&hw->lock, flags); in stop_int_gracefull()
1478 hw->name, __func__, fifo->fifonum); in stop_int_gracefull()
1480 spin_unlock_irqrestore(&hw->lock, flags); in stop_int_gracefull()
1487 hw->name, __func__, fifo->fifonum); in stop_int_gracefull()
1494 struct hfcsusb *hw = fifo->hw; in start_int_fifo() local
1499 hw->name, __func__, fifo->fifonum); in start_int_fifo()
1506 usb_fill_int_urb(fifo->urb, fifo->hw->dev, fifo->pipe, in start_int_fifo()
1514 hw->name, __func__, errcode); in start_int_fifo()
1520 setPortMode(struct hfcsusb *hw) in setPortMode() argument
1523 printk(KERN_DEBUG "%s: %s %s\n", hw->name, __func__, in setPortMode()
1524 (hw->protocol == ISDN_P_TE_S0) ? "TE" : "NT"); in setPortMode()
1526 if (hw->protocol == ISDN_P_TE_S0) { in setPortMode()
1527 write_reg(hw, HFCUSB_SCTRL, 0x40); in setPortMode()
1528 write_reg(hw, HFCUSB_SCTRL_E, 0x00); in setPortMode()
1529 write_reg(hw, HFCUSB_CLKDEL, CLKDEL_TE); in setPortMode()
1530 write_reg(hw, HFCUSB_STATES, 3 | 0x10); in setPortMode()
1531 write_reg(hw, HFCUSB_STATES, 3); in setPortMode()
1533 write_reg(hw, HFCUSB_SCTRL, 0x44); in setPortMode()
1534 write_reg(hw, HFCUSB_SCTRL_E, 0x09); in setPortMode()
1535 write_reg(hw, HFCUSB_CLKDEL, CLKDEL_NT); in setPortMode()
1536 write_reg(hw, HFCUSB_STATES, 1 | 0x10); in setPortMode()
1537 write_reg(hw, HFCUSB_STATES, 1); in setPortMode()
1542 reset_hfcsusb(struct hfcsusb *hw) in reset_hfcsusb() argument
1548 printk(KERN_DEBUG "%s: %s\n", hw->name, __func__); in reset_hfcsusb()
1551 write_reg(hw, HFCUSB_CIRM, 8); in reset_hfcsusb()
1554 write_reg(hw, HFCUSB_CIRM, 0x10); in reset_hfcsusb()
1557 write_reg(hw, HFCUSB_USB_SIZE, (hw->packet_size / 8) | in reset_hfcsusb()
1558 ((hw->packet_size / 8) << 4)); in reset_hfcsusb()
1561 write_reg(hw, HFCUSB_USB_SIZE_I, hw->iso_packet_size); in reset_hfcsusb()
1564 write_reg(hw, HFCUSB_MST_MODE1, 0); /* set default values */ in reset_hfcsusb()
1565 write_reg(hw, HFCUSB_MST_MODE0, 1); /* enable master mode */ in reset_hfcsusb()
1568 write_reg(hw, HFCUSB_F_THRES, in reset_hfcsusb()
1571 fifo = hw->fifos; in reset_hfcsusb()
1573 write_reg(hw, HFCUSB_FIFO, i); /* select the desired fifo */ in reset_hfcsusb()
1579 write_reg(hw, HFCUSB_HDLC_PAR, ((i <= HFCUSB_B2_RX) ? 0 : 2)); in reset_hfcsusb()
1583 write_reg(hw, HFCUSB_CON_HDLC, in reset_hfcsusb()
1584 (hw->protocol == ISDN_P_NT_S0) ? 0x08 : 0x09); in reset_hfcsusb()
1586 write_reg(hw, HFCUSB_CON_HDLC, 0x08); in reset_hfcsusb()
1587 write_reg(hw, HFCUSB_INC_RES_F, 2); /* reset the fifo */ in reset_hfcsusb()
1590 write_reg(hw, HFCUSB_SCTRL_R, 0); /* disable both B receivers */ in reset_hfcsusb()
1591 handle_led(hw, LED_POWER_ON); in reset_hfcsusb()
1596 hfcsusb_start_endpoint(struct hfcsusb *hw, int channel) in hfcsusb_start_endpoint() argument
1599 if ((channel == HFC_CHAN_D) && (hw->fifos[HFCUSB_D_RX].active)) in hfcsusb_start_endpoint()
1601 if ((channel == HFC_CHAN_B1) && (hw->fifos[HFCUSB_B1_RX].active)) in hfcsusb_start_endpoint()
1603 if ((channel == HFC_CHAN_B2) && (hw->fifos[HFCUSB_B2_RX].active)) in hfcsusb_start_endpoint()
1605 if ((channel == HFC_CHAN_E) && (hw->fifos[HFCUSB_PCM_RX].active)) in hfcsusb_start_endpoint()
1609 if (hw->cfg_used == CNF_3INT3ISO || hw->cfg_used == CNF_4INT3ISO) in hfcsusb_start_endpoint()
1610 start_int_fifo(hw->fifos + channel * 2 + 1); in hfcsusb_start_endpoint()
1613 if (hw->cfg_used == CNF_3ISO3ISO || hw->cfg_used == CNF_4ISO3ISO) { in hfcsusb_start_endpoint()
1616 start_isoc_chain(hw->fifos + HFCUSB_D_RX, in hfcsusb_start_endpoint()
1622 start_isoc_chain(hw->fifos + HFCUSB_PCM_RX, in hfcsusb_start_endpoint()
1628 start_isoc_chain(hw->fifos + HFCUSB_B1_RX, in hfcsusb_start_endpoint()
1634 start_isoc_chain(hw->fifos + HFCUSB_B2_RX, in hfcsusb_start_endpoint()
1645 start_isoc_chain(hw->fifos + HFCUSB_D_TX, in hfcsusb_start_endpoint()
1650 start_isoc_chain(hw->fifos + HFCUSB_B1_TX, in hfcsusb_start_endpoint()
1655 start_isoc_chain(hw->fifos + HFCUSB_B2_TX, in hfcsusb_start_endpoint()
1664 hfcsusb_stop_endpoint(struct hfcsusb *hw, int channel) in hfcsusb_stop_endpoint() argument
1667 if ((channel == HFC_CHAN_D) && (!hw->fifos[HFCUSB_D_RX].active)) in hfcsusb_stop_endpoint()
1669 if ((channel == HFC_CHAN_B1) && (!hw->fifos[HFCUSB_B1_RX].active)) in hfcsusb_stop_endpoint()
1671 if ((channel == HFC_CHAN_B2) && (!hw->fifos[HFCUSB_B2_RX].active)) in hfcsusb_stop_endpoint()
1673 if ((channel == HFC_CHAN_E) && (!hw->fifos[HFCUSB_PCM_RX].active)) in hfcsusb_stop_endpoint()
1677 if (hw->cfg_used == CNF_3INT3ISO || hw->cfg_used == CNF_4INT3ISO) in hfcsusb_stop_endpoint()
1678 stop_int_gracefull(hw->fifos + channel * 2 + 1); in hfcsusb_stop_endpoint()
1681 if (hw->cfg_used == CNF_3ISO3ISO || hw->cfg_used == CNF_4ISO3ISO) in hfcsusb_stop_endpoint()
1682 stop_iso_gracefull(hw->fifos + channel * 2 + 1); in hfcsusb_stop_endpoint()
1686 stop_iso_gracefull(hw->fifos + channel * 2); in hfcsusb_stop_endpoint()
1692 setup_hfcsusb(struct hfcsusb *hw) in setup_hfcsusb() argument
1699 printk(KERN_DEBUG "%s: %s\n", hw->name, __func__); in setup_hfcsusb()
1704 ret = read_reg_atomic(hw, HFCUSB_CHIP_ID, dmabuf); in setup_hfcsusb()
1712 hw->name, __func__); in setup_hfcsusb()
1717 hw->name, __func__, b); in setup_hfcsusb()
1722 (void) usb_set_interface(hw->dev, hw->if_used, hw->alt_used); in setup_hfcsusb()
1724 hw->led_state = 0; in setup_hfcsusb()
1727 hw->ctrl_read.bRequestType = 0xc0; in setup_hfcsusb()
1728 hw->ctrl_read.bRequest = 1; in setup_hfcsusb()
1729 hw->ctrl_read.wLength = cpu_to_le16(1); in setup_hfcsusb()
1730 hw->ctrl_write.bRequestType = 0x40; in setup_hfcsusb()
1731 hw->ctrl_write.bRequest = 0; in setup_hfcsusb()
1732 hw->ctrl_write.wLength = 0; in setup_hfcsusb()
1733 usb_fill_control_urb(hw->ctrl_urb, hw->dev, hw->ctrl_out_pipe, in setup_hfcsusb()
1734 (u_char *)&hw->ctrl_write, NULL, 0, in setup_hfcsusb()
1735 (usb_complete_t)ctrl_complete, hw); in setup_hfcsusb()
1737 reset_hfcsusb(hw); in setup_hfcsusb()
1742 release_hw(struct hfcsusb *hw) in release_hw() argument
1745 printk(KERN_DEBUG "%s: %s\n", hw->name, __func__); in release_hw()
1752 hfcsusb_stop_endpoint(hw, HFC_CHAN_D); in release_hw()
1753 hfcsusb_stop_endpoint(hw, HFC_CHAN_B1); in release_hw()
1754 hfcsusb_stop_endpoint(hw, HFC_CHAN_B2); in release_hw()
1755 if (hw->fifos[HFCUSB_PCM_RX].pipe) in release_hw()
1756 hfcsusb_stop_endpoint(hw, HFC_CHAN_E); in release_hw()
1757 if (hw->protocol == ISDN_P_TE_S0) in release_hw()
1758 l1_event(hw->dch.l1, CLOSE_CHANNEL); in release_hw()
1760 mISDN_unregister_device(&hw->dch.dev); in release_hw()
1761 mISDN_freebchannel(&hw->bch[1]); in release_hw()
1762 mISDN_freebchannel(&hw->bch[0]); in release_hw()
1763 mISDN_freedchannel(&hw->dch); in release_hw()
1765 if (hw->ctrl_urb) { in release_hw()
1766 usb_kill_urb(hw->ctrl_urb); in release_hw()
1767 usb_free_urb(hw->ctrl_urb); in release_hw()
1768 hw->ctrl_urb = NULL; in release_hw()
1771 if (hw->intf) in release_hw()
1772 usb_set_intfdata(hw->intf, NULL); in release_hw()
1773 list_del(&hw->list); in release_hw()
1774 kfree(hw); in release_hw()
1775 hw = NULL; in release_hw()
1781 struct hfcsusb *hw = bch->hw; in deactivate_bchannel() local
1786 hw->name, __func__, bch->nr); in deactivate_bchannel()
1788 spin_lock_irqsave(&hw->lock, flags); in deactivate_bchannel()
1790 spin_unlock_irqrestore(&hw->lock, flags); in deactivate_bchannel()
1792 hfcsusb_stop_endpoint(hw, bch->nr - 1); in deactivate_bchannel()
1833 setup_instance(struct hfcsusb *hw, struct device *parent) in setup_instance() argument
1839 printk(KERN_DEBUG "%s: %s\n", hw->name, __func__); in setup_instance()
1841 spin_lock_init(&hw->ctrl_lock); in setup_instance()
1842 spin_lock_init(&hw->lock); in setup_instance()
1844 mISDN_initdchannel(&hw->dch, MAX_DFRAME_LEN_L1, ph_state); in setup_instance()
1845 hw->dch.debug = debug & 0xFFFF; in setup_instance()
1846 hw->dch.hw = hw; in setup_instance()
1847 hw->dch.dev.Dprotocols = (1 << ISDN_P_TE_S0) | (1 << ISDN_P_NT_S0); in setup_instance()
1848 hw->dch.dev.D.send = hfcusb_l2l1D; in setup_instance()
1849 hw->dch.dev.D.ctrl = hfc_dctrl; in setup_instance()
1852 if (hw->fifos[HFCUSB_PCM_RX].pipe) in setup_instance()
1853 mISDN_initdchannel(&hw->ech, MAX_DFRAME_LEN_L1, NULL); in setup_instance()
1855 hw->dch.dev.Bprotocols = (1 << (ISDN_P_B_RAW & ISDN_P_B_MASK)) | in setup_instance()
1857 hw->dch.dev.nrbchan = 2; in setup_instance()
1859 hw->bch[i].nr = i + 1; in setup_instance()
1860 set_channelmap(i + 1, hw->dch.dev.channelmap); in setup_instance()
1861 hw->bch[i].debug = debug; in setup_instance()
1862 mISDN_initbchannel(&hw->bch[i], MAX_DATA_MEM, poll >> 1); in setup_instance()
1863 hw->bch[i].hw = hw; in setup_instance()
1864 hw->bch[i].ch.send = hfcusb_l2l1B; in setup_instance()
1865 hw->bch[i].ch.ctrl = hfc_bctrl; in setup_instance()
1866 hw->bch[i].ch.nr = i + 1; in setup_instance()
1867 list_add(&hw->bch[i].ch.list, &hw->dch.dev.bchannels); in setup_instance()
1870 hw->fifos[HFCUSB_B1_TX].bch = &hw->bch[0]; in setup_instance()
1871 hw->fifos[HFCUSB_B1_RX].bch = &hw->bch[0]; in setup_instance()
1872 hw->fifos[HFCUSB_B2_TX].bch = &hw->bch[1]; in setup_instance()
1873 hw->fifos[HFCUSB_B2_RX].bch = &hw->bch[1]; in setup_instance()
1874 hw->fifos[HFCUSB_D_TX].dch = &hw->dch; in setup_instance()
1875 hw->fifos[HFCUSB_D_RX].dch = &hw->dch; in setup_instance()
1876 hw->fifos[HFCUSB_PCM_RX].ech = &hw->ech; in setup_instance()
1877 hw->fifos[HFCUSB_PCM_TX].ech = &hw->ech; in setup_instance()
1879 err = setup_hfcsusb(hw); in setup_instance()
1883 snprintf(hw->name, MISDN_MAX_IDLEN - 1, "%s.%d", DRIVER_NAME, in setup_instance()
1886 DRIVER_NAME, hw->name); in setup_instance()
1888 err = mISDN_register_device(&hw->dch.dev, parent, hw->name); in setup_instance()
1894 list_add_tail(&hw->list, &HFClist); in setup_instance()
1899 mISDN_freebchannel(&hw->bch[1]); in setup_instance()
1900 mISDN_freebchannel(&hw->bch[0]); in setup_instance()
1901 mISDN_freedchannel(&hw->dch); in setup_instance()
1902 kfree(hw); in setup_instance()
1909 struct hfcsusb *hw; in hfcsusb_probe() local
2016 hw = kzalloc(sizeof(struct hfcsusb), GFP_KERNEL); in hfcsusb_probe()
2017 if (!hw) in hfcsusb_probe()
2019 snprintf(hw->name, MISDN_MAX_IDLEN - 1, "%s", DRIVER_NAME); in hfcsusb_probe()
2032 f = &hw->fifos[idx & 7]; in hfcsusb_probe()
2072 f->hw = hw; in hfcsusb_probe()
2079 hw->dev = dev; /* save device */ in hfcsusb_probe()
2080 hw->if_used = ifnum; /* save used interface */ in hfcsusb_probe()
2081 hw->alt_used = alt_used; /* and alternate config */ in hfcsusb_probe()
2082 hw->ctrl_paksize = dev->descriptor.bMaxPacketSize0; /* control size */ in hfcsusb_probe()
2083 hw->cfg_used = vcf[16]; /* store used config */ in hfcsusb_probe()
2084 hw->vend_idx = vend_idx; /* store found vendor */ in hfcsusb_probe()
2085 hw->packet_size = packet_size; in hfcsusb_probe()
2086 hw->iso_packet_size = iso_packet_size; in hfcsusb_probe()
2089 hw->ctrl_in_pipe = usb_rcvctrlpipe(hw->dev, 0); in hfcsusb_probe()
2090 hw->ctrl_out_pipe = usb_sndctrlpipe(hw->dev, 0); in hfcsusb_probe()
2095 hw->ctrl_urb = usb_alloc_urb(0, GFP_KERNEL); in hfcsusb_probe()
2096 if (!hw->ctrl_urb) { in hfcsusb_probe()
2099 kfree(hw); in hfcsusb_probe()
2104 hw->name, __func__, driver_info->vend_name, in hfcsusb_probe()
2107 if (setup_instance(hw, dev->dev.parent)) in hfcsusb_probe()
2110 hw->intf = intf; in hfcsusb_probe()
2111 usb_set_intfdata(hw->intf, hw); in hfcsusb_probe()
2119 struct hfcsusb *hw = usb_get_intfdata(intf); in hfcsusb_disconnect() local
2123 printk(KERN_INFO "%s: device disconnected\n", hw->name); in hfcsusb_disconnect()
2125 handle_led(hw, LED_POWER_OFF); in hfcsusb_disconnect()
2126 release_hw(hw); in hfcsusb_disconnect()
2128 list_for_each_entry_safe(hw, next, &HFClist, list) in hfcsusb_disconnect()