Lines Matching refs:plci

74 static void group_optimization(DIVA_CAPI_ADAPTER *a, PLCI *plci);
75 static void set_group_ind_mask(PLCI *plci);
76 static void clear_group_ind_mask_bit(PLCI *plci, word b);
77 static byte test_group_ind_mask_bit(PLCI *plci, word b);
101 static void SendSSExtInd(APPL *, PLCI *plci, dword Id, byte **parms);
103 static void VSwitchReqInd(PLCI *plci, dword Id, byte **parms);
134 static void add_s(PLCI *plci, byte code, API_PARSE *p);
135 static void add_ss(PLCI *plci, byte code, API_PARSE *p);
136 static void add_ie(PLCI *plci, byte code, byte *p, word p_length);
141 static word add_modem_b23(PLCI *plci, API_PARSE *bp_parms);
158 static void channel_flow_control_remove(PLCI *plci);
159 static void channel_x_off(PLCI *plci, byte ch, byte flag);
160 static void channel_x_on(PLCI *plci, byte ch);
161 static void channel_request_xon(PLCI *plci, byte ch);
162 static void channel_xmit_xon(PLCI *plci);
163 static int channel_can_xon(PLCI *plci, byte ch);
164 static void channel_xmit_extended_xon(PLCI *plci);
166 static byte SendMultiIE(PLCI *plci, dword Id, byte **parms, byte ie_type, dword info_mask, byte set…
170 static void VoiceChannelOff(PLCI *plci);
171 static void adv_voice_write_coefs(PLCI *plci, word write_command);
172 static void adv_voice_clear_config(PLCI *plci);
174 static word get_b1_facilities(PLCI *plci, byte b1_resource);
175 static byte add_b1_facilities(PLCI *plci, byte b1_resource, word b1_facilities);
176 static void adjust_b1_facilities(PLCI *plci, byte new_b1_resource, word new_b1_facilities);
177 static word adjust_b_process(dword Id, PLCI *plci, byte Rc);
178 static void adjust_b1_resource(dword Id, PLCI *plci, API_SAVE *bp_msg, word b1_facilities, word int…
179 static void adjust_b_restore(dword Id, PLCI *plci, byte Rc);
180 static void reset_b3_command(dword Id, PLCI *plci, byte Rc);
181 static void select_b_command(dword Id, PLCI *plci, byte Rc);
182 static void fax_connect_ack_command(dword Id, PLCI *plci, byte Rc);
183 static void fax_edata_ack_command(dword Id, PLCI *plci, byte Rc);
184 static void fax_connect_info_command(dword Id, PLCI *plci, byte Rc);
185 static void fax_adjust_b23_command(dword Id, PLCI *plci, byte Rc);
186 static void fax_disconnect_command(dword Id, PLCI *plci, byte Rc);
187 static void hold_save_command(dword Id, PLCI *plci, byte Rc);
188 static void retrieve_restore_command(dword Id, PLCI *plci, byte Rc);
189 static void init_b1_config(PLCI *plci);
190 static void clear_b1_config(PLCI *plci);
192 static void dtmf_command(dword Id, PLCI *plci, byte Rc);
193 static byte dtmf_request(dword Id, word Number, DIVA_CAPI_ADAPTER *a, PLCI *plci, APPL *appl, API_P…
194 static void dtmf_confirmation(dword Id, PLCI *plci);
195 static void dtmf_indication(dword Id, PLCI *plci, byte *msg, word length);
196 static void dtmf_parameter_write(PLCI *plci);
199 static void mixer_set_bchannel_id_esc(PLCI *plci, byte bchannel_id);
200 static void mixer_set_bchannel_id(PLCI *plci, byte *chi);
201 static void mixer_clear_config(PLCI *plci);
202 static void mixer_notify_update(PLCI *plci, byte others);
203 static void mixer_command(dword Id, PLCI *plci, byte Rc);
204 static byte mixer_request(dword Id, word Number, DIVA_CAPI_ADAPTER *a, PLCI *plci, APPL *appl, API_…
205 static void mixer_indication_coefs_set(dword Id, PLCI *plci);
206 static void mixer_indication_xconnect_from(dword Id, PLCI *plci, byte *msg, word length);
207 static void mixer_indication_xconnect_to(dword Id, PLCI *plci, byte *msg, word length);
208 static void mixer_remove(PLCI *plci);
211 static void ec_command(dword Id, PLCI *plci, byte Rc);
212 static byte ec_request(dword Id, word Number, DIVA_CAPI_ADAPTER *a, PLCI *plci, APPL *appl, API_PAR…
213 static void ec_indication(dword Id, PLCI *plci, byte *msg, word length);
216 static void rtp_connect_b3_req_command(dword Id, PLCI *plci, byte Rc);
217 static void rtp_connect_b3_res_command(dword Id, PLCI *plci, byte Rc);
220 static int diva_get_dma_descriptor(PLCI *plci, dword *dma_magic);
221 static void diva_free_dma_descriptor(PLCI *plci, int nr);
393 PLCI *plci; in api_put() local
415 plci = NULL; in api_put()
416 if ((msg->header.plci != 0) && (msg->header.plci <= a->max_plci) && !a->adapter_disabled) in api_put()
418 dbug(1, dprintf("plci=%x", msg->header.plci)); in api_put()
419 plci = &a->plci[msg->header.plci - 1]; in api_put()
421 if (plci->Id in api_put()
422 && (plci->appl in api_put()
423 || (plci->State == INC_CON_PENDING) in api_put()
424 || (plci->State == INC_CON_ALERT) in api_put()
428 || ((ncci < MAX_NCCI + 1) && (a->ncci_plci[ncci] == plci->Id)))) in api_put()
430 i = plci->msg_in_read_pos; in api_put()
431 j = plci->msg_in_write_pos; in api_put()
442 n = (((CAPI_MSG *)(plci->msg_in_queue))->header.length + MSG_IN_OVERHEAD + 3) & 0xfffc; in api_put()
453 msg->header.length, plci->msg_in_write_pos, in api_put()
454 plci->msg_in_read_pos, plci->msg_in_wrap_pos, i)); in api_put()
459 if ((((byte *) msg) < ((byte *)(plci->msg_in_queue))) in api_put()
460 || (((byte *) msg) >= ((byte *)(plci->msg_in_queue)) + sizeof(plci->msg_in_queue))) in api_put()
462 if (plci->msg_in_write_pos != plci->msg_in_read_pos) in api_put()
475 k = plci->msg_in_read_pos; in api_put()
476 while (k != plci->msg_in_write_pos) in api_put()
478 if (k == plci->msg_in_wrap_pos) in api_put()
480 if ((((CAPI_MSG *)(&((byte *)(plci->msg_in_queue))[k]))->header.command == _DATA_B3_R) in api_put()
481 && (((CAPI_MSG *)(&((byte *)(plci->msg_in_queue))[k]))->header.ncci == ncci)) in api_put()
484 if (((CAPI_MSG *)(&((byte *)(plci->msg_in_queue))[k]))->info.data_b3_req.Flags & 0x0004) in api_put()
488 k += (((CAPI_MSG *)(&((byte *)(plci->msg_in_queue))[k]))->header.length + in api_put()
499 if (plci->req_in || plci->internal_command) in api_put()
501 if ((((byte *) msg) >= ((byte *)(plci->msg_in_queue))) in api_put()
502 && (((byte *) msg) < ((byte *)(plci->msg_in_queue)) + sizeof(plci->msg_in_queue))) in api_put()
513 if (plci->req_in || plci->internal_command) in api_put()
517 plci->command = msg->header.command; in api_put()
518 plci->number = msg->header.number; in api_put()
524 msg->header.command, plci->req_in, plci->internal_command, in api_put()
525 msg->header.length, plci->msg_in_write_pos, in api_put()
526 plci->msg_in_read_pos, plci->msg_in_wrap_pos, i)); in api_put()
528 plci->msg_in_wrap_pos = plci->msg_in_write_pos; in api_put()
529 m = (CAPI_MSG *)(&((byte *)(plci->msg_in_queue))[j]); in api_put()
531 ((byte *)(plci->msg_in_queue))[j++] = ((byte *) msg)[i]; in api_put()
541 *((APPL **)(&((byte *)(plci->msg_in_queue))[j])) = appl; in api_put()
542 plci->msg_in_write_pos = j + MSG_IN_OVERHEAD; in api_put()
548 plci = NULL; in api_put()
568 if (plci) plci->command = 0; in api_put()
576 plci, in api_put()
580 channel_xmit_extended_xon(plci); in api_put()
582 if (c == 1) send_req(plci); in api_put()
583 if (c == 2 && plci) plci->req_in = plci->req_in_start = plci->req_out = 0; in api_put()
584 if (plci && !plci->req_in) plci->command = 0; in api_put()
691 if (adapter[i].plci[j].Sig.Id) plci_remove(&adapter[i].plci[j]); in api_remove_start()
701 if (adapter[i].plci[j].Sig.Id) return 1; in api_remove_start()
715 static void init_internal_command_queue(PLCI *plci) in init_internal_command_queue() argument
722 plci->internal_command = 0; in init_internal_command_queue()
724 plci->internal_command_queue[i] = NULL; in init_internal_command_queue()
728 static void start_internal_command(dword Id, PLCI *plci, t_std_internal_command command_function) in start_internal_command() argument
735 if (plci->internal_command == 0) in start_internal_command()
737 plci->internal_command_queue[0] = command_function; in start_internal_command()
738 (*command_function)(Id, plci, OK); in start_internal_command()
743 while (plci->internal_command_queue[i] != NULL) in start_internal_command()
745 plci->internal_command_queue[i] = command_function; in start_internal_command()
750 static void next_internal_command(dword Id, PLCI *plci) in next_internal_command() argument
757 plci->internal_command = 0; in next_internal_command()
758 plci->internal_command_queue[0] = NULL; in next_internal_command()
759 while (plci->internal_command_queue[1] != NULL) in next_internal_command()
762 plci->internal_command_queue[i] = plci->internal_command_queue[i + 1]; in next_internal_command()
763 plci->internal_command_queue[MAX_INTERNAL_COMMAND_LEVELS - 1] = NULL; in next_internal_command()
764 (*(plci->internal_command_queue[0]))(Id, plci, OK); in next_internal_command()
765 if (plci->internal_command != 0) in next_internal_command()
767 plci->internal_command_queue[0] = NULL; in next_internal_command()
778 static word get_ncci(PLCI *plci, byte ch, word force_ncci) in get_ncci() argument
783 a = plci->adapter; in get_ncci()
835 a->ncci_plci[ncci] = plci->Id; in get_ncci()
837 if (!plci->ncci_ring_list) in get_ncci()
838 plci->ncci_ring_list = ncci; in get_ncci()
840 a->ncci_next[ncci] = a->ncci_next[plci->ncci_ring_list]; in get_ncci()
841 a->ncci_next[plci->ncci_ring_list] = (byte) ncci; in get_ncci()
852 static void ncci_free_receive_buffers(PLCI *plci, word ncci) in ncci_free_receive_buffers() argument
859 a = plci->adapter; in ncci_free_receive_buffers()
860 Id = (((dword) ncci) << 16) | (((word)(plci->Id)) << 8) | a->Id; in ncci_free_receive_buffers()
863 if (a->ncci_plci[ncci] == plci->Id) in ncci_free_receive_buffers()
865 if (!plci->appl) in ncci_free_receive_buffers()
873 appl = plci->appl; in ncci_free_receive_buffers()
878 && (((byte)(appl->DataFlags[i] >> 8)) == plci->Id)) in ncci_free_receive_buffers()
890 if (a->ncci_plci[ncci] == plci->Id) in ncci_free_receive_buffers()
892 if (!plci->appl) in ncci_free_receive_buffers()
900 appl = plci->appl; in ncci_free_receive_buffers()
905 && (((byte)(appl->DataFlags[i] >> 8)) == plci->Id)) in ncci_free_receive_buffers()
917 static void cleanup_ncci_data(PLCI *plci, word ncci) in cleanup_ncci_data() argument
921 if (ncci && (plci->adapter->ncci_plci[ncci] == plci->Id)) in cleanup_ncci_data()
923 ncci_ptr = &(plci->adapter->ncci[ncci]); in cleanup_ncci_data()
924 if (plci->appl) in cleanup_ncci_data()
928 if (!plci->data_sent || (ncci_ptr->DBuffer[ncci_ptr->data_out].P != plci->data_sent_ptr)) in cleanup_ncci_data()
929 TransmitBufferFree(plci->appl, ncci_ptr->DBuffer[ncci_ptr->data_out].P); in cleanup_ncci_data()
944 static void ncci_remove(PLCI *plci, word ncci, byte preserve_ncci) in ncci_remove() argument
950 a = plci->adapter; in ncci_remove()
951 Id = (((dword) ncci) << 16) | (((word)(plci->Id)) << 8) | a->Id; in ncci_remove()
953 ncci_free_receive_buffers(plci, ncci); in ncci_remove()
956 if (a->ncci_plci[ncci] != plci->Id) in ncci_remove()
964 cleanup_ncci_data(plci, ncci); in ncci_remove()
973 i = plci->ncci_ring_list; in ncci_remove()
974 while ((i != 0) && (a->ncci_next[i] != plci->ncci_ring_list) && (a->ncci_next[i] != ncci)) in ncci_remove()
979 plci->ncci_ring_list = 0; in ncci_remove()
980 else if (plci->ncci_ring_list == ncci) in ncci_remove()
981 plci->ncci_ring_list = i; in ncci_remove()
992 if (a->ncci_plci[ncci] == plci->Id) in ncci_remove()
994 cleanup_ncci_data(plci, ncci); in ncci_remove()
1008 plci->ncci_ring_list = 0; in ncci_remove()
1017 static void plci_free_msg_in_queue(PLCI *plci) in plci_free_msg_in_queue() argument
1021 if (plci->appl) in plci_free_msg_in_queue()
1023 i = plci->msg_in_read_pos; in plci_free_msg_in_queue()
1024 while (i != plci->msg_in_write_pos) in plci_free_msg_in_queue()
1026 if (i == plci->msg_in_wrap_pos) in plci_free_msg_in_queue()
1028 if (((CAPI_MSG *)(&((byte *)(plci->msg_in_queue))[i]))->header.command == _DATA_B3_R) in plci_free_msg_in_queue()
1031 TransmitBufferFree(plci->appl, in plci_free_msg_in_queue()
1032 (byte *)(long)(((CAPI_MSG *)(&((byte *)(plci->msg_in_queue))[i]))->info.data_b3_req.Data)); in plci_free_msg_in_queue()
1036 i += (((CAPI_MSG *)(&((byte *)(plci->msg_in_queue))[i]))->header.length + in plci_free_msg_in_queue()
1041 plci->msg_in_write_pos = MSG_IN_QUEUE_SIZE; in plci_free_msg_in_queue()
1042 plci->msg_in_read_pos = MSG_IN_QUEUE_SIZE; in plci_free_msg_in_queue()
1043 plci->msg_in_wrap_pos = MSG_IN_QUEUE_SIZE; in plci_free_msg_in_queue()
1047 static void plci_remove(PLCI *plci) in plci_remove() argument
1050 if (!plci) { in plci_remove()
1054 init_internal_command_queue(plci); in plci_remove()
1055 dbug(1, dprintf("plci_remove(%x,tel=%x)", plci->Id, plci->tel)); in plci_remove()
1056 if (plci_remove_check(plci)) in plci_remove()
1060 if (plci->Sig.Id == 0xff) in plci_remove()
1062 dbug(1, dprintf("D-channel X.25 plci->NL.Id:%0x", plci->NL.Id)); in plci_remove()
1063 if (plci->NL.Id && !plci->nl_remove_id) in plci_remove()
1065 nl_req_ncci(plci, REMOVE, 0); in plci_remove()
1066 send_req(plci); in plci_remove()
1071 if (!plci->sig_remove_id in plci_remove()
1072 && (plci->Sig.Id in plci_remove()
1073 || (plci->req_in != plci->req_out) in plci_remove()
1074 || (plci->nl_req || plci->sig_req))) in plci_remove()
1076 sig_req(plci, HANGUP, 0); in plci_remove()
1077 send_req(plci); in plci_remove()
1080 ncci_remove(plci, 0, false); in plci_remove()
1081 plci_free_msg_in_queue(plci); in plci_remove()
1083 plci->channels = 0; in plci_remove()
1084 plci->appl = NULL; in plci_remove()
1085 if ((plci->State == INC_CON_PENDING) || (plci->State == INC_CON_ALERT)) in plci_remove()
1086 plci->State = OUTG_DIS_PENDING; in plci_remove()
1093 static void set_group_ind_mask(PLCI *plci) in set_group_ind_mask() argument
1098 plci->group_optimization_mask_table[i] = 0xffffffffL; in set_group_ind_mask()
1101 static void clear_group_ind_mask_bit(PLCI *plci, word b) in clear_group_ind_mask_bit() argument
1103 plci->group_optimization_mask_table[b >> 5] &= ~(1L << (b & 0x1f)); in clear_group_ind_mask_bit()
1106 static byte test_group_ind_mask_bit(PLCI *plci, word b) in test_group_ind_mask_bit() argument
1108 return ((plci->group_optimization_mask_table[b >> 5] & (1L << (b & 0x1f))) != 0); in test_group_ind_mask_bit()
1115 static void clear_c_ind_mask(PLCI *plci) in clear_c_ind_mask() argument
1120 plci->c_ind_mask_table[i] = 0; in clear_c_ind_mask()
1123 static byte c_ind_mask_empty(PLCI *plci) in c_ind_mask_empty() argument
1128 while ((i < C_IND_MASK_DWORDS) && (plci->c_ind_mask_table[i] == 0)) in c_ind_mask_empty()
1133 static void set_c_ind_mask_bit(PLCI *plci, word b) in set_c_ind_mask_bit() argument
1135 plci->c_ind_mask_table[b >> 5] |= (1L << (b & 0x1f)); in set_c_ind_mask_bit()
1138 static void clear_c_ind_mask_bit(PLCI *plci, word b) in clear_c_ind_mask_bit() argument
1140 plci->c_ind_mask_table[b >> 5] &= ~(1L << (b & 0x1f)); in clear_c_ind_mask_bit()
1143 static byte test_c_ind_mask_bit(PLCI *plci, word b) in test_c_ind_mask_bit() argument
1145 return ((plci->c_ind_mask_table[b >> 5] & (1L << (b & 0x1f))) != 0); in test_c_ind_mask_bit()
1148 static void dump_c_ind_mask(PLCI *plci) in dump_c_ind_mask() argument
1165 d = plci->c_ind_mask_table[i + j]; in dump_c_ind_mask()
1196 PLCI *plci, APPL *appl, API_PARSE *parms) in connect_req() argument
1232 plci = &a->plci[i - 1]; in connect_req()
1233 plci->appl = appl; in connect_req()
1234 plci->call_dir = CALL_DIR_OUT | CALL_DIR_ORIGINATE; in connect_req()
1238 if (AdvCodecSupport(a, plci, appl, 0)) in connect_req()
1240 plci->Id = 0; in connect_req()
1314 plci->b_channel = (byte)channel; /* not correct for ETSI ch 17..31 */ in connect_req()
1315 add_p(plci, LLI, lli); in connect_req()
1316 add_p(plci, ESC, esc_chi); in connect_req()
1317 plci->State = LOCAL_CONNECT; in connect_req()
1318 if (!dir) plci->call_dir |= CALL_DIR_FORCE_OUTG_NL; /* dir 0=DTE, 1=DCE */ in connect_req()
1327 plci->command = _CONNECT_R; in connect_req()
1328 plci->number = Number; in connect_req()
1335 if (noCh) Info = add_b1(plci, &parms[5], 2, 0); /* no resource */ in connect_req()
1336 else Info = add_b1(plci, &parms[5], ch, 0); in connect_req()
1337 add_s(plci, OAD, &parms[2]); in connect_req()
1338 add_s(plci, OSA, &parms[4]); in connect_req()
1339 add_s(plci, BC, &parms[6]); in connect_req()
1340 add_s(plci, LLC, &parms[7]); in connect_req()
1341 add_s(plci, HLC, &parms[8]); in connect_req()
1345 add_p(plci, LLI, "\x01\x01"); in connect_req()
1348 add_p(plci, BC, cip_bc[GET_WORD(parms[0].info)][a->u_law]); in connect_req()
1349 add_p(plci, HLC, cip_hlc[GET_WORD(parms[0].info)]); in connect_req()
1351 add_p(plci, UID, "\x06\x43\x61\x70\x69\x32\x30"); in connect_req()
1352 sig_req(plci, ASSIGN, DSIG_ID); in connect_req()
1357 plci->Sig.Id = 0xff; in connect_req()
1362 Info = add_b23(plci, &parms[5]); in connect_req()
1364 if (!(plci->tel && !plci->adv_nl))nl_req_ncci(plci, ASSIGN, 0); in connect_req()
1372 if (plci->spoofed_msg == SPOOFING_REQUIRED) in connect_req()
1374 api_save_msg(parms, "wsssssssss", &plci->saved_msg); in connect_req()
1375 plci->spoofed_msg = CALL_REQ; in connect_req()
1376 plci->internal_command = BLOCK_PLCI; in connect_req()
1377 plci->command = 0; in connect_req()
1379 send_req(plci); in connect_req()
1382 if (ch == 4)add_p(plci, CHI, p_chi); in connect_req()
1383 add_s(plci, CPN, &parms[1]); in connect_req()
1384 add_s(plci, DSA, &parms[3]); in connect_req()
1385 if (noCh) add_p(plci, ESC, "\x02\x18\xfd"); /* D-channel, no B-L3 */ in connect_req()
1386 add_ai(plci, &parms[9]); in connect_req()
1387 if (!dir)sig_req(plci, CALL_REQ, 0); in connect_req()
1390 plci->command = PERM_LIST_REQ; in connect_req()
1391 plci->appl = appl; in connect_req()
1392 sig_req(plci, LISTEN_REQ, 0); in connect_req()
1393 send_req(plci); in connect_req()
1397 send_req(plci); in connect_req()
1400 plci->Id = 0; in connect_req()
1412 PLCI *plci, APPL *appl, API_PARSE *parms) in connect_res() argument
1422 if (!plci) { in connect_res()
1427 dbug(1, dprintf("connect_res(State=0x%x)", plci->State)); in connect_res()
1446 if (plci->State == INC_CON_CONNECTED_ALERT) in connect_res()
1452 add_p(plci, LLI, "\x01\x01"); in connect_res()
1454 add_s(plci, CONN_NR, &parms[2]); in connect_res()
1455 add_s(plci, LLC, &parms[4]); in connect_res()
1456 add_ai(plci, &parms[5]); in connect_res()
1457 plci->State = INC_CON_ACCEPT; in connect_res()
1458 sig_req(plci, CALL_RES, 0); in connect_res()
1461 else if (plci->State == INC_CON_PENDING || plci->State == INC_CON_ALERT) { in connect_res()
1462 clear_c_ind_mask_bit(plci, (word)(appl->Id - 1)); in connect_res()
1463 dump_c_ind_mask(plci); in connect_res()
1468 if (c_ind_mask_empty(plci)) in connect_res()
1473 add_p(plci, ESC, esc_t); in connect_res()
1474 add_ai(plci, &parms[5]); in connect_res()
1475 sig_req(plci, REJECT, 0); in connect_res()
1479 add_ai(plci, &parms[5]); in connect_res()
1480 sig_req(plci, HANGUP, 0); in connect_res()
1485 add_p(plci, ESC, esc_t); in connect_res()
1486 add_ai(plci, &parms[5]); in connect_res()
1487 sig_req(plci, REJECT, 0); in connect_res()
1489 plci->appl = appl; in connect_res()
1497 plci->appl = appl; in connect_res()
1499 if (AdvCodecSupport(a, plci, appl, 0)) { in connect_res()
1501 sig_req(plci, HANGUP, 0); in connect_res()
1504 if (plci->tel == ADV_VOICE && a->AdvCodecPLCI) in connect_res()
1506 Info = add_b23(plci, &parms[1]); in connect_res()
1510 sig_req(plci, HANGUP, 0); in connect_res()
1513 if (plci->adv_nl) in connect_res()
1515 nl_req_ncci(plci, ASSIGN, 0); in connect_res()
1521 plci->tel = 0; in connect_res()
1524 Info = add_b23(plci, &parms[1]); in connect_res()
1528 sig_req(plci, HANGUP, 0); in connect_res()
1532 nl_req_ncci(plci, ASSIGN, 0); in connect_res()
1535 if (plci->spoofed_msg == SPOOFING_REQUIRED) in connect_res()
1537 api_save_msg(parms, "wsssss", &plci->saved_msg); in connect_res()
1538 plci->spoofed_msg = CALL_RES; in connect_res()
1539 plci->internal_command = BLOCK_PLCI; in connect_res()
1540 plci->command = 0; in connect_res()
1545 add_b1(plci, &parms[1], ch, plci->B1_facilities); in connect_res()
1549 add_p(plci, LLI, "\x01\x01"); in connect_res()
1551 add_s(plci, CONN_NR, &parms[2]); in connect_res()
1552 add_s(plci, LLC, &parms[4]); in connect_res()
1553 add_ai(plci, &parms[5]); in connect_res()
1554 plci->State = INC_CON_ACCEPT; in connect_res()
1555 sig_req(plci, CALL_RES, 0); in connect_res()
1559 if (test_c_ind_mask_bit(plci, i)) { in connect_res()
1569 PLCI *plci, APPL *appl, API_PARSE *msg) in connect_a_res() argument
1576 PLCI *plci, APPL *appl, API_PARSE *msg) in disconnect_req() argument
1585 if (plci) in disconnect_req()
1587 if (plci->State == INC_CON_PENDING || plci->State == INC_CON_ALERT) in disconnect_req()
1589 clear_c_ind_mask_bit(plci, (word)(appl->Id - 1)); in disconnect_req()
1590 plci->appl = appl; in disconnect_req()
1593 if (test_c_ind_mask_bit(plci, i)) in disconnect_req()
1596 plci->State = OUTG_DIS_PENDING; in disconnect_req()
1598 if (plci->Sig.Id && plci->appl) in disconnect_req()
1601 if (plci->Sig.Id != 0xff) in disconnect_req()
1603 if (plci->State != INC_DIS_PENDING) in disconnect_req()
1605 add_ai(plci, &msg[0]); in disconnect_req()
1606 sig_req(plci, HANGUP, 0); in disconnect_req()
1607 plci->State = OUTG_DIS_PENDING; in disconnect_req()
1613 if (plci->NL.Id && !plci->nl_remove_id) in disconnect_req()
1615 mixer_remove(plci); in disconnect_req()
1616 nl_req_ncci(plci, REMOVE, 0); in disconnect_req()
1619 plci->State = INC_DIS_PENDING; in disconnect_req()
1632 PLCI *plci, APPL *appl, API_PARSE *msg) in disconnect_res() argument
1635 if (plci) in disconnect_res()
1639 clear_c_ind_mask_bit(plci, (word)(appl->Id - 1)); in disconnect_res()
1640 ncci_free_receive_buffers(plci, 0); in disconnect_res()
1641 if (plci_remove_check(plci)) in disconnect_res()
1645 if (plci->State == INC_DIS_PENDING in disconnect_res()
1646 || plci->State == SUSPENDING) { in disconnect_res()
1647 if (c_ind_mask_empty(plci)) { in disconnect_res()
1648 if (plci->State != SUSPENDING) plci->State = IDLE; in disconnect_res()
1649 dbug(1, dprintf("chs=%d", plci->channels)); in disconnect_res()
1650 if (!plci->channels) { in disconnect_res()
1651 plci_remove(plci); in disconnect_res()
1660 PLCI *plci, APPL *appl, API_PARSE *parms) in listen_req() argument
1710 PLCI *plci, APPL *appl, API_PARSE *msg) in info_req() argument
1733 if (!Info && plci) in info_req()
1735 rc_plci = plci; in info_req()
1736 if (!ai_parms[3].length && plci->State && (msg[0].length || ai_parms[1].length)) in info_req()
1740 add_s(plci, CPN, &msg[0]); in info_req()
1741 add_s(plci, KEY, &ai_parms[1]); in info_req()
1742 sig_req(plci, INFO_REQ, 0); in info_req()
1743 send_req(plci); in info_req()
1747 if (plci->State && ai_parms[2].length) in info_req()
1751 add_s(plci, UUI, &ai_parms[2]); in info_req()
1752 sig_req(plci, USER_DATA, 0); in info_req()
1754 else if (plci->State && ai_parms[3].length) in info_req()
1758 add_s(plci, CPN, &msg[0]); in info_req()
1759 add_ai(plci, &msg[1]); in info_req()
1760 sig_req(plci, FACILITY_REQ, 0); in info_req()
1773 rc_plci = &a->plci[i - 1]; in info_req()
1820 PLCI *plci, APPL *appl, API_PARSE *msg) in info_res() argument
1827 PLCI *plci, APPL *appl, API_PARSE *msg) in alert_req() argument
1836 if (plci) { in alert_req()
1838 if (plci->State != INC_CON_ALERT) { in alert_req()
1840 if (plci->State == INC_CON_PENDING) { in alert_req()
1842 plci->State = INC_CON_ALERT; in alert_req()
1843 add_ai(plci, &msg[0]); in alert_req()
1844 sig_req(plci, CALL_ALERT, 0); in alert_req()
1858 PLCI *plci, APPL *appl, API_PARSE *msg) in facility_req() argument
1895 Info = AdvCodecSupport(a, plci, appl, HOOK_SUPPORT); in facility_req()
1912 rplci = &a->plci[i - 1]; in facility_req()
1953 rplci = &a->plci[i - 1]; in facility_req()
1973 if (plci && plci->State && plci->SuppState == IDLE) in facility_req()
1975 plci->SuppState = HOLD_REQUEST; in facility_req()
1976 plci->command = C_HOLD_REQ; in facility_req()
1977 add_s(plci, CAI, &ss_parms[1]); in facility_req()
1978 sig_req(plci, CALL_HOLD, 0); in facility_req()
1979 send_req(plci); in facility_req()
1985 if (plci && plci->State && plci->SuppState == CALL_HELD) in facility_req()
1989 if (AdvCodecSupport(a, plci, appl, 0)) in facility_req()
1995 else plci->tel = 0; in facility_req()
1997 plci->SuppState = RETRIEVE_REQUEST; in facility_req()
1998 plci->command = C_RETRIEVE_REQ; in facility_req()
1999 if (plci->spoofed_msg == SPOOFING_REQUIRED) in facility_req()
2001 plci->spoofed_msg = CALL_RETRIEVE; in facility_req()
2002 plci->internal_command = BLOCK_PLCI; in facility_req()
2003 plci->command = 0; in facility_req()
2009 sig_req(plci, CALL_RETRIEVE, 0); in facility_req()
2010 send_req(plci); in facility_req()
2026 if (plci && plci->State) in facility_req()
2028 add_s(plci, CAI, &ss_parms[2]); in facility_req()
2029 plci->command = SUSPEND_REQ; in facility_req()
2030 sig_req(plci, SUSPEND, 0); in facility_req()
2031 plci->State = SUSPENDING; in facility_req()
2032 send_req(plci); in facility_req()
2043 rplci = &a->plci[i - 1]; in facility_req()
2096 if (plci && plci->State && ((plci->SuppState == IDLE) || (plci->SuppState == CALL_HELD))) in facility_req()
2105 plci->ptyState = (byte)SSreq; in facility_req()
2106 plci->command = 0; in facility_req()
2112 plci->internal_command = CONF_BEGIN_REQ_PEND; in facility_req()
2116 plci->internal_command = CONF_DROP_REQ_PEND; in facility_req()
2120 plci->internal_command = CONF_ISOLATE_REQ_PEND; in facility_req()
2124 plci->internal_command = CONF_REATTACH_REQ_PEND; in facility_req()
2128 add_p(plci, CAI, cai); in facility_req()
2129 sig_req(plci, S_SERVICE, 0); in facility_req()
2130 send_req(plci); in facility_req()
2168 if (!plci) in facility_req()
2184 rplci = plci; in facility_req()
2199 if (relatedadapter->plci[i].Id == (byte)relatedPLCIvalue) in facility_req()
2201 rplci = &relatedadapter->plci[i]; in facility_req()
2209 rplci = plci; in facility_req()
2231 plci->command = 0; in facility_req()
2232 rplci->relatedPTYPLCI = plci; in facility_req()
2233 plci->relatedPTYPLCI = rplci; in facility_req()
2243 plci->vswitchstate = 0; in facility_req()
2244 plci->vsprot = 0; in facility_req()
2245 plci->vsprotdialect = 0; in facility_req()
2259 if (plci != rplci) /* explicit invocation */ in facility_req()
2262 cai[2] = plci->Sig.Id; in facility_req()
2290 if (!plci) in facility_req()
2297 plci->command = 0; in facility_req()
2298 plci->internal_command = CD_REQ_PEND; in facility_req()
2302 add_p(plci, CAI, cai); in facility_req()
2303 add_p(plci, CPN, ss_parms[3].info); in facility_req()
2304 sig_req(plci, S_SERVICE, 0); in facility_req()
2305 send_req(plci); in facility_req()
2319 rplci = &a->plci[i - 1]; in facility_req()
2391 rplci = &a->plci[i - 1]; in facility_req()
2474 if (!plci) in facility_req()
2478 rplci = &a->plci[i - 1]; in facility_req()
2494 rplci = plci; in facility_req()
2526 if (!plci) in facility_req()
2530 rplci = &a->plci[i - 1]; in facility_req()
2546 rplci = plci; in facility_req()
2574 return (dtmf_request(Id, Number, a, plci, appl, msg)); in facility_req()
2579 return (mixer_request(Id, Number, a, plci, appl, msg)); in facility_req()
2585 return (ec_request(Id, Number, a, plci, appl, msg)); in facility_req()
2589 return (ec_request(Id, Number, a, plci, appl, msg)); in facility_req()
2609 PLCI *plci, APPL *appl, API_PARSE *msg) in facility_res() argument
2616 PLCI *plci, APPL *appl, API_PARSE *parms) in connect_b3_req() argument
2631 if (plci) in connect_b3_req()
2633 if ((plci->State == IDLE) || (plci->State == OUTG_DIS_PENDING) in connect_b3_req()
2634 || (plci->State == INC_DIS_PENDING) || (plci->SuppState != IDLE)) in connect_b3_req()
2645 if (!plci->NL.Id in connect_b3_req()
2646 …|| (((plci->B3_prot != B3_T90NL) && (plci->B3_prot != B3_ISO8208) && (plci->B3_prot != B3_X25_DCE)) in connect_b3_req()
2647 && ((plci->channels != 0) in connect_b3_req()
2648 …|| (((plci->B2_prot != B2_SDLC) && (plci->B2_prot != B2_LAPD) && (plci->B2_prot != B2_LAPD_FREE_SA… in connect_b3_req()
2649 && ((plci->call_dir & CALL_DIR_ANSWER) && !(plci->call_dir & CALL_DIR_FORCE_OUTG_NL)))))) in connect_b3_req()
2652 plci->channels, plci->NL.Id, plci->call_dir, plci->SuppState)); in connect_b3_req()
2661 plci->requested_options_conn = 0; in connect_b3_req()
2665 if (plci->B3_prot == 2 || plci->B3_prot == 3) in connect_b3_req()
2674 add_d(plci, 2, pvc); in connect_b3_req()
2680 add_d(plci, (word)(ncpi->length - 3), &ncpi->info[4]); in connect_b3_req()
2684 else if (plci->B3_prot == 5) in connect_b3_req()
2686 if (plci->NL.Id && !plci->nl_remove_id) in connect_b3_req()
2688 fax_control_bits = GET_WORD(&((T30_INFO *)plci->fax_connect_info_buffer)->control_bits_low); in connect_b3_req()
2689 fax_feature_bits = GET_WORD(&((T30_INFO *)plci->fax_connect_info_buffer)->feature_bits_low); in connect_b3_req()
2698 … if ((w & 0x0001) != ((word)(((T30_INFO *)(plci->fax_connect_info_buffer))->resolution & 0x0001))) in connect_b3_req()
2700 ((T30_INFO *)(plci->fax_connect_info_buffer))->resolution = in connect_b3_req()
2701 …(byte)((((T30_INFO *)(plci->fax_connect_info_buffer))->resolution & ~T30_RESOLUTION_R8_0770_OR_200… in connect_b3_req()
2716 if (((byte) w) != ((T30_INFO *)(plci->fax_connect_info_buffer))->data_format) in connect_b3_req()
2718 ((T30_INFO *)(plci->fax_connect_info_buffer))->data_format = (byte) w; in connect_b3_req()
2725 plci->requested_options_conn |= (1L << PRIVATE_FAX_SUB_SEP_PWD); in connect_b3_req()
2730 plci->requested_options_conn |= (1L << PRIVATE_FAX_NONSTANDARD); in connect_b3_req()
2734 …if ((plci->requested_options_conn | plci->requested_options | a->requested_options_table[appl->Id … in connect_b3_req()
2741 …if ((plci->requested_options_conn | plci->requested_options | a->requested_options_table[appl->Id … in connect_b3_req()
2751 ((T30_INFO *)(plci->fax_connect_info_buffer))->station_id_len = (byte) w; in connect_b3_req()
2753 ((T30_INFO *)(plci->fax_connect_info_buffer))->station_id[i] = fax_parms[4].info[1 + i]; in connect_b3_req()
2754 ((T30_INFO *)(plci->fax_connect_info_buffer))->head_line_len = 0; in connect_b3_req()
2759 plci->fax_connect_info_buffer[len++] = (byte) w; in connect_b3_req()
2761 plci->fax_connect_info_buffer[len++] = fax_parms[5].info[1 + i]; in connect_b3_req()
2765 plci->fax_connect_info_buffer[len++] = (byte) w; in connect_b3_req()
2767 plci->fax_connect_info_buffer[len++] = fax_parms[6].info[1 + i]; in connect_b3_req()
2768 …if ((plci->requested_options_conn | plci->requested_options | a->requested_options_table[appl->Id … in connect_b3_req()
2774 plci->fax_connect_info_buffer[len++] = 0; in connect_b3_req()
2779 plci->nsf_control_bits = GET_WORD(&fax_parms[7].info[2]); in connect_b3_req()
2780 plci->fax_connect_info_buffer[len++] = (byte)(fax_parms[7].length); in connect_b3_req()
2782 plci->fax_connect_info_buffer[len++] = fax_parms[7].info[1 + i]; in connect_b3_req()
2794 … if (fax_control_bits != GET_WORD(&((T30_INFO *)plci->fax_connect_info_buffer)->control_bits_low)) in connect_b3_req()
2796 PUT_WORD(&((T30_INFO *)plci->fax_connect_info_buffer)->control_bits_low, fax_control_bits); in connect_b3_req()
2802 plci->fax_connect_info_length = len; in connect_b3_req()
2807 start_internal_command(Id, plci, fax_connect_info_command); in connect_b3_req()
2812 start_internal_command(Id, plci, fax_adjust_b23_command); in connect_b3_req()
2823 else if (plci->B3_prot == B3_RTP) in connect_b3_req()
2825 plci->internal_req_buffer[0] = ncpi->length + 1; in connect_b3_req()
2826 plci->internal_req_buffer[1] = UDATA_REQUEST_RTP_RECONFIGURE; in connect_b3_req()
2828 plci->internal_req_buffer[2 + w] = ncpi->info[1 + w]; in connect_b3_req()
2829 start_internal_command(Id, plci, rtp_connect_b3_req_command); in connect_b3_req()
2835 nl_req_ncci(plci, req, 0); in connect_b3_req()
2851 PLCI *plci, APPL *appl, API_PARSE *parms) in connect_b3_res() argument
2868 if (plci && ncci) { in connect_b3_res()
2873 channel_request_xon(plci, a->ncci_ch[ncci]); in connect_b3_res()
2874 channel_xmit_xon(plci); in connect_b3_res()
2875 cleanup_ncci_data(plci, ncci); in connect_b3_res()
2876 nl_req_ncci(plci, N_DISC, (byte)ncci); in connect_b3_res()
2883 if ((plci->B3_prot == 4) || (plci->B3_prot == 5) || (plci->B3_prot == 7)) in connect_b3_res()
2886 …if ((plci->requested_options_conn | plci->requested_options | a->requested_options_table[plci->app… in connect_b3_res()
2889 if (((plci->B3_prot == 4) || (plci->B3_prot == 5)) in connect_b3_res()
2890 && (plci->nsf_control_bits & T30_NSF_CONTROL_BIT_ENABLE_NSF) in connect_b3_res()
2891 && (plci->nsf_control_bits & T30_NSF_CONTROL_BIT_NEGOTIATE_RESP)) in connect_b3_res()
2894 if (plci->fax_connect_info_length < len) in connect_b3_res()
2896 ((T30_INFO *)(plci->fax_connect_info_buffer))->station_id_len = 0; in connect_b3_res()
2897 ((T30_INFO *)(plci->fax_connect_info_buffer))->head_line_len = 0; in connect_b3_res()
2905 if (plci->fax_connect_info_length <= len) in connect_b3_res()
2906 plci->fax_connect_info_buffer[len] = 0; in connect_b3_res()
2907 len += 1 + plci->fax_connect_info_buffer[len]; in connect_b3_res()
2908 if (plci->fax_connect_info_length <= len) in connect_b3_res()
2909 plci->fax_connect_info_buffer[len] = 0; in connect_b3_res()
2910 len += 1 + plci->fax_connect_info_buffer[len]; in connect_b3_res()
2912 plci->nsf_control_bits = GET_WORD(&fax_parms[7].info[2]); in connect_b3_res()
2913 plci->fax_connect_info_buffer[len++] = (byte)(fax_parms[7].length); in connect_b3_res()
2915 plci->fax_connect_info_buffer[len++] = fax_parms[7].info[1 + i]; in connect_b3_res()
2917 plci->fax_connect_info_length = len; in connect_b3_res()
2918 ((T30_INFO *)(plci->fax_connect_info_buffer))->code = 0; in connect_b3_res()
2919 start_internal_command(Id, plci, fax_connect_ack_command); in connect_b3_res()
2924 nl_req_ncci(plci, req, (byte)ncci); in connect_b3_res()
2925 if ((plci->ncpi_state & NCPI_VALID_CONNECT_B3_ACT) in connect_b3_res()
2926 && !(plci->ncpi_state & NCPI_CONNECT_B3_ACT_SENT)) in connect_b3_res()
2928 if (plci->B3_prot == 4) in connect_b3_res()
2931 sendf(appl, _CONNECT_B3_ACTIVE_I, Id, 0, "S", plci->ncpi_buffer); in connect_b3_res()
2932 plci->ncpi_state |= NCPI_CONNECT_B3_ACT_SENT; in connect_b3_res()
2936 else if (plci->B3_prot == B3_RTP) in connect_b3_res()
2938 plci->internal_req_buffer[0] = ncpi->length + 1; in connect_b3_res()
2939 plci->internal_req_buffer[1] = UDATA_REQUEST_RTP_RECONFIGURE; in connect_b3_res()
2941 plci->internal_req_buffer[2 + w] = ncpi->info[1+w]; in connect_b3_res()
2942 start_internal_command(Id, plci, rtp_connect_b3_res_command); in connect_b3_res()
2950 add_d(plci, (word)(ncpi->length - 3), &ncpi->info[4]); in connect_b3_res()
2952 nl_req_ncci(plci, req, (byte)ncci); in connect_b3_res()
2954 if (plci->adjust_b_restore) in connect_b3_res()
2956 plci->adjust_b_restore = false; in connect_b3_res()
2957 start_internal_command(Id, plci, adjust_b_restore); in connect_b3_res()
2967 PLCI *plci, APPL *appl, API_PARSE *parms) in connect_b3_a_res() argument
2974 if (plci && ncci && (plci->State != IDLE) && (plci->State != INC_DIS_PENDING) in connect_b3_a_res()
2975 && (plci->State != OUTG_DIS_PENDING)) in connect_b3_a_res()
2979 if (plci->State != INC_CON_CONNECTED_ALERT) plci->State = CONNECTED; in connect_b3_a_res()
2980 channel_request_xon(plci, a->ncci_ch[ncci]); in connect_b3_a_res()
2981 channel_xmit_xon(plci); in connect_b3_a_res()
2988 PLCI *plci, APPL *appl, API_PARSE *parms) in disconnect_b3_req() argument
2998 if (plci && ncci) in disconnect_b3_req()
3007 channel_request_xon(plci, a->ncci_ch[ncci]); in disconnect_b3_req()
3008 channel_xmit_xon(plci); in disconnect_b3_req()
3011 && ((plci->B3_prot == B3_TRANSPARENT) in disconnect_b3_req()
3012 || (plci->B3_prot == B3_T30) in disconnect_b3_req()
3013 || (plci->B3_prot == B3_T30_WITH_EXTENSIONS))) in disconnect_b3_req()
3015 plci->send_disc = (byte)ncci; in disconnect_b3_req()
3016 plci->command = 0; in disconnect_b3_req()
3021 cleanup_ncci_data(plci, ncci); in disconnect_b3_req()
3023 if (plci->B3_prot == 2 || plci->B3_prot == 3) in disconnect_b3_req()
3028 add_d(plci, (word)(ncpi->length - 3), (byte *)&(ncpi->info[4])); in disconnect_b3_req()
3031 nl_req_ncci(plci, N_DISC, (byte)ncci); in disconnect_b3_req()
3045 PLCI *plci, APPL *appl, API_PARSE *parms) in disconnect_b3_res() argument
3052 if (plci && ncci) { in disconnect_b3_res()
3053 plci->requested_options_conn = 0; in disconnect_b3_res()
3054 plci->fax_connect_info_length = 0; in disconnect_b3_res()
3055 plci->ncpi_state = 0x00; in disconnect_b3_res()
3056 …if (((plci->B3_prot != B3_T90NL) && (plci->B3_prot != B3_ISO8208) && (plci->B3_prot != B3_X25_DCE)) in disconnect_b3_res()
3057 && ((plci->B2_prot != B2_LAPD) && (plci->B2_prot != B2_LAPD_FREE_SAPI_SEL))) in disconnect_b3_res()
3059 plci->call_dir |= CALL_DIR_FORCE_OUTG_NL; in disconnect_b3_res()
3061 for (i = 0; i < MAX_CHANNELS_PER_PLCI && plci->inc_dis_ncci_table[i] != (byte)ncci; i++); in disconnect_b3_res()
3063 if (plci->channels)plci->channels--; in disconnect_b3_res()
3064 …for (; i < MAX_CHANNELS_PER_PLCI - 1; i++) plci->inc_dis_ncci_table[i] = plci->inc_dis_ncci_table[… in disconnect_b3_res()
3065 plci->inc_dis_ncci_table[MAX_CHANNELS_PER_PLCI - 1] = 0; in disconnect_b3_res()
3067 ncci_free_receive_buffers(plci, ncci); in disconnect_b3_res()
3069 if ((plci->State == IDLE || plci->State == SUSPENDING) && !plci->channels) { in disconnect_b3_res()
3070 if (plci->State == SUSPENDING) { in disconnect_b3_res()
3071 sendf(plci->appl, in disconnect_b3_res()
3076 sendf(plci->appl, _DISCONNECT_I, Id & 0xffffL, 0, "w", 0); in disconnect_b3_res()
3078 plci_remove(plci); in disconnect_b3_res()
3079 plci->State = IDLE; in disconnect_b3_res()
3085 && ((plci->B3_prot == 4) || (plci->B3_prot == 5)) in disconnect_b3_res()
3088 ncci_free_receive_buffers(plci, ncci); in disconnect_b3_res()
3090 nl_req_ncci(plci, N_EDATA, (byte)ncci); in disconnect_b3_res()
3092 plci->adapter->ncci_state[ncci] = IDLE; in disconnect_b3_res()
3093 start_internal_command(Id, plci, fax_disconnect_command); in disconnect_b3_res()
3102 PLCI *plci, APPL *appl, API_PARSE *parms) in data_b3_req() argument
3114 dbug(1, dprintf("ncci=0x%x, plci=0x%x", ncci, plci)); in data_b3_req()
3116 if (plci && ncci) in data_b3_req()
3129 if ((((byte *)(parms[0].info)) >= ((byte *)(plci->msg_in_queue))) in data_b3_req()
3130 && (((byte *)(parms[0].info)) < ((byte *)(plci->msg_in_queue)) + sizeof(plci->msg_in_queue))) in data_b3_req()
3154 send_data(plci); in data_b3_req()
3160 if (plci) in data_b3_req()
3162 if ((((byte *)(parms[0].info)) >= ((byte *)(plci->msg_in_queue))) in data_b3_req()
3163 && (((byte *)(parms[0].info)) < ((byte *)(plci->msg_in_queue)) + sizeof(plci->msg_in_queue))) in data_b3_req()
3180 PLCI *plci, APPL *appl, API_PARSE *parms) in data_b3_res() argument
3189 if (plci && ncci) { in data_b3_res()
3195 (byte)(appl->DataFlags[n] >> 8) == plci->Id) { in data_b3_res()
3199 if (channel_can_xon(plci, a->ncci_ch[ncci])) { in data_b3_res()
3200 channel_request_xon(plci, a->ncci_ch[ncci]); in data_b3_res()
3202 channel_xmit_xon(plci); in data_b3_res()
3205 nl_req_ncci(plci, N_DATA_ACK, (byte)ncci); in data_b3_res()
3214 PLCI *plci, APPL *appl, API_PARSE *parms) in reset_b3_req() argument
3223 if (plci && ncci) in reset_b3_req()
3226 switch (plci->B3_prot) in reset_b3_req()
3232 nl_req_ncci(plci, N_RESET, (byte)ncci); in reset_b3_req()
3233 send_req(plci); in reset_b3_req()
3240 start_internal_command(Id, plci, reset_b3_command); in reset_b3_req()
3256 PLCI *plci, APPL *appl, API_PARSE *parms) in reset_b3_res() argument
3263 if (plci && ncci) { in reset_b3_res()
3264 switch (plci->B3_prot) in reset_b3_res()
3271 nl_req_ncci(plci, N_RESET_ACK, (byte)ncci); in reset_b3_res()
3281 PLCI *plci, APPL *appl, API_PARSE *parms) in connect_b3_t90_a_res() argument
3290 if (plci && ncci) { in connect_b3_t90_a_res()
3304 add_d(plci, (word)(ncpi->length - 3), &ncpi->info[4]); in connect_b3_t90_a_res()
3307 nl_req_ncci(plci, req, (byte)ncci); in connect_b3_t90_a_res()
3316 PLCI *plci, APPL *appl, API_PARSE *msg) in select_b_req() argument
3323 if (!plci || !msg) in select_b_req()
3330 msg->length, plci->Id, plci->tel, plci->NL.Id, plci->appl, plci->SuppState)); in select_b_req()
3331 dbug(1, dprintf("PlciState=0x%x", plci->State)); in select_b_req()
3335 if ((plci->State == IDLE) || (plci->State == OUTG_DIS_PENDING) || (plci->State == INC_DIS_PENDING) in select_b_req()
3336 || (plci->SuppState != IDLE) || plci->channels || plci->nl_remove_id) in select_b_req()
3347 …if ((plci->State == INC_CON_PENDING) || (plci->State == INC_CON_ALERT)) /* send alert tone inband … in select_b_req()
3354 plci->State = INC_CON_CONNECTED_ALERT; in select_b_req()
3355 plci->appl = appl; in select_b_req()
3356 clear_c_ind_mask_bit(plci, (word)(appl->Id - 1)); in select_b_req()
3357 dump_c_ind_mask(plci); in select_b_req()
3360 if (test_c_ind_mask_bit(plci, i)) in select_b_req()
3365 api_save_msg(msg, "s", &plci->saved_msg); in select_b_req()
3366 tel = plci->tel; in select_b_req()
3387 if (AdvCodecSupport(a, plci, appl, 0)) in select_b_req()
3392 else if (plci->spoofed_msg == SPOOFING_REQUIRED) /* wait until codec is active */ in select_b_req()
3394 plci->spoofed_msg = AWAITING_SELECT_B; in select_b_req()
3395 plci->internal_command = BLOCK_PLCI; /* lock other commands */ in select_b_req()
3396 plci->command = 0; in select_b_req()
3409 CodecIdCheck(a, plci); in select_b_req()
3410 plci->tel = 0; in select_b_req()
3411 plci->adv_nl = 0; in select_b_req()
3422 if (plci->call_dir & CALL_DIR_OUT) in select_b_req()
3423 plci->call_dir = CALL_DIR_OUT | CALL_DIR_ORIGINATE; in select_b_req()
3424 else if (plci->call_dir & CALL_DIR_IN) in select_b_req()
3425 plci->call_dir = CALL_DIR_IN | CALL_DIR_ANSWER; in select_b_req()
3426 start_internal_command(Id, plci, select_b_command); in select_b_req()
3436 PLCI *plci, APPL *appl, API_PARSE *parms) in manufacturer_req() argument
3475 plci = &a->plci[i - 1]; in manufacturer_req()
3476 plci->appl = appl; in manufacturer_req()
3477 plci->command = _MANUFACTURER_R; in manufacturer_req()
3478 plci->m_command = command; in manufacturer_req()
3479 plci->number = Number; in manufacturer_req()
3480 plci->State = LOCAL_CONNECT; in manufacturer_req()
3481 Id = (((word)plci->Id << 8) | plci->adapter->Id | 0x80); in manufacturer_req()
3487 plci->call_dir = CALL_DIR_OUT | CALL_DIR_ORIGINATE; in manufacturer_req()
3491 Info = add_b1(plci, &m_parms[3], 0, 0); in manufacturer_req()
3494 add_p(plci, CAI, codec_cai); in manufacturer_req()
3499 if (AdvCodecSupport(a, plci, appl, 0)) { in manufacturer_req()
3503 Info = add_b1(plci, &null_parms, 0, B1_FACILITY_LOCAL); in manufacturer_req()
3509 plci->State = LOCAL_CONNECT; in manufacturer_req()
3510 plci->manufacturer = true; in manufacturer_req()
3511 plci->command = _MANUFACTURER_R; in manufacturer_req()
3512 plci->m_command = command; in manufacturer_req()
3513 plci->number = Number; in manufacturer_req()
3517 add_p(plci, LLI, lli); in manufacturer_req()
3518 add_p(plci, CHI, chi); in manufacturer_req()
3519 add_p(plci, UID, "\x06\x43\x61\x70\x69\x32\x30"); in manufacturer_req()
3520 sig_req(plci, ASSIGN, DSIG_ID); in manufacturer_req()
3524 Info = add_b23(plci, &m_parms[3]); in manufacturer_req()
3527 nl_req_ncci(plci, ASSIGN, 0); in manufacturer_req()
3528 send_req(plci); in manufacturer_req()
3533 dbug(1, dprintf("dir=0x%x,spoof=0x%x", dir, plci->spoofed_msg)); in manufacturer_req()
3534 if (plci->spoofed_msg == SPOOFING_REQUIRED) in manufacturer_req()
3536 api_save_msg(m_parms, "wbbs", &plci->saved_msg); in manufacturer_req()
3537 plci->spoofed_msg = AWAITING_MANUF_CON; in manufacturer_req()
3538 plci->internal_command = BLOCK_PLCI; /* reject other req meanwhile */ in manufacturer_req()
3539 plci->command = 0; in manufacturer_req()
3540 send_req(plci); in manufacturer_req()
3544 sig_req(plci, CALL_REQ, 0); in manufacturer_req()
3547 sig_req(plci, LISTEN_REQ, 0); in manufacturer_req()
3549 send_req(plci); in manufacturer_req()
3567 if (!plci) in manufacturer_req()
3577 plci->command = _MANUFACTURER_R; in manufacturer_req()
3578 plci->m_command = command; in manufacturer_req()
3579 plci->number = Number; in manufacturer_req()
3582 plci->b_channel = getChannel(&m_parms[1]); in manufacturer_req()
3583 mixer_set_bchannel_id_esc(plci, plci->b_channel); in manufacturer_req()
3584 if (plci->spoofed_msg == SPOOFING_REQUIRED) in manufacturer_req()
3586 plci->spoofed_msg = CALL_REQ | AWAITING_MANUF_CON; in manufacturer_req()
3587 plci->internal_command = BLOCK_PLCI; /* reject other req meanwhile */ in manufacturer_req()
3588 plci->command = 0; in manufacturer_req()
3594 plci->cr_enquiry = true; in manufacturer_req()
3596 add_ss(plci, FTY, &m_parms[1]); in manufacturer_req()
3597 sig_req(plci, req, 0); in manufacturer_req()
3598 send_req(plci); in manufacturer_req()
3601 if (plci->NL.Id && !plci->nl_remove_id) in manufacturer_req()
3603 if (plci->channels) in manufacturer_req()
3607 if ((a->ncci_plci[ncci] == plci->Id) && (a->ncci_state[ncci] == CONNECTED)) in manufacturer_req()
3610 cleanup_ncci_data(plci, ncci); in manufacturer_req()
3611 nl_req_ncci(plci, N_DISC, (byte)ncci); in manufacturer_req()
3615 mixer_remove(plci); in manufacturer_req()
3616 nl_req_ncci(plci, REMOVE, 0); in manufacturer_req()
3617 send_req(plci); in manufacturer_req()
3624 if (!plci) in manufacturer_req()
3630 plci->command = _MANUFACTURER_R; in manufacturer_req()
3631 plci->number = Number; in manufacturer_req()
3632 add_ss(plci, FTY, m); in manufacturer_req()
3633 sig_req(plci, SIG_CTRL, 0); in manufacturer_req()
3634 send_req(plci); in manufacturer_req()
3641 if (!plci) in manufacturer_req()
3647 plci->command = _MANUFACTURER_R; in manufacturer_req()
3648 plci->number = Number; in manufacturer_req()
3649 add_ss(plci, FTY, m); in manufacturer_req()
3650 sig_req(plci, DSP_CTRL, 0); in manufacturer_req()
3651 send_req(plci); in manufacturer_req()
3673 if (plci in manufacturer_req()
3680 if ((plci->tel != ADV_VOICE) || (plci != a->AdvSignalPLCI)) in manufacturer_req()
3692 if (plci->B1_facilities & B1_FACILITY_VOICE) in manufacturer_req()
3693 adv_voice_write_coefs(plci, ADV_VOICE_WRITE_UPDATE); in manufacturer_req()
3704 plci->dtmf_parameter_length = m->info[2] - 1; in manufacturer_req()
3705 if (plci->dtmf_parameter_length > m->length - 3) in manufacturer_req()
3706 plci->dtmf_parameter_length = (byte)(m->length - 3); in manufacturer_req()
3707 if (plci->dtmf_parameter_length > DTMF_PARAMETER_BUFFER_SIZE) in manufacturer_req()
3708 plci->dtmf_parameter_length = DTMF_PARAMETER_BUFFER_SIZE; in manufacturer_req()
3709 for (i = 0; i < plci->dtmf_parameter_length; i++) in manufacturer_req()
3710 plci->dtmf_parameter_buffer[i] = m->info[4 + i]; in manufacturer_req()
3711 if (plci->B1_facilities & B1_FACILITY_DTMFR) in manufacturer_req()
3712 dtmf_parameter_write(plci); in manufacturer_req()
3717 v_plci = plci; in manufacturer_req()
3765 PLCI *plci, APPL *appl, API_PARSE *msg) in manufacturer_res() argument
3789 if (!plci) in manufacturer_res()
3791 if (((plci->B3_prot != 4) && (plci->B3_prot != 5)) in manufacturer_res()
3792 || !(plci->ncpi_state & NCPI_NEGOTIATE_B3_SENT)) in manufacturer_res()
3804 if (plci->fax_connect_info_length < len) in manufacturer_res()
3806 ((T30_INFO *)(plci->fax_connect_info_buffer))->station_id_len = 0; in manufacturer_res()
3807 ((T30_INFO *)(plci->fax_connect_info_buffer))->head_line_len = 0; in manufacturer_res()
3815 if (plci->fax_connect_info_length <= len) in manufacturer_res()
3816 plci->fax_connect_info_buffer[len] = 0; in manufacturer_res()
3817 len += 1 + plci->fax_connect_info_buffer[len]; in manufacturer_res()
3818 if (plci->fax_connect_info_length <= len) in manufacturer_res()
3819 plci->fax_connect_info_buffer[len] = 0; in manufacturer_res()
3820 len += 1 + plci->fax_connect_info_buffer[len]; in manufacturer_res()
3822 plci->nsf_control_bits = GET_WORD(&fax_parms[7].info[2]); in manufacturer_res()
3823 plci->fax_connect_info_buffer[len++] = (byte)(fax_parms[7].length); in manufacturer_res()
3825 plci->fax_connect_info_buffer[len++] = fax_parms[7].info[1 + i]; in manufacturer_res()
3827 plci->fax_connect_info_length = len; in manufacturer_res()
3828 plci->fax_edata_ack_length = plci->fax_connect_info_length; in manufacturer_res()
3829 start_internal_command(Id, plci, fax_edata_ack_command); in manufacturer_res()
3844 PLCI *plci; in callback() local
3857 plci = &(a->plci[e->user[1]]); in callback()
3886 channel_flow_control_remove(plci); in callback()
3889 if (a->FlowControlIdTable[i] == plci->nl_remove_id) in callback()
3892 plci->nl_remove_id = 0; in callback()
3893 if (plci->rx_dma_descriptor > 0) { in callback()
3894 diva_free_dma_descriptor(plci, plci->rx_dma_descriptor - 1); in callback()
3895 plci->rx_dma_descriptor = 0; in callback()
3904 a->ch_flow_plci[ch] = plci->Id; in callback()
3905 plci->nl_req = 0; in callback()
3924 plci->nl_req = 0; in callback()
3927 plci->nl_req = 0; in callback()
3929 if (plci->nl_req) in callback()
3930 control_rc(plci, 0, rc, ch, 0, true); in callback()
3935 channel_x_on(plci, ch); in callback()
3936 if (plci->internal_command) in callback()
3937 control_rc(plci, req, rc, ch, 0, true); in callback()
3941 if (plci->nl_global_req) in callback()
3943 global_req = plci->nl_global_req; in callback()
3944 plci->nl_global_req = 0; in callback()
3947 if (plci->rx_dma_descriptor > 0) { in callback()
3948 diva_free_dma_descriptor(plci, plci->rx_dma_descriptor - 1); in callback()
3949 plci->rx_dma_descriptor = 0; in callback()
3952 channel_xmit_xon(plci); in callback()
3953 control_rc(plci, 0, rc, ch, global_req, true); in callback()
3955 else if (plci->data_sent) in callback()
3957 channel_xmit_xon(plci); in callback()
3958 plci->data_sent = false; in callback()
3959 plci->NL.XNum = 1; in callback()
3960 data_rc(plci, ch); in callback()
3961 if (plci->internal_command) in callback()
3962 control_rc(plci, req, rc, ch, 0, true); in callback()
3966 channel_xmit_xon(plci); in callback()
3967 control_rc(plci, req, rc, ch, 0, true); in callback()
3986 plci->sig_remove_id = 0; in callback()
3988 plci->sig_req = 0; in callback()
3989 if (plci->sig_global_req) in callback()
3991 global_req = plci->sig_global_req; in callback()
3992 plci->sig_global_req = 0; in callback()
3995 channel_xmit_xon(plci); in callback()
3996 control_rc(plci, 0, rc, ch, global_req, false); in callback()
4000 channel_xmit_xon(plci); in callback()
4001 control_rc(plci, req, rc, ch, 0, false); in callback()
4010 channel_xmit_xon(plci); in callback()
4015 channel_xmit_xon(plci); in callback()
4022 (a->ch_flow_plci[Ch] == plci->Id)) { in callback()
4028 nl_ind(plci); in callback()
4030 (a->ch_flow_plci[Ch] == plci->Id) && in callback()
4036 sig_ind(plci); in callback()
4043 while (!plci->req_in in callback()
4044 && !plci->internal_command in callback()
4045 && (plci->msg_in_write_pos != plci->msg_in_read_pos)) in callback()
4047 j = (plci->msg_in_read_pos == plci->msg_in_wrap_pos) ? 0 : plci->msg_in_read_pos; in callback()
4049 i = (((CAPI_MSG *)(&((byte *)(plci->msg_in_queue))[j]))->header.length + 3) & 0xfffc; in callback()
4051 m = (CAPI_MSG *)(&((byte *)(plci->msg_in_queue))[j]); in callback()
4052 appl = *((APPL **)(&((byte *)(plci->msg_in_queue))[j + i])); in callback()
4054 m->header.command, plci->msg_in_write_pos, plci->msg_in_read_pos, plci->msg_in_wrap_pos)); in callback()
4055 if (plci->msg_in_read_pos == plci->msg_in_wrap_pos) in callback()
4057 plci->msg_in_wrap_pos = MSG_IN_QUEUE_SIZE; in callback()
4058 plci->msg_in_read_pos = i + MSG_IN_OVERHEAD; in callback()
4062 plci->msg_in_read_pos = j + i + MSG_IN_OVERHEAD; in callback()
4064 if (plci->msg_in_read_pos == plci->msg_in_write_pos) in callback()
4066 plci->msg_in_write_pos = MSG_IN_QUEUE_SIZE; in callback()
4067 plci->msg_in_read_pos = MSG_IN_QUEUE_SIZE; in callback()
4069 else if (plci->msg_in_read_pos == plci->msg_in_wrap_pos) in callback()
4071 plci->msg_in_read_pos = MSG_IN_QUEUE_SIZE; in callback()
4072 plci->msg_in_wrap_pos = MSG_IN_QUEUE_SIZE; in callback()
4085 if (plci->li_notify_update) in callback()
4087 plci->li_notify_update = false; in callback()
4088 mixer_notify_update(plci, false); in callback()
4092 send_data(plci); in callback()
4093 send_req(plci); in callback()
4097 static void control_rc(PLCI *plci, byte req, byte rc, byte ch, byte global_req, in control_rc() argument
4112 if (!plci) { in control_rc()
4116 dbug(1, dprintf("req0_in/out=%d/%d", plci->req_in, plci->req_out)); in control_rc()
4117 if (plci->req_in != plci->req_out) in control_rc()
4126 plci->req_in = plci->req_in_start = plci->req_out = 0; in control_rc()
4129 appl = plci->appl; in control_rc()
4130 a = plci->adapter; in control_rc()
4134 Id = (((dword)(ncci ? ncci : ch)) << 16) | ((word)plci->Id << 8) | a->Id; in control_rc()
4135 if (plci->tel && plci->SuppState != CALL_HELD) Id |= EXT_CONTROLLER; in control_rc()
4136 Number = plci->number; in control_rc()
4137 …ntity=0x%x, command=0x%x, int_command=0x%x", Id, plci->Id, plci->tel, plci->Sig.Id, plci->command,… in control_rc()
4138 dbug(1, dprintf("channels=0x%x", plci->channels)); in control_rc()
4139 if (plci_remove_check(plci)) in control_rc()
4143 sig_req(plci, HANGUP, 0); in control_rc()
4144 sig_req(plci, REMOVE, 0); in control_rc()
4145 send_req(plci); in control_rc()
4147 if (plci->command) in control_rc()
4149 switch (plci->command) in control_rc()
4156 plci->SuppState = IDLE; in control_rc()
4167 plci->SuppState = CALL_HELD; in control_rc()
4181 if (plci->State == INC_DIS_PENDING) in control_rc()
4183 if (plci->Sig.Id != 0xff) in control_rc()
4190 plci_remove(plci); in control_rc()
4191 plci->State = IDLE; in control_rc()
4194 if (plci->State != LOCAL_CONNECT) plci->State = OUTG_CON_PENDING; in control_rc()
4203 plci_remove(plci); in control_rc()
4204 plci->State = IDLE; in control_rc()
4208 sendf(plci->appl, _CONNECT_ACTIVE_I, Id, 0, "sss", "", "", ""); in control_rc()
4209 plci->State = INC_ACT_PENDING; in control_rc()
4214 if (plci->State != INC_DIS_PENDING) in control_rc()
4215 plci->State = INC_CON_ACCEPT; in control_rc()
4219 if (plci->State == INC_DIS_PENDING) in control_rc()
4221 if (plci->Sig.Id != 0xff) in control_rc()
4223 plci->State = OUTG_DIS_PENDING; in control_rc()
4240 ncci = get_ncci(plci, ch, 0); in control_rc()
4242 plci->channels++; in control_rc()
4274 sendf(plci->appl, _CONNECT_R | CONFIRM, Id, Number, "w", Info); in control_rc()
4275 plci_remove(plci); in control_rc()
4278 sendf(plci->appl, _CONNECT_R | CONFIRM, Id, Number, "w", Info); in control_rc()
4284 plci->command = 0; in control_rc()
4286 else if (plci->internal_command) in control_rc()
4288 switch (plci->internal_command) in control_rc()
4298 plci_remove(plci); in control_rc()
4309 plci_remove(plci); in control_rc()
4319 switch (plci->internal_command) in control_rc()
4348 if (!plci->appl) break; in control_rc()
4357 sendf(plci->appl, _FACILITY_R | CONFIRM, Id & 0x7, in control_rc()
4358 plci->number, "wws", Info, (word)3, SSparms); in control_rc()
4359 if (Info) plci_remove(plci); in control_rc()
4364 if (!plci->relatedPTYPLCI) break; in control_rc()
4365 rplci = plci->relatedPTYPLCI; in control_rc()
4366 SSparms[1] = plci->ptyState; in control_rc()
4372 plci->relatedPTYPLCI = NULL; in control_rc()
4373 plci->ptyState = 0; in control_rc()
4378 plci->number, in control_rc()
4385 if (!plci->relatedPTYPLCI) break; in control_rc()
4386 rplci = plci->relatedPTYPLCI; in control_rc()
4393 plci->relatedPTYPLCI = NULL; in control_rc()
4394 plci->ptyState = 0; in control_rc()
4399 plci->number, in control_rc()
4409 plci_remove(plci); /* after codec init, internal codec commands pending */ in control_rc()
4419 plci_remove(plci); /* after codec init, internal codec commands pending */ in control_rc()
4428 plci->internal_command = PERM_COD_CONN_PEND; in control_rc()
4434 sig_req(plci, CALL_REQ, 0); in control_rc()
4435 send_req(plci); in control_rc()
4436 plci->internal_command = PERM_COD_CALL; in control_rc()
4452 plci_remove(plci); in control_rc()
4466 plci_remove(plci); in control_rc()
4471 if (plci->channels) in control_rc()
4476 cleanup_ncci_data(plci, ncci); in control_rc()
4477 nl_req_ncci(plci, N_DISC, (byte)ncci); in control_rc()
4484 if (plci->State == INC_DIS_PENDING) in control_rc()
4486 sig_req(plci, CALL_REQ, 0); in control_rc()
4487 send_req(plci); in control_rc()
4488 plci->State = OUTG_CON_PENDING; in control_rc()
4515 if (plci->internal_command == MWI_ACTIVATE_REQ_PEND) in control_rc()
4521 if (plci->cr_enquiry) in control_rc()
4523 sendf(plci->appl, in control_rc()
4526 plci->number, in control_rc()
4528 if (rc != OK) plci_remove(plci); in control_rc()
4532 sendf(plci->appl, in control_rc()
4535 plci->number, in control_rc()
4547 if ((plci->internal_command == CONF_ADD_REQ_PEND) && (!plci->relatedPTYPLCI)) break; in control_rc()
4548 rplci = plci; in control_rc()
4550 switch (plci->internal_command) in control_rc()
4557 rplci = plci->relatedPTYPLCI; in control_rc()
4577 plci->relatedPTYPLCI = NULL; in control_rc()
4578 plci->ptyState = 0; in control_rc()
4583 plci->number, in control_rc()
4590 if (plci->relatedPTYPLCI) in control_rc()
4592 plci->relatedPTYPLCI->vswitchstate = 0; in control_rc()
4593 plci->relatedPTYPLCI->vsprot = 0; in control_rc()
4594 plci->relatedPTYPLCI->vsprotdialect = 0; in control_rc()
4596 plci->vswitchstate = 0; in control_rc()
4597 plci->vsprot = 0; in control_rc()
4598 plci->vsprotdialect = 0; in control_rc()
4602 if (plci->relatedPTYPLCI && in control_rc()
4603 plci->vswitchstate == 1 && in control_rc()
4604 plci->relatedPTYPLCI->vswitchstate == 3) /* join complete */ in control_rc()
4605 plci->vswitchstate = 3; in control_rc()
4615 plci->appl->CDEnable = 0; in control_rc()
4617 sendf(plci->appl, _FACILITY_R | CONFIRM, Id, in control_rc()
4618 plci->number, "wws", Info, (word)3, SSparms); in control_rc()
4624 ncci = get_ncci(plci, ch, 0); in control_rc()
4626 plci->channels++; in control_rc()
4631 if (plci->internal_command_queue[0]) in control_rc()
4633 (*(plci->internal_command_queue[0]))(Id, plci, rc); in control_rc()
4634 if (plci->internal_command) in control_rc()
4639 next_internal_command(Id, plci); in control_rc()
4644 Id = ((word)plci->Id << 8) | plci->adapter->Id; in control_rc()
4645 if (plci->tel) Id |= EXT_CONTROLLER; in control_rc()
4647 switch (plci->internal_command) in control_rc()
4661 plci->internal_command = 0; in control_rc()
4662 sig_req(plci, REMOVE, 0); in control_rc()
4663 send_req(plci); in control_rc()
4682 plci->number, "wws", Info, (word)3, SSparms); in control_rc()
4687 plci->internal_command = 0; in control_rc()
4694 plci->internal_command = PERM_COD_CONN_PEND; in control_rc()
4700 plci->internal_command = 0; in control_rc()
4702 plci->internal_command = PERM_COD_CALL; in control_rc()
4703 sig_req(plci, CALL_REQ, 0); in control_rc()
4704 send_req(plci); in control_rc()
4710 plci->internal_command = 0; in control_rc()
4711 dbug(1, dprintf("ListenCheck, new SIG_ID = 0x%x", plci->Sig.Id)); in control_rc()
4712 add_p(plci, ESC, "\x02\x18\x00"); /* support call waiting */ in control_rc()
4713 sig_req(plci, INDICATE_REQ, 0); in control_rc()
4714 send_req(plci); in control_rc()
4720 plci_remove(plci); in control_rc()
4721 plci->State = IDLE; in control_rc()
4730 sig_req(plci, LAW_REQ, 0); in control_rc()
4731 send_req(plci); in control_rc()
4738 plci->internal_command = 0; in control_rc()
4747 plci->internal_command = 0; in control_rc()
4753 plci->internal_command = 0; in control_rc()
4754 sig_req(plci, REMOVE, 0); in control_rc()
4755 send_req(plci); in control_rc()
4760 plci_remove_check(plci); in control_rc()
4764 static void data_rc(PLCI *plci, byte ch) in data_rc() argument
4772 if (plci->appl) in data_rc()
4774 TransmitBufferFree(plci->appl, plci->data_sent_ptr); in data_rc()
4775 a = plci->adapter; in data_rc()
4777 if (ncci && (a->ncci_plci[ncci] == plci->Id)) in data_rc()
4786 Id = (((dword)ncci) << 16) | ((word)plci->Id << 8) | a->Id; in data_rc()
4787 if (plci->tel) Id |= EXT_CONTROLLER; in data_rc()
4788 sendf(plci->appl, _DATA_B3_R | CONFIRM, Id, data->Number, in data_rc()
4800 static void data_ack(PLCI *plci, byte ch) in data_ack() argument
4807 a = plci->adapter; in data_ack()
4812 if (a->ncci_state[ncci] && (a->ncci_plci[ncci] == plci->Id)) in data_ack()
4814 Id = (((dword)ncci) << 16) | ((word)plci->Id << 8) | a->Id; in data_ack()
4815 if (plci->tel) Id |= EXT_CONTROLLER; in data_ack()
4816 sendf(plci->appl, _DATA_B3_R | CONFIRM, Id, ncci_ptr->DataAck[ncci_ptr->data_ack_out].Number, in data_ack()
4826 static void sig_ind(PLCI *plci) in sig_ind() argument
4889 a = plci->adapter; in sig_ind()
4890 Id = ((word)plci->Id << 8) | a->Id; in sig_ind()
4893 if (plci->sig_remove_id) in sig_ind()
4895 plci->Sig.RNR = 2; /* discard */ in sig_ind()
4899 if (plci->tel && plci->SuppState != CALL_HELD) Id |= EXT_CONTROLLER; in sig_ind()
4901 Id, plci->Id, plci->tel, plci->State, plci->channels, plci->hangup_flow_ctrl_timer)); in sig_ind()
4902 if (plci->Sig.Ind == CALL_HOLD_ACK && plci->channels) in sig_ind()
4904 plci->Sig.RNR = 1; in sig_ind()
4907 if (plci->Sig.Ind == HANGUP && plci->channels) in sig_ind()
4909 plci->Sig.RNR = 1; in sig_ind()
4910 plci->hangup_flow_ctrl_timer++; in sig_ind()
4912 if (plci->hangup_flow_ctrl_timer == 100) in sig_ind()
4915 plci->Sig.RNR = 0; in sig_ind()
4916 plci->hangup_flow_ctrl_timer = 0; in sig_ind()
4919 if (a->ncci_plci[ncci] == plci->Id) in sig_ind()
4921 cleanup_ncci_data(plci, ncci); in sig_ind()
4922 if (plci->channels)plci->channels--; in sig_ind()
4923 if (plci->appl) in sig_ind()
4924 sendf(plci->appl, _DISCONNECT_B3_I, (((dword) ncci) << 16) | Id, 0, "ws", 0, ""); in sig_ind()
4927 if (plci->appl) in sig_ind()
4928 sendf(plci->appl, _DISCONNECT_I, Id, 0, "w", 0); in sig_ind()
4929 plci_remove(plci); in sig_ind()
4930 plci->State = IDLE; in sig_ind()
4938 IndParse(plci, multi_fac_id, multi_fac_parms, MAX_MULTI_IE); in sig_ind()
4939 IndParse(plci, multi_pi_id, multi_pi_parms, MAX_MULTI_IE); in sig_ind()
4940 IndParse(plci, multi_ssext_id, multi_ssext_parms, MAX_MULTI_IE); in sig_ind()
4942 IndParse(plci, multi_vswitch_id, multi_vswitch_parms, MAX_MULTI_IE); in sig_ind()
4944 IndParse(plci, parms_id, parms, 0); in sig_ind()
4945 IndParse(plci, multi_CiPN_id, multi_CiPN_parms, MAX_MULTI_IE); in sig_ind()
4951 if (esc_cr[0] && plci) in sig_ind()
4953 if (plci->cr_enquiry && plci->appl) in sig_ind()
4955 plci->cr_enquiry = false; in sig_ind()
4965 sendf(plci->appl, in sig_ind()
4969 "dwbbbbSbS", _DI_MANU_ID, plci->m_command, in sig_ind()
4970 …2 + 1 + 1 + esc_cr[0] + 1 + 1 + esc_law[0], plci->Sig.Ind, 1 + 1 + esc_cr[0] + 1 + 1 + esc_law[0],… in sig_ind()
4993 if (plci == a->automatic_lawPLCI) { in sig_ind()
4994 plci->internal_command = 0; in sig_ind()
4995 sig_req(plci, REMOVE, 0); in sig_ind()
4996 send_req(plci); in sig_ind()
5085 if (plci != a->AdvCodecPLCI) in sig_ind()
5087 force_mt_info = SendMultiIE(plci, Id, multi_fac_parms, FTY, 0x20, 0); in sig_ind()
5088 force_mt_info |= SendMultiIE(plci, Id, multi_pi_parms, PI, 0x210, 0); in sig_ind()
5089 SendSSExtInd(NULL, plci, Id, multi_ssext_parms); in sig_ind()
5090 SendInfo(plci, Id, parms, force_mt_info); in sig_ind()
5092 VSwitchReqInd(plci, Id, multi_vswitch_parms); in sig_ind()
5097 if (esc_chi[0] && plci && !plci->SuppState) { in sig_ind()
5098 plci->b_channel = esc_chi[esc_chi[0]]&0x1f; in sig_ind()
5099 mixer_set_bchannel_id_esc(plci, plci->b_channel); in sig_ind()
5100 dbug(1, dprintf("storeChannel=0x%x", plci->b_channel)); in sig_ind()
5101 if (plci->tel == ADV_VOICE && plci->appl) { in sig_ind()
5106 if (plci->appl) plci->appl->Number++; in sig_ind()
5108 switch (plci->Sig.Ind) { in sig_ind()
5112 if (!plci->appl) break; in sig_ind()
5123 sendf(plci->appl, _FACILITY_R | CONFIRM, Id & 0x7, plci->number, "wws", 0, 3, CF_Ind); in sig_ind()
5124 plci_remove(plci); in sig_ind()
5136 if (!plci->relatedPTYPLCI) break; in sig_ind()
5137 tplci = plci->relatedPTYPLCI; in sig_ind()
5144 plci->vswitchstate = 0; in sig_ind()
5145 plci->relatedPTYPLCI->vswitchstate = 0; in sig_ind()
5160 plci->relatedPTYPLCI = NULL; in sig_ind()
5161 plci->ptyState = 0; in sig_ind()
5194 if (!plci->appl) break; in sig_ind()
5250 PUT_DWORD(&Interr_Err_Ind[6], plci->appl->S_Handle); in sig_ind()
5251 sendf(plci->appl, _FACILITY_I, Id & 0x7, 0, "ws", 3, Interr_Err_Ind); in sig_ind()
5252 plci_remove(plci); in sig_ind()
5271 if (plci->cr_enquiry) in sig_ind()
5273 sendf(plci->appl, _FACILITY_I, Id & 0xf, 0, "ws", 3, SS_Ind); in sig_ind()
5274 plci_remove(plci); in sig_ind()
5278 sendf(plci->appl, _FACILITY_I, Id, 0, "ws", 3, SS_Ind); in sig_ind()
5292 plci->ptyState = 0; in sig_ind()
5298 plci->ptyState = CONNECTED; in sig_ind()
5304 plci->ptyState = CONNECTED; in sig_ind()
5310 plci->ptyState = CONNECTED; in sig_ind()
5314 plci->relatedPTYPLCI = NULL; in sig_ind()
5315 tplci = plci->relatedPTYPLCI; in sig_ind()
5317 plci->ptyState = CONNECTED; in sig_ind()
5332 sendf(plci->appl, _FACILITY_I, Id, 0, "ws", 3, CONF_Ind); in sig_ind()
5346 if (!plci->relatedPTYPLCI) break; in sig_ind()
5347 tplci = plci->relatedPTYPLCI; in sig_ind()
5354 if (plci->vswitchstate != 3) in sig_ind()
5357 plci->ptyState = IDLE; in sig_ind()
5358 plci->relatedPTYPLCI = NULL; in sig_ind()
5359 plci->ptyState = 0; in sig_ind()
5371 switch (plci->ptyState) in sig_ind()
5374 plci->ptyState = CONNECTED; in sig_ind()
5379 plci->ptyState = IDLE; in sig_ind()
5380 plci->relatedPTYPLCI = NULL; in sig_ind()
5381 plci->ptyState = 0; in sig_ind()
5404 if (!plci->appl) break; in sig_ind()
5406 PUT_DWORD(&CF_Ind[6], plci->appl->S_Handle); in sig_ind()
5407 sendf(plci->appl, _FACILITY_I, Id & 0x7, 0, "ws", 3, CF_Ind); in sig_ind()
5408 plci_remove(plci); in sig_ind()
5418 if (!plci->appl) break; in sig_ind()
5450 PUT_DWORD(&pty_cai[6], plci->appl->S_Handle); in sig_ind()
5451 sendf(plci->appl, _FACILITY_I, Id & 0x7, 0, "wS", 3, pty_cai); in sig_ind()
5452 plci_remove(plci); in sig_ind()
5462 if (plci->cr_enquiry) in sig_ind()
5464 sendf(plci->appl, _FACILITY_I, Id & 0xf, 0, "ws", 3, SS_Ind); in sig_ind()
5465 plci_remove(plci); in sig_ind()
5469 sendf(plci->appl, _FACILITY_I, Id, 0, "ws", 3, SS_Ind); in sig_ind()
5478 if (plci->appl && (a->Notification_Mask[plci->appl->Id - 1] & SMASK_MWI)) in sig_ind()
5480 if (plci->internal_command == GET_MWI_STATE) /* result on Message Waiting Listen */ in sig_ind()
5482 sendf(plci->appl, _FACILITY_I, Id & 0xf, 0, "wS", 3, &pty_cai[2]); in sig_ind()
5483 plci_remove(plci); in sig_ind()
5486 else sendf(plci->appl, _FACILITY_I, Id, 0, "wS", 3, &pty_cai[2]); in sig_ind()
5514 add_p(plci, CAI, facility); in sig_ind()
5515 add_p(plci, ESC, multi_ssext_parms[0]); /* remembered parameter -> only one possible */ in sig_ind()
5516 sig_req(plci, S_SERVICE, 0); in sig_ind()
5517 send_req(plci); in sig_ind()
5518 plci->command = 0; in sig_ind()
5519 next_internal_command(Id, plci); in sig_ind()
5562 tplci = plci->relatedPTYPLCI; in sig_ind()
5573 plci->ptyState = CONNECTED; in sig_ind()
5574 sendf(plci->appl, _FACILITY_I, Id, 0, "ws", 3, CONF_Ind); in sig_ind()
5600 if (plci->appl && (a->Notification_Mask[plci->appl->Id - 1] & SMASK_CCBS)) in sig_ind()
5602 sendf(plci->appl, _FACILITY_I, Id, 0, "ws", 3, CONF_Ind); in sig_ind()
5626 if (plci->SuppState == HOLD_REQUEST) in sig_ind()
5628 plci->SuppState = IDLE; in sig_ind()
5629 sendf(plci->appl, _FACILITY_I, Id, 0, "ws", 3, SS_Ind); in sig_ind()
5634 if (plci->SuppState == HOLD_REQUEST) in sig_ind()
5636 plci->SuppState = CALL_HELD; in sig_ind()
5637 CodecIdCheck(a, plci); in sig_ind()
5638 start_internal_command(Id, plci, hold_save_command); in sig_ind()
5655 if (plci->SuppState == RETRIEVE_REQUEST) in sig_ind()
5657 plci->SuppState = CALL_HELD; in sig_ind()
5658 CodecIdCheck(a, plci); in sig_ind()
5659 sendf(plci->appl, _FACILITY_I, Id, 0, "ws", 3, SS_Ind); in sig_ind()
5665 if (plci->SuppState == RETRIEVE_REQUEST) in sig_ind()
5667 plci->SuppState = IDLE; in sig_ind()
5668 plci->call_dir |= CALL_DIR_FORCE_OUTG_NL; in sig_ind()
5669 plci->b_channel = esc_chi[esc_chi[0]]&0x1f; in sig_ind()
5670 if (plci->tel) in sig_ind()
5672 mixer_set_bchannel_id_esc(plci, plci->b_channel); in sig_ind()
5673 dbug(1, dprintf("RetrChannel=0x%x", plci->b_channel)); in sig_ind()
5675 if (plci->B2_prot == B2_TRANSPARENT && plci->B3_prot == B3_TRANSPARENT) in sig_ind()
5678 start_internal_command(Id, plci, retrieve_restore_command); in sig_ind()
5681 sendf(plci->appl, _FACILITY_I, Id, 0, "ws", 3, SS_Ind); in sig_ind()
5684 start_internal_command(Id, plci, retrieve_restore_command); in sig_ind()
5689 if (plci->State != LISTENING) { in sig_ind()
5690 sig_req(plci, HANGUP, 0); in sig_ind()
5691 send_req(plci); in sig_ind()
5697 clear_c_ind_mask(plci); in sig_ind()
5700 set_c_ind_mask_bit(plci, MAX_APPL); in sig_ind()
5701 group_optimization(a, plci); in sig_ind()
5706 && test_group_ind_mask_bit(plci, i)) { in sig_ind()
5708 set_c_ind_mask_bit(plci, i); in sig_ind()
5709 dump_c_ind_mask(plci); in sig_ind()
5710 plci->State = INC_CON_PENDING; in sig_ind()
5711 plci->call_dir = (plci->call_dir & ~(CALL_DIR_OUT | CALL_DIR_ORIGINATE)) | in sig_ind()
5714 plci->b_channel = esc_chi[esc_chi[0]] & 0x1f; in sig_ind()
5715 mixer_set_bchannel_id_esc(plci, plci->b_channel); in sig_ind()
5721 plci->tel = ADV_VOICE; in sig_ind()
5723 plci->tel = CODEC; in sig_ind()
5724 if (plci->tel) Id |= EXT_CONTROLLER; in sig_ind()
5725 a->codec_listen[i] = plci; in sig_ind()
5745 plci, in sig_ind()
5749 plci, in sig_ind()
5752 SendMultiIE(plci, Id, multi_pi_parms, PI, 0x210, true)); in sig_ind()
5755 clear_c_ind_mask_bit(plci, MAX_APPL); in sig_ind()
5756 dump_c_ind_mask(plci); in sig_ind()
5758 if (c_ind_mask_empty(plci)) { in sig_ind()
5759 sig_req(plci, HANGUP, 0); in sig_ind()
5760 send_req(plci); in sig_ind()
5761 plci->State = IDLE; in sig_ind()
5763 plci->notifiedcall = 0; in sig_ind()
5769 plci->notifiedcall = 1; in sig_ind()
5775 if (plci->State == ADVANCED_VOICE_SIG || plci->State == ADVANCED_VOICE_NOSIG) in sig_ind()
5777 if (plci->internal_command == PERM_COD_CONN_PEND) in sig_ind()
5779 if (plci->State == ADVANCED_VOICE_NOSIG) in sig_ind()
5869 next_internal_command(Id, plci); in sig_ind()
5873 plci->internal_command = PERM_COD_HOOK; in sig_ind()
5874 add_p(plci, FTY, "\x01\x09"); /* Get Hook State*/ in sig_ind()
5875 sig_req(plci, TEL_CTRL, 0); in sig_ind()
5876 send_req(plci); in sig_ind()
5879 else if (plci->command != _MANUFACTURER_R /* old style permanent connect */ in sig_ind()
5880 && plci->State != INC_ACT_PENDING) in sig_ind()
5882 mixer_set_bchannel_id_esc(plci, plci->b_channel); in sig_ind()
5883 …if (plci->tel == ADV_VOICE && plci->SuppState == IDLE) /* with permanent codec switch on immediate… in sig_ind()
5885 chi[2] = plci->b_channel; in sig_ind()
5888 sendf(plci->appl, _CONNECT_ACTIVE_I, Id, 0, "Sss", parms[21], "", ""); in sig_ind()
5889 plci->State = INC_ACT_PENDING; in sig_ind()
5895 if (plci->State == ADVANCED_VOICE_SIG && ie[0]) { in sig_ind()
5899 if (plci->internal_command == PERM_COD_HOOK) in sig_ind()
5902 plci->hook_state = ie[1]; in sig_ind()
5903 next_internal_command(Id, plci); in sig_ind()
5908 if (((plci->hook_state) & 0xf0) == 0x80) in sig_ind()
5913 plci->hook_state = ie[1]&0x91; in sig_ind()
5931 a->AdvSignalPLCI = &a->plci[i - 1]; in sig_ind()
5967 if (plci->internal_command == PERM_COD_HOOK) in sig_ind()
5970 plci->hook_state = ie[1] & 0x91; in sig_ind()
5971 next_internal_command(Id, plci); in sig_ind()
5976 if (((plci->hook_state) & 0xf0) == 0x90) break; in sig_ind()
5977 plci->hook_state = ie[1] & 0x91; in sig_ind()
5982 if (plci->tel) Id |= EXT_CONTROLLER; in sig_ind()
5999 clear_c_ind_mask_bit(plci, (word)(plci->appl->Id - 1)); in sig_ind()
6001 sendf(plci->appl, _FACILITY_I, Id, 0, "ws", (word)3, resume_cau); in sig_ind()
6005 clear_c_ind_mask(plci); in sig_ind()
6007 if (plci->NL.Id && !plci->nl_remove_id) { in sig_ind()
6008 mixer_remove(plci); in sig_ind()
6009 nl_req_ncci(plci, REMOVE, 0); in sig_ind()
6011 if (!plci->sig_remove_id) { in sig_ind()
6012 plci->internal_command = 0; in sig_ind()
6013 sig_req(plci, REMOVE, 0); in sig_ind()
6015 send_req(plci); in sig_ind()
6016 if (!plci->channels) { in sig_ind()
6017 sendf(plci->appl, _FACILITY_I, Id, 0, "ws", (word)3, "\x05\x04\x00\x02\x00\x00"); in sig_ind()
6018 sendf(plci->appl, _DISCONNECT_I, Id, 0, "w", 0); in sig_ind()
6026 plci->hangup_flow_ctrl_timer = 0; in sig_ind()
6027 if (plci->manufacturer && plci->State == LOCAL_CONNECT) break; in sig_ind()
6040 if (plci->State == INC_CON_PENDING || plci->State == INC_CON_ALERT) in sig_ind()
6044 if (test_c_ind_mask_bit(plci, i)) in sig_ind()
6050 clear_c_ind_mask(plci); in sig_ind()
6052 if (!plci->appl) in sig_ind()
6054 if (plci->State == LISTENING) in sig_ind()
6056 plci->notifiedcall = 0; in sig_ind()
6059 plci->State = INC_DIS_PENDING; in sig_ind()
6060 if (c_ind_mask_empty(plci)) in sig_ind()
6062 plci->State = IDLE; in sig_ind()
6063 if (plci->NL.Id && !plci->nl_remove_id) in sig_ind()
6065 mixer_remove(plci); in sig_ind()
6066 nl_req_ncci(plci, REMOVE, 0); in sig_ind()
6068 if (!plci->sig_remove_id) in sig_ind()
6070 plci->internal_command = 0; in sig_ind()
6071 sig_req(plci, REMOVE, 0); in sig_ind()
6073 send_req(plci); in sig_ind()
6081 if (plci->State != IDLE && plci->State != INC_DIS_PENDING) in sig_ind()
6083 if (plci->State == RESUMING) in sig_ind()
6086 sendf(plci->appl, _FACILITY_I, Id, 0, "ws", (word)3, resume_cau); in sig_ind()
6088 plci->State = INC_DIS_PENDING; in sig_ind()
6089 sendf(plci->appl, _DISCONNECT_I, Id, 0, "w", i); in sig_ind()
6095 SendSSExtInd(NULL, plci, Id, multi_ssext_parms); in sig_ind()
6099 VSwitchReqInd(plci, Id, multi_vswitch_parms); in sig_ind()
6102 if (plci->relatedPTYPLCI && in sig_ind()
6103 plci->vswitchstate == 3 && in sig_ind()
6104 plci->relatedPTYPLCI->vswitchstate == 3 && in sig_ind()
6107 add_p(plci->relatedPTYPLCI, SMSG, parms[MAXPARMSIDS - 1]); in sig_ind()
6108 sig_req(plci->relatedPTYPLCI, VSWITCH_REQ, 0); in sig_ind()
6109 send_req(plci->relatedPTYPLCI); in sig_ind()
6111 else VSwitchReqInd(plci, Id, multi_vswitch_parms); in sig_ind()
6118 static void SendSetupInfo(APPL *appl, PLCI *plci, dword Id, byte **parms, byte Info_Sent_Flag) in SendSetupInfo() argument
6151 mixer_set_bchannel_id(plci, Info_Element); in SendSetupInfo()
6184 if (plci->adapter->Info_Mask[appl->Id - 1] & Info_Mask) { in SendSetupInfo()
6192 static void SendInfo(PLCI *plci, dword Id, byte **parms, byte iesent) in SendInfo() argument
6208 !plci->appl in SendInfo()
6209 && !plci->State in SendInfo()
6210 && plci->Sig.Ind != NCR_FACILITY in SendInfo()
6279 mixer_set_bchannel_id(plci, Info_Element); in SendInfo()
6323 if (plci->Sig.Ind == NCR_FACILITY) /* check controller broadcast */ in SendInfo()
6330 && plci->adapter->Info_Mask[appl->Id - 1] & Info_Mask) in SendInfo()
6338 else if (!plci->appl) in SendInfo()
6348 if (test_c_ind_mask_bit(plci, j)) in SendInfo()
6358 && plci->adapter->Info_Mask[plci->appl->Id - 1] & Info_Mask) in SendInfo()
6362 sendf(plci->appl, _INFO_I, Id, 0, "wS", Info_Number, Info_Element); in SendInfo()
6368 static byte SendMultiIE(PLCI *plci, dword Id, byte **parms, byte ie_type, in SendMultiIE() argument
6381 !plci->appl in SendMultiIE()
6382 && !plci->State in SendMultiIE()
6383 && plci->Sig.Ind != NCR_FACILITY in SendMultiIE()
6399 dbug(1, dprintf("[Ind0x%x]:IE=0x%x", plci->Sig.Ind, ie_type)); in SendMultiIE()
6404 if (plci->Sig.Ind == NCR_FACILITY) /* check controller broadcast */ in SendMultiIE()
6411 && plci->adapter->Info_Mask[appl->Id - 1] & Info_Mask) in SendMultiIE()
6419 else if (!plci->appl && Info_Number) in SendMultiIE()
6423 if (test_c_ind_mask_bit(plci, j)) in SendMultiIE()
6432 && plci->adapter->Info_Mask[plci->appl->Id - 1] & Info_Mask) in SendMultiIE()
6436 sendf(plci->appl, _INFO_I, Id, 0, "wS", Info_Number, Info_Element); in SendMultiIE()
6442 static void SendSSExtInd(APPL *appl, PLCI *plci, dword Id, byte **parms) in SendSSExtInd() argument
6454 plci in SendSSExtInd()
6455 && plci->State in SendSSExtInd()
6456 && plci->Sig.Ind != NCR_FACILITY in SendSSExtInd()
6474 else if (plci->appl) in SendSSExtInd()
6477 sendf(plci->appl, _MANUFACTURER_I, in SendSSExtInd()
6488 static void nl_ind(PLCI *plci) in nl_ind() argument
6569 ch = plci->NL.IndCh; in nl_ind()
6570 a = plci->adapter; in nl_ind()
6572 Id = (((dword)(ncci ? ncci : ch)) << 16) | (((word) plci->Id) << 8) | a->Id; in nl_ind()
6573 if (plci->tel) Id |= EXT_CONTROLLER; in nl_ind()
6574 APPLptr = plci->appl; in nl_ind()
6576 plci->NL.Id, Id, plci->Id, plci->tel, plci->State, ch, plci->channels, plci->NL.Ind & 0x0f)); in nl_ind()
6580 if (plci->nl_remove_id) in nl_ind()
6582 plci->NL.RNR = 2; /* discard */ in nl_ind()
6586 if ((plci->NL.Ind & 0x0f) == N_CONNECT) in nl_ind()
6588 if (plci->State == INC_DIS_PENDING in nl_ind()
6589 || plci->State == OUTG_DIS_PENDING in nl_ind()
6590 || plci->State == IDLE) in nl_ind()
6592 plci->NL.RNR = 2; /* discard */ in nl_ind()
6596 if (plci->State < INC_ACT_PENDING) in nl_ind()
6598 plci->NL.RNR = 1; /* flow control */ in nl_ind()
6599 channel_x_off(plci, ch, N_XON_CONNECT_IND); in nl_ind()
6607 plci->NL.RNR = 2; in nl_ind()
6611 if (((plci->NL.Ind & 0x0f) == N_UDATA) in nl_ind()
6612 && (((plci->B2_prot != B2_SDLC) && ((plci->B1_resource == 17) || (plci->B1_resource == 18))) in nl_ind()
6613 || (plci->B2_prot == 7) in nl_ind()
6614 || (plci->B3_prot == 7))) in nl_ind()
6616 plci->ncpi_buffer[0] = 0; in nl_ind()
6618 ncpi_state = plci->ncpi_state; in nl_ind()
6619 if (plci->NL.complete == 1) in nl_ind()
6621 byte *data = &plci->NL.RBuffer->P[0]; in nl_ind()
6623 if ((plci->NL.RBuffer->length >= 12) in nl_ind()
6631 plci->ncpi_state |= NCPI_MDM_DCD_ON_RECEIVED; in nl_ind()
6633 plci->ncpi_state |= NCPI_MDM_CTS_ON_RECEIVED; in nl_ind()
6643 PUT_WORD(&(plci->ncpi_buffer[1]), (word)(GET_DWORD(data) & 0x0000FFFF)); in nl_ind()
6661 PUT_WORD(&(plci->ncpi_buffer[3]), ncpi_opt); in nl_ind()
6662 plci->ncpi_buffer[0] = 4; in nl_ind()
6664plci->ncpi_state |= NCPI_VALID_CONNECT_B3_IND | NCPI_VALID_CONNECT_B3_ACT | NCPI_VALID_DISC_B3_IND; in nl_ind()
6667 if (plci->B3_prot == 7) in nl_ind()
6670 && (plci->ncpi_state & NCPI_VALID_CONNECT_B3_ACT) in nl_ind()
6671 && !(plci->ncpi_state & NCPI_CONNECT_B3_ACT_SENT)) in nl_ind()
6674 sendf(plci->appl, _CONNECT_B3_ACTIVE_I, Id, 0, "S", plci->ncpi_buffer); in nl_ind()
6675 plci->ncpi_state |= NCPI_CONNECT_B3_ACT_SENT; in nl_ind()
6679 …if (!((plci->requested_options_conn | plci->requested_options | plci->adapter->requested_options_t… in nl_ind()
6685 plci->NL.RNR = 2; in nl_ind()
6690 if (plci->NL.complete == 2) in nl_ind()
6692 if (((plci->NL.Ind & 0x0f) == N_UDATA) in nl_ind()
6693 && !(udata_forwarding_table[plci->RData[0].P[0] >> 5] & (1L << (plci->RData[0].P[0] & 0x1f)))) in nl_ind()
6695 switch (plci->RData[0].P[0]) in nl_ind()
6699 if (plci->dtmf_rec_active & DTMF_LISTEN_ACTIVE_FLAG) in nl_ind()
6700 sendf(plci->appl, _FACILITY_I, Id & 0xffffL, 0, "ws", SELECTOR_DTMF, "\x01X"); in nl_ind()
6703 if (plci->dtmf_rec_active & DTMF_LISTEN_ACTIVE_FLAG) in nl_ind()
6704 sendf(plci->appl, _FACILITY_I, Id & 0xffffL, 0, "ws", SELECTOR_DTMF, "\x01Y"); in nl_ind()
6707 dtmf_indication(Id, plci, plci->RData[0].P, plci->RData[0].PLength); in nl_ind()
6710 dtmf_confirmation(Id, plci); in nl_ind()
6715 …capidtmf_recv_process_block(&(plci->capidtmf_state), plci->RData[0].P + 1, (word)(plci->RData[0].P… in nl_ind()
6716 i = capidtmf_indication(&(plci->capidtmf_state), dtmf_code_buffer + 1); in nl_ind()
6720 dtmf_indication(Id, plci, dtmf_code_buffer, (word)(i + 1)); in nl_ind()
6726 mixer_indication_coefs_set(Id, plci); in nl_ind()
6729 mixer_indication_xconnect_from(Id, plci, plci->RData[0].P, plci->RData[0].PLength); in nl_ind()
6732 mixer_indication_xconnect_to(Id, plci, plci->RData[0].P, plci->RData[0].PLength); in nl_ind()
6737 ec_indication(Id, plci, plci->RData[0].P, plci->RData[0].PLength); in nl_ind()
6748 if ((plci->RData[0].PLength != 0) in nl_ind()
6749 && ((plci->B2_prot == B2_V120_ASYNC) in nl_ind()
6750 || (plci->B2_prot == B2_V120_ASYNC_V42BIS) in nl_ind()
6751 || (plci->B2_prot == B2_V120_BIT_TRANSPARENT))) in nl_ind()
6754 sendf(plci->appl, _DATA_B3_I, Id, 0, in nl_ind()
6756 plci->RData[1].P, in nl_ind()
6757 (plci->NL.RNum < 2) ? 0 : plci->RData[1].PLength, in nl_ind()
6758 plci->RNum, in nl_ind()
6759 plci->RFlags); in nl_ind()
6765 sendf(plci->appl, _DATA_B3_I, Id, 0, in nl_ind()
6767 plci->RData[0].P, in nl_ind()
6768 plci->RData[0].PLength, in nl_ind()
6769 plci->RNum, in nl_ind()
6770 plci->RFlags); in nl_ind()
6778 if ((plci->NL.Ind & 0x0f) == N_CONNECT || in nl_ind()
6779 (plci->NL.Ind & 0x0f) == N_CONNECT_ACK || in nl_ind()
6780 (plci->NL.Ind & 0x0f) == N_DISC || in nl_ind()
6781 (plci->NL.Ind & 0x0f) == N_EDATA || in nl_ind()
6782 (plci->NL.Ind & 0x0f) == N_DISC_ACK) in nl_ind()
6785 plci->ncpi_buffer[0] = 0; in nl_ind()
6786 switch (plci->B3_prot) { in nl_ind()
6792 for (i = 0; i < plci->NL.RLength; i++) plci->ncpi_buffer[4 + i] = plci->NL.RBuffer->P[i]; in nl_ind()
6793 plci->ncpi_buffer[0] = (byte)(i + 3); in nl_ind()
6794 plci->ncpi_buffer[1] = (byte)(plci->NL.Ind & N_D_BIT ? 1 : 0); in nl_ind()
6795 plci->ncpi_buffer[2] = 0; in nl_ind()
6796 plci->ncpi_buffer[3] = 0; in nl_ind()
6800 if (plci->NL.RLength >= sizeof(T30_INFO)) in nl_ind()
6802 dbug(1, dprintf("FaxStatus %04x", ((T30_INFO *)plci->NL.RBuffer->P)->code)); in nl_ind()
6804 PUT_WORD(&(plci->ncpi_buffer[1]), ((T30_INFO *)plci->NL.RBuffer->P)->rate_div_2400 * 2400); in nl_ind()
6805 fax_feature_bits = GET_WORD(&((T30_INFO *)plci->NL.RBuffer->P)->feature_bits_low); in nl_ind()
6806 …i = (((T30_INFO *)plci->NL.RBuffer->P)->resolution & T30_RESOLUTION_R8_0770_OR_200) ? 0x0001 : 0x0… in nl_ind()
6807 if (plci->B3_prot == 5) in nl_ind()
6821 PUT_WORD(&(plci->ncpi_buffer[3]), i); in nl_ind()
6822 PUT_WORD(&(plci->ncpi_buffer[5]), ((T30_INFO *)plci->NL.RBuffer->P)->data_format); in nl_ind()
6823 plci->ncpi_buffer[7] = ((T30_INFO *)plci->NL.RBuffer->P)->pages_low; in nl_ind()
6824 plci->ncpi_buffer[8] = ((T30_INFO *)plci->NL.RBuffer->P)->pages_high; in nl_ind()
6825 plci->ncpi_buffer[len] = 0; in nl_ind()
6826 if (((T30_INFO *)plci->NL.RBuffer->P)->station_id_len) in nl_ind()
6828 plci->ncpi_buffer[len] = 20; in nl_ind()
6830 plci->ncpi_buffer[++len] = ((T30_INFO *)plci->NL.RBuffer->P)->station_id[i]; in nl_ind()
6832 if (((plci->NL.Ind & 0x0f) == N_DISC) || ((plci->NL.Ind & 0x0f) == N_DISC_ACK)) in nl_ind()
6834 if (((T30_INFO *)plci->NL.RBuffer->P)->code < ARRAY_SIZE(fax_info)) in nl_ind()
6835 info = fax_info[((T30_INFO *)plci->NL.RBuffer->P)->code]; in nl_ind()
6840 …if ((plci->requested_options_conn | plci->requested_options | a->requested_options_table[plci->app… in nl_ind()
6843 …i = offsetof(T30_INFO, station_id) + T30_MAX_STATION_ID_LENGTH + ((T30_INFO *)plci->NL.RBuffer->P)… in nl_ind()
6844 while (i < plci->NL.RBuffer->length) in nl_ind()
6845 plci->ncpi_buffer[++len] = plci->NL.RBuffer->P[i++]; in nl_ind()
6848 plci->ncpi_buffer[0] = len; in nl_ind()
6849 fax_feature_bits = GET_WORD(&((T30_INFO *)plci->NL.RBuffer->P)->feature_bits_low); in nl_ind()
6850 PUT_WORD(&((T30_INFO *)plci->fax_connect_info_buffer)->feature_bits_low, fax_feature_bits); in nl_ind()
6852 plci->ncpi_state |= NCPI_VALID_CONNECT_B3_IND; in nl_ind()
6853 if (((plci->NL.Ind & 0x0f) == N_CONNECT_ACK) in nl_ind()
6854 || (((plci->NL.Ind & 0x0f) == N_CONNECT) in nl_ind()
6856 || (((plci->NL.Ind & 0x0f) == N_EDATA) in nl_ind()
6857 && ((((T30_INFO *)plci->NL.RBuffer->P)->code == EDATA_T30_TRAIN_OK) in nl_ind()
6858 || (((T30_INFO *)plci->NL.RBuffer->P)->code == EDATA_T30_DIS) in nl_ind()
6859 || (((T30_INFO *)plci->NL.RBuffer->P)->code == EDATA_T30_DTC)))) in nl_ind()
6861 plci->ncpi_state |= NCPI_VALID_CONNECT_B3_ACT; in nl_ind()
6863 if (((plci->NL.Ind & 0x0f) == N_DISC) in nl_ind()
6864 || ((plci->NL.Ind & 0x0f) == N_DISC_ACK) in nl_ind()
6865 || (((plci->NL.Ind & 0x0f) == N_EDATA) in nl_ind()
6866 && (((T30_INFO *)plci->NL.RBuffer->P)->code == EDATA_T30_EOP_CAPI))) in nl_ind()
6868 plci->ncpi_state |= NCPI_VALID_CONNECT_B3_ACT | NCPI_VALID_DISC_B3_IND; in nl_ind()
6874 if (((plci->NL.Ind & 0x0f) == N_DISC) || ((plci->NL.Ind & 0x0f) == N_DISC_ACK)) in nl_ind()
6876 if (plci->NL.RLength != 0) in nl_ind()
6878 info = rtp_info[plci->NL.RBuffer->P[0]]; in nl_ind()
6879 plci->ncpi_buffer[0] = plci->NL.RLength - 1; in nl_ind()
6880 for (i = 1; i < plci->NL.RLength; i++) in nl_ind()
6881 plci->ncpi_buffer[i] = plci->NL.RBuffer->P[i]; in nl_ind()
6887 plci->NL.RNR = 2; in nl_ind()
6889 switch (plci->NL.Ind & 0x0f) { in nl_ind()
6891 if ((plci->B3_prot == 4) || (plci->B3_prot == 5)) in nl_ind()
6894 ((T30_INFO *)plci->NL.RBuffer->P)->code)); in nl_ind()
6895 …fax_send_edata_ack = (((T30_INFO *)(plci->fax_connect_info_buffer))->operating_mode == T30_OPERATI… in nl_ind()
6897 if ((plci->nsf_control_bits & T30_NSF_CONTROL_BIT_ENABLE_NSF) in nl_ind()
6898 …&& (plci->nsf_control_bits & (T30_NSF_CONTROL_BIT_NEGOTIATE_IND | T30_NSF_CONTROL_BIT_NEGOTIATE_RE… in nl_ind()
6899 && (((T30_INFO *)plci->NL.RBuffer->P)->code == EDATA_T30_DIS) in nl_ind()
6901 && (plci->ncpi_state & NCPI_VALID_CONNECT_B3_ACT) in nl_ind()
6902 && !(plci->ncpi_state & NCPI_NEGOTIATE_B3_SENT)) in nl_ind()
6904 ((T30_INFO *)(plci->fax_connect_info_buffer))->code = ((T30_INFO *)plci->NL.RBuffer->P)->code; in nl_ind()
6905 sendf(plci->appl, _MANUFACTURER_I, Id, 0, "dwbS", _DI_MANU_ID, _DI_NEGOTIATE_B3, in nl_ind()
6906 (byte)(plci->ncpi_buffer[0] + 1), plci->ncpi_buffer); in nl_ind()
6907 plci->ncpi_state |= NCPI_NEGOTIATE_B3_SENT; in nl_ind()
6908 if (plci->nsf_control_bits & T30_NSF_CONTROL_BIT_NEGOTIATE_RESP) in nl_ind()
6914 switch (((T30_INFO *)plci->NL.RBuffer->P)->code) in nl_ind()
6918 …&& !(GET_WORD(&((T30_INFO *)plci->fax_connect_info_buffer)->control_bits_low) & T30_CONTROL_BIT_RE… in nl_ind()
6919 && (plci->ncpi_state & NCPI_VALID_CONNECT_B3_ACT) in nl_ind()
6920 && !(plci->ncpi_state & NCPI_CONNECT_B3_ACT_SENT)) in nl_ind()
6923 if (plci->B3_prot == 4) in nl_ind()
6924 sendf(plci->appl, _CONNECT_B3_ACTIVE_I, Id, 0, "s", ""); in nl_ind()
6926 sendf(plci->appl, _CONNECT_B3_ACTIVE_I, Id, 0, "S", plci->ncpi_buffer); in nl_ind()
6927 plci->ncpi_state |= NCPI_CONNECT_B3_ACT_SENT; in nl_ind()
6933 && (plci->ncpi_state & NCPI_VALID_CONNECT_B3_ACT) in nl_ind()
6934 && !(plci->ncpi_state & NCPI_CONNECT_B3_ACT_SENT)) in nl_ind()
6936 if (plci->B3_prot == 4) in nl_ind()
6937 sendf(plci->appl, _CONNECT_B3_ACTIVE_I, Id, 0, "s", ""); in nl_ind()
6939 sendf(plci->appl, _CONNECT_B3_ACTIVE_I, Id, 0, "S", plci->ncpi_buffer); in nl_ind()
6940 plci->ncpi_state |= NCPI_CONNECT_B3_ACT_SENT; in nl_ind()
6947 sendf(plci->appl, _DISCONNECT_B3_I, Id, 0, "wS", GOOD, plci->ncpi_buffer); in nl_ind()
6949 plci->ncpi_state = 0; in nl_ind()
6957 switch (((T30_INFO *)plci->NL.RBuffer->P)->code) in nl_ind()
6961 && (plci->ncpi_state & NCPI_VALID_CONNECT_B3_ACT) in nl_ind()
6962 && !(plci->ncpi_state & NCPI_CONNECT_B3_ACT_SENT)) in nl_ind()
6964 if (plci->B3_prot == 4) in nl_ind()
6965 sendf(plci->appl, _CONNECT_B3_ACTIVE_I, Id, 0, "s", ""); in nl_ind()
6967 sendf(plci->appl, _CONNECT_B3_ACTIVE_I, Id, 0, "S", plci->ncpi_buffer); in nl_ind()
6968 plci->ncpi_state |= NCPI_CONNECT_B3_ACT_SENT; in nl_ind()
6975 ((T30_INFO *)(plci->fax_connect_info_buffer))->code = ((T30_INFO *)plci->NL.RBuffer->P)->code; in nl_ind()
6976 plci->fax_edata_ack_length = 1; in nl_ind()
6977 start_internal_command(Id, plci, fax_edata_ack_command); in nl_ind()
6988 ncci = get_ncci(plci, ch, 0); in nl_ind()
6992 ch, a->ncci_state[ncci], a->ncci_plci[ncci], plci->Id, plci->State)); in nl_ind()
6996 plci->channels++; in nl_ind()
6997 else if (plci->B3_prot == 1) in nl_ind()
7001 if (plci->B3_prot == 4) in nl_ind()
7002 sendf(plci->appl, msg, Id, 0, "s", ""); in nl_ind()
7004 sendf(plci->appl, msg, Id, 0, "S", plci->ncpi_buffer); in nl_ind()
7008 if (plci->internal_command_queue[0] in nl_ind()
7009 && ((plci->adjust_b_state == ADJUST_B_CONNECT_2) in nl_ind()
7010 || (plci->adjust_b_state == ADJUST_B_CONNECT_3) in nl_ind()
7011 || (plci->adjust_b_state == ADJUST_B_CONNECT_4))) in nl_ind()
7013 (*(plci->internal_command_queue[0]))(Id, plci, 0); in nl_ind()
7014 if (!plci->internal_command) in nl_ind()
7015 next_internal_command(Id, plci); in nl_ind()
7019 if (plci->B3_prot == 1) in nl_ind()
7024 sendf(plci->appl, msg, Id, 0, "S", plci->ncpi_buffer); in nl_ind()
7026 else if ((plci->B3_prot == 4) || (plci->B3_prot == 5) || (plci->B3_prot == 7)) in nl_ind()
7029 && (plci->ncpi_state & NCPI_VALID_CONNECT_B3_ACT) in nl_ind()
7030 && !(plci->ncpi_state & NCPI_CONNECT_B3_ACT_SENT)) in nl_ind()
7033 if (plci->B3_prot == 4) in nl_ind()
7034 sendf(plci->appl, msg, Id, 0, "s", ""); in nl_ind()
7036 sendf(plci->appl, msg, Id, 0, "S", plci->ncpi_buffer); in nl_ind()
7037 plci->ncpi_state |= NCPI_CONNECT_B3_ACT_SENT; in nl_ind()
7043 sendf(plci->appl, msg, Id, 0, "S", plci->ncpi_buffer); in nl_ind()
7045 if (plci->adjust_b_restore) in nl_ind()
7047 plci->adjust_b_restore = false; in nl_ind()
7048 start_internal_command(Id, plci, adjust_b_restore); in nl_ind()
7053 if (plci->internal_command_queue[0] in nl_ind()
7054 && ((plci->internal_command == FAX_DISCONNECT_COMMAND_1) in nl_ind()
7055 || (plci->internal_command == FAX_DISCONNECT_COMMAND_2) in nl_ind()
7056 || (plci->internal_command == FAX_DISCONNECT_COMMAND_3))) in nl_ind()
7058 (*(plci->internal_command_queue[0]))(Id, plci, 0); in nl_ind()
7059 if (!plci->internal_command) in nl_ind()
7060 next_internal_command(Id, plci); in nl_ind()
7063 ncci_remove(plci, ncci, false); in nl_ind()
7069 for (i = 0; plci->inc_dis_ncci_table[i]; i++); in nl_ind()
7070 plci->inc_dis_ncci_table[i] = (byte) ncci; in nl_ind()
7073 if (!plci->channels in nl_ind()
7074 && (plci->B1_resource == 16) in nl_ind()
7075 && (plci->State <= CONNECTED)) in nl_ind()
7078 i = ((T30_INFO *)plci->fax_connect_info_buffer)->rate_div_2400 * 2400; in nl_ind()
7079 PUT_WORD(&plci->ncpi_buffer[1], i); in nl_ind()
7080 PUT_WORD(&plci->ncpi_buffer[3], 0); in nl_ind()
7081 i = ((T30_INFO *)plci->fax_connect_info_buffer)->data_format; in nl_ind()
7082 PUT_WORD(&plci->ncpi_buffer[5], i); in nl_ind()
7083 PUT_WORD(&plci->ncpi_buffer[7], 0); in nl_ind()
7084 plci->ncpi_buffer[len] = 0; in nl_ind()
7085 plci->ncpi_buffer[0] = len; in nl_ind()
7086 if (plci->B3_prot == 4) in nl_ind()
7087 sendf(plci->appl, _CONNECT_B3_I, Id, 0, "s", ""); in nl_ind()
7091 …if ((plci->requested_options_conn | plci->requested_options | a->requested_options_table[plci->app… in nl_ind()
7094 plci->ncpi_buffer[++len] = 0; in nl_ind()
7095 plci->ncpi_buffer[++len] = 0; in nl_ind()
7096 plci->ncpi_buffer[++len] = 0; in nl_ind()
7097 plci->ncpi_buffer[0] = len; in nl_ind()
7100 sendf(plci->appl, _CONNECT_B3_I, Id, 0, "S", plci->ncpi_buffer); in nl_ind()
7102 sendf(plci->appl, _DISCONNECT_B3_I, Id, 0, "wS", info, plci->ncpi_buffer); in nl_ind()
7103 plci->ncpi_state = 0; in nl_ind()
7104 sig_req(plci, HANGUP, 0); in nl_ind()
7105 send_req(plci); in nl_ind()
7106 plci->State = OUTG_DIS_PENDING; in nl_ind()
7110 && ((plci->B3_prot == 4) || (plci->B3_prot == 5)) in nl_ind()
7115 if (plci->channels) in nl_ind()
7116 plci->channels--; in nl_ind()
7117 if ((plci->State == IDLE || plci->State == SUSPENDING) && !plci->channels) { in nl_ind()
7118 if (plci->State == SUSPENDING) { in nl_ind()
7119 sendf(plci->appl, in nl_ind()
7124 sendf(plci->appl, _DISCONNECT_I, Id & 0xffffL, 0, "w", 0); in nl_ind()
7126 plci_remove(plci); in nl_ind()
7127 plci->State = IDLE; in nl_ind()
7131 else if (plci->channels) in nl_ind()
7133 sendf(plci->appl, _DISCONNECT_B3_I, Id, 0, "wS", info, plci->ncpi_buffer); in nl_ind()
7134 plci->ncpi_state = 0; in nl_ind()
7136 …&& ((plci->B3_prot != B3_T90NL) && (plci->B3_prot != B3_ISO8208) && (plci->B3_prot != B3_X25_DCE))) in nl_ind()
7138 sig_req(plci, HANGUP, 0); in nl_ind()
7139 send_req(plci); in nl_ind()
7140 plci->State = OUTG_DIS_PENDING; in nl_ind()
7146 sendf(plci->appl, _RESET_B3_I, Id, 0, "S", plci->ncpi_buffer); in nl_ind()
7150 sendf(plci->appl, _RESET_B3_I, Id, 0, "S", plci->ncpi_buffer); in nl_ind()
7154 …if (!(udata_forwarding_table[plci->NL.RBuffer->P[0] >> 5] & (1L << (plci->NL.RBuffer->P[0] & 0x1f)… in nl_ind()
7156 plci->RData[0].P = plci->internal_ind_buffer + (-((int)(long)(plci->internal_ind_buffer)) & 3); in nl_ind()
7157 plci->RData[0].PLength = INTERNAL_IND_BUFFER_SIZE; in nl_ind()
7158 plci->NL.R = plci->RData; in nl_ind()
7159 plci->NL.RNum = 1; in nl_ind()
7164 if (((a->ncci_state[ncci] != CONNECTED) && (plci->B2_prot == 1)) /* transparent */ in nl_ind()
7168 plci->NL.RNR = 2; in nl_ind()
7176 plci->NL.RNR = 1; /* flow control */ in nl_ind()
7177 channel_x_off(plci, ch, 0); in nl_ind()
7197 plci->NL.RNR = 1; in nl_ind()
7201 plci->NL.RNR = 2; in nl_ind()
7204 channel_x_off(plci, ch, 0); in nl_ind()
7213 plci->RData[0].P = ReceiveBufferGet(APPLptr, Num); in nl_ind()
7214 if (!plci->RData[0].P) { in nl_ind()
7215 plci->NL.RNR = 1; in nl_ind()
7216 channel_x_off(plci, ch, 0); in nl_ind()
7221 APPLptr->DataFlags[Num] = (plci->Id << 8) | (plci->NL.Ind >> 4); in nl_ind()
7224 plci->RNum = Num; in nl_ind()
7225 plci->RFlags = plci->NL.Ind >> 4; in nl_ind()
7226 plci->RData[0].PLength = APPLptr->MaxDataLength; in nl_ind()
7227 plci->NL.R = plci->RData; in nl_ind()
7228 if ((plci->NL.RLength != 0) in nl_ind()
7229 && ((plci->B2_prot == B2_V120_ASYNC) in nl_ind()
7230 || (plci->B2_prot == B2_V120_ASYNC_V42BIS) in nl_ind()
7231 || (plci->B2_prot == B2_V120_BIT_TRANSPARENT))) in nl_ind()
7233 plci->RData[1].P = plci->RData[0].P; in nl_ind()
7234 plci->RData[1].PLength = plci->RData[0].PLength; in nl_ind()
7235 plci->RData[0].P = v120_header_buffer + (-((unsigned long)v120_header_buffer) & 3); in nl_ind()
7236 if ((plci->NL.RBuffer->P[0] & V120_HEADER_EXTEND_BIT) || (plci->NL.RLength == 1)) in nl_ind()
7237 plci->RData[0].PLength = 1; in nl_ind()
7239 plci->RData[0].PLength = 2; in nl_ind()
7240 if (plci->NL.RBuffer->P[0] & V120_HEADER_BREAK_BIT) in nl_ind()
7241 plci->RFlags |= 0x0010; in nl_ind()
7242 if (plci->NL.RBuffer->P[0] & (V120_HEADER_C1_BIT | V120_HEADER_C2_BIT)) in nl_ind()
7243 plci->RFlags |= 0x8000; in nl_ind()
7244 plci->NL.RNum = 2; in nl_ind()
7248 if ((plci->NL.Ind & 0x0f) == N_UDATA) in nl_ind()
7249 plci->RFlags |= 0x0010; in nl_ind()
7251 else if ((plci->B3_prot == B3_RTP) && ((plci->NL.Ind & 0x0f) == N_BDATA)) in nl_ind()
7252 plci->RFlags |= 0x0001; in nl_ind()
7254 plci->NL.RNum = 1; in nl_ind()
7258 data_ack(plci, ch); in nl_ind()
7261 plci->NL.RNR = 2; in nl_ind()
7273 PLCI *plci; in get_plci() local
7276 for (i = 0; i < a->max_plci && a->plci[i].Id; i++); in get_plci()
7281 plci = &a->plci[i]; in get_plci()
7282 plci->Id = (byte)(i + 1); in get_plci()
7284 plci->Sig.Id = 0; in get_plci()
7285 plci->NL.Id = 0; in get_plci()
7286 plci->sig_req = 0; in get_plci()
7287 plci->nl_req = 0; in get_plci()
7289 plci->appl = NULL; in get_plci()
7290 plci->relatedPTYPLCI = NULL; in get_plci()
7291 plci->State = IDLE; in get_plci()
7292 plci->SuppState = IDLE; in get_plci()
7293 plci->channels = 0; in get_plci()
7294 plci->tel = 0; in get_plci()
7295 plci->B1_resource = 0; in get_plci()
7296 plci->B2_prot = 0; in get_plci()
7297 plci->B3_prot = 0; in get_plci()
7299 plci->command = 0; in get_plci()
7300 plci->m_command = 0; in get_plci()
7301 init_internal_command_queue(plci); in get_plci()
7302 plci->number = 0; in get_plci()
7303 plci->req_in_start = 0; in get_plci()
7304 plci->req_in = 0; in get_plci()
7305 plci->req_out = 0; in get_plci()
7306 plci->msg_in_write_pos = MSG_IN_QUEUE_SIZE; in get_plci()
7307 plci->msg_in_read_pos = MSG_IN_QUEUE_SIZE; in get_plci()
7308 plci->msg_in_wrap_pos = MSG_IN_QUEUE_SIZE; in get_plci()
7310 plci->data_sent = false; in get_plci()
7311 plci->send_disc = 0; in get_plci()
7312 plci->sig_global_req = 0; in get_plci()
7313 plci->sig_remove_id = 0; in get_plci()
7314 plci->nl_global_req = 0; in get_plci()
7315 plci->nl_remove_id = 0; in get_plci()
7316 plci->adv_nl = 0; in get_plci()
7317 plci->manufacturer = false; in get_plci()
7318 plci->call_dir = CALL_DIR_OUT | CALL_DIR_ORIGINATE; in get_plci()
7319 plci->spoofed_msg = 0; in get_plci()
7320 plci->ptyState = 0; in get_plci()
7321 plci->cr_enquiry = false; in get_plci()
7322 plci->hangup_flow_ctrl_timer = 0; in get_plci()
7324 plci->ncci_ring_list = 0; in get_plci()
7325 for (j = 0; j < MAX_CHANNELS_PER_PLCI; j++) plci->inc_dis_ncci_table[j] = 0; in get_plci()
7326 clear_c_ind_mask(plci); in get_plci()
7327 set_group_ind_mask(plci); in get_plci()
7328 plci->fax_connect_info_length = 0; in get_plci()
7329 plci->nsf_control_bits = 0; in get_plci()
7330 plci->ncpi_state = 0x00; in get_plci()
7331 plci->ncpi_buffer[0] = 0; in get_plci()
7333 plci->requested_options_conn = 0; in get_plci()
7334 plci->requested_options = 0; in get_plci()
7335 plci->notifiedcall = 0; in get_plci()
7336 plci->vswitchstate = 0; in get_plci()
7337 plci->vsprot = 0; in get_plci()
7338 plci->vsprotdialect = 0; in get_plci()
7339 init_b1_config(plci); in get_plci()
7340 dbug(1, dprintf("get_plci(%x)", plci->Id)); in get_plci()
7348 static void add_p(PLCI *plci, byte code, byte *p) in add_p() argument
7354 add_ie(plci, code, p, p_length); in add_p()
7360 static void add_s(PLCI *plci, byte code, API_PARSE *p) in add_s() argument
7362 if (p) add_ie(plci, code, p->info, (word)p->length); in add_s()
7368 static void add_ss(PLCI *plci, byte code, API_PARSE *p) in add_ss() argument
7376 add_ie(plci, p->info[i - 1], (byte *)&(p->info[i]), (word)p->info[i]); in add_ss()
7403 static void add_ie(PLCI *plci, byte code, byte *p, word p_length) in add_ie() argument
7409 if (plci->req_in == plci->req_in_start) { in add_ie()
7410 plci->req_in += 2; in add_ie()
7413 plci->req_in--; in add_ie()
7415 plci->RBuffer[plci->req_in++] = code; in add_ie()
7418 plci->RBuffer[plci->req_in++] = (byte)p_length; in add_ie()
7419 for (i = 0; i < p_length; i++) plci->RBuffer[plci->req_in++] = p[1 + i]; in add_ie()
7422 plci->RBuffer[plci->req_in++] = 0; in add_ie()
7429 static void add_d(PLCI *plci, word length, byte *p) in add_d() argument
7433 if (plci->req_in == plci->req_in_start) { in add_d()
7434 plci->req_in += 2; in add_d()
7437 plci->req_in--; in add_d()
7439 for (i = 0; i < length; i++) plci->RBuffer[plci->req_in++] = p[i]; in add_d()
7447 static void add_ai(PLCI *plci, API_PARSE *ai) in add_ai() argument
7459 add_s(plci, KEY, &ai_parms[1]); in add_ai()
7460 add_s(plci, UUI, &ai_parms[2]); in add_ai()
7461 add_ss(plci, FTY, &ai_parms[3]); in add_ai()
7468 static word add_b1(PLCI *plci, API_PARSE *bp, word b_channel_info, in add_b1() argument
7488 api_save_msg(bp, "s", &plci->B_protocol); in add_b1()
7491 plci->B1_resource = 0; in add_b1()
7492 adjust_b1_facilities(plci, plci->B1_resource, b1_facilities); in add_b1()
7493 add_p(plci, CAI, "\x01\x00"); in add_b1()
7498 if (plci->tel == CODEC_PERMANENT) return 0; in add_b1()
7499 else if (plci->tel == CODEC) { in add_b1()
7500 plci->B1_resource = 1; in add_b1()
7501 adjust_b1_facilities(plci, plci->B1_resource, b1_facilities); in add_b1()
7502 add_p(plci, CAI, "\x01\x01"); in add_b1()
7506 else if (plci->tel == ADV_VOICE) { in add_b1()
7507 plci->B1_resource = add_b1_facilities(plci, 9, (word)(b1_facilities | B1_FACILITY_VOICE)); in add_b1()
7508 adjust_b1_facilities(plci, plci->B1_resource, (word)(b1_facilities | B1_FACILITY_VOICE)); in add_b1()
7509 voice_cai[1] = plci->B1_resource; in add_b1()
7510 PUT_WORD(&voice_cai[5], plci->appl->MaxDataLength); in add_b1()
7511 add_p(plci, CAI, voice_cai); in add_b1()
7515 plci->call_dir &= ~(CALL_DIR_ORIGINATE | CALL_DIR_ANSWER); in add_b1()
7516 if (plci->call_dir & CALL_DIR_OUT) in add_b1()
7517 plci->call_dir |= CALL_DIR_ORIGINATE; in add_b1()
7518 else if (plci->call_dir & CALL_DIR_IN) in add_b1()
7519 plci->call_dir |= CALL_DIR_ANSWER; in add_b1()
7522 plci->B1_resource = 0x5; in add_b1()
7523 adjust_b1_facilities(plci, plci->B1_resource, b1_facilities); in add_b1()
7524 add_p(plci, CAI, "\x01\x05"); in add_b1()
7554 plci->call_dir = (plci->call_dir & ~CALL_DIR_ANSWER) | CALL_DIR_ORIGINATE; in add_b1()
7557 plci->call_dir = (plci->call_dir & ~CALL_DIR_ORIGINATE) | CALL_DIR_ANSWER; in add_b1()
7561 dbug(1, dprintf("call_dir=%04x", plci->call_dir)); in add_b1()
7565 && (plci->adapter->man_profile.private_options & (1L << PRIVATE_RTP))) in add_b1()
7567 plci->B1_resource = add_b1_facilities(plci, 31, (word)(b1_facilities & ~B1_FACILITY_VOICE)); in add_b1()
7568 adjust_b1_facilities(plci, plci->B1_resource, (word)(b1_facilities & ~B1_FACILITY_VOICE)); in add_b1()
7569 cai[1] = plci->B1_resource; in add_b1()
7573 PUT_WORD(&cai[5], plci->appl->MaxDataLength); in add_b1()
7577 add_p(plci, CAI, cai); in add_b1()
7583 && (plci->adapter->man_profile.private_options & (1L << PRIVATE_PIAFS))) in add_b1()
7585plci->B1_resource = add_b1_facilities(plci, 35/* PIAFS HARDWARE FACILITY */, (word)(b1_facilities … in add_b1()
7586 adjust_b1_facilities(plci, plci->B1_resource, (word)(b1_facilities & ~B1_FACILITY_VOICE)); in add_b1()
7587 cai[1] = plci->B1_resource; in add_b1()
7591 PUT_WORD(&cai[5], plci->appl->MaxDataLength); in add_b1()
7593 add_p(plci, CAI, cai); in add_b1()
7599 || (!((1L << GET_WORD(bp_parms[0].info)) & plci->adapter->profile.B1_Protocols) in add_b1()
7601 || !((1L << B1_HDLC) & plci->adapter->profile.B1_Protocols) in add_b1()
7606 plci->B1_resource = add_b1_facilities(plci, resource[GET_WORD(bp_parms[0].info)], in add_b1()
7608 adjust_b1_facilities(plci, plci->B1_resource, (word)(b1_facilities & ~B1_FACILITY_VOICE)); in add_b1()
7610 cai[1] = plci->B1_resource; in add_b1()
7691 if (((plci->call_dir & CALL_DIR_ORIGINATE) != 0) ^ ((plci->call_dir & CALL_DIR_OUT) != 0)) in add_b1()
7737 if ((plci->adapter->man_profile.private_options & (1L << PRIVATE_V18)) in add_b1()
7740 plci->requested_options |= 1L << PRIVATE_V18; in add_b1()
7743 plci->requested_options |= 1L << PRIVATE_VOWN; in add_b1()
7745 …if ((plci->requested_options_conn | plci->requested_options | plci->adapter->requested_options_tab… in add_b1()
7921 PUT_WORD(&cai[5], plci->appl->MaxDataLength); in add_b1()
7925 add_p(plci, CAI, cai); in add_b1()
7933 static word add_b23(PLCI *plci, API_PARSE *bp) in add_b23() argument
7963 if (plci->adapter->manufacturer_features & MANUFACTURER_FEATURE_XONOFF_FLOW_CONTROL) in add_b23()
7965 if (plci->adapter->manufacturer_features & MANUFACTURER_FEATURE_OOB_CHANNEL) in add_b23()
7970 if (plci->rx_dma_descriptor <= 0) { in add_b23()
7971 plci->rx_dma_descriptor = diva_get_dma_descriptor(plci, &plci->rx_dma_magic); in add_b23()
7972 if (plci->rx_dma_descriptor >= 0) in add_b23()
7973 plci->rx_dma_descriptor++; in add_b23()
7975 if (plci->rx_dma_descriptor > 0) { in add_b23()
7978 lli[2] = (byte)(plci->rx_dma_descriptor - 1); in add_b23()
7979 lli[3] = (byte)plci->rx_dma_magic; in add_b23()
7980 lli[4] = (byte)(plci->rx_dma_magic >> 8); in add_b23()
7981 lli[5] = (byte)(plci->rx_dma_magic >> 16); in add_b23()
7982 lli[6] = (byte)(plci->rx_dma_magic >> 24); in add_b23()
7986 if (DIVA_CAPI_SUPPORTS_NO_CANCEL(plci->adapter)) { in add_b23()
7991 api_save_msg(bp, "s", &plci->B_protocol); in add_b23()
7993 if (!bp->length && plci->tel) in add_b23()
7995 plci->adv_nl = true; in add_b23()
7997 add_p(plci, LLI, lli); in add_b23()
7998 plci->B2_prot = 1 /*XPARENT*/; in add_b23()
7999 plci->B3_prot = 0 /*XPARENT*/; in add_b23()
8002 add_p(plci, LLC, llc); in add_b23()
8004 PUT_WORD(&dlc[1], plci->appl->MaxDataLength); in add_b23()
8005 add_p(plci, DLC, dlc); in add_b23()
8012 add_p(plci, LLI, lli); in add_b23()
8013 plci->B2_prot = 0 /*X.75 */; in add_b23()
8014 plci->B3_prot = 0 /*XPARENT*/; in add_b23()
8017 add_p(plci, LLC, llc); in add_b23()
8019 PUT_WORD(&dlc[1], plci->appl->MaxDataLength); in add_b23()
8020 add_p(plci, DLC, dlc); in add_b23()
8041 if (plci->tel == ADV_VOICE) /* transparent B on advanced voice */ in add_b23()
8045 plci->adv_nl = true; in add_b23()
8047 else if (plci->tel) return _B2_NOT_SUPPORTED; in add_b23()
8052 && (plci->adapter->man_profile.private_options & (1L << PRIVATE_RTP))) in add_b23()
8054 add_p(plci, LLI, lli); in add_b23()
8055 plci->B2_prot = (byte) GET_WORD(bp_parms[1].info); in add_b23()
8056 plci->B3_prot = (byte) GET_WORD(bp_parms[2].info); in add_b23()
8057 llc[1] = (plci->call_dir & (CALL_DIR_ORIGINATE | CALL_DIR_FORCE_OUTG_NL)) ? 14 : 13; in add_b23()
8059 add_p(plci, LLC, llc); in add_b23()
8061 PUT_WORD(&dlc[1], plci->appl->MaxDataLength); in add_b23()
8071 add_p(plci, DLC, dlc); in add_b23()
8075 add_p(plci, NLC, nlc); in add_b23()
8082 || (!((1L << GET_WORD(bp_parms[1].info)) & plci->adapter->profile.B2_Protocols) in add_b23()
8084 || !(plci->adapter->man_profile.private_options & (1L << PRIVATE_PIAFS))))) in add_b23()
8090 || !((1L << GET_WORD(bp_parms[2].info)) & plci->adapter->profile.B3_Protocols)) in add_b23()
8099 return (add_modem_b23(plci, bp_parms)); in add_b23()
8102 add_p(plci, LLI, lli); in add_b23()
8104 plci->B2_prot = (byte)GET_WORD(bp_parms[1].info); in add_b23()
8105 plci->B3_prot = (byte)GET_WORD(bp_parms[2].info); in add_b23()
8106 if (plci->B2_prot == 12) SAPI = 0; /* default SAPI D-channel */ in add_b23()
8117 plci->call_dir = (plci->call_dir & ~CALL_DIR_ANSWER) | CALL_DIR_ORIGINATE; in add_b23()
8120 plci->call_dir = (plci->call_dir & ~CALL_DIR_ORIGINATE) | CALL_DIR_ANSWER; in add_b23()
8124 dbug(1, dprintf("call_dir=%04x", plci->call_dir)); in add_b23()
8127 if (plci->B2_prot == B2_PIAFS) in add_b23()
8132 llc[1] = (plci->call_dir & (CALL_DIR_ORIGINATE | CALL_DIR_FORCE_OUTG_NL)) ? in add_b23()
8137 add_p(plci, LLC, llc); in add_b23()
8140 PUT_WORD(&dlc[1], plci->appl->MaxDataLength + in add_b23()
8145 if (plci->B3_prot == 4 in add_b23()
8146 || plci->B3_prot == 5) in add_b23()
8150 if (plci->adapter->manufacturer_features & MANUFACTURER_FEATURE_FAX_PAPER_FORMATS) in add_b23()
8163 if (plci->B3_prot != B3_TRANSPARENT) in add_b23()
8170 PUT_WORD(&dlc[1], plci->appl->MaxDataLength); in add_b23()
8207 add_p(plci, DLC, dlc); in add_b23()
8213 if (plci->B3_prot != B3_TRANSPARENT) in add_b23()
8280 if ((b2_config->length >= 2) && (plci->B2_prot == 12)) in add_b23()
8344 add_p(plci, DLC, dlc); in add_b23()
8349 if (plci->B3_prot == 4 in add_b23()
8350 || plci->B3_prot == 5) in add_b23()
8358 …((plci->B3_prot == 4) && (((byte)(GET_WORD((byte *)b3_config_parms[1].info))) != 5))) ? T30_RESOLU… in add_b23()
8363 if (plci->adapter->manufacturer_features & MANUFACTURER_FEATURE_FAX_PAPER_FORMATS) in add_b23()
8366 …if ((plci->requested_options_conn | plci->requested_options | plci->adapter->requested_options_tab… in add_b23()
8379 if (plci->B3_prot == 5) in add_b23()
8389 if (plci->fax_connect_info_length != 0) in add_b23()
8391 ((T30_INFO *)&nlc[1])->resolution = ((T30_INFO *)plci->fax_connect_info_buffer)->resolution; in add_b23()
8392 ((T30_INFO *)&nlc[1])->data_format = ((T30_INFO *)plci->fax_connect_info_buffer)->data_format; in add_b23()
8393 …((T30_INFO *)&nlc[1])->recording_properties = ((T30_INFO *)plci->fax_connect_info_buffer)->recordi… in add_b23()
8394 fax_control_bits |= GET_WORD(&((T30_INFO *)plci->fax_connect_info_buffer)->control_bits_low) & in add_b23()
8447 plci->nsf_control_bits = 0; in add_b23()
8448 if (plci->B3_prot == 5) in add_b23()
8450 if ((plci->adapter->man_profile.private_options & (1L << PRIVATE_FAX_SUB_SEP_PWD)) in add_b23()
8453 plci->requested_options |= 1L << PRIVATE_FAX_SUB_SEP_PWD; in add_b23()
8455 if ((plci->adapter->man_profile.private_options & (1L << PRIVATE_FAX_NONSTANDARD)) in add_b23()
8458 plci->requested_options |= 1L << PRIVATE_FAX_NONSTANDARD; in add_b23()
8460 …if ((plci->requested_options_conn | plci->requested_options | plci->adapter->requested_options_tab… in add_b23()
8463 …if ((plci->requested_options_conn | plci->requested_options | plci->adapter->requested_options_tab… in add_b23()
8472 if (pos < plci->fax_connect_info_length) in add_b23()
8474 for (i = 1 + plci->fax_connect_info_buffer[pos]; i != 0; i--) in add_b23()
8475 nlc[++len] = plci->fax_connect_info_buffer[pos++]; in add_b23()
8479 if (pos < plci->fax_connect_info_length) in add_b23()
8481 for (i = 1 + plci->fax_connect_info_buffer[pos]; i != 0; i--) in add_b23()
8482 nlc[++len] = plci->fax_connect_info_buffer[pos++]; in add_b23()
8486 …if ((plci->requested_options_conn | plci->requested_options | plci->adapter->requested_options_tab… in add_b23()
8489 if ((pos < plci->fax_connect_info_length) && (plci->fax_connect_info_buffer[pos] != 0)) in add_b23()
8491 … if ((plci->fax_connect_info_buffer[pos] >= 3) && (plci->fax_connect_info_buffer[pos + 1] >= 2)) in add_b23()
8492 plci->nsf_control_bits = GET_WORD(&plci->fax_connect_info_buffer[pos + 2]); in add_b23()
8493 for (i = 1 + plci->fax_connect_info_buffer[pos]; i != 0; i--) in add_b23()
8494 nlc[++len] = plci->fax_connect_info_buffer[pos++]; in add_b23()
8506 plci->nsf_control_bits = GET_WORD(&b3_config_parms[4].info[2]); in add_b23()
8514 if ((plci->nsf_control_bits & T30_NSF_CONTROL_BIT_ENABLE_NSF) in add_b23()
8515 && (plci->nsf_control_bits & T30_NSF_CONTROL_BIT_NEGOTIATE_RESP)) in add_b23()
8525 plci->fax_connect_info_buffer[i] = nlc[1 + i]; in add_b23()
8526 ((T30_INFO *) plci->fax_connect_info_buffer)->head_line_len = 0; in add_b23()
8529 plci->fax_connect_info_buffer[len++] = nlc[++i]; in add_b23()
8530 plci->fax_connect_info_length = len; in add_b23()
8548 if (plci->B3_prot == 4 in add_b23()
8549 || plci->B3_prot == 5 /*T.30 - FAX*/) return _B3_PARM_NOT_SUPPORTED; in add_b23()
8551 add_p(plci, NLC, nlc); in add_b23()
8570 static word add_modem_b23(PLCI *plci, API_PARSE *bp_parms) in add_modem_b23() argument
8595 plci->B2_prot = (byte) GET_WORD(bp_parms[1].info); in add_modem_b23()
8596 plci->B3_prot = (byte) GET_WORD(bp_parms[2].info); in add_modem_b23()
8613 if (plci->adapter->manufacturer_features & MANUFACTURER_FEATURE_XONOFF_FLOW_CONTROL) in add_modem_b23()
8615 if (plci->adapter->manufacturer_features & MANUFACTURER_FEATURE_OOB_CHANNEL) in add_modem_b23()
8620 if (plci->rx_dma_descriptor <= 0) { in add_modem_b23()
8621 plci->rx_dma_descriptor = diva_get_dma_descriptor(plci, &plci->rx_dma_magic); in add_modem_b23()
8622 if (plci->rx_dma_descriptor >= 0) in add_modem_b23()
8623 plci->rx_dma_descriptor++; in add_modem_b23()
8625 if (plci->rx_dma_descriptor > 0) { in add_modem_b23()
8628 lli[2] = (byte)(plci->rx_dma_descriptor - 1); in add_modem_b23()
8629 lli[3] = (byte)plci->rx_dma_magic; in add_modem_b23()
8630 lli[4] = (byte)(plci->rx_dma_magic >> 8); in add_modem_b23()
8631 lli[5] = (byte)(plci->rx_dma_magic >> 16); in add_modem_b23()
8632 lli[6] = (byte)(plci->rx_dma_magic >> 24); in add_modem_b23()
8636 if (DIVA_CAPI_SUPPORTS_NO_CANCEL(plci->adapter)) { in add_modem_b23()
8640 llc[1] = (plci->call_dir & (CALL_DIR_ORIGINATE | CALL_DIR_FORCE_OUTG_NL)) ? in add_modem_b23()
8643 add_p(plci, LLI, lli); in add_modem_b23()
8644 add_p(plci, LLC, llc); in add_modem_b23()
8646 PUT_WORD(&dlc[i], plci->appl->MaxDataLength); in add_modem_b23()
8698 add_p(plci, DLC, dlc); in add_modem_b23()
8707 static void sig_req(PLCI *plci, byte req, byte Id) in sig_req() argument
8709 if (!plci) return; in sig_req()
8710 if (plci->adapter->adapter_disabled) return; in sig_req()
8713 plci->sig_remove_id = plci->Sig.Id; in sig_req()
8714 if (plci->req_in == plci->req_in_start) { in sig_req()
8715 plci->req_in += 2; in sig_req()
8716 plci->RBuffer[plci->req_in++] = 0; in sig_req()
8718 PUT_WORD(&plci->RBuffer[plci->req_in_start], plci->req_in-plci->req_in_start - 2); in sig_req()
8719 plci->RBuffer[plci->req_in++] = Id; /* sig/nl flag */ in sig_req()
8720 plci->RBuffer[plci->req_in++] = req; /* request */ in sig_req()
8721 plci->RBuffer[plci->req_in++] = 0; /* channel */ in sig_req()
8722 plci->req_in_start = plci->req_in; in sig_req()
8729 static void nl_req_ncci(PLCI *plci, byte req, byte ncci) in nl_req_ncci() argument
8731 if (!plci) return; in nl_req_ncci()
8732 if (plci->adapter->adapter_disabled) return; in nl_req_ncci()
8733 dbug(1, dprintf("nl_req %02x %02x %02x", plci->Id, req, ncci)); in nl_req_ncci()
8736 plci->nl_remove_id = plci->NL.Id; in nl_req_ncci()
8737 ncci_remove(plci, 0, (byte)(ncci != 0)); in nl_req_ncci()
8740 if (plci->req_in == plci->req_in_start) { in nl_req_ncci()
8741 plci->req_in += 2; in nl_req_ncci()
8742 plci->RBuffer[plci->req_in++] = 0; in nl_req_ncci()
8744 PUT_WORD(&plci->RBuffer[plci->req_in_start], plci->req_in-plci->req_in_start - 2); in nl_req_ncci()
8745 plci->RBuffer[plci->req_in++] = 1; /* sig/nl flag */ in nl_req_ncci()
8746 plci->RBuffer[plci->req_in++] = req; /* request */ in nl_req_ncci()
8747 plci->RBuffer[plci->req_in++] = plci->adapter->ncci_ch[ncci]; /* channel */ in nl_req_ncci()
8748 plci->req_in_start = plci->req_in; in nl_req_ncci()
8751 static void send_req(PLCI *plci) in send_req() argument
8757 if (!plci) return; in send_req()
8758 if (plci->adapter->adapter_disabled) return; in send_req()
8759 channel_xmit_xon(plci); in send_req()
8762 if (plci->req_in == plci->req_out) return; in send_req()
8763 dbug(1, dprintf("send_req(in=%d,out=%d)", plci->req_in, plci->req_out)); in send_req()
8765 if (plci->nl_req || plci->sig_req) return; in send_req()
8767 l = GET_WORD(&plci->RBuffer[plci->req_out]); in send_req()
8768 plci->req_out += 2; in send_req()
8769 plci->XData[0].P = &plci->RBuffer[plci->req_out]; in send_req()
8770 plci->req_out += l; in send_req()
8771 if (plci->RBuffer[plci->req_out] == 1) in send_req()
8773 e = &plci->NL; in send_req()
8774 plci->req_out++; in send_req()
8775 e->Req = plci->nl_req = plci->RBuffer[plci->req_out++]; in send_req()
8776 e->ReqCh = plci->RBuffer[plci->req_out++]; in send_req()
8780 plci->RBuffer[plci->req_out - 4] = CAI; in send_req()
8781 plci->RBuffer[plci->req_out - 3] = 1; in send_req()
8782 plci->RBuffer[plci->req_out - 2] = (plci->Sig.Id == 0xff) ? 0 : plci->Sig.Id; in send_req()
8783 plci->RBuffer[plci->req_out - 1] = 0; in send_req()
8785 plci->nl_global_req = plci->nl_req; in send_req()
8787 dbug(1, dprintf("%x:NLREQ(%x:%x:%x)", plci->adapter->Id, e->Id, e->Req, e->ReqCh)); in send_req()
8791 e = &plci->Sig; in send_req()
8792 if (plci->RBuffer[plci->req_out]) in send_req()
8793 e->Id = plci->RBuffer[plci->req_out]; in send_req()
8794 plci->req_out++; in send_req()
8795 e->Req = plci->sig_req = plci->RBuffer[plci->req_out++]; in send_req()
8796 e->ReqCh = plci->RBuffer[plci->req_out++]; in send_req()
8798 plci->sig_global_req = plci->sig_req; in send_req()
8799 dbug(1, dprintf("%x:SIGREQ(%x:%x:%x)", plci->adapter->Id, e->Id, e->Req, e->ReqCh)); in send_req()
8801 plci->XData[0].PLength = l; in send_req()
8802 e->X = plci->XData; in send_req()
8803 plci->adapter->request(e); in send_req()
8807 static void send_data(PLCI *plci) in send_data() argument
8814 if (!plci->nl_req && plci->ncci_ring_list) in send_data()
8816 a = plci->adapter; in send_data()
8817 ncci = plci->ncci_ring_list; in send_data()
8829 || (plci->send_disc == ncci)) in send_data()
8832 if ((plci->B2_prot == B2_V120_ASYNC) in send_data()
8833 || (plci->B2_prot == B2_V120_ASYNC_V42BIS) in send_data()
8834 || (plci->B2_prot == B2_V120_BIT_TRANSPARENT)) in send_data()
8836 plci->NData[1].P = TransmitBufferGet(plci->appl, data->P); in send_data()
8837 plci->NData[1].PLength = data->Length; in send_data()
8839 plci->NData[0].P = v120_break_header; in send_data()
8841 plci->NData[0].P = v120_default_header; in send_data()
8842 plci->NData[0].PLength = 1; in send_data()
8843 plci->NL.XNum = 2; in send_data()
8844 plci->NL.Req = plci->nl_req = (byte)((data->Flags & 0x07) << 4 | N_DATA); in send_data()
8848 plci->NData[0].P = TransmitBufferGet(plci->appl, data->P); in send_data()
8849 plci->NData[0].PLength = data->Length; in send_data()
8851 plci->NL.Req = plci->nl_req = (byte)N_UDATA; in send_data()
8853 else if ((plci->B3_prot == B3_RTP) && (data->Flags & 0x01)) in send_data()
8854 plci->NL.Req = plci->nl_req = (byte)N_BDATA; in send_data()
8857 plci->NL.Req = plci->nl_req = (byte)((data->Flags & 0x07) << 4 | N_DATA); in send_data()
8859 plci->NL.X = plci->NData; in send_data()
8860 plci->NL.ReqCh = a->ncci_ch[ncci]; in send_data()
8861 dbug(1, dprintf("%x:DREQ(%x:%x)", a->Id, plci->NL.Id, plci->NL.Req)); in send_data()
8862 plci->data_sent = true; in send_data()
8863 plci->data_sent_ptr = data->P; in send_data()
8864 a->request(&plci->NL); in send_data()
8867 cleanup_ncci_data(plci, ncci); in send_data()
8870 else if (plci->send_disc == ncci) in send_data()
8873 plci->NData[0].PLength = 0; in send_data()
8874 plci->NL.ReqCh = a->ncci_ch[ncci]; in send_data()
8875 plci->NL.Req = plci->nl_req = N_DISC; in send_data()
8876 a->request(&plci->NL); in send_data()
8877 plci->command = _DISCONNECT_B3_R; in send_data()
8878 plci->send_disc = 0; in send_data()
8881 } while (!plci->nl_req && (ncci != plci->ncci_ring_list)); in send_data()
8882 plci->ncci_ring_list = ncci; in send_data()
8889 PLCI *plci; in listen_check() local
8897 plci = &(a->plci[i]); in listen_check()
8898 if (plci->notifiedcall) activnotifiedcalls++; in listen_check()
8905 plci = &a->plci[j - 1]; in listen_check()
8906 plci->State = LISTENING; in listen_check()
8908 add_p(plci, OAD, "\x01\xfd"); in listen_check()
8910 add_p(plci, KEY, "\x04\x43\x41\x32\x30"); in listen_check()
8912 add_p(plci, CAI, "\x01\xc0"); in listen_check()
8913 add_p(plci, UID, "\x06\x43\x61\x70\x69\x32\x30"); in listen_check()
8914 add_p(plci, LLI, "\x01\xc4"); /* support Dummy CR FAC + MWI + SpoofNotify */ in listen_check()
8915 add_p(plci, SHIFT | 6, NULL); in listen_check()
8916 add_p(plci, SIN, "\x02\x00\x00"); in listen_check()
8917 plci->internal_command = LISTEN_SIG_ASSIGN_PEND; /* do indicate_req if OK */ in listen_check()
8918 sig_req(plci, ASSIGN, DSIG_ID); in listen_check()
8919 send_req(plci); in listen_check()
8929 static void IndParse(PLCI *plci, word *parms_id, byte **parms, byte multiIEsize) in IndParse() argument
8943 in = plci->Sig.RBuffer->P; in IndParse()
8953 while (ploc < plci->Sig.RBuffer->length - 1) { in IndParse()
9091 static void SetVoiceChannel(PLCI *plci, byte *chi, DIVA_CAPI_ADAPTER *a) in SetVoiceChannel() argument
9099 add_p(plci, FTY, "\x02\x01\x07"); /* B On, default on 1 */ in SetVoiceChannel()
9100 add_p(plci, ESC, voice_chi); /* Channel */ in SetVoiceChannel()
9101 sig_req(plci, TEL_CTRL, 0); in SetVoiceChannel()
9102 send_req(plci); in SetVoiceChannel()
9109 static void VoiceChannelOff(PLCI *plci) in VoiceChannelOff() argument
9112 add_p(plci, FTY, "\x02\x01\x08"); /* B Off */ in VoiceChannelOff()
9113 sig_req(plci, TEL_CTRL, 0); in VoiceChannelOff()
9114 send_req(plci); in VoiceChannelOff()
9115 if (plci->adapter->AdvSignalPLCI) in VoiceChannelOff()
9117 adv_voice_clear_config(plci->adapter->AdvSignalPLCI); in VoiceChannelOff()
9122 static word AdvCodecSupport(DIVA_CAPI_ADAPTER *a, PLCI *plci, APPL *appl, in AdvCodecSupport() argument
9143 if (plci != NULL) in AdvCodecSupport()
9145 a->AdvSignalPLCI = plci; in AdvCodecSupport()
9146 plci->tel = ADV_VOICE; in AdvCodecSupport()
9152 splci = &a->plci[j - 1]; in AdvCodecSupport()
9162 if (plci) in AdvCodecSupport()
9164 plci->spoofed_msg = SPOOFING_REQUIRED; in AdvCodecSupport()
9168 if (plci != NULL) in AdvCodecSupport()
9170 a->AdvSignalPLCI = plci; in AdvCodecSupport()
9171 plci->tel = ADV_VOICE; in AdvCodecSupport()
9194 if (plci != NULL) plci->tel = CODEC; in AdvCodecSupport()
9201 splci = &a->plci[j - 1]; in AdvCodecSupport()
9219 static void CodecIdCheck(DIVA_CAPI_ADAPTER *a, PLCI *plci) in CodecIdCheck() argument
9224 if (a->AdvSignalPLCI == plci) in CodecIdCheck()
9323 splci = &a->plci[j - 1]; in AutomaticLaw()
9340 PLCI *plci; in CapiRelease() local
9372 plci = &a->plci[j]; in CapiRelease()
9373 if (plci->Id) /* if plci owns no application */ in CapiRelease()
9375 if (plci->State == INC_CON_PENDING in CapiRelease()
9376 || plci->State == INC_CON_ALERT) in CapiRelease()
9378 if (test_c_ind_mask_bit(plci, (word)(Id - 1))) in CapiRelease()
9380 clear_c_ind_mask_bit(plci, (word)(Id - 1)); in CapiRelease()
9381 if (c_ind_mask_empty(plci)) in CapiRelease()
9383 sig_req(plci, HANGUP, 0); in CapiRelease()
9384 send_req(plci); in CapiRelease()
9385 plci->State = OUTG_DIS_PENDING; in CapiRelease()
9389 if (test_c_ind_mask_bit(plci, (word)(Id - 1))) in CapiRelease()
9391 clear_c_ind_mask_bit(plci, (word)(Id - 1)); in CapiRelease()
9392 if (c_ind_mask_empty(plci)) in CapiRelease()
9394 if (!plci->appl) in CapiRelease()
9396 plci_remove(plci); in CapiRelease()
9397 plci->State = IDLE; in CapiRelease()
9401 if (plci->appl == this) in CapiRelease()
9403 plci->appl = NULL; in CapiRelease()
9404 plci_remove(plci); in CapiRelease()
9405 plci->State = IDLE; in CapiRelease()
9417 plci = &a->plci[j - 1]; in CapiRelease()
9418 plci->command = 0; in CapiRelease()
9419 add_p(plci, OAD, "\x01\xfd"); in CapiRelease()
9420 add_p(plci, CAI, "\x01\x80"); in CapiRelease()
9421 add_p(plci, UID, "\x06\x43\x61\x70\x69\x32\x30"); in CapiRelease()
9422 add_p(plci, SHIFT | 6, NULL); in CapiRelease()
9423 add_p(plci, SIN, "\x02\x00\x00"); in CapiRelease()
9424 plci->internal_command = REM_L1_SIG_ASSIGN_PEND; in CapiRelease()
9425 sig_req(plci, ASSIGN, DSIG_ID); in CapiRelease()
9426 add_p(plci, FTY, "\x02\xff\x06"); /* l1 down */ in CapiRelease()
9427 sig_req(plci, SIG_CTRL, 0); in CapiRelease()
9428 send_req(plci); in CapiRelease()
9454 static word plci_remove_check(PLCI *plci) in plci_remove_check() argument
9456 if (!plci) return true; in plci_remove_check()
9457 if (!plci->NL.Id && c_ind_mask_empty(plci)) in plci_remove_check()
9459 if (plci->Sig.Id == 0xff) in plci_remove_check()
9460 plci->Sig.Id = 0; in plci_remove_check()
9461 if (!plci->Sig.Id) in plci_remove_check()
9463 dbug(1, dprintf("plci_remove_complete(%x)", plci->Id)); in plci_remove_check()
9464 dbug(1, dprintf("tel=0x%x,Sig=0x%x", plci->tel, plci->Sig.Id)); in plci_remove_check()
9465 if (plci->Id) in plci_remove_check()
9467 CodecIdCheck(plci->adapter, plci); in plci_remove_check()
9468 clear_b1_config(plci); in plci_remove_check()
9469 ncci_remove(plci, 0, false); in plci_remove_check()
9470 plci_free_msg_in_queue(plci); in plci_remove_check()
9471 channel_flow_control_remove(plci); in plci_remove_check()
9472 plci->Id = 0; in plci_remove_check()
9473 plci->State = IDLE; in plci_remove_check()
9474 plci->channels = 0; in plci_remove_check()
9475 plci->appl = NULL; in plci_remove_check()
9476 plci->notifiedcall = 0; in plci_remove_check()
9478 listen_check(plci->adapter); in plci_remove_check()
9488 static byte plci_nl_busy(PLCI *plci) in plci_nl_busy() argument
9491 return (plci->nl_req in plci_nl_busy()
9492 || (plci->ncci_ring_list in plci_nl_busy()
9493 && plci->adapter->ncci_ch[plci->ncci_ring_list] in plci_nl_busy()
9494 …&& (plci->adapter->ch_flow_control[plci->adapter->ncci_ch[plci->ncci_ring_list]] & N_OK_FC_PENDING… in plci_nl_busy()
9590 static void dtmf_enable_receiver(PLCI *plci, byte enable_mask) in dtmf_enable_receiver() argument
9595 (dword)((plci->Id << 8) | UnMapController(plci->adapter->Id)), in dtmf_enable_receiver()
9600 min_digit_duration = (plci->dtmf_rec_pulse_ms == 0) ? 40 : plci->dtmf_rec_pulse_ms; in dtmf_enable_receiver()
9601 min_gap_duration = (plci->dtmf_rec_pause_ms == 0) ? 40 : plci->dtmf_rec_pause_ms; in dtmf_enable_receiver()
9602 plci->internal_req_buffer[0] = DTMF_UDATA_REQUEST_ENABLE_RECEIVER; in dtmf_enable_receiver()
9603 PUT_WORD(&plci->internal_req_buffer[1], min_digit_duration); in dtmf_enable_receiver()
9604 PUT_WORD(&plci->internal_req_buffer[3], min_gap_duration); in dtmf_enable_receiver()
9605 plci->NData[0].PLength = 5; in dtmf_enable_receiver()
9607 PUT_WORD(&plci->internal_req_buffer[5], INTERNAL_IND_BUFFER_SIZE); in dtmf_enable_receiver()
9608 plci->NData[0].PLength += 2; in dtmf_enable_receiver()
9609 capidtmf_recv_enable(&(plci->capidtmf_state), min_digit_duration, min_gap_duration); in dtmf_enable_receiver()
9614 plci->internal_req_buffer[0] = DTMF_UDATA_REQUEST_DISABLE_RECEIVER; in dtmf_enable_receiver()
9615 plci->NData[0].PLength = 1; in dtmf_enable_receiver()
9617 capidtmf_recv_disable(&(plci->capidtmf_state)); in dtmf_enable_receiver()
9620 plci->NData[0].P = plci->internal_req_buffer; in dtmf_enable_receiver()
9621 plci->NL.X = plci->NData; in dtmf_enable_receiver()
9622 plci->NL.ReqCh = 0; in dtmf_enable_receiver()
9623 plci->NL.Req = plci->nl_req = (byte) N_UDATA; in dtmf_enable_receiver()
9624 plci->adapter->request(&plci->NL); in dtmf_enable_receiver()
9628 static void dtmf_send_digits(PLCI *plci, byte *digit_buffer, word digit_count) in dtmf_send_digits() argument
9633 (dword)((plci->Id << 8) | UnMapController(plci->adapter->Id)), in dtmf_send_digits()
9636 plci->internal_req_buffer[0] = DTMF_UDATA_REQUEST_SEND_DIGITS; in dtmf_send_digits()
9637 w = (plci->dtmf_send_pulse_ms == 0) ? 40 : plci->dtmf_send_pulse_ms; in dtmf_send_digits()
9638 PUT_WORD(&plci->internal_req_buffer[1], w); in dtmf_send_digits()
9639 w = (plci->dtmf_send_pause_ms == 0) ? 40 : plci->dtmf_send_pause_ms; in dtmf_send_digits()
9640 PUT_WORD(&plci->internal_req_buffer[3], w); in dtmf_send_digits()
9649 plci->internal_req_buffer[5 + i] = (w < DTMF_DIGIT_MAP_ENTRIES) ? in dtmf_send_digits()
9652 plci->NData[0].PLength = 5 + digit_count; in dtmf_send_digits()
9653 plci->NData[0].P = plci->internal_req_buffer; in dtmf_send_digits()
9654 plci->NL.X = plci->NData; in dtmf_send_digits()
9655 plci->NL.ReqCh = 0; in dtmf_send_digits()
9656 plci->NL.Req = plci->nl_req = (byte) N_UDATA; in dtmf_send_digits()
9657 plci->adapter->request(&plci->NL); in dtmf_send_digits()
9661 static void dtmf_rec_clear_config(PLCI *plci) in dtmf_rec_clear_config() argument
9665 (dword)((plci->Id << 8) | UnMapController(plci->adapter->Id)), in dtmf_rec_clear_config()
9668 plci->dtmf_rec_active = 0; in dtmf_rec_clear_config()
9669 plci->dtmf_rec_pulse_ms = 0; in dtmf_rec_clear_config()
9670 plci->dtmf_rec_pause_ms = 0; in dtmf_rec_clear_config()
9672 capidtmf_init(&(plci->capidtmf_state), plci->adapter->u_law); in dtmf_rec_clear_config()
9677 static void dtmf_send_clear_config(PLCI *plci) in dtmf_send_clear_config() argument
9681 (dword)((plci->Id << 8) | UnMapController(plci->adapter->Id)), in dtmf_send_clear_config()
9684 plci->dtmf_send_requests = 0; in dtmf_send_clear_config()
9685 plci->dtmf_send_pulse_ms = 0; in dtmf_send_clear_config()
9686 plci->dtmf_send_pause_ms = 0; in dtmf_send_clear_config()
9690 static void dtmf_prepare_switch(dword Id, PLCI *plci) in dtmf_prepare_switch() argument
9696 while (plci->dtmf_send_requests != 0) in dtmf_prepare_switch()
9697 dtmf_confirmation(Id, plci); in dtmf_prepare_switch()
9701 static word dtmf_save_config(dword Id, PLCI *plci, byte Rc) in dtmf_save_config() argument
9705 UnMapId(Id), (char *)(FILE_), __LINE__, Rc, plci->adjust_b_state)); in dtmf_save_config()
9711 static word dtmf_restore_config(dword Id, PLCI *plci, byte Rc) in dtmf_restore_config() argument
9716 UnMapId(Id), (char *)(FILE_), __LINE__, Rc, plci->adjust_b_state)); in dtmf_restore_config()
9719 if (plci->B1_facilities & B1_FACILITY_DTMFR) in dtmf_restore_config()
9721 switch (plci->adjust_b_state) in dtmf_restore_config()
9724 plci->internal_command = plci->adjust_b_command; in dtmf_restore_config()
9725 if (plci_nl_busy(plci)) in dtmf_restore_config()
9727 plci->adjust_b_state = ADJUST_B_RESTORE_DTMF_1; in dtmf_restore_config()
9730 dtmf_enable_receiver(plci, plci->dtmf_rec_active); in dtmf_restore_config()
9731 plci->adjust_b_state = ADJUST_B_RESTORE_DTMF_2; in dtmf_restore_config()
9748 static void dtmf_command(dword Id, PLCI *plci, byte Rc) in dtmf_command() argument
9755 UnMapId(Id), (char *)(FILE_), __LINE__, Rc, plci->internal_command, in dtmf_command()
9756 plci->dtmf_cmd, plci->dtmf_rec_pulse_ms, plci->dtmf_rec_pause_ms, in dtmf_command()
9757 plci->dtmf_send_pulse_ms, plci->dtmf_send_pause_ms)); in dtmf_command()
9762 internal_command = plci->internal_command; in dtmf_command()
9763 plci->internal_command = 0; in dtmf_command()
9765 switch (plci->dtmf_cmd) in dtmf_command()
9777 adjust_b1_resource(Id, plci, NULL, (word)(plci->B1_facilities | in dtmf_command()
9780 if (adjust_b_process(Id, plci, Rc) != GOOD) in dtmf_command()
9787 if (plci->internal_command) in dtmf_command()
9790 if (plci_nl_busy(plci)) in dtmf_command()
9792 plci->internal_command = DTMF_COMMAND_2; in dtmf_command()
9795 plci->internal_command = DTMF_COMMAND_3; in dtmf_command()
9796 dtmf_enable_receiver(plci, (byte)(plci->dtmf_rec_active | mask)); in dtmf_command()
9807 plci->tone_last_indication_code = DTMF_SIGNAL_NO_TONE; in dtmf_command()
9809 plci->dtmf_rec_active |= mask; in dtmf_command()
9824 plci->dtmf_rec_active &= ~mask; in dtmf_command()
9825 if (plci->dtmf_rec_active) in dtmf_command()
9851 adjust_b1_resource(Id, plci, NULL, (word)(plci->B1_facilities & in dtmf_command()
9854 if (adjust_b_process(Id, plci, Rc) != GOOD) in dtmf_command()
9861 if (plci->internal_command) in dtmf_command()
9877 adjust_b1_resource(Id, plci, NULL, (word)(plci->B1_facilities | in dtmf_command()
9878 … ((plci->dtmf_parameter_length != 0) ? B1_FACILITY_DTMFX | B1_FACILITY_DTMFR : B1_FACILITY_DTMFX)), in dtmf_command()
9881 if (adjust_b_process(Id, plci, Rc) != GOOD) in dtmf_command()
9888 if (plci->internal_command) in dtmf_command()
9891 if (plci_nl_busy(plci)) in dtmf_command()
9893 plci->internal_command = DTMF_COMMAND_2; in dtmf_command()
9896 plci->dtmf_msg_number_queue[(plci->dtmf_send_requests)++] = plci->number; in dtmf_command()
9897 plci->internal_command = DTMF_COMMAND_3; in dtmf_command()
9898 dtmf_send_digits(plci, &plci->saved_msg.parms[3].info[1], plci->saved_msg.parms[3].length); in dtmf_command()
9905 if (plci->dtmf_send_requests != 0) in dtmf_command()
9906 (plci->dtmf_send_requests)--; in dtmf_command()
9914 sendf(plci->appl, _FACILITY_R | CONFIRM, Id & 0xffffL, plci->number, in dtmf_command()
9919 static byte dtmf_request(dword Id, word Number, DIVA_CAPI_ADAPTER *a, PLCI *plci, APPL *appl, API… in dtmf_request() argument
9981 else if (plci == NULL) in dtmf_request()
9989 if (!plci->State in dtmf_request()
9990 || !plci->NL.Id || plci->nl_remove_id) in dtmf_request()
9998 plci->command = 0; in dtmf_request()
9999 plci->dtmf_cmd = GET_WORD(dtmf_parms[0].info); in dtmf_request()
10001 switch (plci->dtmf_cmd) in dtmf_request()
10010 …if (!((plci->requested_options_conn | plci->requested_options | plci->adapter->requested_options_t… in dtmf_request()
10033 plci->dtmf_rec_pulse_ms = 0; in dtmf_request()
10034 plci->dtmf_rec_pause_ms = 0; in dtmf_request()
10038 plci->dtmf_rec_pulse_ms = GET_WORD(dtmf_parms[1].info); in dtmf_request()
10039 plci->dtmf_rec_pause_ms = GET_WORD(dtmf_parms[2].info); in dtmf_request()
10042 start_internal_command(Id, plci, dtmf_command); in dtmf_request()
10050 …if (!((plci->requested_options_conn | plci->requested_options | plci->adapter->requested_options_t… in dtmf_request()
10069 plci->dtmf_send_pulse_ms = GET_WORD(dtmf_parms[1].info); in dtmf_request()
10070 plci->dtmf_send_pause_ms = GET_WORD(dtmf_parms[2].info); in dtmf_request()
10092 if (plci->dtmf_send_requests >= ARRAY_SIZE(plci->dtmf_msg_number_queue)) in dtmf_request()
10099 api_save_msg(dtmf_parms, "wwws", &plci->saved_msg); in dtmf_request()
10100 start_internal_command(Id, plci, dtmf_command); in dtmf_request()
10105 UnMapId(Id), (char *)(FILE_), __LINE__, plci->dtmf_cmd)); in dtmf_request()
10116 static void dtmf_confirmation(dword Id, PLCI *plci) in dtmf_confirmation() argument
10126 if (plci->dtmf_send_requests != 0) in dtmf_confirmation()
10128 sendf(plci->appl, _FACILITY_R | CONFIRM, Id & 0xffffL, plci->dtmf_msg_number_queue[0], in dtmf_confirmation()
10130 (plci->dtmf_send_requests)--; in dtmf_confirmation()
10131 for (i = 0; i < plci->dtmf_send_requests; i++) in dtmf_confirmation()
10132 plci->dtmf_msg_number_queue[i] = plci->dtmf_msg_number_queue[i + 1]; in dtmf_confirmation()
10137 static void dtmf_indication(dword Id, PLCI *plci, byte *msg, word length) in dtmf_indication() argument
10150 || ((dtmf_digit_map[j].listen_mask & plci->dtmf_rec_active) == 0))) in dtmf_indication()
10158 && (plci->tone_last_indication_code == DTMF_SIGNAL_NO_TONE) in dtmf_indication()
10170 plci->tone_last_indication_code = dtmf_digit_map[j].character; in dtmf_indication()
10178 sendf(plci->appl, _FACILITY_I, Id & 0xffffL, 0, "wS", SELECTOR_DTMF, msg); in dtmf_indication()
10187 static void dtmf_parameter_write(PLCI *plci) in dtmf_parameter_write() argument
10193 (dword)((plci->Id << 8) | UnMapController(plci->adapter->Id)), in dtmf_parameter_write()
10196 parameter_buffer[0] = plci->dtmf_parameter_length + 1; in dtmf_parameter_write()
10198 for (i = 0; i < plci->dtmf_parameter_length; i++) in dtmf_parameter_write()
10199 parameter_buffer[2 + i] = plci->dtmf_parameter_buffer[i]; in dtmf_parameter_write()
10200 add_p(plci, FTY, parameter_buffer); in dtmf_parameter_write()
10201 sig_req(plci, TEL_CTRL, 0); in dtmf_parameter_write()
10202 send_req(plci); in dtmf_parameter_write()
10206 static void dtmf_parameter_clear_config(PLCI *plci) in dtmf_parameter_clear_config() argument
10210 (dword)((plci->Id << 8) | UnMapController(plci->adapter->Id)), in dtmf_parameter_clear_config()
10213 plci->dtmf_parameter_length = 0; in dtmf_parameter_clear_config()
10217 static void dtmf_parameter_prepare_switch(dword Id, PLCI *plci) in dtmf_parameter_prepare_switch() argument
10226 static word dtmf_parameter_save_config(dword Id, PLCI *plci, byte Rc) in dtmf_parameter_save_config() argument
10230 UnMapId(Id), (char *)(FILE_), __LINE__, Rc, plci->adjust_b_state)); in dtmf_parameter_save_config()
10236 static word dtmf_parameter_restore_config(dword Id, PLCI *plci, byte Rc) in dtmf_parameter_restore_config() argument
10241 UnMapId(Id), (char *)(FILE_), __LINE__, Rc, plci->adjust_b_state)); in dtmf_parameter_restore_config()
10244 if ((plci->B1_facilities & B1_FACILITY_DTMFR) in dtmf_parameter_restore_config()
10245 && (plci->dtmf_parameter_length != 0)) in dtmf_parameter_restore_config()
10247 switch (plci->adjust_b_state) in dtmf_parameter_restore_config()
10250 plci->internal_command = plci->adjust_b_command; in dtmf_parameter_restore_config()
10251 if (plci->sig_req) in dtmf_parameter_restore_config()
10253 plci->adjust_b_state = ADJUST_B_RESTORE_DTMF_PARAMETER_1; in dtmf_parameter_restore_config()
10256 dtmf_parameter_write(plci); in dtmf_parameter_restore_config()
10257 plci->adjust_b_state = ADJUST_B_RESTORE_DTMF_PARAMETER_2; in dtmf_parameter_restore_config()
10392 static void mixer_set_bchannel_id_esc(PLCI *plci, byte bchannel_id) in mixer_set_bchannel_id_esc() argument
10398 a = plci->adapter; in mixer_set_bchannel_id_esc()
10399 old_id = plci->li_bchannel_id; in mixer_set_bchannel_id_esc()
10402 if ((old_id != 0) && (li_config_table[a->li_base + (old_id - 1)].plci == plci)) in mixer_set_bchannel_id_esc()
10403 li_config_table[a->li_base + (old_id - 1)].plci = NULL; in mixer_set_bchannel_id_esc()
10404 plci->li_bchannel_id = (bchannel_id & 0x1f) + 1; in mixer_set_bchannel_id_esc()
10405 if (li_config_table[a->li_base + (plci->li_bchannel_id - 1)].plci == NULL) in mixer_set_bchannel_id_esc()
10406 li_config_table[a->li_base + (plci->li_bchannel_id - 1)].plci = plci; in mixer_set_bchannel_id_esc()
10412 if ((old_id != 0) && (li_config_table[a->li_base + (old_id - 1)].plci == plci)) in mixer_set_bchannel_id_esc()
10413 li_config_table[a->li_base + (old_id - 1)].plci = NULL; in mixer_set_bchannel_id_esc()
10414 plci->li_bchannel_id = bchannel_id & 0x03; in mixer_set_bchannel_id_esc()
10415 …if ((a->AdvSignalPLCI != NULL) && (a->AdvSignalPLCI != plci) && (a->AdvSignalPLCI->tel == ADV_VOIC… in mixer_set_bchannel_id_esc()
10418 if (li_config_table[a->li_base + (2 - plci->li_bchannel_id)].plci == NULL) in mixer_set_bchannel_id_esc()
10421 && (li_config_table[a->li_base + (splci->li_bchannel_id - 1)].plci == splci)) in mixer_set_bchannel_id_esc()
10423 li_config_table[a->li_base + (splci->li_bchannel_id - 1)].plci = NULL; in mixer_set_bchannel_id_esc()
10425 splci->li_bchannel_id = 3 - plci->li_bchannel_id; in mixer_set_bchannel_id_esc()
10426 li_config_table[a->li_base + (2 - plci->li_bchannel_id)].plci = splci; in mixer_set_bchannel_id_esc()
10432 if (li_config_table[a->li_base + (plci->li_bchannel_id - 1)].plci == NULL) in mixer_set_bchannel_id_esc()
10433 li_config_table[a->li_base + (plci->li_bchannel_id - 1)].plci = plci; in mixer_set_bchannel_id_esc()
10436 if ((old_id == 0) && (plci->li_bchannel_id != 0) in mixer_set_bchannel_id_esc()
10437 && (li_config_table[a->li_base + (plci->li_bchannel_id - 1)].plci == plci)) in mixer_set_bchannel_id_esc()
10439 mixer_clear_config(plci); in mixer_set_bchannel_id_esc()
10442 (dword)((plci->Id << 8) | UnMapController(plci->adapter->Id)), in mixer_set_bchannel_id_esc()
10443 (char *)(FILE_), __LINE__, bchannel_id, plci->li_bchannel_id)); in mixer_set_bchannel_id_esc()
10447 static void mixer_set_bchannel_id(PLCI *plci, byte *chi) in mixer_set_bchannel_id() argument
10453 a = plci->adapter; in mixer_set_bchannel_id()
10454 old_id = plci->li_bchannel_id; in mixer_set_bchannel_id()
10460 if ((old_id != 0) && (li_config_table[a->li_base + (old_id - 1)].plci == plci)) in mixer_set_bchannel_id()
10461 li_config_table[a->li_base + (old_id - 1)].plci = NULL; in mixer_set_bchannel_id()
10462 plci->li_bchannel_id = (ch & 0x1f) + 1; in mixer_set_bchannel_id()
10463 if (li_config_table[a->li_base + (plci->li_bchannel_id - 1)].plci == NULL) in mixer_set_bchannel_id()
10464 li_config_table[a->li_base + (plci->li_bchannel_id - 1)].plci = plci; in mixer_set_bchannel_id()
10470 if ((old_id != 0) && (li_config_table[a->li_base + (old_id - 1)].plci == plci)) in mixer_set_bchannel_id()
10471 li_config_table[a->li_base + (old_id - 1)].plci = NULL; in mixer_set_bchannel_id()
10472 plci->li_bchannel_id = ch & 0x1f; in mixer_set_bchannel_id()
10473 …if ((a->AdvSignalPLCI != NULL) && (a->AdvSignalPLCI != plci) && (a->AdvSignalPLCI->tel == ADV_VOIC… in mixer_set_bchannel_id()
10476 if (li_config_table[a->li_base + (2 - plci->li_bchannel_id)].plci == NULL) in mixer_set_bchannel_id()
10479 && (li_config_table[a->li_base + (splci->li_bchannel_id - 1)].plci == splci)) in mixer_set_bchannel_id()
10481 li_config_table[a->li_base + (splci->li_bchannel_id - 1)].plci = NULL; in mixer_set_bchannel_id()
10483 splci->li_bchannel_id = 3 - plci->li_bchannel_id; in mixer_set_bchannel_id()
10484 li_config_table[a->li_base + (2 - plci->li_bchannel_id)].plci = splci; in mixer_set_bchannel_id()
10490 if (li_config_table[a->li_base + (plci->li_bchannel_id - 1)].plci == NULL) in mixer_set_bchannel_id()
10491 li_config_table[a->li_base + (plci->li_bchannel_id - 1)].plci = plci; in mixer_set_bchannel_id()
10495 if ((old_id == 0) && (plci->li_bchannel_id != 0) in mixer_set_bchannel_id()
10496 && (li_config_table[a->li_base + (plci->li_bchannel_id - 1)].plci == plci)) in mixer_set_bchannel_id()
10498 mixer_clear_config(plci); in mixer_set_bchannel_id()
10501 (dword)((plci->Id << 8) | UnMapController(plci->adapter->Id)), in mixer_set_bchannel_id()
10502 (char *)(FILE_), __LINE__, ch, plci->li_bchannel_id)); in mixer_set_bchannel_id()
10869 static void xconnect_query_addresses(PLCI *plci) in xconnect_query_addresses() argument
10876 (dword)((plci->Id << 8) | UnMapController(plci->adapter->Id)), in xconnect_query_addresses()
10879 a = plci->adapter; in xconnect_query_addresses()
10880 if (a->li_pri && ((plci->li_bchannel_id == 0) in xconnect_query_addresses()
10881 || (li_config_table[a->li_base + (plci->li_bchannel_id - 1)].plci != plci))) in xconnect_query_addresses()
10884 (dword)((plci->Id << 8) | UnMapController(plci->adapter->Id)), in xconnect_query_addresses()
10888 p = plci->internal_req_buffer; in xconnect_query_addresses()
10889 ch = (a->li_pri) ? plci->li_bchannel_id - 1 : 0; in xconnect_query_addresses()
10897 plci->NData[0].P = plci->internal_req_buffer; in xconnect_query_addresses()
10898 plci->NData[0].PLength = p - plci->internal_req_buffer; in xconnect_query_addresses()
10899 plci->NL.X = plci->NData; in xconnect_query_addresses()
10900 plci->NL.ReqCh = 0; in xconnect_query_addresses()
10901 plci->NL.Req = plci->nl_req = (byte) N_UDATA; in xconnect_query_addresses()
10902 plci->adapter->request(&plci->NL); in xconnect_query_addresses()
10906 static void xconnect_write_coefs(PLCI *plci, word internal_command) in xconnect_write_coefs() argument
10910 (dword)((plci->Id << 8) | UnMapController(plci->adapter->Id)), in xconnect_write_coefs()
10913 plci->li_write_command = internal_command; in xconnect_write_coefs()
10914 plci->li_write_channel = 0; in xconnect_write_coefs()
10918 static byte xconnect_write_coefs_process(dword Id, PLCI *plci, byte Rc) in xconnect_write_coefs_process() argument
10928 UnMapId(Id), (char *)(FILE_), __LINE__, Rc, plci->li_write_channel)); in xconnect_write_coefs_process()
10930 a = plci->adapter; in xconnect_write_coefs_process()
10931 if ((plci->li_bchannel_id == 0) in xconnect_write_coefs_process()
10932 || (li_config_table[a->li_base + (plci->li_bchannel_id - 1)].plci != plci)) in xconnect_write_coefs_process()
10938 i = a->li_base + (plci->li_bchannel_id - 1); in xconnect_write_coefs_process()
10939 j = plci->li_write_channel; in xconnect_write_coefs_process()
10940 p = plci->internal_req_buffer; in xconnect_write_coefs_process()
10987 plci->internal_command = plci->li_write_command; in xconnect_write_coefs_process()
10988 if (plci_nl_busy(plci)) in xconnect_write_coefs_process()
10990 to_ch = (a->li_pri) ? plci->li_bchannel_id - 1 : 0; in xconnect_write_coefs_process()
11039 && ((p - plci->internal_req_buffer) + 16 < INTERNAL_REQ_BUFFER_SIZE)); in xconnect_write_coefs_process()
11064 && ((p - plci->internal_req_buffer) + 16 < INTERNAL_REQ_BUFFER_SIZE)); in xconnect_write_coefs_process()
11068 plci->internal_command = plci->li_write_command; in xconnect_write_coefs_process()
11069 if (plci_nl_busy(plci)) in xconnect_write_coefs_process()
11086 if ((plci->tel == ADV_VOICE) && (plci == a->AdvSignalPLCI) in xconnect_write_coefs_process()
11099 if (plci->li_bchannel_id == 2) in xconnect_write_coefs_process()
11130 w = (plci == a->AdvSignalPLCI) ? n : mixer_swapped_index_bri[n]; in xconnect_write_coefs_process()
11145 plci->internal_command = plci->li_write_command; in xconnect_write_coefs_process()
11146 if (plci_nl_busy(plci)) in xconnect_write_coefs_process()
11162 *(p++) = (byte)((plci->li_bchannel_id - 1) | mixer_write_prog_pri[n].line_flags); in xconnect_write_coefs_process()
11174 …*(p++) = (byte)((plci->li_bchannel_id - 1) | MIXER_COEF_LINE_ROW_FLAG | mixer_write_prog_pri[n].li… in xconnect_write_coefs_process()
11192 if ((plci->tel == ADV_VOICE) && (plci == a->AdvSignalPLCI) in xconnect_write_coefs_process()
11205 if (plci->li_bchannel_id == 2) in xconnect_write_coefs_process()
11231 w = (plci == a->AdvSignalPLCI) ? n : mixer_swapped_index_bri[n]; in xconnect_write_coefs_process()
11242 plci->li_write_channel = j; in xconnect_write_coefs_process()
11243 if (p != plci->internal_req_buffer) in xconnect_write_coefs_process()
11245 plci->NData[0].P = plci->internal_req_buffer; in xconnect_write_coefs_process()
11246 plci->NData[0].PLength = p - plci->internal_req_buffer; in xconnect_write_coefs_process()
11247 plci->NL.X = plci->NData; in xconnect_write_coefs_process()
11248 plci->NL.ReqCh = 0; in xconnect_write_coefs_process()
11249 plci->NL.Req = plci->nl_req = (byte) N_UDATA; in xconnect_write_coefs_process()
11250 plci->adapter->request(&plci->NL); in xconnect_write_coefs_process()
11256 static void mixer_notify_update(PLCI *plci, byte others) in mixer_notify_update() argument
11264 (dword)((plci->Id << 8) | UnMapController(plci->adapter->Id)), in mixer_notify_update()
11267 a = plci->adapter; in mixer_notify_update()
11271 plci->li_notify_update = true; in mixer_notify_update()
11278 while ((i < li_total_channels) && (li_config_table[i].plci == NULL)) in mixer_notify_update()
11281 notify_plci = li_config_table[i++].plci; in mixer_notify_update()
11285 if ((plci->li_bchannel_id != 0) in mixer_notify_update()
11286 && (li_config_table[a->li_base + (plci->li_bchannel_id - 1)].plci == plci)) in mixer_notify_update()
11288 notify_plci = plci; in mixer_notify_update()
11303 ((CAPI_MSG *) msg)->header.plci = notify_plci->Id; in mixer_notify_update()
11315 (dword)((plci->Id << 8) | UnMapController(plci->adapter->Id)), in mixer_notify_update()
11324 plci->li_notify_update = false; in mixer_notify_update()
11329 static void mixer_clear_config(PLCI *plci) in mixer_clear_config() argument
11335 (dword)((plci->Id << 8) | UnMapController(plci->adapter->Id)), in mixer_clear_config()
11338 plci->li_notify_update = false; in mixer_clear_config()
11339 plci->li_plci_b_write_pos = 0; in mixer_clear_config()
11340 plci->li_plci_b_read_pos = 0; in mixer_clear_config()
11341 plci->li_plci_b_req_pos = 0; in mixer_clear_config()
11342 a = plci->adapter; in mixer_clear_config()
11343 if ((plci->li_bchannel_id != 0) in mixer_clear_config()
11344 && (li_config_table[a->li_base + (plci->li_bchannel_id - 1)].plci == plci)) in mixer_clear_config()
11346 i = a->li_base + (plci->li_bchannel_id - 1); in mixer_clear_config()
11360 if ((plci->tel == ADV_VOICE) && (plci == a->AdvSignalPLCI)) in mixer_clear_config()
11362 i = a->li_base + MIXER_IC_CHANNEL_BASE + (plci->li_bchannel_id - 1); in mixer_clear_config()
11375 i = a->li_base + MIXER_IC_CHANNEL_BASE + (2 - plci->li_bchannel_id); in mixer_clear_config()
11393 static void mixer_prepare_switch(dword Id, PLCI *plci) in mixer_prepare_switch() argument
11401 mixer_indication_coefs_set(Id, plci); in mixer_prepare_switch()
11402 } while (plci->li_plci_b_read_pos != plci->li_plci_b_req_pos); in mixer_prepare_switch()
11406 static word mixer_save_config(dword Id, PLCI *plci, byte Rc) in mixer_save_config() argument
11412 UnMapId(Id), (char *)(FILE_), __LINE__, Rc, plci->adjust_b_state)); in mixer_save_config()
11414 a = plci->adapter; in mixer_save_config()
11415 if ((plci->li_bchannel_id != 0) in mixer_save_config()
11416 && (li_config_table[a->li_base + (plci->li_bchannel_id - 1)].plci == plci)) in mixer_save_config()
11418 i = a->li_base + (plci->li_bchannel_id - 1); in mixer_save_config()
11431 static word mixer_restore_config(dword Id, PLCI *plci, byte Rc) in mixer_restore_config() argument
11437 UnMapId(Id), (char *)(FILE_), __LINE__, Rc, plci->adjust_b_state)); in mixer_restore_config()
11440 a = plci->adapter; in mixer_restore_config()
11441 if ((plci->B1_facilities & B1_FACILITY_MIXER) in mixer_restore_config()
11442 && (plci->li_bchannel_id != 0) in mixer_restore_config()
11443 && (li_config_table[a->li_base + (plci->li_bchannel_id - 1)].plci == plci)) in mixer_restore_config()
11445 switch (plci->adjust_b_state) in mixer_restore_config()
11450 plci->internal_command = plci->adjust_b_command; in mixer_restore_config()
11451 if (plci_nl_busy(plci)) in mixer_restore_config()
11453 plci->adjust_b_state = ADJUST_B_RESTORE_MIXER_1; in mixer_restore_config()
11456 xconnect_query_addresses(plci); in mixer_restore_config()
11457 plci->adjust_b_state = ADJUST_B_RESTORE_MIXER_2; in mixer_restore_config()
11460 plci->adjust_b_state = ADJUST_B_RESTORE_MIXER_5; in mixer_restore_config()
11474 if (plci->adjust_b_state == ADJUST_B_RESTORE_MIXER_2) in mixer_restore_config()
11475 plci->adjust_b_state = ADJUST_B_RESTORE_MIXER_3; in mixer_restore_config()
11476 else if (plci->adjust_b_state == ADJUST_B_RESTORE_MIXER_4) in mixer_restore_config()
11477 plci->adjust_b_state = ADJUST_B_RESTORE_MIXER_5; in mixer_restore_config()
11481 if (plci->adjust_b_state == ADJUST_B_RESTORE_MIXER_2) in mixer_restore_config()
11482 plci->adjust_b_state = ADJUST_B_RESTORE_MIXER_4; in mixer_restore_config()
11483 else if (plci->adjust_b_state == ADJUST_B_RESTORE_MIXER_3) in mixer_restore_config()
11484 plci->adjust_b_state = ADJUST_B_RESTORE_MIXER_5; in mixer_restore_config()
11486 if (plci->adjust_b_state != ADJUST_B_RESTORE_MIXER_5) in mixer_restore_config()
11488 plci->internal_command = plci->adjust_b_command; in mixer_restore_config()
11492 xconnect_write_coefs(plci, plci->adjust_b_command); in mixer_restore_config()
11493 plci->adjust_b_state = ADJUST_B_RESTORE_MIXER_6; in mixer_restore_config()
11496 if (!xconnect_write_coefs_process(Id, plci, Rc)) in mixer_restore_config()
11503 if (plci->internal_command) in mixer_restore_config()
11505 plci->adjust_b_state = ADJUST_B_RESTORE_MIXER_7; in mixer_restore_config()
11514 static void mixer_command(dword Id, PLCI *plci, byte Rc) in mixer_command() argument
11520 UnMapId(Id), (char *)(FILE_), __LINE__, Rc, plci->internal_command, in mixer_command()
11521 plci->li_cmd)); in mixer_command()
11523 a = plci->adapter; in mixer_command()
11524 internal_command = plci->internal_command; in mixer_command()
11525 plci->internal_command = 0; in mixer_command()
11526 switch (plci->li_cmd) in mixer_command()
11534 if (plci->li_channel_bits & LI_CHANNEL_INVOLVED) in mixer_command()
11536 adjust_b1_resource(Id, plci, NULL, (word)(plci->B1_facilities | in mixer_command()
11540 if (plci->li_channel_bits & LI_CHANNEL_INVOLVED) in mixer_command()
11542 if (adjust_b_process(Id, plci, Rc) != GOOD) in mixer_command()
11548 if (plci->internal_command) in mixer_command()
11551 plci->li_plci_b_req_pos = plci->li_plci_b_write_pos; in mixer_command()
11552 if ((plci->li_channel_bits & LI_CHANNEL_INVOLVED) in mixer_command()
11553 || ((get_b1_facilities(plci, plci->B1_resource) & B1_FACILITY_MIXER) in mixer_command()
11554 && (add_b1_facilities(plci, plci->B1_resource, (word)(plci->B1_facilities & in mixer_command()
11555 ~B1_FACILITY_MIXER)) == plci->B1_resource))) in mixer_command()
11557 xconnect_write_coefs(plci, MIXER_COMMAND_2); in mixer_command()
11563 mixer_indication_coefs_set(Id, plci); in mixer_command()
11564 } while (plci->li_plci_b_read_pos != plci->li_plci_b_req_pos); in mixer_command()
11567 if ((plci->li_channel_bits & LI_CHANNEL_INVOLVED) in mixer_command()
11568 || ((get_b1_facilities(plci, plci->B1_resource) & B1_FACILITY_MIXER) in mixer_command()
11569 && (add_b1_facilities(plci, plci->B1_resource, (word)(plci->B1_facilities & in mixer_command()
11570 ~B1_FACILITY_MIXER)) == plci->B1_resource))) in mixer_command()
11572 if (!xconnect_write_coefs_process(Id, plci, Rc)) in mixer_command()
11576 if (plci->li_plci_b_write_pos != plci->li_plci_b_req_pos) in mixer_command()
11580 plci->li_plci_b_write_pos = (plci->li_plci_b_write_pos == 0) ? in mixer_command()
11581 LI_PLCI_B_QUEUE_ENTRIES - 1 : plci->li_plci_b_write_pos - 1; in mixer_command()
11582 i = (plci->li_plci_b_write_pos == 0) ? in mixer_command()
11583 LI_PLCI_B_QUEUE_ENTRIES - 1 : plci->li_plci_b_write_pos - 1; in mixer_command()
11584 } while ((plci->li_plci_b_write_pos != plci->li_plci_b_req_pos) in mixer_command()
11585 && !(plci->li_plci_b_queue[i] & LI_PLCI_B_LAST_FLAG)); in mixer_command()
11589 if (plci->internal_command) in mixer_command()
11592 if (!(plci->li_channel_bits & LI_CHANNEL_INVOLVED)) in mixer_command()
11594 adjust_b1_resource(Id, plci, NULL, (word)(plci->B1_facilities & in mixer_command()
11598 if (!(plci->li_channel_bits & LI_CHANNEL_INVOLVED)) in mixer_command()
11600 if (adjust_b_process(Id, plci, Rc) != GOOD) in mixer_command()
11606 if (plci->internal_command) in mixer_command()
11613 if ((plci->li_bchannel_id == 0) in mixer_command()
11614 || (li_config_table[a->li_base + (plci->li_bchannel_id - 1)].plci != plci)) in mixer_command()
11617 UnMapId(Id), (char *)(FILE_), __LINE__, (int)(plci->li_bchannel_id))); in mixer_command()
11621 i = a->li_base + (plci->li_bchannel_id - 1); in mixer_command()
11622 li_config_table[i].curchnl = plci->li_channel_bits; in mixer_command()
11623 if (!a->li_pri && (plci->tel == ADV_VOICE) && (plci == a->AdvSignalPLCI)) in mixer_command()
11625 i = a->li_base + MIXER_IC_CHANNEL_BASE + (plci->li_bchannel_id - 1); in mixer_command()
11626 li_config_table[i].curchnl = plci->li_channel_bits; in mixer_command()
11629 i = a->li_base + MIXER_IC_CHANNEL_BASE + (2 - plci->li_bchannel_id); in mixer_command()
11630 li_config_table[i].curchnl = plci->li_channel_bits; in mixer_command()
11637 static void li_update_connect(dword Id, DIVA_CAPI_ADAPTER *a, PLCI *plci, in li_update_connect() argument
11645 plci_b = &(a_b->plci[((plci_b_id >> 8) & 0xff) - 1]); in li_update_connect()
11646 ch_a = a->li_base + (plci->li_bchannel_id - 1); in li_update_connect()
11647 if (!a->li_pri && (plci->tel == ADV_VOICE) in li_update_connect()
11648 && (plci == a->AdvSignalPLCI) && (Id & EXT_CONTROLLER)) in li_update_connect()
11652 a->li_base + MIXER_IC_CHANNEL_BASE + (2 - plci->li_bchannel_id) : ch_a_v; in li_update_connect()
11780 static void li2_update_connect(dword Id, DIVA_CAPI_ADAPTER *a, PLCI *plci, in li2_update_connect() argument
11788 plci_b = &(a_b->plci[((plci_b_id >> 8) & 0xff) - 1]); in li2_update_connect()
11789 ch_a = a->li_base + (plci->li_bchannel_id - 1); in li2_update_connect()
11790 if (!a->li_pri && (plci->tel == ADV_VOICE) in li2_update_connect()
11791 && (plci == a->AdvSignalPLCI) && (Id & EXT_CONTROLLER)) in li2_update_connect()
11795 a->li_base + MIXER_IC_CHANNEL_BASE + (2 - plci->li_bchannel_id) : ch_a_v; in li2_update_connect()
11888 static word li_check_main_plci(dword Id, PLCI *plci) in li_check_main_plci() argument
11890 if (plci == NULL) in li_check_main_plci()
11896 if (!plci->State in li_check_main_plci()
11897 || !plci->NL.Id || plci->nl_remove_id in li_check_main_plci()
11898 || (plci->li_bchannel_id == 0)) in li_check_main_plci()
11904 li_config_table[plci->adapter->li_base + (plci->li_bchannel_id - 1)].plci = plci; in li_check_main_plci()
11909 static PLCI *li_check_plci_b(dword Id, PLCI *plci, in li_check_plci_b() argument
11915 if (((plci->li_plci_b_read_pos > plci_b_write_pos) ? plci->li_plci_b_read_pos : in li_check_plci_b()
11916 LI_PLCI_B_QUEUE_ENTRIES + plci->li_plci_b_read_pos) - plci_b_write_pos - 1 < 2) in li_check_plci_b()
11939 plci_b = &(adapter[ctlr_b - 1].plci[((plci_b_id >> 8) & 0xff) - 1]); in li_check_plci_b()
11949 li_config_table[plci_b->adapter->li_base + (plci_b->li_bchannel_id - 1)].plci = plci_b; in li_check_plci_b()
11951 ((byte)(UnMapController(plci->adapter->Id) & ~EXT_CONTROLLER)) in li_check_plci_b()
11952 && (!(plci->adapter->manufacturer_features & MANUFACTURER_FEATURE_XCONNECT) in li_check_plci_b()
11972 static PLCI *li2_check_plci_b(dword Id, PLCI *plci, in li2_check_plci_b() argument
11978 if (((plci->li_plci_b_read_pos > plci_b_write_pos) ? plci->li_plci_b_read_pos : in li2_check_plci_b()
11979 LI_PLCI_B_QUEUE_ENTRIES + plci->li_plci_b_read_pos) - plci_b_write_pos - 1 < 2) in li2_check_plci_b()
12002 plci_b = &(adapter[ctlr_b - 1].plci[((plci_b_id >> 8) & 0xff) - 1]); in li2_check_plci_b()
12006 || (li_config_table[plci_b->adapter->li_base + (plci_b->li_bchannel_id - 1)].plci != plci_b)) in li2_check_plci_b()
12014 ((byte)(UnMapController(plci->adapter->Id) & ~EXT_CONTROLLER)) in li2_check_plci_b()
12015 && (!(plci->adapter->manufacturer_features & MANUFACTURER_FEATURE_XCONNECT) in li2_check_plci_b()
12035 static byte mixer_request(dword Id, word Number, DIVA_CAPI_ADAPTER *a, PLCI *plci, APPL *appl, AP… in mixer_request() argument
12161 Info = li_check_main_plci(Id, plci); in mixer_request()
12168 result = plci->saved_msg.info; in mixer_request()
12171 plci_b_write_pos = plci->li_plci_b_write_pos; in mixer_request()
12172 plci_b = li_check_plci_b(Id, plci, plci_b_id, plci_b_write_pos, &result[8]); in mixer_request()
12175 li_update_connect(Id, a, plci, plci_b_id, true, li_flags); in mixer_request()
12176 plci->li_plci_b_queue[plci_b_write_pos] = plci_b_id | LI_PLCI_B_LAST_FLAG; in mixer_request()
12178 plci->li_plci_b_write_pos = plci_b_write_pos; in mixer_request()
12191 Info = li_check_main_plci(Id, plci); in mixer_request()
12198 result = plci->saved_msg.info; in mixer_request()
12201 plci_b_write_pos = plci->li_plci_b_write_pos; in mixer_request()
12204 li2_update_connect(Id, a, plci, UnMapId(Id), true, li_flags); in mixer_request()
12237 plci_b = li2_check_plci_b(Id, plci, plci_b_id, plci_b_write_pos, &result[result_pos - 2]); in mixer_request()
12240 li2_update_connect(Id, a, plci, plci_b_id, true, li_flags); in mixer_request()
12241 plci->li_plci_b_queue[plci_b_write_pos] = plci_b_id | in mixer_request()
12253 if ((plci_b_write_pos == plci->li_plci_b_read_pos) in mixer_request()
12254 || (plci->li_plci_b_queue[i] & LI_PLCI_B_LAST_FLAG)) in mixer_request()
12256 plci->li_plci_b_queue[plci_b_write_pos] = LI_PLCI_B_SKIP_FLAG | LI_PLCI_B_LAST_FLAG; in mixer_request()
12260 plci->li_plci_b_queue[i] |= LI_PLCI_B_LAST_FLAG; in mixer_request()
12261 plci->li_plci_b_write_pos = plci_b_write_pos; in mixer_request()
12264 plci->li_channel_bits = li_config_table[a->li_base + (plci->li_bchannel_id - 1)].channel; in mixer_request()
12265 mixer_notify_update(plci, true); in mixer_request()
12268 plci->command = 0; in mixer_request()
12269 plci->li_cmd = GET_WORD(li_parms[0].info); in mixer_request()
12270 start_internal_command(Id, plci, mixer_command); in mixer_request()
12285 Info = li_check_main_plci(Id, plci); in mixer_request()
12292 result = plci->saved_msg.info; in mixer_request()
12295 plci_b_write_pos = plci->li_plci_b_write_pos; in mixer_request()
12296 plci_b = li_check_plci_b(Id, plci, plci_b_id, plci_b_write_pos, &result[8]); in mixer_request()
12299 li_update_connect(Id, a, plci, plci_b_id, false, 0); in mixer_request()
12300 plci->li_plci_b_queue[plci_b_write_pos] = plci_b_id | LI_PLCI_B_DISC_FLAG | LI_PLCI_B_LAST_FLAG; in mixer_request()
12302 plci->li_plci_b_write_pos = plci_b_write_pos; in mixer_request()
12314 Info = li_check_main_plci(Id, plci); in mixer_request()
12321 result = plci->saved_msg.info; in mixer_request()
12324 plci_b_write_pos = plci->li_plci_b_write_pos; in mixer_request()
12358 plci_b = li2_check_plci_b(Id, plci, plci_b_id, plci_b_write_pos, &result[result_pos - 2]); in mixer_request()
12361 li2_update_connect(Id, a, plci, plci_b_id, false, 0); in mixer_request()
12362 plci->li_plci_b_queue[plci_b_write_pos] = plci_b_id | LI_PLCI_B_DISC_FLAG; in mixer_request()
12372 if ((plci_b_write_pos == plci->li_plci_b_read_pos) in mixer_request()
12373 || (plci->li_plci_b_queue[i] & LI_PLCI_B_LAST_FLAG)) in mixer_request()
12375 plci->li_plci_b_queue[plci_b_write_pos] = LI_PLCI_B_SKIP_FLAG | LI_PLCI_B_LAST_FLAG; in mixer_request()
12379 plci->li_plci_b_queue[i] |= LI_PLCI_B_LAST_FLAG; in mixer_request()
12380 plci->li_plci_b_write_pos = plci_b_write_pos; in mixer_request()
12383 plci->li_channel_bits = li_config_table[a->li_base + (plci->li_bchannel_id - 1)].channel; in mixer_request()
12384 mixer_notify_update(plci, true); in mixer_request()
12387 plci->command = 0; in mixer_request()
12388 plci->li_cmd = GET_WORD(li_parms[0].info); in mixer_request()
12389 start_internal_command(Id, plci, mixer_command); in mixer_request()
12393 if (!plci || !plci->State in mixer_request()
12394 || !plci->NL.Id || plci->nl_remove_id in mixer_request()
12395 || (plci->li_bchannel_id == 0) in mixer_request()
12396 || (li_config_table[plci->adapter->li_base + (plci->li_bchannel_id - 1)].plci != plci)) in mixer_request()
12402 plci_b_write_pos = plci->li_plci_b_write_pos; in mixer_request()
12403 if (((plci->li_plci_b_read_pos > plci_b_write_pos) ? plci->li_plci_b_read_pos : in mixer_request()
12404 LI_PLCI_B_QUEUE_ENTRIES + plci->li_plci_b_read_pos) - plci_b_write_pos - 1 < 2) in mixer_request()
12411 if ((plci_b_write_pos == plci->li_plci_b_read_pos) in mixer_request()
12412 || (plci->li_plci_b_queue[i] & LI_PLCI_B_LAST_FLAG)) in mixer_request()
12414 plci->li_plci_b_queue[plci_b_write_pos] = LI_PLCI_B_SKIP_FLAG | LI_PLCI_B_LAST_FLAG; in mixer_request()
12418 plci->li_plci_b_queue[i] |= LI_PLCI_B_LAST_FLAG; in mixer_request()
12419 plci->li_plci_b_write_pos = plci_b_write_pos; in mixer_request()
12420 plci->li_channel_bits = li_config_table[a->li_base + (plci->li_bchannel_id - 1)].channel; in mixer_request()
12421 plci->command = 0; in mixer_request()
12422 plci->li_cmd = GET_WORD(li_parms[0].info); in mixer_request()
12423 start_internal_command(Id, plci, mixer_command); in mixer_request()
12438 static void mixer_indication_coefs_set(dword Id, PLCI *plci) in mixer_indication_coefs_set() argument
12446 if (plci->li_plci_b_read_pos != plci->li_plci_b_req_pos) in mixer_indication_coefs_set()
12450 d = plci->li_plci_b_queue[plci->li_plci_b_read_pos]; in mixer_indication_coefs_set()
12453 if (plci->appl->appl_flags & APPL_FLAG_OLD_LI_SPEC) in mixer_indication_coefs_set()
12488 sendf(plci->appl, _FACILITY_I, Id & 0xffffL, 0, in mixer_indication_coefs_set()
12491 plci->li_plci_b_read_pos = (plci->li_plci_b_read_pos == LI_PLCI_B_QUEUE_ENTRIES - 1) ? in mixer_indication_coefs_set()
12492 0 : plci->li_plci_b_read_pos + 1; in mixer_indication_coefs_set()
12493 } while (!(d & LI_PLCI_B_LAST_FLAG) && (plci->li_plci_b_read_pos != plci->li_plci_b_req_pos)); in mixer_indication_coefs_set()
12498 static void mixer_indication_xconnect_from(dword Id, PLCI *plci, byte *msg, word length) in mixer_indication_xconnect_from() argument
12507 a = plci->adapter; in mixer_indication_xconnect_from()
12516 if (!a->li_pri && (plci->li_bchannel_id == 2)) in mixer_indication_xconnect_from()
12528 if (plci->internal_command_queue[0] in mixer_indication_xconnect_from()
12529 && ((plci->adjust_b_state == ADJUST_B_RESTORE_MIXER_2) in mixer_indication_xconnect_from()
12530 || (plci->adjust_b_state == ADJUST_B_RESTORE_MIXER_3) in mixer_indication_xconnect_from()
12531 || (plci->adjust_b_state == ADJUST_B_RESTORE_MIXER_4))) in mixer_indication_xconnect_from()
12533 (*(plci->internal_command_queue[0]))(Id, plci, 0); in mixer_indication_xconnect_from()
12534 if (!plci->internal_command) in mixer_indication_xconnect_from()
12535 next_internal_command(Id, plci); in mixer_indication_xconnect_from()
12537 mixer_notify_update(plci, true); in mixer_indication_xconnect_from()
12541 static void mixer_indication_xconnect_to(dword Id, PLCI *plci, byte *msg, word length) in mixer_indication_xconnect_to() argument
12550 static byte mixer_notify_source_removed(PLCI *plci, dword plci_b_id) in mixer_notify_source_removed() argument
12554 plci_b_write_pos = plci->li_plci_b_write_pos; in mixer_notify_source_removed()
12555 if (((plci->li_plci_b_read_pos > plci_b_write_pos) ? plci->li_plci_b_read_pos : in mixer_notify_source_removed()
12556 LI_PLCI_B_QUEUE_ENTRIES + plci->li_plci_b_read_pos) - plci_b_write_pos - 1 < 1) in mixer_notify_source_removed()
12559 (dword)((plci->Id << 8) | UnMapController(plci->adapter->Id)), in mixer_notify_source_removed()
12563 plci->li_plci_b_queue[plci_b_write_pos] = plci_b_id | LI_PLCI_B_DISC_FLAG; in mixer_notify_source_removed()
12565 plci->li_plci_b_write_pos = plci_b_write_pos; in mixer_notify_source_removed()
12570 static void mixer_remove(PLCI *plci) in mixer_remove() argument
12578 (dword)((plci->Id << 8) | UnMapController(plci->adapter->Id)), in mixer_remove()
12581 a = plci->adapter; in mixer_remove()
12582 plci_b_id = (plci->Id << 8) | UnMapController(plci->adapter->Id); in mixer_remove()
12585 if ((plci->li_bchannel_id != 0) in mixer_remove()
12586 && (li_config_table[a->li_base + (plci->li_bchannel_id - 1)].plci == plci)) in mixer_remove()
12588 i = a->li_base + (plci->li_bchannel_id - 1); in mixer_remove()
12596 notify_plci = li_config_table[j].plci; in mixer_remove()
12598 && (notify_plci != plci) in mixer_remove()
12608 mixer_clear_config(plci); in mixer_remove()
12610 mixer_notify_update(plci, true); in mixer_remove()
12612 li_config_table[i].plci = NULL; in mixer_remove()
12613 plci->li_bchannel_id = 0; in mixer_remove()
12624 static void ec_write_parameters(PLCI *plci) in ec_write_parameters() argument
12630 (dword)((plci->Id << 8) | UnMapController(plci->adapter->Id)), in ec_write_parameters()
12635 PUT_WORD(&parameter_buffer[2], plci->ec_idi_options); in ec_write_parameters()
12636 plci->ec_idi_options &= ~LEC_RESET_COEFFICIENTS; in ec_write_parameters()
12637 w = (plci->ec_tail_length == 0) ? 128 : plci->ec_tail_length; in ec_write_parameters()
12639 add_p(plci, FTY, parameter_buffer); in ec_write_parameters()
12640 sig_req(plci, TEL_CTRL, 0); in ec_write_parameters()
12641 send_req(plci); in ec_write_parameters()
12645 static void ec_clear_config(PLCI *plci) in ec_clear_config() argument
12649 (dword)((plci->Id << 8) | UnMapController(plci->adapter->Id)), in ec_clear_config()
12652 plci->ec_idi_options = LEC_ENABLE_ECHO_CANCELLER | in ec_clear_config()
12654 plci->ec_tail_length = 0; in ec_clear_config()
12658 static void ec_prepare_switch(dword Id, PLCI *plci) in ec_prepare_switch() argument
12667 static word ec_save_config(dword Id, PLCI *plci, byte Rc) in ec_save_config() argument
12671 UnMapId(Id), (char *)(FILE_), __LINE__, Rc, plci->adjust_b_state)); in ec_save_config()
12677 static word ec_restore_config(dword Id, PLCI *plci, byte Rc) in ec_restore_config() argument
12682 UnMapId(Id), (char *)(FILE_), __LINE__, Rc, plci->adjust_b_state)); in ec_restore_config()
12685 if (plci->B1_facilities & B1_FACILITY_EC) in ec_restore_config()
12687 switch (plci->adjust_b_state) in ec_restore_config()
12690 plci->internal_command = plci->adjust_b_command; in ec_restore_config()
12691 if (plci->sig_req) in ec_restore_config()
12693 plci->adjust_b_state = ADJUST_B_RESTORE_EC_1; in ec_restore_config()
12696 ec_write_parameters(plci); in ec_restore_config()
12697 plci->adjust_b_state = ADJUST_B_RESTORE_EC_2; in ec_restore_config()
12714 static void ec_command(dword Id, PLCI *plci, byte Rc) in ec_command() argument
12720 UnMapId(Id), (char *)(FILE_), __LINE__, Rc, plci->internal_command, in ec_command()
12721 plci->ec_cmd, plci->ec_idi_options, plci->ec_tail_length)); in ec_command()
12724 if (plci->appl->appl_flags & APPL_FLAG_PRIV_EC_SPEC) in ec_command()
12732 PUT_WORD(&result[1], plci->ec_cmd); in ec_command()
12736 internal_command = plci->internal_command; in ec_command()
12737 plci->internal_command = 0; in ec_command()
12738 switch (plci->ec_cmd) in ec_command()
12747 adjust_b1_resource(Id, plci, NULL, (word)(plci->B1_facilities | in ec_command()
12750 if (adjust_b_process(Id, plci, Rc) != GOOD) in ec_command()
12757 if (plci->internal_command) in ec_command()
12760 if (plci->sig_req) in ec_command()
12762 plci->internal_command = EC_COMMAND_2; in ec_command()
12765 plci->internal_command = EC_COMMAND_3; in ec_command()
12766 ec_write_parameters(plci); in ec_command()
12785 if (plci->B1_facilities & B1_FACILITY_EC) in ec_command()
12787 if (plci->sig_req) in ec_command()
12789 plci->internal_command = EC_COMMAND_1; in ec_command()
12792 plci->internal_command = EC_COMMAND_2; in ec_command()
12793 ec_write_parameters(plci); in ec_command()
12805 adjust_b1_resource(Id, plci, NULL, (word)(plci->B1_facilities & in ec_command()
12808 if (adjust_b_process(Id, plci, Rc) != GOOD) in ec_command()
12815 if (plci->internal_command) in ec_command()
12821 sendf(plci->appl, _FACILITY_R | CONFIRM, Id & 0xffffL, plci->number, in ec_command()
12822 "wws", Info, (plci->appl->appl_flags & APPL_FLAG_PRIV_EC_SPEC) ? in ec_command()
12827 static byte ec_request(dword Id, word Number, DIVA_CAPI_ADAPTER *a, PLCI *plci, APPL *appl, API_P… in ec_request() argument
12857 if (plci == NULL) in ec_request()
12863 else if (!plci->State || !plci->NL.Id || plci->nl_remove_id) in ec_request()
12871 plci->command = 0; in ec_request()
12872 plci->ec_cmd = GET_WORD(ec_parms[0].info); in ec_request()
12873 plci->ec_idi_options &= ~(LEC_MANUAL_DISABLE | LEC_RESET_COEFFICIENTS); in ec_request()
12879 plci->ec_idi_options &= ~(LEC_ENABLE_NONLINEAR_PROCESSING | in ec_request()
12882 plci->ec_idi_options |= LEC_ENABLE_NONLINEAR_PROCESSING; in ec_request()
12884 plci->ec_idi_options |= LEC_ENABLE_2100HZ_DETECTOR; in ec_request()
12886 plci->ec_idi_options |= LEC_REQUIRE_2100HZ_REVERSALS; in ec_request()
12889 plci->ec_tail_length = GET_WORD(&ec_parms[0].info[4]); in ec_request()
12892 switch (plci->ec_cmd) in ec_request()
12895 plci->ec_idi_options &= ~LEC_FREEZE_COEFFICIENTS; in ec_request()
12896 start_internal_command(Id, plci, ec_command); in ec_request()
12900 plci->ec_idi_options = LEC_ENABLE_ECHO_CANCELLER | in ec_request()
12903 start_internal_command(Id, plci, ec_command); in ec_request()
12907 plci->ec_idi_options |= LEC_FREEZE_COEFFICIENTS; in ec_request()
12908 start_internal_command(Id, plci, ec_command); in ec_request()
12912 plci->ec_idi_options &= ~LEC_FREEZE_COEFFICIENTS; in ec_request()
12913 start_internal_command(Id, plci, ec_command); in ec_request()
12917 plci->ec_idi_options |= LEC_RESET_COEFFICIENTS; in ec_request()
12918 start_internal_command(Id, plci, ec_command); in ec_request()
12923 UnMapId(Id), (char *)(FILE_), __LINE__, plci->ec_cmd)); in ec_request()
12949 else if (plci == NULL) in ec_request()
12955 else if (!plci->State || !plci->NL.Id || plci->nl_remove_id) in ec_request()
12963 plci->command = 0; in ec_request()
12964 plci->ec_cmd = GET_WORD(ec_parms[0].info); in ec_request()
12965 plci->ec_idi_options &= ~(LEC_MANUAL_DISABLE | LEC_RESET_COEFFICIENTS); in ec_request()
12967 PUT_WORD(&result[1], plci->ec_cmd); in ec_request()
12970 plci->ec_idi_options &= ~(LEC_ENABLE_NONLINEAR_PROCESSING | in ec_request()
12972 plci->ec_tail_length = 0; in ec_request()
12977 plci->ec_idi_options |= LEC_ENABLE_NONLINEAR_PROCESSING; in ec_request()
12979 plci->ec_idi_options |= LEC_ENABLE_2100HZ_DETECTOR; in ec_request()
12981 plci->ec_idi_options |= LEC_REQUIRE_2100HZ_REVERSALS; in ec_request()
12984 plci->ec_tail_length = GET_WORD(&ec_parms[1].info[3]); in ec_request()
12987 switch (plci->ec_cmd) in ec_request()
12990 plci->ec_idi_options &= ~LEC_FREEZE_COEFFICIENTS; in ec_request()
12991 start_internal_command(Id, plci, ec_command); in ec_request()
12995 plci->ec_idi_options = LEC_ENABLE_ECHO_CANCELLER | in ec_request()
12998 start_internal_command(Id, plci, ec_command); in ec_request()
13003 UnMapId(Id), (char *)(FILE_), __LINE__, plci->ec_cmd)); in ec_request()
13017 static void ec_indication(dword Id, PLCI *plci, byte *msg, word length) in ec_indication() argument
13024 if (!(plci->ec_idi_options & LEC_MANUAL_DISABLE)) in ec_indication()
13026 if (plci->appl->appl_flags & APPL_FLAG_PRIV_EC_SPEC) in ec_indication()
13062 …sendf(plci->appl, _FACILITY_I, Id & 0xffffL, 0, "ws", (plci->appl->appl_flags & APPL_FLAG_PRIV_EC_… in ec_indication()
13073 static void adv_voice_write_coefs(PLCI *plci, word write_command) in adv_voice_write_coefs() argument
13085 (dword)((plci->Id << 8) | UnMapController(plci->adapter->Id)), in adv_voice_write_coefs()
13088 a = plci->adapter; in adv_voice_write_coefs()
13105 if (!a->li_pri && (plci->li_bchannel_id == 0)) in adv_voice_write_coefs()
13107 if ((li_config_table[a->li_base].plci == NULL) && (li_config_table[a->li_base + 1].plci != NULL)) in adv_voice_write_coefs()
13109 plci->li_bchannel_id = 1; in adv_voice_write_coefs()
13110 li_config_table[a->li_base].plci = plci; in adv_voice_write_coefs()
13112 (dword)((plci->Id << 8) | UnMapController(plci->adapter->Id)), in adv_voice_write_coefs()
13113 (char *)(FILE_), __LINE__, plci->li_bchannel_id)); in adv_voice_write_coefs()
13115 …else if ((li_config_table[a->li_base].plci != NULL) && (li_config_table[a->li_base + 1].plci == NU… in adv_voice_write_coefs()
13117 plci->li_bchannel_id = 2; in adv_voice_write_coefs()
13118 li_config_table[a->li_base + 1].plci = plci; in adv_voice_write_coefs()
13120 (dword)((plci->Id << 8) | UnMapController(plci->adapter->Id)), in adv_voice_write_coefs()
13121 (char *)(FILE_), __LINE__, plci->li_bchannel_id)); in adv_voice_write_coefs()
13124 if (!a->li_pri && (plci->li_bchannel_id != 0) in adv_voice_write_coefs()
13125 && (li_config_table[a->li_base + (plci->li_bchannel_id - 1)].plci == plci)) in adv_voice_write_coefs()
13127 i = a->li_base + (plci->li_bchannel_id - 1); in adv_voice_write_coefs()
13131 j = a->li_base + MIXER_IC_CHANNEL_BASE + (plci->li_bchannel_id - 1); in adv_voice_write_coefs()
13132 k = a->li_base + MIXER_IC_CHANNEL_BASE + (2 - plci->li_bchannel_id); in adv_voice_write_coefs()
13133 if (!(plci->B1_facilities & B1_FACILITY_MIXER)) in adv_voice_write_coefs()
13158 k = a->li_base + MIXER_IC_CHANNEL_BASE + (plci->li_bchannel_id - 1); in adv_voice_write_coefs()
13166 k = a->li_base + MIXER_IC_CHANNEL_BASE + (2 - plci->li_bchannel_id); in adv_voice_write_coefs()
13176 if (plci->B1_facilities & B1_FACILITY_MIXER) in adv_voice_write_coefs()
13189 ch_map[j] = (byte)(j + (plci->li_bchannel_id - 1)); in adv_voice_write_coefs()
13190 ch_map[j + 1] = (byte)(j + (2 - plci->li_bchannel_id)); in adv_voice_write_coefs()
13222 add_p(plci, FTY, coef_buffer); in adv_voice_write_coefs()
13223 sig_req(plci, TEL_CTRL, 0); in adv_voice_write_coefs()
13224 send_req(plci); in adv_voice_write_coefs()
13228 static void adv_voice_clear_config(PLCI *plci) in adv_voice_clear_config() argument
13236 (dword)((plci->Id << 8) | UnMapController(plci->adapter->Id)), in adv_voice_clear_config()
13239 a = plci->adapter; in adv_voice_clear_config()
13240 if ((plci->tel == ADV_VOICE) && (plci == a->AdvSignalPLCI)) in adv_voice_clear_config()
13244 if (!a->li_pri && (plci->li_bchannel_id != 0) in adv_voice_clear_config()
13245 && (li_config_table[a->li_base + (plci->li_bchannel_id - 1)].plci == plci)) in adv_voice_clear_config()
13247 i = a->li_base + (plci->li_bchannel_id - 1); in adv_voice_clear_config()
13259 i = a->li_base + MIXER_IC_CHANNEL_BASE + (plci->li_bchannel_id - 1); in adv_voice_clear_config()
13272 i = a->li_base + MIXER_IC_CHANNEL_BASE + (2 - plci->li_bchannel_id); in adv_voice_clear_config()
13290 static void adv_voice_prepare_switch(dword Id, PLCI *plci) in adv_voice_prepare_switch() argument
13299 static word adv_voice_save_config(dword Id, PLCI *plci, byte Rc) in adv_voice_save_config() argument
13303 UnMapId(Id), (char *)(FILE_), __LINE__, Rc, plci->adjust_b_state)); in adv_voice_save_config()
13309 static word adv_voice_restore_config(dword Id, PLCI *plci, byte Rc) in adv_voice_restore_config() argument
13315 UnMapId(Id), (char *)(FILE_), __LINE__, Rc, plci->adjust_b_state)); in adv_voice_restore_config()
13318 a = plci->adapter; in adv_voice_restore_config()
13319 if ((plci->B1_facilities & B1_FACILITY_VOICE) in adv_voice_restore_config()
13320 && (plci->tel == ADV_VOICE) && (plci == a->AdvSignalPLCI)) in adv_voice_restore_config()
13322 switch (plci->adjust_b_state) in adv_voice_restore_config()
13325 plci->internal_command = plci->adjust_b_command; in adv_voice_restore_config()
13326 if (plci->sig_req) in adv_voice_restore_config()
13328 plci->adjust_b_state = ADJUST_B_RESTORE_VOICE_1; in adv_voice_restore_config()
13331 adv_voice_write_coefs(plci, ADV_VOICE_WRITE_UPDATE); in adv_voice_restore_config()
13332 plci->adjust_b_state = ADJUST_B_RESTORE_VOICE_2; in adv_voice_restore_config()
13399 static word get_b1_facilities(PLCI *plci, byte b1_resource) in get_b1_facilities() argument
13407 if (!(((plci->requested_options_conn | plci->requested_options) & (1L << PRIVATE_DTMF_TONE)) in get_b1_facilities()
13408 …|| (plci->appl && (plci->adapter->requested_options_table[plci->appl->Id - 1] & (1L << PRIVATE_DTM… in get_b1_facilities()
13411 if (plci->adapter->manufacturer_features & MANUFACTURER_FEATURE_SOFTDTMF_SEND) in get_b1_facilities()
13413 if (plci->adapter->manufacturer_features & MANUFACTURER_FEATURE_SOFTDTMF_RECEIVE) in get_b1_facilities()
13419 if (plci->adapter->manufacturer_features & (MANUFACTURER_FEATURE_V18 | MANUFACTURER_FEATURE_VOWN)) in get_b1_facilities()
13431 static byte add_b1_facilities(PLCI *plci, byte b1_resource, word b1_facilities) in add_b1_facilities() argument
13476 && (((plci->requested_options_conn | plci->requested_options) & (1L << PRIVATE_DTMF_TONE)) in add_b1_facilities()
13477 …|| (plci->appl && (plci->adapter->requested_options_table[plci->appl->Id - 1] & (1L << PRIVATE_DTM… in add_b1_facilities()
13487 else if (((plci->adapter->manufacturer_features & MANUFACTURER_FEATURE_HARDDTMF) in add_b1_facilities()
13488 && !(plci->adapter->manufacturer_features & MANUFACTURER_FEATURE_SOFTDTMF_RECEIVE)) in add_b1_facilities()
13491 || !(plci->adapter->manufacturer_features & MANUFACTURER_FEATURE_SOFTDTMF_RECEIVE))) in add_b1_facilities()
13494 || !(plci->adapter->manufacturer_features & MANUFACTURER_FEATURE_SOFTDTMF_SEND)))) in add_b1_facilities()
13529 (dword)((plci->Id << 8) | UnMapController(plci->adapter->Id)), in add_b1_facilities()
13531 b1_resource, b1_facilities, b, get_b1_facilities(plci, b))); in add_b1_facilities()
13536 static void adjust_b1_facilities(PLCI *plci, byte new_b1_resource, word new_b1_facilities) in adjust_b1_facilities() argument
13541 (dword)((plci->Id << 8) | UnMapController(plci->adapter->Id)), in adjust_b1_facilities()
13543 new_b1_facilities & get_b1_facilities(plci, new_b1_resource))); in adjust_b1_facilities()
13545 new_b1_facilities &= get_b1_facilities(plci, new_b1_resource); in adjust_b1_facilities()
13546 removed_facilities = plci->B1_facilities & ~new_b1_facilities; in adjust_b1_facilities()
13549 ec_clear_config(plci); in adjust_b1_facilities()
13554 dtmf_rec_clear_config(plci); in adjust_b1_facilities()
13555 dtmf_parameter_clear_config(plci); in adjust_b1_facilities()
13558 dtmf_send_clear_config(plci); in adjust_b1_facilities()
13562 mixer_clear_config(plci); in adjust_b1_facilities()
13565 adv_voice_clear_config(plci); in adjust_b1_facilities()
13566 plci->B1_facilities = new_b1_facilities; in adjust_b1_facilities()
13570 static void adjust_b_clear(PLCI *plci) in adjust_b_clear() argument
13574 (dword)((plci->Id << 8) | UnMapController(plci->adapter->Id)), in adjust_b_clear()
13577 plci->adjust_b_restore = false; in adjust_b_clear()
13581 static word adjust_b_process(dword Id, PLCI *plci, byte Rc) in adjust_b_process() argument
13589 UnMapId(Id), (char *)(FILE_), __LINE__, Rc, plci->adjust_b_state)); in adjust_b_process()
13592 switch (plci->adjust_b_state) in adjust_b_process()
13595 if ((plci->adjust_b_parms_msg == NULL) in adjust_b_process()
13596 && (plci->adjust_b_mode & ADJUST_B_MODE_SWITCH_L1) in adjust_b_process()
13597 && ((plci->adjust_b_mode & ~(ADJUST_B_MODE_SAVE | ADJUST_B_MODE_SWITCH_L1 | in adjust_b_process()
13600 b1_resource = (plci->adjust_b_mode == ADJUST_B_MODE_NO_RESOURCE) ? in adjust_b_process()
13601 0 : add_b1_facilities(plci, plci->B1_resource, plci->adjust_b_facilities); in adjust_b_process()
13602 if (b1_resource == plci->B1_resource) in adjust_b_process()
13604 adjust_b1_facilities(plci, b1_resource, plci->adjust_b_facilities); in adjust_b_process()
13607 if (plci->adjust_b_facilities & ~get_b1_facilities(plci, b1_resource)) in adjust_b_process()
13611 plci->B1_resource, b1_resource, plci->adjust_b_facilities)); in adjust_b_process()
13616 if (plci->adjust_b_mode & ADJUST_B_MODE_SAVE) in adjust_b_process()
13619 mixer_prepare_switch(Id, plci); in adjust_b_process()
13622 dtmf_prepare_switch(Id, plci); in adjust_b_process()
13623 dtmf_parameter_prepare_switch(Id, plci); in adjust_b_process()
13626 ec_prepare_switch(Id, plci); in adjust_b_process()
13628 adv_voice_prepare_switch(Id, plci); in adjust_b_process()
13630 plci->adjust_b_state = ADJUST_B_SAVE_MIXER_1; in adjust_b_process()
13633 if (plci->adjust_b_mode & ADJUST_B_MODE_SAVE) in adjust_b_process()
13636 Info = mixer_save_config(Id, plci, Rc); in adjust_b_process()
13637 if ((Info != GOOD) || plci->internal_command) in adjust_b_process()
13641 plci->adjust_b_state = ADJUST_B_SAVE_DTMF_1; in adjust_b_process()
13644 if (plci->adjust_b_mode & ADJUST_B_MODE_SAVE) in adjust_b_process()
13647 Info = dtmf_save_config(Id, plci, Rc); in adjust_b_process()
13648 if ((Info != GOOD) || plci->internal_command) in adjust_b_process()
13652 plci->adjust_b_state = ADJUST_B_REMOVE_L23_1; in adjust_b_process()
13654 if ((plci->adjust_b_mode & ADJUST_B_MODE_REMOVE_L23) in adjust_b_process()
13655 && plci->NL.Id && !plci->nl_remove_id) in adjust_b_process()
13657 plci->internal_command = plci->adjust_b_command; in adjust_b_process()
13658 if (plci->adjust_b_ncci != 0) in adjust_b_process()
13660 ncci_ptr = &(plci->adapter->ncci[plci->adjust_b_ncci]); in adjust_b_process()
13663 plci->data_sent_ptr = ncci_ptr->DBuffer[ncci_ptr->data_out].P; in adjust_b_process()
13664 data_rc(plci, plci->adapter->ncci_ch[plci->adjust_b_ncci]); in adjust_b_process()
13667 data_ack(plci, plci->adapter->ncci_ch[plci->adjust_b_ncci]); in adjust_b_process()
13669 nl_req_ncci(plci, REMOVE, in adjust_b_process()
13670 (byte)((plci->adjust_b_mode & ADJUST_B_MODE_CONNECT) ? plci->adjust_b_ncci : 0)); in adjust_b_process()
13671 send_req(plci); in adjust_b_process()
13672 plci->adjust_b_state = ADJUST_B_REMOVE_L23_2; in adjust_b_process()
13675 plci->adjust_b_state = ADJUST_B_REMOVE_L23_2; in adjust_b_process()
13685 if (plci->adjust_b_mode & ADJUST_B_MODE_REMOVE_L23) in adjust_b_process()
13687 if (plci_nl_busy(plci)) in adjust_b_process()
13689 plci->internal_command = plci->adjust_b_command; in adjust_b_process()
13693 plci->adjust_b_state = ADJUST_B_SAVE_EC_1; in adjust_b_process()
13696 if (plci->adjust_b_mode & ADJUST_B_MODE_SAVE) in adjust_b_process()
13699 Info = ec_save_config(Id, plci, Rc); in adjust_b_process()
13700 if ((Info != GOOD) || plci->internal_command) in adjust_b_process()
13704 plci->adjust_b_state = ADJUST_B_SAVE_DTMF_PARAMETER_1; in adjust_b_process()
13707 if (plci->adjust_b_mode & ADJUST_B_MODE_SAVE) in adjust_b_process()
13710 Info = dtmf_parameter_save_config(Id, plci, Rc); in adjust_b_process()
13711 if ((Info != GOOD) || plci->internal_command) in adjust_b_process()
13715 plci->adjust_b_state = ADJUST_B_SAVE_VOICE_1; in adjust_b_process()
13718 if (plci->adjust_b_mode & ADJUST_B_MODE_SAVE) in adjust_b_process()
13720 Info = adv_voice_save_config(Id, plci, Rc); in adjust_b_process()
13721 if ((Info != GOOD) || plci->internal_command) in adjust_b_process()
13724 plci->adjust_b_state = ADJUST_B_SWITCH_L1_1; in adjust_b_process()
13726 if (plci->adjust_b_mode & ADJUST_B_MODE_SWITCH_L1) in adjust_b_process()
13728 if (plci->sig_req) in adjust_b_process()
13730 plci->internal_command = plci->adjust_b_command; in adjust_b_process()
13733 if (plci->adjust_b_parms_msg != NULL) in adjust_b_process()
13734 api_load_msg(plci->adjust_b_parms_msg, bp); in adjust_b_process()
13736 api_load_msg(&plci->B_protocol, bp); in adjust_b_process()
13737 Info = add_b1(plci, bp, in adjust_b_process()
13738 (word)((plci->adjust_b_mode & ADJUST_B_MODE_NO_RESOURCE) ? 2 : 0), in adjust_b_process()
13739 plci->adjust_b_facilities); in adjust_b_process()
13744 plci->B1_resource, plci->adjust_b_facilities)); in adjust_b_process()
13747 plci->internal_command = plci->adjust_b_command; in adjust_b_process()
13748 sig_req(plci, RESOURCES, 0); in adjust_b_process()
13749 send_req(plci); in adjust_b_process()
13750 plci->adjust_b_state = ADJUST_B_SWITCH_L1_2; in adjust_b_process()
13753 plci->adjust_b_state = ADJUST_B_SWITCH_L1_2; in adjust_b_process()
13760 Rc, plci->B1_resource, plci->adjust_b_facilities)); in adjust_b_process()
13764 plci->adjust_b_state = ADJUST_B_RESTORE_VOICE_1; in adjust_b_process()
13768 if (plci->adjust_b_mode & ADJUST_B_MODE_RESTORE) in adjust_b_process()
13770 Info = adv_voice_restore_config(Id, plci, Rc); in adjust_b_process()
13771 if ((Info != GOOD) || plci->internal_command) in adjust_b_process()
13774 plci->adjust_b_state = ADJUST_B_RESTORE_DTMF_PARAMETER_1; in adjust_b_process()
13778 if (plci->adjust_b_mode & ADJUST_B_MODE_RESTORE) in adjust_b_process()
13781 Info = dtmf_parameter_restore_config(Id, plci, Rc); in adjust_b_process()
13782 if ((Info != GOOD) || plci->internal_command) in adjust_b_process()
13786 plci->adjust_b_state = ADJUST_B_RESTORE_EC_1; in adjust_b_process()
13790 if (plci->adjust_b_mode & ADJUST_B_MODE_RESTORE) in adjust_b_process()
13793 Info = ec_restore_config(Id, plci, Rc); in adjust_b_process()
13794 if ((Info != GOOD) || plci->internal_command) in adjust_b_process()
13798 plci->adjust_b_state = ADJUST_B_ASSIGN_L23_1; in adjust_b_process()
13800 if (plci->adjust_b_mode & ADJUST_B_MODE_ASSIGN_L23) in adjust_b_process()
13802 if (plci_nl_busy(plci)) in adjust_b_process()
13804 plci->internal_command = plci->adjust_b_command; in adjust_b_process()
13807 if (plci->adjust_b_mode & ADJUST_B_MODE_CONNECT) in adjust_b_process()
13808 plci->call_dir |= CALL_DIR_FORCE_OUTG_NL; in adjust_b_process()
13809 if (plci->adjust_b_parms_msg != NULL) in adjust_b_process()
13810 api_load_msg(plci->adjust_b_parms_msg, bp); in adjust_b_process()
13812 api_load_msg(&plci->B_protocol, bp); in adjust_b_process()
13813 Info = add_b23(plci, bp); in adjust_b_process()
13820 plci->internal_command = plci->adjust_b_command; in adjust_b_process()
13821 nl_req_ncci(plci, ASSIGN, 0); in adjust_b_process()
13822 send_req(plci); in adjust_b_process()
13823 plci->adjust_b_state = ADJUST_B_ASSIGN_L23_2; in adjust_b_process()
13826 plci->adjust_b_state = ADJUST_B_ASSIGN_L23_2; in adjust_b_process()
13836 if (plci->adjust_b_mode & ADJUST_B_MODE_ASSIGN_L23) in adjust_b_process()
13840 plci->internal_command = plci->adjust_b_command; in adjust_b_process()
13844 if (plci->adjust_b_mode & ADJUST_B_MODE_USER_CONNECT) in adjust_b_process()
13846 plci->adjust_b_restore = true; in adjust_b_process()
13849 plci->adjust_b_state = ADJUST_B_CONNECT_1; in adjust_b_process()
13851 if (plci->adjust_b_mode & ADJUST_B_MODE_CONNECT) in adjust_b_process()
13853 plci->internal_command = plci->adjust_b_command; in adjust_b_process()
13854 if (plci_nl_busy(plci)) in adjust_b_process()
13856 nl_req_ncci(plci, N_CONNECT, 0); in adjust_b_process()
13857 send_req(plci); in adjust_b_process()
13858 plci->adjust_b_state = ADJUST_B_CONNECT_2; in adjust_b_process()
13861 plci->adjust_b_state = ADJUST_B_RESTORE_DTMF_1; in adjust_b_process()
13875 if (plci->adjust_b_mode & ADJUST_B_MODE_CONNECT) in adjust_b_process()
13877 get_ncci(plci, (byte)(Id >> 16), plci->adjust_b_ncci); in adjust_b_process()
13878 Id = (Id & 0xffff) | (((dword)(plci->adjust_b_ncci)) << 16); in adjust_b_process()
13880 if (plci->adjust_b_state == ADJUST_B_CONNECT_2) in adjust_b_process()
13881 plci->adjust_b_state = ADJUST_B_CONNECT_3; in adjust_b_process()
13882 else if (plci->adjust_b_state == ADJUST_B_CONNECT_4) in adjust_b_process()
13883 plci->adjust_b_state = ADJUST_B_RESTORE_DTMF_1; in adjust_b_process()
13887 if (plci->adjust_b_state == ADJUST_B_CONNECT_2) in adjust_b_process()
13888 plci->adjust_b_state = ADJUST_B_CONNECT_4; in adjust_b_process()
13889 else if (plci->adjust_b_state == ADJUST_B_CONNECT_3) in adjust_b_process()
13890 plci->adjust_b_state = ADJUST_B_RESTORE_DTMF_1; in adjust_b_process()
13892 if (plci->adjust_b_state != ADJUST_B_RESTORE_DTMF_1) in adjust_b_process()
13894 plci->internal_command = plci->adjust_b_command; in adjust_b_process()
13900 if (plci->adjust_b_mode & ADJUST_B_MODE_RESTORE) in adjust_b_process()
13903 Info = dtmf_restore_config(Id, plci, Rc); in adjust_b_process()
13904 if ((Info != GOOD) || plci->internal_command) in adjust_b_process()
13908 plci->adjust_b_state = ADJUST_B_RESTORE_MIXER_1; in adjust_b_process()
13917 if (plci->adjust_b_mode & ADJUST_B_MODE_RESTORE) in adjust_b_process()
13920 Info = mixer_restore_config(Id, plci, Rc); in adjust_b_process()
13921 if ((Info != GOOD) || plci->internal_command) in adjust_b_process()
13925 plci->adjust_b_state = ADJUST_B_END; in adjust_b_process()
13933 static void adjust_b1_resource(dword Id, PLCI *plci, API_SAVE *bp_msg, word b1_facilities, word i… in adjust_b1_resource() argument
13938 plci->B1_resource, b1_facilities)); in adjust_b1_resource()
13940 plci->adjust_b_parms_msg = bp_msg; in adjust_b1_resource()
13941 plci->adjust_b_facilities = b1_facilities; in adjust_b1_resource()
13942 plci->adjust_b_command = internal_command; in adjust_b1_resource()
13943 plci->adjust_b_ncci = (word)(Id >> 16); in adjust_b1_resource()
13944 if ((bp_msg == NULL) && (plci->B1_resource == 0)) in adjust_b1_resource()
13945 plci->adjust_b_mode = ADJUST_B_MODE_SAVE | ADJUST_B_MODE_NO_RESOURCE | ADJUST_B_MODE_SWITCH_L1; in adjust_b1_resource()
13947 plci->adjust_b_mode = ADJUST_B_MODE_SAVE | ADJUST_B_MODE_SWITCH_L1 | ADJUST_B_MODE_RESTORE; in adjust_b1_resource()
13948 plci->adjust_b_state = ADJUST_B_START; in adjust_b1_resource()
13951 plci->B1_resource, b1_facilities)); in adjust_b1_resource()
13955 static void adjust_b_restore(dword Id, PLCI *plci, byte Rc) in adjust_b_restore() argument
13960 UnMapId(Id), (char *)(FILE_), __LINE__, Rc, plci->internal_command)); in adjust_b_restore()
13962 internal_command = plci->internal_command; in adjust_b_restore()
13963 plci->internal_command = 0; in adjust_b_restore()
13967 plci->command = 0; in adjust_b_restore()
13968 if (plci->req_in != 0) in adjust_b_restore()
13970 plci->internal_command = ADJUST_B_RESTORE_1; in adjust_b_restore()
13980 plci->adjust_b_parms_msg = NULL; in adjust_b_restore()
13981 plci->adjust_b_facilities = plci->B1_facilities; in adjust_b_restore()
13982 plci->adjust_b_command = ADJUST_B_RESTORE_2; in adjust_b_restore()
13983 plci->adjust_b_ncci = (word)(Id >> 16); in adjust_b_restore()
13984 plci->adjust_b_mode = ADJUST_B_MODE_RESTORE; in adjust_b_restore()
13985 plci->adjust_b_state = ADJUST_B_START; in adjust_b_restore()
13989 if (adjust_b_process(Id, plci, Rc) != GOOD) in adjust_b_restore()
13994 if (plci->internal_command) in adjust_b_restore()
14001 static void reset_b3_command(dword Id, PLCI *plci, byte Rc) in reset_b3_command() argument
14007 UnMapId(Id), (char *)(FILE_), __LINE__, Rc, plci->internal_command)); in reset_b3_command()
14010 internal_command = plci->internal_command; in reset_b3_command()
14011 plci->internal_command = 0; in reset_b3_command()
14015 plci->command = 0; in reset_b3_command()
14016 plci->adjust_b_parms_msg = NULL; in reset_b3_command()
14017 plci->adjust_b_facilities = plci->B1_facilities; in reset_b3_command()
14018 plci->adjust_b_command = RESET_B3_COMMAND_1; in reset_b3_command()
14019 plci->adjust_b_ncci = (word)(Id >> 16); in reset_b3_command()
14020 plci->adjust_b_mode = ADJUST_B_MODE_REMOVE_L23 | ADJUST_B_MODE_ASSIGN_L23 | ADJUST_B_MODE_CONNECT; in reset_b3_command()
14021 plci->adjust_b_state = ADJUST_B_START; in reset_b3_command()
14025 Info = adjust_b_process(Id, plci, Rc); in reset_b3_command()
14032 if (plci->internal_command) in reset_b3_command()
14037 sendf(plci->appl, _RESET_B3_I, Id, 0, "s", ""); in reset_b3_command()
14041 static void select_b_command(dword Id, PLCI *plci, byte Rc) in select_b_command() argument
14048 UnMapId(Id), (char *)(FILE_), __LINE__, Rc, plci->internal_command)); in select_b_command()
14051 internal_command = plci->internal_command; in select_b_command()
14052 plci->internal_command = 0; in select_b_command()
14056 plci->command = 0; in select_b_command()
14057 plci->adjust_b_parms_msg = &plci->saved_msg; in select_b_command()
14058 if ((plci->tel == ADV_VOICE) && (plci == plci->adapter->AdvSignalPLCI)) in select_b_command()
14059 plci->adjust_b_facilities = plci->B1_facilities | B1_FACILITY_VOICE; in select_b_command()
14061 plci->adjust_b_facilities = plci->B1_facilities & ~B1_FACILITY_VOICE; in select_b_command()
14062 plci->adjust_b_command = SELECT_B_COMMAND_1; in select_b_command()
14063 plci->adjust_b_ncci = (word)(Id >> 16); in select_b_command()
14064 if (plci->saved_msg.parms[0].length == 0) in select_b_command()
14066 plci->adjust_b_mode = ADJUST_B_MODE_SAVE | ADJUST_B_MODE_REMOVE_L23 | ADJUST_B_MODE_SWITCH_L1 | in select_b_command()
14071 plci->adjust_b_mode = ADJUST_B_MODE_SAVE | ADJUST_B_MODE_REMOVE_L23 | ADJUST_B_MODE_SWITCH_L1 | in select_b_command()
14074 plci->adjust_b_state = ADJUST_B_START; in select_b_command()
14078 Info = adjust_b_process(Id, plci, Rc); in select_b_command()
14085 if (plci->internal_command) in select_b_command()
14087 if (plci->tel == ADV_VOICE) in select_b_command()
14091 esc_chi[2] = plci->b_channel; in select_b_command()
14092 SetVoiceChannel(plci->adapter->AdvCodecPLCI, esc_chi, plci->adapter); in select_b_command()
14096 sendf(plci->appl, _SELECT_B_REQ | CONFIRM, Id, plci->number, "w", Info); in select_b_command()
14100 static void fax_connect_ack_command(dword Id, PLCI *plci, byte Rc) in fax_connect_ack_command() argument
14105 UnMapId(Id), (char *)(FILE_), __LINE__, Rc, plci->internal_command)); in fax_connect_ack_command()
14107 internal_command = plci->internal_command; in fax_connect_ack_command()
14108 plci->internal_command = 0; in fax_connect_ack_command()
14112 plci->command = 0; in fax_connect_ack_command()
14114 if (plci_nl_busy(plci)) in fax_connect_ack_command()
14116 plci->internal_command = FAX_CONNECT_ACK_COMMAND_1; in fax_connect_ack_command()
14119 plci->internal_command = FAX_CONNECT_ACK_COMMAND_2; in fax_connect_ack_command()
14120 plci->NData[0].P = plci->fax_connect_info_buffer; in fax_connect_ack_command()
14121 plci->NData[0].PLength = plci->fax_connect_info_length; in fax_connect_ack_command()
14122 plci->NL.X = plci->NData; in fax_connect_ack_command()
14123 plci->NL.ReqCh = 0; in fax_connect_ack_command()
14124 plci->NL.Req = plci->nl_req = (byte) N_CONNECT_ACK; in fax_connect_ack_command()
14125 plci->adapter->request(&plci->NL); in fax_connect_ack_command()
14135 if ((plci->ncpi_state & NCPI_VALID_CONNECT_B3_ACT) in fax_connect_ack_command()
14136 && !(plci->ncpi_state & NCPI_CONNECT_B3_ACT_SENT)) in fax_connect_ack_command()
14138 if (plci->B3_prot == 4) in fax_connect_ack_command()
14139 sendf(plci->appl, _CONNECT_B3_ACTIVE_I, Id, 0, "s", ""); in fax_connect_ack_command()
14141 sendf(plci->appl, _CONNECT_B3_ACTIVE_I, Id, 0, "S", plci->ncpi_buffer); in fax_connect_ack_command()
14142 plci->ncpi_state |= NCPI_CONNECT_B3_ACT_SENT; in fax_connect_ack_command()
14147 static void fax_edata_ack_command(dword Id, PLCI *plci, byte Rc) in fax_edata_ack_command() argument
14152 UnMapId(Id), (char *)(FILE_), __LINE__, Rc, plci->internal_command)); in fax_edata_ack_command()
14154 internal_command = plci->internal_command; in fax_edata_ack_command()
14155 plci->internal_command = 0; in fax_edata_ack_command()
14159 plci->command = 0; in fax_edata_ack_command()
14161 if (plci_nl_busy(plci)) in fax_edata_ack_command()
14163 plci->internal_command = FAX_EDATA_ACK_COMMAND_1; in fax_edata_ack_command()
14166 plci->internal_command = FAX_EDATA_ACK_COMMAND_2; in fax_edata_ack_command()
14167 plci->NData[0].P = plci->fax_connect_info_buffer; in fax_edata_ack_command()
14168 plci->NData[0].PLength = plci->fax_edata_ack_length; in fax_edata_ack_command()
14169 plci->NL.X = plci->NData; in fax_edata_ack_command()
14170 plci->NL.ReqCh = 0; in fax_edata_ack_command()
14171 plci->NL.Req = plci->nl_req = (byte) N_EDATA; in fax_edata_ack_command()
14172 plci->adapter->request(&plci->NL); in fax_edata_ack_command()
14185 static void fax_connect_info_command(dword Id, PLCI *plci, byte Rc) in fax_connect_info_command() argument
14191 UnMapId(Id), (char *)(FILE_), __LINE__, Rc, plci->internal_command)); in fax_connect_info_command()
14194 internal_command = plci->internal_command; in fax_connect_info_command()
14195 plci->internal_command = 0; in fax_connect_info_command()
14199 plci->command = 0; in fax_connect_info_command()
14201 if (plci_nl_busy(plci)) in fax_connect_info_command()
14203 plci->internal_command = FAX_CONNECT_INFO_COMMAND_1; in fax_connect_info_command()
14206 plci->internal_command = FAX_CONNECT_INFO_COMMAND_2; in fax_connect_info_command()
14207 plci->NData[0].P = plci->fax_connect_info_buffer; in fax_connect_info_command()
14208 plci->NData[0].PLength = plci->fax_connect_info_length; in fax_connect_info_command()
14209 plci->NL.X = plci->NData; in fax_connect_info_command()
14210 plci->NL.ReqCh = 0; in fax_connect_info_command()
14211 plci->NL.Req = plci->nl_req = (byte) N_EDATA; in fax_connect_info_command()
14212 plci->adapter->request(&plci->NL); in fax_connect_info_command()
14222 if (plci_nl_busy(plci)) in fax_connect_info_command()
14224 plci->internal_command = FAX_CONNECT_INFO_COMMAND_2; in fax_connect_info_command()
14227 plci->command = _CONNECT_B3_R; in fax_connect_info_command()
14228 nl_req_ncci(plci, N_CONNECT, 0); in fax_connect_info_command()
14229 send_req(plci); in fax_connect_info_command()
14232 sendf(plci->appl, _CONNECT_B3_R | CONFIRM, Id, plci->number, "w", Info); in fax_connect_info_command()
14236 static void fax_adjust_b23_command(dword Id, PLCI *plci, byte Rc) in fax_adjust_b23_command() argument
14242 UnMapId(Id), (char *)(FILE_), __LINE__, Rc, plci->internal_command)); in fax_adjust_b23_command()
14245 internal_command = plci->internal_command; in fax_adjust_b23_command()
14246 plci->internal_command = 0; in fax_adjust_b23_command()
14250 plci->command = 0; in fax_adjust_b23_command()
14251 plci->adjust_b_parms_msg = NULL; in fax_adjust_b23_command()
14252 plci->adjust_b_facilities = plci->B1_facilities; in fax_adjust_b23_command()
14253 plci->adjust_b_command = FAX_ADJUST_B23_COMMAND_1; in fax_adjust_b23_command()
14254 plci->adjust_b_ncci = (word)(Id >> 16); in fax_adjust_b23_command()
14255 plci->adjust_b_mode = ADJUST_B_MODE_REMOVE_L23 | ADJUST_B_MODE_ASSIGN_L23; in fax_adjust_b23_command()
14256 plci->adjust_b_state = ADJUST_B_START; in fax_adjust_b23_command()
14260 Info = adjust_b_process(Id, plci, Rc); in fax_adjust_b23_command()
14267 if (plci->internal_command) in fax_adjust_b23_command()
14270 if (plci_nl_busy(plci)) in fax_adjust_b23_command()
14272 plci->internal_command = FAX_ADJUST_B23_COMMAND_2; in fax_adjust_b23_command()
14275 plci->command = _CONNECT_B3_R; in fax_adjust_b23_command()
14276 nl_req_ncci(plci, N_CONNECT, 0); in fax_adjust_b23_command()
14277 send_req(plci); in fax_adjust_b23_command()
14280 sendf(plci->appl, _CONNECT_B3_R | CONFIRM, Id, plci->number, "w", Info); in fax_adjust_b23_command()
14284 static void fax_disconnect_command(dword Id, PLCI *plci, byte Rc) in fax_disconnect_command() argument
14289 UnMapId(Id), (char *)(FILE_), __LINE__, Rc, plci->internal_command)); in fax_disconnect_command()
14291 internal_command = plci->internal_command; in fax_disconnect_command()
14292 plci->internal_command = 0; in fax_disconnect_command()
14296 plci->command = 0; in fax_disconnect_command()
14297 plci->internal_command = FAX_DISCONNECT_COMMAND_1; in fax_disconnect_command()
14313 plci->internal_command = FAX_DISCONNECT_COMMAND_2; in fax_disconnect_command()
14319 plci->internal_command = FAX_DISCONNECT_COMMAND_3; in fax_disconnect_command()
14327 static void rtp_connect_b3_req_command(dword Id, PLCI *plci, byte Rc) in rtp_connect_b3_req_command() argument
14333 UnMapId(Id), (char *)(FILE_), __LINE__, Rc, plci->internal_command)); in rtp_connect_b3_req_command()
14336 internal_command = plci->internal_command; in rtp_connect_b3_req_command()
14337 plci->internal_command = 0; in rtp_connect_b3_req_command()
14341 plci->command = 0; in rtp_connect_b3_req_command()
14343 if (plci_nl_busy(plci)) in rtp_connect_b3_req_command()
14345 plci->internal_command = RTP_CONNECT_B3_REQ_COMMAND_1; in rtp_connect_b3_req_command()
14348 plci->internal_command = RTP_CONNECT_B3_REQ_COMMAND_2; in rtp_connect_b3_req_command()
14349 nl_req_ncci(plci, N_CONNECT, 0); in rtp_connect_b3_req_command()
14350 send_req(plci); in rtp_connect_b3_req_command()
14360 if (plci_nl_busy(plci)) in rtp_connect_b3_req_command()
14362 plci->internal_command = RTP_CONNECT_B3_REQ_COMMAND_2; in rtp_connect_b3_req_command()
14365 plci->internal_command = RTP_CONNECT_B3_REQ_COMMAND_3; in rtp_connect_b3_req_command()
14366 plci->NData[0].PLength = plci->internal_req_buffer[0]; in rtp_connect_b3_req_command()
14367 plci->NData[0].P = plci->internal_req_buffer + 1; in rtp_connect_b3_req_command()
14368 plci->NL.X = plci->NData; in rtp_connect_b3_req_command()
14369 plci->NL.ReqCh = 0; in rtp_connect_b3_req_command()
14370 plci->NL.Req = plci->nl_req = (byte) N_UDATA; in rtp_connect_b3_req_command()
14371 plci->adapter->request(&plci->NL); in rtp_connect_b3_req_command()
14376 sendf(plci->appl, _CONNECT_B3_R | CONFIRM, Id, plci->number, "w", Info); in rtp_connect_b3_req_command()
14380 static void rtp_connect_b3_res_command(dword Id, PLCI *plci, byte Rc) in rtp_connect_b3_res_command() argument
14385 UnMapId(Id), (char *)(FILE_), __LINE__, Rc, plci->internal_command)); in rtp_connect_b3_res_command()
14387 internal_command = plci->internal_command; in rtp_connect_b3_res_command()
14388 plci->internal_command = 0; in rtp_connect_b3_res_command()
14392 plci->command = 0; in rtp_connect_b3_res_command()
14394 if (plci_nl_busy(plci)) in rtp_connect_b3_res_command()
14396 plci->internal_command = RTP_CONNECT_B3_RES_COMMAND_1; in rtp_connect_b3_res_command()
14399 plci->internal_command = RTP_CONNECT_B3_RES_COMMAND_2; in rtp_connect_b3_res_command()
14400 nl_req_ncci(plci, N_CONNECT_ACK, (byte)(Id >> 16)); in rtp_connect_b3_res_command()
14401 send_req(plci); in rtp_connect_b3_res_command()
14410 if (plci_nl_busy(plci)) in rtp_connect_b3_res_command()
14412 plci->internal_command = RTP_CONNECT_B3_RES_COMMAND_2; in rtp_connect_b3_res_command()
14415 sendf(plci->appl, _CONNECT_B3_ACTIVE_I, Id, 0, "s", ""); in rtp_connect_b3_res_command()
14416 plci->internal_command = RTP_CONNECT_B3_RES_COMMAND_3; in rtp_connect_b3_res_command()
14417 plci->NData[0].PLength = plci->internal_req_buffer[0]; in rtp_connect_b3_res_command()
14418 plci->NData[0].P = plci->internal_req_buffer + 1; in rtp_connect_b3_res_command()
14419 plci->NL.X = plci->NData; in rtp_connect_b3_res_command()
14420 plci->NL.ReqCh = 0; in rtp_connect_b3_res_command()
14421 plci->NL.Req = plci->nl_req = (byte) N_UDATA; in rtp_connect_b3_res_command()
14422 plci->adapter->request(&plci->NL); in rtp_connect_b3_res_command()
14431 static void hold_save_command(dword Id, PLCI *plci, byte Rc) in hold_save_command() argument
14438 UnMapId(Id), (char *)(FILE_), __LINE__, Rc, plci->internal_command)); in hold_save_command()
14441 internal_command = plci->internal_command; in hold_save_command()
14442 plci->internal_command = 0; in hold_save_command()
14446 if (!plci->NL.Id) in hold_save_command()
14448 plci->command = 0; in hold_save_command()
14449 plci->adjust_b_parms_msg = NULL; in hold_save_command()
14450 plci->adjust_b_facilities = plci->B1_facilities; in hold_save_command()
14451 plci->adjust_b_command = HOLD_SAVE_COMMAND_1; in hold_save_command()
14452 plci->adjust_b_ncci = (word)(Id >> 16); in hold_save_command()
14453 plci->adjust_b_mode = ADJUST_B_MODE_SAVE | ADJUST_B_MODE_REMOVE_L23; in hold_save_command()
14454 plci->adjust_b_state = ADJUST_B_START; in hold_save_command()
14458 Info = adjust_b_process(Id, plci, Rc); in hold_save_command()
14465 if (plci->internal_command) in hold_save_command()
14468 sendf(plci->appl, _FACILITY_I, Id & 0xffffL, 0, "ws", 3, SS_Ind); in hold_save_command()
14472 static void retrieve_restore_command(dword Id, PLCI *plci, byte Rc) in retrieve_restore_command() argument
14479 UnMapId(Id), (char *)(FILE_), __LINE__, Rc, plci->internal_command)); in retrieve_restore_command()
14482 internal_command = plci->internal_command; in retrieve_restore_command()
14483 plci->internal_command = 0; in retrieve_restore_command()
14487 plci->command = 0; in retrieve_restore_command()
14488 plci->adjust_b_parms_msg = NULL; in retrieve_restore_command()
14489 plci->adjust_b_facilities = plci->B1_facilities; in retrieve_restore_command()
14490 plci->adjust_b_command = RETRIEVE_RESTORE_COMMAND_1; in retrieve_restore_command()
14491 plci->adjust_b_ncci = (word)(Id >> 16); in retrieve_restore_command()
14492plci->adjust_b_mode = ADJUST_B_MODE_ASSIGN_L23 | ADJUST_B_MODE_USER_CONNECT | ADJUST_B_MODE_RESTOR… in retrieve_restore_command()
14493 plci->adjust_b_state = ADJUST_B_START; in retrieve_restore_command()
14497 Info = adjust_b_process(Id, plci, Rc); in retrieve_restore_command()
14504 if (plci->internal_command) in retrieve_restore_command()
14507 sendf(plci->appl, _FACILITY_I, Id & 0xffffL, 0, "ws", 3, SS_Ind); in retrieve_restore_command()
14511 static void init_b1_config(PLCI *plci) in init_b1_config() argument
14515 (dword)((plci->Id << 8) | UnMapController(plci->adapter->Id)), in init_b1_config()
14518 plci->B1_resource = 0; in init_b1_config()
14519 plci->B1_facilities = 0; in init_b1_config()
14521 plci->li_bchannel_id = 0; in init_b1_config()
14522 mixer_clear_config(plci); in init_b1_config()
14525 ec_clear_config(plci); in init_b1_config()
14528 dtmf_rec_clear_config(plci); in init_b1_config()
14529 dtmf_send_clear_config(plci); in init_b1_config()
14530 dtmf_parameter_clear_config(plci); in init_b1_config()
14532 adv_voice_clear_config(plci); in init_b1_config()
14533 adjust_b_clear(plci); in init_b1_config()
14537 static void clear_b1_config(PLCI *plci) in clear_b1_config() argument
14541 (dword)((plci->Id << 8) | UnMapController(plci->adapter->Id)), in clear_b1_config()
14544 adv_voice_clear_config(plci); in clear_b1_config()
14545 adjust_b_clear(plci); in clear_b1_config()
14547 ec_clear_config(plci); in clear_b1_config()
14550 dtmf_rec_clear_config(plci); in clear_b1_config()
14551 dtmf_send_clear_config(plci); in clear_b1_config()
14552 dtmf_parameter_clear_config(plci); in clear_b1_config()
14555 if ((plci->li_bchannel_id != 0) in clear_b1_config()
14556 && (li_config_table[plci->adapter->li_base + (plci->li_bchannel_id - 1)].plci == plci)) in clear_b1_config()
14558 mixer_clear_config(plci); in clear_b1_config()
14559 li_config_table[plci->adapter->li_base + (plci->li_bchannel_id - 1)].plci = NULL; in clear_b1_config()
14560 plci->li_bchannel_id = 0; in clear_b1_config()
14563 plci->B1_resource = 0; in clear_b1_config()
14564 plci->B1_facilities = 0; in clear_b1_config()
14571 static void channel_flow_control_remove(PLCI *plci) { in channel_flow_control_remove() argument
14572 DIVA_CAPI_ADAPTER *a = plci->adapter; in channel_flow_control_remove()
14575 if (a->ch_flow_plci[i] == plci->Id) { in channel_flow_control_remove()
14582 static void channel_x_on(PLCI *plci, byte ch) { in channel_x_on() argument
14583 DIVA_CAPI_ADAPTER *a = plci->adapter; in channel_x_on()
14589 static void channel_x_off(PLCI *plci, byte ch, byte flag) { in channel_x_off() argument
14590 DIVA_CAPI_ADAPTER *a = plci->adapter; in channel_x_off()
14593 a->ch_flow_plci[ch] = plci->Id; in channel_x_off()
14598 static void channel_request_xon(PLCI *plci, byte ch) { in channel_request_xon() argument
14599 DIVA_CAPI_ADAPTER *a = plci->adapter; in channel_request_xon()
14608 static void channel_xmit_extended_xon(PLCI *plci) { in channel_xmit_extended_xon() argument
14613 if ((!plci) || (!plci->Id) || ((a = plci->adapter) == NULL)) { in channel_xmit_extended_xon()
14620 (plci->Id == a->ch_flow_plci[i])) { in channel_xmit_extended_xon()
14621 channel_request_xon(plci, (byte)i); in channel_xmit_extended_xon()
14627 channel_xmit_xon(plci); in channel_xmit_extended_xon()
14634 static int find_channel_with_pending_x_on(DIVA_CAPI_ADAPTER *a, PLCI *plci) { in find_channel_with_pending_x_on() argument
14638 if (!(plci->adapter->manufacturer_features & MANUFACTURER_FEATURE_XONOFF_FLOW_CONTROL)) { in find_channel_with_pending_x_on()
14647 (plci->Id == a->ch_flow_plci[i])) { in find_channel_with_pending_x_on()
14655 (plci->Id == a->ch_flow_plci[i])) { in find_channel_with_pending_x_on()
14664 static void channel_xmit_xon(PLCI *plci) { in channel_xmit_xon() argument
14665 DIVA_CAPI_ADAPTER *a = plci->adapter; in channel_xmit_xon()
14668 if (plci->nl_req || !plci->NL.Id || plci->nl_remove_id) { in channel_xmit_xon()
14671 if ((ch = (byte)find_channel_with_pending_x_on(a, plci)) == 0) { in channel_xmit_xon()
14677 plci->NL.Req = plci->nl_req = (byte)N_XON; in channel_xmit_xon()
14678 plci->NL.ReqCh = ch; in channel_xmit_xon()
14679 plci->NL.X = plci->NData; in channel_xmit_xon()
14680 plci->NL.XNum = 1; in channel_xmit_xon()
14681 plci->NData[0].P = &plci->RBuffer[0]; in channel_xmit_xon()
14682 plci->NData[0].PLength = 0; in channel_xmit_xon()
14684 plci->adapter->request(&plci->NL); in channel_xmit_xon()
14687 static int channel_can_xon(PLCI *plci, byte ch) { in channel_can_xon() argument
14695 APPLptr = plci->appl; in channel_can_xon()
14696 a = plci->adapter; in channel_can_xon()
14736 static void group_optimization(DIVA_CAPI_ADAPTER *a, PLCI *plci) in group_optimization() argument
14744 set_group_ind_mask(plci); /* all APPLs within this inc. call are allowed to dial in */ in group_optimization()
14777 if (a->plci[k].Id) in group_optimization()
14779 auxplci = &a->plci[k]; in group_optimization()
14835 clear_group_ind_mask_bit(plci, j); /* disable call on other group members */ in group_optimization()
14843 clear_group_ind_mask_bit(plci, i); in group_optimization()
14856 PLCI *plci; in CapiRegister() local
14879 plci = &a->plci[j - 1]; in CapiRegister()
14880 plci->command = 0; in CapiRegister()
14881 add_p(plci, OAD, "\x01\xfd"); in CapiRegister()
14882 add_p(plci, CAI, "\x01\x80"); in CapiRegister()
14883 add_p(plci, UID, "\x06\x43\x61\x70\x69\x32\x30"); in CapiRegister()
14884 add_p(plci, SHIFT | 6, NULL); in CapiRegister()
14885 add_p(plci, SIN, "\x02\x00\x00"); in CapiRegister()
14886 plci->internal_command = START_L1_SIG_ASSIGN_PEND; in CapiRegister()
14887 sig_req(plci, ASSIGN, DSIG_ID); in CapiRegister()
14888 add_p(plci, FTY, "\x02\xff\x07"); /* l1 start */ in CapiRegister()
14889 sig_req(plci, SIG_CTRL, 0); in CapiRegister()
14890 send_req(plci); in CapiRegister()
14903 static void VSwitchReqInd(PLCI *plci, dword Id, byte **parms) in VSwitchReqInd() argument
14915 if (!plci || in VSwitchReqInd()
14916 !plci->appl || in VSwitchReqInd()
14917 !plci->State || in VSwitchReqInd()
14918 plci->Sig.Ind == NCR_FACILITY in VSwitchReqInd()
14934 if (!plci->relatedPTYPLCI || in VSwitchReqInd()
14935 (plci->ptyState != S_ECT && plci->relatedPTYPLCI->ptyState != S_ECT)) in VSwitchReqInd()
14946 plci->vswitchstate = parms[i][9]; in VSwitchReqInd()
14952 plci->vswitchstate = parms[i][9]; in VSwitchReqInd()
14960 plci->vsprot = parms[i][10]; /* protocol */ in VSwitchReqInd()
14961 plci->vsprotdialect = parms[i][11]; /* protocoldialect */ in VSwitchReqInd()
14966 plci->relatedPTYPLCI->command = 0; in VSwitchReqInd()
14967 plci->relatedPTYPLCI->internal_command = VSWITCH_REQ_PEND; in VSwitchReqInd()
14968 add_p(plci->relatedPTYPLCI, ESC, &parms[i][0]); in VSwitchReqInd()
14969 sig_req(plci->relatedPTYPLCI, VSWITCH_REQ, 0); in VSwitchReqInd()
14970 send_req(plci->relatedPTYPLCI); in VSwitchReqInd()
14974 if (plci->relatedPTYPLCI && in VSwitchReqInd()
14975 plci->vswitchstate == 3 && in VSwitchReqInd()
14976 plci->relatedPTYPLCI->vswitchstate == 3) in VSwitchReqInd()
14978 add_p(plci->relatedPTYPLCI, ESC, &parms[i][0]); in VSwitchReqInd()
14979 sig_req(plci->relatedPTYPLCI, VSWITCH_REQ, 0); in VSwitchReqInd()
14980 send_req(plci->relatedPTYPLCI); in VSwitchReqInd()
14991 static int diva_get_dma_descriptor(PLCI *plci, dword *dma_magic) { in diva_get_dma_descriptor() argument
15007 e.user[0] = plci->adapter->Id - 1; in diva_get_dma_descriptor()
15008 plci->adapter->request((ENTITY *)pReq); in diva_get_dma_descriptor()
15015 plci->adapter->Id, in diva_get_dma_descriptor()
15025 static void diva_free_dma_descriptor(PLCI *plci, int nr) { in diva_free_dma_descriptor() argument
15041 e.user[0] = plci->adapter->Id - 1; in diva_free_dma_descriptor()
15042 plci->adapter->request((ENTITY *)pReq); in diva_free_dma_descriptor()