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

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

?? e1000.c

?? U-boot源碼 ARM7啟動代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
/**************************************************************************Inter Pro 1000 for ppcboot/das-u-bootDrivers are port from Intel's Linux driver e1000-4.3.15and from Etherboot pro 1000 driver by mrakes at vivato dot nettested on both gig copper and gig fiber boards***************************************************************************//*******************************************************************************  Copyright(c) 1999 - 2002 Intel Corporation. All rights reserved.  This program is free software; you can redistribute it and/or modify it  under the terms of the GNU General Public License as published by the Free  Software Foundation; either version 2 of the License, or (at your option)  any later version.  This program is distributed in the hope that it will be useful, but WITHOUT  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for  more details.  You should have received a copy of the GNU General Public License along with  this program; if not, write to the Free Software Foundation, Inc., 59  Temple Place - Suite 330, Boston, MA  02111-1307, USA.  The full GNU General Public License is included in this distribution in the  file called LICENSE.  Contact Information:  Linux NICS <linux.nics@intel.com>  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497*******************************************************************************//* *  Copyright (C) Archway Digital Solutions. * *  written by Chrsitopher Li <cli at arcyway dot com> or <chrisl at gnuchina dot org> *  2/9/2002 * *  Copyright (C) Linux Networx. *  Massive upgrade to work with the new intel gigabit NICs. *  <ebiederman at lnxi dot com> */#include "e1000.h"#if defined(CONFIG_CMD_NET) \	&& defined(CONFIG_NET_MULTI) && defined(CONFIG_E1000)#define TOUT_LOOP   100000#undef	virt_to_bus#define	virt_to_bus(x)	((unsigned long)x)#define bus_to_phys(devno, a)	pci_mem_to_phys(devno, a)#define mdelay(n)       udelay((n)*1000)#define E1000_DEFAULT_PBA    0x00000030/* NIC specific static variables go here */static char tx_pool[128 + 16];static char rx_pool[128 + 16];static char packet[2096];static struct e1000_tx_desc *tx_base;static struct e1000_rx_desc *rx_base;static int tx_tail;static int rx_tail, rx_last;static struct pci_device_id supported[] = {	{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82542},	{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82543GC_FIBER},	{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82543GC_COPPER},	{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82544EI_COPPER},	{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82544EI_FIBER},	{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82544GC_COPPER},	{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82544GC_LOM},	{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82540EM},	{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82545EM_COPPER},	{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82546EB_COPPER},	{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82545EM_FIBER},	{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82546EB_FIBER},	{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82540EM_LOM},};/* Function forward declarations */static int e1000_setup_link(struct eth_device *nic);static int e1000_setup_fiber_link(struct eth_device *nic);static int e1000_setup_copper_link(struct eth_device *nic);static int e1000_phy_setup_autoneg(struct e1000_hw *hw);static void e1000_config_collision_dist(struct e1000_hw *hw);static int e1000_config_mac_to_phy(struct e1000_hw *hw);static int e1000_config_fc_after_link_up(struct e1000_hw *hw);static int e1000_check_for_link(struct eth_device *nic);static int e1000_wait_autoneg(struct e1000_hw *hw);static void e1000_get_speed_and_duplex(struct e1000_hw *hw, uint16_t * speed,				       uint16_t * duplex);static int e1000_read_phy_reg(struct e1000_hw *hw, uint32_t reg_addr,			      uint16_t * phy_data);static int e1000_write_phy_reg(struct e1000_hw *hw, uint32_t reg_addr,			       uint16_t phy_data);static void e1000_phy_hw_reset(struct e1000_hw *hw);static int e1000_phy_reset(struct e1000_hw *hw);static int e1000_detect_gig_phy(struct e1000_hw *hw);#define E1000_WRITE_REG(a, reg, value) (writel((value), ((a)->hw_addr + E1000_##reg)))#define E1000_READ_REG(a, reg) (readl((a)->hw_addr + E1000_##reg))#define E1000_WRITE_REG_ARRAY(a, reg, offset, value) (\			writel((value), ((a)->hw_addr + E1000_##reg + ((offset) << 2))))#define E1000_READ_REG_ARRAY(a, reg, offset) ( \	readl((a)->hw_addr + E1000_##reg + ((offset) << 2)))#define E1000_WRITE_FLUSH(a) {uint32_t x; x = E1000_READ_REG(a, STATUS);}#ifndef CONFIG_AP1000 /* remove for warnings *//****************************************************************************** * Raises the EEPROM's clock input. * * hw - Struct containing variables accessed by shared code * eecd - EECD's current value *****************************************************************************/static voide1000_raise_ee_clk(struct e1000_hw *hw, uint32_t * eecd){	/* Raise the clock input to the EEPROM (by setting the SK bit), and then	 * wait 50 microseconds.	 */	*eecd = *eecd | E1000_EECD_SK;	E1000_WRITE_REG(hw, EECD, *eecd);	E1000_WRITE_FLUSH(hw);	udelay(50);}/****************************************************************************** * Lowers the EEPROM's clock input. * * hw - Struct containing variables accessed by shared code * eecd - EECD's current value *****************************************************************************/static voide1000_lower_ee_clk(struct e1000_hw *hw, uint32_t * eecd){	/* Lower the clock input to the EEPROM (by clearing the SK bit), and then	 * wait 50 microseconds.	 */	*eecd = *eecd & ~E1000_EECD_SK;	E1000_WRITE_REG(hw, EECD, *eecd);	E1000_WRITE_FLUSH(hw);	udelay(50);}/****************************************************************************** * Shift data bits out to the EEPROM. * * hw - Struct containing variables accessed by shared code * data - data to send to the EEPROM * count - number of bits to shift out *****************************************************************************/static voide1000_shift_out_ee_bits(struct e1000_hw *hw, uint16_t data, uint16_t count){	uint32_t eecd;	uint32_t mask;	/* We need to shift "count" bits out to the EEPROM. So, value in the	 * "data" parameter will be shifted out to the EEPROM one bit at a time.	 * In order to do this, "data" must be broken down into bits.	 */	mask = 0x01 << (count - 1);	eecd = E1000_READ_REG(hw, EECD);	eecd &= ~(E1000_EECD_DO | E1000_EECD_DI);	do {		/* A "1" is shifted out to the EEPROM by setting bit "DI" to a "1",		 * and then raising and then lowering the clock (the SK bit controls		 * the clock input to the EEPROM).  A "0" is shifted out to the EEPROM		 * by setting "DI" to "0" and then raising and then lowering the clock.		 */		eecd &= ~E1000_EECD_DI;		if (data & mask)			eecd |= E1000_EECD_DI;		E1000_WRITE_REG(hw, EECD, eecd);		E1000_WRITE_FLUSH(hw);		udelay(50);		e1000_raise_ee_clk(hw, &eecd);		e1000_lower_ee_clk(hw, &eecd);		mask = mask >> 1;	} while (mask);	/* We leave the "DI" bit set to "0" when we leave this routine. */	eecd &= ~E1000_EECD_DI;	E1000_WRITE_REG(hw, EECD, eecd);}/****************************************************************************** * Shift data bits in from the EEPROM * * hw - Struct containing variables accessed by shared code *****************************************************************************/static uint16_te1000_shift_in_ee_bits(struct e1000_hw *hw){	uint32_t eecd;	uint32_t i;	uint16_t data;	/* In order to read a register from the EEPROM, we need to shift 16 bits	 * in from the EEPROM. Bits are "shifted in" by raising the clock input to	 * the EEPROM (setting the SK bit), and then reading the value of the "DO"	 * bit.  During this "shifting in" process the "DI" bit should always be	 * clear..	 */	eecd = E1000_READ_REG(hw, EECD);	eecd &= ~(E1000_EECD_DO | E1000_EECD_DI);	data = 0;	for (i = 0; i < 16; i++) {		data = data << 1;		e1000_raise_ee_clk(hw, &eecd);		eecd = E1000_READ_REG(hw, EECD);		eecd &= ~(E1000_EECD_DI);		if (eecd & E1000_EECD_DO)			data |= 1;		e1000_lower_ee_clk(hw, &eecd);	}	return data;}/****************************************************************************** * Prepares EEPROM for access * * hw - Struct containing variables accessed by shared code * * Lowers EEPROM clock. Clears input pin. Sets the chip select pin. This * function should be called before issuing a command to the EEPROM. *****************************************************************************/static voide1000_setup_eeprom(struct e1000_hw *hw){	uint32_t eecd;	eecd = E1000_READ_REG(hw, EECD);	/* Clear SK and DI */	eecd &= ~(E1000_EECD_SK | E1000_EECD_DI);	E1000_WRITE_REG(hw, EECD, eecd);	/* Set CS */	eecd |= E1000_EECD_CS;	E1000_WRITE_REG(hw, EECD, eecd);}/****************************************************************************** * Returns EEPROM to a "standby" state * * hw - Struct containing variables accessed by shared code *****************************************************************************/static voide1000_standby_eeprom(struct e1000_hw *hw){	uint32_t eecd;	eecd = E1000_READ_REG(hw, EECD);	/* Deselct EEPROM */	eecd &= ~(E1000_EECD_CS | E1000_EECD_SK);	E1000_WRITE_REG(hw, EECD, eecd);	E1000_WRITE_FLUSH(hw);	udelay(50);	/* Clock high */	eecd |= E1000_EECD_SK;	E1000_WRITE_REG(hw, EECD, eecd);	E1000_WRITE_FLUSH(hw);	udelay(50);	/* Select EEPROM */	eecd |= E1000_EECD_CS;	E1000_WRITE_REG(hw, EECD, eecd);	E1000_WRITE_FLUSH(hw);	udelay(50);	/* Clock low */	eecd &= ~E1000_EECD_SK;	E1000_WRITE_REG(hw, EECD, eecd);	E1000_WRITE_FLUSH(hw);	udelay(50);}/****************************************************************************** * Reads a 16 bit word from the EEPROM. * * hw - Struct containing variables accessed by shared code * offset - offset of  word in the EEPROM to read * data - word read from the EEPROM *****************************************************************************/static inte1000_read_eeprom(struct e1000_hw *hw, uint16_t offset, uint16_t * data){	uint32_t eecd;	uint32_t i = 0;	int large_eeprom = FALSE;	/* Request EEPROM Access */	if (hw->mac_type > e1000_82544) {		eecd = E1000_READ_REG(hw, EECD);		if (eecd & E1000_EECD_SIZE)			large_eeprom = TRUE;		eecd |= E1000_EECD_REQ;		E1000_WRITE_REG(hw, EECD, eecd);		eecd = E1000_READ_REG(hw, EECD);		while ((!(eecd & E1000_EECD_GNT)) && (i < 100)) {			i++;			udelay(10);			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 -E1000_ERR_EEPROM;		}	}	/*  Prepare the EEPROM for reading  */	e1000_setup_eeprom(hw);	/*  Send the READ command (opcode + addr)  */	e1000_shift_out_ee_bits(hw, EEPROM_READ_OPCODE, 3);	e1000_shift_out_ee_bits(hw, offset, (large_eeprom) ? 8 : 6);	/* Read the data */	*data = e1000_shift_in_ee_bits(hw);	/* End this read operation */	e1000_standby_eeprom(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);	}	return 0;}#if 0static voide1000_eeprom_cleanup(struct e1000_hw *hw){	uint32_t eecd;	eecd = E1000_READ_REG(hw, EECD);	eecd &= ~(E1000_EECD_CS | E1000_EECD_DI);	E1000_WRITE_REG(hw, EECD, eecd);	e1000_raise_ee_clk(hw, &eecd);	e1000_lower_ee_clk(hw, &eecd);}static uint16_te1000_wait_eeprom_done(struct e1000_hw *hw){	uint32_t eecd;	uint32_t i;	e1000_standby_eeprom(hw);	for (i = 0; i < 200; i++) {		eecd = E1000_READ_REG(hw, EECD);		if (eecd & E1000_EECD_DO)			return (TRUE);		udelay(5);	}	return (FALSE);}static inte1000_write_eeprom(struct e1000_hw *hw, uint16_t Reg, uint16_t Data){	uint32_t eecd;	int large_eeprom = FALSE;	int i = 0;	/* Request EEPROM Access */	if (hw->mac_type > e1000_82544) {		eecd = E1000_READ_REG(hw, EECD);		if (eecd & E1000_EECD_SIZE)			large_eeprom = TRUE;		eecd |= E1000_EECD_REQ;		E1000_WRITE_REG(hw, EECD, eecd);		eecd = E1000_READ_REG(hw, EECD);		while ((!(eecd & E1000_EECD_GNT)) && (i < 100)) {			i++;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲444eee在线观看| 精品99一区二区| 美女一区二区视频| 国产精品女主播在线观看| 欧美老肥妇做.爰bbww视频| 成人视屏免费看| 精品一区二区国语对白| 亚洲日本电影在线| 欧美精品一区二区三区蜜臀| 欧美在线你懂的| 国产精品资源网站| 丝袜美腿高跟呻吟高潮一区| 综合自拍亚洲综合图不卡区| 欧美成人福利视频| 欧美日韩一级二级| 99re热视频精品| 国产98色在线|日韩| 麻豆精品久久久| 一区二区高清在线| 国产精品久久久久久久久久免费看 | 亚洲韩国一区二区三区| 国产精品网站一区| 欧美精品一区二区在线播放 | av在线播放一区二区三区| 美女视频一区在线观看| 婷婷丁香久久五月婷婷| 一区二区三区欧美亚洲| 国产精品看片你懂得| 久久久久久99久久久精品网站| 56国语精品自产拍在线观看| 欧美亚洲动漫精品| 91精彩视频在线观看| 白白色 亚洲乱淫| 成人免费视频视频| 成人深夜视频在线观看| 国产xxx精品视频大全| 国产真实乱子伦精品视频| 免费成人结看片| 美女爽到高潮91| 久久99久久精品| 激情文学综合网| 国产乱子轮精品视频| 国产一区二区三区免费观看| 国产精品主播直播| 国产精品一区二区在线观看网站| 狠狠狠色丁香婷婷综合久久五月| 狠狠色丁香婷综合久久| 亚洲第一二三四区| 日本一区二区三区国色天香| 日韩美女天天操| 在线免费视频一区二区| 日韩成人一级大片| 日本怡春院一区二区| 免费观看91视频大全| 精品亚洲porn| 国产成人精品午夜视频免费| 波多野结衣欧美| 91免费国产视频网站| 一本久久综合亚洲鲁鲁五月天| 色琪琪一区二区三区亚洲区| 欧美无砖专区一中文字| 91精品免费在线观看| 精品噜噜噜噜久久久久久久久试看| 欧美xxxxx牲另类人与| 国产午夜精品理论片a级大结局 | 久久精品国产第一区二区三区| 看片的网站亚洲| 国产超碰在线一区| 一本久久a久久精品亚洲| 欧美性色黄大片| 精品日韩一区二区三区| 国产精品久久久久久久久免费桃花| 一区二区三区高清在线| 日本欧美一区二区在线观看| 国产精品一品视频| 99re这里都是精品| 欧美日韩视频在线第一区| 91精品蜜臀在线一区尤物| 欧美在线视频不卡| 欧美影院精品一区| 欧美不卡一区二区三区| 国产精品毛片无遮挡高清| 亚洲一区二区三区精品在线| 美腿丝袜亚洲综合| 99久久综合色| 欧美一级高清片在线观看| 国产精品麻豆欧美日韩ww| 亚洲日本丝袜连裤袜办公室| 免费一区二区视频| 色94色欧美sute亚洲线路一久| 69av一区二区三区| 亚洲国产精品影院| 日韩精品一二三四| 日韩av高清在线观看| 日韩成人伦理电影在线观看| 国产高清在线精品| 久久综合久色欧美综合狠狠| 99re在线视频这里只有精品| 国产传媒欧美日韩成人| 欧美大片顶级少妇| 国产精品久久久久影视| 亚洲韩国精品一区| www.成人在线| 精品国产网站在线观看| 亚洲精品一二三区| 国产精品一区二区无线| 欧美精品一级二级三级| 亚洲丝袜美腿综合| 国产黑丝在线一区二区三区| 欧美一区二区久久久| 一区二区三区免费| 成人动漫中文字幕| 欧美一区二区精品| 亚洲bt欧美bt精品777| 99热这里都是精品| 久久九九影视网| 九色porny丨国产精品| 欧美日韩卡一卡二| 亚洲精品视频在线| 99久久精品国产毛片| 国产欧美一区二区三区沐欲 | 日韩视频免费观看高清完整版在线观看 | 制服丝袜av成人在线看| 久久国产精品一区二区| 色伊人久久综合中文字幕| 国产日韩欧美精品电影三级在线| 日本女优在线视频一区二区| 欧美日韩视频第一区| 一区二区三区电影在线播| av网站免费线看精品| 亚洲国产精品传媒在线观看| 国产一区二区三区av电影| 欧美一级在线视频| 三级不卡在线观看| 欧美一区二区视频在线观看2022| 婷婷成人激情在线网| 欧美日韩一级黄| 天天影视网天天综合色在线播放| 91美女视频网站| 亚洲精品久久久蜜桃| 色综合色狠狠天天综合色| 亚洲男帅同性gay1069| 一本色道综合亚洲| 一区二区三区在线观看动漫| 91久久国产最好的精华液| 亚洲一区二区精品视频| 欧美日本在线看| 日韩国产在线观看一区| 日韩三级视频中文字幕| 久久国产尿小便嘘嘘尿| 久久婷婷成人综合色| 国产寡妇亲子伦一区二区| 国产精品网曝门| 一本到不卡免费一区二区| 一区二区三区四区亚洲| 欧美日精品一区视频| 日韩一区精品视频| 久久综合成人精品亚洲另类欧美| 国产精品亚洲第一| 日韩理论片中文av| 欧美喷潮久久久xxxxx| 久久成人av少妇免费| 欧美韩日一区二区三区四区| av在线一区二区| 午夜精品久久久久久久久久| 6080国产精品一区二区| 国产高清不卡二三区| 亚洲美女视频在线| 91麻豆精品国产91| 国产福利精品一区| 一区二区在线观看免费视频播放| 欧美久久久久久蜜桃| 国产69精品一区二区亚洲孕妇| 亚洲激情五月婷婷| 日韩欧美一级精品久久| 成人av在线观| 亚洲午夜久久久| 久久色.com| 欧美综合一区二区| 精品午夜久久福利影院| 国产精品久久久久久久久果冻传媒| 欧美日韩午夜影院| 国产一区不卡视频| 亚洲成人动漫精品| 国产精品入口麻豆九色| 欧美伦理影视网| a美女胸又www黄视频久久| 五月天一区二区三区| 中文字幕av资源一区| 26uuu成人网一区二区三区| 一本色道久久综合亚洲精品按摩| 久久精品国产免费看久久精品| 亚洲欧洲精品天堂一级| 日韩亚洲欧美成人一区| 91视频观看免费| 狠狠色综合播放一区二区| 一区二区三区小说| 欧美国产日产图区| 精品动漫一区二区三区在线观看| 欧美在线免费观看亚洲|