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

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

?? lan9118.c

?? Lan9118以太網(wǎng)芯片linux驅(qū)動(dòng)程序
?? C
?? 第 1 頁 / 共 4 頁
字號(hào):
			} else {

				switch(bNewLink) {
			  	case NG_ETHIF_LINK_10BASET:
			  	case NG_ETHIF_LINK_100BASETX:
					Lan_SetMacRegDW(dwLanBase,FLOW,0x0UL);

					dwTemp = GetRegDW(dwLanBase,AFC_CFG);
					dwTemp|=0x0000000FUL;

					SetRegDW(dwLanBase,AFC_CFG,dwTemp);
					break;

				default:

					Lan_SetMacRegDW(dwLanBase,FLOW,0x0UL);

					dwTemp = GetRegDW(dwLanBase,AFC_CFG);
					dwTemp&=0xFFFFFFF0UL;

					SetRegDW(dwLanBase,AFC_CFG,dwTemp);
					break;

				}

			}

		} else {

#ifdef SMC_DEBUG
			OS_TEXT_OUT ("Link is now DOWN\n");
#endif
			Lan_SetMacRegDW(dwLanBase,FLOW,0UL);
			dwTemp = GetRegDW(dwLanBase,AFC_CFG);
			dwTemp&=0xFFFFFFF0UL;
			SetRegDW(dwLanBase,AFC_CFG,dwTemp);
		}
	}
}

/* Phy_CheckLink(netp) is called periodically at every 100 msec
 * 	to check and update current link status.
 */
void Phy_CheckLink (const NGifnet * const netp)
{
	/* must call this twice */
	Phy_UpdateLinkMode(netp);
	Phy_UpdateLinkMode(netp);

	SetRegDW((DWORD) NG_ETHIF_DATA(((void *) netp), eif_base),GPT_CFG,10000UL | GPT_CFG_TIMER_EN_);
}

/*
FUNCTION: Phy_Initialize
  This function should be called after Lan_InitializeInterrupts.
  Continues to initialize the LAN9118_DATA structure.
  It reads some phy ID values from the phy
  It resets the phy.
RETURN VALUE:
	returns TRUE on Success,
	returns FALSE on Failure,
*/
BOOLEAN Phy_Initialize(const NGifnet * const netp, const DWORD dwPhyAddr)
{
#ifdef SMC_DEBUG
  char buffer [128];
  NGubyte bPhyRev;
  NGubyte bPhyModel;
  DWORD dwPhyId;
#endif
  PLAN9118_DATA pLan9118Data;
  DWORD dwLanBase;
  BOOLEAN result=FALSE;
  DWORD dwTemp=0UL;
  DWORD dwLoopCount=0UL;

  dwLanBase = (DWORD) NG_ETHIF_DATA(((void *) netp), eif_base);
  pLan9118Data = (PLAN9118_DATA) netp->if_devptr1;

  if(dwPhyAddr!=0xFFFFFFFFUL) {	/* not using internal phy */
    switch(pLan9118Data->dwIdRev&0xFFFF0000UL) {
      case 0x01170000UL:
      case 0x01150000UL:
        {
          DWORD dwHwCfg=GetRegDW(dwLanBase,HW_CFG);
          if(dwHwCfg&HW_CFG_EXT_PHY_DET_) {
            /* External phy is requested, supported, and detected
	       Attempt to switch
	       NOTE: Assuming Rx and Tx are stopped
	       because Phy_Initialize is called before 
	       Rx_Initialize and Tx_Initialize
	    */
	    NGushort wPhyId1=(NGushort) 0;
	    NGushort wPhyId2=(NGushort) 0;

	    /* Disable phy clocks to the mac */
	    dwHwCfg&= (~HW_CFG_PHY_CLK_SEL_);
	    dwHwCfg|= HW_CFG_PHY_CLK_SEL_CLK_DIS_;
	    SetRegDW(dwLanBase,HW_CFG,dwHwCfg);
	    LanDelayUS(dwLanBase,10UL);/* wait for clocks to actually stop */

	    dwHwCfg|=HW_CFG_EXT_PHY_EN_;
	    SetRegDW(dwLanBase,HW_CFG,dwHwCfg);

	    dwHwCfg&= (~HW_CFG_PHY_CLK_SEL_);
	    dwHwCfg|= HW_CFG_PHY_CLK_SEL_EXT_PHY_;
	    SetRegDW(dwLanBase,HW_CFG,dwHwCfg);
	    LanDelayUS(dwLanBase,10UL);/* wait for clocks to actually start */

	    dwHwCfg|=HW_CFG_SMI_SEL_;
	    SetRegDW(dwLanBase,HW_CFG,dwHwCfg);

	    if(dwPhyAddr<=31UL) {
	      /* only check the phy address specified */
	      pLan9118Data->dwPhyAddress=dwPhyAddr;
	      wPhyId1=Phy_GetRegW(netp,PHY_ID_1);
	      wPhyId2=Phy_GetRegW(netp,PHY_ID_2);
	    } else {
	      /* auto detect phy */
	      DWORD address=0UL;
	      for(address=0UL;address<=31UL;address++) {
		pLan9118Data->dwPhyAddress=address;
		wPhyId1=Phy_GetRegW(netp,PHY_ID_1);
		wPhyId2=Phy_GetRegW(netp,PHY_ID_2);
		if((wPhyId1!=(NGushort) 0xFFFF)||(wPhyId2!=(NGushort) 0xFFFF)) {
#ifdef SMC_DEBUG
		  sprintf (buffer, "Detected Phy at address = 0x%02lX = %ld\n", address, address);
		  OS_TEXT_OUT (buffer);
#endif
		  break;
		}
	      }
	      if(address>=32UL) {
#ifdef SMC_DEBUG
	        OS_TEXT_OUT("Failed to auto detect external phy\n");
#endif
	      }
	    }
	    if((wPhyId1==(NGushort) 0xFFFF)&&(wPhyId2==(NGushort) 0xFFFF)) {
#ifdef SMC_DEBUG
	      OS_TEXT_OUT("External Phy is not accessable\n");
	      OS_TEXT_OUT("  using internal phy instead\n");
#endif
	      /* revert back to interal phy settings. */

	      /* Disable phy clocks to the mac */
	      dwHwCfg&= (~HW_CFG_PHY_CLK_SEL_);
	      dwHwCfg|= HW_CFG_PHY_CLK_SEL_CLK_DIS_;
	      SetRegDW(dwLanBase,HW_CFG,dwHwCfg);
	      LanDelayUS(dwLanBase,10UL);/* wait for clocks to actually stop*/

	      dwHwCfg&=(~HW_CFG_EXT_PHY_EN_);
	      SetRegDW(dwLanBase,HW_CFG,dwHwCfg);
	
	      dwHwCfg&=(~HW_CFG_PHY_CLK_SEL_);
	      dwHwCfg|=HW_CFG_PHY_CLK_SEL_INT_PHY_;
	      SetRegDW(dwLanBase,HW_CFG,dwHwCfg);
	      LanDelayUS(dwLanBase,10UL);/*wait for clocks to actually start*/

	      dwHwCfg&=(~HW_CFG_SMI_SEL_);
	      SetRegDW(dwLanBase,HW_CFG,dwHwCfg);
	      goto USE_INTERNAL_PHY;
	    } else {
#ifdef SMC_DEBUG
	      OS_TEXT_OUT("Successfully switched to external phy\n");
#endif
	    }
	    } else {
#ifdef SMC_DEBUG
	      OS_TEXT_OUT("No External Phy Detected\n");
	      OS_TEXT_OUT("  using internal phy instead\n");
#endif
	      goto USE_INTERNAL_PHY;
	    }
	};
	break;
      default:
#ifdef SMC_DEBUG
	OS_TEXT_OUT("External Phy is not supported\n");
	OS_TEXT_OUT("  using internal phy instead\n");
#endif
	goto USE_INTERNAL_PHY;
    }
  } else {
    USE_INTERNAL_PHY:
    pLan9118Data->dwPhyAddress=1UL;
  }
	
#ifdef SMC_DEBUG
  dwTemp=(DWORD)Phy_GetRegW(netp,PHY_ID_2);
  dwPhyId=((dwTemp&(0xFC00UL))<<8);
  dwTemp=(DWORD)Phy_GetRegW(netp,PHY_ID_1);
  dwPhyId|=((dwTemp&(0x0000FFFFUL))<<2);

  bPhyRev=((NGubyte)(dwTemp&(0x0FUL)));
  bPhyModel=((NGubyte)((dwTemp>>4)&(0x3FUL)));
  sprintf (buffer, "dwPhyId==0x%08lX,bPhyModel==0x%02X,bPhyRev==0x%02X\n",
  dwPhyId, bPhyModel, bPhyRev);
  OS_TEXT_OUT (buffer);
#endif
  /* reset the PHY */
  dwTemp = GetRegDW(dwLanBase,PMT_CTRL);
  dwTemp |= PMT_CTRL_PHY_RST_;
  SetRegDW(dwLanBase,PMT_CTRL,dwTemp);
  dwLoopCount=20UL;
  do {
    LanDelayUS(dwLanBase,10UL);
    dwTemp = GetRegDW(dwLanBase,PMT_CTRL);
    dwLoopCount--;
  } while((dwLoopCount>0UL) && (dwTemp&PMT_CTRL_PHY_RST_));
  if(dwTemp&PMT_CTRL_PHY_RST_) {
#ifdef SMC_DEBUG
    OS_TEXT_OUT("PHY reset failed to complete.\n");
#endif
    goto DONE;
  }

  Phy_SetLink(netp);

  /* schedule Phy_CheckLink() to run every second */
  SetRegDW(dwLanBase,GPT_CFG,10000UL | GPT_CFG_TIMER_EN_);
  Lan_EnableInterrupt(dwLanBase,INT_EN_GPT_INT_EN_);

  result=TRUE;
DONE:
#ifdef SMC_DEBUG
  sprintf (buffer, "<--Phy_Initialize, result=%s\n",result?"TRUE":"FALSE");
  OS_TEXT_OUT (buffer);
#endif
  return result;
}

/*
 * Lan_StopGptTimer() disable Lan9118 Gpt Timer
 */
void Lan_StopGptTimer (const DWORD dwLanBase)
{
	SetRegDW(dwLanBase,GPT_CFG,0UL);
}

/*
FUNCTION: Lan_EnableInterrupt
  Enables bits in INT_EN according to the set bits in dwMask
  WARNING this has thread synchronization issues. Use with caution.
*/
void Lan_EnableInterrupt(const DWORD dwLanBase,const DWORD dwMask)
{
	DWORD dwTemp;
	dwTemp=GetRegDW(dwLanBase, INT_EN);
	dwTemp|=dwMask;
	SetRegDW(dwLanBase,INT_EN,dwTemp);
}

/*
FUNCTION: Lan_GetInterruptStatus
  Reads and returns the value in the INT_STS register.
*/
DWORD Lan_GetInterruptStatus(const DWORD dwLanBase)
{
	return GetRegDW(dwLanBase,INT_STS);
}

/*
FUNCTION: Lan_ClearInterruptStatus
  Clears the bits in INT_STS according to the bits set in dwMask
*/
void Lan_ClearInterruptStatus(const DWORD dwLanBase,const DWORD dwMask)
{
	SetRegDW(dwLanBase,INT_STS,dwMask);
}

/*
FUNCTION: Lan_InitializeInterrupts
  Should be called after Lan_Initialize
  Should be called before the ISR is registered.
*/
void Lan_InitializeInterrupts(const DWORD dwLanBase,DWORD dwIntCfg)
{
	SetRegDW(dwLanBase,INT_EN,0UL);
	SetRegDW(dwLanBase,INT_STS,0xFFFFFFFFUL);
	dwIntCfg|=INT_CFG_IRQ_EN_;
	SetRegDW(dwLanBase,INT_CFG,dwIntCfg);
}

/*
FUNCTION: Lan_EnableSoftwareInterrupt
  Clears a flag in the LAN9118_DATA structure
  Sets the SW_INT_EN bit of the INT_EN register
  WARNING this has thread sychronization issues. Use with caution.
*/
void Lan_EnableSoftwareInterrupt(const DWORD dwLanBase)
{
	DWORD dwTemp=0UL;
	dwTemp=GetRegDW(dwLanBase,INT_EN);
	dwTemp|=INT_EN_SW_INT_EN_;
	SetRegDW(dwLanBase,INT_EN,dwTemp);
}

/*
FUNCTION: Lan_HandleSoftwareInterrupt
  Disables the SW_INT_EN bit of the INT_EN register,
  Clears the SW_INT in the INT_STS,
  Sets a flag in the LAN9118_DATA structure
*/
void Lan_HandleSoftwareInterrupt(const DWORD dwLanBase)
{
	DWORD dwTemp=0UL;
	dwTemp=GetRegDW(dwLanBase,INT_EN);
	dwTemp&=~(INT_EN_SW_INT_EN_);
	SetRegDW(dwLanBase,INT_EN,dwTemp);
	SetRegDW(dwLanBase,INT_STS,INT_STS_SW_INT_);
}

/*
FUNCTION: Lan_SetMacAddress sets the Mac Address
*/
void Lan_SetMacAddress(const DWORD dwLanBase,DWORD dwHigh16,DWORD dwLow32)
{
	Lan_SetMacRegDW(dwLanBase,ADDRH,dwHigh16);
	Lan_SetMacRegDW(dwLanBase,ADDRL,dwLow32);
}

/*
FUNCTION: Lan_GetMacAddress gets the Mac Address
*/
void Lan_GetMacAddress(const DWORD dwLanBase,DWORD *dwHigh16,DWORD *dwLow32)
{
	(*dwHigh16)=Lan_GetMacRegDW(dwLanBase,ADDRH);
	(*dwLow32)=Lan_GetMacRegDW(dwLanBase,ADDRL);
}

/*
FUNCTION: Lan_InitializeTx
  Prepares the LAN9118 for transmission of packets
  must be called before 
	Lan_SendPacketPIO
	Lan_CompleteTx
*/
void Lan_InitializeTx(const DWORD dwLanBase)
{
	DWORD dwRegVal=0UL;

	/* setup MAC for TX */
	dwRegVal=Lan_GetMacRegDW(dwLanBase,MAC_CR);
	dwRegVal|=(MAC_CR_TXEN_ | MAC_CR_HBDIS_);
	Lan_SetMacRegDW(dwLanBase,MAC_CR,dwRegVal);

	/*setup TLI store-and-forward, and preserve TxFifo size */
	dwRegVal=GetRegDW(dwLanBase,HW_CFG);
	dwRegVal&=(HW_CFG_TX_FIF_SZ_|0x00000FFFUL);
	dwRegVal|=HW_CFG_SF_;
	SetRegDW(dwLanBase,HW_CFG,dwRegVal);

	SetRegDW(dwLanBase,TX_CFG,TX_CFG_TX_ON_);

	SetRegDW(dwLanBase,FIFO_INT,0xFF000000UL);
	Lan_EnableInterrupt(dwLanBase,INT_EN_TDFA_EN_);
}

/*
FUNCTION: Lan_SendPacketPIO
  Sends a specified packet out on the ethernet line.
  Must first call Lan_InitializeTx
  WARNING: wPacketTag must not be 0. Zero is reserved.
*/
void Lan_SendPacketPIO(
	const DWORD dwLanBase,
	const NGushort wPacketTag,
	const NGushort wPacketLength,
	NGubyte *pbPacketData)
{
	DWORD dwTxCmdA;
	DWORD dwTxCmdB;

#ifdef SMC_DEBUG 
	if(wPacketTag==0) {
		OS_TEXT_OUT ("Lan_SendPacketPIO(wPacketTag==0) Zero is reserved\n");
	}
#endif

	dwTxCmdA=(
		((((DWORD)pbPacketData)&0x03UL)<<16) | /*DWORD alignment adjustment */
		TX_CMD_A_FIRST_SEG_ | TX_CMD_A_LAST_SEG_ | 
		((DWORD)wPacketLength));
	dwTxCmdB=
		(((DWORD)wPacketTag)<<16) | 
		((DWORD)wPacketLength);
	SetRegDW(dwLanBase,TX_DATA_FIFO_PORT,dwTxCmdA);
	SetRegDW(dwLanBase,TX_DATA_FIFO_PORT,dwTxCmdB);
	Lan_WriteTxFifo(
		dwLanBase,
		(DWORD *)(((DWORD)pbPacketData)&0xFFFFFFFCUL),
		((DWORD)wPacketLength+3UL+
		(((DWORD)pbPacketData)&0x03UL))>>2);
}

/*
FUNCTION: Lan_CompleteTx
  Gets the Status DWORD of a previous transmission from the TX status FIFO
  If the TX Status FIFO is empty as indicated by TX_FIFO_INF then this
    function will return 0
*/
DWORD Lan_CompleteTx(const DWORD dwLanBase)
{
	DWORD result;
	result=GetRegDW(dwLanBase,TX_FIFO_INF);
	result&=TX_FIFO_INF_TSUSED_;
	if(result!=0x00000000UL) {
		result=GetRegDW(dwLanBase,TX_STATUS_FIFO_PORT);
	} else {
		result=0UL;
	}
	return result;
}

/*
FUNCTION: Lan_GetTxStatusCount
  Gets the number of TX completion status' available on the TX_STATUS_FIFO
  These can be read from Lan_CompleteTx
*/
DWORD Lan_GetTxStatusCount(const DWORD dwLanBase)
{
	DWORD result;
	result=GetRegDW(dwLanBase,TX_FIFO_INF);
	result&=TX_FIFO_INF_TSUSED_;
	result>>=16;
	return result;
}

/*
FUNCTION: Lan_GetTxDataFreeSpace
  Gets the free space available in the TX fifo
*/
DWORD Lan_GetTxDataFreeSpace(const DWORD dwLanBase)
{
	DWORD result;
	result=GetRegDW(dwLanBase,TX_FIFO_INF);
	result&=TX_FIFO_INF_TDFREE_;
	return result;
}

/*
FUNCTION: Lan_InitializeRx
  Prepares the LAN9118 for reception of packets
  Must be called After Lan_InitializeInterrupts
*/
void Lan_InitializeRx(const DWORD dwLanBase,const DWORD dwRxCfg)
{
	DWORD dwRegVal=0UL;

	/*set receive configuration */
	SetRegDW(dwLanBase,RX_CFG,dwRxCfg);

	/*enable receiver */
	dwRegVal=Lan_GetMacRegDW(dwLanBase,MAC_CR);
	dwRegVal|=MAC_CR_RXEN_;
	Lan_SetMacRegDW(dwLanBase,MAC_CR,dwRegVal);


	/*set the interrupt levels to zero */
	dwRegVal=GetRegDW(dwLanBase,FIFO_INT);
	dwRegVal&=0xFFFF0000UL;
	SetRegDW(dwLanBase,FIFO_INT,dwRegVal);

	/*enable interrupt */
	Lan_EnableInterrupt(dwLanBase,INT_EN_RSFL_EN_);
}

/*
FUNCTION: Lan_PopRxStatus
  If an Rx Status DWORD is available it will return it.
*/

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品一区二区三区视频在线观看 | 亚洲午夜免费电影| 久久久电影一区二区三区| 精品国产成人在线影院| 精品国产凹凸成av人导航| xfplay精品久久| 久久久久久久久岛国免费| 国产欧美一区二区精品久导航| 久久久久国产免费免费| 中文字幕乱码亚洲精品一区 | 成人午夜在线免费| 国产成人aaa| 成人动漫一区二区在线| 一本大道久久a久久综合| 一本到不卡精品视频在线观看| 在线观看视频欧美| 欧美熟乱第一页| 日韩一区二区影院| 久久久久国产免费免费| 国产精品美女一区二区在线观看| 亚洲欧美综合在线精品| 夜夜嗨av一区二区三区四季av| 亚洲成a人v欧美综合天堂| 日日夜夜精品视频天天综合网| 久久精品久久综合| 国产成人在线视频网站| 97久久超碰国产精品电影| 欧美三区免费完整视频在线观看| 91精品国产综合久久久久久久久久 | 中文字幕在线观看不卡| 亚洲精品久久7777| 久久精品国产免费看久久精品| 国产高清在线精品| 在线免费av一区| 欧美一二三四区在线| 中文字幕免费在线观看视频一区| 亚洲欧美国产三级| 蜜臀av一级做a爰片久久| 懂色av一区二区夜夜嗨| 欧美日韩国产在线观看| 久久久久国产成人精品亚洲午夜 | 久久精品久久精品| av色综合久久天堂av综合| 欧美伦理视频网站| 国产色产综合色产在线视频| 亚洲综合激情另类小说区| 久久国产精品色| 91片在线免费观看| 麻豆成人91精品二区三区| 久久久久久一二三区| 国产精品理论片| 天堂影院一区二区| 成人黄色av电影| 91精品国模一区二区三区| 日本一区二区综合亚洲| 三级一区在线视频先锋 | 99久免费精品视频在线观看| 欧美日韩的一区二区| 国产精品私人自拍| 奇米777欧美一区二区| 99精品欧美一区| 久久免费精品国产久精品久久久久| 一区二区三区在线观看视频| 国产精品综合一区二区三区| 欧美日韩一区二区三区不卡| 亚洲国产精品精华液ab| 日本欧美大码aⅴ在线播放| 99精品久久免费看蜜臀剧情介绍| 日韩欧美成人一区二区| 亚洲国产视频一区二区| 成人久久久精品乱码一区二区三区| 欧美老女人在线| 一区二区三区日韩在线观看| 粉嫩嫩av羞羞动漫久久久| 日韩欧美电影一二三| 性感美女久久精品| 色老头久久综合| 国产精品伦一区| 国产美女视频一区| 欧美变态tickle挠乳网站| 午夜精品一区在线观看| 日本韩国一区二区三区视频| 国产精品毛片大码女人| 国产成人综合在线观看| 久久网站最新地址| 麻豆中文一区二区| 在线电影院国产精品| 亚洲成人一区二区| 欧洲国内综合视频| 亚洲精品视频在线观看网站| 成人av资源下载| 中文字幕免费观看一区| 国产白丝网站精品污在线入口| 日韩欧美高清在线| 久久er99热精品一区二区| 91精品国产aⅴ一区二区| 五月天网站亚洲| 69成人精品免费视频| 日韩va欧美va亚洲va久久| 在线成人av网站| 偷拍日韩校园综合在线| 欧美日本在线播放| 性欧美疯狂xxxxbbbb| 6080国产精品一区二区| 午夜免费欧美电影| 91精品午夜视频| 青青草国产精品97视觉盛宴| 日韩欧美亚洲一区二区| 激情欧美一区二区| 国产亚洲污的网站| 成人av免费网站| 中文字幕中文字幕一区| 色综合久久88色综合天天免费| 亚洲区小说区图片区qvod| 91久久精品一区二区三| 亚洲成人一区二区在线观看| 51午夜精品国产| 久久成人久久鬼色| 国产欧美一区二区三区鸳鸯浴 | 日韩经典一区二区| 日韩视频123| 国产老肥熟一区二区三区| 国产精品国产三级国产三级人妇 | 欧美日韩一区二区在线观看视频| 天天av天天翘天天综合网色鬼国产 | av在线一区二区三区| 亚洲人吸女人奶水| 欧美体内she精高潮| 男女视频一区二区| 国产亚洲一区二区三区在线观看 | 7777精品久久久大香线蕉| 久久激情综合网| 国产蜜臀97一区二区三区| 色视频一区二区| 热久久国产精品| 中文av一区特黄| 欧美亚洲动漫另类| 韩国理伦片一区二区三区在线播放| 国产午夜精品一区二区三区视频| 一本一本大道香蕉久在线精品| 日韩电影免费在线看| 久久久久久麻豆| 欧美日韩专区在线| 国产一本一道久久香蕉| 一区二区三区免费| 久久久无码精品亚洲日韩按摩| 一本到高清视频免费精品| 六月丁香婷婷色狠狠久久| 亚洲欧洲美洲综合色网| 91精品中文字幕一区二区三区| 成人性生交大片免费看中文| 视频一区欧美日韩| 欧美国产综合色视频| 欧美日韩日日摸| 成人免费毛片app| 免费人成精品欧美精品 | 国产激情精品久久久第一区二区 | 欧美日韩国产区一| 国产精品一区二区在线看| 亚洲一区二区三区美女| 久久久久久**毛片大全| 欧美日韩精品福利| 成人小视频在线观看| 五月天激情小说综合| 国产精品久久久久精k8| 欧美mv日韩mv亚洲| 精品视频123区在线观看| 成人免费电影视频| 五月激情综合色| 一区二区三区久久久| 欧美国产精品v| 精品国产免费久久| 欧美午夜电影网| 99精品偷自拍| 成人爽a毛片一区二区免费| 麻豆精品视频在线观看视频| 亚洲小说欧美激情另类| 国产精品日日摸夜夜摸av| 久久综合久久综合久久| 制服丝袜亚洲网站| 91国产成人在线| 91视频国产资源| 国产不卡视频在线播放| 国产剧情在线观看一区二区| 麻豆精品视频在线| 日韩av一区二区在线影视| 亚洲韩国一区二区三区| 综合在线观看色| 中文字幕日韩av资源站| 中文字幕高清不卡| 精品欧美一区二区久久 | 一区二区三区视频在线看| 国产精品久久久久9999吃药| 久久精品网站免费观看| 3d成人动漫网站| 欧美视频三区在线播放| 欧美综合久久久| 欧美在线观看一二区| 在线看一区二区| 欧美视频完全免费看|