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

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

?? e1000.c

?? 嵌入式試驗箱S3C2410的bootloader源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
			udelay(5);			eecd = E1000_READ_REG(hw, EECD);		}		if (!(eecd & E1000_EECD_GNT)) {			eecd &= ~E1000_EECD_REQ;			E1000_WRITE_REG(hw, EECD, eecd);			DEBUGOUT("Could not acquire EEPROM grant\n");			return FALSE;		}	}	e1000_setup_eeprom(hw);	e1000_shift_out_ee_bits(hw, EEPROM_EWEN_OPCODE, 5);	e1000_shift_out_ee_bits(hw, Reg, (large_eeprom) ? 6 : 4);	e1000_standby_eeprom(hw);	e1000_shift_out_ee_bits(hw, EEPROM_WRITE_OPCODE, 3);	e1000_shift_out_ee_bits(hw, Reg, (large_eeprom) ? 8 : 6);	e1000_shift_out_ee_bits(hw, Data, 16);	if (!e1000_wait_eeprom_done(hw)) {		return FALSE;	}	e1000_shift_out_ee_bits(hw, EEPROM_EWDS_OPCODE, 5);	e1000_shift_out_ee_bits(hw, Reg, (large_eeprom) ? 6 : 4);	e1000_eeprom_cleanup(hw);	/* Stop requesting EEPROM access */	if (hw->mac_type > e1000_82544) {		eecd = E1000_READ_REG(hw, EECD);		eecd &= ~E1000_EECD_REQ;		E1000_WRITE_REG(hw, EECD, eecd);	}	i = 0;	eecd = E1000_READ_REG(hw, EECD);	while (((eecd & E1000_EECD_GNT)) && (i < 500)) {		i++;		udelay(10);		eecd = E1000_READ_REG(hw, EECD);	}	if ((eecd & E1000_EECD_GNT)) {		DEBUGOUT("Could not release EEPROM grant\n");	}	return TRUE;}#endif/****************************************************************************** * Verifies that the EEPROM has a valid checksum * * hw - Struct containing variables accessed by shared code * * Reads the first 64 16 bit words of the EEPROM and sums the values read. * If the the sum of the 64 16 bit words is 0xBABA, the EEPROM's checksum is * valid. *****************************************************************************/static inte1000_validate_eeprom_checksum(struct eth_device *nic){	struct e1000_hw *hw = nic->priv;	uint16_t checksum = 0;	uint16_t i, eeprom_data;	DEBUGFUNC();	for (i = 0; i < (EEPROM_CHECKSUM_REG + 1); i++) {		if (e1000_read_eeprom(hw, i, &eeprom_data) < 0) {			DEBUGOUT("EEPROM Read Error\n");			return -E1000_ERR_EEPROM;		}		checksum += eeprom_data;	}	if (checksum == (uint16_t) EEPROM_SUM) {		return 0;	} else {		DEBUGOUT("EEPROM Checksum Invalid\n");		return -E1000_ERR_EEPROM;	}}#endif /* #ifndef CONFIG_AP1000 *//****************************************************************************** * Reads the adapter's MAC address from the EEPROM and inverts the LSB for the * second function of dual function devices * * nic - Struct containing variables accessed by shared code *****************************************************************************/static inte1000_read_mac_addr(struct eth_device *nic){#ifndef CONFIG_AP1000	struct e1000_hw *hw = nic->priv;	uint16_t offset;	uint16_t eeprom_data;	int i;	DEBUGFUNC();	for (i = 0; i < NODE_ADDRESS_SIZE; i += 2) {		offset = i >> 1;		if (e1000_read_eeprom(hw, offset, &eeprom_data) < 0) {			DEBUGOUT("EEPROM Read Error\n");			return -E1000_ERR_EEPROM;		}		nic->enetaddr[i] = eeprom_data & 0xff;		nic->enetaddr[i + 1] = (eeprom_data >> 8) & 0xff;	}	if ((hw->mac_type == e1000_82546) &&	    (E1000_READ_REG(hw, STATUS) & E1000_STATUS_FUNC_1)) {		/* Invert the last bit if this is the second device */		nic->enetaddr[5] += 1;	}#else	/*	 * The AP1000's e1000 has no eeprom; the MAC address is stored in the	 * environment variables.  Currently this does not support the addition	 * of a PMC e1000 card, which is certainly a possibility, so this should	 * be updated to properly use the env variable only for the onboard e1000	 */	int ii;	char *s, *e;	DEBUGFUNC();	s = getenv ("ethaddr");	if (s == NULL){		return -E1000_ERR_EEPROM;	}	else{		for(ii = 0; ii < 6; ii++) {			nic->enetaddr[ii] = s ? simple_strtoul (s, &e, 16) : 0;			if (s){				s = (*e) ? e + 1 : e;			}		}	}#endif	return 0;}/****************************************************************************** * Initializes receive address filters. * * hw - Struct containing variables accessed by shared code * * Places the MAC address in receive address register 0 and clears the rest * of the receive addresss registers. Clears the multicast table. Assumes * the receiver is in reset when the routine is called. *****************************************************************************/static voide1000_init_rx_addrs(struct eth_device *nic){	struct e1000_hw *hw = nic->priv;	uint32_t i;	uint32_t addr_low;	uint32_t addr_high;	DEBUGFUNC();	/* Setup the receive address. */	DEBUGOUT("Programming MAC Address into RAR[0]\n");	addr_low = (nic->enetaddr[0] |		    (nic->enetaddr[1] << 8) |		    (nic->enetaddr[2] << 16) | (nic->enetaddr[3] << 24));	addr_high = (nic->enetaddr[4] | (nic->enetaddr[5] << 8) | E1000_RAH_AV);	E1000_WRITE_REG_ARRAY(hw, RA, 0, addr_low);	E1000_WRITE_REG_ARRAY(hw, RA, 1, addr_high);	/* Zero out the other 15 receive addresses. */	DEBUGOUT("Clearing RAR[1-15]\n");	for (i = 1; i < E1000_RAR_ENTRIES; i++) {		E1000_WRITE_REG_ARRAY(hw, RA, (i << 1), 0);		E1000_WRITE_REG_ARRAY(hw, RA, ((i << 1) + 1), 0);	}}/****************************************************************************** * Clears the VLAN filer table * * hw - Struct containing variables accessed by shared code *****************************************************************************/static voide1000_clear_vfta(struct e1000_hw *hw){	uint32_t offset;	for (offset = 0; offset < E1000_VLAN_FILTER_TBL_SIZE; offset++)		E1000_WRITE_REG_ARRAY(hw, VFTA, offset, 0);}/****************************************************************************** * Set the mac type member in the hw struct. * * hw - Struct containing variables accessed by shared code *****************************************************************************/static inte1000_set_mac_type(struct e1000_hw *hw){	DEBUGFUNC();	switch (hw->device_id) {	case E1000_DEV_ID_82542:		switch (hw->revision_id) {		case E1000_82542_2_0_REV_ID:			hw->mac_type = e1000_82542_rev2_0;			break;		case E1000_82542_2_1_REV_ID:			hw->mac_type = e1000_82542_rev2_1;			break;		default:			/* Invalid 82542 revision ID */			return -E1000_ERR_MAC_TYPE;		}		break;	case E1000_DEV_ID_82543GC_FIBER:	case E1000_DEV_ID_82543GC_COPPER:		hw->mac_type = e1000_82543;		break;	case E1000_DEV_ID_82544EI_COPPER:	case E1000_DEV_ID_82544EI_FIBER:	case E1000_DEV_ID_82544GC_COPPER:	case E1000_DEV_ID_82544GC_LOM:		hw->mac_type = e1000_82544;		break;	case E1000_DEV_ID_82540EM:	case E1000_DEV_ID_82540EM_LOM:		hw->mac_type = e1000_82540;		break;	case E1000_DEV_ID_82545EM_COPPER:	case E1000_DEV_ID_82545EM_FIBER:		hw->mac_type = e1000_82545;		break;	case E1000_DEV_ID_82546EB_COPPER:	case E1000_DEV_ID_82546EB_FIBER:		hw->mac_type = e1000_82546;		break;	default:		/* Should never have loaded on this device */		return -E1000_ERR_MAC_TYPE;	}	return E1000_SUCCESS;}/****************************************************************************** * Reset the transmit and receive units; mask and clear all interrupts. * * hw - Struct containing variables accessed by shared code *****************************************************************************/voide1000_reset_hw(struct e1000_hw *hw){	uint32_t ctrl;	uint32_t ctrl_ext;	uint32_t icr;	uint32_t manc;	DEBUGFUNC();	/* For 82542 (rev 2.0), disable MWI before issuing a device reset */	if (hw->mac_type == e1000_82542_rev2_0) {		DEBUGOUT("Disabling MWI on 82542 rev 2.0\n");		pci_write_config_word(hw->pdev, PCI_COMMAND,				      hw->				      pci_cmd_word & ~PCI_COMMAND_INVALIDATE);	}	/* Clear interrupt mask to stop board from generating interrupts */	DEBUGOUT("Masking off all interrupts\n");	E1000_WRITE_REG(hw, IMC, 0xffffffff);	/* Disable the Transmit and Receive units.  Then delay to allow	 * any pending transactions to complete before we hit the MAC with	 * the global reset.	 */	E1000_WRITE_REG(hw, RCTL, 0);	E1000_WRITE_REG(hw, TCTL, E1000_TCTL_PSP);	E1000_WRITE_FLUSH(hw);	/* The tbi_compatibility_on Flag must be cleared when Rctl is cleared. */	hw->tbi_compatibility_on = FALSE;	/* Delay to allow any outstanding PCI transactions to complete before	 * resetting the device	 */	mdelay(10);	/* Issue a global reset to the MAC.  This will reset the chip's	 * transmit, receive, DMA, and link units.  It will not effect	 * the current PCI configuration.  The global reset bit is self-	 * clearing, and should clear within a microsecond.	 */	DEBUGOUT("Issuing a global reset to MAC\n");	ctrl = E1000_READ_REG(hw, CTRL);#if 0	if (hw->mac_type > e1000_82543)		E1000_WRITE_REG_IO(hw, CTRL, (ctrl | E1000_CTRL_RST));	else#endif		E1000_WRITE_REG(hw, CTRL, (ctrl | E1000_CTRL_RST));	/* Force a reload from the EEPROM if necessary */	if (hw->mac_type < e1000_82540) {		/* Wait for reset to complete */		udelay(10);		ctrl_ext = E1000_READ_REG(hw, CTRL_EXT);		ctrl_ext |= E1000_CTRL_EXT_EE_RST;		E1000_WRITE_REG(hw, CTRL_EXT, ctrl_ext);		E1000_WRITE_FLUSH(hw);		/* Wait for EEPROM reload */		mdelay(2);	} else {		/* Wait for EEPROM reload (it happens automatically) */		mdelay(4);		/* Dissable HW ARPs on ASF enabled adapters */		manc = E1000_READ_REG(hw, MANC);		manc &= ~(E1000_MANC_ARP_EN);		E1000_WRITE_REG(hw, MANC, manc);	}	/* Clear interrupt mask to stop board from generating interrupts */	DEBUGOUT("Masking off all interrupts\n");	E1000_WRITE_REG(hw, IMC, 0xffffffff);	/* Clear any pending interrupt events. */	icr = E1000_READ_REG(hw, ICR);	/* If MWI was previously enabled, reenable it. */	if (hw->mac_type == e1000_82542_rev2_0) {		pci_write_config_word(hw->pdev, PCI_COMMAND, hw->pci_cmd_word);	}}/****************************************************************************** * Performs basic configuration of the adapter. * * hw - Struct containing variables accessed by shared code * * Assumes that the controller has previously been reset and is in a * post-reset uninitialized state. Initializes the receive address registers, * multicast table, and VLAN filter table. Calls routines to setup link * configuration and flow control settings. Clears all on-chip counters. Leaves * the transmit and receive units disabled and uninitialized. *****************************************************************************/static inte1000_init_hw(struct eth_device *nic){	struct e1000_hw *hw = nic->priv;	uint32_t ctrl, status;	uint32_t i;	int32_t ret_val;	uint16_t pcix_cmd_word;	uint16_t pcix_stat_hi_word;	uint16_t cmd_mmrbc;	uint16_t stat_mmrbc;	e1000_bus_type bus_type = e1000_bus_type_unknown;	DEBUGFUNC();#if 0	/* Initialize Identification LED */	ret_val = e1000_id_led_init(hw);	if (ret_val < 0) {		DEBUGOUT("Error Initializing Identification LED\n");		return ret_val;	}#endif	/* Set the Media Type and exit with error if it is not valid. */	if (hw->mac_type != e1000_82543) {		/* tbi_compatibility is only valid on 82543 */		hw->tbi_compatibility_en = FALSE;	}	if (hw->mac_type >= e1000_82543) {		status = E1000_READ_REG(hw, STATUS);		if (status & E1000_STATUS_TBIMODE) {			hw->media_type = e1000_media_type_fiber;			/* tbi_compatibility not valid on fiber */			hw->tbi_compatibility_en = FALSE;		} else {			hw->media_type = e1000_media_type_copper;		}	} else {		/* This is an 82542 (fiber only) */		hw->media_type = e1000_media_type_fiber;	}	/* Disabling VLAN filtering. */	DEBUGOUT("Initializing the IEEE VLAN\n");	E1000_WRITE_REG(hw, VET, 0);	e1000_clear_vfta(hw);	/* For 82542 (rev 2.0), disable MWI and put the receiver into reset */	if (hw->mac_type == e1000_82542_rev2_0) {		DEBUGOUT("Disabling MWI on 82542 rev 2.0\n");		pci_write_config_word(hw->pdev, PCI_COMMAND,				      hw->				      pci_cmd_word & ~PCI_COMMAND_INVALIDATE);		E1000_WRITE_REG(hw, RCTL, E1000_RCTL_RST);		E1000_WRITE_FLUSH(hw);		mdelay(5);	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲男人天堂一区| 美腿丝袜在线亚洲一区| 日本va欧美va瓶| 91在线观看下载| 欧美一区二区三区四区视频| 国产精品国产成人国产三级| 日韩av中文在线观看| 99re热视频这里只精品| 精品动漫一区二区三区在线观看| 亚洲永久免费av| 成人精品国产免费网站| 久久这里只有精品视频网| 婷婷久久综合九色综合伊人色| 波多野结衣亚洲| 久久精品免视看| 激情综合色播激情啊| 91精品视频网| 日韩精品一级二级 | 亚洲综合在线电影| 国产成人综合在线播放| 日韩欧美国产精品一区| 午夜激情久久久| 欧美三级资源在线| 亚洲免费大片在线观看| 91视频国产资源| 亚洲婷婷在线视频| 99久久er热在这里只有精品66| 欧美国产激情二区三区 | 国产精品久久久久久亚洲伦 | 肉肉av福利一精品导航| 欧美日韩国产另类一区| 婷婷国产在线综合| 日韩欧美色综合网站| 美国十次综合导航| 日韩视频一区二区| 激情伊人五月天久久综合| 久久久亚洲午夜电影| 国产高清精品网站| 国产精品乱码妇女bbbb| 99久久伊人精品| 一区二区三区精品| 91精品国产综合久久福利软件| 免费在线看成人av| 久久网站最新地址| 国产成人免费9x9x人网站视频| 久久品道一品道久久精品| 国产成人精品1024| 亚洲黄色免费电影| 欧美一级久久久| 国产一区二区不卡| 亚洲欧美电影一区二区| 欧美视频一区在线| 久久99蜜桃精品| 中文久久乱码一区二区| 欧美专区亚洲专区| 蜜臀av性久久久久蜜臀aⅴ四虎| 久久亚洲欧美国产精品乐播| 成人黄色综合网站| 亚洲成av人综合在线观看| 日韩欧美国产午夜精品| av中文字幕亚洲| 亚洲成人动漫一区| 国产亚洲欧洲一区高清在线观看| 91污片在线观看| 秋霞成人午夜伦在线观看| 国产欧美日韩一区二区三区在线观看| 96av麻豆蜜桃一区二区| 日韩av一区二区三区四区| 国产亚洲精品aa午夜观看| 日本电影欧美片| 美腿丝袜一区二区三区| 亚洲色图一区二区三区| 日韩精品中午字幕| 欧美中文字幕一区二区三区亚洲| 国产成人av福利| 久久蜜臀中文字幕| 久久久久国色av免费看影院| 一本到不卡免费一区二区| 视频一区二区中文字幕| 国产精品久久久久影视| 日韩精品中午字幕| 欧美伊人精品成人久久综合97| 国内一区二区在线| 日日夜夜免费精品| 亚洲免费电影在线| 国产精品少妇自拍| 精品国产乱码久久久久久夜甘婷婷 | 欧美成人午夜电影| 欧美自拍偷拍一区| 91美女片黄在线| 丁香六月综合激情| 久久精品国产久精国产| 亚洲国产精品一区二区www在线| 国产精品伦一区二区三级视频| 日韩三级视频中文字幕| 欧美三级日韩在线| 91香蕉视频污在线| 国产sm精品调教视频网站| 亚洲国产精品欧美一二99| 17c精品麻豆一区二区免费| 国产人妖乱国产精品人妖| 欧美一区日本一区韩国一区| 欧美日韩三级在线| 91福利在线观看| 欧美亚洲丝袜传媒另类| 色诱视频网站一区| 一本大道久久精品懂色aⅴ| 成人黄色在线视频| av激情综合网| 91麻豆福利精品推荐| 99精品在线免费| 色婷婷国产精品综合在线观看| 不卡av在线免费观看| 成人v精品蜜桃久久一区| 国产成人8x视频一区二区| 国产精品一区二区视频| 国产精品亚洲一区二区三区妖精 | 国产一区在线观看麻豆| 日韩激情av在线| 人妖欧美一区二区| 久久爱www久久做| 国产黄色精品网站| av亚洲精华国产精华精| 99九九99九九九视频精品| 色综合 综合色| 欧美日韩黄色影视| 日韩一区二区在线看| 欧美r级在线观看| 中文字幕欧美日本乱码一线二线| 中文字幕一区二区三| 亚洲人成人一区二区在线观看| 亚洲观看高清完整版在线观看| 日韩精品乱码免费| 激情小说亚洲一区| 91视频xxxx| 91精品国产入口| 国产精品视频九色porn| 亚洲国产一区二区视频| 美女视频网站久久| 成人精品gif动图一区| 精品视频在线免费观看| 欧美r级电影在线观看| 中文字幕亚洲一区二区av在线| 亚洲图片欧美一区| 国产精品综合一区二区| 91丨九色丨黑人外教| 欧美一级理论片| 国产精品久久午夜| 天堂av在线一区| 成人精品亚洲人成在线| 这里只有精品免费| 久久久久久久久久久久久女国产乱| 综合久久一区二区三区| 免费成人在线影院| av电影天堂一区二区在线 | 国产亚洲精久久久久久| 亚洲永久精品大片| 风间由美性色一区二区三区| 在线观看免费亚洲| 久久久激情视频| 日韩二区在线观看| 99精品欧美一区二区三区综合在线| 欧美一区二区三区性视频| 亚洲视频在线观看三级| 国内精品在线播放| 欧美性大战久久久久久久蜜臀 | 日韩午夜av电影| 亚洲精品欧美激情| 国产精品自在欧美一区| 在线成人免费观看| 国产日韩欧美精品综合| 免费人成网站在线观看欧美高清| 91免费看`日韩一区二区| 久久精品一区二区三区不卡| 天堂在线一区二区| 精品视频色一区| 亚洲丝袜另类动漫二区| 国产精品亚洲成人| 欧美电影免费观看高清完整版| 亚洲国产成人tv| 91原创在线视频| 国产精品理伦片| 国产精品99久久久| 日韩久久免费av| 青娱乐精品视频| 4438亚洲最大| 亚洲成人午夜影院| 欧美日韩三级在线| 亚洲一区在线视频观看| 色先锋资源久久综合| 亚洲欧美怡红院| 91丨porny丨国产入口| 亚洲天堂福利av| 91高清视频免费看| 亚洲午夜电影在线观看| 欧美亚洲高清一区| 亚洲成人av福利| 555www色欧美视频| 日本亚洲一区二区| 欧美成人在线直播|