X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fisdn%2Fhardware%2Feicon%2Fdi.c;h=0617d7cabf063b103e4ddea78b9a9e504a2fa4dc;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=8e1791d3b194923601709ec978415ea520af31c6;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/drivers/isdn/hardware/eicon/di.c b/drivers/isdn/hardware/eicon/di.c index 8e1791d3b..0617d7cab 100644 --- a/drivers/isdn/hardware/eicon/di.c +++ b/drivers/isdn/hardware/eicon/di.c @@ -42,10 +42,7 @@ /*------------------------------------------------------------------*/ 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); /* ----------------------------------------------------------------- @@ -59,11 +56,11 @@ 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, @@ -81,7 +78,7 @@ static void xdi_xlog_ind (byte Adapter, void pr_out(ADAPTER * a) { byte e_no; - ENTITY * this = 0; + ENTITY * this = NULL; BUFFERS *X; word length; word i; @@ -345,192 +342,6 @@ byte pr_dpc(ADAPTER * a) } 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(iXNum && 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(iXNum && 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); @@ -539,11 +350,6 @@ void scom_clear_int(ADAPTER * a) { 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 */ /*------------------------------------------------------------------*/ @@ -761,7 +567,7 @@ byte isdn_ind(ADAPTER * a, word clength; word offset; BUFFERS *R; - byte* cma = 0; + byte* cma = NULL; #ifdef USE_EXTENDED_DEBUGS { DBG_TRC(("io)->ANum, Id, Ind)) @@ -814,7 +620,7 @@ byte isdn_ind(ADAPTER * a, Id, cma, sizeof(a->stream_buffer), - &final, 0, 0); + &final, NULL, NULL); } IoAdapter->RBuffer.length = MIN(MLength, 270); if (IoAdapter->RBuffer.length != MLength) { @@ -914,15 +720,15 @@ byte isdn_ind(ADAPTER * a, } 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. @@ -952,10 +758,10 @@ static void xdi_xlog_rc_event (byte Adapter, 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 } @@ -976,9 +782,9 @@ static void xdi_xlog_request (byte Adapter, byte Id, 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 } @@ -1020,10 +826,10 @@ static void xdi_xlog_ind (byte Adapter, 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 }