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

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

?? nand.c

?? Sirf/Centrality公司GPS平臺AtlasIII芯片AT640的Nboot源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
//
// 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.
//
/*++
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.
--*/
#include "def.h"
#include "AT4X0f.h"
#include <cspregs.h>

#include <string.h>
#define _DEFINE_CSP_REGS_
#include <drvlib.h>
#include "debug.h"
#include "nand.h"
#include "fmdext.h"
#include "smecc.h"
#include <loader.h>
#include <macros.h>
#include "oem.h"
#include "cachesync.h"
#include <macros.h>

#ifndef CACHE_SYSNC_DISCARD
#define CACHE_SYSNC_DISCARD 0
#endif

#undef  RETAILMSG
#define RETAILMSG(cond,expr)

FlashInfoEx g_FlashExtInfo;
PFlashInfoEx pFlashExtInfo = &g_FlashExtInfo;


static BOOL NandCheckAndReserveBlock(DWORD dwBlockIndex);
BOOL FMD_SetBlockStatus(DWORD blockID, DWORD dwStatus);
BOOL  FMDVerifyWrite(DWORD cs);

#define logh(val)	do { \
	NandDbgPutString ("\r\n" #val " = "); \
	NandDbgPutHex ((DWORD)val); \
} while (0)

#define IS_BLOCK_BAD(blockID) ((FMD_GetBlockStatus (blockID) & BLOCK_STATUS_BAD) > 0)
#define IS_BLOCK_READONLY(blockID) ((FMD_GetBlockStatus (blockID) & BLOCK_STATUS_READONLY) > 0)
#define IS_BLOCK_RESERVED(blockID) ((FMD_GetBlockStatus (blockID) & BLOCK_STATUS_RESERVED) > 0)
#define IS_BLOCK_UNUSABLE(blockID) ((FMD_GetBlockStatus (blockID) & (BLOCK_STATUS_BAD|BLOCK_STATUS_RESERVED)) > 0)

// fs: file size in bytes
// returns sector aligned value
DWORD FILE_TO_SECTOR_SIZE (DWORD fs) { return 1 + ((fs - 1) >> g_FlashExtInfo.ucSectorSizeBits); }
DWORD FILE_TO_BLOCK_SIZE (DWORD fs) { return 1 +  ((fs - 1) >> g_FlashExtInfo.ucBlockSizeBits); }
// ns: number of sectors
// N.B: returns sector aligned value since we can't tell
DWORD SECTOR_TO_FILE_SIZE (DWORD ns) { return ns << g_FlashExtInfo.ucSectorSizeBits; }

// FMD block status definitions.
#define BLOCK_STATUS_UNKNOWN	0x01
#define BLOCK_STATUS_BAD		0x02
#define BLOCK_STATUS_READONLY	0x04
#define BLOCK_STATUS_RESERVED	0x08

// FMD OEM reserved area bitfield.
#define OEM_BLOCK_RESERVED	0x01
#define OEM_BLOCK_READONLY	0x02

#define ATLAS_IMAGE_WINDOWS_CE_NBOOT	3
#define ATLAS_IMAGE_WINDOWS_CE_EBOOT	4
#define ATLAS_IMAGE_WINDOWS_NK_NB0	5
#define ATLAS_IMAGE_WINDOWS_CE_DM	7	//leon01 add for DM

#define  TOC_RESERVED_BLOCK_SIZE	1
#define  EBOOT_RESERVED_BLOCK_SIZE	10
#define  DM_RESERVED_BLOCK_SIZE		35	//leon01 add for DM

#define NBOOT_VERSION			0x300B  // Version number: AAAA.BBBB.CCCCCCCC one word, 3.0.11

#define MAX_BAD_BLOCKS			10

#define pDriverGlobals			((PDRIVER_GLOBALS) 0xC0002000)  

DWORD dwDmaPhysAddr		= SMDF_DMA_START_PHYSICAL;
DWORD g_nNandCS			= 0;	//default to 0
DWORD g_nCurImg			= ATLAS_IMAGE_WINDOWS_CE_NBOOT;

//DWORD g_dwNBootBlock;
DWORD g_dwTocBlock;
DWORD g_dwEBootBlock;
DWORD g_dwNKBlock;
DWORD g_dwDMBlock		= 0;	//leon01 add for DM entry

DWORD g_dwSecureBlock;
DWORD g_dwSecureBlockSize = 0;

SectorInfo g_SI;
BYTE tocTemp[2048+64];
TOC* g_pTOC = (TOC*) tocTemp;

#ifndef BUILDING_NBOOT_ICE
static DWORD g_dwEbootBlockSize=EBOOT_RESERVED_BLOCK_SIZE;
static DWORD g_dwDMBlockSize=DM_RESERVED_BLOCK_SIZE;

static DWORD g_dwEbootLaunchAddr=0x8c04c000;
static DWORD g_dwEbootLoadAddr=0x8c04c000;
static DWORD g_dwDMLaunchAddr=0x8c04c000;
static DWORD g_dwDMLoadAddr=0x8c04c000;

static DWORD g_dwTOCBlockSize=TOC_RESERVED_BLOCK_SIZE;
#endif

volatile PUCHAR	v_pDMAAddr					= (volatile PUCHAR)(SMDF_DMA_START_PHYSICAL&~0xc0000000);

#ifndef BUILDING_NBOOT_ICE
extern DWORD g_iCurImgLength;
#endif
extern DWORD g_dwJumpAddr;
extern DWORD g_dwEntry;
extern DWORD g_dwIoClock;

BYTE WriteSectBuf[2048+64];
BYTE ReadSectBuf[2048+64];

int g_bNandDbgMuted = 0;

UCHAR g_ucNandcs[4];

#define PROTECT_NAND()	do{	\
	GPIO2_PAD_EN |= 0x40;	\
	GPIO2_CTRL6	= 0x100;	\
	GPIO2_CTRL6	|= 0x20;	\
	}while(0)
	
#define UNPROTECT_NAND()	do {	\
	GPIO2_PAD_EN |= 0x40;	\
	GPIO2_CTRL6	= 0x140;	\
	GPIO2_CTRL6	|= 0x20;	\
	}while(0)
	
// When using serial port to update image, 
// we don't allow any debug message through this port.
void	NandDbgPutHex(unsigned long i)	{ if (!g_bNandDbgMuted) DbgPutHex (i); }
void	NandDbgPutString(char* s)	{ if (!g_bNandDbgMuted) DbgPutString (s); }


void FMDSetAddress (DWORD dwSectorAddr, WORD wOffsetLarge, WORD wOffsetSmall)
{
	if (g_FlashExtInfo.bHighDensity)
	{
		NF_SET_ADDR((dwSectorAddr<<16) + wOffsetLarge/(g_FlashExtInfo.ucDataWidth/8));
		NF_SET_ADDR_HI(dwSectorAddr>>16);
	}
	else
	{
		NF_SET_ADDR((dwSectorAddr<<8) + wOffsetSmall);
		NF_SET_ADDR_HI(0);
	}
}

void FMDChangePointer(BOOL bDataArea)
{
	if (!g_FlashExtInfo.bHighDensity)
	{
		NF_CMD_MODE();
		NF_ADDR_CYCLE_NUM(0);
		// 
		if (bDataArea)
		{
			//change the write pointer to the data area by issueing a read cmd1
			NF_CMD(SMDF_CMD_READ1);
		}
		else
		{
			//change the write pointer to the spare area by issueing a read cmd2
			NF_CMD(SMDF_CMD_READ2);
		}
	}
}

void FMDWriteFifo (PDWORD pData, DWORD dwLength)
{
	DWORD dwFifoNum;
	for (dwFifoNum=0; dwFifoNum<dwLength/4; dwFifoNum++)
	{
		NF_WR_FIFO((*(pData+dwFifoNum)));
	}
}

void FMDReadFifo (PDWORD pData, DWORD dwLength)
{
	DWORD dwFifoNum;
	for (dwFifoNum=0; dwFifoNum<dwLength/4; dwFifoNum++)
	{
		NF_RD_FIFO((*(pData+dwFifoNum)));
	}
}

void FMDPageProgram (void)
{
	NF_CMD_MODE ();
	NF_ADDR_CYCLE_NUM (0);
	NF_CLR_INT (SMDF_ADD_INT);
	NF_CMD (SMDF_CMD_PAGE_PROGRAM);
	NF_WAIT_INT (SMDF_ADD_INT);
}

void FMDInitHardware()
{

	int nand_cs = OEMGetNandCs();

	if(OEMIsNorBoot())
	{
		nand_cs &= ~1;
		//Default the cs to cs3 
		g_nNandCS = 3;
	}
	WRITE_BITFIELD(struct RSCPinMuxBits, &(v_pRscRegs->rscPinMux), nand, nand_cs);

	if (0 == (v_pSMDFRegs->SmDirectRead & 0x10)) {
		WRITE_BITFIELD(struct RSCPinMuxBits, &(v_pRscRegs->rscPinMux), cam, 0x1);
	}

	// Map SMDF register space
	v_pSMDFRegs->SmDirectRead &= ~0x1;

	v_pSMDFRegs->SmWait = 0x1878;
	v_pSMDFRegs->SmFIFOOp = 1;

	NF_INIT_DMA();
	NF_INT_MASK(0);

	// ENABLE POWER MANAGER CLOCK ENABLE REGISTER
	WRITE_BITFIELD(struct pwrclkenable, &(v_pPowerRegs->pmr_clkenable), dma, 1);
	WRITE_BITFIELD(struct pwrclkenable, &(v_pPowerRegs->pmr_clkenable), rom, 1);

	NF_CS(~(1 << g_nNandCS));
}


BOOL FMDReadFlashID()
{
	DWORD dwRead;
	DWORD dwDeviceId;
	DWORD dwManufactureId;

	g_FlashExtInfo.wCmdSeqDataIn			= 0x80;
	g_FlashExtInfo.wCmdPageProg				= 0x10;
	g_FlashExtInfo.wCmdReadStat				= 0x70;
	g_FlashExtInfo.wCmdReadId				= 0x90;
	g_FlashExtInfo.wCmdBlockErase			= 0xd060;
	g_FlashExtInfo.wCmdReset				= 0xff;
	g_FlashExtInfo.wLock					= 0x0;
	g_FlashExtInfo.wUnlock					= 0x0;
	g_FlashExtInfo.wLockTight				= 0x0;
	g_FlashExtInfo.wReadLockStat			= 0x0;

	g_FlashExtInfo.wCmdCacheProg			= 0x1580;
	g_FlashExtInfo.wCmdCBProg				= 0x1085;
	g_FlashExtInfo.wCmdRandInput			= 0x85;
	g_FlashExtInfo.wCmdRandOutput			= 0xe005;
	g_FlashExtInfo.wCmdReadLast				= 0x0;

	//
	// force to use 8-bit mode to read Flash ID
	//
	v_pSMDFRegs->SmDirectRead &= ~0x2;

	NF_RESET_FIFO();
	NF_IO_RD_MODE();
	NF_LEN(4);
	NF_ADDR_CYCLE_NUM(1);
	NF_SET_ADDR(0);
	NF_CMD(SMDF_CMD_READ_ID);

	while(NF_FIFO_EMPTY());

	NF_RD_FIFO(dwRead);

	dwManufactureId = (dwRead & 0xff);
	dwDeviceId = ((dwRead >> 8) & 0xff);

#if 0
	NandDbgPutString("Manufacture ID: ");
	NandDbgPutHex(dwManufactureId);
	NandDbgPutString("\r\nDevice ID: ");
	NandDbgPutHex(dwDeviceId);
	NandDbgPutString("\r\n");
#endif

	switch (dwDeviceId)
	{
	case DEVICE_ID_16M:
	case DEVICE_ID_32M:
	case DEVICE_ID_64M:
	case DEVICE_ID_128M:
		v_pSMDFRegs->SmDirectRead				&= ~8;
		g_FlashExtInfo.ucSectorSizeBits			= SHIFT_512_BYTES;
		g_FlashExtInfo.ucSectorsPerBlockBits	= 5;

		// Set flash command set
		g_FlashExtInfo.wCmdReadFirst			= 0x00;
		g_FlashExtInfo.wCmdReadLast				= 0x01;
		g_FlashExtInfo.wCmdReadShare			= 0x50;

		g_FlashExtInfo.wCmdCacheProg			= 0x00;
		g_FlashExtInfo.wCmdCBProg				= 0x00;
		g_FlashExtInfo.wCmdRandInput			= 0x00;
		g_FlashExtInfo.wCmdRandOutput			= 0x00;

	case DEVICE_ID_K9K2G08Q0M:
	case DEVICE_ID_K9K2G08U0M:
	case DEVICE_ID_K9K4G08U0M:
	case DEVICE_ID_128M_F1:
		g_FlashExtInfo.ucDataWidth				= 8;
		break;

	case DEVICE_ID_128M_16BITS:
	case DEVICE_ID_K9K2G16Q0M:
	case DEVICE_ID_K9K2G16U0M:
		v_pSMDFRegs->SmDirectRead				|= 0x2;
		g_FlashExtInfo.ucDataWidth				= 16;
		break;
	default:
        if (!OEMGetFlashExtInfo (dwManufactureId, dwDeviceId, &g_FlashExtInfo))
        {
			NandDbgPutString ("\r\nID lost.");
			PWR_CLOCK_DISABLE (PWRCLK_USB_EN);
			while (1);
		}
        break;
	}

	switch (dwDeviceId) 
	{
	case DEVICE_ID_16M:
		g_FlashExtInfo.fi.dwNumBlocks			= 1024;
		g_FlashExtInfo.ucChipAddrCycleNum		= 3;
		break;

	case DEVICE_ID_32M:
		g_FlashExtInfo.fi.dwNumBlocks			= 2048;
		g_FlashExtInfo.ucChipAddrCycleNum		= 3;
		break;

	case DEVICE_ID_64M:
		g_FlashExtInfo.fi.dwNumBlocks			= 4096;
		g_FlashExtInfo.ucChipAddrCycleNum		= 4;
		break;

	case DEVICE_ID_128M:
		g_FlashExtInfo.fi.dwNumBlocks			= 8192;
		g_FlashExtInfo.ucChipAddrCycleNum		= 4;
		break;

	case DEVICE_ID_128M_F1:
		g_FlashExtInfo.fi.dwNumBlocks			= 1024;
		g_FlashExtInfo.ucSectorSizeBits			= SHIFT_2048_BYTES;
		g_FlashExtInfo.ucSectorsPerBlockBits	= 6;

		g_FlashExtInfo.ucChipAddrCycleNum		= 4;

		// Set flash command set
		g_FlashExtInfo.wCmdReadFirst			= 0x3000;
		g_FlashExtInfo.wCmdReadShare			= 0x3000;
		break;

	case DEVICE_ID_128M_16BITS:
		g_FlashExtInfo.ucSectorSizeBits			= SHIFT_2048_BYTES;
		g_FlashExtInfo.ucSectorsPerBlockBits	= 6;
		g_FlashExtInfo.fi.dwNumBlocks			= 512;
		g_FlashExtInfo.ucChipAddrCycleNum		= 4;

		// These codes still not verified.
		// Set flash command set
		g_FlashExtInfo.wCmdReadFirst			= 0x3000;
		g_FlashExtInfo.wCmdReadShare			= 0x3000;
		break;

	case DEVICE_ID_K9K2G08Q0M:
	case DEVICE_ID_K9K2G08U0M:
	case DEVICE_ID_K9K2G16Q0M:
	case DEVICE_ID_K9K2G16U0M:
		g_FlashExtInfo.ucSectorSizeBits			= SHIFT_2048_BYTES;
		g_FlashExtInfo.ucSectorsPerBlockBits	= 6;
		g_FlashExtInfo.fi.dwNumBlocks			= 2048;
		g_FlashExtInfo.ucChipAddrCycleNum		= 5;

		// Set flash command set
		g_FlashExtInfo.wCmdReadFirst			= 0x3000;
		g_FlashExtInfo.wCmdReadShare			= 0x3000;
		break;
		
	case DEVICE_ID_K9K4G08U0M:
		g_FlashExtInfo.ucSectorSizeBits			= SHIFT_2048_BYTES;
		g_FlashExtInfo.ucSectorsPerBlockBits	= 6;
		g_FlashExtInfo.fi.dwNumBlocks			= 4096;
		g_FlashExtInfo.ucChipAddrCycleNum		= 5;

		// Set flash command set
		g_FlashExtInfo.wCmdReadFirst			= 0x3000;
		g_FlashExtInfo.wCmdReadShare			= 0x3000;
		break;

	}

	g_FlashExtInfo.ucBlockSizeBits = g_FlashExtInfo.ucSectorSizeBits+g_FlashExtInfo.ucSectorsPerBlockBits;
	g_FlashExtInfo.fi.wSectorsPerBlock		= 1 << g_FlashExtInfo.ucSectorsPerBlockBits;
	g_FlashExtInfo.fi.wDataBytesPerSector	= 1 << g_FlashExtInfo.ucSectorSizeBits;
	g_FlashExtInfo.fi.dwBytesPerBlock		= 1 << g_FlashExtInfo.ucBlockSizeBits;
	g_FlashExtInfo.wSpareDataLength			= g_FlashExtInfo.fi.wDataBytesPerSector * 16 / 512;
	g_FlashExtInfo.dwTotalSize				= g_FlashExtInfo.fi.dwNumBlocks << g_FlashExtInfo.ucBlockSizeBits;
	v_pSMDFRegs->SmPageSize	= g_FlashExtInfo.dwPageSize
							= g_FlashExtInfo.fi.wDataBytesPerSector + g_FlashExtInfo.wSpareDataLength;

	if (g_FlashExtInfo.ucSectorSizeBits > 9)
	{
		g_FlashExtInfo.bHighDensity = 1;
		g_FlashExtInfo.ucNumBlockCycles = g_FlashExtInfo.ucChipAddrCycleNum - 2;
	}
	else
	{
		g_FlashExtInfo.bHighDensity = 0;
		g_FlashExtInfo.ucNumBlockCycles = g_FlashExtInfo.ucChipAddrCycleNum - 1;
	}

	return TRUE;
}

#if 0
void FMDReadUUID(void)
{
	int i;
	DWORD dwRead;
	DWORD dwSig;

	FMDInitHardware();
	FMDReadFlashID();

	NF_CMD_MODE();
	NF_SET_ADDR(0);
	NF_SET_ADDR_HI(0);
	NF_ADDR_CYCLE_NUM(0);
	NF_LEN(0);

	NF_CMD(0x30);
	NF_CMD_MODE();
	NF_ADDR_CYCLE_NUM(0);
	NF_CMD(0x65);
	NF_CMD_MODE();
	NF_ADDR_CYCLE_NUM(g_FlashExtInfo.ucChipAddrCycleNum+1);
	NF_LEN(g_FlashExtInfo.dwPageSize);
	NF_CMD(SMDF_CMD_READ1);
   	NF_IO_RD_MODE();

	for (i=0;i<(g_FlashExtInfo.dwPageSize)/4; i++)
	{
		while(NF_FIFO_EMPTY());
		NF_RD_FIFO(dwRead);

		if (g_FlashExtInfo.bHighDensity)
		{
			if(i<16)
			{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91福利资源站| 国产精品免费人成网站| 国产白丝精品91爽爽久久| 国产精品456露脸| 捆绑调教美女网站视频一区| 午夜国产精品一区| 视频一区在线视频| 五月天激情综合| 成人丝袜18视频在线观看| 成人av网站大全| 色综合久久天天| 在线视频一区二区免费| 欧美性大战xxxxx久久久| 欧美人伦禁忌dvd放荡欲情| 宅男噜噜噜66一区二区66| 91精选在线观看| 曰韩精品一区二区| 亚洲.国产.中文慕字在线| 日本伊人午夜精品| 国产激情偷乱视频一区二区三区 | 日av在线不卡| 精品在线观看视频| 福利91精品一区二区三区| 欧美大尺度电影在线| 国产亚洲欧美日韩日本| 18欧美亚洲精品| 亚洲一区二区av在线| 蜜桃一区二区三区四区| 99久久国产综合精品色伊| 欧美三片在线视频观看| 精品国产精品网麻豆系列| 精品成人一区二区| 麻豆成人久久精品二区三区小说| 欧美日韩情趣电影| 亚洲观看高清完整版在线观看| 看国产成人h片视频| 91精品黄色片免费大全| 日本最新不卡在线| 日韩欧美自拍偷拍| 一区二区三区资源| 国产精品综合久久| 国产午夜精品在线观看| 丁香六月久久综合狠狠色| 国产精品欧美久久久久无广告 | 亚洲视频在线一区观看| 精品一区二区影视| 久久久99精品免费观看不卡| 国产成人免费视频精品含羞草妖精| 国产校园另类小说区| 成人性生交大片免费看视频在线| 中文字幕亚洲一区二区av在线 | 激情六月婷婷久久| 欧美日韩电影在线| 精品在线观看视频| 亚洲国产电影在线观看| 国产精品一区二区在线播放| 中文字幕欧美三区| 欧美三级日韩三级| 久久精品国产秦先生| 国产精品美女视频| 欧美日本一道本在线视频| 久久91精品久久久久久秒播| 中文一区二区在线观看| 欧美无乱码久久久免费午夜一区 | 国产资源在线一区| 最新国产精品久久精品| 欧美日韩精品欧美日韩精品一 | 亚洲欧美日韩国产综合| 99热这里都是精品| 国产精品久久久久婷婷| 顶级嫩模精品视频在线看| 亚洲精品国产a| 精品播放一区二区| 色婷婷激情综合| 国模少妇一区二区三区| 一区二区三区在线看| 日韩欧美一二三四区| 91麻豆蜜桃一区二区三区| 亚洲人成在线观看一区二区| 日韩欧美国产一区二区在线播放 | 91社区在线播放| 捆绑调教美女网站视频一区| 亚洲色图丝袜美腿| 精品国产凹凸成av人网站| 在线一区二区三区四区五区| 国产乱人伦偷精品视频不卡| 亚洲chinese男男1069| 国产精品久久久久一区二区三区 | 亚洲国产精品嫩草影院| 国产清纯白嫩初高生在线观看91 | 日本成人在线不卡视频| 亚洲欧洲av另类| 久久欧美一区二区| 福利一区福利二区| 开心九九激情九九欧美日韩精美视频电影 | 成人午夜又粗又硬又大| 免费观看在线色综合| 亚洲色图19p| 国产欧美精品在线观看| 51精品久久久久久久蜜臀| 在线一区二区三区四区五区| 成人性生交大片免费看中文网站| 六月丁香婷婷久久| 日韩精品一二三四| 亚洲成a人v欧美综合天堂| 亚洲欧美日韩一区二区三区在线观看| 久久久久9999亚洲精品| 日韩久久精品一区| 欧美一二三四区在线| 欧美精品一二三区| 国产精品一区二区在线观看不卡 | 日韩一级视频免费观看在线| 精品1区2区3区| 在线免费av一区| 日本丶国产丶欧美色综合| 99久久er热在这里只有精品15 | 一卡二卡欧美日韩| 亚洲狼人国产精品| 一区二区三区欧美在线观看| 亚洲色图.com| 一区二区三区四区蜜桃| 一区二区三区精品| 一区二区三区毛片| 亚洲va国产天堂va久久en| 日韩av网站免费在线| 老汉av免费一区二区三区| 国模少妇一区二区三区| 国产91丝袜在线观看| 不卡av电影在线播放| 91免费国产视频网站| 欧美在线免费观看亚洲| 51午夜精品国产| 精品久久一区二区| 欧美日韩一级黄| 欧美一级欧美三级| 欧美色男人天堂| 精品卡一卡二卡三卡四在线| 欧美高清一级片在线观看| 成人欧美一区二区三区小说| 亚洲中国最大av网站| 日韩综合在线视频| 国产精品资源在线看| 91美女在线观看| 7777精品久久久大香线蕉| 久久亚洲综合色一区二区三区| 在线不卡欧美精品一区二区三区| 日韩欧美国产电影| 亚洲欧洲av一区二区三区久久| 亚洲一区二区三区美女| 久久99精品久久久| 99久久伊人精品| 91精品国产欧美一区二区成人 | 7777精品伊人久久久大香线蕉的| 精品裸体舞一区二区三区| 中文字幕一区免费在线观看| 日韩国产在线观看| 99精品国产视频| 精品日韩在线一区| 夜夜精品视频一区二区| 国产伦精品一区二区三区免费| 极品少妇xxxx偷拍精品少妇| 一本大道av伊人久久综合| 日韩精品一区二区三区中文不卡| 亚洲视频免费看| 国产一区亚洲一区| 欧美老肥妇做.爰bbww| 国产精品理论在线观看| 精品一二三四区| 欧美日韩一区二区在线视频| 国产精品入口麻豆原神| 久久精品国产免费| 欧美人牲a欧美精品| 亚洲欧美偷拍三级| 成人在线综合网| 精品国产污网站| 日韩精品国产精品| 91福利国产精品| 亚洲人午夜精品天堂一二香蕉| 国产在线看一区| 日韩视频免费直播| 午夜日韩在线观看| 在线精品国精品国产尤物884a| 国产日韩欧美亚洲| 国产一区二区伦理片| 日韩午夜在线播放| 青青草视频一区| 9191精品国产综合久久久久久| 亚洲综合成人网| 99久久精品免费看国产| 国产精品美女久久福利网站| 国内成人自拍视频| 亚洲精品在线观| 久久精品二区亚洲w码| 欧美一区二区三区小说| 视频精品一区二区| 91精品国产乱码| 久久国产精品无码网站| 欧美一区二区大片| 久久国产婷婷国产香蕉| 日韩女优电影在线观看|