Lines Matching refs:hw

55 static void hfcsusb_ph_command(struct hfcsusb *hw, u_char command);
56 static void release_hw(struct hfcsusb *hw);
57 static void reset_hfcsusb(struct hfcsusb *hw);
58 static void setPortMode(struct hfcsusb *hw);
59 static void hfcsusb_start_endpoint(struct hfcsusb *hw, int channel);
60 static void hfcsusb_stop_endpoint(struct hfcsusb *hw, int channel);
63 static void hfcsusb_ph_info(struct hfcsusb *hw);
67 ctrl_start_transfer(struct hfcsusb *hw) in ctrl_start_transfer() argument
70 printk(KERN_DEBUG "%s: %s\n", hw->name, __func__); in ctrl_start_transfer()
72 if (hw->ctrl_cnt) { in ctrl_start_transfer()
73 hw->ctrl_urb->pipe = hw->ctrl_out_pipe; in ctrl_start_transfer()
74 hw->ctrl_urb->setup_packet = (u_char *)&hw->ctrl_write; in ctrl_start_transfer()
75 hw->ctrl_urb->transfer_buffer = NULL; in ctrl_start_transfer()
76 hw->ctrl_urb->transfer_buffer_length = 0; in ctrl_start_transfer()
77 hw->ctrl_write.wIndex = in ctrl_start_transfer()
78 cpu_to_le16(hw->ctrl_buff[hw->ctrl_out_idx].hfcs_reg); in ctrl_start_transfer()
79 hw->ctrl_write.wValue = in ctrl_start_transfer()
80 cpu_to_le16(hw->ctrl_buff[hw->ctrl_out_idx].reg_val); in ctrl_start_transfer()
82 usb_submit_urb(hw->ctrl_urb, GFP_ATOMIC); in ctrl_start_transfer()
90 static int write_reg(struct hfcsusb *hw, __u8 reg, __u8 val) in write_reg() argument
96 hw->name, __func__, reg, val); in write_reg()
98 spin_lock(&hw->ctrl_lock); in write_reg()
99 if (hw->ctrl_cnt >= HFC_CTRL_BUFSIZE) { in write_reg()
100 spin_unlock(&hw->ctrl_lock); in write_reg()
103 buf = &hw->ctrl_buff[hw->ctrl_in_idx]; in write_reg()
106 if (++hw->ctrl_in_idx >= HFC_CTRL_BUFSIZE) in write_reg()
107 hw->ctrl_in_idx = 0; in write_reg()
108 if (++hw->ctrl_cnt == 1) in write_reg()
109 ctrl_start_transfer(hw); in write_reg()
110 spin_unlock(&hw->ctrl_lock); in write_reg()
119 struct hfcsusb *hw = (struct hfcsusb *) urb->context; in ctrl_complete() local
122 printk(KERN_DEBUG "%s: %s\n", hw->name, __func__); in ctrl_complete()
124 urb->dev = hw->dev; in ctrl_complete()
125 if (hw->ctrl_cnt) { in ctrl_complete()
126 hw->ctrl_cnt--; /* decrement actual count */ in ctrl_complete()
127 if (++hw->ctrl_out_idx >= HFC_CTRL_BUFSIZE) in ctrl_complete()
128 hw->ctrl_out_idx = 0; /* pointer wrap */ in ctrl_complete()
130 ctrl_start_transfer(hw); /* start next transfer */ in ctrl_complete()
136 set_led_bit(struct hfcsusb *hw, signed short led_bits, int set_on) in set_led_bit() argument
140 hw->led_state &= ~abs(led_bits); in set_led_bit()
142 hw->led_state |= led_bits; in set_led_bit()
145 hw->led_state |= abs(led_bits); in set_led_bit()
147 hw->led_state &= ~led_bits; in set_led_bit()
153 handle_led(struct hfcsusb *hw, int event) in handle_led() argument
156 hfcsusb_idtab[hw->vend_idx].driver_info; in handle_led()
161 tmpled = hw->led_state; in handle_led()
165 set_led_bit(hw, driver_info->led_bits[0], 1); in handle_led()
166 set_led_bit(hw, driver_info->led_bits[1], 0); in handle_led()
167 set_led_bit(hw, driver_info->led_bits[2], 0); in handle_led()
168 set_led_bit(hw, driver_info->led_bits[3], 0); in handle_led()
171 set_led_bit(hw, driver_info->led_bits[0], 0); in handle_led()
172 set_led_bit(hw, driver_info->led_bits[1], 0); in handle_led()
173 set_led_bit(hw, driver_info->led_bits[2], 0); in handle_led()
174 set_led_bit(hw, driver_info->led_bits[3], 0); in handle_led()
177 set_led_bit(hw, driver_info->led_bits[1], 1); in handle_led()
180 set_led_bit(hw, driver_info->led_bits[1], 0); in handle_led()
183 set_led_bit(hw, driver_info->led_bits[2], 1); in handle_led()
186 set_led_bit(hw, driver_info->led_bits[2], 0); in handle_led()
189 set_led_bit(hw, driver_info->led_bits[3], 1); in handle_led()
192 set_led_bit(hw, driver_info->led_bits[3], 0); in handle_led()
196 if (hw->led_state != tmpled) { in handle_led()
199 hw->name, __func__, in handle_led()
200 HFCUSB_P_DATA, hw->led_state); in handle_led()
202 write_reg(hw, HFCUSB_P_DATA, hw->led_state); in handle_led()
213 struct hfcsusb *hw = bch->hw; in hfcusb_l2l1B() local
219 printk(KERN_DEBUG "%s: %s\n", hw->name, __func__); in hfcusb_l2l1B()
223 spin_lock_irqsave(&hw->lock, flags); in hfcusb_l2l1B()
225 spin_unlock_irqrestore(&hw->lock, flags); in hfcusb_l2l1B()
228 hw->name, __func__, ret); in hfcusb_l2l1B()
234 hfcsusb_start_endpoint(hw, bch->nr - 1); in hfcusb_l2l1B()
259 hfcsusb_ph_info(struct hfcsusb *hw) in hfcsusb_ph_info() argument
262 struct dchannel *dch = &hw->dch; in hfcsusb_ph_info()
267 phi->dch.ch.protocol = hw->protocol; in hfcsusb_ph_info()
272 phi->bch[i].protocol = hw->bch[i].ch.protocol; in hfcsusb_ph_info()
273 phi->bch[i].Flags = hw->bch[i].Flags; in hfcsusb_ph_info()
290 struct hfcsusb *hw = dch->hw; in hfcusb_l2l1D() local
298 hw->name, __func__); in hfcusb_l2l1D()
300 spin_lock_irqsave(&hw->lock, flags); in hfcusb_l2l1D()
302 spin_unlock_irqrestore(&hw->lock, flags); in hfcusb_l2l1D()
312 hw->name, __func__, in hfcusb_l2l1D()
313 (hw->protocol == ISDN_P_NT_S0) ? "NT" : "TE"); in hfcusb_l2l1D()
315 if (hw->protocol == ISDN_P_NT_S0) { in hfcusb_l2l1D()
322 hfcsusb_ph_command(hw, in hfcusb_l2l1D()
328 hfcsusb_ph_command(hw, HFC_L1_ACTIVATE_TE); in hfcusb_l2l1D()
336 hw->name, __func__); in hfcusb_l2l1D()
339 if (hw->protocol == ISDN_P_NT_S0) { in hfcusb_l2l1D()
340 hfcsusb_ph_command(hw, HFC_L1_DEACTIVATE_NT); in hfcusb_l2l1D()
341 spin_lock_irqsave(&hw->lock, flags); in hfcusb_l2l1D()
353 spin_unlock_irqrestore(&hw->lock, flags); in hfcusb_l2l1D()
363 hfcsusb_ph_info(hw); in hfcusb_l2l1D()
377 struct hfcsusb *hw = dch->hw; in hfc_l1callback() local
381 hw->name, __func__, cmd); in hfc_l1callback()
416 hw->name, __func__, cmd); in hfc_l1callback()
419 hfcsusb_ph_info(hw); in hfc_l1callback()
424 open_dchannel(struct hfcsusb *hw, struct mISDNchannel *ch, in open_dchannel() argument
431 hw->name, __func__, hw->dch.dev.id, rq->adr.channel, in open_dchannel()
436 test_and_clear_bit(FLG_ACTIVE, &hw->dch.Flags); in open_dchannel()
437 test_and_clear_bit(FLG_ACTIVE, &hw->ech.Flags); in open_dchannel()
438 hfcsusb_start_endpoint(hw, HFC_CHAN_D); in open_dchannel()
442 if (hw->fifos[HFCUSB_PCM_RX].pipe) { in open_dchannel()
443 hfcsusb_start_endpoint(hw, HFC_CHAN_E); in open_dchannel()
444 set_bit(FLG_ACTIVE, &hw->ech.Flags); in open_dchannel()
445 _queue_data(&hw->ech.dev.D, PH_ACTIVATE_IND, in open_dchannel()
451 if (!hw->initdone) { in open_dchannel()
452 hw->protocol = rq->protocol; in open_dchannel()
454 err = create_l1(&hw->dch, hfc_l1callback); in open_dchannel()
458 setPortMode(hw); in open_dchannel()
460 hw->initdone = 1; in open_dchannel()
466 if (((ch->protocol == ISDN_P_NT_S0) && (hw->dch.state == 3)) || in open_dchannel()
467 ((ch->protocol == ISDN_P_TE_S0) && (hw->dch.state == 7))) in open_dchannel()
473 hw->name, __func__); in open_dchannel()
478 open_bchannel(struct hfcsusb *hw, struct channel_req *rq) in open_bchannel() argument
489 hw->name, __func__, rq->adr.channel); in open_bchannel()
491 bch = &hw->bch[rq->adr.channel - 1]; in open_bchannel()
499 hw->name, __func__); in open_bchannel()
504 channel_ctrl(struct hfcsusb *hw, struct mISDN_ctrl_req *cq) in channel_ctrl() argument
510 hw->name, __func__, (cq->op), (cq->channel)); in channel_ctrl()
519 hw->name, __func__, cq->op); in channel_ctrl()
534 struct hfcsusb *hw = dch->hw; in hfc_dctrl() local
540 hw->name, __func__, cmd, arg); in hfc_dctrl()
546 err = open_dchannel(hw, ch, rq); in hfc_dctrl()
548 err = open_bchannel(hw, rq); in hfc_dctrl()
550 hw->open++; in hfc_dctrl()
553 hw->open--; in hfc_dctrl()
557 hw->name, __func__, hw->dch.dev.id, in hfc_dctrl()
558 __builtin_return_address(0), hw->open); in hfc_dctrl()
559 if (!hw->open) { in hfc_dctrl()
560 hfcsusb_stop_endpoint(hw, HFC_CHAN_D); in hfc_dctrl()
561 if (hw->fifos[HFCUSB_PCM_RX].pipe) in hfc_dctrl()
562 hfcsusb_stop_endpoint(hw, HFC_CHAN_E); in hfc_dctrl()
563 handle_led(hw, LED_POWER_ON); in hfc_dctrl()
568 err = channel_ctrl(hw, arg); in hfc_dctrl()
573 hw->name, __func__, cmd); in hfc_dctrl()
585 struct hfcsusb *hw = dch->hw; in ph_state_te() local
589 printk(KERN_DEBUG "%s: %s: %s\n", hw->name, __func__, in ph_state_te()
593 hw->name, __func__, dch->state); in ph_state_te()
615 handle_led(hw, LED_S0_ON); in ph_state_te()
617 handle_led(hw, LED_S0_OFF); in ph_state_te()
626 struct hfcsusb *hw = dch->hw; in ph_state_nt() local
631 hw->name, __func__, in ph_state_nt()
636 hw->name, __func__, dch->state); in ph_state_nt()
643 hw->nt_timer = 0; in ph_state_nt()
644 hw->timers &= ~NT_ACTIVATION_TIMER; in ph_state_nt()
645 handle_led(hw, LED_S0_OFF); in ph_state_nt()
649 if (hw->nt_timer < 0) { in ph_state_nt()
650 hw->nt_timer = 0; in ph_state_nt()
651 hw->timers &= ~NT_ACTIVATION_TIMER; in ph_state_nt()
652 hfcsusb_ph_command(dch->hw, HFC_L1_DEACTIVATE_NT); in ph_state_nt()
654 hw->timers |= NT_ACTIVATION_TIMER; in ph_state_nt()
655 hw->nt_timer = NT_T1_COUNT; in ph_state_nt()
657 write_reg(hw, HFCUSB_STATES, 2 | HFCUSB_NT_G2_G3); in ph_state_nt()
661 hw->nt_timer = 0; in ph_state_nt()
662 hw->timers &= ~NT_ACTIVATION_TIMER; in ph_state_nt()
666 handle_led(hw, LED_S0_ON); in ph_state_nt()
669 hw->nt_timer = 0; in ph_state_nt()
670 hw->timers &= ~NT_ACTIVATION_TIMER; in ph_state_nt()
675 hfcsusb_ph_info(hw); in ph_state_nt()
681 struct hfcsusb *hw = dch->hw; in ph_state() local
683 if (hw->protocol == ISDN_P_NT_S0) in ph_state()
685 else if (hw->protocol == ISDN_P_TE_S0) in ph_state()
695 struct hfcsusb *hw = bch->hw; in hfcsusb_setup_bch() local
700 hw->name, __func__, bch->state, protocol, in hfcsusb_setup_bch()
731 hw->name, __func__, protocol); in hfcsusb_setup_bch()
736 write_reg(hw, HFCUSB_FIFO, (bch->nr == 1) ? 0 : 2); in hfcsusb_setup_bch()
737 write_reg(hw, HFCUSB_CON_HDLC, conhdlc); in hfcsusb_setup_bch()
738 write_reg(hw, HFCUSB_INC_RES_F, 2); in hfcsusb_setup_bch()
739 write_reg(hw, HFCUSB_FIFO, (bch->nr == 1) ? 1 : 3); in hfcsusb_setup_bch()
740 write_reg(hw, HFCUSB_CON_HDLC, conhdlc); in hfcsusb_setup_bch()
741 write_reg(hw, HFCUSB_INC_RES_F, 2); in hfcsusb_setup_bch()
743 sctrl = 0x40 + ((hw->protocol == ISDN_P_TE_S0) ? 0x00 : 0x04); in hfcsusb_setup_bch()
745 if (test_bit(FLG_ACTIVE, &hw->bch[0].Flags)) { in hfcsusb_setup_bch()
749 if (test_bit(FLG_ACTIVE, &hw->bch[1].Flags)) { in hfcsusb_setup_bch()
753 write_reg(hw, HFCUSB_SCTRL, sctrl); in hfcsusb_setup_bch()
754 write_reg(hw, HFCUSB_SCTRL_R, sctrl_r); in hfcsusb_setup_bch()
757 handle_led(hw, (bch->nr == 1) ? LED_B1_ON : LED_B2_ON); in hfcsusb_setup_bch()
759 handle_led(hw, (bch->nr == 1) ? LED_B1_OFF : in hfcsusb_setup_bch()
762 hfcsusb_ph_info(hw); in hfcsusb_setup_bch()
767 hfcsusb_ph_command(struct hfcsusb *hw, u_char command) in hfcsusb_ph_command() argument
771 hw->name, __func__, command); in hfcsusb_ph_command()
776 write_reg(hw, HFCUSB_STATES, 0x14); in hfcsusb_ph_command()
778 write_reg(hw, HFCUSB_STATES, 0x04); in hfcsusb_ph_command()
782 write_reg(hw, HFCUSB_STATES, 0x10); in hfcsusb_ph_command()
783 write_reg(hw, HFCUSB_STATES, 0x03); in hfcsusb_ph_command()
787 if (hw->dch.state == 3) in hfcsusb_ph_command()
788 _queue_data(&hw->dch.dev.D, PH_ACTIVATE_IND, in hfcsusb_ph_command()
791 write_reg(hw, HFCUSB_STATES, HFCUSB_ACTIVATE | in hfcsusb_ph_command()
796 write_reg(hw, HFCUSB_STATES, in hfcsusb_ph_command()
816 struct hfcsusb *hw = fifo->hw; in hfcsusb_rx_frame() local
826 hw->name, __func__, fifon, len, in hfcsusb_rx_frame()
834 hw->name, __func__); in hfcsusb_rx_frame()
838 spin_lock(&hw->lock); in hfcsusb_rx_frame()
847 spin_unlock(&hw->lock); in hfcsusb_rx_frame()
856 hw->name, fifo->bch->nr, len); in hfcsusb_rx_frame()
857 spin_unlock(&hw->lock); in hfcsusb_rx_frame()
880 hw->name, __func__); in hfcsusb_rx_frame()
881 spin_unlock(&hw->lock); in hfcsusb_rx_frame()
889 hw->name, __func__, fifon); in hfcsusb_rx_frame()
891 spin_unlock(&hw->lock); in hfcsusb_rx_frame()
906 hw->name, __func__, fifon, in hfcsusb_rx_frame()
925 &hw->dch); in hfcsusb_rx_frame()
931 hw->name, fifon, rx_skb->len); in hfcsusb_rx_frame()
945 spin_unlock(&hw->lock); in hfcsusb_rx_frame()
976 struct hfcsusb *hw = fifo->hw; in rx_iso_complete() local
986 spin_lock(&hw->lock); in rx_iso_complete()
990 spin_unlock(&hw->lock); in rx_iso_complete()
993 spin_unlock(&hw->lock); in rx_iso_complete()
1003 hw->name, __func__, status, fifon); in rx_iso_complete()
1023 hw->name, __func__, k, iso_status); in rx_iso_complete()
1031 hw->name, __func__, urb->start_frame, in rx_iso_complete()
1046 hw->threshold_mask = buf[1]; in rx_iso_complete()
1065 if ((s0_state) && (hw->initdone) && in rx_iso_complete()
1066 (s0_state != hw->dch.state)) { in rx_iso_complete()
1067 hw->dch.state = s0_state; in rx_iso_complete()
1068 schedule_event(&hw->dch, FLG_PHCHANGE); in rx_iso_complete()
1071 fill_isoc_urb(urb, fifo->hw->dev, fifo->pipe, in rx_iso_complete()
1080 hw->name, __func__, errcode); in rx_iso_complete()
1086 hw->name, __func__, status, fifon); in rx_iso_complete()
1097 struct hfcsusb *hw = fifo->hw; in rx_int_complete() local
1100 spin_lock(&hw->lock); in rx_int_complete()
1104 spin_unlock(&hw->lock); in rx_int_complete()
1107 spin_unlock(&hw->lock); in rx_int_complete()
1114 hw->name, __func__, fifon, urb->status); in rx_int_complete()
1126 hw->name, __func__, len); in rx_int_complete()
1134 hw->threshold_mask = buf[1]; in rx_int_complete()
1137 if (hw->initdone && ((buf[0] >> 4) != hw->dch.state)) { in rx_int_complete()
1138 hw->dch.state = (buf[0] >> 4); in rx_int_complete()
1139 schedule_event(&hw->dch, FLG_PHCHANGE); in rx_int_complete()
1158 hw->name, __func__); in rx_int_complete()
1168 struct hfcsusb *hw = fifo->hw; in tx_iso_complete() local
1176 spin_lock(&hw->lock); in tx_iso_complete()
1180 spin_unlock(&hw->lock); in tx_iso_complete()
1197 hw->name, __func__); in tx_iso_complete()
1198 spin_unlock(&hw->lock); in tx_iso_complete()
1215 hw->name, __func__, status, fifon); in tx_iso_complete()
1223 threshbit = (hw->threshold_mask & (1 << fifon)); in tx_iso_complete()
1231 fill_isoc_urb(urb, fifo->hw->dev, fifo->pipe, in tx_iso_complete()
1246 hw->name, __func__, k, errcode); in tx_iso_complete()
1302 hw->name, __func__, in tx_iso_complete()
1334 hw->name, __func__, in tx_iso_complete()
1357 hw->name, __func__, errcode); in tx_iso_complete()
1365 if ((fifon == HFCUSB_D_TX) && (hw->protocol == ISDN_P_NT_S0) in tx_iso_complete()
1366 && (hw->timers & NT_ACTIVATION_TIMER)) { in tx_iso_complete()
1367 if ((--hw->nt_timer) < 0) in tx_iso_complete()
1368 schedule_event(&hw->dch, FLG_PHCHANGE); in tx_iso_complete()
1375 hw->name, __func__, in tx_iso_complete()
1378 spin_unlock(&hw->lock); in tx_iso_complete()
1389 struct hfcsusb *hw = fifo->hw; in start_isoc_chain() local
1394 hw->name, __func__, fifo->fifonum); in start_isoc_chain()
1404 hw->name, __func__, fifo->fifonum); in start_isoc_chain()
1414 fifo->hw->dev, fifo->pipe, in start_isoc_chain()
1434 hw->name, __func__); in start_isoc_chain()
1444 hw->name, __func__, in start_isoc_chain()
1454 struct hfcsusb *hw = fifo->hw; in stop_iso_gracefull() local
1459 spin_lock_irqsave(&hw->lock, flags); in stop_iso_gracefull()
1462 hw->name, __func__, fifo->fifonum, i); in stop_iso_gracefull()
1464 spin_unlock_irqrestore(&hw->lock, flags); in stop_iso_gracefull()
1473 hw->name, __func__, fifo->fifonum, i); in stop_iso_gracefull()
1480 struct hfcsusb *hw = fifo->hw; in stop_int_gracefull() local
1484 spin_lock_irqsave(&hw->lock, flags); in stop_int_gracefull()
1487 hw->name, __func__, fifo->fifonum); in stop_int_gracefull()
1489 spin_unlock_irqrestore(&hw->lock, flags); in stop_int_gracefull()
1496 hw->name, __func__, fifo->fifonum); in stop_int_gracefull()
1503 struct hfcsusb *hw = fifo->hw; in start_int_fifo() local
1508 hw->name, __func__, fifo->fifonum); in start_int_fifo()
1515 usb_fill_int_urb(fifo->urb, fifo->hw->dev, fifo->pipe, in start_int_fifo()
1523 hw->name, __func__, errcode); in start_int_fifo()
1529 setPortMode(struct hfcsusb *hw) in setPortMode() argument
1532 printk(KERN_DEBUG "%s: %s %s\n", hw->name, __func__, in setPortMode()
1533 (hw->protocol == ISDN_P_TE_S0) ? "TE" : "NT"); in setPortMode()
1535 if (hw->protocol == ISDN_P_TE_S0) { in setPortMode()
1536 write_reg(hw, HFCUSB_SCTRL, 0x40); in setPortMode()
1537 write_reg(hw, HFCUSB_SCTRL_E, 0x00); in setPortMode()
1538 write_reg(hw, HFCUSB_CLKDEL, CLKDEL_TE); in setPortMode()
1539 write_reg(hw, HFCUSB_STATES, 3 | 0x10); in setPortMode()
1540 write_reg(hw, HFCUSB_STATES, 3); in setPortMode()
1542 write_reg(hw, HFCUSB_SCTRL, 0x44); in setPortMode()
1543 write_reg(hw, HFCUSB_SCTRL_E, 0x09); in setPortMode()
1544 write_reg(hw, HFCUSB_CLKDEL, CLKDEL_NT); in setPortMode()
1545 write_reg(hw, HFCUSB_STATES, 1 | 0x10); in setPortMode()
1546 write_reg(hw, HFCUSB_STATES, 1); in setPortMode()
1551 reset_hfcsusb(struct hfcsusb *hw) in reset_hfcsusb() argument
1557 printk(KERN_DEBUG "%s: %s\n", hw->name, __func__); in reset_hfcsusb()
1560 write_reg(hw, HFCUSB_CIRM, 8); in reset_hfcsusb()
1563 write_reg(hw, HFCUSB_CIRM, 0x10); in reset_hfcsusb()
1566 write_reg(hw, HFCUSB_USB_SIZE, (hw->packet_size / 8) | in reset_hfcsusb()
1567 ((hw->packet_size / 8) << 4)); in reset_hfcsusb()
1570 write_reg(hw, HFCUSB_USB_SIZE_I, hw->iso_packet_size); in reset_hfcsusb()
1573 write_reg(hw, HFCUSB_MST_MODE1, 0); /* set default values */ in reset_hfcsusb()
1574 write_reg(hw, HFCUSB_MST_MODE0, 1); /* enable master mode */ in reset_hfcsusb()
1577 write_reg(hw, HFCUSB_F_THRES, in reset_hfcsusb()
1580 fifo = hw->fifos; in reset_hfcsusb()
1582 write_reg(hw, HFCUSB_FIFO, i); /* select the desired fifo */ in reset_hfcsusb()
1588 write_reg(hw, HFCUSB_HDLC_PAR, ((i <= HFCUSB_B2_RX) ? 0 : 2)); in reset_hfcsusb()
1592 write_reg(hw, HFCUSB_CON_HDLC, in reset_hfcsusb()
1593 (hw->protocol == ISDN_P_NT_S0) ? 0x08 : 0x09); in reset_hfcsusb()
1595 write_reg(hw, HFCUSB_CON_HDLC, 0x08); in reset_hfcsusb()
1596 write_reg(hw, HFCUSB_INC_RES_F, 2); /* reset the fifo */ in reset_hfcsusb()
1599 write_reg(hw, HFCUSB_SCTRL_R, 0); /* disable both B receivers */ in reset_hfcsusb()
1600 handle_led(hw, LED_POWER_ON); in reset_hfcsusb()
1605 hfcsusb_start_endpoint(struct hfcsusb *hw, int channel) in hfcsusb_start_endpoint() argument
1608 if ((channel == HFC_CHAN_D) && (hw->fifos[HFCUSB_D_RX].active)) in hfcsusb_start_endpoint()
1610 if ((channel == HFC_CHAN_B1) && (hw->fifos[HFCUSB_B1_RX].active)) in hfcsusb_start_endpoint()
1612 if ((channel == HFC_CHAN_B2) && (hw->fifos[HFCUSB_B2_RX].active)) in hfcsusb_start_endpoint()
1614 if ((channel == HFC_CHAN_E) && (hw->fifos[HFCUSB_PCM_RX].active)) in hfcsusb_start_endpoint()
1618 if (hw->cfg_used == CNF_3INT3ISO || hw->cfg_used == CNF_4INT3ISO) in hfcsusb_start_endpoint()
1619 start_int_fifo(hw->fifos + channel * 2 + 1); in hfcsusb_start_endpoint()
1622 if (hw->cfg_used == CNF_3ISO3ISO || hw->cfg_used == CNF_4ISO3ISO) { in hfcsusb_start_endpoint()
1625 start_isoc_chain(hw->fifos + HFCUSB_D_RX, in hfcsusb_start_endpoint()
1631 start_isoc_chain(hw->fifos + HFCUSB_PCM_RX, in hfcsusb_start_endpoint()
1637 start_isoc_chain(hw->fifos + HFCUSB_B1_RX, in hfcsusb_start_endpoint()
1643 start_isoc_chain(hw->fifos + HFCUSB_B2_RX, in hfcsusb_start_endpoint()
1654 start_isoc_chain(hw->fifos + HFCUSB_D_TX, in hfcsusb_start_endpoint()
1659 start_isoc_chain(hw->fifos + HFCUSB_B1_TX, in hfcsusb_start_endpoint()
1664 start_isoc_chain(hw->fifos + HFCUSB_B2_TX, in hfcsusb_start_endpoint()
1673 hfcsusb_stop_endpoint(struct hfcsusb *hw, int channel) in hfcsusb_stop_endpoint() argument
1676 if ((channel == HFC_CHAN_D) && (!hw->fifos[HFCUSB_D_RX].active)) in hfcsusb_stop_endpoint()
1678 if ((channel == HFC_CHAN_B1) && (!hw->fifos[HFCUSB_B1_RX].active)) in hfcsusb_stop_endpoint()
1680 if ((channel == HFC_CHAN_B2) && (!hw->fifos[HFCUSB_B2_RX].active)) in hfcsusb_stop_endpoint()
1682 if ((channel == HFC_CHAN_E) && (!hw->fifos[HFCUSB_PCM_RX].active)) in hfcsusb_stop_endpoint()
1686 if (hw->cfg_used == CNF_3INT3ISO || hw->cfg_used == CNF_4INT3ISO) in hfcsusb_stop_endpoint()
1687 stop_int_gracefull(hw->fifos + channel * 2 + 1); in hfcsusb_stop_endpoint()
1690 if (hw->cfg_used == CNF_3ISO3ISO || hw->cfg_used == CNF_4ISO3ISO) in hfcsusb_stop_endpoint()
1691 stop_iso_gracefull(hw->fifos + channel * 2 + 1); in hfcsusb_stop_endpoint()
1695 stop_iso_gracefull(hw->fifos + channel * 2); in hfcsusb_stop_endpoint()
1701 setup_hfcsusb(struct hfcsusb *hw) in setup_hfcsusb() argument
1706 printk(KERN_DEBUG "%s: %s\n", hw->name, __func__); in setup_hfcsusb()
1709 if (read_reg_atomic(hw, HFCUSB_CHIP_ID, &b) != 1) { in setup_hfcsusb()
1711 hw->name, __func__); in setup_hfcsusb()
1716 hw->name, __func__, b); in setup_hfcsusb()
1721 (void) usb_set_interface(hw->dev, hw->if_used, hw->alt_used); in setup_hfcsusb()
1723 hw->led_state = 0; in setup_hfcsusb()
1726 hw->ctrl_read.bRequestType = 0xc0; in setup_hfcsusb()
1727 hw->ctrl_read.bRequest = 1; in setup_hfcsusb()
1728 hw->ctrl_read.wLength = cpu_to_le16(1); in setup_hfcsusb()
1729 hw->ctrl_write.bRequestType = 0x40; in setup_hfcsusb()
1730 hw->ctrl_write.bRequest = 0; in setup_hfcsusb()
1731 hw->ctrl_write.wLength = 0; in setup_hfcsusb()
1732 usb_fill_control_urb(hw->ctrl_urb, hw->dev, hw->ctrl_out_pipe, in setup_hfcsusb()
1733 (u_char *)&hw->ctrl_write, NULL, 0, in setup_hfcsusb()
1734 (usb_complete_t)ctrl_complete, hw); in setup_hfcsusb()
1736 reset_hfcsusb(hw); in setup_hfcsusb()
1741 release_hw(struct hfcsusb *hw) in release_hw() argument
1744 printk(KERN_DEBUG "%s: %s\n", hw->name, __func__); in release_hw()
1751 hfcsusb_stop_endpoint(hw, HFC_CHAN_D); in release_hw()
1752 hfcsusb_stop_endpoint(hw, HFC_CHAN_B1); in release_hw()
1753 hfcsusb_stop_endpoint(hw, HFC_CHAN_B2); in release_hw()
1754 if (hw->fifos[HFCUSB_PCM_RX].pipe) in release_hw()
1755 hfcsusb_stop_endpoint(hw, HFC_CHAN_E); in release_hw()
1756 if (hw->protocol == ISDN_P_TE_S0) in release_hw()
1757 l1_event(hw->dch.l1, CLOSE_CHANNEL); in release_hw()
1759 mISDN_unregister_device(&hw->dch.dev); in release_hw()
1760 mISDN_freebchannel(&hw->bch[1]); in release_hw()
1761 mISDN_freebchannel(&hw->bch[0]); in release_hw()
1762 mISDN_freedchannel(&hw->dch); in release_hw()
1764 if (hw->ctrl_urb) { in release_hw()
1765 usb_kill_urb(hw->ctrl_urb); in release_hw()
1766 usb_free_urb(hw->ctrl_urb); in release_hw()
1767 hw->ctrl_urb = NULL; in release_hw()
1770 if (hw->intf) in release_hw()
1771 usb_set_intfdata(hw->intf, NULL); in release_hw()
1772 list_del(&hw->list); in release_hw()
1773 kfree(hw); in release_hw()
1774 hw = NULL; in release_hw()
1780 struct hfcsusb *hw = bch->hw; in deactivate_bchannel() local
1785 hw->name, __func__, bch->nr); in deactivate_bchannel()
1787 spin_lock_irqsave(&hw->lock, flags); in deactivate_bchannel()
1789 spin_unlock_irqrestore(&hw->lock, flags); in deactivate_bchannel()
1791 hfcsusb_stop_endpoint(hw, bch->nr - 1); in deactivate_bchannel()
1832 setup_instance(struct hfcsusb *hw, struct device *parent) in setup_instance() argument
1838 printk(KERN_DEBUG "%s: %s\n", hw->name, __func__); in setup_instance()
1840 spin_lock_init(&hw->ctrl_lock); in setup_instance()
1841 spin_lock_init(&hw->lock); in setup_instance()
1843 mISDN_initdchannel(&hw->dch, MAX_DFRAME_LEN_L1, ph_state); in setup_instance()
1844 hw->dch.debug = debug & 0xFFFF; in setup_instance()
1845 hw->dch.hw = hw; in setup_instance()
1846 hw->dch.dev.Dprotocols = (1 << ISDN_P_TE_S0) | (1 << ISDN_P_NT_S0); in setup_instance()
1847 hw->dch.dev.D.send = hfcusb_l2l1D; in setup_instance()
1848 hw->dch.dev.D.ctrl = hfc_dctrl; in setup_instance()
1851 if (hw->fifos[HFCUSB_PCM_RX].pipe) in setup_instance()
1852 mISDN_initdchannel(&hw->ech, MAX_DFRAME_LEN_L1, NULL); in setup_instance()
1854 hw->dch.dev.Bprotocols = (1 << (ISDN_P_B_RAW & ISDN_P_B_MASK)) | in setup_instance()
1856 hw->dch.dev.nrbchan = 2; in setup_instance()
1858 hw->bch[i].nr = i + 1; in setup_instance()
1859 set_channelmap(i + 1, hw->dch.dev.channelmap); in setup_instance()
1860 hw->bch[i].debug = debug; in setup_instance()
1861 mISDN_initbchannel(&hw->bch[i], MAX_DATA_MEM, poll >> 1); in setup_instance()
1862 hw->bch[i].hw = hw; in setup_instance()
1863 hw->bch[i].ch.send = hfcusb_l2l1B; in setup_instance()
1864 hw->bch[i].ch.ctrl = hfc_bctrl; in setup_instance()
1865 hw->bch[i].ch.nr = i + 1; in setup_instance()
1866 list_add(&hw->bch[i].ch.list, &hw->dch.dev.bchannels); in setup_instance()
1869 hw->fifos[HFCUSB_B1_TX].bch = &hw->bch[0]; in setup_instance()
1870 hw->fifos[HFCUSB_B1_RX].bch = &hw->bch[0]; in setup_instance()
1871 hw->fifos[HFCUSB_B2_TX].bch = &hw->bch[1]; in setup_instance()
1872 hw->fifos[HFCUSB_B2_RX].bch = &hw->bch[1]; in setup_instance()
1873 hw->fifos[HFCUSB_D_TX].dch = &hw->dch; in setup_instance()
1874 hw->fifos[HFCUSB_D_RX].dch = &hw->dch; in setup_instance()
1875 hw->fifos[HFCUSB_PCM_RX].ech = &hw->ech; in setup_instance()
1876 hw->fifos[HFCUSB_PCM_TX].ech = &hw->ech; in setup_instance()
1878 err = setup_hfcsusb(hw); in setup_instance()
1882 snprintf(hw->name, MISDN_MAX_IDLEN - 1, "%s.%d", DRIVER_NAME, in setup_instance()
1885 DRIVER_NAME, hw->name); in setup_instance()
1887 err = mISDN_register_device(&hw->dch.dev, parent, hw->name); in setup_instance()
1893 list_add_tail(&hw->list, &HFClist); in setup_instance()
1898 mISDN_freebchannel(&hw->bch[1]); in setup_instance()
1899 mISDN_freebchannel(&hw->bch[0]); in setup_instance()
1900 mISDN_freedchannel(&hw->dch); in setup_instance()
1901 kfree(hw); in setup_instance()
1908 struct hfcsusb *hw; in hfcsusb_probe() local
2012 hw = kzalloc(sizeof(struct hfcsusb), GFP_KERNEL); in hfcsusb_probe()
2013 if (!hw) in hfcsusb_probe()
2015 snprintf(hw->name, MISDN_MAX_IDLEN - 1, "%s", DRIVER_NAME); in hfcsusb_probe()
2028 f = &hw->fifos[idx & 7]; in hfcsusb_probe()
2068 f->hw = hw; in hfcsusb_probe()
2075 hw->dev = dev; /* save device */ in hfcsusb_probe()
2076 hw->if_used = ifnum; /* save used interface */ in hfcsusb_probe()
2077 hw->alt_used = alt_used; /* and alternate config */ in hfcsusb_probe()
2078 hw->ctrl_paksize = dev->descriptor.bMaxPacketSize0; /* control size */ in hfcsusb_probe()
2079 hw->cfg_used = vcf[16]; /* store used config */ in hfcsusb_probe()
2080 hw->vend_idx = vend_idx; /* store found vendor */ in hfcsusb_probe()
2081 hw->packet_size = packet_size; in hfcsusb_probe()
2082 hw->iso_packet_size = iso_packet_size; in hfcsusb_probe()
2085 hw->ctrl_in_pipe = usb_rcvctrlpipe(hw->dev, 0); in hfcsusb_probe()
2086 hw->ctrl_out_pipe = usb_sndctrlpipe(hw->dev, 0); in hfcsusb_probe()
2091 hw->ctrl_urb = usb_alloc_urb(0, GFP_KERNEL); in hfcsusb_probe()
2092 if (!hw->ctrl_urb) { in hfcsusb_probe()
2095 kfree(hw); in hfcsusb_probe()
2100 hw->name, __func__, driver_info->vend_name, in hfcsusb_probe()
2103 if (setup_instance(hw, dev->dev.parent)) in hfcsusb_probe()
2106 hw->intf = intf; in hfcsusb_probe()
2107 usb_set_intfdata(hw->intf, hw); in hfcsusb_probe()
2115 struct hfcsusb *hw = usb_get_intfdata(intf); in hfcsusb_disconnect() local
2119 printk(KERN_INFO "%s: device disconnected\n", hw->name); in hfcsusb_disconnect()
2121 handle_led(hw, LED_POWER_OFF); in hfcsusb_disconnect()
2122 release_hw(hw); in hfcsusb_disconnect()
2124 list_for_each_entry_safe(hw, next, &HFClist, list) in hfcsusb_disconnect()