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

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

?? nand.cpp

?? 6410BSP3
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//

extern "C"
{
#include <windows.h>
#include <bsp.h>
#include "loader.h"
#include <fmd.h>

#include <VFLBuffer.h>
#include <WMRTypes.h>
#include <VFL.h>
#include <FIL.h>
#include "InitialImage_rgb16_320x240.h"

extern DWORD        g_ImageType;
extern UCHAR        g_TOC[SECTOR_SIZE];
extern const PTOC   g_pTOC;
extern DWORD        g_dwTocEntry;
extern PBOOT_CFG    g_pBootCfg;
extern BOOL         g_bBootMediaExist;
extern MultiBINInfo g_BINRegionInfo;
extern DWORD        g_dwImageStartBlock;
extern BOOL         g_bWaitForConnect;		// Is there a SmartMedia card on this device?

// MLC low level test function
// by dodan2 061102
extern UINT32 MLC_Read_RAW(UINT32 nBank, UINT32 nPpn, UINT8 *pMBuf, UINT8 *pSBuf);
extern UINT32 MLC_Write_RAW(UINT32 nBank, UINT32 nPpn, UINT8 *pMBuf, UINT8 *pSBuf);
extern UINT32 MLC_Erase_RAW(UINT32 nBank, UINT32 nBlock);

extern void _Read_512Byte(UINT8* pBuf);
extern void _Read_512Byte_Unaligned(UINT8* pBuf);
extern void _Write_512Byte(UINT8* pBuf);
extern void _Write_512Byte_Unaligned(UINT8* pBuf);
}

BOOL WriteBlock(DWORD dwBlock, LPBYTE pbBlock, PSectorInfo pSectorInfoTable);
BOOL ReadBlock(DWORD dwBlock, LPBYTE pbBlock, PSectorInfo pSectorInfoTable);

#define 		WMRBUFSIZE						(8192 + 256)  // the maximum size of 2-plane data for 4KByte/Page NAND flash Device

extern DWORD 		g_dwLastWrittenLoc;                     //  Defined in bootpart.lib
extern PSectorInfo 	g_pSectorInfoBuf;
extern FlashInfo 	g_FlashInfo;
static UCHAR 		toc[SECTOR_SIZE];

extern BOOL IsValidMBRSector();
extern BOOL CreateMBR();
extern UCHAR WMRBuf[];

void MLC_Print_Page_Data(unsigned char *pMBuf, unsigned char *pSBuf);

// Define a dummy SetKMode function to satisfy the NAND FMD.
//
DWORD SetKMode (DWORD fMode)
{
    return(1);
}


void BootConfigPrint(void)
{
    EdbgOutputDebugString( "BootCfg { \r\n");
    EdbgOutputDebugString( "  ConfigFlags: 0x%x\r\n", g_pBootCfg->ConfigFlags);
    EdbgOutputDebugString( "  BootDelay: 0x%x\r\n", g_pBootCfg->BootDelay);
    EdbgOutputDebugString( "  ImageIndex: %d \r\n", g_pBootCfg->ImageIndex);
    EdbgOutputDebugString( "  IP: %s\r\n", inet_ntoa(g_pBootCfg->EdbgAddr.dwIP));
    EdbgOutputDebugString( "  MAC Address: %B:%B:%B:%B:%B:%B\r\n",
                           g_pBootCfg->EdbgAddr.wMAC[0] & 0x00FF, g_pBootCfg->EdbgAddr.wMAC[0] >> 8,
                           g_pBootCfg->EdbgAddr.wMAC[1] & 0x00FF, g_pBootCfg->EdbgAddr.wMAC[1] >> 8,
                           g_pBootCfg->EdbgAddr.wMAC[2] & 0x00FF, g_pBootCfg->EdbgAddr.wMAC[2] >> 8);
    EdbgOutputDebugString( "  Port: %s\r\n", inet_ntoa(g_pBootCfg->EdbgAddr.wPort));

    EdbgOutputDebugString( "  SubnetMask: %s\r\n", inet_ntoa(g_pBootCfg->SubnetMask));
    EdbgOutputDebugString( "}\r\n");
}


// Set default boot configuration values
static void BootConfigInit(DWORD dwIndex)
{

    EdbgOutputDebugString("+BootConfigInit\r\n");

    g_pBootCfg = &g_pTOC->BootCfg;

    memset(g_pBootCfg, 0, sizeof(BOOT_CFG));

    g_pBootCfg->ImageIndex   = dwIndex;

    g_pBootCfg->ConfigFlags  = BOOT_TYPE_MULTISTAGE | CONFIG_FLAGS_KITL;

    g_pBootCfg->BootDelay    = CONFIG_BOOTDELAY_DEFAULT;

    g_pBootCfg->SubnetMask = inet_addr("255.255.255.0");

    EdbgOutputDebugString("-BootConfigInit\r\n");
    return;
}

void ID_Print(DWORD i) {
    DWORD j;
    EdbgOutputDebugString("ID[%u] {\r\n", i);
    EdbgOutputDebugString("  dwVersion: 0x%x\r\n",  g_pTOC->id[i].dwVersion);
    EdbgOutputDebugString("  dwSignature: 0x%x\r\n", g_pTOC->id[i].dwSignature);
    EdbgOutputDebugString("  String: '%s'\r\n", g_pTOC->id[i].ucString);
    EdbgOutputDebugString("  dwImageType: 0x%x\r\n", g_pTOC->id[i].dwImageType);
    EdbgOutputDebugString("  dwTtlSectors: 0x%x\r\n", g_pTOC->id[i].dwTtlSectors);
    EdbgOutputDebugString("  dwLoadAddress: 0x%x\r\n", g_pTOC->id[i].dwLoadAddress);
    EdbgOutputDebugString("  dwJumpAddress: 0x%x\r\n", g_pTOC->id[i].dwJumpAddress);
    EdbgOutputDebugString("  dwStoreOffset: 0x%x\r\n", g_pTOC->id[i].dwStoreOffset);
    for (j = 0; j < MAX_SG_SECTORS; j++) {
        if ( !g_pTOC->id[i].sgList[j].dwLength )
            break;
        EdbgOutputDebugString("  sgList[%u].dwSector: 0x%x\r\n", j, g_pTOC->id[i].sgList[j].dwSector);
        EdbgOutputDebugString("  sgList[%u].dwLength: 0x%x\r\n", j, g_pTOC->id[i].sgList[j].dwLength);
    }

    EdbgOutputDebugString("}\r\n");
}

void TOC_Print(void)
{
    int i;

    EdbgOutputDebugString("TOC {\r\n");
    EdbgOutputDebugString("dwSignature: 0x%x\r\n", g_pTOC->dwSignature);

    BootConfigPrint( );

    for (i = 0; i < MAX_TOC_DESCRIPTORS; i++) {
        if ( !VALID_IMAGE_DESCRIPTOR(&g_pTOC->id[i]) )
            break;

        ID_Print(i);
    }

    //  Print out Chain Information
    EdbgOutputDebugString("chainInfo.dwLoadAddress: 0X%X\r\n", g_pTOC->chainInfo.dwLoadAddress);
    EdbgOutputDebugString("chainInfo.dwFlashAddress: 0X%X\r\n", g_pTOC->chainInfo.dwFlashAddress);
    EdbgOutputDebugString("chainInfo.dwLength: 0X%X\r\n", g_pTOC->chainInfo.dwLength);

    EdbgOutputDebugString("}\r\n");
}


// init the TOC to defaults
BOOL TOC_Init(DWORD dwEntry, DWORD dwImageType, DWORD dwImageStart, DWORD dwImageLength, DWORD dwLaunchAddr)
{
    DWORD dwSig = 0;

    EdbgOutputDebugString("TOC_Init: dwEntry:%u, dwImageType: 0x%x, dwImageStart: 0x%x, dwImageLength: 0x%x, dwLaunchAddr: 0x%x\r\n",
        dwEntry, dwImageType, dwImageStart, dwImageLength, dwLaunchAddr);

    if (0 == dwEntry) {
        EdbgOutputDebugString("\r\n*** WARNING: TOC_Init blasting Eboot ***\r\n");
		return FALSE;
    }

    switch (dwImageType) {
        case IMAGE_TYPE_LOADER:
            dwSig = IMAGE_EBOOT_SIG;
            break;
        case IMAGE_TYPE_RAMIMAGE:
            dwSig = IMAGE_RAM_SIG;
            break;
        default:
            EdbgOutputDebugString("ERROR: OEMLaunch: unknown image type: 0x%x \r\n", dwImageType);
            return FALSE;
    }

    memset(g_pTOC, 0, sizeof(g_TOC));

    // init boof cfg
    BootConfigInit(dwEntry);

    // update our index
    g_dwTocEntry = dwEntry;

    // debugger enabled?
    g_bWaitForConnect = (g_pBootCfg->ConfigFlags & CONFIG_FLAGS_KITL) ? TRUE : FALSE;

    // init TOC...
    //
    g_pTOC->dwSignature = TOC_SIGNATURE;

    //  init TOC entry for Eboot
    //  Those are hard coded numbers from boot.bib
    g_pTOC->id[0].dwVersion     = (EBOOT_VERSION_MAJOR << 16) | EBOOT_VERSION_MINOR;
    g_pTOC->id[0].dwSignature   = IMAGE_EBOOT_SIG;
    memcpy(g_pTOC->id[0].ucString, "eboot.nb0", sizeof("eboot.nb0")+1);   //  NUll terminate
    g_pTOC->id[0].dwImageType   = IMAGE_TYPE_RAMIMAGE;
    g_pTOC->id[0].dwLoadAddress = EBOOT_RAM_IMAGE_BASE;
    g_pTOC->id[0].dwJumpAddress = EBOOT_RAM_IMAGE_BASE;
    g_pTOC->id[0].dwTtlSectors  = FILE_TO_SECTOR_SIZE(EBOOT_RAM_IMAGE_SIZE);
    // 1 contigious segment
    g_pTOC->id[0].sgList[0].dwSector = BLOCK_TO_SECTOR(EBOOT_BLOCK);
    g_pTOC->id[0].sgList[0].dwLength = g_pTOC->id[0].dwTtlSectors;

    // init the TOC entry
    g_pTOC->id[dwEntry].dwVersion     = 0x001;
    g_pTOC->id[dwEntry].dwSignature   = dwSig;
    memset(g_pTOC->id[dwEntry].ucString, 0, IMAGE_STRING_LEN);
    g_pTOC->id[dwEntry].dwImageType   = dwImageType;
    g_pTOC->id[dwEntry].dwLoadAddress = dwImageStart;
    g_pTOC->id[dwEntry].dwJumpAddress = dwLaunchAddr;
    g_pTOC->id[dwEntry].dwStoreOffset = 0;
    g_pTOC->id[dwEntry].dwTtlSectors  = FILE_TO_SECTOR_SIZE(dwImageLength);
    // 1 contigious segment
    g_pTOC->id[dwEntry].sgList[0].dwSector = BLOCK_TO_SECTOR(g_dwImageStartBlock);
    g_pTOC->id[dwEntry].sgList[0].dwLength = g_pTOC->id[dwEntry].dwTtlSectors;

    TOC_Print();

    return TRUE;
}

//
// Retrieve TOC from Nand.
//
BOOL TOC_Read(void)
{
	LowFuncTbl *pLowFuncTbl;
	DWORD dwBlock;
	INT32 nRet;
	UINT8 *pSBuf;

	EdbgOutputDebugString("TOC_Read\r\n");

	if ( !g_bBootMediaExist )
	{
		EdbgOutputDebugString("TOC_Read ERROR: no boot media\r\n");
		return FALSE;
	}

	pLowFuncTbl = FIL_GetFuncTbl();

	pSBuf = WMRBuf + BYTES_PER_MAIN_SUPAGE;

	dwBlock = TOC_BLOCK;

	while(1)
	{
		if (dwBlock == (TOC_BLOCK+TOC_BLOCK_SIZE+TOC_BLOCK_RESERVED))
		{
			OALMSG(TRUE, (TEXT("TOC_Read Failed !!!\r\n")));
			OALMSG(TRUE, (TEXT("Too many Bad Block\r\n")));
			return FALSE;
		}

		IS_CHECK_SPARE_ECC = FALSE32;
		pLowFuncTbl->Read(0, dwBlock*PAGES_PER_BLOCK+PAGES_PER_BLOCK-1, 0x0, enuLEFT_PLANE_BITMAP, NULL, pSBuf, TRUE32, FALSE32);
		IS_CHECK_SPARE_ECC = TRUE32;
		if (pSBuf[0] == 0xff)
		{
			nRet = pLowFuncTbl->Read(0, dwBlock*PAGES_PER_BLOCK, 0x01, enuLEFT_PLANE_BITMAP, (UINT8 *)g_pTOC, NULL, FALSE32, FALSE32);
			if (nRet != FIL_SUCCESS)
			{
				OALMSG(TRUE, (TEXT("[ERR] FIL Read Error @ %d Block %d Page, Skipped\r\n"), dwBlock, 0));
				dwBlock++;
				continue;
			}
			else
			{
				break;
			}
		}
		else
		{
			OALMSG(TRUE, (TEXT("Bad Block %d Skipped\r\n"), dwBlock));
			dwBlock++;
			continue;
		}
	}

	// is it a valid TOC?
	if ( !VALID_TOC(g_pTOC) )
	{
		EdbgOutputDebugString("TOC_Read ERROR: INVALID_TOC Signature: 0x%x\r\n", g_pTOC->dwSignature);
		return FALSE;
	}

	// update our boot config
	g_pBootCfg = &g_pTOC->BootCfg;

	// update our index
	g_dwTocEntry = g_pBootCfg->ImageIndex;

	// debugger enabled?
	g_bWaitForConnect = (g_pBootCfg->ConfigFlags & CONFIG_FLAGS_KITL) ? TRUE : FALSE;

	// cache image type
	g_ImageType = g_pTOC->id[g_dwTocEntry].dwImageType;

	EdbgOutputDebugString("-TOC_Read\r\n");

	return TRUE;
}
//
// Store TOC to Nand
// BUGBUG: only uses 1 sector for now.
//
BOOL TOC_Write(void)
{
	LowFuncTbl *pLowFuncTbl;
	DWORD dwBlock;
	INT32 nRet;
	UINT8 *pSBuf;
	UINT32 nSyncRet;

	EdbgOutputDebugString("+TOC_Write\r\n");

	if ( !g_bBootMediaExist )
	{
		EdbgOutputDebugString("TOC_Write WARN: no boot media\r\n");
		return FALSE;
	}

	// is it a valid TOC?
	if ( !VALID_TOC(g_pTOC))
	{
		EdbgOutputDebugString("TOC_Write ERROR: INVALID_TOC Signature: 0x%x\r\n", g_pTOC->dwSignature);
		return FALSE;
	}

	// is it a valid image descriptor?
	if ( !VALID_IMAGE_DESCRIPTOR(&g_pTOC->id[g_dwTocEntry]) )
	{
		EdbgOutputDebugString("TOC_Write ERROR: INVALID_IMAGE[%u] Signature: 0x%x\r\n",
		g_dwTocEntry, g_pTOC->id[g_dwTocEntry].dwSignature);
		return FALSE;
	}

	pLowFuncTbl = FIL_GetFuncTbl();

	memset(WMRBuf, '\0', WMRBUFSIZE);

	pSBuf = WMRBuf + BYTES_PER_MAIN_SUPAGE;

	dwBlock = TOC_BLOCK;

	while(1)
	{
		if (dwBlock == (TOC_BLOCK+TOC_BLOCK_SIZE+TOC_BLOCK_RESERVED))
		{
			OALMSG(TRUE, (TEXT("TOC_Write Failed !!!\r\n")));
			OALMSG(TRUE, (TEXT("Too many Bad Block\r\n")));
			return FALSE;
		}

		IS_CHECK_SPARE_ECC = FALSE32;
		pLowFuncTbl->Read(0, dwBlock*PAGES_PER_BLOCK+PAGES_PER_BLOCK-1, 0x0, enuLEFT_PLANE_BITMAP, NULL, pSBuf, TRUE32, FALSE32);
		IS_CHECK_SPARE_ECC = TRUE32;
		if (pSBuf[0] == 0xff)
		{
			pLowFuncTbl->Erase(0, dwBlock, enuLEFT_PLANE_BITMAP);
			nRet = pLowFuncTbl->Sync(0, &nSyncRet);
			if ( nRet != FIL_SUCCESS)
			{
				OALMSG(TRUE, (TEXT("[ERR] FIL Erase Error @ %d block, Skipped\r\n"), dwBlock));
				goto MarkAndSkipBadBlock;
			}

			pLowFuncTbl->Write(0, dwBlock*PAGES_PER_BLOCK, 0x01, enuLEFT_PLANE_BITMAP, (UINT8 *)g_pTOC, NULL);
			nRet = pLowFuncTbl->Sync(0, &nSyncRet);
			if (nRet != FIL_SUCCESS)
			{
				OALMSG(TRUE, (TEXT("[ERR] FIL Write Error @ %d Block %d Page, Skipped\r\n"), dwBlock, 0));
				goto MarkAndSkipBadBlock;
			}

			nRet = pLowFuncTbl->Read(0, dwBlock*PAGES_PER_BLOCK, 0x01, enuLEFT_PLANE_BITMAP, toc, NULL, FALSE32, FALSE32);
			if (nRet != FIL_SUCCESS)
			{
				OALMSG(TRUE, (TEXT("[ERR] FIL Read Error @ %d Block %d Page, Skipped\r\n"), dwBlock, 0));
				goto MarkAndSkipBadBlock;
			}

			if (0 != memcmp(toc, (UINT8 *)g_pTOC, SECTOR_SIZE))
			{
				OALMSG(TRUE, (TEXT("[ERR] Verify Error @ %d Block %d Page, Skipped\r\n"), dwBlock, 0));
				goto MarkAndSkipBadBlock;
			}

			OALMSG(TRUE, (TEXT("[OK] Write %d th Block Success\r\n"), dwBlock));
			break;

MarkAndSkipBadBlock:

			pLowFuncTbl->Erase(0, dwBlock, enuLEFT_PLANE_BITMAP);
			memset(pSBuf, 0x0, BYTES_PER_SPARE_PAGE);
			IS_CHECK_SPARE_ECC = FALSE32;
			pLowFuncTbl->Write(0, dwBlock*PAGES_PER_BLOCK+PAGES_PER_BLOCK-1, 0x0, enuLEFT_PLANE_BITMAP, NULL, pSBuf);
			IS_CHECK_SPARE_ECC = TRUE32;
			dwBlock++;
			continue;
		}
		else
		{
			OALMSG(TRUE, (TEXT("Bad Block %d Skipped\r\n"), dwBlock));
			dwBlock++;
			continue;
		}
	}

	EdbgOutputDebugString("-TOC_Write\r\n");

	return TRUE;
}


extern DWORD g_dwMBRSectorNum;

/*
    @func   BOOL | WriteOSImageToBootMedia | Stores the image cached in RAM to the Boot Media.
    The image may be comprised of one or more BIN regions.
    @rdesc  TRUE = Success, FALSE = Failure.
    @comm
    @xref
*/
BOOL WriteOSImageToBootMedia(DWORD dwImageStart, DWORD dwImageLength, DWORD dwLaunchAddr)
{
	BYTE nCount;
	DWORD dwNumExts;
	PXIPCHAIN_SUMMARY pChainInfo = NULL;
	EXTENSION *pExt = NULL;
	DWORD dwBINFSPartLength = 0;
	HANDLE hPart;
	DWORD dwStoreOffset;
	DWORD dwMaxRegionLength[BL_MAX_BIN_REGIONS] = {0};
	DWORD dwChainStart, dwChainLength;
	DWORD dwBlock;
	DWORD nBlockNum;
	//	DWORD checksum = 0;

	//  Initialize the variables
	dwChainStart = dwChainLength = 0;

	OALMSG(OAL_FUNC, (TEXT("+WriteOSImageToBootMedia\r\n")));
	OALMSG(TRUE, (TEXT("+WriteOSImageToBootMedia: g_dwTocEntry =%d, ImageStart: 0x%x, ImageLength: 0x%x, LaunchAddr:0x%x\r\n"),
				g_dwTocEntry, dwImageStart, dwImageLength, dwLaunchAddr));

	if ( !g_bBootMediaExist )
	{
		OALMSG(OAL_ERROR, (TEXT("ERROR: WriteOSImageToBootMedia: device doesn't exist.\r\n")));
		return(FALSE);
	}

	if (g_ImageType == IMAGE_TYPE_RAMIMAGE)
	{
		g_dwMBRSectorNum = BLOCK_TO_SECTOR(IMAGE_START_BLOCK); 
		OALMSG(TRUE, (TEXT("g_dwMBRSectorNum = 0x%x\r\n"), g_dwMBRSectorNum));
		
 		dwBlock = IMAGE_START_BLOCK; //by hmseo - 20061124 This block is to MBR

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99在线热播精品免费| 亚洲第一二三四区| 韩国v欧美v日本v亚洲v| 日韩你懂的在线播放| 另类成人小视频在线| 精品剧情在线观看| 这里只有精品99re| 日本欧美在线观看| 欧美成人女星排名| 国产成人精品www牛牛影视| 国产亚洲午夜高清国产拍精品| 久久爱www久久做| 国产欧美综合在线| 91伊人久久大香线蕉| 亚洲一区二区三区不卡国产欧美 | 欧美一级搡bbbb搡bbbb| 日日夜夜精品视频天天综合网| 91精品在线观看入口| 久久99精品久久久久久动态图| 久久久国产一区二区三区四区小说| 国产一区二区h| 亚洲人成网站色在线观看| 91黄色激情网站| 日韩电影在线免费观看| 国产偷v国产偷v亚洲高清| 色综合久久中文综合久久97| 日韩国产在线一| 久久精品人人爽人人爽| 欧美又粗又大又爽| 狠狠色狠狠色综合系列| 亚洲女爱视频在线| 日韩视频在线一区二区| 99精品久久免费看蜜臀剧情介绍| 亚洲国产wwwccc36天堂| 久久精品视频免费| 日本黄色一区二区| 国产在线精品一区在线观看麻豆| 国产精品福利一区| 精品99一区二区| 91蝌蚪porny| 国产综合色产在线精品| 亚洲成人午夜影院| 中文欧美字幕免费| 日韩欧美第一区| 欧美亚洲国产一区二区三区va| 国产呦萝稀缺另类资源| 亚洲123区在线观看| 国产精品网站导航| 精品久久国产97色综合| 欧美视频三区在线播放| 成人激情视频网站| 精品一区二区三区在线观看国产| 亚洲综合一区二区| 国产精品水嫩水嫩| 精品国产第一区二区三区观看体验| 日本电影欧美片| 99免费精品视频| 国产精品一区二区不卡| 婷婷六月综合网| 亚洲影视在线观看| 亚洲欧美日韩系列| 国产精品成人免费精品自在线观看| 精品久久久久一区| 欧美久久久久久久久中文字幕| 99国产精品一区| 成人午夜电影小说| 春色校园综合激情亚洲| 精品一区二区三区久久久| 日韩在线a电影| 天天色图综合网| 亚洲妇女屁股眼交7| 一二三四社区欧美黄| 亚洲美女偷拍久久| 国产精品九色蝌蚪自拍| 国产精品网站一区| 国产精品久久久久一区二区三区| 国产亚洲欧美日韩在线一区| 精品日韩成人av| 欧美不卡一区二区| 久久影院午夜论| 久久看人人爽人人| 国产人久久人人人人爽| 国产免费久久精品| 亚洲国产精品av| 中文字幕亚洲精品在线观看| 国产精品久久久久三级| 成人免费一区二区三区视频 | 日韩一区二区免费视频| 91精品久久久久久久91蜜桃| 欧美一区二区三区四区久久| 777色狠狠一区二区三区| 欧美一区二区在线不卡| 日韩三级高清在线| 久久久久久久久久看片| 欧美经典一区二区| 亚洲欧美aⅴ...| 亚洲国产精品一区二区尤物区| 午夜精品爽啪视频| 青青草原综合久久大伊人精品| 久久精品国内一区二区三区| 国产精品99精品久久免费| 成人app软件下载大全免费| av网站免费线看精品| 欧美三级日韩三级| 日韩欧美卡一卡二| 欧美国产综合一区二区| 亚洲精品成a人| 青娱乐精品在线视频| 国产69精品久久久久777| 色天天综合色天天久久| 在线播放91灌醉迷j高跟美女 | 国产精品丝袜一区| 亚洲精品精品亚洲| 免费高清在线一区| 成人av免费在线播放| 欧美日韩www| 久久精品在这里| 亚洲免费av高清| 蜜桃一区二区三区四区| 不卡在线观看av| 欧美日本乱大交xxxxx| 国产日韩欧美综合一区| 亚洲一区二区三区国产| 国产一区二区不卡| 欧美日韩免费电影| 国产欧美日韩在线| 偷窥少妇高潮呻吟av久久免费| 国产99久久久精品| 欧美精品在线观看播放| 国产精品日韩成人| 日韩不卡一区二区三区 | 狠狠色丁香婷婷综合久久片| www.亚洲色图.com| 欧美va亚洲va香蕉在线| 亚洲一区精品在线| 成人激情电影免费在线观看| 日韩欧美资源站| 亚洲国产毛片aaaaa无费看 | 97久久精品人人爽人人爽蜜臀| 制服丝袜日韩国产| 亚洲精品国产无天堂网2021 | 亚洲第一在线综合网站| 成人免费观看男女羞羞视频| 日韩欧美国产小视频| 亚洲午夜国产一区99re久久| av亚洲精华国产精华精| 久久久99精品免费观看| 奇米777欧美一区二区| 色8久久人人97超碰香蕉987| 国产嫩草影院久久久久| 国产又黄又大久久| 91精品国产91久久久久久一区二区 | 一本大道av一区二区在线播放| 精品久久久久久久久久久久久久久 | 成人黄色片在线观看| 欧美美女直播网站| 亚洲视频网在线直播| 国产一区二区看久久| 欧美一级免费大片| 一区二区三区在线视频免费| 成人一区在线观看| 精品国产欧美一区二区| 秋霞av亚洲一区二区三| 欧美亚洲综合在线| 国产精品视频免费看| 精品在线播放午夜| 在线免费观看日本欧美| 亚洲精品免费一二三区| 成人教育av在线| 久久综合视频网| 免费视频最近日韩| 精品少妇一区二区三区在线视频| 亚洲一区二区高清| 一本到三区不卡视频| 亚洲激情图片qvod| 色综合久久久久久久久久久| 国产精品美女一区二区| 成人激情校园春色| **欧美大码日韩| av一区二区不卡| 中文字幕在线一区| 国产盗摄一区二区三区| 国产精品色在线观看| 成人午夜在线视频| 国产精品久久久久四虎| 91色九色蝌蚪| 亚洲综合小说图片| 欧美日韩小视频| 日韩中文欧美在线| 久久蜜桃香蕉精品一区二区三区| 久久99最新地址| 久久伊人中文字幕| 成人激情免费电影网址| 自拍偷拍国产精品| 色999日韩国产欧美一区二区| 一区二区三区小说| 日韩色在线观看| 韩国v欧美v日本v亚洲v| 国产蜜臀av在线一区二区三区| 丝袜诱惑亚洲看片|