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

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

?? nand.c

?? Sirf/Centrality公司GPS平臺AtlasIII芯片AT640的Nboot源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
				// Merge 16bits UUID data
				if (i%2)
				{
					pDriverGlobals->dwUUID[i/2] |= (((dwRead & 0xff) | ((dwRead & 0xff0000)>>8)) << 16);
				}
				else
				{
					pDriverGlobals->dwUUID[i/2] = (dwRead & 0xff) | ((dwRead & 0xff0000)>>8);
				}
			}
			if (i>=g_FlashExtInfo.fi.wDataBytesPerSector/4 && i <=g_FlashExtInfo.fi.wDataBytesPerSector/4+1)
			{
				if (i%2)
					dwSig |= (((dwRead & 0xff) | ((dwRead & 0xff0000)>>8)) << 16);
				else
					dwSig = (dwRead & 0xff) | ((dwRead & 0xff0000)>>8);
			}
		}
		else
		{
			if (i<8)
			{
				pDriverGlobals->dwUUID[i] = dwRead;
#if 0
				NandDbgPutString("\r\n &(pDriverGlobals->dwUUID)=");
				NandDbgPutHex((int)(pDriverGlobals->dwUUID));
				NandDbgPutString("\r\nUUID");
				NandDbgPutHex(pDriverGlobals->dwUUID[i]);
				NandDbgPutHex(dwRead);
#endif
			}
			if (i==g_FlashExtInfo.fi.wDataBytesPerSector/4)
				dwSig = dwRead;
		}
	}

	if (0xaa55aa55 != dwSig)
	{
		pDriverGlobals->dwUUID[8]=0x00;
		NandDbgPutString("\r\nUUID ERR!");
//		NandDbgPutHex(dwSig);
		goto ERREXIT;
	}

	for (i=4;i<8; i++)
	{
		if(pDriverGlobals->dwUUID[i]+pDriverGlobals->dwUUID[i-4]+1)
		{
		    pDriverGlobals->dwUUID[8]=0x00;
		    NandDbgPutString("UUID C ERR!\r\n");
		    goto ERREXIT;
		}
	}
	pDriverGlobals->dwUUID[8]=0xF1;

ERREXIT:
	NF_CMD(SMDF_CMD_RESET);
}
#endif

/*-----------------------------------------------------------------------------
 *  FMD Interface functions
 *
 *----------------------------------------------------------------------------*/

//  FMD_Init
//  
//  Initialize the flash chip
//
void FMD_Init(void)
{
	// Read UUID here
//	FMDReadUUID();

	//  Issue a reset command here
	FMDInitHardware();
	FMDReadFlashID();
	PROTECT_NAND();
	g_SI.bBadBlock = BADBLOCKMARK;
	g_SI.bOEMReserved = OEM_RESERVED_BLOCK;
	g_SI.dwReserved1 = 0;
	g_SI.wReserved2 = 0;
}

BOOL FMDReadSectorInfo(SECTOR_ADDR sectorAddr, PSectorInfo pSectorInfoBuff)
{
	NF_STOP_FIFO();
	NF_IO_RD_MODE();
	NF_ADDR_CYCLE_NUM(g_FlashExtInfo.ucChipAddrCycleNum);
	NF_LEN(g_FlashExtInfo.wSpareDataLength/2);
	NF_FIFO_THRD(g_FlashExtInfo.wSpareDataLength/2);
	FMDSetAddress (sectorAddr,
				   g_FlashExtInfo.fi.wDataBytesPerSector,
				   0);

	//the FIFO threshold interrupt should be cleared 
	//just before write NandFlash command
	NF_CLR_INT(SMDF_FIFO_INT);
	NF_CMD(SMDF_CMD_READ2);
	NF_START_FIFO();

	NF_WAIT_INT(SMDF_FIFO_INT);

	FMDReadFifo ((PDWORD)pSectorInfoBuff, g_FlashExtInfo.wSpareDataLength/2);

#if 0
	NandDbgPutString ("si.bBadBlock=");
	NandDbgPutHex (pSectorInfoBuff->bBadBlock);
	NandDbgPutString ("\r\n");
	NandDbgPutString ("si.bOEMReserved=");
	NandDbgPutHex (pSectorInfoBuff->bOEMReserved);
	NandDbgPutString ("\r\n");
	NandDbgPutString ("FMDReadSectorInfo: end.\r\n");
#endif

	return TRUE;
}

BOOL FMDWriteSectorInfo(SECTOR_ADDR sectorAddr, PSectorInfo pSectorInfoBuff)
{
	UNPROTECT_NAND();
	FMDChangePointer (POINTER_TO_SPARE_AREA);

	NF_STOP_FIFO();
	NF_IO_WR_MODE();
	NF_ADDR_CYCLE_NUM(g_FlashExtInfo.ucChipAddrCycleNum);
	NF_LEN(g_FlashExtInfo.wSpareDataLength/2);
	FMDSetAddress (sectorAddr,
				   g_FlashExtInfo.fi.wDataBytesPerSector,
				   0);

    NF_CLR_INT (0xFF);
	NF_CMD (SMDF_CMD_SEQ_DATA_INPUT);
	NF_WAIT_INT (SMDF_ADD_INT);

	NF_START_FIFO ();
	FMDWriteFifo ((PDWORD) pSectorInfoBuff, g_FlashExtInfo.wSpareDataLength/2);
	NF_WAIT_INT (SMDF_DMA_INT);

    FMDPageProgram ();
	PROTECT_NAND();
	if (!FMDVerifyWrite(g_nNandCS)) {
//    	NandDbgPutHex (SectorAddr);
//		NandDbgPutString (" Verify Write Error\r\n");
        return FALSE;
    }

	return TRUE;
}

BOOL FMDWriteEcc(SECTOR_ADDR sectorAddr, PBYTE eccBuf)
{
	FMDChangePointer (POINTER_TO_SPARE_AREA);

	NF_INIT_FIFO();
	NF_IO_WR_MODE();
	NF_ADDR_CYCLE_NUM(g_FlashExtInfo.ucChipAddrCycleNum);
	NF_LEN(g_FlashExtInfo.wSpareDataLength/2);
//	v_pSMDFRegs->SmFIFOLevelChk = 0;
	FMDSetAddress (sectorAddr,
				   g_FlashExtInfo.fi.wDataBytesPerSector + g_FlashExtInfo.wSpareDataLength/2,
				   g_FlashExtInfo.wSpareDataLength/2);

    NF_CLR_INT (0xFF);
	NF_CMD (SMDF_CMD_SEQ_DATA_INPUT);
	NF_WAIT_INT (SMDF_ADD_INT);

    NF_START_FIFO ();
	FMDWriteFifo ((PDWORD) eccBuf, g_FlashExtInfo.wSpareDataLength/2);
	NF_WAIT_INT (SMDF_DMA_INT);

    FMDPageProgram ();
	return TRUE;
}


/*
    @func   BOOL | FMD_WriteSector | Writes the specified data to the specified NAND flash sector/page.
    @rdesc  TRUE = Success, FALSE = Failure.
    @comm    
    @xref   
*/
BOOL FMD_WriteSector(SECTOR_ADDR startSectorAddr, LPBYTE pSectorBuff, PSectorInfo pSectorInfoBuff, DWORD dwNumSectors)
{
    ULONG SectorAddr = (ULONG)startSectorAddr;
	BYTE eccBuf[32];

    if (!pSectorBuff && !pSectorInfoBuff)
        return(FALSE);
	UNPROTECT_NAND();
	//PreWrite Initialization
	while (dwNumSectors--)
	{
		if (pSectorBuff)
		{
			//  Special case to handle un-aligned buffer pointer.
			memcpy(v_pDMAAddr, pSectorBuff, g_FlashExtInfo.fi.wDataBytesPerSector); // Write page/sector data.
			CacheRangeFlush ((PVOID)v_pDMAAddr, g_FlashExtInfo.fi.wDataBytesPerSector, CACHE_SYSNC_DISCARD);
			NF_CLR_INT(SMDF_DMA_INT);
			NF_STOP_FIFO();

			NF_RESET_ECC();
			//We need to change the write pointer to the correct area by issueing a read cmd in the area
			FMDChangePointer (POINTER_TO_DATA_AREA);

			NF_DMA_WR_MODE();
			NF_ADDR_CYCLE_NUM(g_FlashExtInfo.ucChipAddrCycleNum);
			FMDSetAddress (SectorAddr, 0, 0);
			NF_LEN(g_FlashExtInfo.fi.wDataBytesPerSector);

			NF_CLR_INT (0xFF);
			NF_CMD (SMDF_CMD_SEQ_DATA_INPUT);
			NF_WAIT_INT (SMDF_ADD_INT);

			NF_START_FIFO();
			NF_WRITE_DMA(g_FlashExtInfo.fi.wDataBytesPerSector);
			NF_WAIT_INT(SMDF_DMA_INT);

			//Commit what we have just write
			FMDPageProgram ();
			ECC_ENCODE (pSectorBuff, g_FlashExtInfo.fi.wDataBytesPerSector, (DWORD *)eccBuf);

			FMDWriteEcc(SectorAddr, eccBuf);
			if (!FMD_ReadSector(SectorAddr, ReadSectBuf, NULL, 1))
			{
				NandDbgPutString ("FMD: read error!\r\n");
				PROTECT_NAND();
				return FALSE;
			}

			if (memcmp (pSectorBuff, ReadSectBuf, g_FlashExtInfo.fi.wDataBytesPerSector))
			{
//				NandDbgPutString ("FMD: check error!\r\n");
	      PROTECT_NAND();
				return FALSE;
			}

			pSectorBuff += g_FlashExtInfo.fi.wDataBytesPerSector;
		}
		if(pSectorInfoBuff)
		{
			FMDWriteSectorInfo(SectorAddr, pSectorInfoBuff);
			pSectorInfoBuff++;
		}
		SectorAddr++;
	}
	PROTECT_NAND();
    if (!FMDVerifyWrite(g_nNandCS)) {
//    	NandDbgPutHex (SectorAddr);
//		NandDbgPutString (" Verify Write Error\r\n");
        return FALSE;
    }

	return(TRUE);
}

/*
    @func   BOOL | FMD_EraseBlock | Erases the specified flash block.
    @rdesc  TRUE = Success, FALSE = Failure.
    @comm    
    @xref   
*/
BOOL FMD_EraseBlock(DWORD blockID)
{
	DWORD Sector = BOOT_BLOCK_TO_SECTOR(blockID);
	UNPROTECT_NAND();
	NF_CMD_MODE();

	NF_ADDR_CYCLE_NUM(g_FlashExtInfo.ucNumBlockCycles);

	NF_SET_ADDR(Sector);
	NF_SET_ADDR_HI(0);

	NF_CLR_INT (SMDF_ADD_INT);
	NF_CMD (SMDF_CMD_BLOCK_ERASE);
	NF_WAIT_INT (SMDF_ADD_INT);
	PROTECT_NAND();
    if (!FMDVerifyWrite(g_nNandCS)) {
//    	NandDbgPutHex (Sector);
//    	NandDbgPutString (" Verify Erase Error\r\n");
        return FALSE;
    }

    return TRUE;
}

BOOL WriteImage(DWORD dwStartSearchBlock, DWORD dwTotalBlocks, PBYTE pImageCache/*, DWORD *pdwActualStartBlock, DWORD *pdwNextAvailableBlock*/)
{
	int i,j;
	DWORD dwBlock, dwSector;
	PBYTE pBuf = pImageCache;

	dwBlock = dwStartSearchBlock;
	pBuf = pImageCache;

	i = 0;
	while((i < dwTotalBlocks) && (dwBlock < (dwStartSearchBlock + SEARCH_BLOCKS)) )
	{
		i++;
		if(!NandCheckAndReserveBlock(dwBlock)) 
		{
			dwBlock ++;
			continue;
		}
		if(!NandIsOEMReservedBlock(dwBlock))
		{
			dwBlock ++;
			continue;
		}

		dwSector = BOOT_BLOCK_TO_SECTOR(dwBlock);
		for(j = 0; j < g_FlashExtInfo.fi.wSectorsPerBlock; j++)	
		{
			if(!FMD_WriteSector(dwSector, pBuf, &g_SI, 1)) {
				return FALSE;
			}
			dwSector ++;
			pBuf += g_FlashExtInfo.fi.wDataBytesPerSector;
		}
		dwBlock ++;
	}

	if(i != dwTotalBlocks || dwBlock >= (dwStartSearchBlock + SEARCH_BLOCKS))
		return FALSE;

	return TRUE;
}

BOOL NandIsOEMReservedBlock(DWORD dwBlock)
{
	SectorInfo si;
	if(FMDReadSectorInfo(BOOT_BLOCK_TO_SECTOR(dwBlock), &si))
	{
		if( si.bBadBlock == BADBLOCKMARK && 
			si.bOEMReserved == OEM_RESERVED_BLOCK && 
			si.dwReserved1 == 0 && 
			si.wReserved2 == 0)
			{
				return TRUE;
			}
	}
//	NandDbgPutString ("NandIsOEMReservedBlock: failed.\r\n");
	return FALSE;
}

/*
    @func   BOOL | FMD_ReadSector | Reads the specified sector(s) from NAND flash.
    @rdesc  TRUE = Success, FALSE = Failure.
    @comm    
    @xref   
*/
BOOL FMD_ReadSector(SECTOR_ADDR startSectorAddr, LPBYTE pSectorBuff, PSectorInfo pSectorInfoBuff, DWORD dwNumSectors)
{
	BYTE eccBuf[32];
	ULONG SectorAddr = (ULONG)startSectorAddr;

	if (!pSectorBuff && !pSectorInfoBuff)
	{
		return(FALSE);
	}

	pSectorBuff = (LPBYTE) ((DWORD)pSectorBuff & ~0xc0000000);

	while (dwNumSectors--)
	{
 		CacheRangeFlush ((PVOID)v_pDMAAddr, g_FlashExtInfo.dwPageSize, CACHE_SYSNC_DISCARD);
		if (pSectorBuff)
		{
			NF_RESET_ECC();

			//We will totally read out the whole page bytes.
			NF_STOP_FIFO();
			NF_DMA_RD_MODE();
			NF_ADDR_CYCLE_NUM(g_FlashExtInfo.ucChipAddrCycleNum);
			FMDSetAddress (SectorAddr, 0, 0);
			NF_LEN(g_FlashExtInfo.dwPageSize);
			NF_CLR_INT(SMDF_DMA_INT);
			NF_CMD(SMDF_CMD_READ1);
			NF_READ_DMA(g_FlashExtInfo.dwPageSize, dwDmaPhysAddr);
			NF_START_FIFO();
			NF_WAIT_INT (SMDF_DMA_INT);
			while((v_pDMAReg->chnValid.chn4))
			{
			}

			IOBG_FLUSH = 1;
			while (IOBG_FLUSH);
			memcpy(eccBuf,
				(void*)(v_pDMAAddr + g_FlashExtInfo.fi.wDataBytesPerSector + g_FlashExtInfo.wSpareDataLength/2),
				g_FlashExtInfo.wSpareDataLength/2);

			if (!ECC_DECODE (v_pDMAAddr, g_FlashExtInfo.fi.wDataBytesPerSector, (DWORD *)eccBuf)) {
//				NandDbgPutHex (SectorAddr);
//				NandDbgPutString (" ecc error\r\n");
				return FALSE;
			}

			memcpy (pSectorBuff, v_pDMAAddr, g_FlashExtInfo.dwPageSize);
			pSectorBuff += g_FlashExtInfo.fi.wDataBytesPerSector;
			if(pSectorInfoBuff)
			{
				memcpy(pSectorInfoBuff, pSectorBuff, sizeof (SectorInfo));
				pSectorInfoBuff ++;
			}
		}
		else if(pSectorInfoBuff)//Only ask for pSectorInfo
		{
			FMDReadSectorInfo(SectorAddr, pSectorInfoBuff);
			pSectorInfoBuff ++;
		}

        ++SectorAddr;
    }

	return(TRUE);
}

static BOOL NandCheckAndReserveBlock(DWORD dwBlockIndex)
{
	DWORD dwSector;
	SectorInfo WriteSectInfo, ReadSectInfo;
	int j;

	if (!FMD_EraseBlock(dwBlockIndex)) {
		goto BadBlockReturn;
	}

	// Because the bits denoting a bad block can be erased, we take the cautious approach - we'll write an read-verify each sector in this
	// block to make sure the block is good.  If it's good, we'll re-erase else we'll mark the block bad.
	dwSector = BOOT_BLOCK_TO_SECTOR (dwBlockIndex);
	for (j = 0 ; j < g_FlashExtInfo.fi.wSectorsPerBlock ; j++)
	{
		// Make sure erase set all bits high.
		memset(WriteSectBuf, 0xFF, g_FlashExtInfo.fi.wDataBytesPerSector);
		memset(&WriteSectInfo, 0xFF, g_FlashExtInfo.wSpareDataLength/2);

		FMD_ReadSector((dwSector + j), ReadSectBuf, &ReadSectInfo, 1);

		if (memcmp(ReadSectBuf, WriteSectBuf, g_FlashExtInfo.fi.wDataBytesPerSector) ||
			memcmp(&ReadSectInfo, &WriteSectInfo, g_FlashExtInfo.wSpareDataLength/2))
		{
//			NandDbgPutString ("Bad block: read after erasing not FF\r\n");
			goto BadBlockReturn;
		}

		// Now, make sure we can store zero - this is meant to check for bad blocks (in the event that the bad block marker was erased).
		// Note that we *don't* write sector info data here - this is where bad block data is stored.
		memset(WriteSectBuf, 0, g_FlashExtInfo.fi.wDataBytesPerSector);
		if (!FMD_WriteSector((dwSector + j), WriteSectBuf, NULL, 1))
		{
//			NandDbgPutString ("Bad block: write 0 error\r\n");
			goto BadBlockReturn;
		}
	}

	// If the block has already been marked bad, skip it and increase the total number of blocks to be erased by a block.  Note that bad
	// blocks do count against the total number of blocks to be erased since the caller has max constraints on the erase region size.

	if (!FMD_EraseBlock(dwBlockIndex)) {
		goto BadBlockReturn;
	}

	for (j = 0 ; j < g_FlashExtInfo.fi.wSectorsPerBlock ; j++)
	{
/*		WriteSectInfo.dwReserved1 = 0;
		WriteSectInfo.bOEMReserved = OEM_RESERVED_BLOCK;
		WriteSectInfo.bBadBlock = BADBLOCKMARK;
		WriteSectInfo.wReserved2 = 0;
		
		if (!FMD_WriteSector (dwSector + j, NULL, &WriteSectInfo, 1))
*/			
		if (!FMD_WriteSector (dwSector + j, NULL, &g_SI, 1))			
			goto BadBlockReturn;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美高清激情brazzers| 精品国产成人系列| 亚洲第一精品在线| 欧美视频一区二区三区| 日本一区二区久久| 国产精品18久久久久久久久 | 国产精品久久久久精k8| 成人精品一区二区三区四区| 久久九九国产精品| 国产一区二区三区视频在线播放| 在线播放日韩导航| 日本在线观看不卡视频| 91精品国产麻豆国产自产在线 | 午夜国产精品影院在线观看| 欧美日韩一区二区欧美激情 | 亚洲精品中文字幕乱码三区| 99re视频这里只有精品| 亚洲午夜电影在线| 欧美日韩国产影片| 久久不见久久见中文字幕免费| 久久久国产一区二区三区四区小说| 不卡电影一区二区三区| 亚洲午夜av在线| 日韩精品专区在线影院观看| 成人污视频在线观看| 亚洲高清久久久| www国产成人免费观看视频 深夜成人网 | 亚洲精品国产品国语在线app| 欧美日韩你懂得| 国产精品自拍网站| 亚洲综合免费观看高清完整版在线| 日韩一区二区在线免费观看| 波多野结衣的一区二区三区| 五月天丁香久久| 国产无一区二区| 精品视频1区2区3区| 国产乱人伦精品一区二区在线观看| 亚洲免费色视频| 欧美一区二区三区四区在线观看| 成人久久久精品乱码一区二区三区| 午夜不卡av在线| 中文文精品字幕一区二区| 欧美日韩一区二区在线观看视频| 国产乱码精品一区二区三区忘忧草| 亚洲综合色丁香婷婷六月图片| 精品久久99ma| 欧美中文字幕一区二区三区亚洲 | 色婷婷综合久久| 九九在线精品视频| 亚洲一区二区美女| 久久久久久久久久久久久久久99| 欧美三级中文字| 成人黄色777网| 麻豆91精品91久久久的内涵| 亚洲免费av观看| xfplay精品久久| 欧美猛男gaygay网站| 成人看片黄a免费看在线| 美日韩一级片在线观看| 悠悠色在线精品| 欧美国产激情一区二区三区蜜月| 欧美卡1卡2卡| 色综合久久久久网| 国产一区久久久| 日本午夜一本久久久综合| 亚洲激情成人在线| 久久久夜色精品亚洲| 欧美日韩国产高清一区二区| 99精品视频免费在线观看| 国内不卡的二区三区中文字幕| 午夜亚洲福利老司机| 亚洲欧洲av色图| 久久久综合视频| 日韩女优视频免费观看| 欧美另类变人与禽xxxxx| 色噜噜狠狠成人中文综合| 成人精品国产福利| 国产尤物一区二区在线| 秋霞影院一区二区| 五月综合激情日本mⅴ| 亚洲精品乱码久久久久久 | 久久九九国产精品| 精品欧美乱码久久久久久| 欧美伦理电影网| 精品视频1区2区| 欧美在线|欧美| 91麻豆自制传媒国产之光| 成人免费高清视频在线观看| 国产夫妻精品视频| 国产呦萝稀缺另类资源| 免费在线欧美视频| 青青草97国产精品免费观看 | 精品一区二区三区在线播放 | 国产亚洲欧美中文| 精品国产免费一区二区三区四区| 欧美一区午夜视频在线观看| 欧美少妇一区二区| 欧美日韩亚洲综合一区二区三区| 91传媒视频在线播放| 在线视频欧美区| 欧美在线观看视频一区二区三区 | 欧美一区二区在线视频| 精品视频一区三区九区| 欧美日韩在线三级| 欧美日韩成人综合| 欧美日韩成人一区| 欧美日韩五月天| 欧美精品久久99| 欧美丰满一区二区免费视频| 欧美性大战久久| 欧美三级一区二区| 欧美精品九九99久久| 欧美一区二区三区爱爱| 日韩一区二区在线观看| 欧美一区二区日韩一区二区| 日韩色视频在线观看| 日韩欧美123| 久久久久青草大香线综合精品| 久久久精品欧美丰满| 亚洲国产电影在线观看| 国产精品福利av| 亚洲精品成人天堂一二三| 亚洲一区二区三区在线看| 亚洲国产视频一区二区| 奇米色一区二区三区四区| 美女精品自拍一二三四| 国产美女主播视频一区| 成人精品国产一区二区4080| 色婷婷综合五月| 欧美理论片在线| 欧美mv和日韩mv国产网站| 国产校园另类小说区| 1024成人网| 午夜精品一区在线观看| 久久99久久精品欧美| 国产精品99久久久久久有的能看| 不卡的av中国片| 欧美午夜寂寞影院| 精品日韩av一区二区| 国产精品久久一级| 一区二区三区精品在线观看| 日韩vs国产vs欧美| 国产91丝袜在线播放九色| 91麻豆国产香蕉久久精品| 欧美猛男超大videosgay| 精品国产免费久久| 国产精品成人免费精品自在线观看| 亚洲一区二三区| 激情图区综合网| 99re66热这里只有精品3直播 | 色综合久久久久| 91精品国产91综合久久蜜臀| 国产日韩欧美一区二区三区综合| 亚洲欧美二区三区| 免费在线观看成人| 成人免费不卡视频| 欧美日韩免费观看一区二区三区 | 久久国产视频网| eeuss鲁片一区二区三区在线看| 欧美视频在线一区| 久久久久久久久久久久电影| 亚洲免费在线视频| 久久99精品一区二区三区| 99精品国产热久久91蜜凸| 3d成人h动漫网站入口| 国产精品女人毛片| 欧美aa在线视频| 成人av网址在线观看| 88在线观看91蜜桃国自产| 国产精品无人区| 天堂成人国产精品一区| 成人aa视频在线观看| 欧美一级视频精品观看| 国产精品短视频| 久久99国产精品久久99| 日本精品一区二区三区高清 | 99久久99久久精品免费观看| 欧美高清一级片在线| 国产精品嫩草久久久久| 麻豆国产精品官网| 91国产免费观看| 欧美激情一区二区三区| 日韩在线一区二区三区| 91亚洲精品乱码久久久久久蜜桃| 日韩精品一区二区三区在线 | 欧美一区二区精品久久911| 国产精品美日韩| 久久精品国产亚洲aⅴ| 在线观看视频91| 国产精品久久久久久亚洲伦| 久久国产综合精品| 欧美美女直播网站| 亚洲人成亚洲人成在线观看图片| 美女看a上一区| 欧美日韩国产一级| 亚洲精品国产a| 不卡一区中文字幕| 久久久一区二区三区捆绑**| 欧美96一区二区免费视频| 欧美性高清videossexo|