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

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

?? dm9sw.c

?? 網(wǎng)卡芯片DM9003在linux下的驅(qū)動(dòng)程序。
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
/*  dm9sw.c: Version 0.2            Davicom DM9013 Local Bus/PCI NIC fast Ethernet driver for Linux.	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.  (C)Copyright 1997-2007 DAVICOM Semiconductor,Inc. All Rights Reserved.V0.2	bill	2006/12	- enable promiscuous mode (DM9013 V2 bug)	- remove early transmit (DM9013 don't have this function)	- remove cont_rx_pkt_cnt	- add dm9sw_switch_config()	- add dm9sw_switch_reset() (when reseting switch core, some registers don't be reset. Driver must reset them if NO EEPROM. )V0.1	bill	2006/08	- creat			*///#define CHECKSUM#if defined(MODVERSIONS)#include <linux/modversions.h>#endif#include <linux/config.h>#include <linux/init.h>				#include <linux/delay.h>#include <linux/module.h>#include <linux/ioport.h>#include <linux/netdevice.h>#include <linux/etherdevice.h>#include <linux/skbuff.h>#include <linux/version.h>#include <asm/dma.h>#include <linux/spinlock.h>#include <linux/crc32.h>#include "dm9sw.h"#define DM9013_ID		0x90130A46#define DM9003_ID		0x90030A46#define DM9KS_REGFF	(IMR_SRAM_autoReturn|IMR_TX_complete|IMR_RX_coming)#define DM9KS_NO_RX_INTR (IMR_SRAM_autoReturn|IMR_TX_complete)#define DM9KS_DISINTR	IMR_SRAM_autoReturn#define DM9KS_MIN_IO		0x300#define DM9KS_MAX_IO		0x370#define DM9K_IRQ		3/* timer wakeup time : 5 second */#define DMFE_TIMER_WUT  jiffies+(HZ*5)	#if defined(DM9KS_DEBUG)#define DMFE_DBUG(dbug_now, msg, vaule)\if (dmfe_debug||dbug_now) printk(KERN_ERR "dmfe: %s %x\n", msg, vaule)#else#define DMFE_DBUG(dbug_now, msg, vaule)\if (dbug_now) printk(KERN_ERR "dmfe: %s %x\n", msg, vaule)#endif#define wait_bit_clear(reg, bit)\wait_count=0;\while(1){\	if(!(ior(db,reg) & (1<<bit)))\		break;\	if(wait_count ==10000)\		printk("wait time out,reg0x%x\n",reg);\	wait_count++;\}#define wait_PHY_bit_clear(PHY_ID,reg, bit)\wait_count=0;\while(1){\	if(!(phy_read(db,reg,PHY_ID) & (1<<bit)))\		break;\	if(wait_count ==10000)\		printk("wait PHY time out,reg0x%x\n",reg);\	wait_count++;\}/* Structure declaration ------------------------------- */typedef struct board_info { 	u32 reset_counter;		/* counter: RESET */ 	u32 reset_tx_timeout;		/* RESET caused by TX Timeout */ 	u32 io_addr;			/* Register I/O base address */	u32 io_data;			/* Data I/O address */	int tx_pkt_cnt;	int port_mode;	u8 op_mode;			/* PHY operation mode */	u8 io_mode;			/* 0:word, 2:byte */	u8 device_wait_reset;		/* device state */	u8 Speed;			/* current speed */	u8 stop_transmit;	int cont_rx_pkt_cnt;	/* current number of continuos rx packets  */	struct timer_list timer;	struct net_device_stats stats;	unsigned char srom[128];	spinlock_t lock;		void (*MoveData)(struct board_info *,unsigned char *, int , int);} board_info_t;/* Global variable declaration ----------------------------- *//*static int dmfe_debug = 0;*/static struct net_device * dmfe_dev = NULL;/* For module input parameter */static int media_mode = DM9KS_AUTO;static u8  irq        = DM9K_IRQ;static u32 iobase     = DM9KS_MIN_IO;static int wait_count;/* function declaration ------------------------------------- */int dmfe_probe(struct net_device *);static int dmfe_open(struct net_device *);static int dmfe_start_xmit(struct sk_buff *, struct net_device *);static void dmfe_tx_done(unsigned long);static void dmfe_packet_receive(struct net_device *);static int dmfe_stop(struct net_device *);static struct net_device_stats * dmfe_get_stats(struct net_device *); static int dmfe_do_ioctl(struct net_device *, struct ifreq *, int);#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)static void dmfe_interrupt(int , void *, struct pt_regs *);#elsestatic irqreturn_t dmfe_interrupt(int , void *, struct pt_regs *);#endifstatic void dmfe_timer(unsigned long);static void dmfe_init_dm9000(struct net_device *);static unsigned long cal_CRC(unsigned char *, unsigned int, u8);static u8 ior(board_info_t *, int);static void iow(board_info_t *, int, u8);static u16 phy_read(board_info_t *, int, int);static void phy_write(board_info_t *, int, u16, int);static u16 read_srom_word(board_info_t *, int);static void dm9000_hash_table(struct net_device *);static void dmfe_timeout(struct net_device *);static void dmfe_reset(struct net_device *);static void move8(board_info_t *,unsigned char *, int , int );static void move16(board_info_t *,unsigned char *, int , int );static void move32(board_info_t *,unsigned char *, int , int );#if defined(CHECKSUM)static u8 check_rx_ready(u8);#endif#ifdef NAPIstatic int dmfe_poll (struct net_device *, int *);#endifstatic int vlan_port_vid(board_info_t *, int, u8);static int vlan_outpkt_tag(board_info_t *, int);static void vlan_group_map(board_info_t *,u8, u8);static void VLAN_SETUP(board_info_t *,int);static int dm9k_bw_control(board_info_t *, int, u8, u8, u8);static int qos_port_pri(board_info_t *, int, u8);static int qos_tos_enable(board_info_t *, int);static void QoS_SETUP(board_info_t *, int);inline u8 MAKE_MASK(int , int , int , int );//DECLARE_TASKLET(dmfe_tx_tasklet,dmfe_tx_done,0);/* DM9000 network baord routine ---------------------------- *//*  Search DM9000 board, allocate space and register it*/struct net_device * __init dmfe_probe1(void){	struct net_device *dev;	int err;#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)	dev = init_etherdev(NULL, sizeof(struct board_info));	ether_setup(dev);		#else	dev= alloc_etherdev(sizeof(struct board_info));#endif	if(!dev)		return ERR_PTR(-ENOMEM);     	SET_MODULE_OWNER(dev);	err = dmfe_probe(dev);	if (err)		goto out;#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)	err = register_netdev(dev);	if (err)		goto out1;#endif	return dev;out1:	release_region(dev->base_addr,2);out:#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)	kfree(dev);#else	free_netdev(dev);#endif	return ERR_PTR(err);}int __init dmfe_probe(struct net_device *dev){	struct board_info *db;    /* Point a board information structure */	u32 id_val;	u16 i, dm9000_found = FALSE;	u8 MAC_addr[6]={0x00,0x11,0x22,0x33,0x44,0x55};	u8 HasEEPROM=0;	DMFE_DBUG(0, "dmfe_probe()",0);	/* Search All DM9000 serial NIC */	do {		outb(DM9KS_VID_L, iobase);		id_val = inb(iobase + 4);		outb(DM9KS_VID_H, iobase);		id_val |= inb(iobase + 4) << 8;		outb(DM9KS_PID_L, iobase);		id_val |= inb(iobase + 4) << 16;		outb(DM9KS_PID_H, iobase);		id_val |= inb(iobase + 4) << 24;		if ((id_val == DM9013_ID)||(id_val == DM9003_ID)) {						/* Request IO from system */			if(!request_region(iobase, 2, dev->name))				return -ENODEV;			printk("<DM9SW> I/O: %x, VID: %x \n",iobase, id_val);			dm9000_found = TRUE;			/* Allocated board information structure */			memset(dev->priv, 0, sizeof(struct board_info));			db = (board_info_t *)dev->priv;			dmfe_dev    = dev;			db->io_addr  = iobase;			db->io_data = iobase + 4;			/* driver system function */							dev->base_addr 		= iobase;			dev->irq 		= irq;			dev->open 		= &dmfe_open;			dev->hard_start_xmit 	= &dmfe_start_xmit;			dev->watchdog_timeo	= 5*HZ;				dev->tx_timeout		= dmfe_timeout;			dev->stop 		= &dmfe_stop;			dev->get_stats 		= &dmfe_get_stats;			dev->set_multicast_list = &dm9000_hash_table;			dev->do_ioctl 		= &dmfe_do_ioctl;#ifdef NAPI			dev->weight = 16; 			dev->poll = dmfe_poll;#endif#if defined(CHECKSUM)			dev->features |=  NETIF_F_IP_CSUM;#endif			/* Read SROM content */			for (i=0; i<64; i++)				((u16 *)db->srom)[i] = read_srom_word(db, i);			/* Detect EEPROM */			for (i=0; i<6; i++)				if(db->srom[i]) HasEEPROM=1;						/* Set Node Address */			for (i=0; i<6; i++)			{				if (HasEEPROM)					dev->dev_addr[i] = db->srom[i];				else					dev->dev_addr[i] = MAC_addr[i];			}		}//end of if()		iobase += 0x10;	}while(!dm9000_found && iobase <= DM9KS_MAX_IO);	return dm9000_found ? 0:-ENODEV;}/*  Open the interface.  The interface is opened whenever "ifconfig" actives it.*/static int dmfe_open(struct net_device *dev){	board_info_t *db = (board_info_t *)dev->priv;	DMFE_DBUG(0, "dmfe_open", 0);	if (request_irq(dev->irq,&dmfe_interrupt,SA_SHIRQ,dev->name,dev)) 		return -EAGAIN;	/* Initilize DM910X board */	dmfe_init_dm9000(dev);  	switch(db->io_mode)	{		case DM9KS_BYTE_MODE:				db->MoveData = & move8;			break;		case DM9KS_WORD_MODE:				db->MoveData = & move16;      			break;    		case DM9KS_DWORD_MODE:       				db->MoveData = & move32;			break;	} 	/* Init driver variable */	db->reset_counter 	= 0;	db->reset_tx_timeout 	= 0;	db->cont_rx_pkt_cnt	= 0;		/* set and active a timer process */	init_timer(&db->timer);	db->timer.expires 	= DMFE_TIMER_WUT * 2;	db->timer.data 		= (unsigned long)dev;	db->timer.function 	= &dmfe_timer;	add_timer(&db->timer);	//Move to DM9000 initiallization was finished. 		netif_start_queue(dev);	return 0;}/* Set PHY operationg mode*/static void set_PHY_mode(board_info_t *db){	int i;	u16 phy_reg0 = 0x1200;/* Auto-negotiation & Restart Auto-negotiation */	u16 phy_reg4 = 0x01e1;/* Default flow control disable*/	for (i=0; i<db->port_mode; i++) /* reset PHY */		phy_write(db, 0, 0x8000, i);	/* wait for PHY ready */	for (i=0; i<db->port_mode; i++)		wait_PHY_bit_clear(i, 0, 15);	if ( !(db->op_mode & DM9KS_AUTO) ) // op_mode didn't auto sense */	{ 		switch(db->op_mode) {			case DM9KS_10MHD:  phy_reg4 = 0x21;              				   phy_reg0 = 0x1000;					   break;			case DM9KS_10MFD:  phy_reg4 = 0x41; 					   phy_reg0 = 0x1100;             				   break;			case DM9KS_100MHD: phy_reg4 = 0x81; 					   phy_reg0 = 0x3000;				     	   break;			case DM9KS_100MFD: phy_reg4 = 0x101; 					   phy_reg0 = 0x3100;				   	   break;			default: 					   break;		} // end of switch		for(i=0; i<db->port_mode; i++)		{			phy_write(db, 4, phy_reg4,i);			phy_write(db, 0, phy_reg0,i);		}	} // end of if}static void dm9sw_switch_reset(board_info_t *db){	int i;	/* reset VLAN mapping table */	for (i=0xb0; i<=0xbf; i++)		vlan_group_map(db, i, MAKE_MASK(1, 1, 1, 1));	/* reset Per-Port VID*/	for(i=0; i<4; i++)		vlan_port_vid(db,i,1);	/* reset VLAN control */	iow (db, DM9KS_VLANCR, 0);	/* reset Per-Port switch control */	for(i=0; i<4; i++)	{		iow(db, DM9KS_PIndex, i);		iow(db, 0x61, 0);		iow(db, 0x66, 0);		iow(db, 0x67, 0);		iow(db, 0x6D, 0);		iow(db, 0x6F, 0);	}		}static void dm9sw_switch_config(board_info_t * db){	dm9sw_switch_reset(db);	/* switch control */#if 0	VLAN_SETUP(db,1); /* 0:port-base, 1:Tag-base */#endif#if 0	QoS_SETUP(db,0); /* 0:port, 1:Tag, 2:TOS */#endif#if 0 	/* Bandwidth control 	 dm9k_bw_control(db,port_no, bw_type, bit7-4, bit3-0) 	 bw_type(reg61H.[3]): 0:control with Ingress and Egress separately		              1:control with Ingress or Egress	 bit7-4 and bit 3-0:refer to reg66H and reg67H	 If bw_type=1, bit7-4 must be "0".	*/	dm9k_bw_control(db,1,0,0,2); 	dm9k_bw_control(db,0,0,2,0); #endif}/* 	Initilize dm9000 board*/static void dmfe_init_dm9000(struct net_device *dev){	board_info_t *db = (board_info_t *)dev->priv;	DMFE_DBUG(0, "dmfe_init_dm9000()", 0);	spin_lock_init(&db->lock);	/* switch reset */	iow(db, DM9KS_SCR, DM9KS_SCR_ResetSwitch);	wait_bit_clear(DM9KS_SCR,6);		/* software reset */	iow(db, DM9KS_NCR, NCR_Reset);	wait_bit_clear(DM9KS_NCR,0);	/* I/O mode */	db->io_mode = ior(db, DM9KS_ISR) >> 6; /* ISR bit7:6 keeps I/O mode */	/* DM9013 is 2 port mode or 3 port mode */	db->port_mode = (ior(db, DM9KS_MONITOR2)&(1<<6)) ? 2:3;	/* Set PHY */	db->op_mode = media_mode;	set_PHY_mode(db);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一级大片网址| 91精品国产福利在线观看 | 久久人人爽人人爽| 日本韩国一区二区三区视频| 美女视频黄 久久| 夜夜爽夜夜爽精品视频| 久久免费午夜影院| 欧美精品一卡二卡| 一本色道久久综合亚洲aⅴ蜜桃| 久久99日本精品| 亚洲综合精品久久| 亚洲人成网站在线| 亚洲国产精品ⅴa在线观看| 日韩欧美一二三| 国产精品久久影院| 日韩一区二区三区电影 | 久久久夜色精品亚洲| 欧美日本在线播放| 日本乱码高清不卡字幕| 成人综合日日夜夜| 国产一区二区三区在线观看免费 | 亚洲国产欧美在线| 亚洲色图欧美在线| 国产精品美女久久久久久久久 | 国产欧美视频在线观看| 日韩女优毛片在线| 欧美一级二级三级蜜桃| 欧美另类一区二区三区| 欧美午夜不卡在线观看免费| 91免费观看在线| 一本在线高清不卡dvd| 99热这里都是精品| 97se亚洲国产综合自在线| 成人短视频下载| 99视频在线观看一区三区| 成年人网站91| 91日韩在线专区| 91在线观看污| 91国偷自产一区二区开放时间| 99热这里都是精品| 日本韩国精品在线| 欧美三级在线播放| 欧美精品一二三四| 欧美一区二区三区免费观看视频| 欧美老肥妇做.爰bbww| 欧美日韩国产天堂| 欧美一区2区视频在线观看| 欧美一卡2卡三卡4卡5免费| 日韩一区二区免费在线观看| 欧美一区二区三区视频免费| 日韩精品一区二区三区老鸭窝| 精品国内片67194| 国产午夜三级一区二区三| 国产女同性恋一区二区| 成人免费视频在线观看| 亚洲永久精品大片| 日韩电影在线观看电影| 美国一区二区三区在线播放| 韩国成人精品a∨在线观看| 国产成人在线视频免费播放| 不卡的av电影| 欧美三级视频在线| 欧美成人精品二区三区99精品| 欧美精品一区二区三区在线| 国产精品免费av| 亚洲第四色夜色| 蜜臀av在线播放一区二区三区| 国产麻豆视频一区二区| 97aⅴ精品视频一二三区| 91.com在线观看| 欧美国产一区在线| 亚洲自拍另类综合| 激情六月婷婷综合| 色综合久久久久综合| 日韩免费在线观看| 国产精品久久久久一区二区三区共| 一区二区三区高清不卡| 久久福利视频一区二区| 91免费在线播放| 日韩欧美高清在线| 亚洲男同1069视频| 久久国产婷婷国产香蕉| 99国产欧美另类久久久精品| 欧美一区二区三区视频在线观看| 欧美国产精品一区二区三区| 亚洲高清不卡在线观看| 国产超碰在线一区| 欧美老年两性高潮| 亚洲天堂2014| 久久精品二区亚洲w码| 91色porny蝌蚪| 亚洲精品在线电影| 亚洲一二三专区| 国产成人av一区二区三区在线| 欧美视频精品在线观看| 日本一区二区三区电影| 日韩av中文字幕一区二区三区| 不卡的av在线播放| 久久综合狠狠综合久久综合88| 亚洲精品国产无天堂网2021| 国模无码大尺度一区二区三区| 欧美羞羞免费网站| 国产精品免费人成网站| 久久精品国产亚洲aⅴ| 色天天综合色天天久久| 国产日韩高清在线| 久久99精品国产麻豆不卡| 欧美色综合影院| 亚洲视频网在线直播| 国产精品白丝jk白祙喷水网站| 555夜色666亚洲国产免| 一区二区三区**美女毛片| 成人精品视频.| 久久免费的精品国产v∧| 蜜臀av性久久久久蜜臀av麻豆| 91福利在线导航| 亚洲人成网站在线| 成人av影院在线| 国产欧美日韩卡一| 国产在线观看免费一区| 日韩午夜精品电影| 日日夜夜精品视频天天综合网| 91麻豆免费看| 中文字幕一区二区日韩精品绯色| 国产精品中文字幕一区二区三区| 日韩免费观看高清完整版| 石原莉奈在线亚洲二区| 欧美体内she精视频| 一区二区三区在线观看欧美| 91麻豆精品视频| 亚洲男同性恋视频| 色哟哟精品一区| 亚洲一区二区影院| 欧美三区在线视频| 丝袜美腿一区二区三区| 欧美老年两性高潮| 三级一区在线视频先锋 | 国产精品看片你懂得| 国产精品综合一区二区三区| 2021久久国产精品不只是精品| 久久精品国产秦先生| 日韩精品在线网站| 国产在线精品一区二区夜色| 久久综合精品国产一区二区三区| 精品综合久久久久久8888| 精品国产1区2区3区| 国产美女精品一区二区三区| 国产欧美精品一区aⅴ影院| 成人ar影院免费观看视频| 中文字幕在线观看不卡视频| 99国产精品99久久久久久| 亚洲精品免费看| 欧美日本一区二区三区四区| 日韩福利视频导航| 久久久久久久久蜜桃| 成人av在线播放网站| 亚洲综合视频网| 日韩精品一区二区三区中文不卡| 国产一区二区三区久久久| 国产精品女主播av| 欧美在线一区二区三区| 另类小说图片综合网| 久久久久国产免费免费 | 亚洲精品在线观| 成人av在线网站| 亚洲午夜久久久久久久久电影网| 欧美日本一道本| 国产精品资源在线观看| 亚洲日本欧美天堂| 欧美一区二区三区婷婷月色| 国产精品亚洲综合一区在线观看| 亚洲欧美一区二区视频| 69堂国产成人免费视频| 丰满放荡岳乱妇91ww| 亚洲大片一区二区三区| 久久久精品一品道一区| 在线精品视频免费观看| 国产自产视频一区二区三区| 亚洲欧洲制服丝袜| 欧美xxxxx牲另类人与| 91日韩精品一区| 久国产精品韩国三级视频| 亚洲天堂中文字幕| 欧美mv日韩mv国产网站app| 99国产精品视频免费观看| 蜜臀久久99精品久久久久宅男| 国产精品国产馆在线真实露脸| 91麻豆精品国产91久久久久久久久| 国产91综合网| 麻豆一区二区三区| 一区二区三区欧美日韩| 另类调教123区| 亚洲三级在线观看| 久久在线观看免费| 欧美区在线观看| 99久久精品国产网站| 国产一区二区三区四区五区入口| 一区二区三区在线观看动漫| 国产视频一区不卡| 日韩一区二区三区视频在线|