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

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

?? r8169.c

?? linux下從網卡遠程啟動
?? C
?? 第 1 頁 / 共 2 頁
字號:
/***************************************************************************    r8169.c: Etherboot device driver for the RealTek RTL-8169 Gigabit*    Written 2003 by Timothy Legge <tlegge@rogers.com>**    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., 675 Mass Ave, Cambridge, MA 02139, USA.**    Portions of this code based on:*	r8169.c: A RealTek RTL-8169 Gigabit Ethernet driver * 		for Linux kernel 2.4.x.**    Written 2002 ShuChen <shuchen@realtek.com.tw>*	  See Linux Driver for full information*	*    Linux Driver Version 1.27a, 10.02.2002* *    Thanks to:*    	Jean Chen of RealTek Semiconductor Corp. for*    	providing the evaluation NIC used to develop *    	this driver.  RealTek's support for Etherboot *    	is appreciated.*    	*    REVISION HISTORY:*    ================**    v1.0	11-26-2003	timlegge	Initial port of Linux driver*    v1.5	01-17-2004	timlegge	Initial driver output cleanup*    *    Indent Options: indent -kr -i8***************************************************************************//* to get some global routines like printf */#include "etherboot.h"/* to get the interface to the body of the program */#include "nic.h"/* to get the PCI support functions, if this is a PCI NIC */#include "pci.h"#include "timer.h"#define drv_version "v1.5"#define drv_date "01-17-2004"typedef unsigned char u8;typedef signed char s8;typedef unsigned short u16;typedef signed short s16;typedef unsigned int u32;typedef signed int s32;static u32 ioaddr;/* Condensed operations for readability. */#define virt_to_le32desc(addr)  cpu_to_le32(virt_to_bus(addr))#define le32desc_to_virt(addr)  bus_to_virt(le32_to_cpu(addr))/* media options */#define MAX_UNITS 8static int media[MAX_UNITS] = { -1, -1, -1, -1, -1, -1, -1, -1 };/* Maximum events (Rx packets, etc.) to handle at each interrupt. */static int max_interrupt_work = 20;/* Maximum number of multicast addresses to filter (vs. Rx-all-multicast).   The RTL chips use a 64 element hash table based on the Ethernet CRC.  */static int multicast_filter_limit = 32;/* MAC address length*/#define MAC_ADDR_LEN	6/* max supported gigabit ethernet frame size -- must be at least (dev->mtu+14+4).*/#define MAX_ETH_FRAME_SIZE	1536#define TX_FIFO_THRESH 256	/* In bytes */#define RX_FIFO_THRESH	7	/* 7 means NO threshold, Rx buffer level before first PCI xfer.  */#define RX_DMA_BURST	6	/* Maximum PCI burst, '6' is 1024 */#define TX_DMA_BURST	6	/* Maximum PCI burst, '6' is 1024 */#define EarlyTxThld 	0x3F	/* 0x3F means NO early transmit */#define RxPacketMaxSize	0x0800	/* Maximum size supported is 16K-1 */#define InterFrameGap	0x03	/* 3 means InterFrameGap = the shortest one */#define NUM_TX_DESC	1	/* Number of Tx descriptor registers */#define NUM_RX_DESC	4	/* Number of Rx descriptor registers */#define RX_BUF_SIZE	1536	/* Rx Buffer size */#define RTL_MIN_IO_SIZE 0x80#define TX_TIMEOUT  (6*HZ)/* write/read MMIO register */#define RTL_W8(reg, val8)	writeb ((val8), ioaddr + (reg))#define RTL_W16(reg, val16)	writew ((val16), ioaddr + (reg))#define RTL_W32(reg, val32)	writel ((val32), ioaddr + (reg))#define RTL_R8(reg)		readb (ioaddr + (reg))#define RTL_R16(reg)		readw (ioaddr + (reg))#define RTL_R32(reg)		((unsigned long) readl (ioaddr + (reg)))enum RTL8169_registers {	MAC0 = 0,		/* Ethernet hardware address. */	MAR0 = 8,		/* Multicast filter. */	TxDescStartAddr = 0x20,	TxHDescStartAddr = 0x28,	FLASH = 0x30,	ERSR = 0x36,	ChipCmd = 0x37,	TxPoll = 0x38,	IntrMask = 0x3C,	IntrStatus = 0x3E,	TxConfig = 0x40,	RxConfig = 0x44,	RxMissed = 0x4C,	Cfg9346 = 0x50,	Config0 = 0x51,	Config1 = 0x52,	Config2 = 0x53,	Config3 = 0x54,	Config4 = 0x55,	Config5 = 0x56,	MultiIntr = 0x5C,	PHYAR = 0x60,	TBICSR = 0x64,	TBI_ANAR = 0x68,	TBI_LPAR = 0x6A,	PHYstatus = 0x6C,	RxMaxSize = 0xDA,	CPlusCmd = 0xE0,	RxDescStartAddr = 0xE4,	EarlyTxThres = 0xEC,	FuncEvent = 0xF0,	FuncEventMask = 0xF4,	FuncPresetState = 0xF8,	FuncForceEvent = 0xFC,};enum RTL8169_register_content {	/*InterruptStatusBits */	SYSErr = 0x8000,	PCSTimeout = 0x4000,	SWInt = 0x0100,	TxDescUnavail = 0x80,	RxFIFOOver = 0x40,	RxUnderrun = 0x20,	RxOverflow = 0x10,	TxErr = 0x08,	TxOK = 0x04,	RxErr = 0x02,	RxOK = 0x01,	/*RxStatusDesc */	RxRES = 0x00200000,	RxCRC = 0x00080000,	RxRUNT = 0x00100000,	RxRWT = 0x00400000,	/*ChipCmdBits */	CmdReset = 0x10,	CmdRxEnb = 0x08,	CmdTxEnb = 0x04,	RxBufEmpty = 0x01,	/*Cfg9346Bits */	Cfg9346_Lock = 0x00,	Cfg9346_Unlock = 0xC0,	/*rx_mode_bits */	AcceptErr = 0x20,	AcceptRunt = 0x10,	AcceptBroadcast = 0x08,	AcceptMulticast = 0x04,	AcceptMyPhys = 0x02,	AcceptAllPhys = 0x01,	/*RxConfigBits */	RxCfgFIFOShift = 13,	RxCfgDMAShift = 8,	/*TxConfigBits */	TxInterFrameGapShift = 24,	TxDMAShift = 8,		/* DMA burst value (0-7) is shift this many bits */	/*rtl8169_PHYstatus */	TBI_Enable = 0x80,	TxFlowCtrl = 0x40,	RxFlowCtrl = 0x20,	_1000bpsF = 0x10,	_100bps = 0x08,	_10bps = 0x04,	LinkStatus = 0x02,	FullDup = 0x01,	/*GIGABIT_PHY_registers */	PHY_CTRL_REG = 0,	PHY_STAT_REG = 1,	PHY_AUTO_NEGO_REG = 4,	PHY_1000_CTRL_REG = 9,	/*GIGABIT_PHY_REG_BIT */	PHY_Restart_Auto_Nego = 0x0200,	PHY_Enable_Auto_Nego = 0x1000,	//PHY_STAT_REG = 1;	PHY_Auto_Neco_Comp = 0x0020,	//PHY_AUTO_NEGO_REG = 4;	PHY_Cap_10_Half = 0x0020,	PHY_Cap_10_Full = 0x0040,	PHY_Cap_100_Half = 0x0080,	PHY_Cap_100_Full = 0x0100,	//PHY_1000_CTRL_REG = 9;	PHY_Cap_1000_Full = 0x0200,	PHY_Cap_Null = 0x0,	/*_MediaType*/	_10_Half = 0x01,	_10_Full = 0x02,	_100_Half = 0x04,	_100_Full = 0x08,	_1000_Full = 0x10,	/*_TBICSRBit*/	TBILinkOK = 0x02000000,};static struct {	const char *name;	u8 version;		/* depend on RTL8169 docs */	u32 RxConfigMask;	/* should clear the bits supported by this chip */} rtl_chip_info[] = {	{"RTL-8169", 0x00, 0xff7e1880,},};enum _DescStatusBit {	OWNbit = 0x80000000,	EORbit = 0x40000000,	FSbit = 0x20000000,	LSbit = 0x10000000,};struct TxDesc {	u32 status;	u32 vlan_tag;	u32 buf_addr;	u32 buf_Haddr;};struct RxDesc {	u32 status;	u32 vlan_tag;	u32 buf_addr;	u32 buf_Haddr;};/* Define the TX Descriptor */static u8 tx_ring[NUM_TX_DESC * sizeof(struct TxDesc) + 256];//	__attribute__ ((aligned(256)));/* Create a static buffer of size RX_BUF_SZ for eachTX Descriptor.  All descriptors point to apart of this buffer */static unsigned char txb[NUM_TX_DESC * RX_BUF_SIZE];/* Define the RX Descriptor */static u8 rx_ring[NUM_RX_DESC * sizeof(struct TxDesc) + 256];  //  __attribute__ ((aligned(256)));/* Create a static buffer of size RX_BUF_SZ for eachRX Descriptor   All descriptors point to apart of this buffer */static unsigned char rxb[NUM_RX_DESC * RX_BUF_SIZE];struct rtl8169_private {	void *mmio_addr;	/* memory map physical address */	int chipset;	unsigned long cur_rx;	/* Index into the Rx descriptor buffer of next Rx pkt. */	unsigned long cur_tx;	/* Index into the Tx descriptor buffer of next Rx pkt. */	unsigned long dirty_tx;	unsigned char *TxDescArrays;	/* Index of Tx Descriptor buffer */	unsigned char *RxDescArrays;	/* Index of Rx Descriptor buffer */	struct TxDesc *TxDescArray;	/* Index of 256-alignment Tx Descriptor buffer */	struct RxDesc *RxDescArray;	/* Index of 256-alignment Rx Descriptor buffer */	unsigned char *RxBufferRings;	/* Index of Rx Buffer  */	unsigned char *RxBufferRing[NUM_RX_DESC];	/* Index of Rx Buffer array */	unsigned char *Tx_skbuff[NUM_TX_DESC];} tpx;static struct rtl8169_private *tpc;static const u16 rtl8169_intr_mask =    SYSErr | PCSTimeout | RxUnderrun | RxOverflow | RxFIFOOver | TxErr |    TxOK | RxErr | RxOK;static const unsigned int rtl8169_rx_config =    (RX_FIFO_THRESH << RxCfgFIFOShift) | (RX_DMA_BURST << RxCfgDMAShift);void mdio_write(int RegAddr, int value){	int i;	RTL_W32(PHYAR, 0x80000000 | (RegAddr & 0xFF) << 16 | value);	udelay(1000);	for (i = 2000; i > 0; i--) {		// Check if the RTL8169 has completed writing to the specified MII register		if (!(RTL_R32(PHYAR) & 0x80000000)) {			break;		} else {			udelay(100);		}	}}int mdio_read(int RegAddr){	int i, value = -1;	RTL_W32(PHYAR, 0x0 | (RegAddr & 0xFF) << 16);	udelay(1000);	for (i = 2000; i > 0; i--) {		// Check if the RTL8169 has completed retrieving data from the specified MII register		if (RTL_R32(PHYAR) & 0x80000000) {			value = (int) (RTL_R32(PHYAR) & 0xFFFF);			break;		} else {			udelay(100);		}	}	return value;}#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))static int rtl8169_init_board(struct pci_device *pdev){	int i, pm_cap;	unsigned long rtreg_base, rtreg_len;	u32 tmp;	rtreg_base = pci_bar_start(pdev, PCI_BASE_ADDRESS_1);	rtreg_len = pci_bar_size(pdev, PCI_BASE_ADDRESS_1);	// check for weird/broken PCI region reporting	if (rtreg_len < RTL_MIN_IO_SIZE) {		printf("Invalid PCI region size(s), aborting\n");	}	adjust_pci_device(pdev);	pm_cap = pci_find_capability(pdev, PCI_CAP_ID_PM);	// ioremap MMIO region 	ioaddr = (unsigned long) ioremap(rtreg_base, rtreg_len);	if (ioaddr == 0)		printf("Error cannot remap MMIO, aborting\n");	tpc->mmio_addr = &ioaddr;	// Soft reset the chip. 	RTL_W8(ChipCmd, CmdReset);	// Check that the chip has finished the reset.	for (i = 1000; i > 0; i--)		if ((RTL_R8(ChipCmd) & CmdReset) == 0)			break;		else			udelay(10);	// identify chip attached to board	tmp = RTL_R32(TxConfig);	tmp = ((tmp & 0x7c000000) + ((tmp & 0x00800000) << 2)) >> 24;	for (i = ARRAY_SIZE(rtl_chip_info) - 1; i >= 0; i--)		if (tmp == rtl_chip_info[i].version) {			tpc->chipset = i;			goto match;		}	//if unknown chip, assume array element #0, original RTL-8169 in this case	printf("PCI device %s: unknown chip version, assuming RTL-8169\n");	printf("PCI device: TxConfig = 0x%hX\n",	       (unsigned long) RTL_R32(TxConfig));	tpc->chipset = 0;      match:	return 0;}/**************************************************************************POLL - Wait for a frame***************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆国产精品一区二区三区| 国产精品国产三级国产普通话99| 亚洲黄色小说网站| 成人精品视频一区二区三区 | 欧美变态口味重另类| 九一九一国产精品| 亚洲精品一区二区三区福利 | 国产成人综合在线播放| 国产欧美日韩在线观看| 成人99免费视频| 亚洲黄色av一区| 日韩一级在线观看| 国产福利91精品一区二区三区| 国产精品久久三区| 在线观看欧美黄色| 日本亚洲视频在线| 久久理论电影网| 99riav一区二区三区| 亚洲成人激情综合网| 精品免费国产二区三区| 高清不卡一区二区| 亚洲国产精品久久不卡毛片| 欧美大白屁股肥臀xxxxxx| 国产精品99久久久久| 亚洲精选免费视频| 91精品国产综合久久精品app | 久久久久国产一区二区三区四区| 高清国产一区二区三区| 亚洲妇女屁股眼交7| 日韩视频永久免费| eeuss鲁片一区二区三区在线观看| 一区二区三区不卡视频在线观看| 91精品国产综合久久福利软件 | 国产成人综合在线播放| 亚洲一线二线三线久久久| 日韩一区二区三区免费观看| 国产成人精品亚洲午夜麻豆| 亚洲电影在线免费观看| wwww国产精品欧美| 在线精品亚洲一区二区不卡| 国产一区激情在线| 日韩影院精彩在线| 亚洲欧美日韩久久| 精品国内二区三区| 欧美性感一区二区三区| 国产成人精品亚洲777人妖| 午夜伦欧美伦电影理论片| 国产精品嫩草久久久久| 精品国产髙清在线看国产毛片| 91视频com| 国产精品乡下勾搭老头1| 香蕉成人伊视频在线观看| 国产精品久久免费看| 久久亚洲精华国产精华液| 欧美日本在线播放| 色先锋久久av资源部| 成人免费av在线| 国产自产2019最新不卡| 免费欧美在线视频| 亚洲第一电影网| 亚洲已满18点击进入久久| 亚洲欧洲综合另类| 国产精品久久久久久久第一福利 | 日本黄色一区二区| 成人开心网精品视频| 国产精品亚洲а∨天堂免在线| 美女视频一区在线观看| 日韩精品一区第一页| 性做久久久久久久久| 亚洲欧美日韩久久| 亚洲黄色在线视频| 一区二区国产盗摄色噜噜| 国产精品国产三级国产普通话蜜臀| 久久亚区不卡日本| 精品久久久久久久久久久久久久久久久 | 亚洲成精国产精品女| 亚洲免费成人av| 亚洲视频狠狠干| 1000部国产精品成人观看| 欧美激情一区不卡| 日本一区二区久久| 亚洲国产精品激情在线观看| 中文字幕乱码久久午夜不卡 | 国产69精品久久久久毛片| 国产乱码字幕精品高清av| 国产精品12区| 99精品视频一区二区| 一本大道久久精品懂色aⅴ| 欧美在线短视频| 在线中文字幕一区二区| 欧美日韩一卡二卡三卡| 日韩一级精品视频在线观看| 欧美大片在线观看一区| 国产亚洲制服色| 国产精品久久久久国产精品日日| 国产精品动漫网站| 午夜欧美一区二区三区在线播放| 日韩在线播放一区二区| 经典三级视频一区| 粉嫩绯色av一区二区在线观看 | 国产精品视频观看| 亚洲精品国产a| 天天操天天色综合| 国产乱对白刺激视频不卡| 成人国产电影网| 欧美视频在线观看一区| 7777精品伊人久久久大香线蕉| 日韩三级视频中文字幕| 久久久久国产精品麻豆ai换脸| 国产精品日韩成人| 亚洲va韩国va欧美va| 国产激情视频一区二区三区欧美| 色综合久久99| 日韩视频一区二区三区在线播放| 国产午夜精品一区二区三区四区| 亚洲欧美日韩人成在线播放| 奇米精品一区二区三区四区 | 欧美精品色综合| 国产午夜亚洲精品午夜鲁丝片| 樱桃视频在线观看一区| 久久国内精品视频| 99免费精品在线| 日韩午夜精品视频| 中文字幕在线一区二区三区| 五月婷婷激情综合网| 丁香另类激情小说| 日韩一级片在线观看| 亚洲男人的天堂在线观看| 精品在线亚洲视频| 欧美午夜不卡视频| 国产精品久久久久毛片软件| 日本不卡一区二区三区高清视频| 成人动漫视频在线| 日韩一区二区影院| 一区二区不卡在线视频 午夜欧美不卡在| 日本 国产 欧美色综合| 一本色道久久综合亚洲91 | 亚洲国产成人精品视频| 成人丝袜高跟foot| 26uuu亚洲综合色欧美| 午夜精品久久一牛影视| 色综合亚洲欧洲| 久久这里只有精品6| 午夜精品福利视频网站| 99精品在线免费| 国产农村妇女毛片精品久久麻豆| 奇米影视一区二区三区小说| 欧美性xxxxxxxx| 亚洲免费av高清| www.成人网.com| 久久亚洲欧美国产精品乐播| 免费在线观看一区| 欧美视频完全免费看| 一区二区三区久久| 91视频精品在这里| 亚洲丝袜自拍清纯另类| 丁香激情综合国产| 日本一区二区三区在线不卡| 国产在线精品一区二区三区不卡| 欧美一区二区三区男人的天堂| 亚洲123区在线观看| 欧美日韩免费一区二区三区| 亚洲精品高清视频在线观看| 91色综合久久久久婷婷| 亚洲人123区| 色视频成人在线观看免| 日韩伦理免费电影| 99久久国产综合精品女不卡| 国产精品每日更新在线播放网址 | 国产91露脸合集magnet| 久久亚洲二区三区| 国产成人免费9x9x人网站视频| 久久久精品2019中文字幕之3| 精品一区二区久久久| 精品国产青草久久久久福利| 久久97超碰色| 国产亚洲欧美一级| 成人综合日日夜夜| 国产精品拍天天在线| 99在线精品观看| 亚洲精品国产精华液| 欧美色图在线观看| 婷婷国产在线综合| 欧美电影免费观看高清完整版在线 | 3d动漫精品啪啪一区二区竹菊| 亚洲福中文字幕伊人影院| 欧美精品在线视频| 麻豆精品新av中文字幕| 久久日一线二线三线suv| 国产精品资源网| 国产精品毛片久久久久久久| 91九色02白丝porn| 日本91福利区| 欧美国产精品一区| 欧美午夜不卡在线观看免费| 麻豆一区二区三区| 国产精品看片你懂得| 欧美手机在线视频| 国产伦精品一区二区三区在线观看 | 午夜视频一区在线观看|