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

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

?? system.c

?? 硬件平臺:ARM+WINCE 實現ATA方式驅動CF卡的源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:


//
// I/O Control function - responds to info, read and write control codes.
// The read and write take a scatter/gather list in pInBuf
//
BOOL
DSK_IOControl(
    DWORD Handle,
    DWORD dwIoControlCode,
    PBYTE pInBuf,
    DWORD nInBufSize,
    PBYTE pOutBuf,
    DWORD nOutBufSize,
    PDWORD pBytesReturned
    )
{
    PDISK pDisk = (PDISK)Handle;
    PSG_REQ pSG;

    if (IsValidDisk(pDisk) == FALSE) {
        SetLastError(ERROR_INVALID_HANDLE);
        return FALSE;
    }

    if (OEM_CERTIFY_TRUST != PSLGetCallerTrust()) {
        SetLastError(ERROR_ACCESS_DENIED);
        return FALSE;
    }

    //
    // Check parameters
    //
    switch (dwIoControlCode) {
    case DISK_IOCTL_READ:
    case DISK_IOCTL_WRITE:
    case DISK_IOCTL_GETINFO:
    case DISK_IOCTL_SETINFO:
    case DISK_IOCTL_INITIALIZED:
        if (pInBuf == NULL) {
            SetLastError(ERROR_INVALID_PARAMETER);
            return FALSE;
        }
        break;
    case IOCTL_DISK_DEVICE_INFO:
        if ((nInBufSize== 0) || (pInBuf== NULL))
        {
            SetLastError(ERROR_INVALID_PARAMETER);
            return FALSE;
        }
        break;             
                

    case DISK_IOCTL_GETNAME:
    case IOCTL_DISK_GET_STORAGEID:  // this is a new op, so use new codes //
        if (pOutBuf == NULL) {
            SetLastError(ERROR_INVALID_PARAMETER);
            return FALSE;
        }
        break;

    case DISK_IOCTL_FORMAT_MEDIA:
        SetLastError(ERROR_SUCCESS);
        return TRUE;

    case IOCTL_POWER_CAPABILITIES: 
        if (!pOutBuf || nOutBufSize < sizeof(POWER_CAPABILITIES) || !pBytesReturned) {
            SetLastError(ERROR_INVALID_PARAMETER);
            return FALSE;
        }
        break;

    case IOCTL_POWER_SET:
    case IOCTL_POWER_QUERY:
        if (!pOutBuf || nOutBufSize < sizeof(CEDEVICE_POWER_STATE) || !pBytesReturned) {
            SetLastError(ERROR_INVALID_PARAMETER);
            return FALSE;
        }
        break;

    default:
        SetLastError(ERROR_INVALID_PARAMETER);
        return FALSE;
    }

    //
    // Execute dwIoControlCode
    //
    switch (dwIoControlCode) {
    case DISK_IOCTL_READ:
    case DISK_IOCTL_WRITE:
        pSG = (PSG_REQ)pInBuf;
        if (!(pSG && nInBufSize >= (sizeof(SG_REQ) + sizeof(SG_BUF) * (pSG->sr_num_sg - 1)))) {
            SetLastError(ERROR_INVALID_PARAMETER);
            return FALSE;
        }
        DoDiskIO(pDisk, dwIoControlCode, pSG);
        if (pSG->sr_status) {
            SetLastError(pSG->sr_status);
            return FALSE;
        }
        return TRUE;

    case DISK_IOCTL_GETINFO:
        SetLastError(GetDiskInfo(pDisk, (PDISK_INFO)pInBuf));
        return TRUE;

    case DISK_IOCTL_SETINFO:
        SetLastError(SetDiskInfo(pDisk, (PDISK_INFO)pInBuf));
        return TRUE;

    case DISK_IOCTL_INITIALIZED:
        //
        // Load and initialize the associated file system driver
        //
        if (InitFSD((PPOST_INIT_BUF)pInBuf)) {
            DEBUGMSG(ZONE_INIT, (TEXT("ATADISK: InitFSD succeeded\r\n")));
        } else {
            DEBUGMSG(ZONE_INIT, (TEXT("ATADISK: InitFSD failed\r\n")));
        }
        return TRUE;
        
    case IOCTL_DISK_DEVICE_INFO:
        if (pBytesReturned)
            *(pBytesReturned) = sizeof(STORAGEDEVICEINFO);
        return GetDeviceInfo(pDisk, (STORAGEDEVICEINFO *)pInBuf);             

    case DISK_IOCTL_GETNAME:
        return GetFolderName(pDisk, (LPWSTR)pOutBuf, nOutBufSize, pBytesReturned);

    case IOCTL_DISK_GET_STORAGEID:
        return GetStorageID(pDisk,
                            (PSTORAGE_IDENTIFICATION)pOutBuf,
                            nOutBufSize,
                            pBytesReturned);

    case IOCTL_POWER_CAPABILITIES: 
    {
        PPOWER_CAPABILITIES ppc = (PPOWER_CAPABILITIES)pOutBuf;
        
        memset(ppc, 0, sizeof(POWER_CAPABILITIES));
        
        // TODO: get these from the device
        // Fake it for now...
        ppc->DeviceDx = 0x11;   // supports D0 

        // supported power & latency info
        ppc->Power[D0] = PwrDeviceUnspecified;     // mW
        ppc->Latency[D0] = 0;   // mSec
        
        ppc->WakeFromDx = 0;    // no device wake
        ppc->InrushDx = 0;      // no inrush
        
        ppc->Flags = 0;

        *pBytesReturned = sizeof(POWER_CAPABILITIES);
        return TRUE;
    } break;

    case IOCTL_POWER_QUERY: {
        CEDEVICE_POWER_STATE Dx = *(PCEDEVICE_POWER_STATE)pOutBuf;
        DEBUGMSG(1, (TEXT("ATADISK: IOCTL_POWER_QUERY: D%d\r\n"), Dx));
        // return PwrDeviceUnspecified if the device needs to reject the query
        *pBytesReturned = sizeof(Dx);
        return TRUE;
    } break;

    case IOCTL_POWER_SET: 
    {
        CEDEVICE_POWER_STATE Dx = *(PCEDEVICE_POWER_STATE)pOutBuf;
        

        switch (Dx) {
            case D0: 
                {
#if 0               // Don't do anything here but do it on the PM_RESUME call
                    EnterCriticalSection( &pDisk->d_DiskCardCrit);
                    if (pDisk->lPwrOff) {
                        pDisk->lPwrOff--;
                    }
                    if (!pDisk->lPwrOff) {
                        SetEvent(pDisk->hPwrEvent);
                    }    
                    DEBUGMSG(1, (TEXT("ATADISK: Powering on system: D%d Count=%ld\r\n"), Dx,pDisk->lPwrOff));
                    LeaveCriticalSection( &pDisk->d_DiskCardCrit);
#endif                    
                }    
                break;
            case D4:
                {
                    if (pDisk->lPwrOff != -1) {
                        EnterCriticalSection( &pDisk->d_DiskCardCrit);
                        pDisk->lPwrOff = 1;
                        DEBUGMSG(1, (TEXT("ATADISK: Powering off system: D%d Count=%ld\r\n"), Dx,pDisk->lPwrOff));
                        ResetEvent(pDisk->hPwrEvent);
                        LeaveCriticalSection( &pDisk->d_DiskCardCrit);
                    }    
                }    
                break;
            default:
                break;
        }
        *pBytesReturned = sizeof(Dx);
        return TRUE;
    }

    }
    return FALSE;
}   // DSK_IOControl


DWORD DSK_Read(DWORD Handle, LPVOID pBuffer, DWORD dwNumBytes){return 0;}
DWORD DSK_Write(DWORD Handle, LPCVOID pBuffer, DWORD dwNumBytes){return 0;}
DWORD DSK_Seek(DWORD Handle, long lDistance, DWORD dwMoveMethod){return 0;}
void DSK_PowerUp(void){}

//
// Mark all disks on power down to avoid race between DCD wakeup activity
// and forced PCMCIA card removal due to power up.
//
void
DSK_PowerDown(void){}


//
// Returns TRUE if there is a card inserted in the specified socket
//
BOOL
IsCardInserted(
    CARD_SOCKET_HANDLE hSock
    )
{
    STATUS status;
    CARD_STATUS CardStatus;

    CardStatus.hSocket = hSock;
    status = v_pfnCardGetStatus(&CardStatus);
    if (status == CERR_SUCCESS) {
        if (CardStatus.fCardState & EVENT_MASK_CARD_DETECT) {
            return TRUE;
        }
    } else {
        DEBUGMSG(ZONE_PCMCIA|ZONE_ERROR,
            (TEXT("ATADISK: CardGetStatus returned %d\r\n"), status));
    }
    return FALSE;
}   // IsCardInserted


#ifdef DEBUG
typedef struct _EVENT_NAME_TBL {
    CARD_EVENT EventCode;
    LPTSTR    pEventName;
} EVENT_NAME_TBL, *PEVENT_NAME_TBL;

#define LAST_EVENT_CODE ((CARD_EVENT) -1)

//
// Table of callback event codes and their names.
// NOTE: The names with ! at the end are not expected.
//
EVENT_NAME_TBL v_EventNames[] = {
    { CE_BATTERY_DEAD,          TEXT("CE_BATTERY_DEAD") },
    { CE_BATTERY_LOW,           TEXT("CE_BATTERY_LOW") },
    { CE_CARD_LOCK,             TEXT("CE_CARD_LOCK") },
    { CE_CARD_READY,            TEXT("CE_CARD_READY") },
    { CE_CARD_REMOVAL,          TEXT("CE_CARD_REMOVAL") },
    { CE_CARD_UNLOCK,           TEXT("CE_CARD_UNLOCK") },
    { CE_EJECTION_COMPLETE,     TEXT("CE_EJECTION_COMPLETE!") },
    { CE_EJECTION_REQUEST,      TEXT("CE_EJECTION_REQUEST!") },
    { CE_INSERTION_COMPLETE,    TEXT("CE_INSERTION_COMPLETE!") },
    { CE_INSERTION_REQUEST,     TEXT("CE_INSERTION_REQUEST!") },
    { CE_PM_RESUME,             TEXT("CE_PM_RESUME!") },
    { CE_PM_SUSPEND,            TEXT("CE_PM_SUSPEND!") },
    { CE_EXCLUSIVE_COMPLETE,    TEXT("CE_EXCLUSIVE_COMPLETE") },
    { CE_EXCLUSIVE_REQUEST,     TEXT("CE_EXCLUSIVE_REQUEST") },
    { CE_RESET_PHYSICAL,        TEXT("CE_RESET_PHYSICAL") },
    { CE_RESET_REQUEST,         TEXT("CE_RESET_REQUEST") },
    { CE_CARD_RESET,            TEXT("CE_CARD_RESET") },
    { CE_MTD_REQUEST,           TEXT("CE_MTD_REQUEST!") },
    { CE_CLIENT_INFO,           TEXT("CE_CLIENT_INFO!") },
    { CE_TIMER_EXPIRED,         TEXT("CE_TIMER_EXPIRED!") },
    { CE_SS_UPDATED,            TEXT("CE_SS_UPDATED!") },
    { CE_WRITE_PROTECT,         TEXT("CE_WRITE_PROTECT") },
    { CE_CARD_INSERTION,        TEXT("CE_CARD_INSERTION") },
    { CE_RESET_COMPLETE,        TEXT("CE_RESET_COMPLETE") },
    { CE_ERASE_COMPLETE,        TEXT("CE_ERASE_COMPLETE!") },
    { CE_REGISTRATION_COMPLETE, TEXT("CE_REGISTRATION_COMPLETE") },
    { LAST_EVENT_CODE,          TEXT("Unknown Event!") },
};

LPTSTR
FindEventName(
    CARD_EVENT EventCode
    )
{
    PEVENT_NAME_TBL pEvent = v_EventNames;

    while (pEvent->EventCode != LAST_EVENT_CODE) {
        if (pEvent->EventCode == EventCode) {
            return pEvent->pEventName;
        }
        pEvent++;
    }
    return pEvent->pEventName;
}
#endif // DEBUG


//
// This is the PCMCIA callback function specified in CardRegisterClient.
// PCMCIA indicates card insertions and removals by calling this function.
//
STATUS PcmciaCallBack(
    CARD_EVENT EventCode,
    CARD_SOCKET_HANDLE hSock,
    PCARD_EVENT_PARMS pParms
    )
{
    PDISK pDisk;
    DEBUGMSG(ZONE_PCMCIA,
        (TEXT("ATADISK: PcmciaCallBack(%s)\r\n"), FindEventName(EventCode)));

    pDisk = (PDISK)pParms->uClientData;

    switch (EventCode) {
    case CE_EXCLUSIVE_REQUEST:
        if (pDisk != NULL) {
            return CERR_IN_USE;    
        }
    case CE_CARD_INSERTION:
        break;
    case CE_PM_RESUME:
        if (pDisk) {    
            if (pDisk->lPwrOff != -1) {
                EnterCriticalSection( &pDisk->d_DiskCardCrit);
                DEBUGMSG( 1, (L"PCMCIACallback disk %08X is being resumed count=%ld\r\n",  pDisk, pDisk->lPwrOff));
                pDisk->lPwrOff = 0;
                SetEvent(pDisk->hPwrEvent);
                LeaveCriticalSection( &pDisk->d_DiskCardCrit);
            }    
        } else {
            DebugBreak();
        }
        break;
    case CE_CARD_REMOVAL:
        break;
    case CE_PM_SUSPEND:
#if 0    
        if (pDisk) {
            EnterCriticalSection( &pDisk->d_DiskCardCrit);
            DEBUGMSG( 1, (L"PCMCIACallback disk is being %s Count=%ld\r\n", EventCode == CE_CARD_REMOVAL ? L"Removed" : L"Suspended", pDisk->lPwrOff));
            pDisk->lPwrOff++;
            ResetEvent(pDisk->hPwrEvent);
            LeaveCriticalSection( &pDisk->d_DiskCardCrit);
        }
#endif  
        break;

    default:
        break;
    }
    return CERR_SUCCESS;
}   // PcmciaCallBack


static BOOL isVoltageNear (USHORT supply, USHORT demand)
{
    // Some cards don't report any power usage! They probably mean to be 5V.
    if (demand == 0)
        demand = 50;
    
    // True iff demand is in [0.9*supply, supply]
    // We need this because some cards ask for a nominal voltage of 3.0 V
    // rather than 3.3 V, and then don't specify min and peak values.
    // The 0.9 constant is arbitrary but sufficient for the 3.0/3.3 comparison
    // without matching the 5 V entries.
    return (demand <= supply && demand >= 9*supply/10);
}

//
// GetATAWindows return codes:
//
#define GAW_SUCCESS           0
#define GAW_PRIMARY_FAIL      1
#define GAW_SECONDARY_FAIL    2
#define GAW_MEMORY_FAIL       3

//
// I/O access capabilities (wtype)
//
#define ACCESS_MEMORY_ONLY 0
#define ACCESS_IO_8BIT     1
#define ACCESS_IO_16BIT    2
#define ACCESS_IO_ANY      3

//
// GetATAWindows - Function to request and map memory or I/O windows
// required for the ATA interface.
//
// wtype is the I/O access capabilities for the card configuration.
//
// Return: one of the GAW_* codes defined above.
//
DWORD
GetATAWindows(
    PDISK pDisk,
    DWORD wtype,
    DWORD reg_base,
    DWORD alt_base,
    DWORD modifier
    )
{
    CARD_WINDOW_PARMS WndParms;
    DWORD status;
    CARD_WINDOW_HANDLE hATAReg;   // Handle to ATA register window
    PUCHAR pATAReg;
    CARD_WINDOW_HANDLE hATARegAlt;// Handle to ATA alternate reg window
    PUCHAR pATARegAlt;

    hATARegAlt = NULL;

    if (pDisk->d_Flags & ATADISK_FLAG_NO_MODIFIER) {
    	modifier = 0;
    }

    //
    // Get a window handle for the ATA card's registers
    //
    WndParms.hSocket = pDisk->d_hSock;

    if (wtype == ACCESS_MEMORY_ONLY) alt_base = ATA_ALT_MEM_REG_BASE;

    switch (wtype) {
    case ACCESS_MEMORY_ONLY: // memory configuration
        WndParms.fAttributes  = 0;  // Common memory 8bit window 
        break;

    case ACCESS_IO_8BIT:
        WndParms.fAttributes  = WIN_ATTR_IO_SPACE;
        break;

    case ACCESS_IO_16BIT:
        WndParms.fAttributes  = WIN_ATTR_IO_SPACE|WIN_ATTR_16BIT;
        break;

    case ACCESS_IO_ANY:
        if (pDisk->d_Flags & ATADISK_FLAG_TRY8BIT) {
            WndParms.fAttributes  = WIN_ATTR_IO_SPACE;
        } else {
            WndParms.fAttributes  = WIN_ATTR_IO_SPACE|WIN_ATTR_16BIT;
        }
        break;
        

    default:
        return GAW_MEMORY_FAIL;
    }

    WndParms.uWindowSize  = ATA_REG_LENGTH;
    WndParms.fAccessSpeed = WIN_SPEED_USE_WAIT;

    hATAReg = (CARD_WINDOW_HANDLE)v_pfnCardRequestWindow(pDisk->d_hPcmcia, &WndParms);

    if (!(pDisk->d_Flags & ATADISK_FLAG_TRY8BIT)) {
        if (hATAReg == NULL) {
            //
            // The host may not have 16 bit I/O. Since the device allows 8 bit, try it.
            //
            if (wtype == ACCESS_IO_ANY) {
                wtype = ACCESS_IO_8BIT;
                WndParms.fAttributes  = WIN_ATTR_IO_SPACE;
                hATAReg = (CARD_WINDOW_HANDLE)v_pfnCardRequestWindow(pDisk->d_hPcmcia, &WndParms);
            }
        }
    }    

    if (hATAReg == NULL) {
        //
        // Device may not support I/O access - try to get a memory config
        //
        DEBUGMSG(ZONE_PCMCIA|ZONE_INIT|ZONE_ERROR,
            (TEXT("ATADISK: CardRequestWindow(hATAReg) failed %d, looking for memory configuration\r\n"),
            GetLastError()));

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲第一福利一区| 欧美在线你懂的| 欧美色窝79yyyycom| 91精品国产色综合久久不卡蜜臀| 中文字幕国产一区| 免费成人美女在线观看| 色综合色综合色综合色综合色综合| 欧美va在线播放| 图片区小说区区亚洲影院| 99久久精品费精品国产一区二区| 精品国产一区二区三区久久影院| 午夜亚洲国产au精品一区二区| 99re66热这里只有精品3直播| 精品粉嫩超白一线天av| 日韩不卡在线观看日韩不卡视频| 色妞www精品视频| 国产精品萝li| 成人av资源下载| 欧美国产日韩一二三区| 国产成人精品网址| 久久九九国产精品| 大胆亚洲人体视频| 国产女人18水真多18精品一级做 | 亚洲精品视频在线观看免费| 99久久综合99久久综合网站| 亚洲国产精品高清| 成人永久看片免费视频天堂| 久久久99精品免费观看不卡| 国产一二三精品| 国产午夜精品一区二区三区嫩草 | 久久精品欧美一区二区三区不卡 | 欧美少妇bbb| 一区二区国产盗摄色噜噜| 日本丰满少妇一区二区三区| 亚洲精品成人a在线观看| 欧美探花视频资源| 视频一区欧美精品| 日韩欧美一级片| 国产一区二区三区不卡在线观看| 久久久久久久精| 99在线精品视频| 亚洲综合另类小说| 91 com成人网| 国产一区二区成人久久免费影院| 久久久精品中文字幕麻豆发布| 国产99久久久国产精品潘金网站| 国产精品久久99| 欧美午夜精品久久久| 免费观看30秒视频久久| 国产丝袜美腿一区二区三区| 91成人在线观看喷潮| 日本va欧美va欧美va精品| 国产欧美日韩中文久久| 色综合久久天天综合网| 青青草原综合久久大伊人精品优势| 亚洲精品一区二区三区精华液 | 久久久精品国产免费观看同学| 国产成a人亚洲精品| 一区二区三区鲁丝不卡| 欧美不卡激情三级在线观看| 波多野结衣在线aⅴ中文字幕不卡| 亚洲精品美腿丝袜| 精品欧美一区二区三区精品久久| 成人丝袜高跟foot| 亚洲成人动漫av| 中文字幕欧美日本乱码一线二线| 欧美视频一区二区三区四区 | 欧美综合在线视频| 国产一区二区三区国产| 亚洲成a人片综合在线| 久久亚洲一区二区三区四区| 色狠狠一区二区| 国产大陆亚洲精品国产| 日韩电影一区二区三区| 亚洲天堂免费看| 久久噜噜亚洲综合| 91精品国模一区二区三区| 97久久精品人人爽人人爽蜜臀| 日本欧美一区二区| 亚洲国产另类av| 亚洲色图欧美激情| 久久久www成人免费毛片麻豆 | 亚洲卡通动漫在线| 久久精品欧美日韩| 欧美成人一区二区三区| 欧美日韩国产成人在线免费| 91丨porny丨最新| 大胆亚洲人体视频| 国产真实乱偷精品视频免| 日本不卡视频在线观看| 一二三区精品视频| 中文字幕在线不卡视频| 国产亚洲欧美日韩日本| 欧美成人精品3d动漫h| 欧美视频一区二| 日本国产一区二区| 色婷婷av一区二区三区软件 | 亚洲精品美腿丝袜| 最新国产の精品合集bt伙计| 国产无一区二区| 国产清纯在线一区二区www| 精品国产乱码久久久久久1区2区 | 欧美日韩精品综合在线| 色猫猫国产区一区二在线视频| 国产69精品久久99不卡| 国产一区二区三区在线看麻豆| 狠狠色丁香久久婷婷综| 国模一区二区三区白浆| 国模无码大尺度一区二区三区| 日韩成人伦理电影在线观看| 视频一区中文字幕国产| 免费成人美女在线观看| 国内成+人亚洲+欧美+综合在线| 免费xxxx性欧美18vr| 蜜臀av亚洲一区中文字幕| 免费观看一级欧美片| 国产在线看一区| 国产成人免费xxxxxxxx| 成人免费高清视频在线观看| av动漫一区二区| 91精品国产综合久久福利软件 | 中文字幕中文乱码欧美一区二区| 国产欧美精品一区二区色综合朱莉 | 日本午夜精品一区二区三区电影| 婷婷综合久久一区二区三区| 日韩不卡一区二区| 国产一区二区三区电影在线观看| 国产麻豆成人精品| 99热这里都是精品| 欧美日韩午夜在线视频| 日韩欧美在线观看一区二区三区| 欧美精品一区二区三区四区| 国产精品久久久久婷婷二区次| 亚洲欧美电影一区二区| 亚洲va国产天堂va久久en| 精东粉嫩av免费一区二区三区| 岛国av在线一区| 欧美亚洲综合网| 久久影院视频免费| 亚洲美女一区二区三区| 人人超碰91尤物精品国产| 国产不卡视频在线播放| 欧美影片第一页| 久久视频一区二区| 亚洲国产一区二区视频| 精品亚洲国产成人av制服丝袜| 91视频免费观看| 精品国产一区二区精华| 亚洲精品一二三| 国模大尺度一区二区三区| 日本高清不卡在线观看| 精品国产乱码久久久久久影片| 亚洲欧洲av另类| 麻豆精品一二三| 一本久久a久久免费精品不卡| 欧美变态凌虐bdsm| 亚洲在线视频免费观看| 国产盗摄精品一区二区三区在线| 精品视频一区二区不卡| 中文字幕的久久| 久久精品国产亚洲高清剧情介绍| 91麻豆国产福利精品| 久久欧美一区二区| 日精品一区二区| 91国偷自产一区二区开放时间 | 国产1区2区3区精品美女| 69堂成人精品免费视频| 亚洲色图一区二区三区| 国产精品99久| 欧美电影免费观看高清完整版在线观看| 亚洲欧美国产三级| 丁香一区二区三区| www欧美成人18+| 另类调教123区 | 欧美日韩在线综合| 亚洲少妇30p| 成人黄色电影在线| 久久久久久久久97黄色工厂| 日本视频在线一区| 欧美军同video69gay| 亚洲综合久久av| 色噜噜夜夜夜综合网| 国产精品久久国产精麻豆99网站| 国产九色精品成人porny| 精品国产不卡一区二区三区| 丝袜美腿亚洲一区| 在线不卡a资源高清| 午夜视频在线观看一区| 欧美久久免费观看| 亚洲v日本v欧美v久久精品| 91国偷自产一区二区开放时间 | 色婷婷综合激情| 亚洲女人****多毛耸耸8| av在线一区二区| 国产精品萝li| 色婷婷综合五月| 亚洲成人免费av| 91精品久久久久久久91蜜桃| 免费在线成人网| 久久人人97超碰com|