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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? qmc.c

?? 這是單板上DPRAM的驅動程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include "board.h"
#include "sdev.h"
#include "hdlc.h"
#include "qmc.h"

#define regs(ch) pda->Scc_regs[ch]

#if  QMCPOLLING
void *  Global_pGCfg;
#endif
/*---------Local functions-----------------------------*/
static void ReInitAllRecvCh(QmcGlobalCfgStruct *pGCfg);
static void ReInitAllSendCh(QmcGlobalCfgStruct *pGCfg);
static void QmcResetSubChan(DataBufStruct *pData,QmcSubChanCfgStruct *);
static void QmcStopOp(QmcSubChanCfgStruct *pCfg);
static void QmcStartOp(QmcSubChanCfgStruct *pCfg);
static void QmcSubChanIsr(void *pDataBuf,IntEntryStruct *pIES);

#ifndef QMCPOLLING
static void QmcIsr(void *pDataBuf);
#endif

static void QmcLimitReInit(QmcGlobalCfgStruct *pGCfg);


static void QmcResetSubChan(DataBufStruct *pData,QmcSubChanCfgStruct *pCfg)
{
    int i;
/*    QmcGlobalCfgStruct *pGCfg=pCfg->pGCfg;*/
    QmcSubChanParamStruct* scpm= 
        (QmcSubChanParamStruct*)((GetIMMR() & IO_MAP_MASK)+0x2000); 
    scpm[pCfg->ch].tstate=0x30000000;
    scpm[pCfg->ch].zistate=0x100;
    scpm[pCfg->ch].tbptr=scpm[pCfg->ch].tbase;
    scpm[pCfg->ch].rbptr=scpm[pCfg->ch].rbase;
    pData->CurRecvBD=pData->CurSendBD=0;     
    for(i=0;i<pData->MaxRecvBD;i++)
    pData->pBaseRecvBD[i].status = BD_EMPTY|BD_INTR;
    if(i>0)pData->pBaseRecvBD[i-1].status |= BD_WRAP;
    for(i=0;i<pData->MaxSendBD;i++)
    pData->pBaseSendBD[i].status = BD_INTR|BD_LAST|HDLC_TX_CRC;
    if(i>0)pData->pBaseSendBD[i-1].status |= BD_WRAP;
}

static void QmcStopOp(QmcSubChanCfgStruct *pCfg)
{
	CPM_CMD(QMC_RESERVE|QMC_STOP_RX|((pCfg->ch)<<2));
	CPM_CMD(QMC_RESERVE|QMC_STOP_TX|((pCfg->ch)<<2));
}

static void QmcStartOp(QmcSubChanCfgStruct *pCfg)
{
   unsigned short k;
   QmcGlobalParamStruct *gmp  =(QmcGlobalParamStruct *)((GetIMMR()&IO_MAP_MASK)
       +0x3C00+0x100*pCfg->pGCfg->ch);
   QmcSubChanParamStruct* scpm= 
        (QmcSubChanParamStruct*)((GetIMMR() & IO_MAP_MASK)+0x2000); 
   
   k=pCfg->ch;
   if(scpm[k].chamr.ent==0)/*do if channel is deactive*/
   {
            
      scpm[k].tstate=0x30000000;
      scpm[k].zistate=0x100;
      gmp->tsatt[k].v=1; 
      scpm[k].chamr.ent=1;              
   }
   if(scpm[k].chamr.pol==0)
        scpm[k].chamr.pol=1;   /*start tx*/
   scpm[k].rstate=0x31000000;  /*start rev*/
   scpm[k].zdstate=0x0000080;
}

int QmcRead(void *pDataBuf,void *pBuf, int MaxLen)         
{   
    int ret;
    /* DataBufStruct*  pData=(DataBufStruct *)pDataBuf; */
    /* QmcSubChanCfgStruct*  pCfg =(QmcSubChanCfgStruct *)(pData+1); */
    ret=BDRead(pDataBuf,pBuf,MaxLen);
    if(ret>2)return ret-2;    /* sub 2 bytes of CRC */
    else if(ret>0)return SDE_INVALID_PACKET;  
    else return ret;
}

int QmcWrite(void *pDataBuf,void *pBuf, int MaxLen)         
{   
    int ret;
    DataBufStruct*  pData=(DataBufStruct *)pDataBuf;
    QmcSubChanCfgStruct*  pCfg =(QmcSubChanCfgStruct *)(pData+1);
    QmcSubChanParamStruct* scpm= 
        (QmcSubChanParamStruct*)((GetIMMR() & IO_MAP_MASK)+0x2000);
    ret=BDWrite(pDataBuf,pBuf,MaxLen);
    scpm[pCfg->ch].chamr.pol=1;   
    return ret; 
}

static void QmcSubChanIsr(void *pDataBuf,IntEntryStruct *pIES)
{
    IntEntryStruct ev=*pIES;
    DataBufStruct*  pData=(DataBufStruct *)pDataBuf;
    PDA  *pda = (PDA *)(GetIMMR() & IO_MAP_MASK);
/*    QmcSubChanCfgStruct*  pCfg=(QmcSubChanCfgStruct *)(pData+1); keep for test*/
    QmcSubChanParamStruct *pSubChanParam
    =(QmcSubChanParamStruct *)((char*)pda+0x2000);

    if( ev.Bit.bsy==1 )
    {
       pSubChanParam[ev.Bit.chnum].rstate=0x31000000;
       pSubChanParam[ev.Bit.chnum].zdstate=0x0000080;
    }

    if( ev.Bit.un==1 )    
    {
        pSubChanParam[ev.Bit.chnum].chamr.pol=1;   
        return;
    }

    if( ev.Bit.rxf == 1 || ev.Bit.rxb == 1|| ev.Bit.bsy==1)
    {
        pData->DrvInfo.TotalRecvInt++;
        if( (pData->RecvEv!=NULL) && (pData->RecvTid!=NULL) )
        {    
            ev_send(pData->RecvTid,pData->RecvEv);
        }
       if( pData->RecvQID!=NULL )
        {    
            q_send(pData->RecvQID,pData->RecvMessage);
        }  
    }
    if( ev.Bit.txb == 1 )
    {
        pData->DrvInfo.TotalSendInt++;
        if( (pData->SendEv!=NULL) && (pData->SendTid!=NULL) )
        {
            ev_send(pData->SendTid,pData->SendEv);
        }
        if( pData->SendQID!=NULL )
        {    
            q_send(pData->SendQID,pData->SendMessage);
        }
    }
}

static void ReInitAllRecvCh(QmcGlobalCfgStruct *pGCfg)
{
    USHORT i;
    PDA  *pda = (PDA *)(GetIMMR() & IO_MAP_MASK);
    QmcSubChanParamStruct *pSubChanParam
        =(QmcSubChanParamStruct *)((char*)pda+0x2000);
    DataBufStruct*  pData;
    QmcSubChanCfgStruct*  pCfg;
    for(i=0;i<pGCfg->MaxSubChanNum;i++)
    {
       pData=(DataBufStruct*)pGCfg->IsrParam[i+pGCfg->SubChParamOffset/64];
       pCfg =(QmcSubChanCfgStruct *)(pData+1);
       pSubChanParam[pCfg->ch].rstate=0x31000000;
       pSubChanParam[pCfg->ch].zdstate=0x0000080;
    }
    pda->Scc_regs[pGCfg->ch].scc_gsmra|=0x00000020;/* Enable rx */
}

static void ReInitAllSendCh(QmcGlobalCfgStruct *pGCfg)
{
    USHORT i;
    PDA  *pda = (PDA *)(GetIMMR() & IO_MAP_MASK);
    QmcSubChanParamStruct *pSubChanParam
        =(QmcSubChanParamStruct *)((char*)pda+0x2000);
    DataBufStruct*  pData;
    QmcSubChanCfgStruct*  pCfg;
    for(i=0;i<pGCfg->MaxSubChanNum;i++)
    {
        pData=(DataBufStruct*)pGCfg->IsrParam[i+pGCfg->SubChParamOffset/64];
        pCfg =(QmcSubChanCfgStruct *)(pData+1);   
        pSubChanParam[pCfg->ch].chamr.pol=1;
    }
    pda->Scc_regs[pGCfg->ch].scc_gsmra|=0x00000010;/* Enable tx */
}

#ifndef QMCPOLLING
static void QmcIsr(void *pDataBuf)
{
    unsigned short Events;
    QmcGlobalCfgStruct *pGCfg=(QmcGlobalCfgStruct *)pDataBuf;
    PDA  *pda = (PDA *)(GetIMMR() & IO_MAP_MASK);

    Events = pda->Scc_regs[pGCfg->ch].scc_scce;
    pda->Scc_regs[pGCfg->ch].scc_scce = Events; /* clear the event register */
    if( (Events & QMC_GLOB_OV)==QMC_GLOB_OV )
    {
        ReInitAllRecvCh(pGCfg);
        return;
    }

    if( ((Events & QMC_GLOB_UN)==QMC_GLOB_UN) )
    {
        ReInitAllSendCh(pGCfg);
        return;
    }
    if(   ((Events & QMC_GLOB_INT )==QMC_GLOB_INT)    /* global interrupt */  
       || ((Events & QMC_GLOB_IQOV)==QMC_GLOB_IQOV)   )
    {
        while((pGCfg->IntTablePtr->Bit).v)  /* search the interrupt table */  
        {
            ULONG sub=pGCfg->IntTablePtr->Bit.chnum;
            QmcSubChanIsr(pGCfg->IsrParam[sub],pGCfg->IntTablePtr);
            pGCfg->IntTablePtr->Word16&=0x4000;
            if(1 == pGCfg->IntTablePtr->Bit.w)
                pGCfg->IntTablePtr=pGCfg->IntTable;
            else
                pGCfg->IntTablePtr++;
        } 
    }/* end of if */
    if((Events & QMC_GLOB_IQOV)==QMC_GLOB_IQOV )
    {
        ReInitAllRecvCh(pGCfg);/* end of if */
    }
}  /* end of QmcIsr */          

#else
void QmcIsr(void *pDataBuf)
{
    unsigned short Events;
    QmcGlobalCfgStruct *pGCfg=(QmcGlobalCfgStruct *)pDataBuf;
    PDA  *pda = (PDA *)(GetIMMR() & IO_MAP_MASK);

    Events = pda->Scc_regs[pGCfg->ch].scc_scce;
    pda->Scc_regs[pGCfg->ch].scc_scce = Events; /* clear the event register */
    if( (Events & QMC_GLOB_OV)==QMC_GLOB_OV )
    {
        ReInitAllRecvCh(pGCfg);
        return;
    }

    if( ((Events & QMC_GLOB_UN)==QMC_GLOB_UN) )
    {
        ReInitAllSendCh(pGCfg);
        return;
    }
    if(   ((Events & QMC_GLOB_INT )==QMC_GLOB_INT)    /* global interrupt */  
       || ((Events & QMC_GLOB_IQOV)==QMC_GLOB_IQOV)   )
    {
        while((pGCfg->IntTablePtr->Bit).v)  /* search the interrupt table */  
        {
            ULONG sub=pGCfg->IntTablePtr->Bit.chnum;
            QmcSubChanIsr(pGCfg->IsrParam[sub],pGCfg->IntTablePtr);
            pGCfg->IntTablePtr->Word16&=0x4000;
            if(1 == pGCfg->IntTablePtr->Bit.w)
                pGCfg->IntTablePtr=pGCfg->IntTable;
            else
                pGCfg->IntTablePtr++;
        } 
    }/* end of if */
    if((Events & QMC_GLOB_IQOV)==QMC_GLOB_IQOV )
    {
        ReInitAllRecvCh(pGCfg);/* end of if */
    }
}
#endif

void QmcSubChanInit(void *pDataBuf, QmcSubChanCfgStruct *cfg)
{
    int i;
    BuffDescType   *temp_bufdes;
    char *pRecvBuf,*pSendBuf;
    DataBufStruct*  pData=(DataBufStruct *)pDataBuf;
    QmcSubChanCfgStruct*  pCfg =(QmcSubChanCfgStruct *)(pData+1);
    QmcGlobalCfgStruct *  pGCfg=cfg->pGCfg;
    QmcSubChanParamStruct* scpm= 
        (QmcSubChanParamStruct*)((GetIMMR() & IO_MAP_MASK)+0x2000);

/*--------------------------<< Initial data >>-------------------------------*/
    memmove(pCfg,cfg,sizeof(*cfg));
    memset(scpm[pCfg->ch], 0, sizeof(QmcSubChanParamStruct));
    
    /* Step 16. Initialize channel-specific parameters for HDLC */
    pCfg->ch&=0x3F;
    pData->CurRecvBD=0;
    pData->CurSendBD=0;
    pData->MaxRecvBD=pGCfg->MaxRecvBD;
    pData->MaxSendBD=pGCfg->MaxSendBD;
    pData->MaxBufLen=pGCfg->MaxBufLen;
    pData->RecvErrMask=(HDLC_DPLL_ERR|HDLC_GREATER_LEN|HDLC_NOT_ALIGNED
        |HDLC_ABORT_SEQ|HDLC_RX_CRC|HDLC_OVERRUN|HDLC_CD_LOST);
    pData->SendErrMask=(HDLC_UNDERRUN|HDLC_CTS_LOST);
    pData->UncachedBuffer=pRecvBuf=pGCfg->UncachedBuffer
        +(pGCfg->MaxRecvBD+pGCfg->MaxSendBD)*(pCfg->ch-pGCfg->SubChParamOffset/64)
        *pGCfg->MaxBufLen;
    pSendBuf=(char*)(pRecvBuf+( pGCfg->MaxRecvBD)*(pGCfg->MaxBufLen));

/*-------------------------<< stop SCCx operation >>----------------------*/
    QmcStopOp(pCfg); 

/*----------------------<< init SCCx >>-----------------------------------*/
    scpm[pCfg->ch].tbase=(pGCfg->MaxRecvBD+pGCfg->MaxSendBD)*
                         (pCfg->ch-pGCfg->SubChParamOffset/64)*BD_LEN;
    scpm[pCfg->ch].rbase=scpm[pCfg->ch].tbase+pGCfg->MaxSendBD*BD_LEN;
    scpm[pCfg->ch].tstate=0x30000000;
    scpm[pCfg->ch].rstate=0x31000000;  /* we enable it later,in QmcStartOp() */  
    scpm[pCfg->ch].zistate=0x100;     /* HDLC mode */ 
    scpm[pCfg->ch].zdstate=0x80;     /* we enable it later,in QmcStartOp() */           
    scpm[pCfg->ch].intmask=0x1e;      /* enable UN,RXF TXB and BSY interrupt*/  
    scpm[pCfg->ch].mflr= pData->MaxBufLen-8;    /* maximum frame length */  
    scpm[pCfg->ch].tbptr=scpm[pCfg->ch].tbase;
    scpm[pCfg->ch].rbptr=scpm[pCfg->ch].rbase;
  
    /* Step 17. Initialize RxBDs. */
    /* rx */
    temp_bufdes=pData->pBaseRecvBD
        =(BuffDescType *)(pGCfg->BDTable+scpm[pCfg->ch].rbase);
    for(i=0;i<pData->MaxRecvBD;i++)
    {
        temp_bufdes[i].status=BD_EMPTY|BD_INTR;
        temp_bufdes[i].length=0;
        temp_bufdes[i].address=pRecvBuf+i*pData->MaxBufLen;
    }
    if(i>0)temp_bufdes[i-1].status|=BD_WRAP;
   
    /* Step 18. Initialize TxBDs */
    /* tx */
    temp_bufdes=pData->pBaseSendBD
        =(BuffDescType *)(pGCfg->BDTable+scpm[pCfg->ch].tbase);
    for(i=0;i<pData->MaxSendBD;i++)
    {
        temp_bufdes[i].status=BD_INTR|BD_LAST|HDLC_TX_CRC;
        temp_bufdes[i].length=pData->MaxBufLen-2;
        temp_bufdes[i].address=pSendBuf+i*pData->MaxBufLen;
    }
    if(i>0)temp_bufdes[i-1].status|=BD_WRAP;
    pGCfg->IsrParam[pCfg->ch]=pDataBuf;
    
    /* Step 19. Initialize the circular interrupt table */
	/* init the interrupt table */
    for(i=0;i<pGCfg->IntTableLen;i++)            
        pGCfg->IntTable[i].Word16=0;
    if(i>=1)pGCfg->IntTable[i-1].Bit.w=1;
#ifdef QMCPOLLING    
    Global_pGCfg=(void *)pGCfg;
#else    
    SPLX(CpmIsrAddHandler(V_SCC1-pGCfg->ch,QmcIsr,(void *)pGCfg); )
#endif    
    
    /* Step 20. Initialize the channel mode register CHAMR */
	scpm[pCfg->ch].chamr.mode=1;      /* HDLC mode */
    scpm[pCfg->ch].chamr.idlm=0;      /* disable idle frame  */
    scpm[pCfg->ch].chamr.ent=1;       /* enable channel xmit*/ 
    scpm[pCfg->ch].chamr.crc=0;       /* 16 bit crc */         
    scpm[pCfg->ch].chamr.nof=0;       /* 1 flags  */
    scpm[pCfg->ch].chamr.pol=1;       /* enable polling */ 
 /*   QmcStartOp(pCfg); */
}

void QmcGlobalInit(void *pDataBuf, QmcGlobalCfgStruct *cfg)
{
    unsigned long i;
    QmcGlobalCfgStruct   *pCfg =(QmcGlobalCfgStruct *)(pDataBuf);   
    PDA                  *pda  =(PDA *)(GetIMMR() & IO_MAP_MASK);
    QmcGlobalParamStruct *gmp  =(QmcGlobalParamStruct *)((GetIMMR()&IO_MAP_MASK)+0x3C00+0x100*cfg->ch);
    memmove(pCfg,cfg,sizeof(*cfg));
    memset(gmp,0,sizeof(QmcGlobalParamStruct));
    if(pCfg->MaxRecvTSAEntry==0)pCfg->MaxRecvTSAEntry=pCfg->MaxSubChanNum;
    if(pCfg->MaxSendTSAEntry==0)pCfg->MaxSendTSAEntry=pCfg->MaxSubChanNum;
   /* add switch protocols*/   
    
    regs(pCfg->ch).scc_gsmra=0x0;
	CPM_CMD((pCfg->ch)<<(2+4)); /* INIT_RX_TX_PARAMS */
    
	SPLX(pda->si_sigmr&=~((0x04)<<(pCfg->UseTDM-1));)    /*disable static TDMA  */
    pCfg->ch=(pCfg->ch&0x3);
    SPLX(pda->cpmi_cimr&=(~(EN_SCC1 >> pCfg->ch));)/* disable scc interrutp */
    pCfg->IntTablePtr=pCfg->IntTable;
    pda->Scc_regs[pCfg->ch].scc_gsmra &= 0xffffffcf; /*disable rx & tx */
    
	/* Step 1: Initialize the SIMODE (serial interface mode) register. */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线播放/欧美激情| 国产精品久久久久婷婷| 精品成人佐山爱一区二区| 中文字幕一区二| 久久99精品久久久| 欧美亚洲国产怡红院影院| 精品久久人人做人人爰| 亚洲国产日韩在线一区模特| 国产成a人无v码亚洲福利| 91精品欧美综合在线观看最新 | 不卡的av网站| 精品日韩99亚洲| 天堂av在线一区| 欧美私模裸体表演在线观看| 中文字幕制服丝袜一区二区三区| 精品一二线国产| 日韩欧美在线影院| 日韩中文字幕区一区有砖一区 | 91麻豆精品国产| 亚洲五月六月丁香激情| 色综合天天做天天爱| 国产精品素人一区二区| 国产在线一区观看| 欧美成人一区二区三区在线观看| 天天色天天操综合| 在线欧美一区二区| 亚洲黄色av一区| 色琪琪一区二区三区亚洲区| 欧美国产成人在线| 成人久久视频在线观看| 中日韩av电影| 91在线观看下载| 一区二区三区久久久| 色综合激情久久| 亚洲综合网站在线观看| 色欧美乱欧美15图片| 一区二区三区四区激情| 日本高清成人免费播放| 一区二区三区国产精华| 欧美丝袜丝交足nylons| 亚洲一区在线观看视频| 欧美日韩日日摸| 日韩va亚洲va欧美va久久| 日韩一区二区精品葵司在线| 欧美a级理论片| 国产亚洲短视频| aa级大片欧美| 亚洲线精品一区二区三区八戒| 在线精品视频一区二区三四| 亚洲国产欧美在线| 精品国产三级电影在线观看| 国产乱子轮精品视频| 欧美激情一区不卡| 欧洲精品一区二区三区在线观看| 亚洲成人激情av| 精品99久久久久久| 成人免费看片app下载| 一区二区三区成人| 日韩一区二区三区电影在线观看| 国产一区二区中文字幕| 亚洲精品一二三区| 欧美电影免费观看高清完整版在| 国产91精品在线观看| 悠悠色在线精品| 欧美一级在线免费| 不卡视频在线看| 欧美bbbbb| 亚洲乱码精品一二三四区日韩在线 | 国产天堂亚洲国产碰碰| 色美美综合视频| 久久99国产精品免费网站| 日韩一区欧美小说| 欧美成人国产一区二区| 色哟哟欧美精品| 狠狠色综合日日| 亚洲国产成人tv| 国产精品污污网站在线观看| 欧美日本一区二区三区四区| 国产精品18久久久久| 亚洲444eee在线观看| 欧美国产禁国产网站cc| 日韩视频一区在线观看| 色天天综合色天天久久| 国内不卡的二区三区中文字幕 | 91精品办公室少妇高潮对白| 久久狠狠亚洲综合| 亚洲一区二区三区中文字幕在线| 国产无人区一区二区三区| 制服丝袜亚洲网站| 色乱码一区二区三区88| 国产精品伊人色| 国内精品伊人久久久久av影院| 一区二区三区欧美激情| 综合欧美亚洲日本| 久久奇米777| 精品欧美乱码久久久久久| 欧美日韩一区二区欧美激情| av在线不卡观看免费观看| 国产精品白丝jk黑袜喷水| 美女视频一区二区| 日本亚洲视频在线| 图片区小说区区亚洲影院| 亚洲综合网站在线观看| 亚洲日本护士毛茸茸| 国产精品情趣视频| 国产三级欧美三级日产三级99| 日韩欧美国产不卡| 欧美第一区第二区| 欧美videos大乳护士334| 日韩午夜电影av| 欧美一区二区福利视频| 日韩三级高清在线| 欧美本精品男人aⅴ天堂| 欧美一级理论片| 日韩美一区二区三区| 欧美刺激脚交jootjob| 日韩女同互慰一区二区| 欧美成人猛片aaaaaaa| 日韩精品一区二区三区四区视频| 日韩久久久精品| 精品成人一区二区三区四区| 久久先锋影音av鲁色资源| 久久精品亚洲一区二区三区浴池 | 国产成人午夜精品影院观看视频 | 欧美激情在线观看视频免费| 2022国产精品视频| 国产日产欧产精品推荐色| 国产女人水真多18毛片18精品视频| 精品1区2区在线观看| 国产欧美久久久精品影院 | 久久久三级国产网站| 国产喷白浆一区二区三区| 中文字幕欧美三区| 亚洲欧美日本韩国| 亚洲成a人v欧美综合天堂下载 | 日韩精品一区二区三区中文不卡| 欧美成人vps| 国产精品久久久久久户外露出| 亚洲欧美另类久久久精品2019| 亚洲精品成a人| 日产国产高清一区二区三区| 老司机午夜精品| av在线播放成人| 欧美日韩精品欧美日韩精品一| 91精品国产综合久久久久| 国产亚洲福利社区一区| 中文字幕综合网| 日韩电影在线一区二区三区| 国产在线视视频有精品| 91在线你懂得| 日韩精品一区二区三区在线 | 久久网这里都是精品| 国产精品久久精品日日| 亚洲黄色片在线观看| 老司机精品视频导航| 99精品国产热久久91蜜凸| 在线播放中文一区| 欧美高清在线一区| 免费观看一级欧美片| www.亚洲人| 日韩精品一区二| 亚洲综合一区在线| 国产精品一二三四| 91麻豆精品国产91久久久久久久久| 亚洲精品高清视频在线观看| 免费日本视频一区| 99国产精品久久久久| 欧美精品成人一区二区三区四区| 中文字幕av一区二区三区免费看| 亚洲一区av在线| 丁香网亚洲国际| 精品99久久久久久| 日韩成人精品在线观看| 色综合久久久网| 日韩欧美成人激情| 亚洲男人天堂一区| 日本一区二区成人在线| 亚洲二区在线观看| 色婷婷综合在线| 国产精品美女久久久久aⅴ国产馆| 丝袜国产日韩另类美女| 色国产综合视频| 国产精品欧美久久久久一区二区| 久久99精品久久久久久动态图| 欧美精三区欧美精三区| 亚洲色图欧洲色图| 99久久99久久精品免费观看 | 日韩欧美在线一区二区三区| 亚洲影视在线播放| 一本大道综合伊人精品热热| 日本一区二区免费在线| 国产老肥熟一区二区三区| 欧美一区二区三区不卡| 亚洲电影在线播放| 欧美日韩一区二区三区四区 | 亚洲欧美在线视频观看| 国产91丝袜在线播放九色| 国产精品色噜噜| youjizz久久| 亚洲人成精品久久久久久|