/*------------------------------------------------------------------*/
void pr_out(ADAPTER * a);
byte pr_dpc(ADAPTER * a);
-void scom_out(ADAPTER * a);
-byte scom_dpc(ADAPTER * a);
static byte pr_ready(ADAPTER * a);
-static byte scom_ready(ADAPTER * a);
static byte isdn_rc(ADAPTER *, byte, byte, byte, word, dword, dword);
static byte isdn_ind(ADAPTER *, byte, byte, byte, PBUFFER *, byte, word);
/* -----------------------------------------------------------------
----------------------------------------------------------------- */
#if defined(XDI_USE_XLOG)
#define XDI_A_NR(_x_) ((byte)(((ISDN_ADAPTER *)(_x_->io))->ANum))
+static void xdi_xlog (byte *msg, word code, int length);
+static byte xdi_xlog_sec = 0;
#else
#define XDI_A_NR(_x_) ((byte)0)
#endif
-byte xdi_xlog_sec = 0;
-void xdi_xlog (byte *msg, word code, int length);
static void xdi_xlog_rc_event (byte Adapter,
byte Id, byte Ch, byte Rc, byte cb, byte type);
static void xdi_xlog_request (byte Adapter, byte Id,
}
return FALSE;
}
-byte pr_test_int(ADAPTER * a)
-{
- return a->ram_in(a,(void *)0x3ffc);
-}
-void pr_clear_int(ADAPTER * a)
-{
- a->ram_out(a,(void *)0x3ffc,0);
-}
-/*------------------------------------------------------------------*/
-/* output function */
-/*------------------------------------------------------------------*/
-void scom_out(ADAPTER * a)
-{
- byte e_no;
- ENTITY * this;
- BUFFERS * X;
- word length;
- word i;
- word clength;
- byte more;
- byte Id;
- dtrc(dprintf("scom_out"));
- /* check if the adapter is ready to accept an request: */
- e_no = look_req(a);
- if(!e_no)
- {
- dtrc(dprintf("no_req"));
- return;
- }
- if(!scom_ready(a))
- {
- dtrc(dprintf("not_ready"));
- return;
- }
- this = entity_ptr(a,e_no);
- dtrc(dprintf("out:Req=%x,Id=%x,Ch=%x",this->Req,this->Id,this->ReqCh));
- next_req(a);
- /* now copy the data from the current data buffer into the */
- /* adapters request buffer */
- length = 0;
- i = this->XCurrent;
- X = PTR_X(a, this);
- while(i<this->XNum && length<270) {
- clength = MIN((word)(270-length),X[i].PLength-this->XOffset);
- a->ram_out_buffer(a,
- &RAM->XBuffer.P[length],
- PTR_P(a,this,&X[i].P[this->XOffset]),
- clength);
- length +=clength;
- this->XOffset +=clength;
- if(this->XOffset==X[i].PLength) {
- this->XCurrent = (byte)++i;
- this->XOffset = 0;
- }
- }
- a->ram_outw(a, &RAM->XBuffer.length, length);
- a->ram_out(a, &RAM->ReqId, this->Id);
- a->ram_out(a, &RAM->ReqCh, this->ReqCh);
- /* if it's a specific request (no ASSIGN) ... */
- if(this->Id &0x1f) {
- /* if buffers are left in the list of data buffers do */
- /* chaining (LL_MDATA, N_MDATA) */
- this->More++;
- if(i<this->XNum && this->MInd) {
- a->ram_out(a, &RAM->Req, this->MInd);
- more = TRUE;
- }
- else {
- this->More |=XMOREF;
- a->ram_out(a, &RAM->Req, this->Req);
- more = FALSE;
- if (a->FlowControlIdTable[this->ReqCh] == this->Id)
- a->FlowControlSkipTable[this->ReqCh] = TRUE;
- /*
- Note that remove request was sent to the card
- */
- if (this->Req == REMOVE) {
- a->misc_flags_table[e_no] |= DIVA_MISC_FLAGS_REMOVE_PENDING;
- }
- }
- if(more) {
- req_queue(a,this->No);
- }
- }
- /* else it's a ASSIGN */
- else {
- /* save the request code used for buffer chaining */
- this->MInd = 0;
- if (this->Id==BLLC_ID) this->MInd = LL_MDATA;
- if (this->Id==NL_ID ||
- this->Id==TASK_ID ||
- this->Id==MAN_ID
- ) this->MInd = N_MDATA;
- /* send the ASSIGN */
- this->More |=XMOREF;
- a->ram_out(a, &RAM->Req, this->Req);
- /* save the reference of the ASSIGN */
- assign_queue(a, this->No, 0);
- }
- /* if it is a 'unreturncoded' UREMOVE request, remove the */
- /* Id from our table after sending the request */
- if(this->Req==UREMOVE && this->Id) {
- Id = this->Id;
- e_no = a->IdTable[Id];
- free_entity(a, e_no);
- for (i = 0; i < 256; i++)
- {
- if (a->FlowControlIdTable[i] == Id)
- a->FlowControlIdTable[i] = 0;
- }
- a->IdTable[Id] = 0;
- this->Id = 0;
- }
-}
-static byte scom_ready(ADAPTER * a)
-{
- if(a->ram_in(a, &RAM->Req)) {
- if(!a->ReadyInt) {
- a->ram_inc(a, &RAM->ReadyInt);
- a->ReadyInt++;
- }
- return 0;
- }
- return 1;
-}
-/*------------------------------------------------------------------*/
-/* isdn interrupt handler */
-/*------------------------------------------------------------------*/
-byte scom_dpc(ADAPTER * a)
-{
- byte c;
- /* if a return code is available ... */
- if(a->ram_in(a, &RAM->Rc)) {
- /* call return code handler, if it is not our return code */
- /* the handler returns 2, if it's the return code to an */
- /* ASSIGN the handler returns 1 */
- c = isdn_rc(a,
- a->ram_in(a, &RAM->Rc),
- a->ram_in(a, &RAM->RcId),
- a->ram_in(a, &RAM->RcCh),
- 0,
- /*
- Scom Card does not provide extended information
- */
- 0, 0);
- switch(c) {
- case 0:
- a->ram_out(a, &RAM->Rc, 0);
- break;
- case 1:
- a->ram_out(a, &RAM->Req, 0);
- a->ram_out(a, &RAM->Rc, 0);
- break;
- case 2:
- return TRUE;
- }
- /* call output function */
- scom_out(a);
- }
- else {
- /* if an indications is available ... */
- if(a->ram_in(a, &RAM->Ind)) {
- /* call indication handler, a return value of 2 means chain */
- /* a return value of 1 means RNR */
- c = isdn_ind(a,
- a->ram_in(a, &RAM->Ind),
- a->ram_in(a, &RAM->IndId),
- a->ram_in(a, &RAM->IndCh),
- &RAM->RBuffer,
- a->ram_in(a, &RAM->MInd),
- a->ram_inw(a, &RAM->MLength));
- switch(c) {
- case 0:
- a->ram_out(a, &RAM->Ind, 0);
- break;
- case 1:
- dtrc(dprintf("RNR"));
- a->ram_out(a, &RAM->RNR, TRUE);
- break;
- case 2:
- return TRUE;
- }
- }
- }
- return FALSE;
-}
byte scom_test_int(ADAPTER * a)
{
return a->ram_in(a,(void *)0x3fe);
{
a->ram_out(a,(void *)0x3fe,0);
}
-void quadro_clear_int(ADAPTER * a)
-{
- a->ram_out(a,(void *)0x3fe,0);
- a->ram_out(a,(void *)0x401,0);
-}
/*------------------------------------------------------------------*/
/* return code handler */
/*------------------------------------------------------------------*/
}
return 2;
}
+#if defined(XDI_USE_XLOG)
/* -----------------------------------------------------------
This function works in the same way as xlog on the
active board
----------------------------------------------------------- */
-void xdi_xlog (byte *msg, word code, int length) {
-#if defined(XDI_USE_XLOG)
+static void xdi_xlog (byte *msg, word code, int length) {
xdi_dbg_xlog ("\x00\x02", msg, code, length);
-#endif
}
+#endif
/* -----------------------------------------------------------
This function writes the information about the Return Code
processing in the trace buffer. Trace ID is 221.
byte Id, byte Ch, byte Rc, byte cb, byte type) {
#if defined(XDI_USE_XLOG)
word LogInfo[4];
- WRITE_WORD(&LogInfo[0], ((word)Adapter | (word)(xdi_xlog_sec++ << 8)));
- WRITE_WORD(&LogInfo[1], ((word)Id | (word)(Ch << 8)));
- WRITE_WORD(&LogInfo[2], ((word)Rc | (word)(type << 8)));
- WRITE_WORD(&LogInfo[3], cb);
+ PUT_WORD(&LogInfo[0], ((word)Adapter | (word)(xdi_xlog_sec++ << 8)));
+ PUT_WORD(&LogInfo[1], ((word)Id | (word)(Ch << 8)));
+ PUT_WORD(&LogInfo[2], ((word)Rc | (word)(type << 8)));
+ PUT_WORD(&LogInfo[3], cb);
xdi_xlog ((byte*)&LogInfo[0], 221, sizeof(LogInfo));
#endif
}
byte Ch, byte Req, byte type) {
#if defined(XDI_USE_XLOG)
word LogInfo[3];
- WRITE_WORD(&LogInfo[0], ((word)Adapter | (word)(xdi_xlog_sec++ << 8)));
- WRITE_WORD(&LogInfo[1], ((word)Id | (word)(Ch << 8)));
- WRITE_WORD(&LogInfo[2], ((word)Req | (word)(type << 8)));
+ PUT_WORD(&LogInfo[0], ((word)Adapter | (word)(xdi_xlog_sec++ << 8)));
+ PUT_WORD(&LogInfo[1], ((word)Id | (word)(Ch << 8)));
+ PUT_WORD(&LogInfo[2], ((word)Req | (word)(type << 8)));
xdi_xlog ((byte*)&LogInfo[0], 220, sizeof(LogInfo));
#endif
}
byte type) {
#if defined(XDI_USE_XLOG)
word LogInfo[4];
- WRITE_WORD(&LogInfo[0], ((word)Adapter | (word)(xdi_xlog_sec++ << 8)));
- WRITE_WORD(&LogInfo[1], ((word)Id | (word)(Ch << 8)));
- WRITE_WORD(&LogInfo[2], ((word)Ind | (word)(type << 8)));
- WRITE_WORD(&LogInfo[3], ((word)rnr | (word)(rnr_valid << 8)));
+ PUT_WORD(&LogInfo[0], ((word)Adapter | (word)(xdi_xlog_sec++ << 8)));
+ PUT_WORD(&LogInfo[1], ((word)Id | (word)(Ch << 8)));
+ PUT_WORD(&LogInfo[2], ((word)Ind | (word)(type << 8)));
+ PUT_WORD(&LogInfo[3], ((word)rnr | (word)(rnr_valid << 8)));
xdi_xlog ((byte*)&LogInfo[0], 222, sizeof(LogInfo));
#endif
}