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

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

?? mii.c

?? IP100A的網(wǎng)卡驅(qū)動(dòng) 希望對(duì)大家有幫助
?? C
字號(hào):
/*	mii.c: MII interface library	Maintained by Jeff Garzik <jgarzik@mandrakesoft.com>	Copyright 2001,2002 Jeff Garzik	Various code came from myson803.c and other files by	Donald Becker.  Copyright:		Written 1998-2002 by Donald Becker.		This software may be used and distributed according		to the terms of the GNU General Public License (GPL),		incorporated herein by reference.  Drivers based on		or derived from this code fall under the GPL and must		retain the authorship, copyright and license notice.		This file is not a complete program and may only be		used when the entire operating system is licensed		under the GPL.		The author may be reached as becker@scyld.com, or C/O		Scyld Computing Corporation		410 Severn Ave., Suite 210		Annapolis MD 21403 */#include <linux/kernel.h>#include <linux/module.h>#include <linux/netdevice.h>#include "ethtool.h"#include "mii.h"int mii_ethtool_gset(struct mii_if_info *mii, struct ethtool_cmd *ecmd){	struct net_device *dev = mii->dev;	u32 advert, bmcr, lpa, nego;	ecmd->supported =	    (SUPPORTED_10baseT_Half | SUPPORTED_10baseT_Full |	     SUPPORTED_100baseT_Half | SUPPORTED_100baseT_Full |	     SUPPORTED_Autoneg | SUPPORTED_TP | SUPPORTED_MII);	/* only supports twisted-pair */	ecmd->port = PORT_MII;	/* only supports internal transceiver */	ecmd->transceiver = XCVR_INTERNAL;	/* this isn't fully supported at higher layers */	ecmd->phy_address = mii->phy_id;	ecmd->advertising = ADVERTISED_TP | ADVERTISED_MII;	advert = mii->mdio_read(dev, mii->phy_id, MII_ADVERTISE);	if (advert & ADVERTISE_10HALF)		ecmd->advertising |= ADVERTISED_10baseT_Half;	if (advert & ADVERTISE_10FULL)		ecmd->advertising |= ADVERTISED_10baseT_Full;	if (advert & ADVERTISE_100HALF)		ecmd->advertising |= ADVERTISED_100baseT_Half;	if (advert & ADVERTISE_100FULL)		ecmd->advertising |= ADVERTISED_100baseT_Full;	bmcr = mii->mdio_read(dev, mii->phy_id, MII_BMCR);	lpa = mii->mdio_read(dev, mii->phy_id, MII_LPA);	if (bmcr & BMCR_ANENABLE) {		ecmd->advertising |= ADVERTISED_Autoneg;		ecmd->autoneg = AUTONEG_ENABLE;				nego = mii_nway_result(advert & lpa);		if (nego == LPA_100FULL || nego == LPA_100HALF)			ecmd->speed = SPEED_100;		else			ecmd->speed = SPEED_10;		if (nego == LPA_100FULL || nego == LPA_10FULL) {			ecmd->duplex = DUPLEX_FULL;			mii->full_duplex = 1;		} else {			ecmd->duplex = DUPLEX_HALF;			mii->full_duplex = 0;		}	} else {		ecmd->autoneg = AUTONEG_DISABLE;		ecmd->speed = (bmcr & BMCR_SPEED100) ? SPEED_100 : SPEED_10;		ecmd->duplex = (bmcr & BMCR_FULLDPLX) ? DUPLEX_FULL : DUPLEX_HALF;	}	/* ignore maxtxpkt, maxrxpkt for now */	return 0;}int mii_ethtool_sset(struct mii_if_info *mii, struct ethtool_cmd *ecmd){	struct net_device *dev = mii->dev;	if (ecmd->speed != SPEED_10 && ecmd->speed != SPEED_100)		return -EINVAL;	if (ecmd->duplex != DUPLEX_HALF && ecmd->duplex != DUPLEX_FULL)		return -EINVAL;	if (ecmd->port != PORT_MII)		return -EINVAL;	if (ecmd->transceiver != XCVR_INTERNAL)		return -EINVAL;	if (ecmd->phy_address != mii->phy_id)		return -EINVAL;	if (ecmd->autoneg != AUTONEG_DISABLE && ecmd->autoneg != AUTONEG_ENABLE)		return -EINVAL;				  	/* ignore supported, maxtxpkt, maxrxpkt */		if (ecmd->autoneg == AUTONEG_ENABLE) {		u32 bmcr, advert, tmp;		if ((ecmd->advertising & (ADVERTISED_10baseT_Half |					  ADVERTISED_10baseT_Full |					  ADVERTISED_100baseT_Half |					  ADVERTISED_100baseT_Full)) == 0)			return -EINVAL;		/* advertise only what has been requested */		advert = mii->mdio_read(dev, mii->phy_id, MII_ADVERTISE);		tmp = advert & ~(ADVERTISE_ALL | ADVERTISE_100BASE4);		if (ADVERTISED_10baseT_Half)			tmp |= ADVERTISE_10HALF;		if (ADVERTISED_10baseT_Full)			tmp |= ADVERTISE_10FULL;		if (ADVERTISED_100baseT_Half)			tmp |= ADVERTISE_100HALF;		if (ADVERTISED_100baseT_Full)			tmp |= ADVERTISE_100FULL;		if (advert != tmp) {			mii->mdio_write(dev, mii->phy_id, MII_ADVERTISE, tmp);			mii->advertising = tmp;		}				/* turn on autonegotiation, and force a renegotiate */		bmcr = mii->mdio_read(dev, mii->phy_id, MII_BMCR);		bmcr |= (BMCR_ANENABLE | BMCR_ANRESTART);		mii->mdio_write(dev, mii->phy_id, MII_BMCR, bmcr);		mii->force_media = 0;	} else {		u32 bmcr, tmp;		/* turn off auto negotiation, set speed and duplexity */		bmcr = mii->mdio_read(dev, mii->phy_id, MII_BMCR);		tmp = bmcr & ~(BMCR_ANENABLE | BMCR_SPEED100 | BMCR_FULLDPLX);		if (ecmd->speed == SPEED_100)			tmp |= BMCR_SPEED100;		if (ecmd->duplex == DUPLEX_FULL) {			tmp |= BMCR_FULLDPLX;			mii->full_duplex = 1;		} else			mii->full_duplex = 0;		if (bmcr != tmp)			mii->mdio_write(dev, mii->phy_id, MII_BMCR, tmp);		mii->force_media = 1;	}	return 0;}int mii_link_ok (struct mii_if_info *mii){	/* first, a dummy read, needed to latch some MII phys */	mii->mdio_read(mii->dev, mii->phy_id, MII_BMSR);	if (mii->mdio_read(mii->dev, mii->phy_id, MII_BMSR) & BMSR_LSTATUS)		return 1;	return 0;}int mii_nway_restart (struct mii_if_info *mii){	int bmcr;	int r = -EINVAL;	/* if autoneg is off, it's an error */	bmcr = mii->mdio_read(mii->dev, mii->phy_id, MII_BMCR);	if (bmcr & BMCR_ANENABLE) {		bmcr |= BMCR_ANRESTART;		mii->mdio_write(mii->dev, mii->phy_id, MII_BMCR, bmcr);		r = 0;	}	return r;}void mii_check_link (struct mii_if_info *mii){	if (mii_link_ok(mii))		netif_carrier_on(mii->dev);	else		netif_carrier_off(mii->dev);}unsigned int mii_check_media (struct mii_if_info *mii,			      unsigned int ok_to_print,			      unsigned int init_media){	unsigned int old_carrier, new_carrier;	int advertise, lpa, media, duplex;	/* if forced media, go no further */	if (mii->force_media)		return 0; /* duplex did not change */	/* check current and old link status */	old_carrier = netif_carrier_ok(mii->dev) ? 1 : 0;	new_carrier = (unsigned int) mii_link_ok(mii);	/* if carrier state did not change, this is a "bounce",	 * just exit as everything is already set correctly	 */	if ((!init_media) && (old_carrier == new_carrier))		return 0; /* duplex did not change */	/* no carrier, nothing much to do */	if (!new_carrier) {		netif_carrier_off(mii->dev);		if (ok_to_print)			printk(KERN_INFO "%s: link down\n", mii->dev->name);		return 0; /* duplex did not change */	}	/*	 * we have carrier, see who's on the other end	 */	netif_carrier_on(mii->dev);	/* get MII advertise and LPA values */	if ((!init_media) && (mii->advertising))		advertise = mii->advertising;	else {		advertise = mii->mdio_read(mii->dev, mii->phy_id, MII_ADVERTISE);		mii->advertising = advertise;	}	lpa = mii->mdio_read(mii->dev, mii->phy_id, MII_LPA);	/* figure out media and duplex from advertise and LPA values */	media = mii_nway_result(lpa & advertise);	duplex = (media & (ADVERTISE_100FULL | ADVERTISE_10FULL)) ? 1 : 0;	if (ok_to_print)		printk(KERN_INFO "%s: link up, %sMbps, %s-duplex, lpa 0x%04X\n",		       mii->dev->name,		       media & (ADVERTISE_100FULL | ADVERTISE_100HALF) ?		       		"100" : "10",		       duplex ? "full" : "half",		       lpa);	if ((init_media) || (mii->full_duplex != duplex)) {		mii->full_duplex = duplex;		return 1; /* duplex changed */	}	return 0; /* duplex did not change */}int generic_mii_ioctl(struct mii_if_info *mii_if,		      struct mii_ioctl_data *mii_data, int cmd,		      unsigned int *duplex_chg_out){	int rc = 0;	unsigned int duplex_changed = 0;	if (duplex_chg_out)		*duplex_chg_out = 0;	mii_data->phy_id &= mii_if->phy_id_mask;	mii_data->reg_num &= mii_if->reg_num_mask;	switch(cmd) {	case SIOCDEVPRIVATE:	/* binary compat, remove in 2.5 */	case SIOCGMIIPHY:		mii_data->phy_id = mii_if->phy_id;		/* fall through */	case SIOCDEVPRIVATE + 1:/* binary compat, remove in 2.5 */	case SIOCGMIIREG:		mii_data->val_out =			mii_if->mdio_read(mii_if->dev, mii_data->phy_id,					  mii_data->reg_num);		break;	case SIOCDEVPRIVATE + 2:/* binary compat, remove in 2.5 */	case SIOCSMIIREG: {		u16 val = mii_data->val_in;		if (!capable(CAP_NET_ADMIN))			return -EPERM;		if (mii_data->phy_id == mii_if->phy_id) {			switch(mii_data->reg_num) {			case MII_BMCR: {				unsigned int new_duplex = 0;				if (val & (BMCR_RESET|BMCR_ANENABLE))					mii_if->force_media = 1;				else					mii_if->force_media = 0;				if (mii_if->force_media &&				    (val & BMCR_FULLDPLX))					new_duplex = 1;				if (mii_if->full_duplex != new_duplex) {					duplex_changed = 1;					mii_if->full_duplex = new_duplex;				}				break;			}			case MII_ADVERTISE:				mii_if->advertising = val;				break;			default:				/* do nothing */				break;			}		}		mii_if->mdio_write(mii_if->dev, mii_data->phy_id,				   mii_data->reg_num, val);		break;	}	default:		rc = -EOPNOTSUPP;		break;	}	if ((rc == 0) && (duplex_chg_out) && (duplex_changed))		*duplex_chg_out = 1;	return rc;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本91福利区| 欧美三级午夜理伦三级中视频| 欧美人妇做爰xxxⅹ性高电影| 亚洲男人的天堂网| 97久久精品人人爽人人爽蜜臀| 国产欧美在线观看一区| 国产高清精品在线| 17c精品麻豆一区二区免费| 国产精品一区不卡| 亚洲女同一区二区| 久久综合久久综合久久| 99riav久久精品riav| 狠狠色丁香九九婷婷综合五月| 欧美国产在线观看| 色婷婷av一区二区三区之一色屋| 亚洲乱码精品一二三四区日韩在线| 在线看日本不卡| 日本美女一区二区三区视频| 久久精品一二三| 91美女蜜桃在线| 人禽交欧美网站| 亚洲成人综合视频| 久久九九影视网| 日韩一区二区三区视频在线 | 91精品国产91久久久久久一区二区| 婷婷国产在线综合| 国产三级精品在线| 日韩一区二区精品在线观看| 欧美日韩一区小说| 欧美亚洲国产一区二区三区va | 亚洲1区2区3区4区| 亚洲精品国产视频| 亚洲丝袜精品丝袜在线| 日韩欧美一级在线播放| 91社区在线播放| 9色porny自拍视频一区二区| 日本美女一区二区三区视频| 亚洲一区二区视频在线观看| 国产婷婷色一区二区三区四区 | 中文字幕在线不卡一区| 国产视频视频一区| 国产婷婷色一区二区三区| 久久久久久久久久久久久夜| 欧美日韩中文国产| 欧美日韩第一区日日骚| 欧美日韩国产天堂| 欧美一区二区三区在线观看视频| 日韩一区二区在线观看| 精品88久久久久88久久久| 欧美在线制服丝袜| 在线观看视频一区二区欧美日韩| 91麻豆国产福利在线观看| 在线欧美日韩精品| 欧美日韩精品系列| 91精品国产日韩91久久久久久| 91精品在线观看入口| 欧美在线免费播放| 欧美精品久久久久久久多人混战| 91丝袜国产在线播放| 日本高清不卡aⅴ免费网站| 成人网男人的天堂| 国产一区二区不卡| 另类欧美日韩国产在线| 亚洲超碰精品一区二区| 免费看欧美美女黄的网站| 国产在线播精品第三| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 久久综合色综合88| 国产精品欧美久久久久无广告| 精品国产人成亚洲区| 日本一区免费视频| 亚洲美女视频一区| 日韩不卡手机在线v区| 国产一区二区三区高清播放| proumb性欧美在线观看| 欧美伊人久久久久久久久影院| 91精品国产美女浴室洗澡无遮挡| 久久久久久久免费视频了| 亚洲男人的天堂一区二区| 免费在线观看不卡| 波多野结衣亚洲一区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 久久97超碰色| 精品一区二区在线播放| 不卡的电影网站| 99久久伊人精品| 日韩一区二区三区电影在线观看| 国产欧美中文在线| 视频一区在线播放| 久久av老司机精品网站导航| 99久久久无码国产精品| 日韩一区二区电影网| 亚洲免费三区一区二区| 国产一区二区三区四| 欧美午夜电影在线播放| 国产视频亚洲色图| 日韩av不卡在线观看| 972aa.com艺术欧美| 久久美女高清视频| 日本欧美在线观看| 色综合久久久久久久| 国产亚洲人成网站| 青青草国产成人99久久| 99久久精品国产导航| 久久久亚洲高清| 免费观看在线色综合| 欧美日韩亚洲综合一区| 国产精品免费看片| 精油按摩中文字幕久久| 欧美日本在线看| 亚洲女厕所小便bbb| 成人精品亚洲人成在线| 精品不卡在线视频| 偷拍亚洲欧洲综合| 欧美三级中文字幕| 亚洲人被黑人高潮完整版| 国产精品123区| 日韩欧美综合一区| 香蕉久久一区二区不卡无毒影院 | 成人一级视频在线观看| 日韩精品一区二区三区四区视频| 水野朝阳av一区二区三区| 97精品视频在线观看自产线路二| 久久久www免费人成精品| 裸体健美xxxx欧美裸体表演| 国产精品91xxx| 精品日韩欧美一区二区| 亚洲宅男天堂在线观看无病毒| 国产sm精品调教视频网站| 欧美福利视频导航| 一区二区三区高清不卡| 国产裸体歌舞团一区二区| 日韩午夜在线播放| 麻豆精品在线观看| 日韩欧美在线不卡| 麻豆国产一区二区| 日韩欧美视频一区| 激情av综合网| 久久这里只有精品视频网| 国产美女精品人人做人人爽| 久久久久9999亚洲精品| 国产成人福利片| 欧美国产日本韩| 91看片淫黄大片一级| 伊人性伊人情综合网| 91黄色激情网站| 日韩专区一卡二卡| 日韩一级免费观看| 黑人巨大精品欧美黑白配亚洲| 久久久久久久久一| bt欧美亚洲午夜电影天堂| 国产精品护士白丝一区av| 国产在线国偷精品产拍免费yy| 久久精品男人天堂av| 成人免费看片app下载| 亚洲欧美另类在线| 欧美图区在线视频| 日本sm残虐另类| 久久久精品国产99久久精品芒果| 成人网在线播放| 一区二区三区四区中文字幕| 欧美日韩不卡一区二区| 精品一区二区三区免费播放| 国产日产欧美一区| 色偷偷久久人人79超碰人人澡| 午夜激情久久久| 欧美岛国在线观看| 9人人澡人人爽人人精品| 亚洲成人精品一区| 久久久久综合网| 91高清视频免费看| 久久国产精品72免费观看| 国产精品丝袜在线| 欧美乱妇15p| 国产一区二区在线看| 尤物在线观看一区| 亚洲精品一区二区精华| 97aⅴ精品视频一二三区| 日韩国产精品久久久| 国产精品亲子乱子伦xxxx裸| 欧美日韩中文国产| 国产99久久久国产精品| 亚洲妇熟xx妇色黄| 欧美一级夜夜爽| 成人a免费在线看| 日韩电影在线一区| 国产精品成人一区二区艾草 | 午夜精品视频一区| 久久久久国产精品人| 欧美日韩精品是欧美日韩精品| 国产精品乡下勾搭老头1| 午夜欧美视频在线观看 | 五月天网站亚洲| 久久亚洲免费视频| 欧美性大战xxxxx久久久| 国产乱人伦精品一区二区在线观看 | 欧美高清视频www夜色资源网| 国产黄色精品视频| 免费一级片91| 亚洲精品美腿丝袜|