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

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

?? ax88180.c

?? 網絡ax88180linux下的驅動
?? C
?? 第 1 頁 / 共 4 頁
字號:
			if (pax88180_local->JumboFlag == ENABLE_JUMBO) {				PRINTK(DRIVER_MSG, "ax88180: Enable Jumbo Frame function.\n");				maccfg1_val |= RXJUMBO_EN | JUMBO_LEN_15K;				global_dev->mtu = MAX_JUMBO_MTU;			}			break;		case MEDIA_1000HALF:			PRINTK(DRIVER_MSG, "ax88180: Set to 1000Mbps Half-duplex mode.\n");			pax88180_local->LineSpeed = SPEED_1000;			pax88180_local->DuplexMode = DUPLEX_HALF;			rxcfg_val = DEFAULT_RXCFG;			maccfg0_val = DEFAULT_MACCFG0;			maccfg1_val = GIGA_MODE_EN | DEFAULT_MACCFG1;			global_dev->mtu = DEFAULT_ETH_MTU;			break;		case MEDIA_100FULL:			PRINTK(DRIVER_MSG, "ax88180: Set to 100Mbps Full-duplex mode.\n");			pax88180_local->LineSpeed = SPEED_100;			pax88180_local->DuplexMode = DUPLEX_FULL;			rxcfg_val = RXFLOW_ENABLE | DEFAULT_RXCFG;			maccfg0_val = SPEED100 | TXFLOW_ENABLE | DEFAULT_MACCFG0;			maccfg1_val = RXFLOW_EN | FULLDUPLEX | DEFAULT_MACCFG1;			global_dev->mtu = DEFAULT_ETH_MTU;			break;		case MEDIA_100HALF:			PRINTK(DRIVER_MSG, "ax88180: Set to 100Mbps Half-duplex mode.\n");			pax88180_local->LineSpeed = SPEED_100;			pax88180_local->DuplexMode = DUPLEX_HALF;			rxcfg_val = DEFAULT_RXCFG;			maccfg0_val = SPEED100 | DEFAULT_MACCFG0;			maccfg1_val = DEFAULT_MACCFG1;			global_dev->mtu = DEFAULT_ETH_MTU;			break;		case MEDIA_10FULL:			PRINTK(DRIVER_MSG, "ax88180: Set to 10Mbps Full-duplex mode.\n");			pax88180_local->LineSpeed = SPEED_10;			pax88180_local->DuplexMode = DUPLEX_FULL;			rxcfg_val = RXFLOW_ENABLE | DEFAULT_RXCFG;			maccfg0_val = TXFLOW_ENABLE | DEFAULT_MACCFG0;			maccfg1_val = RXFLOW_EN | FULLDUPLEX | DEFAULT_MACCFG1;			global_dev->mtu = DEFAULT_ETH_MTU;			break;		case MEDIA_10HALF:			PRINTK(DRIVER_MSG, "ax88180: Set to 10Mbps Half-duplex mode.\n");			pax88180_local->LineSpeed = SPEED_10;			pax88180_local->DuplexMode = DUPLEX_HALF;			rxcfg_val = DEFAULT_RXCFG;			maccfg0_val = DEFAULT_MACCFG0;			maccfg1_val = DEFAULT_MACCFG1;			global_dev->mtu = DEFAULT_ETH_MTU;			break;		} 	} else {		PRINTK(INIT_MSG, "ax88180: The cable is disconnected!!\n");		/* Set to default media mode (1000FULL) */  		pax88180_local->LineSpeed = SPEED_1000;		pax88180_local->DuplexMode = DUPLEX_FULL;		rxcfg_val = RXFLOW_ENABLE | DEFAULT_RXCFG;		maccfg0_val = TXFLOW_ENABLE | DEFAULT_MACCFG0;		maccfg1_val = GIGA_MODE_EN | RXFLOW_EN | FULLDUPLEX | DEFAULT_MACCFG1;		if (pax88180_local->JumboFlag == ENABLE_JUMBO) {			maccfg1_val |= RXJUMBO_EN | JUMBO_LEN_15K;			global_dev->mtu = MAX_JUMBO_MTU;		}	}	WRITE_MACREG(RXCFG, rxcfg_val);	WRITE_MACREG(MACCFG0, maccfg0_val);	WRITE_MACREG(MACCFG1, maccfg1_val);	PRINTK(INIT_MSG, "ax88180: ax88180_meida_config end ..........\n");	return;}/* ***************************************************************************** * get_MarvellPHY_meida_mode() * * Get real media mode of Marvell 88E1111 PHY. * ***************************************************************************** */static void get_MarvellPHY_meida_mode(struct net_device *global_dev){	struct _AX88180_PRIVATE *pax88180_local;	unsigned long m88_ssr;	int i;	pax88180_local = (struct _AX88180_PRIVATE *) global_dev->priv;	PRINTK(INIT_MSG, "ax88180: get_MarvellPHY_meida_mode beginning ..........\n");	/* Get the real media mode */	for (i = 0; i < 200; i++) {		READ_PHYREG(pax88180_local->PhyAddr, M88_SSR, m88_ssr);		if (m88_ssr & SSR_MEDIA_RESOLVED_OK) {			break;		}		mdelay(1);	}	READ_PHYREG(pax88180_local->PhyAddr, M88_SSR, m88_ssr);	switch (m88_ssr & SSR_MEDIA_MASK) {	default:	case SSR_1000FULL:		pax88180_local->RealMediaMode = MEDIA_1000FULL;		break;	case SSR_1000HALF:		pax88180_local->RealMediaMode = MEDIA_1000HALF;		break;	case SSR_100FULL:		pax88180_local->RealMediaMode = MEDIA_100FULL;		break;	case SSR_100HALF:		pax88180_local->RealMediaMode = MEDIA_100HALF;		break;	case SSR_10FULL:		pax88180_local->RealMediaMode = MEDIA_10FULL;		break;	case SSR_10HALF:		pax88180_local->RealMediaMode = MEDIA_10HALF;		break;	} 	PRINTK(INIT_MSG, "ax88180: get_MarvellPHY_meida_mode end ..........\n");	return;}/* ***************************************************************************** * get_CicadaPHY_meida_mode() * * Get real media mode of CICADA CIS8201 PHY. * ***************************************************************************** */static void get_CicadaPHY_meida_mode(struct net_device *global_dev){	struct _AX88180_PRIVATE *pax88180_local;	unsigned long tmp_regval;	pax88180_local = (struct _AX88180_PRIVATE *) global_dev->priv;	PRINTK(INIT_MSG, "ax88180: get_CicadaPHY_meida_mode beginning ..........\n");	READ_PHYREG(pax88180_local->PhyAddr, CIS_AUX_CTRL_STATUS, tmp_regval);	switch (tmp_regval & CIS_MEDIA_MASK) {	default:	case CIS_1000FULL:		pax88180_local->RealMediaMode = MEDIA_1000FULL;		break;	case CIS_1000HALF:		pax88180_local->RealMediaMode = MEDIA_1000HALF;		break;	case CIS_100FULL:		pax88180_local->RealMediaMode = MEDIA_100FULL;		break;	case CIS_100HALF:		pax88180_local->RealMediaMode = MEDIA_100HALF;		break;	case CIS_10FULL:		pax88180_local->RealMediaMode = MEDIA_10FULL;		break;	case CIS_10HALF:		pax88180_local->RealMediaMode = MEDIA_10HALF;		break;	} 	PRINTK(INIT_MSG, "ax88180: get_CicadaPHY_meida_mode end ..........\n");	return;}/* ***************************************************************************** * ax88180_rx_handler() * * Handle packets received completion interrupt event.  * ***************************************************************************** */static void ax88180_rx_handler(struct net_device *global_dev){	struct _AX88180_PRIVATE *pax88180_local;	struct sk_buff *skb;	unsigned char *rxdata;//	unsigned long tmp_data;	unsigned long rx_packet_len;	unsigned int data_size;//	unsigned int dword_count, byte_count;	unsigned long rxcurt_ptr, rxbound_ptr, next_ptr;	int i;//	int j;	pax88180_local = (struct _AX88180_PRIVATE *) global_dev->priv;	PRINTK(RX_MSG, "ax88180: ax88180_rx_handler beginning ..........\n");//	spin_lock_irq(&pax88180_local->lock);	READ_MACREG(RXCURT, rxcurt_ptr);	READ_MACREG(RXBOUND, rxbound_ptr);	next_ptr = (rxbound_ptr + 1) & RX_PAGE_NUM_MASK;	PRINTK(RX_MSG, "ax88180: RX original RXBOUND=0x%08lx, RXCURT=0x%08lx\n", rxbound_ptr, rxcurt_ptr);	while (next_ptr != rxcurt_ptr) {		START_READ_RXBUFF;		READ_RXBUF(rx_packet_len); 	  	if ( (rx_packet_len == 0) || (rx_packet_len > MAX_RX_SIZE) ) {			pax88180_local->stats.rx_errors++;			STOP_READ_RXBUFF;			RESET_MAC;			PRINTK(ERROR_MSG, "ax88180: Invalid Rx packet length!! (len=0x%08lx)\n", rx_packet_len);			PRINTK(ERROR_MSG, "ax88180: RX RXBOUND=0x%08lx, RXCURT=0x%08lx\n", rxbound_ptr, rxcurt_ptr);			PRINTK(RX_MSG, "ax88180: ax88180_rx_handler fail end ..........\n");			return;		}		data_size = (unsigned int)rx_packet_len;		rxbound_ptr += (((data_size + 0xF) & 0xFFF0) >> 4) + 1;		rxbound_ptr &= RX_PAGE_NUM_MASK;		skb = dev_alloc_skb(data_size + 2);		if (skb == NULL) {			pax88180_local->stats.rx_dropped++;			STOP_READ_RXBUFF;			PRINTK(ERROR_MSG, "ax88180: No available memory space. Dropping RX packets!!\n");			PRINTK(RX_MSG, "ax88180: ax88180_rx_handler fail end ..........\n");			return;		}		skb->data = skb->head;		skb->tail = skb->head;		skb_reserve(skb, 2);		skb->dev = global_dev;		rxdata = skb_put(skb, data_size);		memcpy (pax88180_local->rx_buf, (void *)(Log_MemBase + RXBUFFER_START), (data_size + 4 - data_size%4));		memcpy (rxdata, pax88180_local->rx_buf, data_size);/*		dword_count = data_size >> 2;		byte_count = data_size & 0x3;		for (i = 0; i < dword_count; i++) {			READ_RXBUF(tmp_data);			*((unsigned long *)rxdata + i)= tmp_data;		}		if (byte_count != 0) {			READ_RXBUF(tmp_data);			for (j = 0; j < byte_count; j++) {				*(rxdata + (dword_count * 4) + j) = (unsigned char)(tmp_data >> (j *8));			}		}*/		STOP_READ_RXBUFF;		skb->protocol = eth_type_trans(skb, global_dev);		netif_rx(skb);		global_dev->last_rx = jiffies;		pax88180_local->stats.rx_packets++;		pax88180_local->stats.rx_bytes += data_size;		WRITE_MACREG(RXBOUND, rxbound_ptr);		PRINTK(DEBUG_MSG, "ax88180: Rx data size = 0x%x\n", data_size);		PRINTK(DEBUG_MSG, "[");		for (i = 0; i < data_size; i++) {			PRINTK(DEBUG_MSG, "0x%02x ", *(rxdata + i));			if ( (i & 0xF) == 0xF )				PRINTK(DEBUG_MSG, "\n");		}		PRINTK(DEBUG_MSG, "]\n");		READ_MACREG(RXCURT, rxcurt_ptr);		READ_MACREG(RXBOUND, rxbound_ptr);		next_ptr = (rxbound_ptr + 1) & RX_PAGE_NUM_MASK;		PRINTK(RX_MSG, "ax88180: RX updated RXBOUND=0x%08lx, RXCURT=0x%08lx\n", 			rxbound_ptr, rxcurt_ptr);	}	if (pax88180_local->rxbuf_overflow_count > 0)		pax88180_local->rxbuf_overflow_count--;//	spin_unlock_irq(&pax88180_local->lock);	PRINTK(RX_MSG, "ax88180: ax88180_rx_handler end ..........\n");	return;}/* ***************************************************************************** * ax88180_tx_handler() * * Handle packets transmitted completion interrupt event.  * ***************************************************************************** */static void ax88180_tx_handler(struct net_device *global_dev){	struct _AX88180_PRIVATE *pax88180_local;	pax88180_local = (struct _AX88180_PRIVATE *) global_dev->priv;	PRINTK(TX_MSG, "ax88180: ax88180_tx_handler beginning ..........\n");	/* Inform upper layer to send next queued packets now */	netif_wake_queue(global_dev);	PRINTK(TX_MSG, "ax88180: ax88180_tx_handler end ..........\n");	return;}#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)/* ***************************************************************************** * ax88180_ioctl() * * Handle the ioctl commands like ethtool. * *****************************************************************************  */static int ax88180_ioctl(struct net_device *global_dev, struct ifreq *rq, int cmd){	PRINTK(OTHERS_MSG, "ax88180: ax88180_ioctl beginning ..........\n");	switch(cmd) {	case SIOCETHTOOL:		return ax88180_ethtool_ioctl(global_dev, (void*)rq->ifr_data); 	default:		return -EOPNOTSUPP;	}	PRINTK(OTHERS_MSG, "ax88180: ax88180_ioctl end ..........\n");}/* ***************************************************************************** * ax88180_ethtool_ioctl() * * Handle the ethtool ioctl command. * *****************************************************************************  */static int ax88180_ethtool_ioctl(struct net_device *global_dev, void *useraddr){	struct _AX88180_PRIVATE *pax88180_local;	u32 ethcmd;	pax88180_local = (struct _AX88180_PRIVATE *) global_dev->priv;	PRINTK(OTHERS_MSG, "ax88180: ax88180_ethtool_ioctl beginning ..........\n");	if (copy_from_user(&ethcmd, useraddr, sizeof(ethcmd))) 		return -EFAULT;	switch (ethcmd) {	case ETHTOOL_GDRVINFO: {		struct ethtool_drvinfo info = { ETHTOOL_GDRVINFO };		strcpy(info.driver, DRV_NAME);		strcpy(info.version, DRV_VERSION);		if (copy_to_user(useraddr, &info, sizeof(info)))			return -EFAULT;		return 0;	}	case ETHTOOL_GSET: {		struct ethtool_cmd ecmd = { ETHTOOL_GSET };		spin_lock_irq(&pax88180_local->lock);		mii_ethtool_gset(&pax88180_local->mii_if, &ecmd);		spin_unlock_irq(&pax88180_local->lock);		if (copy_to_user(useraddr, &ecmd, sizeof(ecmd)))			return -EFAULT;		return 0;	}	case ETHTOOL_SSET: {		int r;		struct ethtool_cmd ecmd;		if (copy_from_user(&ecmd, useraddr, sizeof(ecmd)))			return -EFAULT;		spin_lock_irq(&pax88180_local->lock);		r = mii_ethtool_sset(&pax88180_local->mii_if, &ecmd);		spin_unlock_irq(&pax88180_local->lock);		return r;	}	case ETHTOOL_NWAY_RST: {		return mii_nway_restart(&pax88180_local->mii_if);	}	case ETHTOOL_GLINK: {		struct ethtool_value edata = {ETHTOOL_GLINK};		edata.data = mii_link_ok(&pax88180_local->mii_if);		if (copy_to_user(useraddr, &edata, sizeof(edata)))			return -EFAULT;		return 0;	}	default:		break;	}	PRINTK(OTHERS_MSG, "ax88180: ax88180_ethtool_ioctl end ..........\n");	return -EOPNOTSUPP;}/* ***************************************************************************** * mdio_read() * *  * *****************************************************************************  */static int mdio_read(struct net_device *global_dev, int phy_id, int regaddr){	unsigned int regval;	READ_PHYREG(phy_id, regaddr, regval);	PRINTK(DEBUG_MSG, "ax88180: mdio_read regval=0x%04x\n", regval);	return regval;}/* ***************************************************************************** * mdio_write() * *  * *****************************************************************************  */static void mdio_write(struct net_device *global_dev, int phy_id, int regaddr, int regval){	WRITE_PHYREG(phy_id, (unsigned long)regaddr, (unsigned long)regval);	//allan9 add for debugging	READ_PHYREG(phy_id, regaddr, regval);	PRINTK(DEBUG_MSG, "ax88180: mdio_write regval=0x%04x\n", regval);	return;}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人精品免费看| 国产最新精品精品你懂的| 久久久久久黄色| 久久久影视传媒| 亚洲素人一区二区| 国产精品成人一区二区三区夜夜夜| 久久久夜色精品亚洲| 久久久久一区二区三区四区| 国产欧美日韩精品a在线观看| 国产日产欧美一区二区三区 | 伊人婷婷欧美激情| 一二三四社区欧美黄| 日本欧美在线看| 国产盗摄女厕一区二区三区| 99久久精品免费看国产| 99精品视频在线播放观看| 欧美精品色一区二区三区| 久久夜色精品一区| 成人免费一区二区三区视频| 五月天一区二区| 91丝袜美女网| 国产一区二区三区蝌蚪| 免费观看30秒视频久久| 国产一区二区导航在线播放| 337p日本欧洲亚洲大胆色噜噜| 欧美日韩国产片| 国产性色一区二区| 日一区二区三区| 91农村精品一区二区在线| 欧美精品一区二区久久婷婷| 日韩理论片一区二区| 国产乱码精品一区二区三| 欧美日韩国产在线观看| 亚洲欧美日韩国产一区二区三区 | 欧美日韩国产欧美日美国产精品| 制服丝袜av成人在线看| 亚洲精品乱码久久久久久| 丁香啪啪综合成人亚洲小说| 精品国产电影一区二区| 免费成人美女在线观看.| 欧美一区二区高清| 天天综合日日夜夜精品| 欧美人与禽zozo性伦| 亚洲最大成人综合| 色婷婷综合在线| 午夜精品福利一区二区三区av| 91国偷自产一区二区开放时间| 国产精品无圣光一区二区| 国产福利91精品一区| 国产视频亚洲色图| 色综合天天综合| 午夜精品久久久久久久久久| 51久久夜色精品国产麻豆| 日本不卡的三区四区五区| 欧美xxxx在线观看| 成人国产精品视频| 亚洲综合在线五月| 精品欧美一区二区久久| 不卡欧美aaaaa| 视频一区欧美日韩| 国产亚洲欧美激情| 欧美日韩高清在线播放| 国产精品系列在线播放| 一区二区日韩电影| 精品美女被调教视频大全网站| 成人黄色电影在线| 青青国产91久久久久久| 亚洲免费在线观看视频| 久久亚洲免费视频| 欧美日韩在线直播| 国产精品一区二区久久精品爱涩 | 国产精品一区二区久激情瑜伽| 国产精品美女久久久久aⅴ| 5566中文字幕一区二区电影| 91麻豆国产福利在线观看| 国产麻豆精品95视频| 奇米综合一区二区三区精品视频| 中文字幕一区二区三中文字幕| 欧美成人精品1314www| 欧美在线小视频| 在线观看国产91| 91黄视频在线| 在线亚洲一区二区| 91无套直看片红桃| 成人黄色777网| 91首页免费视频| 波多野结衣欧美| 波多野结衣亚洲| 91一区一区三区| 欧美日韩国产电影| 国产麻豆午夜三级精品| 卡一卡二国产精品 | 337p亚洲精品色噜噜| 在线不卡中文字幕播放| 日韩欧美在线综合网| 欧美xxxxxxxxx| 国产精品午夜免费| 亚洲人被黑人高潮完整版| 一区二区三区精品在线观看| 亚洲电影第三页| 蜜桃视频免费观看一区| 国产福利一区二区三区在线视频| av在线播放不卡| 欧美日韩国产高清一区二区三区| 日韩欧美高清dvd碟片| 国产日本一区二区| 亚洲国产精品视频| 精品亚洲porn| 日本韩国欧美三级| 久久精品人人做人人爽97| 夜夜嗨av一区二区三区网页| 亚洲一区二区不卡免费| 六月丁香婷婷久久| 精品视频在线免费| 日本一区二区三区久久久久久久久不 | 欧美va亚洲va| 亚洲国产成人av网| 成人激情免费电影网址| 91麻豆精品国产91久久久资源速度 | 国产精品对白交换视频 | 精品国产123| 午夜视黄欧洲亚洲| 91蜜桃传媒精品久久久一区二区| 精品国产91乱码一区二区三区| 一区二区在线观看免费 | 亚洲欧美综合色| 国产成人8x视频一区二区| 欧美不卡一二三| 免费人成在线不卡| 91精品国产福利| 日本亚洲欧美天堂免费| 色噜噜夜夜夜综合网| 亚洲精品成人少妇| 欧美三级乱人伦电影| 亚洲一二三区在线观看| 欧美视频第二页| 日韩主播视频在线| 日韩精品在线一区二区| 极品销魂美女一区二区三区| 日韩视频一区二区三区在线播放| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美电影免费观看高清完整版| 精品一区二区三区免费观看| 国产欧美一区二区精品性色| 成人久久视频在线观看| 一区二区久久久| 欧美成人精品福利| 99国产精品久久| 日本午夜精品一区二区三区电影 | 青草国产精品久久久久久| 欧美激情中文不卡| 欧美亚洲综合另类| 国产美女精品在线| 亚洲激情自拍视频| 26uuu精品一区二区在线观看| 不卡视频免费播放| 国产老肥熟一区二区三区| 亚洲小少妇裸体bbw| 国产日韩欧美激情| 日韩西西人体444www| 色婷婷综合久色| 99精品视频一区| 精品一区二区三区免费观看| 亚洲二区视频在线| 国产精品免费av| 国产三级一区二区| 精品日韩一区二区三区免费视频| 91成人免费网站| 91久久免费观看| 99在线热播精品免费| 国产成人精品影视| 九色porny丨国产精品| 日本视频一区二区| 午夜伦欧美伦电影理论片| 亚洲免费观看高清完整版在线观看 | 亚洲综合色在线| 亚洲图片有声小说| 一区二区三区自拍| 国产精品毛片久久久久久| 国产欧美一区二区三区鸳鸯浴| 日韩一区二区免费高清| 9191成人精品久久| 精品国精品国产| 久久亚洲影视婷婷| 精品人在线二区三区| 日本福利一区二区| 91精品国产综合久久婷婷香蕉 | 久久久久久毛片| 国产精品女主播av| 午夜电影网一区| 精品在线视频一区| 91香蕉视频mp4| 欧美一二区视频| 亚洲欧美综合色| 日本vs亚洲vs韩国一区三区| 国产成人免费在线观看| 在线视频一区二区三区| 欧美大白屁股肥臀xxxxxx| 亚洲视频一区二区在线观看| 日日摸夜夜添夜夜添国产精品|