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

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

?? lan9118.c

?? Lan9118以太網芯片linux驅動程序
?? C
?? 第 1 頁 / 共 4 頁
字號:


	/* wait for read to complete w/ timeout
 */
	for(i = 0U; i < 100U; i++) {

		/* see if MII is finished yet
 */
		if ((Lan_GetMacRegDW(dwLanBase, MII_ACC) & MII_ACC_MII_BUSY_) == 0UL)

		{

			/* get the read data from the MAC & return i
 */
			result=((NGushort)Lan_GetMacRegDW(dwLanBase, MII_DATA));

			goto DONE;

		}

	}

#ifdef SMC_DEBUG
	OS_TEXT_OUT ("timeout waiting for MII write to finish\n");

#endif


DONE:

	ngOSIntrCtl(ictrl);
	return result;

}

/* Phy_SetRegW () writes a 16-bit phy register values */
void Phy_SetRegW(
	const NGifnet * const netp,
	const DWORD dwRegIndex, NGushort wVal)
{
	PLAN9118_DATA pLan9118Data;
	DWORD dwLanBase;
	int ictrl;	/* save previous interrupt state */
	DWORD dwAddr=0UL;
	NGuint i=0U;

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

	ictrl = ngOSIntrCtl(NG_INTRCTL_DISABLE);

	if(dwRegIndex==0UL) {

		if((wVal&0x1200)==0x1200) {

			pLan9118Data->wLastADVatRestart=pLan9118Data->wLastADV;

		}

	}

	if(dwRegIndex==4UL) {

		pLan9118Data->wLastADV=wVal;

	}



	/* confirm MII not busy
 */
	if ((Lan_GetMacRegDW(dwLanBase, MII_ACC) & MII_ACC_MII_BUSY_) != 0UL)

	{

#ifdef SMC_DEBUG
		OS_TEXT_OUT ("MII is busy in Phy_SetRegW???\n");

#endif
		goto DONE;

	}



	/* put the data to write in the MAC
 */
	Lan_SetMacRegDW(dwLanBase, MII_DATA, (DWORD)wVal);



	/* set the address, index & direction (write to PHY)
 */
	dwAddr = ((pLan9118Data->dwPhyAddress&0x1FUL)<<11) | ((dwRegIndex & 0x1FUL)<<6) | MII_ACC_MII_WRITE_;

	Lan_SetMacRegDW(dwLanBase, MII_ACC, dwAddr);



	/* wait for write to complete w/ timeout
 */
	for(i = 0U; i < 100U; i++) {

		/* see if MII is finished yet
 */
		if ((Lan_GetMacRegDW(dwLanBase, MII_ACC) & MII_ACC_MII_BUSY_) == 0UL)

		{

			goto DONE;

		}

	}

#ifdef SMC_DEBUG
	OS_TEXT_OUT ("timeout waiting for MII write to finish\n");

#endif
DONE:

	ngOSIntrCtl(ictrl);
}


#ifdef SMC_DEBUG
typedef struct _SHOW_REG
{
	NGubyte  szName[20];
	DWORD dwOffset;
} SHOW_REG;

/*
FUNCTION: Lan_ShowRegs
    This function is used to display the registers. 
	Except the phy.
*/
void Lan_ShowRegs(const DWORD dwLanBase)
{
	/*	Make these const struct's static to keep them off the stack.
		Otherwise, gcc will try to use _memcpy() to initialize them,
		which will *NOT* work in our RunTime environment.
	*/
	static const SHOW_REG sysCsr[] = {
		{ "ID_REV",		ID_REV		},
		{ "INT_CFG",		INT_CFG		},
		{ "INT_STS",		INT_STS		},
		{ "INT_EN",		INT_EN		},
		{ "BYTE_TEST",		BYTE_TEST	},
		{ "FIFO_INT",		FIFO_INT	},
		{ "RX_CFG",		RX_CFG		},
		{ "TX_CFG",		TX_CFG		},
		{ "HW_CFG",		HW_CFG		},
		{ "RX_DP_CTL",		RX_DP_CTRL	},
		{ "RX_FIFO_INF",	RX_FIFO_INF	},
		{ "TX_FIFO_INF",	TX_FIFO_INF	},
		{ "PMT_CTRL",		PMT_CTRL	},
		{ "GPIO_CFG",		GPIO_CFG	},
		{ "GPT_CFG",		GPT_CFG		},
		{ "GPT_CNT",		GPT_CNT		},
		{ "ENDIAN",		ENDIAN		},
		{ "FREE_RUN",		FREE_RUN	},
		{ "RX_DROP",		RX_DROP		},
		{ "MAC_CSR_CMD",	MAC_CSR_CMD	},
		{ "MAC_CSR_DATA",	MAC_CSR_DATA},
		{ "AFC_CFG",		AFC_CFG		},
		{ "E2P_CMD",		E2P_CMD		},
		{ "E2P_DATA",		E2P_DATA	},
		{ "TEST_REG_A",		TEST_REG_A	}};

	static const SHOW_REG macCsr[] = {
		{ "MAC_CR",		MAC_CR		},
		{ "ADDRH",		ADDRH		},
		{ "ADDRL",		ADDRL		},
		{ "HASHH",		HASHH		},
		{ "HASHL",		HASHL		},
		{ "MII_ACC",		MII_ACC		},
		{ "MII_DATA",		MII_DATA	},
		{ "FLOW",		FLOW		},
		{ "VLAN1",		VLAN1		},
		{ "VLAN2",		VLAN2		},
		{ "WUFF",		WUFF		},
		{ "WUCSR",		WUCSR		}};

	NGuint i, iNumSysRegs, iNumMacRegs;
	DWORD dwOldMacCmdReg, dwOldMacDataReg;
	char buf [256];

	iNumSysRegs = (sizeof(sysCsr) / sizeof(SHOW_REG));
	iNumMacRegs = (sizeof(macCsr) / sizeof(SHOW_REG));

	/* preserve MAC cmd/data reg's */
	dwOldMacCmdReg = GetRegDW(dwLanBase, MAC_CSR_CMD);
	dwOldMacDataReg = GetRegDW(dwLanBase, MAC_CSR_DATA);

	OS_TEXT_OUT ("\n");
	OS_TEXT_OUT ("               LAN91C118 CSR's\n");
	OS_TEXT_OUT ("                     SYS CSR's                     MAC CSR's\n");

	for (i = 0U; i < iNumMacRegs; i++)
	{
		sprintf (buf,	
			"%16s (0x%02lX) = 0x%08lX, %8s (0x%02lX) + 0x%08lX\n",
			sysCsr[i].szName, 
			sysCsr[i].dwOffset, 
			GetRegDW(dwLanBase, sysCsr[i].dwOffset),
			macCsr[i].szName, 
			macCsr[i].dwOffset, 
			Lan_GetMacRegDW(dwLanBase, macCsr[i].dwOffset));
		OS_TEXT_OUT (buf);

		/* restore original mac cmd/data reg's after each usage */
		SetRegDW(dwLanBase, MAC_CSR_CMD, dwOldMacCmdReg);
		SetRegDW(dwLanBase, MAC_CSR_DATA, dwOldMacDataReg);
	}

	for (i=iNumMacRegs; i<iNumSysRegs; i++)
	{
		sprintf (buf, "%16s (0x%02lX) = 0x%08lX\n", 
			sysCsr[i].szName, 
			sysCsr[i].dwOffset, 
			GetRegDW(dwLanBase, sysCsr[i].dwOffset));
		OS_TEXT_OUT (buf);
	}
}
#endif

/*
FUNCTION: Lan_Initialize
  This function should be the first Lan_xxx function called
  It begins to initialize the LAN9118_DATA structure.
  It reads some ID values from the chip.
  It resets the chip.

RETURN VALUE:
	returns TRUE on Success,
	returns FALSE on Failure,
*/
BOOLEAN Lan_Initialize(const NGifnet * const netp)
{
	PLAN9118_DATA pLan9118Data;
	BOOLEAN result=FALSE;
	DWORD dwIdRev=0UL;
	DWORD dwTimeout;
	DWORD dwTemp;
	DWORD dwLanBase;
#ifdef SMC_DEBUG
	char buf [256];
#endif

	pLan9118Data = (PLAN9118_DATA) netp->if_devptr1;
	dwLanBase = (DWORD) NG_ETHIF_DATA(((void *) netp), eif_base);
#ifdef SMC_DEBUG
	sprintf (buf, "-->Lan_Initialize(dwLanBase=0x%08lX,pLan9118Data=0x%08lX)\n",
		dwLanBase,(DWORD)pLan9118Data);
	OS_TEXT_OUT (buf);
#endif

	if(pLan9118Data==NULL) {
		goto DONE;
	}

	ngMemSet ((void *) pLan9118Data, 0, sizeof(LAN9118_DATA));

	dwIdRev=GetRegDW(dwLanBase,ID_REV);

	SetRegDW(dwLanBase,HW_CFG,HW_CFG_SRST_);
	dwTimeout=1000UL;
	do {
		dwTemp=GetRegDW(dwLanBase,HW_CFG);
		dwTimeout--;
	} while((dwTimeout > 0UL) && (dwTemp & HW_CFG_SRST_));
	if(dwTemp&HW_CFG_SRST_) {
#ifdef SMC_DEBUG
		OS_TEXT_OUT("  Failed to complete reset.\n");
#endif
		goto DONE;
	}

	pLan9118Data->dwIdRev=dwIdRev;
	pLan9118Data->GpioSetting=0x00170700UL;

	SetRegDW(dwLanBase,HW_CFG,0x00050000UL);
	SetRegDW(dwLanBase,AFC_CFG,0x006E3740UL);

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

/* Phy_SetLink(netp) does link management settings */
void Phy_SetLink(const NGifnet * const netp)
{
	if(NG_ETHIF_DATA(((void *) netp), eif_flags) & NG_ETHIFF_AUTONEG) {
		NGushort wTemp;
		NGushort eif_linkadv;

		wTemp=Phy_GetRegW(netp, PHY_ANEG_ADV);
		wTemp = (NGushort) (wTemp & (~PHY_ANEG_ADV_PAUSE_));
		wTemp=(NGushort) (wTemp | PHY_ANEG_ADV_ASYMP_);
		wTemp=(NGushort) (wTemp | PHY_ANEG_ADV_SYMP_);
		wTemp= (NGushort) (wTemp & (~PHY_ANEG_ADV_SPEED_));
		eif_linkadv = GetLinkAdv (netp);
		if(eif_linkadv & NG_ETHIF_AUTONEG_10BASET) {
			wTemp=(NGushort) (wTemp | PHY_ANEG_ADV_10H_);
		}
		if(eif_linkadv & NG_ETHIF_AUTONEG_10BASET_FD) {
			wTemp=(NGushort) (wTemp | PHY_ANEG_ADV_10F_);
		}
		if(eif_linkadv & NG_ETHIF_AUTONEG_100BASETX) {
			wTemp=(NGushort) (wTemp | PHY_ANEG_ADV_100H_);
		}
		if(eif_linkadv & NG_ETHIF_AUTONEG_100BASETX_FD) {
			wTemp=(NGushort) (wTemp | PHY_ANEG_ADV_100F_);
		}
		Phy_SetRegW(netp,PHY_ANEG_ADV,wTemp);

		/* begin to establish link */
		Phy_SetRegW(netp, PHY_BCR,
			(NGushort) (PHY_BCR_AUTO_NEG_ENABLE_|
			PHY_BCR_RESTART_AUTO_NEG_));
	} else {	// non-autonegotiate
		NGubyte eif_linkcfg;
		NGushort wTemp=(NGushort) 0;

		eif_linkcfg = GetLinkCfg (netp);
		if((eif_linkcfg == NG_ETHIF_LINK_10BASET_FD) || (eif_linkcfg == NG_ETHIF_LINK_100BASETX_FD)) {
			wTemp=(NGushort) (wTemp | PHY_BCR_DUPLEX_MODE_);
		}
		if((eif_linkcfg == NG_ETHIF_LINK_100BASETX) || (eif_linkcfg == NG_ETHIF_LINK_100BASETX_FD)) {
			wTemp=(NGushort) (wTemp | PHY_BCR_SPEED_SELECT_);
		}
        	Phy_SetRegW(netp,PHY_BCR,wTemp);
	}
}

/* Phy_GetLinkMode(netp) reads the current link settings */
void Phy_GetLinkMode(const NGifnet * const netp)
{
	const LAN9118_DATA *pLan9118Data;
	NGushort wRegVal=(NGushort) 0;
	const NGushort wRegBSR=Phy_GetRegW(netp, PHY_BSR);

	pLan9118Data = (PLAN9118_DATA) netp->if_devptr1;

	SetLink (netp, (NGubyte) NG_ETHIF_LINK_DOWN);
	if(wRegBSR&PHY_BSR_LINK_STATUS_) {
		wRegVal=Phy_GetRegW(netp, PHY_BCR);
		if(wRegVal&PHY_BCR_AUTO_NEG_ENABLE_) {
			const NGushort wRegADV=pLan9118Data->wLastADVatRestart;
			NGushort wRegLPA=Phy_GetRegW(netp, PHY_ANEG_LPA);

			wRegLPA=(NGushort) (wRegLPA & wRegADV);
			if(wRegLPA&PHY_ANEG_LPA_100FDX_) {
				SetLink (netp, (NGubyte) NG_ETHIF_LINK_100BASETX_FD);
			} else if(wRegLPA&PHY_ANEG_LPA_100HDX_) {
				SetLink (netp, (NGubyte) NG_ETHIF_LINK_100BASETX);
			} else if(wRegLPA&PHY_ANEG_LPA_10FDX_) {
				SetLink (netp, (NGubyte) NG_ETHIF_LINK_10BASET_FD);
			} else if(wRegLPA&PHY_ANEG_LPA_10HDX_) {
				SetLink (netp, (NGubyte) NG_ETHIF_LINK_10BASET);
			}
			else {
			}
		} else {
			if(wRegVal&PHY_BCR_SPEED_SELECT_) {
				if(wRegVal&PHY_BCR_DUPLEX_MODE_) {
					SetLink (netp, (NGubyte) NG_ETHIF_LINK_100BASETX_FD);
				} else {
					SetLink (netp, (NGubyte) NG_ETHIF_LINK_100BASETX);
				}
			} else {
				if(wRegVal&PHY_BCR_DUPLEX_MODE_) {
					SetLink (netp, (NGubyte) NG_ETHIF_LINK_10BASET_FD);
				} else {
					SetLink (netp, (NGubyte) NG_ETHIF_LINK_10BASET);
				}
			}
		}
	}
}

/* Phy_UpdateLinkMode(netp) detects any link changes */
void Phy_UpdateLinkMode(const NGifnet * const netp)
{
#ifdef SMC_DEBUG
	char buffer [256];
#endif
	DWORD dwLanBase;
	DWORD dwTemp;
 	NGubyte bOldLink, bNewLink;

	dwLanBase = (DWORD) NG_ETHIF_DATA(((void *) netp), eif_base);

	bOldLink = GetLink (netp);
	Phy_GetLinkMode(netp);
	bNewLink = GetLink (netp);

	if(bOldLink != bNewLink) {
		if(bNewLink != NG_ETHIF_LINK_DOWN) {
			DWORD dwRegVal=0UL;
			switch(bNewLink) {
			case NG_ETHIF_LINK_10BASET:
#ifdef SMC_DEBUG
				OS_TEXT_OUT ("Link is now UP at 10Mbps HD\n");
#endif
				break;
			case NG_ETHIF_LINK_10BASET_FD:
#ifdef SMC_DEBUG
				OS_TEXT_OUT ("Link is now UP at 10Mbps FD\n");
#endif
				break;
			case NG_ETHIF_LINK_100BASETX:
#ifdef SMC_DEBUG
				OS_TEXT_OUT ("Link is now UP at 100Mbps HD\n");
#endif
				break;
			case NG_ETHIF_LINK_100BASETX_FD:
#ifdef SMC_DEBUG
				OS_TEXT_OUT ("Link is now UP at 100Mbps FD\n");
#endif
				break;
			default:
#ifdef SMC_DEBUG
				sprintf (buffer, "Link is now UP at Unknown Link Speed, eif_link=0x%08lX\n",
					bNewLink);
				OS_TEXT_OUT (buffer);
#endif
				break;
			}

			dwRegVal=Lan_GetMacRegDW(dwLanBase,MAC_CR);
			dwRegVal&=~(MAC_CR_FDPX_|MAC_CR_RCVOWN_);
			switch(bNewLink) {
			  case NG_ETHIF_LINK_10BASET:
			  case NG_ETHIF_LINK_100BASETX:
				dwRegVal|=MAC_CR_RCVOWN_;
				break;
			  case NG_ETHIF_LINK_10BASET_FD:
			  case NG_ETHIF_LINK_100BASETX_FD:
				dwRegVal|=MAC_CR_FDPX_;
				break;
			  default:	
				break;
			}

			Lan_SetMacRegDW(dwLanBase, MAC_CR,dwRegVal);

			if(NG_ETHIF_DATA(((void *) netp), eif_flags) & NG_ETHIFF_AUTONEG) {
				NGushort linkPartner=(NGushort) 0;
				NGushort localLink=(NGushort) 0;
				localLink=Phy_GetRegW(netp,4UL);
				linkPartner=Phy_GetRegW(netp,5UL);
				switch(bNewLink) {
			  	case NG_ETHIF_LINK_10BASET_FD:
			  	case NG_ETHIF_LINK_100BASETX_FD:
					if(((localLink&linkPartner)&((NGushort)0x0400U)) != ((NGushort)0U)) {
						/* Enable PAUSE receive and transmit
 */
						Lan_SetMacRegDW(dwLanBase,FLOW,0xFFFF0002UL);
						dwTemp = GetRegDW(dwLanBase,AFC_CFG);
						dwTemp |= 0x0000000FUL;
						SetRegDW(dwLanBase,AFC_CFG,dwTemp);
					} else if(((localLink&((NGushort)0x0C00U))==((NGushort)0x0C00U)) &&
							((linkPartner&((NGushort)0x0C00U))==((NGushort)0x0800U)))
					{
						/* Enable PAUSE receive, disable PAUSE transmit
 */
						Lan_SetMacRegDW(dwLanBase,FLOW,0xFFFF0002UL);

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

						SetRegDW(dwLanBase,AFC_CFG,dwTemp);
					} else {

						/* Disable PAUSE receive and transmit
 */
						Lan_SetMacRegDW(dwLanBase,FLOW,0UL);

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

						SetRegDW(dwLanBase,AFC_CFG,dwTemp);
					};break;

			  	case NG_ETHIF_LINK_10BASET:
			  	case NG_ETHIF_LINK_100BASETX:
					Lan_SetMacRegDW(dwLanBase,FLOW,0UL);

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

					SetRegDW(dwLanBase,AFC_CFG,dwTemp);
					break;

				default:
					break;

				}

#ifdef SMC_DEBUG
				sprintf (buffer, "LAN9118: %s,%s,%s,%s,%s,%s",


					(localLink&PHY_ANEG_ADV_ASYMP_)?"ASYMP":"     ",

					(localLink&PHY_ANEG_ADV_SYMP_)?"SYMP ":"     ",

					(localLink&PHY_ANEG_ADV_100F_)?"100FD":"     ",

					(localLink&PHY_ANEG_ADV_100H_)?"100HD":"     ",

					(localLink&PHY_ANEG_ADV_10F_)?"10FD ":"     ",

					(localLink&PHY_ANEG_ADV_10H_)?"10HD ":"     ");

				OS_TEXT_OUT (buffer);
	

				sprintf (buffer, "Partner: %s,%s,%s,%s,%s,%s",

					(linkPartner&PHY_ANEG_LPA_ASYMP_)?"ASYMP":"     ",

					(linkPartner&PHY_ANEG_LPA_SYMP_)?"SYMP ":"     ",

					(linkPartner&PHY_ANEG_LPA_100FDX_)?"100FD":"     ",

					(linkPartner&PHY_ANEG_LPA_100HDX_)?"100HD":"     ",

					(linkPartner&PHY_ANEG_LPA_10FDX_)?"10FD ":"     ",

					(linkPartner&PHY_ANEG_LPA_10HDX_)?"10HD ":"     ");

				OS_TEXT_OUT (buffer);
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久av毛片精品| 欧美福利视频一区| 日韩二区三区四区| 国产精品乱码妇女bbbb| 日韩亚洲国产中文字幕欧美| 91视频观看视频| 国产精品影视天天线| 亚洲在线视频网站| 国产精品久久久久久久久快鸭 | 成a人片国产精品| 日韩av一区二区三区| 亚洲视频1区2区| 欧美激情一区三区| 精品第一国产综合精品aⅴ| 欧美日韩一区二区在线观看视频 | 一区免费观看视频| 欧美成人艳星乳罩| 欧美电影影音先锋| 色吧成人激情小说| gogogo免费视频观看亚洲一| 国产麻豆精品在线| 九一久久久久久| 五月天激情综合| 一区二区三区毛片| 中文字幕在线播放不卡一区| 国产亚洲欧洲一区高清在线观看| 制服.丝袜.亚洲.另类.中文| 欧美午夜精品一区二区蜜桃 | a4yy欧美一区二区三区| 国产精品一品二品| 国产又黄又大久久| 国内精品久久久久影院一蜜桃| 五月开心婷婷久久| 午夜在线成人av| 午夜激情久久久| 亚洲高清在线精品| 天堂va蜜桃一区二区三区漫画版| 一区二区三区中文在线| 亚洲男女一区二区三区| 亚洲欧美一区二区久久 | 五月开心婷婷久久| 日韩av中文字幕一区二区 | 国产精品综合一区二区| 黑人精品欧美一区二区蜜桃| 麻豆成人91精品二区三区| 日本成人在线视频网站| 五月激情六月综合| 日韩精品视频网站| 久久电影国产免费久久电影 | 色嗨嗨av一区二区三区| 欧美性极品少妇| 欧美另类变人与禽xxxxx| 欧美日本一道本| 日韩一区二区麻豆国产| 欧美成人女星排行榜| 久久精品日产第一区二区三区高清版 | 欧美影院一区二区| 欧美日韩在线播放三区四区| 日韩一区二区不卡| 久久久久久影视| 中文字幕中文在线不卡住| 国产精品卡一卡二卡三| 亚洲午夜av在线| 久久国产尿小便嘘嘘| 国产精品一区二区在线播放| 成人美女视频在线看| 色婷婷av一区二区三区软件| 欧美日韩免费高清一区色橹橹| 日韩小视频在线观看专区| 亚洲国产精品精华液ab| 亚洲一区二区三区四区在线观看 | 国产夫妻精品视频| 色综合久久99| 欧美一级二级三级蜜桃| 国产精品国产自产拍在线| 亚洲成人福利片| 国产精选一区二区三区| 欧美私人免费视频| 久久一二三国产| 一区二区三区精品在线观看| 美日韩一区二区三区| a级精品国产片在线观看| 欧美伦理影视网| 国产精品毛片久久久久久| 午夜精品aaa| eeuss影院一区二区三区 | 国产日韩欧美不卡| 亚洲国产成人tv| 亚洲人吸女人奶水| 成人欧美一区二区三区小说 | www.亚洲色图.com| 在线免费观看日韩欧美| 久久婷婷国产综合精品青草| 中文字幕在线不卡国产视频| 日韩中文欧美在线| 国产成人自拍网| 欧美午夜精品久久久久久孕妇| 制服丝袜成人动漫| 亚洲人成精品久久久久| 美女一区二区三区| 色综合久久99| 久久久久88色偷偷免费| 亚洲综合激情网| 国产91精品精华液一区二区三区 | 国产69精品久久99不卡| 91久久精品网| 日韩免费观看2025年上映的电影| 亚洲精品中文在线观看| 激情综合网av| 欧美视频在线一区二区三区| 久久久久国产免费免费| 日韩精品一二三| 国产电影一区二区三区| 日韩欧美国产一二三区| 亚洲免费观看高清完整版在线| 狠狠狠色丁香婷婷综合激情| 欧美偷拍一区二区| 亚洲欧洲日韩一区二区三区| 免费成人小视频| 666欧美在线视频| 亚洲色图在线看| 国产精品一区专区| 欧美一级片在线看| 亚洲乱码日产精品bd| 成人动漫一区二区三区| 精品福利一二区| 香蕉加勒比综合久久| 91色视频在线| 亚洲国产高清aⅴ视频| 麻豆高清免费国产一区| 日韩视频一区二区三区 | 久久99国内精品| 欧美日韩成人在线一区| 亚洲欧美日韩国产综合在线| 高潮精品一区videoshd| 久久精品一区二区三区不卡牛牛 | 成人国产精品免费| 久久久亚洲综合| 狠狠色丁香婷婷综合| 欧美一区二区三区在线观看| 亚洲综合久久久久| 99国产精品99久久久久久| 国产精品女上位| 成人自拍视频在线观看| 国产欧美日韩卡一| 日本午夜精品一区二区三区电影 | 在线观看免费一区| 一区二区不卡在线播放| 色综合久久久久久久久| 亚洲激情av在线| 在线观看免费亚洲| 亚洲国产精品久久久男人的天堂| 欧美老年两性高潮| 婷婷久久综合九色综合伊人色| 欧美日韩精品高清| 五月婷婷综合在线| 日韩三级电影网址| 一区二区三区在线观看动漫| 欧美日韩精品专区| 青青草国产精品97视觉盛宴| 91精品国产品国语在线不卡| 日韩av在线免费观看不卡| 欧美一区二区精品在线| 五月激情综合婷婷| 国产亚洲一本大道中文在线| 成人教育av在线| 亚洲视频一区在线观看| fc2成人免费人成在线观看播放| 久久久久久久精| 成人激情黄色小说| 亚洲精品va在线观看| 欧美精品在线视频| 精品一区二区三区在线视频| 久久久久久久综合狠狠综合| 色94色欧美sute亚洲线路一ni| 亚洲福利电影网| 日韩欧美一级精品久久| 国产伦精一区二区三区| 日韩一区欧美一区| 91久久久免费一区二区| 男女男精品网站| 中文av一区二区| 欧美色偷偷大香| 亚洲mv在线观看| 国产精品色呦呦| 欧美日韩国产小视频| 狠狠色丁香婷婷综合久久片| 国产精品的网站| www.成人网.com| 国产伦精一区二区三区| 一区二区三区日韩精品| 欧美一级欧美三级| www.性欧美| 国产成人在线观看| 亚洲chinese男男1069| 久久精品视频网| 欧美日韩精品一区二区三区蜜桃| 久久成人久久鬼色| 五月天欧美精品| 中文久久乱码一区二区|