Lines Matching full:a
18 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 You should have received a copy of the GNU General Public License
43 void pr_out(ADAPTER * a);
44 byte pr_dpc(ADAPTER * a);
45 static byte pr_ready(ADAPTER * a);
78 void pr_out(ADAPTER * a) in pr_out() argument
92 /* while a request is pending ... */ in pr_out()
93 e_no = look_req(a); in pr_out()
99 ReadyCount = pr_ready(a); in pr_out()
107 next_req(a); in pr_out()
108 this = entity_ptr(a, e_no); in pr_out()
112 DBG_FTL(("XDI: [%02x] !A%d ==> NULL entity ptr - try to ignore", in pr_out()
113 xdi_xlog_sec++, (int)((ISDN_ADAPTER *)a->io)->ANum)) in pr_out()
114 e_no = look_req(a) ; in pr_out()
119 DBG_TRC((">A%d Id=0x%x Req=0x%x", ((ISDN_ADAPTER *)a->io)->ANum, this->Id, this->Req)) in pr_out()
125 ReqOut = (REQ *)&PR_RAM->B[a->ram_inw(a, &PR_RAM->NextReq)]; in pr_out()
127 if (!(a->tx_stream[this->Id] && in pr_out()
134 X = PTR_X(a,this); in pr_out()
137 a->ram_out_buffer(a, in pr_out()
139 PTR_P(a,this,&X[i].P[this->XOffset]), in pr_out()
151 X = PTR_X(a,this); in pr_out()
153 diva_istream_write (a, in pr_out()
155 PTR_P(a,this,&X[i].P[0]), in pr_out()
164 a->ram_outw(a, &ReqOut->XBuffer.length, length); in pr_out()
165 a->ram_out(a, &ReqOut->ReqId, this->Id); in pr_out()
166 a->ram_out(a, &ReqOut->ReqCh, this->ReqCh); in pr_out()
167 /* if it's a specific request (no ASSIGN) ... */ in pr_out()
173 xdi_xlog_request (XDI_A_NR(a), this->Id, this->ReqCh, this->MInd, in pr_out()
174 a->IdTypeTable[this->No]); in pr_out()
175 a->ram_out(a, &ReqOut->Req, this->MInd); in pr_out()
179 xdi_xlog_request (XDI_A_NR(a), this->Id, this->ReqCh, this->Req, in pr_out()
180 a->IdTypeTable[this->No]); in pr_out()
182 a->ram_out(a, &ReqOut->Req, this->Req); in pr_out()
184 if (a->FlowControlIdTable[this->ReqCh] == this->Id) in pr_out()
185 a->FlowControlSkipTable[this->ReqCh] = true; in pr_out()
190 a->misc_flags_table[e_no] |= DIVA_MISC_FLAGS_REMOVE_PENDING; in pr_out()
196 req_queue(a,this->No); in pr_out()
199 /* else it's a ASSIGN */ in pr_out()
209 a->IdTypeTable[this->No] = this->Id; in pr_out()
210 xdi_xlog_request (XDI_A_NR(a),this->Id,this->ReqCh,this->Req, this->Id); in pr_out()
212 a->ram_out(a, &ReqOut->Req, this->Req); in pr_out()
214 assign_queue(a, this->No, a->ram_inw(a, &ReqOut->Reference)); in pr_out()
216 a->ram_outw(a, &PR_RAM->NextReq, a->ram_inw(a, &ReqOut->next)); in pr_out()
219 e_no = look_req(a); in pr_out()
222 a->ram_out(a, &PR_RAM->ReqInput, in pr_out()
223 (byte)(a->ram_in(a, &PR_RAM->ReqInput) + ReqCount)); in pr_out()
224 /* if it is a 'unreturncoded' UREMOVE request, remove the */ in pr_out()
228 e_no = a->IdTable[Id]; in pr_out()
229 free_entity(a, e_no); in pr_out()
232 if (a->FlowControlIdTable[i] == Id) in pr_out()
233 a->FlowControlIdTable[i] = 0; in pr_out()
235 a->IdTable[Id] = 0; in pr_out()
239 static byte pr_ready(ADAPTER * a) in pr_ready() argument
242 ReadyCount = (byte)(a->ram_in(a, &PR_RAM->ReqOutput) - in pr_ready()
243 a->ram_in(a, &PR_RAM->ReqInput)); in pr_ready()
245 if(!a->ReadyInt) { in pr_ready()
246 a->ram_inc(a, &PR_RAM->ReadyInt); in pr_ready()
247 a->ReadyInt++; in pr_ready()
255 byte pr_dpc(ADAPTER * a) in pr_dpc() argument
265 if((Count = a->ram_in(a, &PR_RAM->RcOutput)) != 0) { in pr_dpc()
268 RcIn = (RC *)&PR_RAM->B[a->ram_inw(a, &PR_RAM->NextRc)]; in pr_dpc()
271 if((Rc=a->ram_in(a, &RcIn->Rc)) != 0) { in pr_dpc()
276 a->ram_in_buffer(a, in pr_dpc()
283 isdn_rc(a, in pr_dpc()
285 a->ram_in(a, &RcIn->RcId), in pr_dpc()
286 a->ram_in(a, &RcIn->RcCh), in pr_dpc()
287 a->ram_inw(a, &RcIn->Reference), in pr_dpc()
290 a->ram_out(a, &RcIn->Rc, 0); in pr_dpc()
293 RcIn = (RC *)&PR_RAM->B[a->ram_inw(a, &RcIn->next)]; in pr_dpc()
296 a->ram_out(a, &PR_RAM->RcOutput ,0); in pr_dpc()
298 pr_out(a); in pr_dpc()
303 if((Count = a->ram_in(a, &PR_RAM->IndOutput)) != 0) { in pr_dpc()
306 IndIn = (IND *)&PR_RAM->B[a->ram_inw(a, &PR_RAM->NextInd)]; in pr_dpc()
312 if(RNRId && RNRId==a->ram_in(a, &IndIn->IndId)) { in pr_dpc()
313 a->ram_out(a, &IndIn->Ind, 0); in pr_dpc()
314 a->ram_out(a, &IndIn->RNR, true); in pr_dpc()
317 Ind = a->ram_in(a, &IndIn->Ind); in pr_dpc()
320 /* call indication handler, a return value of 2 means chain */ in pr_dpc()
321 /* a return value of 1 means RNR */ in pr_dpc()
323 c = isdn_ind(a, in pr_dpc()
325 a->ram_in(a, &IndIn->IndId), in pr_dpc()
326 a->ram_in(a, &IndIn->IndCh), in pr_dpc()
328 a->ram_in(a, &IndIn->MInd), in pr_dpc()
329 a->ram_inw(a, &IndIn->MLength)); in pr_dpc()
332 a->ram_out(a, &IndIn->Ind, 0); in pr_dpc()
333 RNRId = a->ram_in(a, &IndIn->IndId); in pr_dpc()
334 a->ram_out(a, &IndIn->RNR, true); in pr_dpc()
339 IndIn = (IND *)&PR_RAM->B[a->ram_inw(a, &IndIn->next)]; in pr_dpc()
341 a->ram_out(a, &PR_RAM->IndOutput, 0); in pr_dpc()
345 byte scom_test_int(ADAPTER * a) in scom_test_int() argument
347 return a->ram_in(a,(void *)0x3fe); in scom_test_int()
349 void scom_clear_int(ADAPTER * a) in scom_clear_int() argument
351 a->ram_out(a,(void *)0x3fe,0); in scom_clear_int()
356 static byte isdn_rc(ADAPTER *a, in isdn_rc() argument
370 DBG_TRC(("<A%d Id=0x%x Rc=0x%x", ((ISDN_ADAPTER *)a->io)->ANum, Id, Rc)) in isdn_rc()
377 xdi_xlog_rc_event (XDI_A_NR(a), Id, Ch, Rc, 0, 0); in isdn_rc()
378 if(a->ReadyInt) { in isdn_rc()
379 a->ReadyInt--; in isdn_rc()
385 e_no = a->IdTable[Id]; in isdn_rc()
387 this = entity_ptr(a,e_no); in isdn_rc()
388 xdi_xlog_rc_event (XDI_A_NR(a), Id, Ch, Rc, 0, a->IdTypeTable[this->No]); in isdn_rc()
390 /* if it is a return code to a REMOVE request, remove the */ in isdn_rc()
392 if ((a->misc_flags_table[e_no] & DIVA_MISC_FLAGS_REMOVE_PENDING) && in isdn_rc()
394 if (a->IdTypeTable[e_no] == NL_ID) { in isdn_rc()
395 if (a->RcExtensionSupported && in isdn_rc()
397 dtrc(dprintf("XDI: N-REMOVE, A(%02x) Id:%02x, ignore RC=OK", in isdn_rc()
398 XDI_A_NR(a),Id)); in isdn_rc()
402 a->RcExtensionSupported = true; in isdn_rc()
404 a->misc_flags_table[e_no] &= ~DIVA_MISC_FLAGS_REMOVE_PENDING; in isdn_rc()
405 a->misc_flags_table[e_no] &= ~DIVA_MISC_FLAGS_NO_RC_CANCELLING; in isdn_rc()
406 free_entity(a, e_no); in isdn_rc()
409 if (a->FlowControlIdTable[i] == Id) in isdn_rc()
410 a->FlowControlIdTable[i] = 0; in isdn_rc()
412 a->IdTable[Id] = 0; in isdn_rc()
425 dtrc(dprintf("XDI: correct MORE on REMOVE A(%02x) Id:%02x", in isdn_rc()
426 XDI_A_NR(a),Id)); in isdn_rc()
430 a->FlowControlIdTable[Ch] = Id; in isdn_rc()
431 a->FlowControlSkipTable[Ch] = false; in isdn_rc()
435 xdi_xlog_rc_event (XDI_A_NR(a), Id, Ch, Rc, 1, a->IdTypeTable[this->No]); in isdn_rc()
436 CALLBACK(a, this); in isdn_rc()
450 a->misc_flags_table[e_no] |= DIVA_MISC_FLAGS_NO_RC_CANCELLING; in isdn_rc()
453 xdi_xlog_rc_event (XDI_A_NR(a), Id, Ch, Rc, 1, a->IdTypeTable[this->No]); in isdn_rc()
454 DBG_TRC(("XDI OK_FC A(%02x) Id:%02x Ch:%02x Rc:%02x", in isdn_rc()
455 XDI_A_NR(a), Id, Ch, Rc)) in isdn_rc()
456 CALLBACK(a, this); in isdn_rc()
459 cancel_rc = !(a->misc_flags_table[e_no] & DIVA_MISC_FLAGS_NO_RC_CANCELLING); in isdn_rc()
460 if (cancel_rc && (a->FlowControlIdTable[Ch] == Id)) in isdn_rc()
462 a->FlowControlIdTable[Ch] = 0; in isdn_rc()
463 if ((Rc != OK) || !a->FlowControlSkipTable[Ch]) in isdn_rc()
471 xdi_xlog_rc_event (XDI_A_NR(a), Id, Ch, Rc, 1, a->IdTypeTable[this->No]); in isdn_rc()
472 CALLBACK(a, this); in isdn_rc()
483 xdi_xlog_rc_event (XDI_A_NR(a), Id, Ch, Rc, 1, a->IdTypeTable[this->No]); in isdn_rc()
484 CALLBACK(a, this); in isdn_rc()
488 /* if it's an ASSIGN return code check if it's a return */ in isdn_rc()
491 e_no = get_assign(a, Ref); in isdn_rc()
493 this = entity_ptr(a,e_no); in isdn_rc()
495 xdi_xlog_rc_event (XDI_A_NR(a), Id, Ch, Rc, 2, a->IdTypeTable[this->No]); in isdn_rc()
501 if ((Rc == ASSIGN_OK) && a->ram_offset && in isdn_rc()
502 (a->IdTypeTable[this->No] == NL_ID) && in isdn_rc()
506 dword offset = (*(a->ram_offset)) (a); in isdn_rc()
510 a->ram_in_dw(a, (void*)ULongToPtr(extended_info), (dword*)&tmp[0], 2); in isdn_rc()
512 a->ram_in_dw(a, (void*)extended_info, (dword*)&tmp[0], 2); in isdn_rc()
514 a->tx_stream[Id] = tmp[0]; in isdn_rc()
515 a->rx_stream[Id] = tmp[1]; in isdn_rc()
518 Id, a->tx_stream[Id], a->rx_stream[Id])) in isdn_rc()
519 a->misc_flags_table[this->No] |= DIVA_MISC_FLAGS_RX_DMA; in isdn_rc()
522 Id, a->tx_stream[Id], a->rx_stream[Id])) in isdn_rc()
523 a->misc_flags_table[this->No] &= ~DIVA_MISC_FLAGS_RX_DMA; in isdn_rc()
524 a->rx_pos[Id] = 0; in isdn_rc()
525 a->rx_stream[Id] -= offset; in isdn_rc()
527 a->tx_pos[Id] = 0; in isdn_rc()
528 a->tx_stream[Id] -= offset; in isdn_rc()
530 a->tx_stream[Id] = 0; in isdn_rc()
531 a->rx_stream[Id] = 0; in isdn_rc()
532 a->misc_flags_table[this->No] &= ~DIVA_MISC_FLAGS_RX_DMA; in isdn_rc()
535 CALLBACK(a, this); in isdn_rc()
537 a->IdTable[Id] = e_no; in isdn_rc()
541 free_entity(a, e_no); in isdn_rc()
544 if (a->FlowControlIdTable[i] == Id) in isdn_rc()
545 a->FlowControlIdTable[i] = 0; in isdn_rc()
547 a->IdTable[Id] = 0; in isdn_rc()
558 static byte isdn_ind(ADAPTER *a, in isdn_ind() argument
573 DBG_TRC(("<A%d Id=0x%x Ind=0x%x", ((ISDN_ADAPTER *)a->io)->ANum, Id, Ind)) in isdn_ind()
578 if(a->IdTable[Id]) { in isdn_ind()
579 this = entity_ptr(a,a->IdTable[Id]); in isdn_ind()
581 xdi_xlog_ind (XDI_A_NR(a), Id, Ch, Ind, in isdn_ind()
582 0/* rnr_valid */, 0 /* rnr */, a->IdTypeTable[this->No]); in isdn_ind()
599 if ((a->rx_stream[this->Id] || in isdn_ind()
600 (a->misc_flags_table[this->No] & DIVA_MISC_FLAGS_RX_DMA)) && in isdn_ind()
602 (a->protocol_capabilities & PROTCAP_CMA_ALLPR))) { in isdn_ind()
603 PISDN_ADAPTER IoAdapter = (PISDN_ADAPTER)a->io ; in isdn_ind()
604 if (a->misc_flags_table[this->No] & DIVA_MISC_FLAGS_RX_DMA) { in isdn_ind()
609 (int)a->rx_stream[this->Id], (void**)&cma, &d); in isdn_ind()
611 cma = &a->stream_buffer[0]; in isdn_ind()
618 cma = &a->stream_buffer[0]; in isdn_ind()
619 this->RLength = MLength = (word)diva_istream_read (a, in isdn_ind()
622 sizeof(a->stream_buffer), in isdn_ind()
636 a->ram_look_ahead(a, RBuffer, this); in isdn_ind()
639 CALLBACK(a, this); in isdn_ind()
642 this = entity_ptr(a,a->IdTable[Id]); in isdn_ind()
643 xdi_xlog_ind (XDI_A_NR(a), Id, Ch, Ind, in isdn_ind()
644 1/* rnr_valid */, this->RNR/* rnr */, a->IdTypeTable[this->No]); in isdn_ind()
654 xdi_xlog_ind (XDI_A_NR(a), Id, Ch, Ind, in isdn_ind()
655 2/* rnr_valid */, 0/* rnr */, a->IdTypeTable[this->No]); in isdn_ind()
672 R = PTR_R(a,this); in isdn_ind()
681 clength = min(a->ram_inw(a, &RBuffer->length)-offset, in isdn_ind()
686 memcpy (PTR_P(a,this,&R[this->RCurrent].P[this->ROffset]), in isdn_ind()
690 a->ram_in_buffer(a, in isdn_ind()
692 PTR_P(a,this,&R[this->RCurrent].P[this->ROffset]), in isdn_ind()
704 } while(offset<(a->ram_inw(a, &RBuffer->length))); in isdn_ind()
715 xdi_xlog_ind (XDI_A_NR(a), Id, Ch, Ind, in isdn_ind()
716 3/* rnr_valid */, 0/* rnr */, a->IdTypeTable[this->No]); in isdn_ind()
717 CALLBACK(a, this); in isdn_ind()