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

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

?? s3c6410otgdevice.cpp

?? 6410BSP3
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
    FUNCTION_ENTER_MSG();
    ValidateContext(pContext);
#if TEST_MODE_SUPPORT
    volatile DWORD dwDCTL;
#endif

    DWORD dwGintsts = ReadReg(GINTSTS);
    DWORD dwDaint = ReadReg(DAINT);
    DWORD dwDaintMsk = ReadReg(DAINTMSK);

    if (dwGintsts & (INT_RESUME | INT_EPMIS | INT_SDE | INT_RESET | INT_SUSPEND | INT_OTG))
    {
        HandleUSBBusIrq(pContext, dwGintsts);
    }

    if (dwGintsts & INT_OUT_EP)
    {    
        if (dwDaint & EP0_OUT_INT)
        {            
            volatile DWORD dwDoepint0 = ReadReg(DOEPINT0);
            WriteReg(DOEPINT0, dwDoepint0);

            if (dwDoepint0 & XFER_COMPLETE)
            {
                HandleEndpoint0Event(pContext);
            }
            
            if (dwDoepint0 & SETUP_PHASE_DONE)
            {
                HandleEndpoint0Event(pContext);
            }
        }
        for(DWORD dwEndpoint = 1; dwEndpoint < ENDPOINT_COUNT; ++ dwEndpoint)
        {
            DWORD dwEpBit = EpToIrqStatBit(dwEndpoint) << ENDPOINT_COUNT;
            if (dwDaint & dwEpBit)
            {
                volatile DWORD dwDoepint = ReadEPSpecificReg(dwEndpoint, DOEPINT);
                WriteEPSpecificReg(dwEndpoint, DOEPINT, dwDoepint);

                if (dwDoepint & XFER_COMPLETE)
                {                
                    HandleOutEvent(pContext, dwEndpoint);
                }
            }
        }        
    }

    if (dwGintsts & INT_IN_EP)
    {            
        if (dwDaint & EP0_IN_INT)
        {
            volatile DWORD dwDiepint0 = ReadReg(DIEPINT0);
            WriteReg(DIEPINT0, dwDiepint0);

            if (dwDiepint0 & XFER_COMPLETE)
            {            
                HandleEndpoint0Event(pContext);
            }
            
            if (dwDiepint0 & TIMEOUT_CONDITION)
            {
                RETAILMSG(UFN_ZONE_WARNING,(_T("[UFNPDD] Time Out EP0\r\n")));
                SetClearReg(DCTL, CLEAR_GNPINNAK, SET);
            }
        }
        for(DWORD dwEndpoint = 1; dwEndpoint < ENDPOINT_COUNT; ++ dwEndpoint)
        {
            DWORD dwEpBit = EpToIrqStatBit(dwEndpoint);
            if ((dwDaint & dwEpBit) && (dwDaintMsk & (0x1<<dwEndpoint)))
            {
                volatile DWORD dwDiepint = ReadEPSpecificReg(dwEndpoint, DIEPINT);
                WriteEPSpecificReg(dwEndpoint, DIEPINT, dwDiepint);

                if (dwDiepint & IN_TKN_RECEIVED)
                {
                    HandleInEvent(pContext, dwEndpoint);
                }
                if (dwDiepint & XFER_COMPLETE)
                {
                    PEP_STATUS peps = GetEpStatus(pContext, dwEndpoint);
                    LOCK_ENDPOINT(peps);
                    pContext->dwXmittingEP &= ~(1<<dwEndpoint);
                    peps->pTransfer->cbTransferred += peps->pTransfer->cbBuffer;
                    DisableEndpointInterrupt(pContext, peps->dwEndpointNumber, peps->dwDirectionAssigned);
                    CompleteTransfer(pContext, peps, UFN_NO_ERROR);
                    UNLOCK_ENDPOINT(peps);
                }
                if (dwDiepint & TIMEOUT_CONDITION)
                {
                    RETAILMSG(UFN_ZONE_WARNING,(_T("[UFNPDD] Time Out EP%d\r\n"),dwEndpoint));
                    RETAILMSG(UFN_ZONE_WARNING,(_T("[UFNPDD] Transmit Ready Count : %d\r\n"), pContext->dwXmitReadyCnt));
                    RETAILMSG(UFN_ZONE_WARNING,(_T("[UFNPDD] Transmitting EP 0x%x : %d\r\n"), dwEndpoint, pContext->dwXmittingEP));
                    for(DWORD dwEndpoint = 0; dwEndpoint < ENDPOINT_COUNT; ++dwEndpoint)
                    {
                        if(pContext->dwInEPRunning[dwEndpoint])
                        {
                            RETAILMSG(UFN_ZONE_WARNING,(_T("[UFNPDD]EP%d is running\r\n"),dwEndpoint));
                        }
                    }
                    
                    SetClearReg(DCTL, CLEAR_GNPINNAK, SET);
                }
            }
        }
    }

#if TEST_MODE_SUPPORT
    dwDCTL = ReadReg( DCTL);
    dwDCTL = dwDCTL & (TEST_MODE_MASK) | CLEAR_GOUTNAK;
    WriteReg(DCTL, dwDCTL);
#endif    
    SetClearReg(DCTL, CLEAR_GNPINNAK, SET);

    FUNCTION_LEAVE_MSG();
}

static
DWORD MapRegisterSet(
    PCTRLR_PDD_CONTEXT     pContext
    )
{
    SETFNAME();
    FUNCTION_ENTER_MSG();
    
    ValidateContext(pContext);
    DEBUGCHK(g_pUDCBase == NULL);
    
    PBYTE  pVMem = NULL;
    DWORD dwRet = ERROR_SUCCESS;
    PHYSICAL_ADDRESS    ioPhysicalBase = {0,0};
    
    //System Controller registers allocation
    ioPhysicalBase.LowPart = S3C6410_BASE_REG_PA_SYSCON;
    pContext->pSYSCONregs = (volatile S3C6410_SYSCON_REG *)MmMapIoSpace(ioPhysicalBase, sizeof(S3C6410_SYSCON_REG), FALSE);
    if (pContext->pSYSCONregs == NULL)
    {
        dwRet = GetLastError();
        RETAILMSG(UFN_ZONE_ERROR, (_T("%s MmMapIoSpace: FAILED\r\n"), pszFname));
        goto CleanUp;
    }

    // OTG LINK registers.
    ioPhysicalBase.LowPart = S3C6410_BASE_REG_PA_USBOTG_LINK;   
    pVMem = (PBYTE)MmMapIoSpace(ioPhysicalBase, OTG_LINK_REG_SIZE, FALSE);
    if (pVMem == NULL)
    {
        dwRet = GetLastError();
        RETAILMSG(UFN_ZONE_ERROR, (_T("%s MmMapIoSpace: FAILED\r\n"), pszFname));
        goto CleanUp;
    }

    g_pUDCBase = pVMem + BASE_REGISTER_OFFSET;
    DEBUGMSG(UFN_ZONE_INIT, (_T("%s MmMapIoSpace, pVMem:%x\r\n"), pszFname, pVMem));

    ioPhysicalBase.LowPart = IMAGE_SHARE_ARGS_PA_START;  
    v_gBspArgs = (volatile BSP_ARGS *)MmMapIoSpace(ioPhysicalBase, sizeof(BSP_ARGS), FALSE);
    if (v_gBspArgs == NULL)
    {
        dwRet = GetLastError();
        RETAILMSG(UFN_ZONE_ERROR, (_T("%s MmMapIoSpace: FAILED\r\n"), pszFname));
        goto CleanUp;
    }

CleanUp:

    if (dwRet != ERROR_SUCCESS)
    {
        if (pContext->pSYSCONregs)
        {
            MmUnmapIoSpace((PVOID)pContext->pSYSCONregs, sizeof(S3C6410_SYSCON_REG));
            pContext->pSYSCONregs = NULL;
        }

        if (pVMem)
        {
            MmUnmapIoSpace((PVOID)pVMem, OTG_LINK_REG_SIZE);
            pVMem = NULL;
        }
        
        if (v_gBspArgs)
            {
            MmUnmapIoSpace((PVOID) v_gBspArgs, sizeof(BSP_ARGS));    
               v_gBspArgs = NULL;
            }
    }

    FUNCTION_LEAVE_MSG();
    return dwRet;
}


/*++
Routine Description:
Deallocate register space.

Arguments:
None.

Return Value:
None.
--*/
static
VOID
UnmapRegisterSet(
    PCTRLR_PDD_CONTEXT     pContext
    )
{
    // Unmap any memory areas that we may have mapped.

    if (pContext->pSYSCONregs)
    {
        MmUnmapIoSpace((PVOID)pContext->pSYSCONregs, sizeof(S3C6410_SYSCON_REG));
        pContext->pSYSCONregs = NULL;
    }

    if (g_pUDCBase)
    {
        MmUnmapIoSpace((PVOID)(g_pUDCBase - BASE_REGISTER_OFFSET), OTG_LINK_REG_SIZE);
        g_pUDCBase = NULL;
    }    

    if (v_gBspArgs)
    {
        MmUnmapIoSpace((PVOID) v_gBspArgs, sizeof(BSP_ARGS));    
        v_gBspArgs = NULL;
    }
}


// Interrupt thread routine.
static
DWORD
WINAPI
ISTMain(
    LPVOID    lpParameter
    )
{
    SETFNAME();
    FUNCTION_ENTER_MSG();

    PCTRLR_PDD_CONTEXT pContext = (PCTRLR_PDD_CONTEXT) lpParameter;
    ValidateContext(pContext);

    CeSetThreadPriority(pContext->hIST, pContext->dwISTPriority);

    while (!pContext->fExitIST)
    {
        pContext->fRestartIST = FALSE;

        // Disable All Endpoint interrupts
        WriteReg(DAINTMSK, 0); // Disable All Endpoint

        // Clear any outstanding device & endpoint interrupts
        // USB Device Interrupt Status - Write a '1' to Clear
        WriteReg(GINTSTS, INT_RESUME | INT_EPMIS | INT_SDE | INT_RESET | INT_SUSPEND); 

        // Enable Device General interrupts
        WriteReg(GINTMSK, INT_RESUME | INT_OUT_EP | INT_IN_EP | INT_EPMIS | INT_SDE | INT_RESET | INT_SUSPEND | INT_OTG);    

        // Enable Endpoint0 interrupt
        EnableEndpointInterrupt(pContext, 0, USB_IN_TRANSFER);
        EnableEndpointInterrupt(pContext, 0, USB_OUT_TRANSFER);

        while (TRUE)
        {
            DWORD dwWait = WaitForSingleObject(pContext->hevInterrupt, INFINITE);
            if (pContext->fExitIST || pContext->fRestartIST)
            {
                break;
            }

            if (dwWait == WAIT_OBJECT_0)
            {
                HandleUSBEvent(pContext);
                InterruptDone(pContext->dwSysIntr);
            }
            else
            {
                DEBUGMSG(UFN_ZONE_INIT, (_T("%s WaitForMultipleObjects failed. Exiting IST.\r\n"), pszFname));
                break;
            }
        }

        // Notify Detach Event to MDD
        pContext->pfnNotify(pContext->pvMddContext, UFN_MSG_BUS_EVENTS, UFN_DETACH);
        
        pContext->fSpeedReported = FALSE;
        pContext->attachedState = UFN_DETACH;

        // Disable Device  interrupts - write Zeros to Disable
        WriteReg(GINTMSK, 0);

        // Disable endpoint interrupts - write Zeros to Disable
        WriteReg(DAINTMSK, 0);

    }

    FUNCTION_LEAVE_MSG();

    return 0;
}

static
VOID
StartTransfer(
    PCTRLR_PDD_CONTEXT    pContext,
    PEP_STATUS             peps,
    PSTransfer             pTransfer
    )
{
    SETFNAME();
    FUNCTION_ENTER_MSG();

    DEBUGCHK(pContext);
    PREFAST_DEBUGCHK(peps);

    DEBUGCHK(!peps->pTransfer);
    ValidateTransferDirection(pContext, peps, pTransfer);

    LOCK_ENDPOINT(peps);

    DEBUGMSG(ZONE_TRANSFER, (_T("%s Setting up %s transfer on ep %u for %u bytes\r\n"),
    pszFname, (pTransfer->dwFlags == USB_IN_TRANSFER) ? _T("in") : _T("out"),
    peps->dwEndpointNumber, pTransfer->cbBuffer));

    // Enable transfer interrupts.
    peps->pTransfer = pTransfer;
    DWORD dwEndpoint = peps->dwEndpointNumber;

    if (pTransfer->dwFlags == USB_IN_TRANSFER)
    {
        if (dwEndpoint == 0)
        {
            DWORD dwDIEPINT0 = ReadReg(DIEPINT0);
            if (dwDIEPINT0 & XFERCOPMPL)
            {
                WriteReg(DIEPINT0, XFERCOPMPL);
            }

            memcpy( pContext->pVAddrEP[0][IN_EP] ,pTransfer->pvBuffer, pTransfer->cbBuffer);

            WatiForTxFIFOEmpty(100);    
            
            WriteReg(DIEPDMA0, pContext->pPAddrEP[0][IN_EP]);
            if(pTransfer->cbBuffer >= pContext->dwEp0MaxPktSize)
            {
                WriteReg(DIEPTSIZ0, 1<<PACKET_COUTNT_IDX | pContext->dwEp0MaxPktSize);
                WriteReg(DIEPCTL0, EP_ENABLE | CLEAR_NAK | 1<<NEXT_EP_IDX | EP0_MAX_PK_SIZ);
            }
            else
            {
                WriteReg(DIEPTSIZ0, 1<<PACKET_COUTNT_IDX | pTransfer->cbBuffer);
                WriteReg(DIEPCTL0, EP_ENABLE | CLEAR_NAK | 1<<NEXT_EP_IDX | EP0_MAX_PK_SIZ);
            }
        }
        else
        {
            DWORD dwDIEPINT = ReadEPSpecificReg(dwEndpoint, DIEPINT);

            if (dwDIEPINT & XFERCOPMPL)
            {
                WriteEPSpecificReg(dwEndpoint, DIEPINT, XFERCOPMPL);
            }
            
            memcpy(pContext->pVAddrEP[dwEndpoint][IN_EP] ,pTransfer->pvBuffer, pTransfer->cbBuffer);

            WriteReg(DIEPMSK, IN_TKN_RECEIVED | TIMEOUT_CONDITION | XFER_COMPLETE);
            EnableEndpointInterrupt(pContext, dwEndpoint, peps->dwDirectionAssigned);

            pContext->dwXmitReadyCnt++;
            pContext->dwInEPRunning[dwEndpoint] = pContext->dwXmitReadyCnt;
        }
    }
    else //USB_OUT_TRANSFER
    {
        if (dwEndpoint == 0)
        {
            WriteReg(DOEPDMA0, pContext->pPAddrEP[0][OUT_EP]);
            WriteReg(DOEPTSIZ0, 1<<PACKET_COUTNT_IDX | pContext->dwEp0MaxPktSize);
            WriteReg(DOEPCTL0, EP_ENABLE | CLEAR_NAK | EP0_MAX_PK_SIZ);
        }
        else 
        {
            pContext->dwPipelinedEP = dwEndpoint;
            EnableEndpointInterrupt(pContext, dwEndpoint, peps->dwDirectionAssigned);

            if( pContext->dwUSBClassInfo != USB_MSF)
            {
                if(pContext->bOutEPDMAStartFlag == FALSE)
                {
                    pContext->dwPipelinedXferSize = pTransfer->cbBuffer;
                    pContext->dwPipelinedPktCnt = pContext->dwPipelinedXferSize / peps->dwPacketSizeAssigned;
                    
                    pContext->bOutEPDMAStartFlag = TRUE;

                    EnableEndpointInterrupt(pContext, dwEndpoint, peps->dwDirectionAssigned);
                    WriteEPSpecificReg(dwEndpoint, DOEPDMA, pContext->pPAddrEP[dwEndpoint][pContext->dwPipelinedStrIdx]);
                    WriteEPSpecificReg(dwEndpoint, DOEPTSIZ, pContext->dwPipelinedPktCnt<<PACKET_COUTNT_IDX | pContext->dwPipelinedXferSize);
                    WriteEPSpecificReg(dwEndpoint, DOEPCTL, EP_ENABLE | CLEAR_NAK | SET_TYPE_BULK | USB_ACT_EP | peps->dwPacketSizeAssigned);
                }

                if(pContext->dwPipelinedXfered[dwEndpoint][pContext->dwPipelinedEndIdx])
                {
                    RETAILMSG(UFN_ZONE_WARNING,(TEXT("Ring buffer is buffering... Late processing!!!\r\n")));
                    
                    memcpy(pTransfer->pvBuffer, \
                              pContext->pVAddrEP[dwEndpoint][pContext->dwPipelinedEndIdx] , \
                              pContext->dwPipelinedXfered[dwEndpoint][pContext->dwPipelinedEndIdx]); 
                    
                    pTransfer->cbTransferred += pContext->dwPipelinedXfered[dwEndpoint][pContext->dwPipelinedEndIdx];
                    pContext->dwPipelinedXfered[dwEndpoint][pContext->dwPipelinedEndIdx] = 0;
                    pContext->dwPipelinedEndIdx = GET_NEXT_PF_IDX(pContext->dwPipelinedEndIdx);
                    pContext->dwPipelinedEP = 0;

                    if(pContext->bRingBufferFull)
                    {
                        if(pContext->dwPipelinedStrIdx != GET_PREV_PF_IDX(pContext->dwPipelinedEndIdx))
                        {
                            RETAILMSG(UFN_ZONE_WARNING,(TEXT("ERROR : Ring State is not valud(Str : %d, End : %d)\r\n"), pContext->dwPipelinedStrIdx, GET_PREV_PF_IDX(pContext->dwPipelinedEndIdx)));
                        }
                        
                        pContext->bRingBufferFull = FALSE;
                        EnableEndpointInterrupt(pContext, dwEndpoint, peps->dwDirectionAssigned);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人深夜在线观看| 国产+成+人+亚洲欧洲自线| 国产精品视频第一区| 欧美zozo另类异族| 精品国产一区二区在线观看| 日韩一区二区免费在线观看| 日韩一区二区在线免费观看| 欧美一区二区三区免费视频 | 国产精品久久久久久久午夜片| 久久久www免费人成精品| 久久久久久久久久久久电影| 国产欧美一区二区精品久导航| 国产精品女人毛片| 亚洲精品乱码久久久久久黑人 | 日韩精品乱码av一区二区| 亚洲国产精品一区二区久久恐怖片| 午夜久久久久久| 日本不卡不码高清免费观看| 蜜臀av亚洲一区中文字幕| 久久aⅴ国产欧美74aaa| 国产盗摄一区二区| 色综合一个色综合亚洲| 欧美日韩一区二区三区四区| 欧美一区二区在线免费观看| 精品国产露脸精彩对白| 国产精品欧美极品| 五月激情综合网| 国产精品一品二品| 91福利精品第一导航| 91精品欧美久久久久久动漫| 国产欧美日韩一区二区三区在线观看| 中文字幕综合网| 日韩精品成人一区二区三区| 国产成人午夜高潮毛片| 欧美日韩国产成人在线免费| 国产日韩欧美在线一区| 亚洲高清视频中文字幕| 国产一区二区三区四区五区美女 | 精品国产一区a| 亚洲精品一二三| 人人精品人人爱| 91影院在线免费观看| 91精品国产综合久久精品性色| 国产午夜精品美女毛片视频| 亚洲另类春色校园小说| 国v精品久久久网| 91麻豆精品久久久久蜜臀| 中文字幕不卡在线观看| 人人爽香蕉精品| 欧美综合天天夜夜久久| 欧美激情一区在线| 美国十次了思思久久精品导航| 97se亚洲国产综合自在线| 日韩欧美另类在线| 午夜精品久久久久久久蜜桃app| 风间由美一区二区三区在线观看 | 蜜桃av一区二区三区电影| 成人av电影在线播放| 精品国产一区二区国模嫣然| 日韩avvvv在线播放| 欧美性大战久久久久久久蜜臀 | 五月天丁香久久| 欧美三级电影网| 亚洲精品中文在线| 一本色道久久综合亚洲aⅴ蜜桃| 久久夜色精品国产噜噜av| 秋霞电影一区二区| 欧美日韩色综合| 午夜国产不卡在线观看视频| 在线亚洲高清视频| 亚洲一级二级在线| 欧美日韩精品一区二区三区四区 | 久久综合网色—综合色88| 丝袜亚洲精品中文字幕一区| 欧美日韩综合一区| 亚洲成人资源在线| 5月丁香婷婷综合| 日产国产欧美视频一区精品| 69堂成人精品免费视频| 日本视频在线一区| 日韩欧美的一区| 国产精品一卡二卡在线观看| 国产婷婷色一区二区三区四区| 国产精品69毛片高清亚洲| 国产日产欧美精品一区二区三区| 国产91露脸合集magnet| 中文字幕一区二区不卡| 色素色在线综合| 偷窥少妇高潮呻吟av久久免费| 在线不卡中文字幕| 激情五月激情综合网| 欧美激情综合在线| 91黄色免费版| 奇米精品一区二区三区四区| 精品日韩欧美在线| 成人国产视频在线观看| 一区二区三区在线影院| 欧美精品自拍偷拍| 国产美女精品在线| 怡红院av一区二区三区| 欧美精品一级二级| 国产精品影音先锋| 亚洲影视在线观看| 欧美电影免费观看高清完整版| 国产成人亚洲综合a∨婷婷图片| 亚洲猫色日本管| 日韩亚洲欧美在线| 99精品国产91久久久久久 | 久久久久国产精品人| 91亚洲男人天堂| 免费国产亚洲视频| 亚洲国产精品t66y| 91精品国产乱| 99精品国产热久久91蜜凸| 麻豆国产欧美日韩综合精品二区| 日本一区二区三区电影| 777a∨成人精品桃花网| 99久久精品免费看国产| 美女一区二区在线观看| 亚洲精品五月天| 精品国产免费久久| 欧美亚洲综合久久| 成人午夜精品在线| 另类中文字幕网| 亚洲精品ww久久久久久p站| 久久久亚洲精华液精华液精华液| 欧美日韩成人一区二区| 91啪在线观看| 国产成人精品免费一区二区| 日本中文在线一区| 亚洲国产精品久久不卡毛片| 亚洲欧美一区二区三区久本道91| 精品国产乱码久久久久久浪潮 | 亚洲v日本v欧美v久久精品| 国产精品乱人伦| 久久久www成人免费毛片麻豆| 这里是久久伊人| 欧美另类videos死尸| 欧美在线观看18| 91网站最新地址| 成人免费高清在线| 国产成人在线免费观看| 韩国av一区二区三区四区| 免费成人美女在线观看.| 亚洲一区二区三区四区在线观看| 亚洲另类中文字| 日韩理论电影院| 亚洲视频你懂的| 亚洲欧洲日产国码二区| 国产精品国产精品国产专区不蜜 | 不卡的av在线播放| 国产精品影视网| 粉嫩蜜臀av国产精品网站| 国产精选一区二区三区| 国产成人在线影院| 国产福利视频一区二区三区| 国产很黄免费观看久久| 国产精品一级片在线观看| 国产不卡视频在线观看| 成人短视频下载| 91热门视频在线观看| 在线国产电影不卡| 在线播放91灌醉迷j高跟美女 | 国产精品麻豆99久久久久久| 国产视频视频一区| 国产精品你懂的在线欣赏| 自拍av一区二区三区| 性做久久久久久| 久久国产精品99精品国产 | 欧美区在线观看| 91精品国产美女浴室洗澡无遮挡| 日韩精品一区二区三区在线观看| 国产喷白浆一区二区三区| 中文字幕一区二区三区乱码在线| 亚洲综合免费观看高清在线观看| 午夜精品福利在线| 久久精品久久久精品美女| 豆国产96在线|亚洲| 色菇凉天天综合网| 日韩一区二区不卡| 国产女主播视频一区二区| 亚洲麻豆国产自偷在线| 久久精品国产精品亚洲红杏| 国产aⅴ精品一区二区三区色成熟| av不卡免费电影| 日韩一区二区三区四区五区六区| 国产日韩欧美制服另类| 亚洲va国产天堂va久久en| 国产精品自拍网站| 欧美日韩精品电影| 久久蜜臀中文字幕| 亚洲国产精品一区二区www在线 | 亚洲欧美中日韩| 日韩精品电影在线| av在线一区二区三区| 欧美一区二区三区视频| 亚洲精品中文在线观看| 国产一区二区看久久| 欧美日韩久久久| 国产精品久久久一区麻豆最新章节|