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

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

?? pcnet_cs.c

?? pcmcia驅動源代碼,直接可以在linux2.6下使用 !
?? C
?? 第 1 頁 / 共 5 頁
字號:
======================================================================*/static int pcnet_suspend(struct pcmcia_device *link){	struct net_device *dev = link->priv;	if (link->open)		netif_device_detach(dev);	return 0;}static int pcnet_resume(struct pcmcia_device *link){	struct net_device *dev = link->priv;	if (link->open) {		pcnet_reset_8390(dev);		NS8390_init(dev, 1);		netif_device_attach(dev);	}	return 0;}/*======================================================================    MII interface support for DL10019 and DL10022 based cards    On the DL10019, the MII IO direction bit is 0x10; on the DL10022    it is 0x20.  Setting both bits seems to work on both card types.======================================================================*/#define DLINK_GPIO		0x1c#define DLINK_DIAG		0x1d#define DLINK_EEPROM		0x1e#define MDIO_SHIFT_CLK		0x80#define MDIO_DATA_OUT		0x40#define MDIO_DIR_WRITE		0x30#define MDIO_DATA_WRITE0	(MDIO_DIR_WRITE)#define MDIO_DATA_WRITE1	(MDIO_DIR_WRITE | MDIO_DATA_OUT)#define MDIO_DATA_READ		0x10#define MDIO_MASK		0x0fstatic void mdio_sync(kio_addr_t addr){    int bits, mask = inb(addr) & MDIO_MASK;    for (bits = 0; bits < 32; bits++) {	outb(mask | MDIO_DATA_WRITE1, addr);	outb(mask | MDIO_DATA_WRITE1 | MDIO_SHIFT_CLK, addr);    }}static int mdio_read(kio_addr_t addr, int phy_id, int loc){    u_int cmd = (0x06<<10)|(phy_id<<5)|loc;    int i, retval = 0, mask = inb(addr) & MDIO_MASK;    mdio_sync(addr);    for (i = 13; i >= 0; i--) {	int dat = (cmd&(1<<i)) ? MDIO_DATA_WRITE1 : MDIO_DATA_WRITE0;	outb(mask | dat, addr);	outb(mask | dat | MDIO_SHIFT_CLK, addr);    }    for (i = 19; i > 0; i--) {	outb(mask, addr);	retval = (retval << 1) | ((inb(addr) & MDIO_DATA_READ) != 0);	outb(mask | MDIO_SHIFT_CLK, addr);    }    return (retval>>1) & 0xffff;}static void mdio_write(kio_addr_t addr, int phy_id, int loc, int value){    u_int cmd = (0x05<<28)|(phy_id<<23)|(loc<<18)|(1<<17)|value;    int i, mask = inb(addr) & MDIO_MASK;    mdio_sync(addr);    for (i = 31; i >= 0; i--) {	int dat = (cmd&(1<<i)) ? MDIO_DATA_WRITE1 : MDIO_DATA_WRITE0;	outb(mask | dat, addr);	outb(mask | dat | MDIO_SHIFT_CLK, addr);    }    for (i = 1; i >= 0; i--) {	outb(mask, addr);	outb(mask | MDIO_SHIFT_CLK, addr);    }}/*======================================================================    EEPROM access routines for DL10019 and DL10022 based cards======================================================================*/#define EE_EEP		0x40#define EE_ASIC		0x10#define EE_CS		0x08#define EE_CK		0x04#define EE_DO		0x02#define EE_DI		0x01#define EE_ADOT		0x01	/* DataOut for ASIC */#define EE_READ_CMD	0x06#define DL19FDUPLX	0x0400	/* DL10019 Full duplex mode */static int read_eeprom(kio_addr_t ioaddr, int location){    int i, retval = 0;    kio_addr_t ee_addr = ioaddr + DLINK_EEPROM;    int read_cmd = location | (EE_READ_CMD << 8);    outb(0, ee_addr);    outb(EE_EEP|EE_CS, ee_addr);    /* Shift the read command bits out. */    for (i = 10; i >= 0; i--) {	short dataval = (read_cmd & (1 << i)) ? EE_DO : 0;	outb_p(EE_EEP|EE_CS|dataval, ee_addr);	outb_p(EE_EEP|EE_CS|dataval|EE_CK, ee_addr);    }    outb(EE_EEP|EE_CS, ee_addr);    for (i = 16; i > 0; i--) {	outb_p(EE_EEP|EE_CS | EE_CK, ee_addr);	retval = (retval << 1) | ((inb(ee_addr) & EE_DI) ? 1 : 0);	outb_p(EE_EEP|EE_CS, ee_addr);    }    /* Terminate the EEPROM access. */    outb(0, ee_addr);    return retval;}/*    The internal ASIC registers can be changed by EEPROM READ access    with EE_ASIC bit set.    In ASIC mode, EE_ADOT is used to output the data to the ASIC.*/static void write_asic(kio_addr_t ioaddr, int location, short asic_data){	int i;	kio_addr_t ee_addr = ioaddr + DLINK_EEPROM;	short dataval;	int read_cmd = location | (EE_READ_CMD << 8);	asic_data |= read_eeprom(ioaddr, location);	outb(0, ee_addr);	outb(EE_ASIC|EE_CS|EE_DI, ee_addr);	read_cmd = read_cmd >> 1;	/* Shift the read command bits out. */	for (i = 9; i >= 0; i--) {		dataval = (read_cmd & (1 << i)) ? EE_DO : 0;		outb_p(EE_ASIC|EE_CS|EE_DI|dataval, ee_addr);		outb_p(EE_ASIC|EE_CS|EE_DI|dataval|EE_CK, ee_addr);		outb_p(EE_ASIC|EE_CS|EE_DI|dataval, ee_addr);	}	// sync	outb(EE_ASIC|EE_CS, ee_addr);	outb(EE_ASIC|EE_CS|EE_CK, ee_addr);	outb(EE_ASIC|EE_CS, ee_addr);	for (i = 15; i >= 0; i--) {		dataval = (asic_data & (1 << i)) ? EE_ADOT : 0;		outb_p(EE_ASIC|EE_CS|dataval, ee_addr);		outb_p(EE_ASIC|EE_CS|dataval|EE_CK, ee_addr);		outb_p(EE_ASIC|EE_CS|dataval, ee_addr);	}	/* Terminate the ASIC access. */	outb(EE_ASIC|EE_DI, ee_addr);	outb(EE_ASIC|EE_DI| EE_CK, ee_addr);	outb(EE_ASIC|EE_DI, ee_addr);	outb(0, ee_addr);}/*====================================================================*/static void set_misc_reg(struct net_device *dev){    kio_addr_t nic_base = dev->base_addr;    pcnet_dev_t *info = PRIV(dev);    u_char tmp;    if (info->flags & HAS_MISC_REG) {	tmp = inb_p(nic_base + PCNET_MISC) & ~3;	if (dev->if_port == 2)	    tmp |= 1;	if (info->flags & USE_BIG_BUF)	    tmp |= 2;	if (info->flags & HAS_IBM_MISC)	    tmp |= 8;	outb_p(tmp, nic_base + PCNET_MISC);    }    if (info->flags & IS_DL10022) {	if (info->flags & HAS_MII) {	    /* Advertise 100F, 100H, 10F, 10H */	    mdio_write(nic_base + DLINK_GPIO, info->eth_phy, 4, 0x01e1);	    /* Restart MII autonegotiation */	    mdio_write(nic_base + DLINK_GPIO, info->eth_phy, 0, 0x0000);	    mdio_write(nic_base + DLINK_GPIO, info->eth_phy, 0, 0x1200);	    info->mii_reset = jiffies;	} else {	    outb(full_duplex ? 4 : 0, nic_base + DLINK_DIAG);	}    } else if (info->flags & IS_DL10019) {	/* Advertise 100F, 100H, 10F, 10H */	mdio_write(nic_base + DLINK_GPIO, info->eth_phy, 4, 0x01e1);	/* Restart MII autonegotiation */	mdio_write(nic_base + DLINK_GPIO, info->eth_phy, 0, 0x0000);	mdio_write(nic_base + DLINK_GPIO, info->eth_phy, 0, 0x1200);    }}/*====================================================================*/static void mii_phy_probe(struct net_device *dev){    pcnet_dev_t *info = PRIV(dev);    kio_addr_t mii_addr = dev->base_addr + DLINK_GPIO;    int i;    u_int tmp, phyid;    for (i = 31; i >= 0; i--) {	tmp = mdio_read(mii_addr, i, 1);	if ((tmp == 0) || (tmp == 0xffff))	    continue;	tmp = mdio_read(mii_addr, i, MII_PHYID_REG1);	phyid = tmp << 16;	phyid |= mdio_read(mii_addr, i, MII_PHYID_REG2);	phyid &= MII_PHYID_REV_MASK;	DEBUG(0, "%s: MII at %d is 0x%08x\n", dev->name, i, phyid);	if (phyid == AM79C9XX_HOME_PHY) {	    info->pna_phy = i;	} else if (phyid != AM79C9XX_ETH_PHY) {	    info->eth_phy = i;	}    }}static int pcnet_open(struct net_device *dev){    pcnet_dev_t *info = PRIV(dev);    struct pcmcia_device *link = info->p_dev;    DEBUG(2, "pcnet_open('%s')\n", dev->name);    if (!pcmcia_dev_present(link))	return -ENODEV;    link->open++;    set_misc_reg(dev);    request_irq(dev->irq, ei_irq_wrapper, IRQF_SHARED, dev_info, dev);    info->phy_id = info->eth_phy;    info->link_status = 0x00;    init_timer(&info->watchdog);    info->watchdog.function = &ei_watchdog;    info->watchdog.data = (u_long)dev;    info->watchdog.expires = jiffies + HZ;    add_timer(&info->watchdog);    return ei_open(dev);} /* pcnet_open *//*====================================================================*/static int pcnet_close(struct net_device *dev){    pcnet_dev_t *info = PRIV(dev);    struct pcmcia_device *link = info->p_dev;    DEBUG(2, "pcnet_close('%s')\n", dev->name);    ei_close(dev);    free_irq(dev->irq, dev);    link->open--;    netif_stop_queue(dev);    del_timer_sync(&info->watchdog);    return 0;} /* pcnet_close *//*======================================================================    Hard reset the card.  This used to pause for the same period that    a 8390 reset command required, but that shouldn't be necessary.======================================================================*/static void pcnet_reset_8390(struct net_device *dev){    kio_addr_t nic_base = dev->base_addr;    int i;    ei_status.txing = ei_status.dmaing = 0;    outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, nic_base + E8390_CMD);    outb(inb(nic_base + PCNET_RESET), nic_base + PCNET_RESET);    for (i = 0; i < 100; i++) {	if ((inb_p(nic_base+EN0_ISR) & ENISR_RESET) != 0)	    break;	udelay(100);    }    outb_p(ENISR_RESET, nic_base + EN0_ISR); /* Ack intr. */    if (i == 100)	printk(KERN_ERR "%s: pcnet_reset_8390() did not complete.\n",	       dev->name);    set_misc_reg(dev);} /* pcnet_reset_8390 *//*====================================================================*/static int set_config(struct net_device *dev, struct ifmap *map){    pcnet_dev_t *info = PRIV(dev);    if ((map->port != (u_char)(-1)) && (map->port != dev->if_port)) {	if (!(info->flags & HAS_MISC_REG))	    return -EOPNOTSUPP;	else if ((map->port < 1) || (map->port > 2))	    return -EINVAL;	dev->if_port = map->port;	printk(KERN_INFO "%s: switched to %s port\n",	       dev->name, if_names[dev->if_port]);	NS8390_init(dev, 1);    }    return 0;}/*====================================================================*/static irqreturn_t ei_irq_wrapper(int irq, void *dev_id){    struct net_device *dev = dev_id;    pcnet_dev_t *info;    irqreturn_t ret = ei_interrupt(irq, dev_id);    if (ret == IRQ_HANDLED) {	    info = PRIV(dev);	    info->stale = 0;    }    return ret;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品正在播放| 欧美xxxx老人做受| 欧美大片在线观看| 亚洲欧美日韩国产综合| 视频一区视频二区中文字幕| 成人免费毛片高清视频| 日韩你懂的在线观看| 最新日韩av在线| 国产精品一区二区三区乱码| 欧美性感一区二区三区| 国产日韩欧美一区二区三区乱码 | 日韩免费观看高清完整版在线观看| 国产欧美一区二区三区鸳鸯浴 | 欧美经典一区二区| 美日韩黄色大片| 91成人免费在线视频| 中文字幕免费观看一区| 国产一区二区在线免费观看| 欧美精品久久99| 亚洲精品国产视频| 97久久精品人人做人人爽50路| 久久综合狠狠综合久久综合88 | 国内成人免费视频| 欧美精三区欧美精三区| 中文字幕中文在线不卡住| 国产成人亚洲综合a∨婷婷图片 | 在线免费观看成人短视频| 中文字幕一区二区三区不卡在线| 国产一区中文字幕| 久久亚洲一级片| 九九精品一区二区| 精品国产伦一区二区三区观看体验| 性做久久久久久免费观看| 在线免费观看一区| 亚洲一区二区三区中文字幕| 欧美性做爰猛烈叫床潮| 亚洲一区在线观看免费观看电影高清| 日本电影欧美片| 亚洲午夜免费视频| 欧美三级视频在线观看| 亚洲va欧美va天堂v国产综合| 在线视频你懂得一区| 亚洲成av人影院| 欧美一级片在线观看| 日韩高清电影一区| 欧美xxxx老人做受| 岛国精品一区二区| 国产精品灌醉下药二区| 色婷婷综合激情| 亚洲国产成人av| 欧美一区二区三区四区五区 | 精品国产一区二区在线观看| 国产乱码精品1区2区3区| 国产欧美日韩综合| eeuss鲁一区二区三区| 亚洲一线二线三线久久久| 91精品在线观看入口| 国产一区二区精品久久91| 国产精品国产自产拍在线| 在线免费观看成人短视频| 青娱乐精品在线视频| 国产性做久久久久久| 欧洲一区二区三区免费视频| 奇米影视在线99精品| 亚洲国产精品传媒在线观看| 欧洲精品在线观看| 精品一二三四区| 中文字幕视频一区| 欧美一区二区播放| eeuss国产一区二区三区| 午夜成人免费视频| 亚洲国产精品99久久久久久久久| 欧美又粗又大又爽| 国产成人在线观看| 视频在线观看一区二区三区| 中文字幕高清不卡| 91精品综合久久久久久| 99视频精品在线| 精品一区中文字幕| 亚洲午夜国产一区99re久久| wwwwww.欧美系列| 欧美日韩中文字幕一区| 福利一区在线观看| 欧美aaaaa成人免费观看视频| 亚洲区小说区图片区qvod| 精品国产一区久久| 欧美精品乱码久久久久久 | 国精品**一区二区三区在线蜜桃| 亚洲欧洲综合另类| 国产欧美一区二区精品久导航 | 国产欧美一区在线| 91精品国产黑色紧身裤美女| 一本高清dvd不卡在线观看| 国产综合久久久久久久久久久久| 五月婷婷激情综合| 亚洲精品久久嫩草网站秘色| 国产日韩av一区| 日韩精品中文字幕一区| 欧美日韩一区二区在线视频| 色88888久久久久久影院野外| 丁香桃色午夜亚洲一区二区三区| 久久成人免费网| 日韩高清电影一区| 亚洲影视在线观看| 国产精品欧美综合在线| 精品日韩99亚洲| 7777女厕盗摄久久久| 欧美日韩视频一区二区| 日本韩国欧美在线| 91日韩一区二区三区| 成人av午夜电影| 成人av动漫在线| 岛国一区二区三区| 不卡高清视频专区| 国产91精品久久久久久久网曝门 | 一个色综合网站| 自拍偷在线精品自拍偷无码专区| 国产视频一区在线播放| 精品日韩一区二区三区| 精品99一区二区| 精品国产乱码久久久久久久| 欧美成人免费网站| 久久精品视频一区| 国产精品欧美一区二区三区| 国产精品理伦片| 一区二区三区在线视频免费| 亚洲风情在线资源站| 日韩高清不卡一区二区| 蜜臀av性久久久久av蜜臀妖精| 韩国精品免费视频| 国产乱理伦片在线观看夜一区| 国产福利一区二区三区视频| av在线不卡电影| 欧美性生活一区| 日韩精品自拍偷拍| 国产精品久久久一本精品| 亚洲综合在线观看视频| 日本一不卡视频| 成人午夜电影网站| 欧美视频在线一区| 欧美sm美女调教| 亚洲欧洲日产国产综合网| 亚洲国产日韩一区二区| 精品一区二区三区免费毛片爱| 成人一区在线看| 在线观看91av| 久久久久国产精品厨房| 亚洲精品视频一区| 蜜臀av性久久久久av蜜臀妖精 | 中文字幕一区二区在线观看| 亚洲综合偷拍欧美一区色| 日韩电影在线看| 国产成人综合在线观看| 欧美日韩激情一区二区三区| 国产婷婷色一区二区三区四区 | 中文字幕在线免费不卡| 午夜精品一区二区三区电影天堂| 国产乱码精品一区二区三区五月婷| 色88888久久久久久影院按摩| 欧美xxxxxxxx| 亚洲永久精品国产| 国产成人99久久亚洲综合精品| 欧美在线影院一区二区| 久久久噜噜噜久久中文字幕色伊伊| 亚洲欧美日韩久久| 国产一区二区在线观看视频| 欧美日韩国产一区| 中文字幕一区二区三区av| 久久激情五月激情| 在线免费精品视频| 国产精品嫩草99a| 激情成人午夜视频| 欧美精品久久99久久在免费线| 国产精品久久久久久久第一福利| 久久精品国产亚洲高清剧情介绍| 91一区二区三区在线观看| 久久嫩草精品久久久精品一| 午夜激情综合网| 欧美亚男人的天堂| 亚洲裸体在线观看| 粉嫩aⅴ一区二区三区四区五区| 欧美一区二区黄色| 五月综合激情网| 欧美视频日韩视频在线观看| 亚洲同性gay激情无套| 国产成人亚洲综合a∨婷婷 | 欧美亚洲图片小说| 综合亚洲深深色噜噜狠狠网站| 国产综合成人久久大片91| 欧美色图天堂网| 亚洲黄色av一区| 色婷婷精品久久二区二区蜜臀av | 久久久国产精品不卡| 美女一区二区视频| 91精品国产综合久久久久| 亚洲在线观看免费视频| 日本韩国欧美在线| 亚洲一区二区三区四区中文字幕| 91免费视频大全| 亚洲精选视频在线|