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

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

?? nand.c

?? UCOS S3C2440 移植源代碼 ADS1.2 可以直接跑在開發(fā)板上
?? C
字號:
#include "def.h"
#include "2440addr.h"
#include "2440lib.h"

#define	EnNandFlash()	(rNFCONF |= 0x8000)
#define	DsNandFlash()	(rNFCONF &= ~0x8000)
#define	InitEcc()		(rNFCONF |= 0x1000)
#define	NoEcc()			(rNFCONF &= ~0x1000)
#define	NFChipEn()		(rNFCONF &= ~0x800)
#define	NFChipDs()		(rNFCONF |= 0x800)

#define	WrNFCmd(cmd)	(rNFCMD = (cmd))
#define	WrNFAddr(addr)	(rNFADDR = (addr))
#define	WrNFDat(dat)	(rNFDATA = (dat))
#define	RdNFDat()		(rNFDATA)
#define	RdNFStat()		(rNFSTAT)
#define	NFIsBusy()		(!(rNFSTAT&1))
#define	NFIsReady()		(rNFSTAT&1)

//#define	WIAT_BUSY_HARD	1
//#define	ER_BAD_BLK_TEST
//#define	WR_BAD_BLK_TEST

#define	READCMD0	0
#define	READCMD1	1
#define	READCMD2	0x50
#define	ERASECMD0	0x60
#define	ERASECMD1	0xd0
#define	PROGCMD0	0x80
#define	PROGCMD1	0x10
#define	QUERYCMD	0x70
#define	RdIDCMD		0x90

static U16 NandAddr;


static void InitNandCfg(void)
{
	//enable nand flash control, initilize ecc, chip disable,
	rNFCONF = (1<<15)|(1<<12)|(1<<11)|(7<<8)|(7<<4)|(7);	
}

#ifdef	WIAT_BUSY_HARD
#define	WaitNFBusy()	while(NFIsBusy())
#else
static U32 WaitNFBusy(void)	// R/B 未接好?
{
	U8 stat;
	
	WrNFCmd(QUERYCMD);
	do {
		stat = RdNFDat();
		//printf("%x\n", stat);
	}while(!(stat&0x40));
	WrNFCmd(READCMD0);
	return stat&1;
}
#endif

static U32 ReadChipId(void)
{
	U32 id;
	
	NFChipEn();	
	WrNFCmd(RdIDCMD);
	WrNFAddr(0);
	while(NFIsBusy());	
	id  = RdNFDat()<<8;
	id |= RdNFDat();		
	NFChipDs();		
	
	return id;
}

static U16 ReadStatus(void)
{
	U16 stat;
	
	NFChipEn();	
	WrNFCmd(QUERYCMD);		
	stat = RdNFDat();	
	NFChipDs();
	
	return stat;
}

static U32 EraseBlock(U32 addr)
{
	U8 stat;

	addr &= ~0x1f;
		
	NFChipEn();	
	WrNFCmd(ERASECMD0);		
	WrNFAddr(addr);
	WrNFAddr(addr>>8);
	if(NandAddr)
		WrNFAddr(addr>>16);
	WrNFCmd(ERASECMD1);		
	stat = WaitNFBusy();
	NFChipDs();
	
#ifdef	ER_BAD_BLK_TEST
	if(!((addr+0xe0)&0xff)) stat = 1;	//just for test bad block
#endif
	
	//printf("Erase block 0x%x %s\n", addr, stat?"fail":"ok");
	Uart_SendByte('.');
	return stat;
}

//addr = page address
extern void ReadPage(U32 addr, U8 *buf)
{
	U16 i;
	
	NFChipEn();
	WrNFCmd(READCMD0);
	WrNFAddr(0);
	WrNFAddr(addr);
	WrNFAddr(addr>>8);
	if(NandAddr)
		WrNFAddr(addr>>16);
	InitEcc();
	WaitNFBusy();
	for(i=0; i<512; i++)
		buf[i] = RdNFDat();
	NFChipDs();
}

extern void Nand_Read(U32 blockD,U8 *Save_Address,U32 ReadSize)
{
	  U32  i,k,BlockSize;
	  U32  blockPage;
      U8  *read_addr;

	  blockD = blockD & 0x0fff;
	  read_addr = Save_Address;
	  BlockSize = (ReadSize>>14) + 1;
      for(i=0;i<BlockSize;i++)
	  {
	      for(k=0;k<32;k++)    // Read 32 page
		  {
              blockPage=((blockD+i)<<5)+k;
              ReadPage(blockPage,read_addr);   // Read one page
			  read_addr +=  512; 
              if((U32)read_addr>=((U32)Save_Address+ReadSize)) // Check end of buffer
                break;  // Exit for loop
		  }
	  }
}

/*static U32 WritePage(U32 addr, U8 *buf)
{
	U16 i;
	U8 stat, tmp[3];
	
	NFChipEn();
	WrNFCmd(PROGCMD0);
	WrNFAddr(0);
	WrNFAddr(addr);
	WrNFAddr(addr>>8);
	if(NandAddr)
		WrNFAddr(addr>>16);
	InitEcc();	
	for(i=0; i<512; i++)
		WrNFDat(buf[i]);
		
	tmp[0] = rNFECC0;
    tmp[1] = rNFECC1;
    tmp[2] = rNFECC2;
    	
	WrNFDat(tmp[0]);
	WrNFDat(tmp[1]);
	WrNFDat(tmp[2]);
    	
	WrNFCmd(PROGCMD1);
	stat = WaitNFBusy();
	NFChipDs();
	
#ifdef	WR_BAD_BLK_TEST
	if((addr&0xff)==0x17) stat = 1;	//just for test bad block
#endif
		
	if(stat)
		printf("Write nand flash 0x%x fail\n", addr);
	else {	
		U8 RdDat[512];
		
		ReadPage(addr, RdDat);		
		for(i=0; i<512; i++)
			if(RdDat[i]!=buf[i]) {
				printf("Check data at page 0x%x, offset 0x%x fail\n", addr, i);
				stat = 1;
				break;
			}
	}
		
	return stat;	
}*/

static void MarkBadBlk(U32 addr)
{
	addr &= ~0x1f;
	
	NFChipEn();
	
	WrNFCmd(READCMD2);	//point to area c
	
	WrNFCmd(PROGCMD0);
	WrNFAddr(4);		//mark offset 4,5,6,7
	WrNFAddr(addr);
	WrNFAddr(addr>>8);
	if(NandAddr)
		WrNFAddr(addr>>16);
	WrNFDat(0);			//mark with 0
	WrNFDat(0);
	WrNFDat(0);			//mark with 0
	WrNFDat(0);
	WrNFCmd(PROGCMD1);
	WaitNFBusy();		//needn't check return status
	
	WrNFCmd(READCMD0);	//point to area a
		
	NFChipDs();
}

static int CheckBadBlk(U32 addr)
{
	U8 dat;
	
	addr &= ~0x1f;
	
	NFChipEn();
	
	WrNFCmd(READCMD2);	//point to area c
	WrNFAddr(5);		//mark offset 4,5,6,7
	WrNFAddr(addr);
	WrNFAddr(addr>>8);
	if(NandAddr)
		WrNFAddr(addr>>16);
	WaitNFBusy();
	dat = RdNFDat();
	
	WrNFCmd(READCMD0);	//point to area a
	
	NFChipDs();

	return (dat!=0xff);
}

/************************************************************/
struct Partition{
	U32 offset;
	U32 size;
	char *name;
};

static struct Partition NandPart[] = {
	{0, 		 0x00030000, "boot"},		//256K
	{0x00030000, 0x001d0000, "kernel"},
	{0x00200000, 0x00600000, "rootfs"},		//6M
	{0x00800000, 0x00800000, "ext-fs1"},	//8M
	{0x01000000, 0x01000000, "ext-fs2"},	//16M
	{0x02000000, 0x02000000, "ext-fs3"},	//32M
	{0,			 0         , 0}
};
/*
static void TestFunc(void)
{
	U32 i;
	U8 buf[512];
	
	if(EraseBlock(0x180))
		return;
	
	for(i=0; i<512; i++)
		buf[i] = i;
		
	WritePage(0x180, buf);	
	for(i=0; i<512; i++)
		buf[i] = 0;
	ReadPage(0x180, buf);
	
	for(i=0; i<512; i++)
		printf("%4x", buf[i]);
}
*/
static U32 StartPage, BlockCnt;
//extern U32 downloadAddress; 
//extern U32 downloadFileSize;


static int NandSelPart(char *info)
{
	U16 i, max_sel;
	struct Partition *ptr = NandPart;
	
	printf("Please select which region to %s : Esc to abort\n", info);
	
	for(i=0; ptr->size!=0; i++, ptr++)
		printf("%d : offset 0x%-8x, size 0x%-8x [%s]\n", i, ptr->offset, ptr->size, ptr->name);
		
	max_sel = i;
	
	while(1) {
		i = Uart_Getch();
		if(i==0x1b)
			return -1;
		if((i>='0')&&(i<(max_sel+'0'))) {
			i -= '0';
			StartPage = NandPart[i].offset>>9;
			BlockCnt  = NandPart[i].size>>14;
			return i;
		}
	}	
}

/*static void WrFileToNF(void)
{
	int nf_part, i ,size, skip_blks;
	U32 ram_addr;
	
	nf_part = NandSelPart("write");
	if(nf_part<0)
		return;	
	
	if(downloadFileSize>NandPart[nf_part].size) {
		puts("Download file size is more large than selected partition size!!!\n");
//		return;
	}
	
	printf("Now write nand flash page 0x%x from ram address 0x%x, filesize = %d\n", StartPage, downloadAddress, downloadFileSize);
	puts("Are you sure? [y/n]\n");
	while(1) {
		char c = getch();
		if((c=='y')||(c=='Y'))
			break;
		if((c=='n')||(c=='N'))			
			return;
	}
	
	skip_blks = 0;
	ram_addr = downloadAddress;
	size = downloadFileSize;
	for(i=0; size>0; )	{	
		if(!(i&0x1f)) {
			if(EraseBlock(i+StartPage)) {
				NandPart[nf_part].size -= 32<<9;	//partition available size - 1 block size
				if(downloadFileSize>NandPart[nf_part].size) {
					puts("Program nand flash fail\n");
					return;
				}
				MarkBadBlk(i+StartPage);
				skip_blks++;				
				i += 32;				
				continue;
			}
		}
		if(WritePage(i+StartPage, (U8 *)ram_addr)) {
			ram_addr -= (i&0x1f)<<9;
			size += (i&0x1f)<<9;
			i &= ~0x1f;
			NandPart[nf_part].size -= 32<<9;	//partition available size - 1 block size
			if(downloadFileSize>NandPart[nf_part].size) {
				puts("Program nand flash fail\n");
				return;
			}			
			MarkBadBlk(i+StartPage);
			skip_blks++;			
			i += 32;			
			continue;
		}
		ram_addr += 512;
		size -= 512;
		i++;
	}

	puts("Program nand flash partition success\n");
	if(skip_blks)
		printf("Skiped %d bad block(s)\n", skip_blks);
}*/

#define LINUX_PAGE_SHIFT	12
#define LINUX_PAGE_SIZE		(1<<LINUX_PAGE_SHIFT)
#define COMMAND_LINE_SIZE 	1024

struct param_struct {
    union {
	struct {
	    unsigned long page_size;			/*  0 */
	    unsigned long nr_pages;				/*  4 */
	    unsigned long ramdisk_size;			/*  8 */
	    unsigned long flags;				/* 12 */
#define FLAG_READONLY	1
#define FLAG_RDLOAD		4
#define FLAG_RDPROMPT	8
	    unsigned long rootdev;				/* 16 */
	    unsigned long video_num_cols;		/* 20 */
	    unsigned long video_num_rows;		/* 24 */
	    unsigned long video_x;				/* 28 */
	    unsigned long video_y;				/* 32 */
	    unsigned long memc_control_reg;		/* 36 */
	    unsigned char sounddefault;			/* 40 */
	    unsigned char adfsdrives;			/* 41 */
	    unsigned char bytes_per_char_h;		/* 42 */
	    unsigned char bytes_per_char_v;		/* 43 */
	    unsigned long pages_in_bank[4];		/* 44 */
	    unsigned long pages_in_vram;		/* 60 */
	    unsigned long initrd_start;			/* 64 */
	    unsigned long initrd_size;			/* 68 */
	    unsigned long rd_start;				/* 72 */
	    unsigned long system_rev;			/* 76 */
	    unsigned long system_serial_low;	/* 80 */
	    unsigned long system_serial_high;	/* 84 */
	    unsigned long mem_fclk_21285;       /* 88 */
	} s;
	char unused[256];
    } u1;
    union {
	char paths[8][128];
	struct {
	    unsigned long magic;
	    char n[1024 - sizeof(unsigned long)];
	} s;
    } u2;
    char commandline[COMMAND_LINE_SIZE];
};

extern char boot_params[];
//extern void  call_linux(U32 a0, U32 a1, U32 a2);

static void LoadRun(int part_sel)
{
	U32 i, ram_addr, buf = 0x30200000;
	struct param_struct *params = (struct param_struct *)0x30000100;
	int size;
//#ifdef SDRAM_SIZE8M
//	char *linux_params = "root=/dev/mtdblock2 load_ramdisk=0 init=/linuxrc console=ttyS0 mem=8M";
//#elif defined SDRAM_SIZE16M
//	char *linux_params = "root=/dev/mtdblock2 load_ramdisk=0 init=/linuxrc console=ttyS0 mem=16M";
//#elif defined SDRAM_SIZE32M
//	char *linux_params = "root=/dev/mtdblock2 load_ramdisk=0 init=/linuxrc console=ttyS0 mem=32M";
//#elif defined SDRAM_SIZE64M
	char *linux_params = "root=/dev/mtdblock2 load_ramdisk=0 init=/linuxrc console=ttyS0 mem=64M devfs=mount";
//#else
//	char *linux_params = "root=/dev/mtdblock2 load_ramdisk=0 init=/linuxrc console=ttyS0 mem=16M";
//#endif	
	//if(boot_params[0])
	//	linux_params = boot_params;
	
	StartPage = NandPart[part_sel].offset>>9;
	size = NandPart[part_sel].size;
	ram_addr = buf;	
	
	for(i=0; size>0; ) {
		if(!(i&0x1f)) {
			if(CheckBadBlk(i+StartPage)) {
				printf("Skipped bad block at 0x%x\n", i+StartPage);
				i += 32;
				size -= 32<<9;
				continue;
			}
		}
		ReadPage((i+StartPage), (U8 *)ram_addr);
		i++;
		size -= 512;
		ram_addr += 512;
	}
	DsNandFlash();

	for(i=0; i<(sizeof(struct param_struct)>>2); i++)
		((U32 *)params)[i] = 0;
	params->u1.s.page_size = LINUX_PAGE_SIZE;
	params->u1.s.nr_pages = (0x04000000 >> LINUX_PAGE_SHIFT);
	for(i=0; linux_params[i]; i++)
		params->commandline[i] = linux_params[i];
	
	puts("Set boot params = ");
	puts(linux_params);
	Uart_SendByte('\n');
	//call_linux(0, 193, buf);
}

/************************************************************/
static int support=0;
extern void InitNandFlash(void)
{	
	U32 i;
	
	InitNandCfg();
	i = ReadChipId();
	printf("Read chip id = %x\n", i);	
	if((i==0x9873)||(i==0xec75))	
		NandAddr = 0;
	else if(i==0xec76)
	{	
		support=1;	//by chang
		NandAddr = 1;
	}
	else {	
		puts("Chip id error!!!\n");
		return;
	}
	printf("Nand flash status = %x\n", ReadStatus());
}

void NandErase(void)
{
	int i, err = 0;
	
	InitNandFlash();
	
	i = NandSelPart("erase");
	if(i<0)
		return;	
	
	printf("Are you sure to erase nand flash from page 0x%x, block count 0x%x ? [y/n]\n", StartPage, BlockCnt);
	while(1) {
		char c;
		
		c = Uart_Getch();
		if((c=='y')||(c=='Y'))
			break;
		if((c=='n')||(c=='N'))
			return;
	}	
	
	for(i=0; BlockCnt; BlockCnt--, i+=32) {
		if(EraseBlock(i+StartPage)) {
			err ++;
			puts("Press any key to continue...\n");
			Uart_Getch();
		}
	}	

	DsNandFlash();		//disable nand flash interface
	puts("Erase Nand partition completed ");
	if(err)
		printf("with %d bad block(s)\n", err);
	else
		puts("success\n");
}

void NandWrite(void)
{
	InitNandFlash();
	//WrFileToNF();
	DsNandFlash();		//disable nand flash interface
}

/*
void NandLoadRun(void)
{
	U8 key;
	
	while(1) {
		puts("Please select which OS to boot:\n1: Linux\n2: Wince\nEsc: exit\n");
		key = Uart_Getch();
		if(key==ESC_KEY)
			return;
		if(key=='1'||key=='2')
			break;
	}
	
	InitNandFlash();
	
	printf("Now boot %s...\n", (key=='1')?"Linux":"Wince");
	LoadRun((key=='1')?1:5);
}
*/
void NandLoadRun(void)
{
/*	Beep( 2000, 500 ) ;
	Delay( 500 ) ;
	Beep( 2000, 500 ) ;
*/
	InitNandFlash();
	LoadRun(1);
}

void NandLoadRunW(void)
{
	printf("Now boot Wince\n");
	InitNandFlash();
	LoadRun(5);
}


void memcpy(void *s1, const void *s2, int n)
{
	int i;

	for (i = 0; i < n; i++)
		((char *)(s1))[i] = ((const char *)(s2))[i];
}

int strncmp(const char *s1, const char *s2, int maxlen)
{
	int i;

	for(i = 0; i < maxlen; i++) {
		if(s1[i] != s2[i])
			return ((int) s1[i]) - ((int) s2[i]);
		if(s1[i] == 0)
			return 0;
	}

	return 0;
}

/********************add by chang ***********************************/
/*#define SAVE_ENV_IN_NAND
#ifdef	SAVE_ENV_IN_NAND

U32 NFSaveParams(char *pEnv)
{	
	char dat[512];
	U32 addr;
	InitNandFlash();
	if(support) {
		memcpy(dat, pEnv, sizeof(EnvParams));
		for(addr=SIZE_64K>>9; addr<(0x30000>>9); addr++) {
			//NFEraseBlock(addr);
			 EraseBlock(addr);
			//if(!NFWritePage(addr, (U8 *)dat, 0))
			 if(!WritePage(addr, (U8 *)dat))
			 {
				//printf("wite succes\n");
				return 0;
			 }
		}
	}
	return -1;
	
}


U32 NFSearchParams(char *pEnv)
{
	char dat[512];
	U32 addr;
	InitNandFlash();
	if(support) {
		for(addr=SIZE_64K>>9; addr<(0x30000>>9); addr++) {
			ReadPage(addr, (U8 *)dat);		
			//if(!strncmp(dat, "params", 7)) {
			memcpy(pEnv, dat, sizeof(EnvParams));			
			return 0;	
		}
	}
	return -1;	
}

#endif*/
/********************** add by chang *********************************/

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美伊人精品成人久久综合97| 偷拍自拍另类欧美| 欧美日韩国产精品自在自线| 亚洲自拍偷拍综合| wwwwww.欧美系列| 91视频一区二区| 精品在线观看视频| 性感美女久久精品| 自拍偷拍亚洲综合| 国产清纯美女被跳蛋高潮一区二区久久w| 国产在线国偷精品免费看| 亚洲一区二区三区在线看| 欧美国产精品劲爆| 亚洲欧美综合色| 2020国产精品久久精品美国| 欧美精品在欧美一区二区少妇| 日本va欧美va欧美va精品| 亚洲少妇30p| 欧美国产日韩亚洲一区| 精品成人免费观看| 欧美一三区三区四区免费在线看| 国内成人自拍视频| 日本美女一区二区三区视频| 久久只精品国产| 91网址在线看| 菠萝蜜视频在线观看一区| 国产一区999| 国内久久婷婷综合| 国内久久精品视频| 精品一区二区三区香蕉蜜桃| 国产欧美日韩久久| 久久久久久影视| 久久久久久久精| 欧美色网一区二区| 国产成人无遮挡在线视频| 国产一区二区按摩在线观看| 麻豆国产一区二区| 久久精品国产在热久久| 奇米影视一区二区三区| 久久国产精品色婷婷| 理论片日本一区| 韩国午夜理伦三级不卡影院| 亚洲在线视频免费观看| 亚洲综合无码一区二区| www成人在线观看| 久久久久久夜精品精品免费| 久久久久久久久99精品| 欧美日韩一区二区三区视频| 欧美色男人天堂| 在线综合视频播放| 欧美mv日韩mv| 国产色产综合色产在线视频| 精品日韩一区二区三区免费视频| 日本久久电影网| 欧美日韩精品综合在线| 激情小说欧美图片| 国产精品 日产精品 欧美精品| 亚洲成年人影院| 免费的成人av| 国产精品香蕉一区二区三区| 成人激情小说网站| 91久久人澡人人添人人爽欧美 | 国产精品久久久久精k8| 亚洲视频一二三区| 亚洲va天堂va国产va久| 亚洲免费av网站| 亚洲午夜一区二区三区| 蜜乳av一区二区| 91福利在线观看| 色天天综合色天天久久| 亚洲欧洲无码一区二区三区| 夜夜精品浪潮av一区二区三区| 51久久夜色精品国产麻豆| 欧美日韩亚洲综合一区二区三区| 久久在线观看免费| 亚洲综合丁香婷婷六月香| 免费亚洲电影在线| 国产iv一区二区三区| 国产精品麻豆久久久| 欧美一二三四区在线| 中文字幕国产一区二区| 日韩高清欧美激情| 日韩精品视频网| 性做久久久久久久久| 亚洲国产日韩精品| 视频一区二区三区中文字幕| 亚洲综合清纯丝袜自拍| 视频精品一区二区| 亚洲日本在线观看| 五月婷婷综合激情| 精品国产免费一区二区三区香蕉| 日韩欧美一区中文| 色8久久精品久久久久久蜜| 国产精品素人视频| 亚洲免费在线看| 欧美日韩精品是欧美日韩精品| 国产精品视频观看| www欧美成人18+| 波多野结衣91| 亚洲人成人一区二区在线观看 | 麻豆精品蜜桃视频网站| 成人免费的视频| 亚洲最大成人网4388xx| 中文字幕av在线一区二区三区| 精品区一区二区| 一区二区成人在线| 日韩精品一区二区三区老鸭窝| 蜜臀av亚洲一区中文字幕| 色婷婷综合久色| 精品国产伦一区二区三区观看方式| a级高清视频欧美日韩| 亚洲视频一区二区免费在线观看 | 欧美a一区二区| 91丨九色丨蝌蚪丨老版| 色94色欧美sute亚洲13| 国产成人精品网址| 欧美日韩不卡在线| 国产精品日日摸夜夜摸av| 天堂资源在线中文精品| 久久国产精品一区二区| 欧美日韩久久不卡| 久久久不卡影院| 精品在线一区二区| 欧美大胆人体bbbb| 日本不卡一二三| 91精品午夜视频| 午夜精品一区在线观看| 欧美性猛片aaaaaaa做受| 亚洲日韩欧美一区二区在线| youjizz久久| 国产精品卡一卡二| 不卡电影一区二区三区| 欧美日韩国产美| 亚洲va国产va欧美va观看| 欧美综合在线视频| 亚洲成a人片在线不卡一二三区 | 亚洲第一精品在线| 在线观看免费一区| 亚洲一区二区在线观看视频| 色欧美88888久久久久久影院| 日韩精品一区二区三区蜜臀| 色综合天天综合网天天看片| 欧美成人官网二区| 午夜私人影院久久久久| 中文字幕一区免费在线观看| 蜜臀av性久久久久av蜜臀妖精| 成人黄页在线观看| 国产日韩欧美在线一区| 亚洲午夜久久久久久久久电影院 | 国产高清不卡二三区| 精品成人在线观看| 亚洲va国产va欧美va观看| 欧美老肥妇做.爰bbww视频| 轻轻草成人在线| 色国产精品一区在线观看| 怡红院av一区二区三区| 欧美视频日韩视频在线观看| 国产精品入口麻豆原神| 国内精品写真在线观看| 欧美一级片在线看| 另类调教123区| 欧美一区二区三区视频在线| 亚洲国产色一区| 日韩精品一区二区三区视频播放 | 狠狠色丁香久久婷婷综| 国产亚洲综合色| 成人精品国产免费网站| 亚洲精品视频在线看| 国产精品456露脸| 亚洲麻豆国产自偷在线| 717成人午夜免费福利电影| 亚洲激情图片一区| 中文字幕一区二区不卡| 国产精品久久午夜夜伦鲁鲁| 国产综合久久久久久鬼色| 国产精品久久久久久久久久免费看| 日日夜夜精品免费视频| 色域天天综合网| 久久av资源网| 亚洲欧美福利一区二区| 欧美va亚洲va在线观看蝴蝶网| 图片区小说区国产精品视频| 久久精品男人天堂av| 欧美中文字幕一二三区视频| 另类的小说在线视频另类成人小视频在线| 91九色02白丝porn| 狠狠色综合色综合网络| 亚洲一区在线观看免费观看电影高清| 99在线精品观看| 美女视频一区二区| 亚洲日本护士毛茸茸| 99久久免费视频.com| 综合激情网...| 日韩免费看的电影| 久久久综合九色合综国产精品| 国产精品综合网| 秋霞电影一区二区| 一区二区高清在线| 欧美日韩免费不卡视频一区二区三区| 亚洲成人手机在线|