亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? qmcsw.c

?? 這是單板上DPRAM的驅(qū)動程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
            _sync_io();                 
            QmcSwGlobalInit();                                  
            splx(imask);
            if(pGCfg->UseTDM==0)return SDE_UNKNOW_CMD;
            if(pGCfg->UseTDM==1)SPLX(pda->si_simode|=0x00000c00;)
            if(pGCfg->UseTDM==2)SPLX(pda->si_simode|=0x0c000000;)                                    
            break;
            
        case SDC_SET_NORMAL_MODE:  
            for(i=0;i<pGCfg->MaxSubChanNum;i++)
            {
                StopReceive(i);
                StopTransmit(i);    
            }
            imask = splx(MAX_ILEV);/* mask interrupt*/
            _sync_io();                 
            QmcSwGlobalInit();                                  
            splx(imask);
            if(pGCfg->UseTDM==0)return SDE_UNKNOW_CMD;
            if(pGCfg->UseTDM==1)SPLX(pda->si_simode&=0xfffff3ff;)
            if(pGCfg->UseTDM==2)SPLX(pda->si_simode&=0xf3ffffff;)
            break;
       
       case SDC_LIMITE_REINIT:
            QmcSwLimitInit();
            break; 
       default:
           return SDE_UNKNOW_CMD;
    }/*end of switch cmd */
    return SDE_OK;
}/*end of QmcSwCtrl*/

static void QmcSwSubIsr(IntEntryStruct *ptr);
static void QmcIsr(void)
{
    USHORT Events,Status;
    PDA  *pda= (PDA *)(GetIMMR() & IO_MAP_MASK);
    IntEntryStruct *pIntrpt;
    Events = pda->Scc_regs[pGCfg->ch].scc_scce;
    pda->Scc_regs[pGCfg->ch].scc_scce = Events; /* clear the event reg*/

    pIntrpt=pGCfg->IntTablePtr;
    if(Events & QMC_GLOB_INT)    /* global interrupt */
    {

        while((pIntrpt->Bit).v)  /* search the int table to find valid entry */
        {
           if(pIntrpt->Bit.rxf||pIntrpt->Bit.bsy||pIntrpt->Bit.txb)
               QmcSwSubIsr(pIntrpt);

           if((pIntrpt->Bit).w)/*process interrupt table */
           {
              pIntrpt->Word16=0;
              (pIntrpt->Bit).w=1;
              pIntrpt=pGCfg->IntTable;
           }
           else
           {
              pIntrpt->Word16=0;
              pIntrpt++;
           }
           pGCfg->IntTablePtr=pIntrpt;
       }/*end for while*/
    } /*end for if global events*/

    if((Events&QMC_GLOB_OV)!=0 || (Events&QMC_GLOB_UN)!=0)
    {
        int i;
        UCHAR map[32];
        memmove(map,MapTable,pGCfg->MaxSubChanNum);
        QmcSwGlobalInit();
        memmove(MapTable,map,pGCfg->MaxSubChanNum);
        for(i=0;i<pGCfg->MaxSubChanNum;i++){
            if(MapTable[i]!=QMCSW_SUBCHAN_INVALID)ReStartReceive(i);  
            ReStartTransmit(i);
        }
    }

    if(Events&QMC_GLOB_IQOV) /* interrupt table is overflow */
    {
        int i;
        for(i=0;i<pGCfg->MaxSubChanNum;i++)
        {
            if(MapTable[i]!=QMCSW_SUBCHAN_INVALID)ReStartReceive(i);  
            ReStartTransmit(i);
        }
    }
} /*end of QmcSwIsr */

static void QmcSwSubIsrSend(int OutChannel)
{
    QmcSubChanParamStruct *ch=(QmcSubChanParamStruct*)((GetIMMR() & IO_MAP_MASK)
                               +0x2000+pGCfg->SubChParamOffset);
    LinkBufStruct *pData;
    for(;;){
        int cur=gDataBuf[OutChannel]->CurSendBD;
        BuffDescType *bd=&(gDataBuf[OutChannel]->pBaseSendBD[cur]);
        if((bd->status&BD_READY)==BD_READY) break;
        if(LinkNumber(&TxLink[OutChannel])==0) break;
        if(bd->address!=0 )
        {
            pData=(LinkBufStruct*)((ULONG)bd->address-8); /* adjust the addr*/
            LinkAppendBuf(&FreeLink,pData);
        }
        pData=LinkGetBuf(&TxLink[OutChannel]);
        bd->address=pData->Data;
        bd->length=pData->Length;
        bd->status&=(~gDataBuf[OutChannel]->SendErrMask);
        bd->status|=BD_READY;
        gDataBuf[OutChannel]->DrvInfo.SendPerNum++;  /*statistic*/
        gDataBuf[OutChannel]->CurSendBD=(gDataBuf[OutChannel]->CurSendBD+1)
                                        %pGCfg->MaxSendBD;
    }
    ch[OutChannel].chamr.pol=1;
}

static void QmcSwSubIsr(IntEntryStruct *ptr)
{
    USHORT Status;
    LinkBufStruct *pData;
    int InChannel=ptr->Bit.chnum;
    int OutChannel;
    
    if((ptr->Bit.rxf||ptr->Bit.bsy))
    {
        gDataBuf[InChannel]->DrvInfo.TotalRecvInt++; /* statistic */       
        OutChannel=MapTable[InChannel];
        if((OutChannel==QMCSW_SUBCHAN_OPERATE)
           &&(gDataBuf[InChannel]->RecvEv!=NULL)
           &&(gDataBuf[InChannel]->RecvTid!=NULL))
        {  
          ev_send(gDataBuf[InChannel]->RecvTid,gDataBuf[InChannel]->RecvEv);
          if(ptr->Bit.bsy) ReStartReceive(InChannel);
        } 
        else
        {        
          for(;;)
          {
            BuffDescType *bd=&(gDataBuf[InChannel]->pBaseRecvBD \
                            [gDataBuf[InChannel]->CurRecvBD]);
            Status=bd->status;
            if((Status&BD_EMPTY)==BD_EMPTY) break;
            if(((Status&gDataBuf[InChannel]->RecvErrMask)==0)
                &&(bd->length>2)
                &&(OutChannel<pGCfg->MaxSubChanNum)
                &&(OutChannel>=0)    
            )
            {
                if(LinkNumber(&FreeLink)==0) break;
                if(bd->address!=0)
                { 
                   pData=(LinkBufStruct*)((ULONG)bd->address-8);/*adjust the addr*/
                   pData->Length=bd->length-2;         
                   LinkAppendBuf(&TxLink[OutChannel],pData);
                   gDataBuf[OutChannel]->DrvInfo.SendTryNum++; /* statistic */
                }
                pData=(LinkBufStruct*)LinkGetBuf(&FreeLink);
                bd->address=pData->Data;
            }
            if((Status&gDataBuf[InChannel]->RecvErrMask)!=0)
            {
                int i;
                gDataBuf[InChannel]->DrvInfo.RecvError++; /*statistic */  
                for(i=0;i<=15;i++)
                    if(Status&(0x8000L>>i))
                        gDataBuf[InChannel]->DrvInfo.RecvBDStat[i]++;
            }
            else
                gDataBuf[InChannel]->DrvInfo.RecvNum++; /*statistic */              
            
            bd->status&=(~gDataBuf[InChannel]->RecvErrMask);
            bd->status|=BD_EMPTY;
            gDataBuf[InChannel]->CurRecvBD=(gDataBuf[InChannel]->CurRecvBD+1)
                                        %pGCfg->MaxRecvBD;                                             
        } /* end of recv */
        if(ptr->Bit.bsy) ReStartReceive(InChannel);
        if((OutChannel>=0)
           &&(OutChannel<pGCfg->MaxSubChanNum))
           QmcSwSubIsrSend(OutChannel);
      } 
    } /* end of receive */

/* start to process send */
    if(ptr->Bit.txb) 
    {  
        gDataBuf[InChannel]->DrvInfo.TotalSendInt++;
        if((gDataBuf[InChannel]->SendEv!=NULL)/*   if set ev and id then this*/
          &&(gDataBuf[InChannel]->SendTid!=NULL))/* channel process by up procedure*/
            ev_send(gDataBuf[InChannel]->SendTid,gDataBuf[InChannel]->SendEv);         
        QmcSwSubIsrSend(InChannel); /* send intr */
    }   
} /*end of QmcSwSubIsr()*/

char *QmcSwBspInit(int DEV, char *FreeMemPtr,QmcSwCfgStruct *gcfg)
{  
    int i;
    
    pGCfg=(QmcSwCfgStruct*)FreeMemPtr;   /* need to add check param */
    InstallSD(DEV,QmcSwRead,QmcSwWrite,QmcSwCntrl,FreeMemPtr);
    memmove((char*)pGCfg,(char*)gcfg,sizeof(QmcSwCfgStruct));
    FreeMemPtr+= sizeof(QmcSwCfgStruct);
    pGCfg->UncachedBuffer
         =(char*)AllocUncachedBuffer(pGCfg->MaxBufNum
          *(sizeof(LinkBufStruct)+pGCfg->MaxBufLen-LINK_DATA_BUF_LEN),64);
    pGCfg->BDTable
        =(char*)AllocUncachedBuffer((pGCfg->MaxRecvBD+pGCfg->MaxSendBD)
         *pGCfg->MaxSubChanNum*sizeof(BuffDescType),64);
    pGCfg->IntTable
        =(IntEntryStruct*)AllocUncachedBuffer(pGCfg->MaxIntEty \
         *sizeof(IntEntryStruct),64);
    pGCfg->IntTablePtr=pGCfg->IntTable;
    for(i=0;i<pGCfg->MaxSubChanNum;i++)
    {
        gDataBuf[i]=(DataBufStruct*)FreeMemPtr;
        memset(gDataBuf[i],0,sizeof(DataBufStruct));  
        FreeMemPtr+=sizeof(DataBufStruct);
    }    
    QmcSwGlobalInit();
    memcpy(FreeMemPtr,"***QMCSW",8);
    FreeMemPtr += 8;
    return FreeMemPtr;
}

void QmcSwLimitInit()
{
 
  UCHAR map[32];
  int i,imax;
  for(i=0;i<pGCfg->MaxSubChanNum;i++)
  {
     StopTransmit(i);
     StopReceive(i);
  } 	 
  (*(pGCfg->InitTDM))();
  imax=splx(MAX_ILEV);
  memmove(map,MapTable,pGCfg->MaxSubChanNum);
  QmcSwGlobalInit();
  memmove(MapTable,map,pGCfg->MaxSubChanNum);
  splx(imax);
  pGCfg->FatalFlag=0;
}	
/* this task is used for single channel loop back test */
/* 發(fā)送5個(gè),若接收的錯(cuò)包多于3個(gè),重新初始化*/

ULONG  QmcClkErrNum;
ULONG  QmcLoopErrNum;

void QmcSwBspTestTask(ULONG TaskID)
{
    SDCSetActionStruct SDCSet;
    char TBuf[100];
    char RBuf[272];
    int i,ret,ClkStatus;
    ULONG ev;
    ULONG OldErrorNum,SendNum,RecvCheckErr;
    SDCGetDriverInfoStruct  DrvInfo;
    QmcSubChanParamStruct *ch=(QmcSubChanParamStruct*)((GetIMMR()&IO_MAP_MASK)
                               +0x2000+pGCfg->SubChParamOffset);
    OldErrorNum=0;   
    RecvCheckErr=0;
    SendNum=0;    
    
    QmcClkErrNum=0;
    QmcLoopErrNum=0;
    memset(&SDCSet,0,sizeof(SDCSetActionStruct));
    SDCSet.RecvTid=TaskID;
    SDCSet.RecvEv=QMCSW_BSP_LOOP_RECV_EV;
    SDCSet.SendTid=TaskID;
    SDCSet.SendEv=QMCSW_BSP_LOOP_SEND_EV; 
    BDCntrl(gDataBuf[pGCfg->MaxSubChanNum-1],SDC_SET_ACTION,&SDCSet,
            sizeof(SDCSetActionStruct));
    while(1)
    {
    	
    /* check the clk is right*/
        ClkStatus=(*(pGCfg->QmcSwClkErr))();
        if(ClkStatus==1) 
        {
           pGCfg->FatalFlag=1;
           while((pGCfg->WrInUsing!=0) /*wait until all the channel not inusing */    
		      ||(pGCfg->ReInUsing!=0)) 
	               tm_wkafter(1);
	        QmcClkErrNum++;      
	        QmcSwLimitInit();         /*reinit the channel */  
         }	       	
        sprintf(TBuf,"QMCSW  Single Channel Loop Test"); 
        ret=BDWrite(gDataBuf[pGCfg->MaxSubChanNum-1],TBuf,strlen(TBuf));
        ch[pGCfg->MaxSubChanNum-1].chamr.pol=1;   
        SendNum++;
        if(ret<0) tm_wkafter(1);
	    ret=ev_receive(QMCSW_BSP_LOOP_RECV_EV,EV_WAIT,100,&ev); 
	    if(ret==0)
           if((ev&QMCSW_BSP_LOOP_RECV_EV)==QMCSW_BSP_LOOP_RECV_EV) 
	       {
              for(;;)
	          {
                  memset(RBuf,0,272);
		          ret=BDRead(gDataBuf[pGCfg->MaxSubChanNum-1],RBuf,272);
		          if(ret==SDE_BUF_EMPTY) break;
		          else
		          {
		             ret=memcmp(TBuf,RBuf,strlen(TBuf));/* check the loop back data is right */
		             if(ret!=0) RecvCheckErr++;    /* set the fatal flag */		
		          } 	
	           }/* end for*/		   
           }
           else  pGCfg->FatalFlag=1; /* receive unknown event */
         else  pGCfg->FatalFlag=1;  /* evreceive time out */ 
         if(SendNum%5==0)
         { 
             BDCntrl(gDataBuf[pGCfg->MaxSubChanNum-1],SDC_GET_DRIVER_INFO,&DrvInfo,sizeof(SDCGetDriverInfoStruct));
             if((DrvInfo.RecvError-OldErrorNum+RecvCheckErr)>3)
                pGCfg->FatalFlag=1;
             OldErrorNum=DrvInfo.RecvError;  
             RecvCheckErr=0;                
         }             	
         if((pGCfg->FatalFlag==1)&&(SendNum%5==0))
         {
           while((pGCfg->WrInUsing!=0) /*wait until all the channel not inusing */    
		      ||(pGCfg->ReInUsing!=0)) 
	               tm_wkafter(1);
	        QmcSwLimitInit();         /*reinit the channel */  
	        QmcLoopErrNum++;
         }	                  
         tm_wkafter(100);    
     }	     
}	 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久综合狠狠综合| 国产午夜精品美女毛片视频| 一区二区三区中文字幕精品精品| 国产精品网站一区| av不卡在线播放| 欧美日韩美少妇| 日韩一级高清毛片| 狠狠色丁香久久婷婷综| 国产一区91精品张津瑜| 国产亚洲欧美在线| 日本电影亚洲天堂一区| 日本一道高清亚洲日美韩| 精品亚洲成a人| 亚洲欧洲日韩av| 狠狠狠色丁香婷婷综合激情 | 日本一区二区三区电影| 色激情天天射综合网| 麻豆精品久久久| 成人国产精品免费观看动漫| 久久亚洲综合色| 欧美伊人精品成人久久综合97| 美女在线一区二区| 国产精品网曝门| 欧美成人国产一区二区| 日本乱人伦一区| 国产成人综合亚洲网站| 性做久久久久久久免费看| 中文字幕乱码一区二区免费| 欧美亚洲国产一区二区三区va | 日韩vs国产vs欧美| 亚洲欧洲综合另类| 久久久777精品电影网影网| 欧美美女喷水视频| 国产精品免费aⅴ片在线观看| 欧美亚一区二区| youjizz久久| 国产一区二区三区久久久| 午夜精品久久久久影视| 欧美一区二区免费观在线| 亚洲精品视频一区二区| 欧美这里有精品| 成人爱爱电影网址| 国产经典欧美精品| 国产在线精品免费av| 视频一区二区三区入口| 亚洲综合一二三区| 亚洲美女免费在线| 亚洲欧洲国产专区| 国产精品欧美极品| 日本一区二区综合亚洲| 久久精品人人做| 久久日一线二线三线suv| 日韩欧美自拍偷拍| 日韩一级免费一区| 7777精品伊人久久久大香线蕉 | 91亚洲精华国产精华精华液| 国产iv一区二区三区| 激情综合网av| 极品少妇xxxx精品少妇偷拍| 蜜桃av噜噜一区二区三区小说| 五月婷婷激情综合| 午夜电影网亚洲视频| 亚洲国产aⅴ天堂久久| 亚洲视频香蕉人妖| 4438x成人网最大色成网站| 欧美三级视频在线播放| 欧美日韩情趣电影| 欧美另类一区二区三区| 91免费在线播放| 99久久精品国产一区二区三区 | 国产乱码字幕精品高清av| 激情五月婷婷综合网| 国产伦精品一区二区三区视频青涩| 国内精品伊人久久久久影院对白| 国产一区999| 不卡av在线免费观看| 色综合久久久久网| 色婷婷精品久久二区二区蜜臂av| 欧美午夜精品久久久久久孕妇| 成人aaaa免费全部观看| 91论坛在线播放| 欧美人与z0zoxxxx视频| 91精品国产免费久久综合| 91麻豆精品91久久久久同性| 日韩精品一区二区三区视频| 国产日韩av一区| 亚洲免费观看在线观看| 天天操天天干天天综合网| 美女在线视频一区| 不卡一区中文字幕| 欧美日韩国产乱码电影| 在线播放国产精品二区一二区四区 | 狠狠狠色丁香婷婷综合激情| 国产成人在线视频网站| 色欧美乱欧美15图片| 日韩一级精品视频在线观看| 中文字幕精品一区二区三区精品| 久久亚洲精品国产精品紫薇| 亚洲天堂福利av| 久久97超碰国产精品超碰| 成人免费观看视频| 欧美一级国产精品| 亚洲欧洲另类国产综合| 毛片不卡一区二区| 91在线免费播放| 日韩午夜电影av| 亚洲欧洲美洲综合色网| 青青草91视频| 色呦呦国产精品| 久久亚洲一区二区三区明星换脸| 一区二区成人在线观看| 狠狠狠色丁香婷婷综合久久五月| 色视频成人在线观看免| 欧美成人精品1314www| 国产精品区一区二区三区 | 亚洲观看高清完整版在线观看| 六月婷婷色综合| 在线视频观看一区| 欧美韩国日本综合| 麻豆一区二区99久久久久| 91蝌蚪porny| 久久精品夜色噜噜亚洲a∨| 亚洲va欧美va人人爽午夜| av综合在线播放| 国产亚洲一区二区三区| 日本不卡中文字幕| 欧美日韩一区二区电影| 成人欧美一区二区三区白人| 国产裸体歌舞团一区二区| 日韩欧美在线一区二区三区| 一区二区在线观看视频| 成人免费视频国产在线观看| 337p粉嫩大胆噜噜噜噜噜91av | 男女男精品网站| 色综合天天做天天爱| 精品一二三四在线| 欧美色综合天天久久综合精品| 中文字幕不卡一区| 国产精品自在欧美一区| 欧美精品一区二区三区四区 | 精品久久久久久久一区二区蜜臀| 亚洲黄色尤物视频| thepron国产精品| 中文字幕第一区综合| 国产一区欧美二区| 精品少妇一区二区三区视频免付费 | 国产一区二区在线观看免费| 日韩欧美一级精品久久| 日韩中文字幕区一区有砖一区 | 黄网站免费久久| 久久久久久久性| 成年人网站91| 亚洲在线中文字幕| 日韩午夜三级在线| 国产成人无遮挡在线视频| 国产精品日韩成人| 欧美性videosxxxxx| 蜜桃视频一区二区三区| 国产欧美日韩视频一区二区| av一区二区三区| 午夜婷婷国产麻豆精品| 久久综合久久综合久久综合| 成人av小说网| 亚洲女与黑人做爰| 91久久精品一区二区三区| 亚洲韩国一区二区三区| 欧美美女喷水视频| 久久99精品国产麻豆婷婷洗澡| 日韩视频一区二区| 国产一区在线精品| 国产精品成人在线观看| 色伊人久久综合中文字幕| 亚洲国产一区二区在线播放| 欧美日韩国产综合草草| 免费欧美日韩国产三级电影| 久久综合一区二区| 成人av片在线观看| 亚洲精品videosex极品| 欧美日韩高清不卡| 性做久久久久久| 日韩一区二区三区视频在线观看| 久久成人羞羞网站| 国产日韩一级二级三级| 99国产精品久久久久久久久久久 | 狠狠狠色丁香婷婷综合激情 | 日韩无一区二区| 高清shemale亚洲人妖| 亚洲视频图片小说| 欧美日韩1234| 国产精品一区二区在线看| 国产精品综合在线视频| 一区二区三区在线视频播放| 日韩欧美国产一区二区在线播放| k8久久久一区二区三区| 另类调教123区| 午夜国产精品一区| 国产精品久久久久桃色tv| 欧美videofree性高清杂交| 在线亚洲高清视频| 成人自拍视频在线观看|