Lines Matching refs:dsp
190 dsp_rx_off_member(struct dsp *dsp) in dsp_rx_off_member() argument
197 if (!dsp->features_rx_off) in dsp_rx_off_member()
201 if (!dsp->rx_disabled) in dsp_rx_off_member()
204 else if (dsp->dtmf.software) in dsp_rx_off_member()
207 else if (dsp->echo.software) in dsp_rx_off_member()
210 else if (dsp->conf && dsp->conf->software) in dsp_rx_off_member()
215 if (rx_off == dsp->rx_is_off) in dsp_rx_off_member()
218 if (!dsp->ch.peer) { in dsp_rx_off_member()
226 if (dsp->ch.peer->ctrl(dsp->ch.peer, CONTROL_CHANNEL, &cq)) { in dsp_rx_off_member()
231 dsp->rx_is_off = rx_off; in dsp_rx_off_member()
234 __func__, dsp->name, rx_off); in dsp_rx_off_member()
237 dsp_rx_off(struct dsp *dsp) in dsp_rx_off() argument
245 if (!dsp->conf) { in dsp_rx_off()
246 dsp_rx_off_member(dsp); in dsp_rx_off()
250 list_for_each_entry(member, &dsp->conf->mlist, list) { in dsp_rx_off()
251 dsp_rx_off_member(member->dsp); in dsp_rx_off()
257 dsp_fill_empty(struct dsp *dsp) in dsp_fill_empty() argument
263 if (!dsp->ch.peer) { in dsp_fill_empty()
272 if (dsp->ch.peer->ctrl(dsp->ch.peer, CONTROL_CHANNEL, &cq)) { in dsp_fill_empty()
279 __func__, dsp->name); in dsp_fill_empty()
283 dsp_control_req(struct dsp *dsp, struct mISDNhead *hh, struct sk_buff *skb) in dsp_control_req() argument
301 if (dsp->hdlc) { in dsp_control_req()
311 dsp->dtmf.treshold = (*(int *)data) * 10000; in dsp_control_req()
313 dsp->dtmf.enable = 1; in dsp_control_req()
315 dsp_dtmf_goertzel_init(dsp); in dsp_control_req()
318 dsp_dtmf_hardware(dsp); in dsp_control_req()
319 dsp_rx_off(dsp); in dsp_control_req()
324 dsp->dtmf.enable = 0; in dsp_control_req()
325 dsp->dtmf.hardware = 0; in dsp_control_req()
326 dsp->dtmf.software = 0; in dsp_control_req()
338 ret = dsp_cmx_conf(dsp, *((u32 *)data)); in dsp_control_req()
340 dsp_rx_off(dsp); in dsp_control_req()
342 dsp_cmx_debug(dsp); in dsp_control_req()
348 ret = dsp_cmx_conf(dsp, 0); in dsp_control_req()
351 dsp_cmx_debug(dsp); in dsp_control_req()
352 dsp_rx_off(dsp); in dsp_control_req()
355 if (dsp->hdlc) { in dsp_control_req()
366 ret = dsp_tone(dsp, *((int *)data)); in dsp_control_req()
368 dsp_cmx_hardware(dsp->conf, dsp); in dsp_control_req()
369 dsp_rx_off(dsp); in dsp_control_req()
371 if (!dsp->tone.tone) in dsp_control_req()
375 if (dsp->hdlc) { in dsp_control_req()
381 dsp_tone(dsp, 0); in dsp_control_req()
382 dsp_cmx_hardware(dsp->conf, dsp); in dsp_control_req()
383 dsp_rx_off(dsp); in dsp_control_req()
386 dsp->rx_W = 0; in dsp_control_req()
387 dsp->rx_R = 0; in dsp_control_req()
390 if (dsp->hdlc) { in dsp_control_req()
398 dsp->tx_volume = *((int *)data); in dsp_control_req()
401 __func__, dsp->tx_volume); in dsp_control_req()
402 dsp_cmx_hardware(dsp->conf, dsp); in dsp_control_req()
403 dsp_dtmf_hardware(dsp); in dsp_control_req()
404 dsp_rx_off(dsp); in dsp_control_req()
407 if (dsp->hdlc) { in dsp_control_req()
415 dsp->rx_volume = *((int *)data); in dsp_control_req()
418 __func__, dsp->tx_volume); in dsp_control_req()
419 dsp_cmx_hardware(dsp->conf, dsp); in dsp_control_req()
420 dsp_dtmf_hardware(dsp); in dsp_control_req()
421 dsp_rx_off(dsp); in dsp_control_req()
424 dsp->echo.software = 1; /* soft echo */ in dsp_control_req()
427 dsp_cmx_hardware(dsp->conf, dsp); in dsp_control_req()
428 dsp_rx_off(dsp); in dsp_control_req()
430 dsp_cmx_debug(dsp); in dsp_control_req()
433 dsp->echo.software = 0; in dsp_control_req()
434 dsp->echo.hardware = 0; in dsp_control_req()
437 dsp_cmx_hardware(dsp->conf, dsp); in dsp_control_req()
438 dsp_rx_off(dsp); in dsp_control_req()
440 dsp_cmx_debug(dsp); in dsp_control_req()
446 dsp->rx_disabled = 0; in dsp_control_req()
447 dsp_rx_off(dsp); in dsp_control_req()
453 dsp->rx_disabled = 1; in dsp_control_req()
454 dsp_rx_off(dsp); in dsp_control_req()
457 if (dsp->hdlc) { in dsp_control_req()
464 dsp->tx_mix = 1; in dsp_control_req()
465 dsp_cmx_hardware(dsp->conf, dsp); in dsp_control_req()
466 dsp_rx_off(dsp); in dsp_control_req()
468 dsp_cmx_debug(dsp); in dsp_control_req()
471 if (dsp->hdlc) { in dsp_control_req()
478 dsp->tx_mix = 0; in dsp_control_req()
479 dsp_cmx_hardware(dsp->conf, dsp); in dsp_control_req()
480 dsp_rx_off(dsp); in dsp_control_req()
482 dsp_cmx_debug(dsp); in dsp_control_req()
485 dsp->tx_data = 1; in dsp_control_req()
488 dsp_cmx_hardware(dsp->conf, dsp); in dsp_control_req()
489 dsp_rx_off(dsp); in dsp_control_req()
491 dsp_cmx_debug(dsp); in dsp_control_req()
494 dsp->tx_data = 0; in dsp_control_req()
497 dsp_cmx_hardware(dsp->conf, dsp); in dsp_control_req()
498 dsp_rx_off(dsp); in dsp_control_req()
500 dsp_cmx_debug(dsp); in dsp_control_req()
504 if (dsp->hdlc) { in dsp_control_req()
512 dsp->cmx_delay = (*((int *)data)) << 3; in dsp_control_req()
514 if (dsp->cmx_delay >= (CMX_BUFF_HALF >> 1)) in dsp_control_req()
517 dsp->cmx_delay = (CMX_BUFF_HALF >> 1) - 1; in dsp_control_req()
521 __func__, dsp->cmx_delay); in dsp_control_req()
525 if (dsp->hdlc) { in dsp_control_req()
529 dsp->cmx_delay = 0; in dsp_control_req()
535 if (dsp->hdlc) { in dsp_control_req()
539 dsp->tx_dejitter = 1; in dsp_control_req()
545 if (dsp->hdlc) { in dsp_control_req()
549 dsp->tx_dejitter = 0; in dsp_control_req()
555 if (dsp->hdlc) { in dsp_control_req()
564 dsp->pipeline.inuse = 1; in dsp_control_req()
565 dsp_cmx_hardware(dsp->conf, dsp); in dsp_control_req()
566 ret = dsp_pipeline_build(&dsp->pipeline, in dsp_control_req()
568 dsp_cmx_hardware(dsp->conf, dsp); in dsp_control_req()
569 dsp_rx_off(dsp); in dsp_control_req()
573 if (dsp->hdlc) { in dsp_control_req()
584 ret = dsp_bf_init(dsp, (u8 *)data, len); in dsp_control_req()
594 if (dsp->up) { in dsp_control_req()
595 if (dsp->up->send(dsp->up, nskb)) in dsp_control_req()
601 dsp_cmx_hardware(dsp->conf, dsp); in dsp_control_req()
602 dsp_dtmf_hardware(dsp); in dsp_control_req()
603 dsp_rx_off(dsp); in dsp_control_req()
607 if (dsp->hdlc) { in dsp_control_req()
613 dsp_bf_cleanup(dsp); in dsp_control_req()
614 dsp_cmx_hardware(dsp->conf, dsp); in dsp_control_req()
615 dsp_dtmf_hardware(dsp); in dsp_control_req()
616 dsp_rx_off(dsp); in dsp_control_req()
630 struct dsp *dsp = container_of(ch, struct dsp, ch); in get_features() local
647 dsp->features_rx_off = 1; in get_features()
649 dsp->features_fill_empty = 1; in get_features()
654 *((u_long *)&cq.p1) = (u_long)&dsp->features; in get_features()
662 __func__, dsp->name); in get_features()
668 struct dsp *dsp = container_of(ch, struct dsp, ch); in dsp_function() local
678 dsp->data_pending = 0; in dsp_function()
680 if (dsp->hdlc) { in dsp_function()
682 if (dsp->b_active) in dsp_function()
683 schedule_work(&dsp->workq); in dsp_function()
693 if (dsp->rx_is_off) { in dsp_function()
697 __func__, dsp->name); in dsp_function()
699 if (dsp->hdlc) { in dsp_function()
702 dsp_cmx_hdlc(dsp, skb); in dsp_function()
704 if (dsp->rx_disabled) { in dsp_function()
709 if (dsp->up) in dsp_function()
710 return dsp->up->send(dsp->up, skb); in dsp_function()
717 if (dsp->bf_enable) in dsp_function()
718 dsp_bf_decrypt(dsp, skb->data, skb->len); in dsp_function()
720 if (dsp->pipeline.inuse) in dsp_function()
721 dsp_pipeline_process_rx(&dsp->pipeline, skb->data, in dsp_function()
724 if (dsp->rx_volume) in dsp_function()
725 dsp_change_volume(skb, dsp->rx_volume); in dsp_function()
727 if (dsp->dtmf.software) { in dsp_function()
728 digits = dsp_dtmf_goertzel_decode(dsp, skb->data, in dsp_function()
732 if (dsp->conf && dsp->conf->software) { in dsp_function()
734 dsp_cmx_receive(dsp, skb); in dsp_function()
747 __func__, *digits, dsp->name); in dsp_function()
753 if (dsp->up) { in dsp_function()
754 if (dsp->up->send( in dsp_function()
755 dsp->up, nskb)) in dsp_function()
763 if (dsp->rx_disabled) { in dsp_function()
768 if (dsp->up) in dsp_function()
769 return dsp->up->send(dsp->up, skb); in dsp_function()
775 hh->id, skb->len, dsp->name); in dsp_function()
778 if (!dsp->dtmf.hardware) { in dsp_function()
785 digits = dsp_dtmf_goertzel_decode(dsp, skb->data, in dsp_function()
793 __func__, *digits, dsp->name); in dsp_function()
799 if (dsp->up) { in dsp_function()
800 if (dsp->up->send( in dsp_function()
801 dsp->up, nskb)) in dsp_function()
815 dsp->tx_volume = *((int *)skb->data); in dsp_function()
818 "%d\n", __func__, dsp->tx_volume); in dsp_function()
819 dsp_cmx_hardware(dsp->conf, dsp); in dsp_function()
820 dsp_dtmf_hardware(dsp); in dsp_function()
821 dsp_rx_off(dsp); in dsp_function()
827 "%s\n", __func__, hh->id, dsp->name); in dsp_function()
835 __func__, dsp->name); in dsp_function()
838 dsp->b_active = 1; in dsp_function()
839 dsp->data_pending = 0; in dsp_function()
840 dsp->rx_init = 1; in dsp_function()
842 dsp->rx_W = 0; in dsp_function()
843 dsp->rx_R = 0; in dsp_function()
844 memset(dsp->rx_buff, 0, sizeof(dsp->rx_buff)); in dsp_function()
845 dsp_cmx_hardware(dsp->conf, dsp); in dsp_function()
846 dsp_dtmf_hardware(dsp); in dsp_function()
847 dsp_rx_off(dsp); in dsp_function()
852 dsp->name); in dsp_function()
855 if (dsp->up) in dsp_function()
856 return dsp->up->send(dsp->up, skb); in dsp_function()
862 __func__, dsp->name); in dsp_function()
865 dsp->b_active = 0; in dsp_function()
866 dsp->data_pending = 0; in dsp_function()
867 dsp_cmx_hardware(dsp->conf, dsp); in dsp_function()
868 dsp_rx_off(dsp); in dsp_function()
871 if (dsp->up) in dsp_function()
872 return dsp->up->send(dsp->up, skb); in dsp_function()
881 if (dsp->hdlc) { in dsp_function()
883 if (!dsp->b_active) { in dsp_function()
889 skb_queue_tail(&dsp->sendq, skb); in dsp_function()
890 schedule_work(&dsp->workq); in dsp_function()
895 if (!dsp->tone.tone) { in dsp_function()
897 dsp_cmx_transmit(dsp, skb); in dsp_function()
903 ret = dsp_control_req(dsp, hh, skb); in dsp_function()
910 __func__, dsp->name); in dsp_function()
911 if (dsp->dtmf.hardware || dsp->dtmf.software) in dsp_function()
912 dsp_dtmf_goertzel_init(dsp); in dsp_function()
915 if (dsp->features_fill_empty) in dsp_function()
916 dsp_fill_empty(dsp); in dsp_function()
926 __func__, dsp->name); in dsp_function()
928 dsp->tone.tone = 0; in dsp_function()
929 dsp->tone.hardware = 0; in dsp_function()
930 dsp->tone.software = 0; in dsp_function()
931 if (timer_pending(&dsp->tone.tl)) in dsp_function()
932 del_timer(&dsp->tone.tl); in dsp_function()
933 if (dsp->conf) in dsp_function()
934 dsp_cmx_conf(dsp, 0); /* dsp_cmx_hardware will also be in dsp_function()
936 skb_queue_purge(&dsp->sendq); in dsp_function()
945 __func__, hh->prim, dsp->name); in dsp_function()
956 struct dsp *dsp = container_of(ch, struct dsp, ch); in dsp_ctrl() local
967 if (dsp->ch.peer) in dsp_ctrl()
968 dsp->ch.peer->ctrl(dsp->ch.peer, CLOSE_CHANNEL, NULL); in dsp_ctrl()
974 dsp->b_active = 0; in dsp_ctrl()
977 cancel_work_sync(&dsp->workq); in dsp_ctrl()
979 if (timer_pending(&dsp->tone.tl)) in dsp_ctrl()
980 del_timer(&dsp->tone.tl); in dsp_ctrl()
981 skb_queue_purge(&dsp->sendq); in dsp_ctrl()
984 __func__, dsp->name); in dsp_ctrl()
985 dsp->b_active = 0; in dsp_ctrl()
986 dsp_cmx_conf(dsp, 0); /* dsp_cmx_hardware will also be called in dsp_ctrl()
988 dsp_pipeline_destroy(&dsp->pipeline); in dsp_ctrl()
992 __func__, dsp->name); in dsp_ctrl()
993 list_del(&dsp->list); in dsp_ctrl()
999 vfree(dsp); in dsp_ctrl()
1009 struct dsp *dsp = container_of(work, struct dsp, workq); in dsp_send_bh() local
1013 if (dsp->hdlc && dsp->data_pending) in dsp_send_bh()
1017 while ((skb = skb_dequeue(&dsp->sendq))) { in dsp_send_bh()
1019 if (dsp->data_pending) { in dsp_send_bh()
1022 "no bug!\n", __func__, dsp->name); in dsp_send_bh()
1030 if (dsp->up) { in dsp_send_bh()
1031 if (dsp->up->send(dsp->up, skb)) in dsp_send_bh()
1037 if (dsp->ch.peer) { in dsp_send_bh()
1038 dsp->data_pending = 1; in dsp_send_bh()
1039 if (dsp->ch.recv(dsp->ch.peer, skb)) { in dsp_send_bh()
1041 dsp->data_pending = 0; in dsp_send_bh()
1052 struct dsp *ndsp; in dspcreate()
1058 ndsp = vzalloc(sizeof(struct dsp)); in dspcreate()