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

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

?? fmd.cpp

?? Samsung公司S3C2443芯片的BSP源碼包
?? 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.
//
#include <fmd.h>
#include <s3c2443_nand.h>
#include <args.h>
#include <ethdbg.h>
#include "Cfnand.h"
#if MAGNETO
#include "args.h"
#include <image_cfg.h>
#endif

#define CHECK_SPAREECC 1

#define NAND_BASE 0xB1400000	// PA:0x4e00_0000

#if MAGNETO
#define MAX_REGIONS 16
#define BAD_BLOCKS_MAS 20    // 2% of total block size

BSP_ARGS *pBSPArgs;
#endif


static volatile S3C2443_NAND_REG *s2443NAND = (S3C2443_NAND_REG *)NAND_BASE;

extern "C" void RdPage512(unsigned char *bufPt);
extern "C" void RdPage2048(unsigned char *bufPt);
extern "C" void RdPage512Unalign(unsigned char *bufPt);
extern "C" void WrPage512(unsigned char *bufPt); 
extern "C" void WrPage512Unalign(unsigned char *bufPt); 
extern "C" void WrPageInfo(PBYTE pBuff);
extern "C" void RdPageInfo(PBYTE pBuff);
extern "C" void RdPageSpare(PBYTE pBuff);

#if MAGNETO
static BOOL DefineLayout();

static FlashRegion g_pRegionTable[MAX_REGIONS];

static DWORD g_dwNumRegions;
static FlashInfo g_flashInfo;

// TODO: Make sector size generic
static BYTE g_pFLSBuffer[NAND_SECTOR_SIZE];

#define DEFAULT_COMPACTION_BLOCKS 4
#endif

NANDDeviceInfo GetNandInfo(void) { return stDeviceInfo; }

/*
	@func   DWORD | ReadFlashID | Reads the flash manufacturer and device codes.
	@rdesc  Manufacturer and device codes.
	@comm	
	@xref   
*/
static DWORD ReadFlashID(void)
{
	BYTE Mfg, Dev;

	NF_nFCE_L();						// Deselect the flash chip.
	NF_CMD(CMD_READID);					// Send flash ID read command.

	NF_ADDR(0);							//

	Mfg	= NF_RDDATA_BYTE();				// 
	Dev	= NF_RDDATA_BYTE();				// 
	
	NF_nFCE_H();						// Deselect the flash chip.
	
	return ((DWORD)(Mfg<<8)+Dev);
}

/*
	@func   PVOID | FMD_Init | Initializes the Smart Media NAND flash controller.
	@rdesc  Pointer to S3C2443 NAND controller registers.
	@comm	
	@xref   
*/
PVOID FMD_Init(LPCTSTR lpActiveReg, PPCI_REG_INFO pRegIn, PPCI_REG_INFO pRegOut)
{

	// Caller should have specified NAND controller address.
	//

	BOOL bLastMode = SetKMode(TRUE);
	volatile DWORD nNandID;
	UINT8 nMID, nDID;
	UINT32 nCnt;
	BOOL bNandExt = FALSE;

	RETAILMSG(1,(TEXT("#### FMD_DRIVER:::FMD_INIT \r\n")));

#if MAGNETO
	pBSPArgs = ((BSP_ARGS *) IMAGE_SHARE_ARGS_UA_START);
#endif

	if (pRegIn && pRegIn->MemBase.Num && pRegIn->MemBase.Reg[0])
		s2443NAND = (S3C2443_NAND_REG *)(pRegIn->MemBase.Reg[0]);
	else
		s2443NAND = (S3C2443_NAND_REG *)NAND_BASE;

	// Set up initial flash controller configuration.
	//
	s2443NAND->NFCONF =  (TACLS  <<  12) | /* CLE & ALE = HCLK * (TACLS  + 1)   */
							(TWRPH0 <<  8) | /* TWRPH0	= HCLK * (TWRPH0 + 1)   */
							(TWRPH1 <<  4);
	s2443NAND->NFCONT = (0<<17)|(0<<16)|(0<<10)|(0<<9)|(0<<8)|(1<<7)|(1<<6)|(1<<5)|(1<<4)|(0x3<<1)|(1<<0);
	s2443NAND->NFSTAT = (1<<4);

	// Get manufacturer and device codes.
	nNandID = ReadFlashID();
	RETAILMSG(1, (TEXT(" (NAND ID:0x%x) --> "), nNandID));

	nMID = (UINT8)(nNandID >> 8);
	nDID = (UINT8)(nNandID & 0xff);

	for (nCnt = 0; astNandSpec[nCnt].nMID != 0; nCnt++)
    {
        if (nDID == astNandSpec[nCnt].nDID)
        {
        	bNandExt = TRUE;
            break;
        }
    }

	if (!bNandExt)
	{
		RETAILMSG(1, (TEXT("Error!!!\n")));
		SetKMode (bLastMode);
		return(NULL);
	}
	else
	{
		RETAILMSG(1, (TEXT("OK.\n")));
	}

	NUM_OF_BLOCKS = astNandSpec[nCnt].nNumOfBlks;
	PAGES_PER_BLOCK = astNandSpec[nCnt].nPgsPerBlk;
	SECTORS_PER_PAGE = astNandSpec[nCnt].nSctsPerPg;

	RETAILMSG(1, (TEXT(" NUM_OF_BLOCKS    = %d \r\n"), NUM_OF_BLOCKS));
	RETAILMSG(1, (TEXT(" PAGES_PER_BLOCK  = %d \r\n"), PAGES_PER_BLOCK));
	RETAILMSG(1, (TEXT(" SECTORS_PER_PAGE = %d \r\n"), SECTORS_PER_PAGE));

#if MAGNETO
	DefineLayout();
#endif

	SetKMode (bLastMode);

	return((PVOID)s2443NAND);
}


/*
	@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)
{
	BOOL bRet;

//	RETAILMSG(1, (TEXT("FMD::FMD_ReadSector 0x%x \r\n"), startSectorAddr));

	if ( IS_LB )
		bRet = FMD_LB_ReadSector(startSectorAddr, pSectorBuff, pSectorInfoBuff, dwNumSectors, USE_NFCE);
	else
		bRet = FMD_SB_ReadSector(startSectorAddr, pSectorBuff, pSectorInfoBuff, dwNumSectors, USE_NFCE);

	return bRet;
}


/*
	@func   BOOL | FMD_WriteSector | Writes the specified sector(s) to NAND flash.
	@rdesc  TRUE = Success, FALSE = Failure.
	@comm	
	@xref   
*/
BOOL FMD_WriteSector(SECTOR_ADDR startSectorAddr, LPBYTE pSectorBuff, PSectorInfo pSectorInfoBuff,
                        DWORD dwNumSectors)
{
    BOOL    bRet = TRUE;

//	RETAILMSG(1, (TEXT("FMD::FMD_WriteSector 0x%x \r\n"), startSectorAddr));

	if ( IS_LB )
		bRet = FMD_LB_WriteSector(startSectorAddr, pSectorBuff, pSectorInfoBuff, dwNumSectors, USE_NFCE);
	else
		bRet = FMD_SB_WriteSector(startSectorAddr, pSectorBuff, pSectorInfoBuff, dwNumSectors, USE_NFCE);

    return bRet;
}

/*
	@func   BOOL | FMD_EraseBlock | Erases the specified flash block.
	@rdesc  TRUE = Success, FALSE = Failure.
	@comm	
	@xref   
*/
BOOL FMD_EraseBlock(BLOCK_ID blockID)
{
	BOOL    bRet = TRUE;

//	RETAILMSG(1, (TEXT("FMD::FMD_EraseBlock 0x%x \r\n")));

	if ( IS_LB )
		bRet = FMD_LB_EraseBlock(blockID, USE_NFCE);
	else
		bRet = FMD_SB_EraseBlock(blockID, USE_NFCE);

    return bRet;
}


//  FMD_PowerUp
//
//  Performs any necessary powerup procedures...
//
VOID FMD_PowerUp(VOID)
{
	// Set up initial flash controller configuration.
	//
	s2443NAND->NFCONF =  (TACLS  <<  12) | /* CLE & ALE = HCLK * (TACLS  + 1)   */
						 (TWRPH0 <<  8) | /* TWRPH0	= HCLK * (TWRPH0 + 1)   */
						 (TWRPH1 <<  4);

	s2443NAND->NFCONT = (0<<17)|(0<<16)|(0<<10)|(0<<9)|(0<<8)|(1<<7)|(1<<6)|(1<<5)|(1<<4)|(0x3<<1)|(1<<0);
	s2443NAND->NFSTAT = (1<<4);
}


//  FMD_PowerDown
//
//  Performs any necessary powerdown procedures...
//
VOID FMD_PowerDown(VOID)
{
}


//  We don't have to build the following interface functions for the
//  bootloader.
//

//  FMD_OEMIoControl
//
//  Used for any OEM defined IOCTL operations
//
BOOL  FMD_OEMIoControl(DWORD dwIoControlCode, PBYTE pInBuf, DWORD nInBufSize,
                       PBYTE pOutBuf, DWORD nOutBufSize, PDWORD pBytesReturned)
{
#if MAGNETO	
    BSP_ARGS *pBSPArgs = ((BSP_ARGS *) IMAGE_SHARE_ARGS_UA_START);
#endif
	RETAILMSG(1,(TEXT("#### FMD_DRIVER:::FMD_OEMIoControl \r\n")));

    switch(dwIoControlCode)
    {
	    case IOCTL_FMD_GET_INTERFACE:
	    {
	    	RETAILMSG(1, (TEXT("FMD_OEMIoControl: IOCTL_FMD_GET_INTERFACE \r\n")));
	            
	        if (!pOutBuf || nOutBufSize < sizeof(FMDInterface))
	        {
	            RETAILMSG(1, (TEXT("FMD_OEMIoControl: IOCTL_FMD_GET_INTERFACE bad parameter(s).\r\n")));
	            return(FALSE);
	        }    
	
	        PFMDInterface pInterface = (PFMDInterface)pOutBuf;
	        pInterface->cbSize = sizeof(FMDInterface);
	        pInterface->pInit = FMD_Init;
	        pInterface->pDeInit = FMD_Deinit;
	        pInterface->pGetInfo = FMD_GetInfo;        
#if MAGNETO
	        pInterface->pGetInfoEx = FMD_GetInfoEx;
#endif
	        pInterface->pGetBlockStatus = FMD_GetBlockStatus;     
	        pInterface->pSetBlockStatus = FMD_SetBlockStatus;
	        pInterface->pReadSector = FMD_ReadSector;
	        pInterface->pWriteSector = FMD_WriteSector;
	        pInterface->pEraseBlock = FMD_EraseBlock;
	        pInterface->pPowerUp = FMD_PowerUp;
	        pInterface->pPowerDown = FMD_PowerDown;
	        pInterface->pGetPhysSectorAddr = NULL;            
	
	        break;
	    }
#if 0
		case IOCTL_FMD_LOCK_BLOCKS:
			// LOCK is not supported.!!!!
			BlockLockInfo * pLockInfo;
			pLockInfo = (BlockLockInfo *)pInBuf;
			RETAILMSG(1, (TEXT("IOCTL_FMD_LOCK_BLOCKS!!!!(0x%x,0x%x) \r\n"), pLockInfo->StartBlock, pLockInfo->NumBlocks));

			if ( IS_LB )		// Large Block
			{
				if ( READ_REGISTER_BYTE(pNFSBLK) >> 6 < (ULONG)(pLockInfo->StartBlock + pLockInfo->NumBlocks) )
					WRITE_REGISTER_USHORT(pNFSBLK, (pLockInfo->StartBlock + pLockInfo->NumBlocks)<<6);
			}
			else	// Small Block
			{
				if ( READ_REGISTER_BYTE(pNFSBLK) >> 5 < (ULONG)(pLockInfo->StartBlock + pLockInfo->NumBlocks)*8 )
				{
//					RETAILMSG(1, (TEXT("Write value (0x%x) \r\n"), ((ULONG)(pLockInfo->StartBlock + pLockInfo->NumBlocks)*8)<<5));
					WRITE_REGISTER_ULONG(pNFSBLK, ((ULONG)(pLockInfo->StartBlock + pLockInfo->NumBlocks)*8)<<5);
//					RETAILMSG(1, (TEXT("Read value  (0x%x) \r\n"), READ_REGISTER_ULONG(pNFSBLK)));
				}
			}
			pBSPArgs->nfsblk = pLockInfo->StartBlock + pLockInfo->NumBlocks;
			
			break;
		case IOCTL_FMD_UNLOCK_BLOCKS:
			RETAILMSG(1, (TEXT("IOCTL_FMD_UNLOCK_BLOCKS!!!!(0x%x,0x%x) \r\n"), pLockInfo->StartBlock, pLockInfo->NumBlocks));
			RETAILMSG(1, (TEXT("S3C2443 Does not support IOCTL_FMD_UNLOCK_BLOCKS !!!! \r\n")));
	        return(FALSE);
			break;
			
		case IOCTL_FMD_READ_RESERVED:
			RETAILMSG(1,(TEXT("IOCTL_FMD_READ_RESERVED\r\n")));
			return(FALSE);	
			break;
		case IOCTL_FMD_WRITE_RESERVED:
			RETAILMSG(1,(TEXT("IOCTL_FMD_WRITE_RESERVED\r\n")));
			return(FALSE);	
			break;
		case IOCTL_FMD_GET_RESERVED_TABLE:
			RETAILMSG(1,(TEXT("IOCTL_FMD_GET_RESERVED_TABLE\r\n")));
			return(FALSE);	
			break;
		case IOCTL_FMD_SET_REGION_TABLE:
			RETAILMSG(1,(TEXT("IOCTL_FMD_SET_REGION_TABLE\r\n")));
			return(FALSE);	
			break;
		case IOCTL_FMD_SET_SECTORSIZE:
			RETAILMSG(1,(TEXT("IOCTL_FMD_SET_SECTORSIZE\r\n")));
			return(FALSE);	
			break;			
		case IOCTL_FMD_RAW_WRITE_BLOCKS:
			RETAILMSG(1,(TEXT("IOCTL_FMD_RAW_WRITE_BLOCKS\r\n")));
			return(FALSE);	
			break;	
		case IOCTL_FMD_GET_RAW_BLOCK_SIZE:
			RETAILMSG(1,(TEXT("IOCTL_FMD_GET_RAW_BLOCK_SIZE\r\n")));
			return(FALSE);	
			break;	
		case IOCTL_FMD_GET_INFO:
			RETAILMSG(1,(TEXT("IOCTL_FMD_GET_INFO\r\n")));
			return(FALSE);	
			break;	
#endif	
	    default:
	        RETAILMSG(1, (TEXT("FMD_OEMIoControl: unrecognized IOCTL (0x%x).\r\n"), dwIoControlCode));
	        return(FALSE);
								
    }

    return TRUE; 
}

BOOL FMD_Deinit(PVOID hFMD)
{
	return(TRUE);
}


/*
	@func   BOOL | FMD_GetInfo | Provides information on the NAND flash.
	@rdesc  TRUE = Success, FALSE = Failure.
	@comm	
	@xref   
*/
BOOL FMD_GetInfo(PFlashInfo pFlashInfo)
{
   UINT32  nCnt;
   UINT32 nNandID;
    UINT8 nMID, nDID;

    if (!pFlashInfo)
        return(FALSE);

	BOOL bLastMode = SetKMode(TRUE); // for READFlashID();

    pFlashInfo->flashType = NAND;

	nNandID = ReadFlashID();

	nMID = nNandID >> 8;
	nDID = nNandID & 0xff;
	
    for (nCnt = 0; astNandSpec[nCnt].nMID != 0; nCnt++)
    {
        if (nDID == astNandSpec[nCnt].nDID)
        {
            break;
        }
    }

    //  OK, instead of reading it from the chip, we use the hardcoded
    //  numbers here.

	pFlashInfo->dwNumBlocks         = NUM_OF_BLOCKS;
	pFlashInfo->wSectorsPerBlock    = PAGES_PER_BLOCK;
	pFlashInfo->wDataBytesPerSector = NAND_SECTOR_SIZE;
	pFlashInfo->dwBytesPerBlock     = (PAGES_PER_BLOCK * NAND_SECTOR_SIZE);

	RETAILMSG(1, (TEXT("NUMBLOCKS : %d(0x%x), SECTORSPERBLOCK = %d(0x%x), BYTESPERSECTOR = %d(0x%x) \r\n"), pFlashInfo->dwNumBlocks, pFlashInfo->dwNumBlocks, pFlashInfo->wSectorsPerBlock, pFlashInfo->wSectorsPerBlock, pFlashInfo->wDataBytesPerSector, pFlashInfo->wDataBytesPerSector));

	SetKMode(bLastMode);
    return TRUE;
}


static BOOL IsBlockBad(BLOCK_ID blockID)
{
	BOOL bRet = FALSE;

	if ( IS_LB )
		bRet = LB_IsBlockBad(blockID, USE_NFCE);
	else
		bRet = SB_IsBlockBad(blockID, USE_NFCE);

	return bRet;
}


/*
	@func   DWORD | FMD_GetBlockStatus | Returns the status of the specified block.
	@rdesc  Block status (see fmd.h).
	@comm	
	@xref   
*/
DWORD FMD_GetBlockStatus(BLOCK_ID blockID)
{
    DWORD dwResult = 0;


	if ( IS_LB )
		dwResult = FMD_LB_GetBlockStatus(blockID, USE_NFCE);
	else
		dwResult = FMD_SB_GetBlockStatus(blockID, USE_NFCE);

    return dwResult;
}


/*
	@func   BOOL | MarkBlockBad | Marks the specified block as bad.
	@rdesc  TRUE = Success, FALSE = Failure.
	@comm	
	@xref   
*/
static BOOL MarkBlockBad(BLOCK_ID blockID)
{
    BOOL    bRet = TRUE;

	if ( IS_LB )
		bRet = LB_MarkBlockBad(blockID, USE_NFCE);
	else
		bRet = SB_MarkBlockBad(blockID, USE_NFCE);

    return bRet;
}

/*
	@func   BOOL | FMD_SetBlockStatus | Marks the block with the specified block status.
	@rdesc  TRUE = Success, FALSE = Failure.
	@comm	
	@xref   
*/
BOOL FMD_SetBlockStatus(BLOCK_ID blockID, DWORD dwStatus)
{
    BOOL    bRet = TRUE;

	if ( IS_LB )
		bRet = FMD_LB_SetBlockStatus(blockID, dwStatus, USE_NFCE);
	else
		bRet = FMD_SB_SetBlockStatus(blockID, dwStatus, USE_NFCE);

    return bRet;
}

typedef enum {
    ECC_CORRECT_MAIN = 0,  // correct Main ECC
    ECC_CORRECT_SPARE = 1,  // correct Main ECC
} ECC_CORRECT_TYPE;

BOOL ECC_CorrectData(SECTOR_ADDR sectoraddr, LPBYTE pData, UINT32 nRetEcc, ECC_CORRECT_TYPE nType)
{
	DWORD  nErrStatus;
	DWORD  nErrDataNo;
	DWORD  nErrBitNo;
	UINT32 nErrDataMask;
	UINT32 nErrBitMask = 0x7;
	BOOL bRet = TRUE;

	//RETAILMSG(1, (TEXT("#### FMD_DRIVER:::ECC_CorrectData %x, %x, %x\r\n"), sectoraddr, nRetEcc, nType));

	if (nType == ECC_CORRECT_MAIN)
	{
		nErrStatus   = 0;
		nErrDataNo   = 7;
		nErrBitNo    = 4;
		nErrDataMask = 0x7ff;
	}
	else if (nType == ECC_CORRECT_SPARE)
	{
		nErrStatus   = 2;
		nErrDataNo   = 21;
		nErrBitNo    = 18;
		nErrDataMask = 0xf;
	}
	else
	{
		return FALSE;
	}

	switch((nRetEcc>>nErrStatus) & 0x3)
	{
		case 0:	// No Error
			bRet = TRUE;
			break;
		case 1:	// 1-bit Error(Correctable)
			RETAILMSG(1,(TEXT("%cECC correctable error(0x%x). Byte:%d, bit:%d\r\n"), ((nType==ECC_CORRECT_MAIN)?'M':'S'), sectoraddr, (nRetEcc>>nErrDataNo)&nErrDataMask, (nRetEcc>>nErrBitNo)&nErrBitMask));
			(pData)[(nRetEcc>>nErrDataNo)&nErrDataMask] ^= (1<<((nRetEcc>>nErrBitNo)&nErrBitMask));
			bRet = TRUE;		

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人性生交大片免费看视频在线| 欧美熟乱第一页| 亚洲欧美在线视频观看| 欧美久久高跟鞋激| 欧美视频精品在线| 中文字幕国产一区| 国产三区在线成人av| 精品国内片67194| 欧美精品日韩一本| 亚洲国产高清在线| 国产永久精品大片wwwapp| 蜜臀久久久99精品久久久久久| 亚洲精品自拍动漫在线| 中文字幕精品一区| 精品一区二区免费看| 精品亚洲国产成人av制服丝袜 | 国产精品美女久久久久久久| 国产无一区二区| 五月综合激情婷婷六月色窝| 三级成人在线视频| 日韩一区精品视频| 91麻豆国产精品久久| 91久久精品国产91性色tv| 91麻豆精品在线观看| 欧美极品aⅴ影院| 国产乱理伦片在线观看夜一区| 丰满放荡岳乱妇91ww| 欧洲另类一二三四区| 欧美一区二区在线免费观看| 精品国产一区二区三区四区四| 香蕉久久一区二区不卡无毒影院| 免费成人在线网站| 国产91在线看| 国产日韩在线不卡| 一区二区三区四区激情| 日韩高清中文字幕一区| 国产成人精品综合在线观看| 欧洲av在线精品| 亚洲一区二区三区美女| 韩日av一区二区| 91久久精品一区二区三区| 一区二区免费看| 91豆麻精品91久久久久久| 亚洲精品精品亚洲| 欧美视频你懂的| 日本欧美一区二区三区乱码| 欧美一区二区三区小说| 精品一区二区精品| 亚洲国产成人在线| 在线观看日韩国产| 五月天一区二区三区| 欧美变态tickling挠脚心| 日韩理论片网站| 国内精品久久久久影院一蜜桃| 久久蜜桃av一区精品变态类天堂| 午夜视频一区二区| 欧美tk丨vk视频| 久久国产精品99久久人人澡| 欧美日韩三级视频| 亚洲色大成网站www久久九九| 日本精品视频一区二区| 亚洲福中文字幕伊人影院| 91香蕉视频污在线| 日日夜夜一区二区| 国产精品亲子乱子伦xxxx裸| 99视频一区二区| 国产欧美精品一区二区色综合 | 成人黄色小视频| 久久日韩精品一区二区五区| 日韩成人精品视频| 欧美国产97人人爽人人喊| 在线中文字幕一区二区| 韩国成人精品a∨在线观看| 亚洲欧美激情视频在线观看一区二区三区| 国产精品一区二区久久不卡 | 国产精品人妖ts系列视频| 欧美理论电影在线| 粉嫩aⅴ一区二区三区四区| 亚洲一区二区三区爽爽爽爽爽| 日韩精品一区二区三区视频在线观看 | 亚洲国产精品综合小说图片区| 亚洲精品在线电影| 欧洲中文字幕精品| 国产91在线观看| 久久不见久久见免费视频1| 亚洲一区在线观看视频| 久久精品男人天堂av| 欧美一区三区四区| 欧美在线视频日韩| 成人av影院在线| 国产专区综合网| 美女一区二区久久| 亚洲一区二区精品久久av| 中文无字幕一区二区三区| 日韩午夜在线观看| 国产一区 二区 三区一级| 日日欢夜夜爽一区| 一区二区欧美在线观看| 国产日韩欧美综合在线| 欧美大肚乱孕交hd孕妇| 制服丝袜亚洲色图| 国产福利一区二区三区在线视频| 日韩精品视频网| 亚洲综合一区二区| 亚洲精品亚洲人成人网| 国产欧美精品一区aⅴ影院| 精品久久久久久最新网址| 51精品国自产在线| 欧美精品在线视频| 538在线一区二区精品国产| 欧美私人免费视频| 欧美日本在线视频| 国产乱码精品一品二品| 国模无码大尺度一区二区三区| 美女www一区二区| 喷水一区二区三区| 日韩va欧美va亚洲va久久| 午夜精品久久久久久| 性做久久久久久免费观看| 图片区小说区国产精品视频| 一级做a爱片久久| 亚洲国产精品久久人人爱| 亚洲高清视频中文字幕| 丝袜脚交一区二区| 免费观看成人鲁鲁鲁鲁鲁视频| 老司机精品视频一区二区三区| 美国欧美日韩国产在线播放| 国产资源在线一区| 成年人网站91| 在线观看网站黄不卡| 337p亚洲精品色噜噜| 久久伊99综合婷婷久久伊| 久久久国产午夜精品| 国产精品国产三级国产普通话99| 宅男噜噜噜66一区二区66| 日韩三级免费观看| 久久久久国产精品免费免费搜索| 国产精品欧美一区喷水| 一区二区三区日韩精品视频| 亚洲成人精品影院| 国内久久婷婷综合| 99国产精品国产精品毛片| 国产盗摄女厕一区二区三区| 白白色亚洲国产精品| 欧美日韩亚洲综合| 久久精品日韩一区二区三区| 亚洲精品高清在线| 精品一区精品二区高清| 成人黄色在线网站| 欧美日韩久久久一区| 久久亚洲影视婷婷| 亚洲一区成人在线| 精品一区二区三区在线视频| youjizz国产精品| 日韩欧美一级二级| 亚洲婷婷在线视频| 久草在线在线精品观看| 99精品欧美一区二区三区综合在线| 欧美久久一二区| 中文字幕一区二区在线观看| 婷婷久久综合九色综合绿巨人| 国产成人在线电影| 欧美精品第1页| 国产精品三级久久久久三级| 蜜臂av日日欢夜夜爽一区| 91免费版pro下载短视频| 精品久久免费看| 亚洲国产精品一区二区www| 国产成人免费网站| 日韩一级在线观看| 亚洲精选视频在线| 成人深夜视频在线观看| 欧美本精品男人aⅴ天堂| 婷婷丁香久久五月婷婷| 一本一本久久a久久精品综合麻豆| 成人美女视频在线观看18| 日韩欧美亚洲国产精品字幕久久久| 亚洲欧美另类综合偷拍| 成人在线一区二区三区| 精品日韩欧美在线| 日韩电影在线看| 精品视频资源站| 一区二区三区精密机械公司| 成人黄色av电影| 国产亚洲成年网址在线观看| 老司机精品视频在线| 91精品国产一区二区三区| 亚洲第一二三四区| 欧美在线免费播放| 夜夜嗨av一区二区三区网页| 色综合久久久久综合体| 国产精品久久国产精麻豆99网站| 国产老肥熟一区二区三区| 日韩一级视频免费观看在线| 91一区二区在线观看| 久久一留热品黄| 国产在线不卡一卡二卡三卡四卡| 欧美一二三区在线观看| 日韩av高清在线观看| 777午夜精品视频在线播放|