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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? sdmmcboot.c

?? PXA270 下用SD卡啟動(dòng)的代碼,已在wince5.0的mainstoneii下測(cè)試通過(guò)
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
//
//
#include <windows.h>
#include <nkintr.h>
#include <bulverde.h>
#include <mainstoneii.h>
#include <oal_memory.h>
#include <pcireg.h>
#include <fmd.h>
#include <xllp_pccardsocket.h>
#include <bsp.h>
#include "loader.h"
#include "sd.h"
#include "fatsys.h"

#define   MSC_PASSED   1
#define   MSC_FAILED   0

#define   Log  EdbgOutputDebugString


//#define   USE_DMA_CHANNEL   2

#define   MAX_READ_BLOCK     0x800      // 1M size  Must < 16M since DMA
#define   MAX_SEC_PER_CLUS   0x8
#define   NK_FILENAME   "nk"
#define   NK_EXTNAME    "nb0"


unsigned int ReadDataBuf[0x80 * MAX_SEC_PER_CLUS], ReadFatBuf[0x80 * MAX_SEC_PER_CLUS];
unsigned int PartInfoBuf[0x100];

volatile BULVERDE_MMC_REG *pSDMMCRegisters;
volatile BULVERDE_CLKMGR_REG *pClkMgrRegisters;
volatile BULVERDE_GPIO_REG *pGPIORegisters;

void dump_sector (unsigned int *);
int send_command_to_cards (unsigned char cmd, unsigned int arg, unsigned int cmdat, 
						   unsigned int nob, unsigned wait, unsigned int slow);
unsigned int CardAddr, read_file = 0, datwidth = 0;
struct BootSec  *pBootSec;
struct PartInfo bootPartInfo;
struct FileInfo imagefile;

unsigned char nk_name[9] = NK_FILENAME;
unsigned char nk_ext[4]  = NK_EXTNAME;

void WRITE_MMC_REGISTER_DWORD(volatile BULVERDE_MMC_REG *pSDMMCRegisters, DWORD RegOffset, DWORD Value) 
{
    BYTE *pRegBaseAddr, *regAddr;
    volatile DWORD *pdwRegAddr;
    pRegBaseAddr = (BYTE*)pSDMMCRegisters;
    regAddr = pRegBaseAddr + RegOffset;
    pdwRegAddr = (DWORD*)regAddr;
    *pdwRegAddr = Value;
}

DWORD READ_MMC_REGISTER_DWORD(volatile BULVERDE_MMC_REG *pSDMMCRegisters, DWORD RegOffset)
{
    BYTE *pRegBaseAddr, *regAddr;
    volatile DWORD *pdwRegAddr;
    pRegBaseAddr = (BYTE*)pSDMMCRegisters;
    regAddr = pRegBaseAddr + RegOffset;
    pdwRegAddr = (DWORD*)regAddr;
    return (*pdwRegAddr);
}


int send_command_to_cards (unsigned char cmd, unsigned int arg, unsigned int cmdat,
						   unsigned int nob, unsigned wait, unsigned int slow)
{
   volatile DWORD    mmc_stat;

   //stop the clock
   mmc_stat = READ_MMC_REGISTER_DWORD( pSDMMCRegisters, MMC_STAT );
   if (mmc_stat & MMC_STAT_CLOCK_ENABLED)
   {
     WRITE_MMC_REGISTER_DWORD(pSDMMCRegisters, MMC_STRPCL, MMC_STRPCL_STOP_CLOCK);
	 do {
	   mmc_stat = READ_MMC_REGISTER_DWORD( pSDMMCRegisters, MMC_STAT );
	 } while (mmc_stat & MMC_STAT_CLOCK_ENABLED);
	}

   if (slow)
     WRITE_MMC_REGISTER_DWORD(pSDMMCRegisters, MMC_CLKRT, 0x6);
   else
	 WRITE_MMC_REGISTER_DWORD(pSDMMCRegisters, MMC_CLKRT, 0x1);
	 
   if (datwidth)
   {
	 cmdat |= MMC_CMDAT_SD_4DAT;
	 //Log (" ***************** buswidth is 0x%x **********\n", datwidth);
   }

   WRITE_MMC_REGISTER_DWORD(pSDMMCRegisters, MMC_CMDAT, cmdat);
   WRITE_MMC_REGISTER_DWORD(pSDMMCRegisters, MMC_RESTO, 0x7f);
   WRITE_MMC_REGISTER_DWORD(pSDMMCRegisters, MMC_RDTO, 0xffff);

   if (cmd == 17 || cmd == 18)
     WRITE_MMC_REGISTER_DWORD(pSDMMCRegisters, MMC_BLKLEN, 0x200);
   else
	 WRITE_MMC_REGISTER_DWORD(pSDMMCRegisters, MMC_BLKLEN, 0);

   WRITE_MMC_REGISTER_DWORD(pSDMMCRegisters, MMC_NOB, nob);

   WRITE_MMC_REGISTER_DWORD(pSDMMCRegisters, MMC_IMASK, 0x1fff);

   WRITE_MMC_REGISTER_DWORD(pSDMMCRegisters, MMC_CMD, cmd);
   WRITE_MMC_REGISTER_DWORD(pSDMMCRegisters, MMC_ARGH, (arg >> 16));
   WRITE_MMC_REGISTER_DWORD(pSDMMCRegisters, MMC_ARGL, (arg & 0xffff));
 
   // clock is on
   mmc_stat = READ_MMC_REGISTER_DWORD( pSDMMCRegisters, MMC_STAT ); // & MMC_STAT_CLOCK_ENABLED

   if (! (mmc_stat & MMC_STAT_CLOCK_ENABLED))
   {
	 WRITE_MMC_REGISTER_DWORD(pSDMMCRegisters, MMC_STRPCL, MMC_STRPCL_START_CLOCK);
	 do {
	   mmc_stat = READ_MMC_REGISTER_DWORD( pSDMMCRegisters, MMC_STAT );
	 } while (! (mmc_stat & MMC_STAT_CLOCK_ENABLED));
	}

   if (wait)
   {
	// get respond complete
	do {
	  mmc_stat = READ_MMC_REGISTER_DWORD( pSDMMCRegisters, MMC_STAT );
	} while (! (mmc_stat & MMC_STAT_END_CMD_RES));

    if ((mmc_stat & 0x3f) != 0)
	{
	  Log ("!! Error !!: mmc_status is 0x%x\n", mmc_stat);
	  return MSC_FAILED;
	}
   }

   return MSC_PASSED;
}

int getrespondR1 (int dump)
{
  unsigned int respbuf[0x10], i, status;
  unsigned char *bufp;
  unsigned short val16;
  volatile DWORD    mmc_stat;

  mmc_stat = READ_MMC_REGISTER_DWORD( pSDMMCRegisters, MMC_STAT );
  if ((mmc_stat & 0x3f) != 0)
  {
	Log ("!! Error !!: status is 0x%x\n", mmc_stat);
	return MSC_FAILED;
  }

  // get respond with R1
  bufp = (unsigned char *)respbuf;
  for (i = 0; i < 3; i++)
  {
	val16 = (USHORT)(READ_MMC_REGISTER_DWORD(pSDMMCRegisters, MMC_RES));
	*bufp++ = (val16 >> 8) & 0xff;
	*bufp++ = val16 & 0xff;
  }

  bufp = (unsigned char *)respbuf;
  status = (bufp[1] << 24) | (bufp[2] << 16) | (bufp[3] << 8) | (bufp[4] << 0);

  imagefile.SDcardState = (status >> 8) & 0x0F;

  if (dump)
  {
	Log ("Get response <R1> (0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",
		 bufp[0], bufp[1], bufp[2], bufp[3], bufp[4], bufp[5]);
  }
  else
  if ((status & 0xFFFFF000) != 0)
  {
	   Log ("!! Error !!: response <R1> (0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",
	        bufp[0], bufp[1], bufp[2], bufp[3], bufp[4], bufp[5]);
	   return MSC_FAILED;
  }

  return MSC_PASSED;
}


int checkSDcard (void)
{
  unsigned int respbuf[0x30];
  unsigned char *bufp;
  volatile unsigned int i;
  unsigned short val16;
/**********************************************************************************/
  DWORD dwRegVal;
  volatile DWORD  mmc_stat;

  datwidth = 0;

  pGPIORegisters = (volatile BULVERDE_GPIO_REG *) OALPAtoVA(BULVERDE_BASE_REG_PA_GPIO, FALSE);
  pClkMgrRegisters = (volatile BULVERDE_CLKMGR_REG *) OALPAtoVA(BULVERDE_BASE_REG_PA_CLKMGR, FALSE);
  pSDMMCRegisters = (volatile BULVERDE_MMC_REG *) OALPAtoVA (BULVERDE_BASE_REG_PA_MMC, FALSE);

  //////////////////////////////////////////////////////////
  // Configure GPIO_32 as Alternate Function 2 out (MMC_CLK)

    // assume that the MMC_CLK is active-low signal driven
    dwRegVal = pGPIORegisters->GPCR1;
    dwRegVal |= 0x00000001;
    pGPIORegisters->GPCR1 = dwRegVal;
    // change the direction to OUT
    dwRegVal = pGPIORegisters->GPDR1;
    dwRegVal |= 0x00000001;
    pGPIORegisters->GPDR1 = dwRegVal;
    // change to Alternate Function 2
    dwRegVal = pGPIORegisters->GAFR1_L;
    dwRegVal = ( dwRegVal & 0xfffffffc ) | 0x00000002;
    pGPIORegisters->GAFR1_L = dwRegVal;
    
    //////////////////////////////////////////////////////////
    // Configure GPIO_112 as Alternate Function 1 (MMC_CMD)

    // assume that the MMC_CLK is active-high signal driven
    dwRegVal = pGPIORegisters->GPSR3;
    dwRegVal |= 0x00010000;
    pGPIORegisters->GPSR3 = dwRegVal;
    // change the direction to OUT
    dwRegVal = pGPIORegisters->GPDR3;
    dwRegVal |= 0x00010000;
    pGPIORegisters->GPDR3 = dwRegVal;
    // change to Alternate Function 1
    dwRegVal = pGPIORegisters->GAFR3_U;
    dwRegVal = ( dwRegVal & 0xfffffffc ) | 0x00000001;
    pGPIORegisters->GAFR3_U = dwRegVal;
    
    //////////////////////////////////////////////////////////
    // Configure GPIO_92 as Alternate Function 1 (MMC_DAT0)
    
    // assume that the MMC_CLK is active-high signal driven
    dwRegVal = pGPIORegisters->GPSR2;
    dwRegVal |= 0x10000000;
    pGPIORegisters->GPSR2 = dwRegVal;
    // change the direction to OUT
    dwRegVal = pGPIORegisters->GPDR2;
    dwRegVal |= 0x10000000;
    pGPIORegisters->GPDR2 = dwRegVal;
    // change to Alternate Function 1
    dwRegVal = pGPIORegisters->GAFR2_U;
    dwRegVal = ( dwRegVal & 0xfcffffff ) | 0x01000000;
    pGPIORegisters->GAFR2_U = dwRegVal;
    
    //////////////////////////////////////////////////////////
    // Configure GPIO_109-GPIO_111 as Alternate Function 1 (MMC_DAT1-MMC_DAT3)

    // assume that the MMC_CLK is active-high signal driven
    dwRegVal = pGPIORegisters->GPSR3;
    dwRegVal |= 0x0000e000;
    pGPIORegisters->GPSR3 = dwRegVal;
    // change the direction to OUT
    dwRegVal = pGPIORegisters->GPDR3;
    dwRegVal |= 0x0000e000;
    pGPIORegisters->GPDR3 = dwRegVal;
    // change to Alternate Function 1
    dwRegVal = pGPIORegisters->GAFR3_L;
    dwRegVal = ( dwRegVal & 0x03ffffff ) | 0x54000000;
    pGPIORegisters->GAFR3_L = dwRegVal;


	// enable the MMC Unit Clock
    dwRegVal = pClkMgrRegisters->cken;
    dwRegVal |= (1 << 12);
    pClkMgrRegisters->cken = dwRegVal;

	//EdbgOutputDebugString("Address init complete\r\n");

	// Reset SD/MMC card (CMD0) (state 0: idle)
    Log ("Send command 0 to card (Reset SD/MMC).\n");
			
	if (send_command_to_cards (0, 0, (MMC_CMDAT_INIT | MMC_CMDAT_RESPONSE_NONE), 0, 0, 1) 
		!= MSC_PASSED)
	  return MSC_FAILED;

	// get respond complete
	do {
	  mmc_stat = READ_MMC_REGISTER_DWORD( pSDMMCRegisters, MMC_STAT );
	} while (! (mmc_stat & MMC_STAT_END_CMD_RES));

  // send ACMD41 (SD_SEND_OP_COND)  (01: redy)   ****************
  Log ("Send ACMD41 to card (Reset SD/MMC).\n");
  Log ("MMC stat is 0x%x\n", mmc_stat);

  while (1)
  {
	// send cmd55 with R1
	// send cmd55 with R1
	if (send_command_to_cards (55, 0, MMC_CMDAT_RESPONSE_R1, 0, 1, 1) != MSC_PASSED)
	  return MSC_FAILED;

	if (getrespondR1 (1) != MSC_PASSED)
	  return MSC_FAILED;

	// send acmd41 (SD_SEND_OP_COND) with R3
	if (send_command_to_cards (41, 0x00ff8000, MMC_CMDAT_RESPONSE_R3, 0, 1, 1) != MSC_PASSED)
	  return MSC_FAILED;

	// get respond with R3
	bufp = (unsigned char *)respbuf;
	for (i = 0; i < 3; i++)
	{
	  val16 = (USHORT)(READ_MMC_REGISTER_DWORD(pSDMMCRegisters, MMC_RES));
	  *bufp++ = (val16 >> 8) & 0xff;
	  *bufp++ = val16 & 0xff;
	}

	bufp = (unsigned char *)respbuf;
	if (bufp[1] & 0x80)
	  break;
  }

  Log ("SD card is reay for operation.\n");

  return MSC_PASSED;
}

int initSDcard (void)
{
  unsigned int respbuf[0x30];
  unsigned char *bufp;
  volatile unsigned int i;
  unsigned short val16;

// send CMD2 (ALL_SEND_CID) with R2  (02: ident)   ******************
  Log ("Begin send CMD2 (ALL_SEND_CID) to card.\n");
  if (send_command_to_cards (2, 0,MMC_CMDAT_RESPONSE_R2, 0, 1, 1) != MSC_PASSED)
	return MSC_FAILED;

  // get respond with R2
  bufp = (unsigned char *)respbuf;
  for (i = 0; i < 9; i++)
  {
	val16 = (USHORT)(READ_MMC_REGISTER_DWORD(pSDMMCRegisters, MMC_RES));
	*bufp++ = (val16 >> 8) & 0xff;
	*bufp++ = val16 & 0xff;
  }

// send CMD3 (SEND_RELATIVE_ADDR) with R6  (03: stdby)   ******************
  Log ("Begin send CMD3 (SEND_RELATIVE_ADDR) to card.\n");
  if (send_command_to_cards (3, 0, MMC_CMDAT_RESPONSE_R1/*CMDAT_RESP_R6*/, 0, 1, 1) != MSC_PASSED)
	return MSC_FAILED;

  // get respond with R6
  bufp = (unsigned char *)respbuf;
  for (i = 0; i < 3; i++)
  {
	val16 = (USHORT)(READ_MMC_REGISTER_DWORD(pSDMMCRegisters, MMC_RES));
	*bufp++ = (val16 >> 8) & 0xff;
	*bufp++ = val16 & 0xff;
  }

  bufp = (unsigned char *)respbuf;
  CardAddr = (bufp[1] << 8) | bufp[2];

// send CMD13 (SEND_STATUS) with R1  (03: stdby)   ******************
  Log ("Begin send CMD13 (SEND_STATUS) to card.\n");
  if (send_command_to_cards (13, CardAddr << 16, MMC_CMDAT_RESPONSE_R1, 0, 1, 1)
	   != MSC_PASSED)
	return MSC_FAILED;

  if (getrespondR1 (0) != MSC_PASSED)
	return MSC_FAILED;

// send CMD7 (Select/deselect_card) with R1  (04: trans)   ******************
  Log ("Begin send CMD7 (Select/deselect_card) to card.\n");

  if (send_command_to_cards (7, CardAddr << 16, 
	                          (MMC_CMDAT_EXPECT_BUSY | MMC_CMDAT_RESPONSE_R1), 0, 1, 0)
	   != MSC_PASSED)
	return MSC_FAILED;

  // get respond with R6
  bufp = (unsigned char *)respbuf;
  for (i = 0; i < 3; i++)
  {
	val16 = (USHORT)(READ_MMC_REGISTER_DWORD(pSDMMCRegisters, MMC_RES));
	*bufp++ = (val16 >> 8) & 0xff;
	*bufp++ = val16 & 0xff;
  }

/* Set busWidth as 4. */
  Log ("Begin send ACMD6 (SET_BUS_WIDTH) to card.\n");
  if (send_command_to_cards (55, CardAddr << 16, MMC_CMDAT_RESPONSE_R1, 0, 1, 0) != MSC_PASSED)
	return MSC_FAILED;
  if (getrespondR1 (0) != MSC_PASSED)
	return MSC_FAILED;

 if (send_command_to_cards (6, 0x2, MMC_CMDAT_RESPONSE_R1, 0, 1, 1) != MSC_PASSED)
   return MSC_FAILED;
 if (getrespondR1 (0) != MSC_PASSED)
   return MSC_FAILED;

 datwidth = 4;

// send CMD13 (SEND_STATUS) with R1  (04: trans)   ******************
  Log ("Begin send CMD13 (SEND_STATUS) to card.\n");
  if (send_command_to_cards (13, CardAddr << 16, MMC_CMDAT_RESPONSE_R1, 0, 1, 0)
	   != MSC_PASSED)
	return MSC_FAILED;

  if (getrespondR1 (0) != MSC_PASSED)
	return MSC_FAILED;

  return MSC_PASSED;
}


void dump_copying_process ()
{
  int len;

  if (imagefile.BlockCnt < MAX_READ_BLOCK)
	return;
		
  imagefile.OutCnt++;
  imagefile.BlockCnt -= MAX_READ_BLOCK;
  len = (imagefile.OutCnt * MAX_READ_BLOCK * bootPartInfo.BytesPerSec);
  Log ("--- Reading file: 0x%x (%d) completed !! \n", len, len);
}


int ReadBlocks (unsigned int *DataBuf, unsigned int BlockAddr, unsigned int blocks)
{
  unsigned int i, j, blk, base, total_blocks = blocks;
  volatile DWORD mmc_ireg, mmc_stat;
  volatile UCHAR *pMMC_RX_Fifo = (volatile UCHAR *)&(pSDMMCRegisters->rxfifo);
  UINT8  *pBufPtr;

  pBufPtr = (UINT8 *)DataBuf;

  if (blocks == 1)   //Single block Read
  {
	if (send_command_to_cards (17, (BlockAddr * 0x200), 
		                        (MMC_CMDAT_DATA_EN | MMC_CMDAT_RESPONSE_R1), blocks, 1, 0)
		 != MSC_PASSED)
	  return MSC_FAILED;
	if (getrespondR1 (0) != MSC_PASSED)
	  return MSC_FAILED;

	i = 0;
	while (i < 0x200)
	{
			do {
		     mmc_ireg = READ_MMC_REGISTER_DWORD(pSDMMCRegisters, MMC_IREG);
			}  while(! (mmc_ireg & MMC_IREG_RXFIFO_REQ));
	  if (mmc_ireg & MMC_IREG_RXFIFO_REQ)
	  {
		for (j = 0; j < 32; j++)
	      pBufPtr[i++] = *pMMC_RX_Fifo;
	  }
	}

	pBufPtr += i;

	//dump_sector (DataBuf);

	 

	do {
	  mmc_stat = READ_MMC_REGISTER_DWORD( pSDMMCRegisters, MMC_STAT);
	} while (!(mmc_stat & MMC_STAT_DATA_TRANSFER_DONE)) ;

	// Dump the message about reading process.
	if (read_file)
	{
	  imagefile.BlockCnt++;
	  dump_copying_process ();
	}
  }
  else //Multiple block Read
  {
#ifdef USE_DMA_CHANNEL
	unsigned int addr;
	addr = (unsigned int)&(msc_reg->rxfifo_w32);
    dmac_reg->channel[USE_DMA_CHANNEL].dma_sar = addr & 0x1FFFFFFF;
	dmac_reg->channel[USE_DMA_CHANNEL].dma_rsr = DMA_DRSR_MSC_IN;
#endif
	base = 0;

	while (blocks > 0)
	{
	  blk = (blocks > MAX_READ_BLOCK) ? MAX_READ_BLOCK : blocks;

#ifdef USE_DMA_CHANNEL

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩高清欧美激情| 99riav一区二区三区| 91麻豆精品久久久久蜜臀| 亚洲国产综合色| 7777精品伊人久久久大香线蕉最新版| 亚洲国产欧美在线人成| 欧美美女bb生活片| 激情偷乱视频一区二区三区| 久久女同精品一区二区| 成人午夜在线播放| 一区二区三区影院| 欧美一区永久视频免费观看| 狠狠色丁香婷综合久久| 中文字幕一区二区在线观看| 欧美性色aⅴ视频一区日韩精品| 日本午夜一区二区| 制服丝袜av成人在线看| 美女高潮久久久| 国产三级一区二区| 一本久久综合亚洲鲁鲁五月天 | 精品剧情v国产在线观看在线| 国产在线精品一区二区夜色| 国产精品久久久久永久免费观看| 91官网在线免费观看| 蜜桃av噜噜一区| 国产精品福利影院| 7777精品伊人久久久大香线蕉完整版 | 99精品欧美一区二区三区综合在线| 国产精品成人午夜| 欧美精品乱人伦久久久久久| 国产精品影视天天线| 亚洲夂夂婷婷色拍ww47| 亚洲精品一区二区三区蜜桃下载| 99热精品一区二区| 另类小说视频一区二区| 亚洲人成影院在线观看| 欧美成人video| 在线观看国产一区二区| 国产精品一线二线三线| 午夜欧美在线一二页| 国产精品青草久久| 欧美电视剧在线看免费| 91福利区一区二区三区| 国产福利一区二区三区| 日本中文字幕一区| 亚洲精品乱码久久久久久久久 | 99国产精品99久久久久久| 玉足女爽爽91| 国产亚洲综合av| 欧美一区三区四区| 91伊人久久大香线蕉| 激情欧美日韩一区二区| 一区二区三区在线视频观看| 国产亚洲欧美在线| 91精品国产麻豆| 色婷婷av一区二区三区gif| 国产乱人伦精品一区二区在线观看| 一区二区三区免费看视频| 久久欧美中文字幕| 日韩一区二区三免费高清| 在线日韩一区二区| 不卡的av电影| 国产精品白丝jk黑袜喷水| 日韩精品色哟哟| 国产精品麻豆网站| 久久理论电影网| 欧美一二三四区在线| 欧美日韩精品欧美日韩精品一综合| 成人精品鲁一区一区二区| 国产一区 二区| 精品亚洲国内自在自线福利| 青娱乐精品视频| 午夜电影一区二区三区| 亚洲国产三级在线| 亚洲美女区一区| 亚洲免费观看高清完整| 最新成人av在线| 亚洲三级在线观看| 中文字幕日韩一区| 亚洲人成精品久久久久久 | av一区二区三区| 成人中文字幕合集| 成人一区二区三区视频在线观看| 91蝌蚪国产九色| 2023国产精华国产精品| 欧美剧在线免费观看网站| 欧美在线观看18| 欧美亚洲综合色| 欧美在线999| 日本高清无吗v一区| 欧美视频在线观看一区二区| 欧美综合亚洲图片综合区| 在线看国产一区二区| 欧美在线一二三四区| 欧美剧情片在线观看| 日韩一区二区三区视频在线| 日韩欧美国产系列| 久久久青草青青国产亚洲免观| 久久欧美中文字幕| 国产精品久久久久一区二区三区| 中文字幕在线观看一区| 亚洲精品国久久99热| 亚洲一二三区在线观看| 日韩精品成人一区二区三区| 久久国产综合精品| 国产大陆a不卡| 色婷婷精品大在线视频| 91精品国产一区二区三区蜜臀| 精品国产一区二区在线观看| 国产日韩一级二级三级| 亚洲人成在线观看一区二区| 亚洲电影一级片| 韩国精品久久久| 91亚洲精品久久久蜜桃网站| 欧美乱熟臀69xxxxxx| 精品国产乱码久久久久久图片| 国产精品久久久久久久久免费丝袜 | 国产一区二区不卡老阿姨| 日韩va欧美va亚洲va久久| 国产综合色视频| 99久久国产免费看| 欧美一区二区三区啪啪| 国产精品麻豆久久久| 青青草国产精品亚洲专区无| 成人99免费视频| 亚洲精品国产高清久久伦理二区| 日韩av中文字幕一区二区| 国产成人鲁色资源国产91色综| 欧美色视频在线| 国产亚洲精品7777| 日韩在线一区二区| 99久久99久久久精品齐齐| 精品国产免费久久| 亚洲一二三级电影| 99久久婷婷国产| 26uuu色噜噜精品一区二区| 亚洲第一成人在线| 成人a免费在线看| 久久影音资源网| 午夜不卡在线视频| 色婷婷激情一区二区三区| 国产亚洲一区二区三区在线观看 | 国产精品乱码一区二三区小蝌蚪| 亚洲成人三级小说| 99在线精品视频| 国产三级一区二区| 美日韩一区二区| 欧美色视频一区| 国产精品国产三级国产专播品爱网| 麻豆视频观看网址久久| 精品视频1区2区| 一区二区在线免费| 99视频精品全部免费在线| 国产亚洲综合在线| 久久精品久久久精品美女| 欧美美女一区二区在线观看| 亚洲精品国久久99热| 91在线免费视频观看| 国产情人综合久久777777| 国产做a爰片久久毛片| 精品免费日韩av| 理论电影国产精品| 欧美一区二区黄| 日本视频一区二区三区| 欧美群妇大交群的观看方式| 亚洲国产精品久久人人爱| 色94色欧美sute亚洲线路一ni| 中文字幕一区在线观看视频| 99久久精品国产麻豆演员表| 国产精品视频线看| 成人黄页毛片网站| 国产精品国产a| 成人免费三级在线| 国产精品国产成人国产三级| 波波电影院一区二区三区| 国产精品剧情在线亚洲| 91亚洲精华国产精华精华液| 亚洲日本va午夜在线影院| 91香蕉视频mp4| 一区二区不卡在线视频 午夜欧美不卡在| 91在线免费播放| 亚洲人午夜精品天堂一二香蕉| 色综合久久中文综合久久牛| 亚洲老司机在线| 欧美另类z0zxhd电影| 琪琪一区二区三区| 久久久亚洲精品石原莉奈| 高清免费成人av| 亚洲精品视频在线看| 欧美性色aⅴ视频一区日韩精品| 偷窥少妇高潮呻吟av久久免费| 日韩一卡二卡三卡| 国产成人鲁色资源国产91色综| 亚洲三级久久久| 欧美二区三区91| 国产成人在线免费观看| 综合中文字幕亚洲| 3atv在线一区二区三区| 国产精品一线二线三线| 亚洲欧美韩国综合色|