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

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

?? eexpress.c

?? linux 1.0 源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
	/* ToDo: decide if there are any useful statistics from the SCB. */	return &lp->stats;}#ifdef HAVE_MULTICAST/* Set or clear the multicast filter for this adaptor.   num_addrs == -1	Promiscuous mode, receive all packets   num_addrs == 0	Normal mode, clear multicast list   num_addrs > 0	Multicast mode, receive normal and MC packets, and do			best-effort filtering. */static voidset_multicast_list(struct device *dev, int num_addrs, void *addrs){	short ioaddr = dev->base_addr;	if (num_addrs < 0) {		/* Not written yet, this requires expanding the init_words config		   cmd. */	} else if (num_addrs > 0) {		/* Fill in the SET_MC_CMD with the number of address bytes, followed		   by the list of multicast addresses to be accepted. */		outw(SET_MC_CMD + 6, ioaddr + WRITE_PTR);		outw(num_addrs * 6, ioaddr);		outsw(ioaddr, addrs, num_addrs*3);		/* 3 = addr len in words */		/* We must trigger a whole 586 reset due to a bug. */	} else {		/* Not written yet, this requires expanding the init_words config		   cmd. */		outw(99, ioaddr);		/* Disable promiscuous mode, use normal mode */	}}#endif/* The horrible routine to read a word from the serial EEPROM. *//* The delay between EEPROM clock transitions. */#define eeprom_delay()	{ int _i = 40; while (--_i > 0) { __SLOW_DOWN_IO; }}#define EE_READ_CMD (6 << 6)intread_eeprom(int ioaddr, int location){	int i;	unsigned short retval = 0;	short ee_addr = ioaddr + EEPROM_Ctrl;	int read_cmd = location | EE_READ_CMD;	short ctrl_val = EE_CS | _586_RESET;		outb(ctrl_val, ee_addr);		/* Shift the read command bits out. */	for (i = 8; i >= 0; i--) {		short outval = (read_cmd & (1 << i)) ? ctrl_val | EE_DATA_WRITE			: ctrl_val;		outb(outval, ee_addr);		outb(outval | EE_SHIFT_CLK, ee_addr);	/* EEPROM clock tick. */		eeprom_delay();		outb(outval, ee_addr);	/* Finish EEPROM a clock tick. */		eeprom_delay();	}	outb(ctrl_val, ee_addr);		for (i = 16; i > 0; i--) {		outb(ctrl_val | EE_SHIFT_CLK, ee_addr);	 eeprom_delay();		retval = (retval << 1) | ((inb(ee_addr) & EE_DATA_READ) ? 1 : 0);		outb(ctrl_val, ee_addr);  eeprom_delay();	}	/* Terminate the EEPROM access. */	ctrl_val &= ~EE_CS;	outb(ctrl_val | EE_SHIFT_CLK, ee_addr);	eeprom_delay();	outb(ctrl_val, ee_addr);	eeprom_delay();	return retval;}static voidinit_82586_mem(struct device *dev){	struct net_local *lp = (struct net_local *)dev->priv;	short ioaddr = dev->base_addr;	/* Enable loopback to protect the wire while starting up.	   This is Superstition From Crynwr. */	outb(inb(ioaddr + Config) | 0x02, ioaddr + Config);	/* Hold the 586 in reset during the memory initialization. */	outb(_586_RESET, ioaddr + EEPROM_Ctrl);	/* Place the write pointer at 0xfff6 (address-aliased to 0xfffff6). */	outw(0xfff6, ioaddr + WRITE_PTR);	outsw(ioaddr, init_words, sizeof(init_words)>>1);	/* Fill in the station address. */	outw(SA_OFFSET, ioaddr + WRITE_PTR);	outsw(ioaddr, dev->dev_addr, 3);	/* The Tx-block list is written as needed.  We just set up the values. */#ifdef initial_text_tx	lp->tx_cmd_link = DUMP_DATA + 4;#else	lp->tx_cmd_link = IDLELOOP + 4;#endif	lp->tx_head = lp->tx_reap = TX_BUF_START;	init_rx_bufs(dev);	/* Start the 586 by releasing the reset line. */	outb(0x00, ioaddr + EEPROM_Ctrl);	/* This was time consuming to track down: you need to give two channel	   attention signals to reliably start up the i82586. */	outb(0, ioaddr + SIGNAL_CA);	{		int boguscnt = 50;		while (inw(ioaddr + SCB_STATUS) == 0)			if (--boguscnt == 0) {				printk("%s: i82586 initialization timed out with status %04x, cmd %04x.\n",					   dev->name, inw(ioaddr + SCB_STATUS), inw(ioaddr + SCB_CMD));				break;			}		/* Issue channel-attn -- the 82586 won't start without it. */		outb(0, ioaddr + SIGNAL_CA);	}	/* Disable loopback. */	outb(inb(ioaddr + Config) & ~0x02, ioaddr + Config);	if (net_debug > 4)		printk("%s: Initialized 82586, status %04x.\n", dev->name,			   inw(ioaddr + SCB_STATUS));	return;}/* Initialize the Rx-block list. */static void init_rx_bufs(struct device *dev){	struct net_local *lp = (struct net_local *)dev->priv;	short ioaddr = dev->base_addr;	int cur_rxbuf = lp->rx_head = RX_BUF_START;		/* Initialize each Rx frame + data buffer. */	do {	/* While there is room for one more. */		outw(cur_rxbuf, ioaddr + WRITE_PTR);		outw(0x0000, ioaddr); 				/* Status */		outw(0x0000, ioaddr);				/* Command */		outw(cur_rxbuf + RX_BUF_SIZE, ioaddr); /* Link */		outw(cur_rxbuf + 22, ioaddr);		/* Buffer offset */		outw(0xFeed, ioaddr); 				/* Pad for dest addr. */		outw(0xF00d, ioaddr);		outw(0xF001, ioaddr);		outw(0x0505, ioaddr); 				/* Pad for source addr. */		outw(0x2424, ioaddr);		outw(0x6565, ioaddr);		outw(0xdeaf, ioaddr);				/* Pad for protocol. */		outw(0x0000, ioaddr);				/* Buffer: Actual count */		outw(-1, ioaddr);					/* Buffer: Next (none). */		outw(cur_rxbuf + 0x20, ioaddr);		/* Buffer: Address low */		outw(0x0000, ioaddr);		/* Finally, the number of bytes in the buffer. */		outw(0x8000 + RX_BUF_SIZE-0x20, ioaddr);				lp->rx_tail = cur_rxbuf;		cur_rxbuf += RX_BUF_SIZE;	} while (cur_rxbuf <= RX_BUF_END - RX_BUF_SIZE);		/* Terminate the list by setting the EOL bit, and wrap the pointer to make	   the list a ring. */	outw(lp->rx_tail + 2, ioaddr + WRITE_PTR);	outw(0xC000, ioaddr);					/* Command, mark as last. */	outw(lp->rx_head, ioaddr);				/* Link */}static voidhardware_send_packet(struct device *dev, void *buf, short length){	struct net_local *lp = (struct net_local *)dev->priv;	short ioaddr = dev->base_addr;	short tx_block = lp->tx_head;	/* Set the write pointer to the Tx block, and put out the header. */	outw(tx_block, ioaddr + WRITE_PTR);	outw(0x0000, ioaddr);		/* Tx status */	outw(CMD_INTR|CmdTx, ioaddr);		/* Tx command */	outw(tx_block+16, ioaddr);	/* Next command is a NoOp. */	outw(tx_block+8, ioaddr);	/* Data Buffer offset. */	/* Output the data buffer descriptor. */	outw(length | 0x8000, ioaddr); /* Byte count parameter. */	outw(-1, ioaddr);			/* No next data buffer. */	outw(tx_block+22, ioaddr);	/* Buffer follows the NoOp command. */	outw(0x0000, ioaddr);		/* Buffer address high bits (always zero). */	/* Output the Loop-back NoOp command. */	outw(0x0000, ioaddr);		/* Tx status */	outw(CmdNOp, ioaddr);		/* Tx command */	outw(tx_block+16, ioaddr);	/* Next is myself. */	/* Output the packet using the write pointer.	   Hmmm, it feels a little like a 3c501! */	outsw(ioaddr + DATAPORT, buf, (length + 1) >> 1);	/* Set the old command link pointing to this send packet. */	outw(lp->tx_cmd_link, ioaddr + WRITE_PTR);	outw(tx_block, ioaddr);	lp->tx_cmd_link = tx_block + 20;	/* Set the next free tx region. */	lp->tx_head = tx_block + TX_BUF_SIZE;	if (lp->tx_head > TX_BUF_END - TX_BUF_SIZE)		lp->tx_head = TX_BUF_START;    if (net_debug > 4) {		printk("%s: EExp @%x send length = %d, tx_block %3x, next %3x, "			   "reap %4x status %4.4x.\n", dev->name, ioaddr, length,			   tx_block, lp->tx_head, lp->tx_reap, inw(ioaddr + SCB_STATUS));    }	if (lp->tx_head != lp->tx_reap)		dev->tbusy = 0;}static voideexp_rx(struct device *dev){	struct net_local *lp = (struct net_local *)dev->priv;	short ioaddr = dev->base_addr;	short saved_write_ptr = inw(ioaddr + WRITE_PTR);	short rx_head = lp->rx_head;	short rx_tail = lp->rx_tail;	short boguscount = 10;	short frame_status;	/* Set the read pointer to the Rx frame. */	outw(rx_head, ioaddr + READ_PTR);	while ((frame_status = inw(ioaddr)) < 0) {		/* Command complete */		short rfd_cmd = inw(ioaddr);		short next_rx_frame = inw(ioaddr);		short data_buffer_addr = inw(ioaddr);		short pkt_len;				/* Set the read pointer the data buffer. */		outw(data_buffer_addr, ioaddr + READ_PTR);		pkt_len = inw(ioaddr);		if (rfd_cmd != 0  ||  data_buffer_addr != rx_head + 22			||  pkt_len & 0xC000 != 0xC000) {			printk("%s: Rx frame at %#x corrupted, status %04x cmd %04x"				   "next %04x data-buf @%04x %04x.\n", dev->name, rx_head,				   frame_status, rfd_cmd, next_rx_frame, data_buffer_addr,				   pkt_len);		} else if ((frame_status & 0x2000) == 0) {			/* Frame Rxed, but with error. */			lp->stats.rx_errors++;			if (frame_status & 0x0800) lp->stats.rx_crc_errors++;			if (frame_status & 0x0400) lp->stats.rx_frame_errors++;			if (frame_status & 0x0200) lp->stats.rx_fifo_errors++;			if (frame_status & 0x0100) lp->stats.rx_over_errors++;			if (frame_status & 0x0080) lp->stats.rx_length_errors++;		} else {			/* Malloc up new buffer. */			int sksize;			struct sk_buff *skb;			pkt_len &= 0x3fff;			sksize = sizeof(struct sk_buff) + pkt_len;			skb = alloc_skb(sksize, GFP_ATOMIC);			if (skb == NULL) {				printk("%s: Memory squeeze, dropping packet.\n", dev->name);				lp->stats.rx_dropped++;				break;			}			skb->mem_len = sksize;			skb->mem_addr = skb;			skb->len = pkt_len;			skb->dev = dev;			outw(data_buffer_addr + 10, ioaddr + READ_PTR);			insw(ioaddr, skb->data, (pkt_len + 1) >> 1);		#ifdef HAVE_NETIF_RX			netif_rx(skb);#else			skb->lock = 0;			if (dev_rint((unsigned char*)skb, pkt_len, IN_SKBUFF, dev) != 0) {				kfree_s(skb, sksize);				lp->stats.rx_dropped++;				break;			}#endif			lp->stats.rx_packets++;		}		/* Clear the status word and set End-of-List on the rx frame. */		outw(rx_head, ioaddr + WRITE_PTR);		outw(0x0000, ioaddr);		outw(0xC000, ioaddr);#ifndef final_version		if (next_rx_frame != rx_head + RX_BUF_SIZE			&& next_rx_frame != RX_BUF_START) {			printk("%s: Rx next frame at %#x is %#x instead of %#x.\n", dev->name,				   rx_head, next_rx_frame, rx_head + RX_BUF_SIZE);			next_rx_frame = rx_head + RX_BUF_SIZE;			if (next_rx_frame >= RX_BUF_END - RX_BUF_SIZE)				next_rx_frame = RX_BUF_START;		}#endif		outw(rx_tail+2, ioaddr + WRITE_PTR);		outw(0x0000, ioaddr);	/* Clear the end-of-list on the prev. RFD. */#ifndef final_version		outw(rx_tail+4, ioaddr + READ_PTR);		if (inw(ioaddr) != rx_head) {			printk("%s: Rx buf link mismatch, at %04x link %04x instead of %04x.\n",				   dev->name, rx_tail, (outw(rx_tail+4, ioaddr + READ_PTR),inw(ioaddr)),				   rx_head);			outw(rx_head, ioaddr);		}#endif		rx_tail = rx_head;		rx_head = next_rx_frame;		if (--boguscount == 0)			break;		outw(rx_head, ioaddr + READ_PTR);	}		lp->rx_head = rx_head;	lp->rx_tail = rx_tail;		/* Restore the original write pointer. */	outw(saved_write_ptr, ioaddr + WRITE_PTR);}/* * Local variables: *  compile-command: "gcc -D__KERNEL__ -I/usr/src/linux/net/inet -I/usr/src/linux/drivers/net -Wall -Wstrict-prototypes -O6 -m486 -c eexpress.c" *  version-control: t *  kept-new-versions: 5 *  tab-width: 4 * End: */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美三级视频在线观看| 国产成人综合精品三级| 欧美三级电影精品| 亚洲成精国产精品女| 91麻豆精品久久久久蜜臀| 日韩福利视频网| 26uuu亚洲| aaa国产一区| 亚洲成人免费在线观看| 欧美一卡二卡在线| 国产成人在线视频网址| 中文字幕一区二区三区乱码在线| 色综合一区二区三区| 亚洲电影视频在线| 精品国产免费久久 | 欧美日韩免费在线视频| 首页综合国产亚洲丝袜| 精品乱码亚洲一区二区不卡| 粉嫩久久99精品久久久久久夜| 亚洲视频免费观看| 777a∨成人精品桃花网| 国产成人夜色高潮福利影视| 亚洲精品第1页| 日韩欧美激情一区| 91在线精品一区二区三区| 午夜精品一区二区三区三上悠亚 | 91激情五月电影| 日日嗨av一区二区三区四区| 国产亚洲美州欧州综合国| 91视频在线看| 国产综合色精品一区二区三区| 亚洲欧美日韩人成在线播放| 欧美人妇做爰xxxⅹ性高电影 | 日韩av不卡在线观看| 国产喂奶挤奶一区二区三区| 欧美午夜不卡在线观看免费| 国产成人综合在线| 日本午夜一本久久久综合| 国产精品国产自产拍高清av王其| 3d成人动漫网站| 色美美综合视频| 国产精品中文欧美| 日韩电影免费一区| 18成人在线视频| 久久久综合视频| 欧美猛男男办公室激情| 白白色亚洲国产精品| 麻豆成人av在线| 亚洲综合色噜噜狠狠| 国产精品久99| 337p日本欧洲亚洲大胆色噜噜| 色国产综合视频| 不卡视频在线看| 国产在线精品一区二区不卡了| 天堂va蜜桃一区二区三区| 综合欧美亚洲日本| 国产精品免费久久| 久久蜜臀中文字幕| 日韩精品中午字幕| 欧美精品视频www在线观看| 91在线观看视频| 9色porny自拍视频一区二区| 国产91在线观看| 国产一区二区三区在线观看免费 | 国产精品系列在线播放| 免费看日韩精品| 亚洲成人一区二区在线观看| 日韩美女视频19| 国产精品久久久久久久久果冻传媒 | 中文一区一区三区高中清不卡| 日韩一级欧美一级| 日韩视频一区在线观看| 日韩欧美专区在线| 日韩午夜电影在线观看| 欧美精品色综合| 欧美精品在线观看播放| 91精品国产手机| 日韩视频一区二区| 久久这里只精品最新地址| 久久天天做天天爱综合色| 久久亚洲二区三区| 国产偷国产偷亚洲高清人白洁| 国产夜色精品一区二区av| 国产亚洲一区字幕| 久久久国产午夜精品| 亚洲国产精品成人久久综合一区| 中文字幕免费一区| 亚洲视频在线观看一区| 亚洲综合免费观看高清完整版| 一区二区三区在线影院| 日韩在线一二三区| 狠狠狠色丁香婷婷综合激情| 福利一区福利二区| 色欧美88888久久久久久影院| 在线亚洲一区二区| 欧美人与z0zoxxxx视频| 精品久久久久久亚洲综合网| 久久精品水蜜桃av综合天堂| 国产精品黄色在线观看| 亚洲成人三级小说| 精品在线观看免费| gogogo免费视频观看亚洲一| 一本色道亚洲精品aⅴ| 555www色欧美视频| 国产无一区二区| 亚洲综合精品久久| 激情综合色综合久久综合| 99精品视频免费在线观看| 欧美三区在线观看| 欧美精品一区二区在线观看| 亚洲欧美在线视频观看| 日韩精品亚洲专区| 高清不卡一区二区在线| 欧美嫩在线观看| 日本一区二区三区高清不卡| 一区二区欧美国产| 精品一区二区三区影院在线午夜 | 国产精品夜夜爽| 色综合天天综合在线视频| 91精品国产一区二区三区蜜臀 | 欧美日韩精品一区二区天天拍小说 | 一本一本大道香蕉久在线精品| 91.麻豆视频| 国产精品久久777777| 日韩高清不卡在线| av一区二区不卡| 精品欧美黑人一区二区三区| 亚洲免费资源在线播放| 国内精品嫩模私拍在线| 欧美亚洲高清一区| 国产精品色婷婷| 麻豆精品视频在线观看视频| 成人av电影在线网| 欧美精品一区二区三区蜜桃视频| 亚洲激情男女视频| 国产98色在线|日韩| 日韩一级片网站| 亚洲专区一二三| eeuss鲁一区二区三区| 精品国产青草久久久久福利| 亚洲gay无套男同| 97se亚洲国产综合自在线不卡| 精品免费99久久| 日韩av在线播放中文字幕| 色综合久久综合中文综合网| 国产丝袜美腿一区二区三区| 久久国产成人午夜av影院| 8x福利精品第一导航| 亚洲成人免费在线观看| 在线观看一区日韩| 亚洲码国产岛国毛片在线| 高清久久久久久| 久久久久久97三级| 另类小说欧美激情| 欧美一二三区在线| 青青草原综合久久大伊人精品| 欧美性受xxxx黑人xyx性爽| 日韩理论片一区二区| 成人av网站在线| 国产精品乱码人人做人人爱| 国产成人免费视| 国产欧美日韩中文久久| 国产成人综合网| 国产精品美女久久久久久久| 大陆成人av片| 亚洲欧洲日韩在线| 99久久婷婷国产| 一区二区三区在线视频免费观看| 色综合久久久网| 一区二区三区在线播放| 在线亚洲欧美专区二区| 亚洲国产aⅴ天堂久久| 欧美三级电影网站| 日本视频一区二区| 精品国内片67194| 国产成人啪午夜精品网站男同| 国产日韩精品久久久| 丁香五精品蜜臀久久久久99网站| 国产拍欧美日韩视频二区| 成人免费视频国产在线观看| 综合久久国产九一剧情麻豆| 在线观看亚洲精品视频| 天涯成人国产亚洲精品一区av| 日韩一区二区免费在线观看| 激情小说亚洲一区| 亚洲欧洲日韩在线| 欧美精品一二三四| 国产精品一线二线三线| 国产精品久久国产精麻豆99网站| 色老头久久综合| 蜜桃视频在线观看一区二区| 久久久精品影视| 色综合久久天天综合网| 日韩av午夜在线观看| 国产欧美一区二区精品性色 | 精品写真视频在线观看| 国产精品私房写真福利视频| 在线观看国产91| 久久99精品视频| 亚洲男人都懂的|