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

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

?? e1000_80003es2lan.c

?? DELL755 Intel 網(wǎng)卡驅(qū)動
?? C
?? 第 1 頁 / 共 3 頁
字號:
	u16 temp;	DEBUGFUNC("e1000_read_phy_reg_gg82563_80003es2lan");	ret_val = e1000_acquire_phy_80003es2lan(hw);	if (ret_val)		goto out;	/* Select Configuration Page */	if ((offset & MAX_PHY_REG_ADDRESS) < GG82563_MIN_ALT_REG) {		page_select = GG82563_PHY_PAGE_SELECT;	} else {		/*		 * Use Alternative Page Select register to access		 * registers 30 and 31		 */		page_select = GG82563_PHY_PAGE_SELECT_ALT;	}	temp = (u16)((u16)offset >> GG82563_PAGE_SHIFT);	ret_val = e1000_write_phy_reg_mdic(hw, page_select, temp);	if (ret_val) {		e1000_release_phy_80003es2lan(hw);		goto out;	}	/*	 * The "ready" bit in the MDIC register may be incorrectly set	 * before the device has completed the "Page Select" MDI	 * transaction.  So we wait 200us after each MDI command...	 */	usec_delay(200);	/* ...and verify the command was successful. */	ret_val = e1000_read_phy_reg_mdic(hw, page_select, &temp);	if (((u16)offset >> GG82563_PAGE_SHIFT) != temp) {		ret_val = -E1000_ERR_PHY;		e1000_release_phy_80003es2lan(hw);		goto out;	}	usec_delay(200);	ret_val = e1000_read_phy_reg_mdic(hw,	                                 MAX_PHY_REG_ADDRESS & offset,	                                 data);	usec_delay(200);	e1000_release_phy_80003es2lan(hw);out:	return ret_val;}/** *  e1000_write_phy_reg_gg82563_80003es2lan - Write GG82563 PHY register *  @hw: pointer to the HW structure *  @offset: offset of the register to read *  @data: value to write to the register * *  Write to the GG82563 PHY register.  This is a function pointer entry *  point called by the api module. **/static s32 e1000_write_phy_reg_gg82563_80003es2lan(struct e1000_hw *hw,                                                   u32 offset, u16 data){	s32 ret_val;	u32 page_select;	u16 temp;	DEBUGFUNC("e1000_write_phy_reg_gg82563_80003es2lan");	ret_val = e1000_acquire_phy_80003es2lan(hw);	if (ret_val)		goto out;	/* Select Configuration Page */	if ((offset & MAX_PHY_REG_ADDRESS) < GG82563_MIN_ALT_REG) {		page_select = GG82563_PHY_PAGE_SELECT;	} else {		/*		 * Use Alternative Page Select register to access		 * registers 30 and 31		 */		page_select = GG82563_PHY_PAGE_SELECT_ALT;	}	temp = (u16)((u16)offset >> GG82563_PAGE_SHIFT);	ret_val = e1000_write_phy_reg_mdic(hw, page_select, temp);	if (ret_val) {		e1000_release_phy_80003es2lan(hw);		goto out;	}	/*	 * The "ready" bit in the MDIC register may be incorrectly set	 * before the device has completed the "Page Select" MDI	 * transaction.  So we wait 200us after each MDI command...	 */	usec_delay(200);	/* ...and verify the command was successful. */	ret_val = e1000_read_phy_reg_mdic(hw, page_select, &temp);	if (((u16)offset >> GG82563_PAGE_SHIFT) != temp) {		ret_val = -E1000_ERR_PHY;		e1000_release_phy_80003es2lan(hw);		goto out;	}	usec_delay(200);	ret_val = e1000_write_phy_reg_mdic(hw,	                                  MAX_PHY_REG_ADDRESS & offset,	                                  data);	usec_delay(200);	e1000_release_phy_80003es2lan(hw);out:	return ret_val;}/** *  e1000_write_nvm_80003es2lan - Write to ESB2 NVM *  @hw: pointer to the HW structure *  @offset: offset of the register to read *  @words: number of words to write *  @data: buffer of data to write to the NVM * *  Write "words" of data to the ESB2 NVM.  This is a function *  pointer entry point called by the api module. **/static s32 e1000_write_nvm_80003es2lan(struct e1000_hw *hw, u16 offset,                            u16 words, u16 *data){	DEBUGFUNC("e1000_write_nvm_80003es2lan");	return e1000_write_nvm_spi(hw, offset, words, data);}/** *  e1000_get_cfg_done_80003es2lan - Wait for configuration to complete *  @hw: pointer to the HW structure * *  Wait a specific amount of time for manageability processes to complete. *  This is a function pointer entry point called by the phy module. **/static s32 e1000_get_cfg_done_80003es2lan(struct e1000_hw *hw){	s32 timeout = PHY_CFG_TIMEOUT;	s32 ret_val = E1000_SUCCESS;	u32 mask = E1000_NVM_CFG_DONE_PORT_0;	DEBUGFUNC("e1000_get_cfg_done_80003es2lan");	if (hw->bus.func == 1)		mask = E1000_NVM_CFG_DONE_PORT_1;	while (timeout) {		if (E1000_READ_REG(hw, E1000_EEMNGCTL) & mask)			break;		msec_delay(1);		timeout--;	}	if (!timeout) {		DEBUGOUT("MNG configuration cycle has not completed.\n");		ret_val = -E1000_ERR_RESET;		goto out;	}out:	return ret_val;}/** *  e1000_phy_force_speed_duplex_80003es2lan - Force PHY speed and duplex *  @hw: pointer to the HW structure * *  Force the speed and duplex settings onto the PHY.  This is a *  function pointer entry point called by the phy module. **/static s32 e1000_phy_force_speed_duplex_80003es2lan(struct e1000_hw *hw){	s32 ret_val = E1000_SUCCESS;	u16 phy_data;	bool link;	DEBUGFUNC("e1000_phy_force_speed_duplex_80003es2lan");	if (!(hw->phy.ops.read_reg))		goto out;	/*	 * Clear Auto-Crossover to force MDI manually.  M88E1000 requires MDI	 * forced whenever speed and duplex are forced.	 */	ret_val = hw->phy.ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);	if (ret_val)		goto out;	phy_data &= ~GG82563_PSCR_CROSSOVER_MODE_AUTO;	ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_SPEC_CTRL, phy_data);	if (ret_val)		goto out;	DEBUGOUT1("GG82563 PSCR: %X\n", phy_data);	ret_val = hw->phy.ops.read_reg(hw, PHY_CONTROL, &phy_data);	if (ret_val)		goto out;	e1000_phy_force_speed_duplex_setup(hw, &phy_data);	/* Reset the phy to commit changes. */	phy_data |= MII_CR_RESET;	ret_val = hw->phy.ops.write_reg(hw, PHY_CONTROL, phy_data);	if (ret_val)		goto out;	usec_delay(1);	if (hw->phy.autoneg_wait_to_complete) {		DEBUGOUT("Waiting for forced speed/duplex link "		         "on GG82563 phy.\n");		ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT,		                                     100000, &link);		if (ret_val)			goto out;		if (!link) {			/*			 * We didn't get link.			 * Reset the DSP and cross our fingers.			 */			ret_val = e1000_phy_reset_dsp_generic(hw);			if (ret_val)				goto out;		}		/* Try once more */		ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT,		                                     100000, &link);		if (ret_val)			goto out;	}	ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_MAC_SPEC_CTRL, &phy_data);	if (ret_val)		goto out;	/*	 * Resetting the phy means we need to verify the TX_CLK corresponds	 * to the link speed.  10Mbps -> 2.5MHz, else 25MHz.	 */	phy_data &= ~GG82563_MSCR_TX_CLK_MASK;	if (hw->mac.forced_speed_duplex & E1000_ALL_10_SPEED)		phy_data |= GG82563_MSCR_TX_CLK_10MBPS_2_5;	else		phy_data |= GG82563_MSCR_TX_CLK_100MBPS_25;	/*	 * In addition, we must re-enable CRS on Tx for both half and full	 * duplex.	 */	phy_data |= GG82563_MSCR_ASSERT_CRS_ON_TX;	ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_MAC_SPEC_CTRL, phy_data);out:	return ret_val;}/** *  e1000_get_cable_length_80003es2lan - Set approximate cable length *  @hw: pointer to the HW structure * *  Find the approximate cable length as measured by the GG82563 PHY. *  This is a function pointer entry point called by the phy module. **/static s32 e1000_get_cable_length_80003es2lan(struct e1000_hw *hw){	struct e1000_phy_info *phy = &hw->phy;	s32 ret_val = E1000_SUCCESS;	u16 phy_data, index;	DEBUGFUNC("e1000_get_cable_length_80003es2lan");	if (!(hw->phy.ops.read_reg))		goto out;	ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_DSP_DISTANCE, &phy_data);	if (ret_val)		goto out;	index = phy_data & GG82563_DSPD_CABLE_LENGTH;	phy->min_cable_length = e1000_gg82563_cable_length_table[index];	phy->max_cable_length = e1000_gg82563_cable_length_table[index+5];	phy->cable_length = (phy->min_cable_length + phy->max_cable_length) / 2;out:	return ret_val;}/** *  e1000_get_link_up_info_80003es2lan - Report speed and duplex *  @hw: pointer to the HW structure *  @speed: pointer to speed buffer *  @duplex: pointer to duplex buffer * *  Retrieve the current speed and duplex configuration. *  This is a function pointer entry point called by the api module. **/static s32 e1000_get_link_up_info_80003es2lan(struct e1000_hw *hw, u16 *speed,                                              u16 *duplex){	s32 ret_val;	DEBUGFUNC("e1000_get_link_up_info_80003es2lan");	if (hw->phy.media_type == e1000_media_type_copper) {		ret_val = e1000_get_speed_and_duplex_copper_generic(hw,		                                                    speed,		                                                    duplex);		if (ret_val)			goto out;		if (*speed == SPEED_1000)			ret_val = e1000_cfg_kmrn_1000_80003es2lan(hw);		else			ret_val = e1000_cfg_kmrn_10_100_80003es2lan(hw,			                                      *duplex);	} else {		ret_val = e1000_get_speed_and_duplex_fiber_serdes_generic(hw,		                                                  speed,		                                                  duplex);	}out:	return ret_val;}/** *  e1000_reset_hw_80003es2lan - Reset the ESB2 controller *  @hw: pointer to the HW structure * *  Perform a global reset to the ESB2 controller. *  This is a function pointer entry point called by the api module. **/static s32 e1000_reset_hw_80003es2lan(struct e1000_hw *hw){	u32 ctrl, icr;	s32 ret_val;	DEBUGFUNC("e1000_reset_hw_80003es2lan");	/*	 * Prevent the PCI-E bus from sticking if there is no TLP connection	 * on the last TLP read/write transaction when MAC is reset.	 */	ret_val = e1000_disable_pcie_master_generic(hw);	if (ret_val) {		DEBUGOUT("PCI-E Master disable polling has failed.\n");	}	DEBUGOUT("Masking off all interrupts\n");	E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);	E1000_WRITE_REG(hw, E1000_RCTL, 0);	E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP);	E1000_WRITE_FLUSH(hw);	msec_delay(10);	ctrl = E1000_READ_REG(hw, E1000_CTRL);	DEBUGOUT("Issuing a global reset to MAC\n");	E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_RST);	ret_val = e1000_get_auto_rd_done_generic(hw);	if (ret_val)		/* We don't want to continue accessing MAC registers. */		goto out;	/* Clear any pending interrupt events. */	E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);	icr = E1000_READ_REG(hw, E1000_ICR);	e1000_check_alt_mac_addr_generic(hw);out:	return ret_val;}/** *  e1000_init_hw_80003es2lan - Initialize the ESB2 controller *  @hw: pointer to the HW structure * *  Initialize the hw bits, LED, VFTA, MTA, link and hw counters. *  This is a function pointer entry point called by the api module. **/static s32 e1000_init_hw_80003es2lan(struct e1000_hw *hw){	struct e1000_mac_info *mac = &hw->mac;	u32 reg_data;	s32 ret_val;	u16 i;	DEBUGFUNC("e1000_init_hw_80003es2lan");	e1000_initialize_hw_bits_80003es2lan(hw);	/* Initialize identification LED */	ret_val = e1000_id_led_init_generic(hw);	if (ret_val) {		DEBUGOUT("Error initializing identification LED\n");		/* This is not fatal and we should not stop init due to this */	}	/* Disabling VLAN filtering */	DEBUGOUT("Initializing the IEEE VLAN\n");	mac->ops.clear_vfta(hw);	/* Setup the receive address. */	e1000_init_rx_addrs_generic(hw, mac->rar_entry_count);	/* Zero out the Multicast HASH table */	DEBUGOUT("Zeroing the MTA\n");	for (i = 0; i < mac->mta_reg_count; i++)		E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0);	/* Setup link and flow control */	ret_val = mac->ops.setup_link(hw);	/* Set the transmit descriptor write-back policy */	reg_data = E1000_READ_REG(hw, E1000_TXDCTL(0));	reg_data = (reg_data & ~E1000_TXDCTL_WTHRESH) |	           E1000_TXDCTL_FULL_TX_DESC_WB | E1000_TXDCTL_COUNT_DESC;	E1000_WRITE_REG(hw, E1000_TXDCTL(0), reg_data);	/* ...for both queues. */	reg_data = E1000_READ_REG(hw, E1000_TXDCTL(1));	reg_data = (reg_data & ~E1000_TXDCTL_WTHRESH) |	           E1000_TXDCTL_FULL_TX_DESC_WB | E1000_TXDCTL_COUNT_DESC;	E1000_WRITE_REG(hw, E1000_TXDCTL(1), reg_data);	/* Enable retransmit on late collisions */	reg_data = E1000_READ_REG(hw, E1000_TCTL);	reg_data |= E1000_TCTL_RTLC;	E1000_WRITE_REG(hw, E1000_TCTL, reg_data);	/* Configure Gigabit Carry Extend Padding */	reg_data = E1000_READ_REG(hw, E1000_TCTL_EXT);	reg_data &= ~E1000_TCTL_EXT_GCEX_MASK;	reg_data |= DEFAULT_TCTL_EXT_GCEX_80003ES2LAN;	E1000_WRITE_REG(hw, E1000_TCTL_EXT, reg_data);	/* Configure Transmit Inter-Packet Gap */	reg_data = E1000_READ_REG(hw, E1000_TIPG);	reg_data &= ~E1000_TIPG_IPGT_MASK;	reg_data |= DEFAULT_TIPG_IPGT_1000_80003ES2LAN;	E1000_WRITE_REG(hw, E1000_TIPG, reg_data);	reg_data = E1000_READ_REG_ARRAY(hw, E1000_FFLT, 0x0001);	reg_data &= ~0x00100000;	E1000_WRITE_REG_ARRAY(hw, E1000_FFLT, 0x0001, reg_data);	/*	 * Clear all of the statistics registers (clear on read).  It is	 * important that we do this after we have tried to establish link	 * because the symbol error count will increment wildly if there

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人免费视频一区| 久久久蜜桃精品| 美日韩一区二区三区| 日韩午夜电影av| 狠狠狠色丁香婷婷综合激情| 日韩免费高清电影| 极品少妇xxxx精品少妇| 国产欧美va欧美不卡在线| 白白色亚洲国产精品| 亚洲免费观看高清完整版在线观看熊 | 国产ts人妖一区二区| 国产精品理论在线观看| 色婷婷av一区二区三区gif| 亚洲成av人影院| 亚洲精品一区二区三区精华液| 久久99精品久久久久久久久久久久 | 免费不卡在线视频| 久久久国产一区二区三区四区小说 | 中文字幕五月欧美| 欧美精品三级在线观看| 顶级嫩模精品视频在线看| 亚洲精品国久久99热| 26uuu欧美| 欧美一区二区三区在线观看| 成人精品gif动图一区| 亚洲午夜av在线| 国产精品美女久久久久久久久久久| 欧美熟乱第一页| av电影天堂一区二区在线观看| 美女在线一区二区| 婷婷综合久久一区二区三区| 亚洲欧美激情视频在线观看一区二区三区 | 美国欧美日韩国产在线播放| 亚洲国产视频a| 一区二区久久久| 一区二区三区国产精品| 亚洲丝袜精品丝袜在线| 国产精品福利一区| 国产精品二三区| 国产精品区一区二区三| 久久久99精品免费观看不卡| 日韩欧美电影在线| 日韩一区二区在线观看视频| 91精品国产品国语在线不卡| 欧美日本一区二区在线观看| 欧美日韩黄色影视| 欧美高清视频不卡网| 欧美精选午夜久久久乱码6080| 精品视频999| 日韩视频123| 久久女同互慰一区二区三区| 国产午夜亚洲精品羞羞网站| 久久久激情视频| 亚洲欧洲精品天堂一级 | 国产免费久久精品| 亚洲男人的天堂网| 日本人妖一区二区| 成人综合婷婷国产精品久久| 91丨porny丨在线| 欧美日韩美女一区二区| 亚洲精品在线一区二区| 亚洲另类春色校园小说| 日韩成人午夜电影| 成人小视频在线| 91精品国产aⅴ一区二区| 久久久国产精品午夜一区ai换脸| 一区二区三区四区国产精品| 麻豆国产精品一区二区三区 | 日韩高清不卡一区二区三区| 久久66热偷产精品| 欧洲一区在线电影| 国产欧美一区二区精品性色超碰| 亚洲成人免费电影| av不卡一区二区三区| 欧美成人伊人久久综合网| 亚洲欧美国产高清| 成人av电影免费在线播放| 5月丁香婷婷综合| 午夜电影一区二区| 在线国产亚洲欧美| 亚洲欧洲成人av每日更新| 精品一区二区三区免费播放| 欧美日韩免费一区二区三区视频| 国产精品你懂的| 成人免费精品视频| 久久久噜噜噜久久中文字幕色伊伊| 丝袜美腿高跟呻吟高潮一区| 欧美色图天堂网| 偷拍一区二区三区| 欧美一级理论片| 日韩电影一区二区三区四区| 日韩一区和二区| 狠狠久久亚洲欧美| 久久精品在线免费观看| 国产精品一二三区| 国产精品久久久久久久久果冻传媒 | 国产在线精品不卡| 久久综合色播五月| 国产成人精品aa毛片| 亚洲人成在线播放网站岛国| 一本色道久久综合亚洲aⅴ蜜桃 | 国产精品99精品久久免费| 国产欧美一区二区精品性| 成人中文字幕电影| 亚洲成人福利片| 日韩一区二区在线看| 国产精品亚洲综合一区在线观看| 国产精品欧美经典| 欧美日韩精品一二三区| 蜜臀av一区二区在线免费观看| 日韩欧美卡一卡二| 99久久精品国产导航| 丝袜美腿高跟呻吟高潮一区| 国产亚洲一区字幕| 在线免费av一区| 国产成人夜色高潮福利影视| 伊人开心综合网| 精品三级av在线| 91久久精品一区二区三区| 美女视频黄a大片欧美| 亚洲欧美乱综合| 国产午夜精品久久久久久免费视 | 欧美伊人久久大香线蕉综合69| 蜜桃一区二区三区在线观看| 国产精品动漫网站| 久久午夜国产精品| 欧美另类videos死尸| 99久久免费国产| 国产 欧美在线| 韩国成人精品a∨在线观看| 性久久久久久久久久久久| 国产精品久久久久久户外露出 | 亚洲国产精品精华液网站| 国产精品久久久久久一区二区三区| 91精品欧美久久久久久动漫| 在线观看视频一区二区欧美日韩| 国产成人精品一区二| 国产在线播放一区| 国产成人精品www牛牛影视| 高清不卡一二三区| 成人久久久精品乱码一区二区三区 | 国产精品久久久久久亚洲毛片| 国产欧美日韩麻豆91| 国产精品视频在线看| 国产精品久久久一区麻豆最新章节| 国产日韩影视精品| 国产精品每日更新在线播放网址| 欧美国产一区二区在线观看| 中文字幕二三区不卡| 中文字幕一区二区三区色视频| 成人免费小视频| 亚洲黄一区二区三区| 亚洲成人自拍偷拍| 奇米精品一区二区三区在线观看 | 欧洲精品视频在线观看| 欧美日韩日日摸| 久久精品亚洲一区二区三区浴池| 中文字幕在线不卡| 亚洲超丰满肉感bbw| 国产综合成人久久大片91| 成人精品视频一区二区三区尤物| 91国模大尺度私拍在线视频| 欧美日韩国产一二三| 久久久久97国产精华液好用吗| 最新久久zyz资源站| 精品午夜久久福利影院| 91麻豆精东视频| 亚洲精品在线一区二区| 亚洲专区一二三| 国产成人综合亚洲网站| 91精品国产综合久久精品图片| 国产色产综合色产在线视频| 亚洲一区二区欧美日韩| 成人av午夜电影| 久久久蜜桃精品| 美女高潮久久久| 在线播放中文一区| 亚洲精品亚洲人成人网| 国产福利电影一区二区三区| 91精选在线观看| 香港成人在线视频| 一本大道综合伊人精品热热 | 首页亚洲欧美制服丝腿| 欧洲精品中文字幕| 亚洲美女视频一区| 在线中文字幕不卡| 夜夜精品视频一区二区| 91丝袜呻吟高潮美腿白嫩在线观看| 久久久精品一品道一区| 国产美女久久久久| 国产三级欧美三级| 成人激情文学综合网| 亚洲视频一区二区在线| 一本一本大道香蕉久在线精品| 国产欧美日韩精品一区| 91丨porny丨户外露出| 亚洲一卡二卡三卡四卡| 欧美综合天天夜夜久久| 日韩成人dvd| 久久天堂av综合合色蜜桃网|