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

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

?? e1000.c

?? UBOOT 源碼
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
/**************************************************************************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 (CONFIG_COMMANDS & CFG_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++;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩不卡一区| 国产欧美精品一区| 成人av资源下载| 日本午夜精品视频在线观看| 欧美国产乱子伦| 91精品国产一区二区三区香蕉| 国产一区二区在线视频| 午夜精品久久久久久| 亚洲视频精选在线| 欧美国产一区二区| 精品国精品国产| 69堂精品视频| 91福利区一区二区三区| 99久久婷婷国产综合精品| 精品亚洲aⅴ乱码一区二区三区| 亚洲午夜久久久久久久久久久| 国产三级久久久| 欧美电视剧免费全集观看| 欧美性猛交xxxxxx富婆| 91小视频免费观看| 成人影视亚洲图片在线| 国产精品一二二区| 极品美女销魂一区二区三区| 日韩av在线发布| 亚洲va欧美va人人爽| 一个色在线综合| 综合久久国产九一剧情麻豆| 欧美高清在线视频| 国产日韩欧美不卡在线| 精品少妇一区二区三区日产乱码| 欧美久久久一区| 欧美精品久久天天躁| 欧美日韩一区二区在线视频| 欧亚一区二区三区| 91福利资源站| 欧美天堂一区二区三区| 在线欧美小视频| 欧美在线观看视频一区二区| 欧洲精品视频在线观看| 欧美日韩国产精品成人| 欧美日韩精品是欧美日韩精品| 欧美性xxxxx极品少妇| 欧美日韩中文字幕一区二区| 欧美色图片你懂的| 69堂精品视频| 日韩精品一区国产麻豆| 精品国产一区二区三区不卡| 亚洲精品一区二区三区在线观看| 欧美成人精品福利| 久久久久久夜精品精品免费| 久久久精品黄色| 国产精品色在线观看| 亚洲男同1069视频| 婷婷中文字幕综合| 麻豆久久久久久| 国产a久久麻豆| 一本一道波多野结衣一区二区| 在线观看免费亚洲| 日韩三级在线观看| 国产精品美女久久久久久久 | 久久精品国产亚洲a| 激情图片小说一区| 成人黄色软件下载| 欧美性受xxxx黑人xyx| 欧美一区二区三区免费大片| 精品av综合导航| 国产精品盗摄一区二区三区| 亚洲高清视频的网址| 九一九一国产精品| 色偷偷一区二区三区| 337p亚洲精品色噜噜狠狠| 精品国产乱子伦一区| 1024成人网| 久久国产精品72免费观看| av亚洲精华国产精华精华| 91超碰这里只有精品国产| 欧美成人一区二区三区片免费 | 亚洲免费av观看| 免费不卡在线观看| 粉嫩高潮美女一区二区三区| 欧美性猛片aaaaaaa做受| 久久综合色之久久综合| 一区二区三区在线观看视频 | 91黄色免费版| 精品1区2区在线观看| 亚洲精品久久久久久国产精华液| 麻豆精品国产传媒mv男同| 99精品在线免费| 精品三级在线看| 亚洲狠狠爱一区二区三区| 国产成人午夜电影网| 欧美一区二区三区影视| 中文字幕中文字幕中文字幕亚洲无线| 婷婷国产在线综合| 99精品偷自拍| 久久精品视频在线免费观看| 天堂久久久久va久久久久| 成人性色生活片| 精品国产乱码久久久久久久| 亚洲一区二区综合| 成人精品小蝌蚪| 精品国产网站在线观看| 偷拍日韩校园综合在线| 色欧美乱欧美15图片| 欧美激情一二三区| 精品一区二区三区免费观看| 欧美日韩极品在线观看一区| 亚洲日本成人在线观看| 国产精品系列在线播放| 日韩亚洲欧美一区| 午夜精品123| 在线观看www91| 亚洲色欲色欲www| www.欧美日韩| 国产偷v国产偷v亚洲高清| 欧美bbbbb| 日韩视频在线你懂得| 午夜精品一区在线观看| 精品视频一区 二区 三区| 亚洲码国产岛国毛片在线| 成人性色生活片免费看爆迷你毛片| 日韩精品一区二区在线| 美女在线观看视频一区二区| 欧美一区二区三区四区久久| 亚洲国产精品精华液网站| 欧洲一区二区三区在线| 亚洲成人免费影院| 欧美日韩国产欧美日美国产精品| 亚洲国产精品久久久久婷婷884| 色婷婷综合久色| 亚洲一区二区黄色| 欧美日精品一区视频| 午夜精品久久久久| 日韩午夜小视频| 美女脱光内衣内裤视频久久影院| 欧美一级久久久| 另类小说欧美激情| 久久欧美中文字幕| 国产福利一区二区三区在线视频| 久久人人爽人人爽| 国产高清不卡二三区| 亚洲国产成人午夜在线一区| 成人高清视频免费观看| 成人欧美一区二区三区视频网页| 91麻豆国产自产在线观看| 亚洲一区二区精品视频| 555夜色666亚洲国产免| 蜜乳av一区二区三区| 久久精品视频免费| 99久久99精品久久久久久| 一二三四区精品视频| 欧美狂野另类xxxxoooo| 韩国在线一区二区| 欧美激情一区二区| 在线观看视频欧美| 另类调教123区 | 中文字幕亚洲精品在线观看| 色婷婷激情综合| 性做久久久久久| 久久综合久久鬼色| 一本大道久久a久久综合婷婷| 一二三区精品视频| 欧美一区二区三区四区在线观看| 亚洲综合色自拍一区| 懂色av中文字幕一区二区三区| 国产午夜精品一区二区 | 3751色影院一区二区三区| 国产精品91xxx| 亚洲综合清纯丝袜自拍| 日韩午夜小视频| bt7086福利一区国产| 午夜精品久久久久影视| 国产欧美一二三区| 欧美私人免费视频| 国产盗摄精品一区二区三区在线| 亚洲美女屁股眼交| 精品国产成人在线影院| 91小视频免费观看| 久久99精品久久久久久| 夜夜嗨av一区二区三区四季av| 国产亚洲一区二区三区四区| av男人天堂一区| 九九热在线视频观看这里只有精品| 成人欧美一区二区三区在线播放| 91精品国产综合久久精品图片| av网站免费线看精品| 美女网站在线免费欧美精品| 亚洲免费毛片网站| 26uuu国产电影一区二区| 欧美色偷偷大香| 99久久国产综合色|国产精品| 美日韩黄色大片| 一个色妞综合视频在线观看| 欧美经典三级视频一区二区三区| 91精品国产综合久久久久久久久久 | 欧美一区二区三区色| 一本大道综合伊人精品热热| 国产乱对白刺激视频不卡| 日韩高清不卡在线| 亚洲一本大道在线|