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

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

?? dm9sw.c

?? 網卡芯片DM9003在linux下的驅動程序。
?? C
?? 第 1 頁 / 共 3 頁
字號:
	/* Program operating register */	iow(db, DM9KS_NCR, 0x20); /* reg.01 cleared by write 1 */	iow(db, DM9KS_FCR, 0x20); /* RX Flow Control Enable */ #if defined(CHECKSUM)	printk("<DM9SW>Enable checksum offload \n");	/* TX checksum enable */	iow(db, DM9KS_TCCR, TCCR_UDP_Chksum|TCCR_TCP_Chksum|TCCR_IP_Chksum);	/* RX checksum enable */	iow(db, DM9KS_RCSR, RCSR_RX_Chksum_enable);#endif	/* switch config */	/* If using EEPROM sets switch functions,  	   don't execute dm9sw_switch_config() function */	dm9sw_switch_config(db);	/* Set address filter table */	dm9000_hash_table(dev);	/* Activate DM9000A/DM9010 */	/* Promisucous mode bug DM9013 V2 */	iow(db, DM9KS_RXCR, RXCR_RxEnable|RXCR_Promiscuous);		iow(db, DM9KS_IMR, DM9KS_REGFF); /* Enable TX/RX interrupt mask */ 	/* Init Driver variable */	db->tx_pkt_cnt = 0;			netif_carrier_on(dev);}inline u8 MAKE_MASK(int p3, int p2, int p1, int p0){	p3 = p3 ? 1:0;	p2 = p2 ? 1:0;	p1 = p1 ? 1:0;	p0 = p0 ? 1:0;		return (p3<<3)|(p2<<2)|(p1<<1)|p0;}static void vlan_group_map(board_info_t *db,u8 reg_group, u8 mapping){	iow(db,reg_group,mapping);	}/*	vlan_type 0:Port-base		 1:Tag-base*/static void VLAN_SETUP(board_info_t *db, int vlan_type){		if (vlan_type)/* Tag-base */	{		printk("DM9013:VLAN TAG-BASE\n");		/* enble tag-base vlan (reg 53h.0=1) */			iow (db, DM9KS_VLANCR, (ior(db,DM9KS_VLANCR)&0xff)|0x1);				/*		input_port	output_port (1:tag-packet, 0:untag-packet)		   0             1		   1		 0		   1		 1		Per-port setting		01: VID(reg 6fH.[3:0])-->output packet tagging(reg 6dH.7=1)-->Group mapping		10: Group mapping		11: output packet tagging(reg 6dH.7=1)-->Group mapping		*/		/*01: set port VID*/		/*vlan_port_vid(db, port_no, VID)*/		vlan_port_vid(db,0,0); /* set P0 VID=0 */		vlan_port_vid(db,1,2); /* set P1 VID=2*/				/*01,11:Per-port output packet tagging enable */		vlan_outpkt_tag(db,0); 		vlan_outpkt_tag(db,1);		vlan_outpkt_tag(db,2); 		vlan_outpkt_tag(db,3);		/*01,10,11:group mapping */		vlan_group_map(db, VLAN_GROUP1, MAKE_MASK(1, 1, 1, 1));		vlan_group_map(db, VLAN_GROUP2, MAKE_MASK(1, 1, 1, 1));		}else{		printk("DM9013:VLAN PORT-BASE\n");		/* enble tag-base vlan (reg 53h.0=0) */			iow (db, DM9KS_VLANCR, (ior(db,DM9KS_VLANCR)&0xfe));		/* port-base VLAN 			step 1:set Port VID			Step 2:set Group mapping */					/* set port VID */		/* vlan_pvid(board_info_t, port_num, VID)*/		vlan_port_vid(db,0,1);/* P0 VID=1  */		vlan_port_vid(db,1,2);/* P1 VID=2  */		vlan_port_vid(db,3,3);/* P3 VID=3  */		/* group mapping */		vlan_group_map(db, VLAN_GROUP1, MAKE_MASK(1, 0, 0, 1));/* Group1 : P3, P0 */		vlan_group_map(db, VLAN_GROUP2, MAKE_MASK(1, 0, 0, 1));/* Group2 : P3, P0 */		vlan_group_map(db, VLAN_GROUP3, MAKE_MASK(1, 0, 1, 1));/* Group3 : P3, P1, P0*/	}}static int vlan_port_vid(board_info_t *db, int port, u8 VID){	if((port<0)||(port > 3)) 	{		printk("<DM9SW>Port number error\n ");		return 1;	}	iow(db, DM9KS_PIndex, port);	iow(db, DM9KS_VLAN_TAGL, VID);		return 0;}static int vlan_outpkt_tag(board_info_t *db, int port){	if(port < 0 || port > 3) 	{		printk("<DM9SW>Port number error \n");		return 1;	}	iow(db, DM9KS_PIndex, port);		iow(db, DM9KS_PPRI, ior(db,DM9KS_PPRI)|0x80); 	return 0;}static int qos_port_pri(board_info_t *db, int port, u8 priority){	u8 tmp;	if(port < 0 || port > 3) 	{		printk("<DM9SW>Port number error\n ");		return 1;	}	iow(db, DM9KS_PIndex, port);	tmp = (ior(db,DM9KS_PPRI)&0xfc)|priority;	iow(db, DM9KS_PPRI,tmp);	return 0;}static int qos_tos_enable(board_info_t *db, int port){	if(port < 0 || port > 3) 	{		printk("<DM9SW>Port number error\n ");		return 1;	}	iow(db, DM9KS_PIndex, port);	iow(db, DM9KS_PPRI,ior(db,DM9KS_PPRI)|0x8);	return 0;}static void QoS_SETUP(board_info_t *db, int QoS_type){	switch (QoS_type)	{	case 0: /* port */		printk("<DM9SW>Port Priority\n");		qos_port_pri(db,0,0); /* set P0 queue0  */		qos_port_pri(db,1,1); /* set P1 queue1  */		qos_port_pri(db,2,2); /* set P2 queue2  */		qos_port_pri(db,3,3); /* set P3 queue3  */		break;	case 1: /* Tag */		/* TAG-VLAN format		   | 0x8100 | vlan-priority(3bit)| CFI(1bit) | VID(12bit)| 		   VLAN-TAG priority (default)		   Queue 0 : vlan-priority = 0 & 1		   Queue 1 : vlan-priority = 2 & 3		   Queue 2 : vlan-priority = 4 & 5		   Queue 3 : vlan-priority = 6 & 7			   if you want to modify the priority map, please refer 		   reg0xC0 and reg0xC1 		 */		printk("<DM9SW>VLAN-TAG Priority\n");		break;	case 2: /* TOS */		printk("<DM9SW>TOS Priority\n");		//check most significant 6-bit of TOS		//iow(db, DM9KS_VLANCR, ior(db,DM9KS_VLANCR)|0x80);		qos_tos_enable(db,0);		qos_tos_enable(db,1);		qos_tos_enable(db,2);		qos_tos_enable(db,3);		/*if you want to modify the priority map,		 	if reg0x53.[7]=1				please refer reg0xC0~reg0xCF			else				please refer reg0xC0 and reg0xC1		*/		break;	}}/*	bw_type refer to reg 61H.3*/static int dm9k_bw_control(board_info_t *db, int port, u8 bw_type, u8 bit74, u8 bit30){	u8 tmp;	printk("<DM9SW>Bandwidth control\n");		if(port < 0 || port > 3) 	{		printk("<DM9SW>Port number error \n");		return 1;	}	iow(db, DM9KS_PIndex, port);/* set port index */	tmp = (ior(db,DM9KS_PCTRL)& 0xf7); /* clear bit3 */	bit74 &= 0x0f;	bit30 &= 0x0f;	if (bw_type==0)	{		iow(db, DM9KS_PCTRL, tmp);		/* per-port Ingress/Egress control */		//Reg.66H [7:4]=RX,[3:0]=TX		iow(db, DM9KS_PRATE, (bit74<<4)|bit30);	}else{ /* bw_type ==1*/		tmp|= 0x8;		iow(db, DM9KS_PCTRL, tmp);		tmp = (ior(db, DM9KS_PBW)&0xf0)|bit30;		iow(db, DM9KS_PBW, tmp);	}	return 0;}/*  Hardware start transmission.  Send a packet to media from the upper layer.*/static int dmfe_start_xmit(struct sk_buff *skb, struct net_device *dev){	board_info_t *db = (board_info_t *)dev->priv;	char * data_ptr;	if (db->tx_pkt_cnt >= 2) return 1;	/* packet counting */	db->tx_pkt_cnt++;	db->stats.tx_packets++;	db->stats.tx_bytes+=skb->len;	// FIFO has fulled already	if (db->tx_pkt_cnt == 2) 	{		netif_stop_queue(dev);		db->stop_transmit =1;	}	/* Disable all interrupt */	iow(db, DM9KS_IMR, DM9KS_DISINTR);	/* Set TX length to reg. 0xfc & 0xfd */	iow(db, DM9KS_TXPLL, (skb->len & 0xff));	iow(db, DM9KS_TXPLH, (skb->len >> 8) & 0xff);	/* Move data to TX SRAM */	data_ptr = (char *)skb->data;		outb(DM9KS_MWCMD, db->io_addr); // Write data into SRAM trigger	db->MoveData(db, data_ptr, skb->len, 1);		/* Issue TX polling command */	iow(db, DM9KS_TCR, TCR_TX_Request); 	/* Saved the time stamp */	dev->trans_start = jiffies;	db->cont_rx_pkt_cnt =0;	/* Free this SKB */	dev_kfree_skb(skb);	/* Re-enable interrupt */	iow(db, DM9KS_IMR, DM9KS_REGFF);	return 0;}/*  Stop the interface.  The interface is stopped when it is brought.*/static int dmfe_stop(struct net_device *dev){	board_info_t *db = (board_info_t *)dev->priv;	int i;	DMFE_DBUG(0, "dmfe_stop", 0);	/* deleted timer */	del_timer(&db->timer);	netif_stop_queue(dev); 	/* free interrupt */	free_irq(dev->irq, dev);	/* RESET devie */	for (i=0; i<=db->port_mode; i++)		phy_write(db, 0x00, 0x8000,i);	/* PHY RESET */	dm9sw_switch_reset(db);	iow(db, 0, 1); /* software reset  */	iow(db, 0x52, 0x60); /* reset switch core and analog PHY core  */	iow(db, DM9KS_RXCR, 0x00);	/* Disable RX */	iow(db, DM9KS_IMR, DM9KS_DISINTR);	/* Disable all interrupt */	/* Dump Statistic counter */#if FALSE	printk("\nRX FIFO OVERFLOW %lx\n", db->stats.rx_fifo_errors);	printk("RX CRC %lx\n", db->stats.rx_crc_errors);	printk("RX LEN Err %lx\n", db->stats.rx_length_errors);	printk("RESET %x\n", db->reset_counter);	printk("RESET: TX Timeout %x\n", db->reset_tx_timeout);	printk("g_TX_nsr %x\n", g_TX_nsr);#endif	return 0;}static void dmfe_tx_done(unsigned long unused){	struct net_device *dev = dmfe_dev;	board_info_t *db = (board_info_t *)dev->priv;	u8  nsr;	DMFE_DBUG(0, "dmfe_tx_done()", 0);		nsr = ior(db, DM9KS_NSR);	iow(db, DM9KS_NSR, nsr); /* clear TX packet complete status */	if(nsr & NSR_TX1END) db->tx_pkt_cnt--;	if(nsr & NSR_TX2END) db->tx_pkt_cnt--;	if (db->tx_pkt_cnt < 0)	{		printk("[dmfe_tx_done] tx_pkt_cnt ERROR!!\n");		db->tx_pkt_cnt =0;	}		if(db->stop_transmit ) 	{		netif_wake_queue(dev);		db->stop_transmit=0;	}				return;}/*  DM9000 insterrupt handler  receive the packet to upper layer, free the transmitted packet*/#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)static void dmfe_interrupt(int irq, void *dev_id, struct pt_regs *regs)#elsestatic irqreturn_t dmfe_interrupt(int irq, void *dev_id, struct pt_regs *regs)#endif{	struct net_device *dev = dev_id;	board_info_t *db;	int int_status;	u8 reg_save;	DMFE_DBUG(0, "dmfe_interrupt()", 0);	/* A real interrupt coming */	db = (board_info_t *)dev->priv;	spin_lock(&db->lock);	/* Save previous register address */	reg_save = inb(db->io_addr);	/* disable IMR */	iow(db, DM9KS_IMR, 0x80);	/* Got DM9000A/DM9010 interrupt status */	int_status = ior(db, DM9KS_ISR);	/* Got ISR */	iow(db, DM9KS_ISR, int_status);		/* Clear ISR status */ 	/* Trnasmit Interrupt check */	if (int_status & ISR_TX_complete)		dmfe_tx_done(0);	/* Received the coming packet */	if (int_status & ISR_RX_coming) #ifdef NAPI	{		if (netif_rx_schedule_prep(dev)) {			iow(db, DM9KS_IMR,DM9KS_NO_RX_INTR);      			__netif_rx_schedule(dev);                 }	}#else	dmfe_packet_receive(dev);#endif	iow(db, DM9KS_IMR, DM9KS_REGFF);		/* Restore previous register address */	outb(reg_save, db->io_addr); 	spin_unlock(&db->lock); #if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)	return IRQ_HANDLED;#endif}#if !defined(CHECKSUM)#define check_rx_ready(a)       ((a) == 0x01)#elseinline u8 check_rx_ready(u8 rxbyte){        if (!(rxbyte & 0x01))                return 0;        return ((rxbyte >> 4) | 0x01);}#endif#ifdef NAPIstatic int dmfe_poll (struct net_device *dev, int *budget){	board_info_t *db = (board_info_t *)dev->priv;	struct sk_buff *skb;        u8 rxbyte, val;        u16 MDRAH, MDRAL;        u32 tmpdata;	unsigned rx_work = dev->quota;	unsigned rx;	rx_t rx_desc;        u8 * ptr = (u8 *)&rx_desc;        u8 * rdptr;rx_status_loop:	rx = 0;	iow(db, DM9KS_ISR, ISR_RX_coming); //clean this bit	while(1){		/*store the value of Memory Data Read address register*/		MDRAH=ior(db, DM9KS_MDRAH);		MDRAL=ior(db, DM9KS_MDRAL);		rxbyte =ior(db, DM9KS_MRCMDX);  		rxbyte =ior(db, DM9KS_ISR);     /* Dummy read */		rxbyte =ior(db, DM9KS_MRCMDX);  /* read the byte of packet ready */				/* packet ready to receive check */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色一区在线观看| 亚洲国产精品av| 日本一区二区三区四区| 亚洲精品大片www| 国产二区国产一区在线观看| 欧美亚洲综合色| 中文字幕乱码一区二区免费| 免费在线观看不卡| 在线观看日韩电影| 国产精品毛片高清在线完整版| 亚洲一区二区成人在线观看| 成人激情校园春色| 久久久久国产精品人| 天天做天天摸天天爽国产一区 | 亚洲精品日产精品乱码不卡| 久久电影国产免费久久电影| 欧美日韩性生活| 日韩伦理av电影| 国产成人精品网址| 久久久久国产精品厨房| 美国精品在线观看| 欧美日韩专区在线| 一区二区三区四区乱视频| 不卡的看片网站| 国产精品婷婷午夜在线观看| 国产精选一区二区三区| 26uuu欧美日本| 久久综合综合久久综合| 4438x亚洲最大成人网| 亚洲色图欧洲色图| 91啪九色porn原创视频在线观看| 日本一区二区三区国色天香| 国产黄人亚洲片| 国产日韩欧美不卡在线| 精品一区二区在线视频| 91麻豆精品国产91久久久使用方法| 亚洲图片欧美激情| 不卡的av在线| 欧美激情一区二区三区在线| 国产精品亚洲一区二区三区在线| 日韩午夜在线观看视频| 免费观看一级特黄欧美大片| 欧美日本乱大交xxxxx| 亚洲国产欧美另类丝袜| 91麻豆6部合集magnet| 国产精品久久久久影视| 成人免费视频一区| 亚洲色图丝袜美腿| 欧美三级乱人伦电影| 日韩国产高清影视| 日韩欧美国产高清| 国产成人精品一区二| 最新日韩av在线| 在线观看亚洲成人| 免费在线观看不卡| 国产亚洲欧洲一区高清在线观看| 成人午夜又粗又硬又大| 亚洲综合免费观看高清完整版在线| 欧美三级电影在线看| 激情偷乱视频一区二区三区| 中文av一区二区| 欧美天堂亚洲电影院在线播放 | 日韩毛片视频在线看| 在线观看日韩国产| 欧美aaaaaa午夜精品| 精品久久久久av影院| 97久久人人超碰| 日韩精品五月天| 中文成人综合网| 欧美日韩一区视频| 国产成人综合视频| 亚洲成人先锋电影| 国产精品五月天| 欧美夫妻性生活| 成人福利视频在线| 免费国产亚洲视频| 亚洲激情在线激情| 国产亚洲欧美在线| 欧美日韩你懂得| 成人高清免费在线播放| 青青青爽久久午夜综合久久午夜| 国产精品国产精品国产专区不蜜 | 国产suv精品一区二区三区| 亚洲激情六月丁香| 久久精品网站免费观看| 欧美性生交片4| 成人丝袜视频网| 久久99精品国产麻豆婷婷洗澡| 亚洲另类色综合网站| 久久精品日韩一区二区三区| 69成人精品免费视频| 91在线播放网址| 国产mv日韩mv欧美| 美女mm1313爽爽久久久蜜臀| 亚洲制服丝袜在线| 国产精品久久久久影院亚瑟| 久久久99免费| 欧美电视剧在线观看完整版| 欧美精品一二三区| 欧美亚洲国产一区在线观看网站 | 日韩av中文在线观看| 一区二区免费在线| 国产精品美女一区二区| 久久亚洲综合色一区二区三区| 欧美美女视频在线观看| 色哟哟日韩精品| 色综合一区二区三区| 成人一区二区在线观看| 国产在线观看一区二区| 麻豆成人免费电影| 久久精品国产第一区二区三区| 日韩av电影天堂| 日本欧美久久久久免费播放网| 天天做天天摸天天爽国产一区 | 99久久精品免费观看| 国产大片一区二区| 国产黄人亚洲片| 国产suv精品一区二区三区| 国产乱码一区二区三区| 国产揄拍国内精品对白| 国产成人一区在线| 成人免费视频网站在线观看| 成人午夜av在线| 91年精品国产| 欧美性淫爽ww久久久久无| 欧美影院一区二区| 欧美日韩免费高清一区色橹橹| 91超碰这里只有精品国产| 欧美一区二区三区男人的天堂| 91精品国产一区二区三区| 日韩三级中文字幕| 26uuu成人网一区二区三区| 国产亚洲精品7777| 1区2区3区国产精品| 一区二区不卡在线播放| 午夜欧美一区二区三区在线播放| 日本伊人精品一区二区三区观看方式 | 亚洲另类中文字| 亚洲国产视频a| 久久精品国产亚洲高清剧情介绍 | 91国产福利在线| 欧美日韩一区二区三区视频| 91精品国产乱| 日本一区二区三区四区在线视频 | 色综合久久综合网97色综合| 欧美色视频在线| 久久一区二区三区四区| 亚洲欧美日韩国产手机在线 | 久久66热偷产精品| 成人性生交大片免费看中文网站| 99久久久国产精品免费蜜臀| 欧美日韩国产首页| 国产欧美一区二区精品性色 | 国产日韩v精品一区二区| 一区二区中文视频| 日本特黄久久久高潮| 成人永久aaa| 欧美一级日韩不卡播放免费| 国产精品毛片a∨一区二区三区 | 色婷婷综合久色| 欧美高清视频一二三区| 中文在线一区二区 | 欧美日韩精品一区二区三区四区 | 91亚洲精品久久久蜜桃| 日韩欧美一级二级三级| 亚洲欧洲av另类| 黑人精品欧美一区二区蜜桃| 91国偷自产一区二区开放时间 | 午夜精品久久久久久不卡8050| 九九视频精品免费| 在线观看欧美精品| 日本一区二区动态图| 日韩不卡一区二区| 色综合夜色一区| 国产精品麻豆视频| 国产在线精品视频| 日韩一区二区三区在线视频| 亚洲三级电影网站| 粉嫩高潮美女一区二区三区| 日韩一区二区三区电影| 亚洲国产精品久久久男人的天堂 | 精品一区二区三区视频| 欧美日韩精品专区| 亚洲精品欧美在线| www.亚洲精品| 国产日产欧美精品一区二区三区| 六月丁香婷婷色狠狠久久| 欧美日韩免费高清一区色橹橹| 亚洲精品网站在线观看| 成人av网在线| 欧美激情一区三区| 国产成人一区在线| 国产亚洲综合在线| 国模大尺度一区二区三区| 日韩一区二区影院| 免费观看日韩av| 日韩免费成人网| 久久99深爱久久99精品| 日韩一区二区电影在线| 蜜臀av一区二区在线免费观看|